asset: 归档第一集已生成镜头与测试素材,排除可再生缓存

This commit is contained in:
2026-10-01 00:35:36 +08:00
parent 0da2659df2
commit f900237d96
1719 changed files with 264761 additions and 0 deletions
@@ -0,0 +1,53 @@
# 14B 排查与画质对比
## 范围与判断边界
作者否定 5B 测试的画质后,同意排查 14B 显存问题、进行同首帧对比并重新校准首帧。只使用 `192.168.10.51:8188` 现有服务、模型与节点;未重启服务、停止其他 GPU 服务、安装节点或下载模型。
使用 ComfyUI / comfy-debug 技能定位执行错误,使用 imagegen 内置工具修订首帧,使用 FFmpeg 技能抽帧与格式检查。原文件保留。
## 可核实的错误证据
- 旧 14B 任务 `182e26dd-a53c-4643-8c88-1a26fbc62674` 在节点 14(低噪 KSamplerAdvanced)报 `torch.OutOfMemoryError`。
- 高噪采样节点 13 已执行;错误栈位于模型加载、权重补丁、`requantize_from_float`、FP8 stochastic rounding 路径。
- 旧工作流使用高噪和低噪两份 4-step LightX2V LoRA。这使 LoRA 权重补丁的量化临时分配成为排查对象,但仅凭错误栈不能断言唯一根因,也不能断言是另一个服务占卡。
- 当前 HTTP API 只提供该 ComfyUI 进程与设备的统计,未读取宿主机 GPU 进程表。
- 发现 `wanBlockSwap` 节点实际上是核心拦截不稳定扩展后的 no-op,不能靠插入它解决内存问题;未使用。
## 新工作流
沿用已保存的官方模板常规分支:高噪/低噪 14B FP8 scaled,**不接加速 LoRA**,20 步,CFG 3.5,Euler/simple,shift 5;前 10 步高噪,后 10 步低噪,Wan 2.1 VAE。保留同一首帧 V01、同一 V02 动作提示词。种子分别记录于各目录 `job.json`,本对比不是同种子、同帧数的严格单变量实验。
| 版本 | 目的 | 尺寸与长度 | 状态 |
|---|---|---|---|
| V02 5B | 已交付基线 | 1024×576,145 帧/24 fps | 已完成 |
| V03 14B | 小规模验证两阶段运行 | 768×432,49 帧/16 fps | 已完成,任务 f6c0810f-5a8a-49eb-8633-4b0c8ba0eeb2 |
| V04 14B | 同尺寸画质与动作对比 | 1024×576,81 帧/16 fps | 已完成,任务 9da75712-dfc8-431c-9c47-6221be7ed021 |
V03 已查看接触表中的 5 张有效抽帧:可见伸手放手机、收回手臂;末格为接触表未填满的背景,不据此判定视频黑帧。V03 仅验证该较小尺寸能跑通,不据此宣称所有分辨率已修复。
## 首帧修订候选
- `first_frame_v02_style_review.png`:内置 image_gen 编辑 V01,用户原画风参考只用于上色与线条。
- `first_frame_v02_prompt.txt`:本次实际完整提示词。
- 保持构图、人物身份、工作服和动作起点;简化衣服小褶皱,提升中间调,明确赛璐璐阴影,移除墙面文字。
- 已查看生成结果,画面更简洁,仍是候选,未获作者批准。为隔离模型输出差异,**V03/V04 仍使用原首帧 V01**。
## 重现
- 短测试:`render_locker.py --take 3`;已提交后只用 `--take 3 --collect`。
- 对比版:`render_locker.py --take 4`;已提交后只用 `--take 4 --collect`。
- 每版包含 API/GUI 工作流、种子、服务快照、历史和输出;远程 Workflows → `hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04.json`。
- `watch_progress.py` 是只读、45 秒有界的 WebSocket 进度监听器,不控制或取消任务。
## V04 结果与判断
- 视频:`V04_14B_画质对比/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04_00001.mp4`。
- 运行成功;从提交到客户端下载结束约 781 秒(约 13 分钟,含轮询/下载等待,不是纯 GPU 计算时间)。
- 实测 5.0625 秒、81 帧、1024×576、16 fps、H.264 High/yuv420p、BT.709;792,278 字节;无音轨、无字幕。
- 格式/内容自动检查 8 项:6 通过、0 失败、2 提示(未制作音轨和字幕);0% 黑场,最长检测冻结 0 秒。
- 已查看 6 帧接触表以及 `compare_5B_left_14B_right_2p5s.png`,后者左 5B、右 14B,均取 2.5 秒,单侧保持 1024×576 原输出尺寸。时间相同不代表动作相位完全相同,不能据此计算像素相似度或宣布模型普遍优劣。
- 视觉判断:放下手机和收回手臂的动作可读;14B 对原图衣服线条/细节的保留略好,但不是质的提升。画风仍偏普通工业场景动画,尚未达到作者给定参考的审美标准。柜门附近出现原首帧没有明确给出的细小金色挂件,属于背景一致性问题;未标为正式镜头。
- 技术判断:在未停其他服务、未重启、未安装节点的情况下,较高尺寸/81 帧的无 LoRA 常规分支成功完成。因此原 4-step LoRA 路径不是当前必须采用的路径,已找到本次可执行的替代方案;不宣称唯一根因已证明或任何尺寸都不会 OOM。
- 后续建议:先由作者确认新的首帧画风候选,再决定继续图生视频;不要仅靠提高分辨率或参数量来宣称达到动画品质。新候选尚未用于 V04。
- 本轮不提交/推送 Git,原图与所有测试版本保留。
@@ -0,0 +1,68 @@
# EP01 SC02:男主收手机——人物动作测试
状态:V01、V02 均已生成并检查;V02 为本次交付的动作测试版。这里只测试一个镜头,不代表第一集已经成片。
后续作者否定 V02 画质。已补做 [14B 排查与画质对比](./14B排查与画质对比.md),V04 14B 跑通但仍未达到正片审美验收;新首帧 `first_frame_v02_style_review.png` 仅为待审候选。
## 剧本依据
采用《S01E01_留给你的那一碗_V05_阅读稿》场景 02:男主给母亲回复后稍等,将手机锁屏、放进柜子、扣上柜门。当前镜头从回复之后开始,不包含打字、删除和重写消息的手机特写。
动作目标:短暂看手机 → 转头、转肩朝向柜子 → 右手把手机放到空隔板 → 抽回空手 → 合上柜门。固定中景,不用镜头平移替代人物动作。无对白、无配乐、无音效。
## 首帧
- 文件:`first_frame_v01.png`。
- 模式:Codex 内置 image_gen,使用角色图和画风图作为双参考;不是 ComfyUI 文生图。
- 人物依据:`02_视觉圣经/角色设定/01_转生前角色/男主_前世/02_生成候选/CHR-PRE-MC-A29-V08-REVIEW.png`。
- 画风依据:`02_视觉圣经/角色设定/画风参考/用户提供_动画画风参考_2026-09-29.png`,只参考绘制质感,不采用图中女性角色。
- 首帧提示词要点:29 岁黑发成年男主,保留原设蓝灰工作服与反光条;夜间工厂更衣室;16:9 固定视平线中景;人物在右、打开的储物柜在左,手机在右手,空隔板和柜门可达;细线稿、硬边赛璐璐阴影、绘画式背景;略带疲惫与思念,不直视观众。
- 原始生成文件保留在 Codex generated_images 中,本目录为工作副本。
## ComfyUI 视频
- 服务:`http://192.168.10.51:8188`,只连接既有服务,未停止其他 GPU 服务。
- 模型:Wan 2.2 TI2V 5B fp16;Wan 2.2 VAE;UMT5 XXL FP8。
- 参数:1024×576,145 帧,24 fps,20 steps,CFG 5,uni_pc / simple,shift 8。
- 完整正负提示词与随机种子:`workflow_api.json`;任务记录:`job.json`。
- GUI 工作流:`workflow_gui.json`。远程 Workflows → `hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.json`。
- 原始模板来自此前保存的 Comfy-Org 官方 Wan 2.2 5B 模板,副本为 `source_template.json`。
- 重收输出:`render_locker.py --collect`;直接重跑会拒绝重复提交。
## 验收重点
1. 人物是否实际抬手、伸手、转头、转肩,不只是眨眼或推镜。
2. 手机是否从手中合理转移到隔板,而不是消失、复制或穿透。
3. 柜门是否按铰链运动,手是否跟随,人物脸与服装是否稳定。
4. 只达到动作预览不能标记为正式可用镜头;具体问题在完成抽帧后补记。
## V01 实际检查
- 已下载 MP4:`2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001.mp4`。
- 实测 6.041667 秒,145 帧,1024×576,24 fps,H.264/yuv420p,BT.709,无音轨。
- 检测 8 项:6 项通过、0 项失败、2 项提示(无音轨、无字幕)。无黑场、无检测到的长时间冻结。
- 已查看 12 帧接触表:`2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001_sheet.png`。
- 人物确实有伸手、转头、身体移动和关门;不能称为只推镜的静态图。
- **动作验收不通过**:手机没有清晰放到隔板上,呈现拿手机碰门后道具消失的倾向;后段又补摸柜门。保留为失败参考,不作为正片镜头。
## V02 修正策略
缩小本镜头的表演范围:只拍“手机放到柜内腰高空隔板、松手、抽回空手”,柜门全程打开。关门应放到下一镜,避免一次生成承担多次精确的人物—道具接触。
- 文件目录:`V02_放下手机/`。
- 重收输出:`render_locker.py --take 2 --collect`。
- 远程 GUI:Workflows → `hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.json`。
## V02 实际检查与交付
- 视频:`V02_放下手机/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001.mp4`。
- 接触表:`V02_放下手机/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001_sheet.png`,已查看 12 个时间点。
- 实测:6.041667 秒、145 帧、1024×576、24 fps 恒定帧率、H.264 High、yuv420p、BT.709,1,324,970 字节,无音轨和字幕。
- 自动检测:8 项,6 项通过、0 失败、2 提示(有意未制作音轨与字幕);无黑场,最长检测冻结 0 秒。格式检查不等于动作审美验收。
- 视觉初检:人物低头、右臂下降伸向柜内、手机落在空隔板、松手并抽回手臂,末段手机仍留在隔板上;柜门维持打开,人物脸、工作服与背景总体连续。
- 限制:已做抽帧验收,未完成逐帧手指修型、原画一致性精修与声音制作;仅作为动作和画风预览。关门不在 V02 范围内。
- 旧版视频和原始首帧保留,未覆盖。当前没有提交或推送 Git。
## 如何在你的 ComfyUI 中打开
进入 `http://192.168.10.51:8188`,刷新 Workflows 侧栏,打开 `hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.json`。输入图片已上传,使用现有本地模型,不需要另外安装节点或下载模型。
@@ -0,0 +1,782 @@
{
"prompt": [
1,
"59e817ba-001e-4dcd-be96-464f4640d1ab",
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_ti2v_5B_fp16.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 8.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan2.2_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
}
},
"12": {
"class_type": "Wan22ImageToVideoLatent",
"inputs": {
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 1024,
"height": 576,
"length": 145,
"batch_size": 1
}
},
"14": {
"class_type": "KSampler",
"inputs": {
"model": [
"6",
0
],
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"latent_image": [
"12",
0
],
"seed": 126150297245109,
"steps": 20,
"cfg": 5.0,
"sampler_name": "uni_pc",
"scheduler": "simple",
"denoise": 1.0
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
},
{
"extra_pnginfo": {
"workflow": {
"last_node_id": 16,
"last_link_id": 12,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
410
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
5
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
238
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
912
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
4,
11
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
978
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
7
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1348
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
]
},
{
"id": 12,
"type": "Wan22ImageToVideoLatent",
"pos": [
520,
608
],
"size": [
360,
300
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 4
},
{
"name": "start_image",
"type": "IMAGE",
"link": 5
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1024,
576,
145,
1
]
},
{
"id": 14,
"type": "KSampler",
"pos": [
1000,
758
],
"size": [
360,
370
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 6
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 7
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 8
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
10
]
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
126150297245109,
"fixed",
20,
5.0,
"uni_pc",
"simple",
1.0
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
1480,
793
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 10
},
{
"name": "vae",
"type": "VAE",
"link": 11
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
1960,
583
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 12
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
9,
0,
12,
0,
"VAE"
],
[
5,
1,
0,
12,
1,
"IMAGE"
],
[
6,
6,
0,
14,
0,
"MODEL"
],
[
7,
10,
0,
14,
1,
"CONDITIONING"
],
[
8,
11,
0,
14,
2,
"CONDITIONING"
],
[
9,
12,
0,
14,
3,
"LATENT"
],
[
10,
14,
0,
15,
0,
"LATENT"
],
[
11,
9,
0,
15,
1,
"VAE"
],
[
12,
15,
0,
16,
0,
"IMAGE"
]
],
"groups": [
{
"title": "EP01 SC02 - phone into locker - 6s character action",
"bounding": [
-5,
-51,
2370,
1744
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}
},
"client_id": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02",
"create_time": 1790628212481
},
[
"16"
]
],
"outputs": {
"16": {
"gifs": [
{
"filename": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001.mp4",
"subfolder": "hearthfire_tests",
"type": "output",
"format": "video/h264-mp4",
"frame_rate": 24.0,
"workflow": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001.png",
"fullpath": "/opt/services/comfyui/output/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001.mp4"
}
]
}
},
"status": {
"status_str": "success",
"completed": true,
"messages": [
[
"execution_start",
{
"prompt_id": "59e817ba-001e-4dcd-be96-464f4640d1ab",
"timestamp": 1790628212482
}
],
[
"execution_cached",
{
"nodes": [
"2",
"6",
"8",
"9"
],
"prompt_id": "59e817ba-001e-4dcd-be96-464f4640d1ab",
"timestamp": 1790628212486
}
],
[
"execution_success",
{
"prompt_id": "59e817ba-001e-4dcd-be96-464f4640d1ab",
"timestamp": 1790628340515
}
]
]
},
"meta": {
"16": {
"node_id": "16",
"display_node": "16",
"parent_node": null,
"real_node_id": "16"
}
}
}
@@ -0,0 +1,19 @@
{
"prompt_id": "59e817ba-001e-4dcd-be96-464f4640d1ab",
"number": 1,
"node_errors": {},
"seed": 126150297245109,
"workflow": "workflows/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.json",
"source": "F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\first_frame_v01.png",
"input": {
"name": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.png",
"subfolder": "hearthfire_tests",
"type": "input"
},
"width": 1024,
"height": 576,
"frames": 145,
"fps": 24,
"variant": "5b",
"submitted_at": 1790628212.7019405
}
@@ -0,0 +1,13 @@
{
"summary": "nodes=11 edges=12 overlaps=0 crossings=2 bounds=[40, 40, 2320, 1648]",
"overlaps": [],
"crossings": 2,
"bounds": [
40.0,
40.0,
2320.0,
1648.0
],
"n_nodes": 11,
"n_edges": 12
}
@@ -0,0 +1,3 @@
[
"F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\V02_放下手机\\2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02_00001.mp4"
]
@@ -0,0 +1,65 @@
{
"system": {
"os": "linux",
"ram_total": 269958979584,
"ram_free": 252455567360,
"comfyui_version": "0.34.2",
"required_frontend_version": "1.49.6",
"installed_templates_version": "0.11.50",
"required_templates_version": "0.11.50",
"comfy_package_versions": [
{
"name": "comfyui-frontend-package",
"installed": "1.49.6",
"required": "1.49.6"
},
{
"name": "comfyui-workflow-templates",
"installed": "0.11.50",
"required": "0.11.50"
},
{
"name": "comfyui-embedded-docs",
"installed": "0.5.10",
"required": "0.5.10"
},
{
"name": "comfy-kitchen",
"installed": "0.2.31",
"required": "0.2.31"
},
{
"name": "comfy-aimdo",
"installed": "0.4.15",
"required": "0.4.15"
}
],
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
"pytorch_version": "2.7.1+cu126",
"embedded_python": false,
"deploy_environment": "local-git",
"argv": [
"/opt/services/comfyui/main.py",
"--listen",
"192.168.10.51",
"--port",
"8188",
"--reserve-vram",
"4",
"--async-offload",
"--preview-method",
"none"
]
},
"devices": [
{
"name": "cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync",
"type": "cuda",
"index": 0,
"vram_total": 50864390144,
"vram_free": 32149104644,
"torch_vram_total": 18186502144,
"torch_vram_free": 36530180
}
]
}
@@ -0,0 +1,733 @@
{
"id": "91f6bbe2-ed41-4fd6-bac7-71d5b5864ecb",
"revision": 0,
"last_node_id": 59,
"last_link_id": 108,
"nodes": [
{
"id": 37,
"type": "UNETLoader",
"pos": [
-30,
50
],
"size": [
346.7470703125,
82
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
94
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "UNETLoader",
"models": [
{
"name": "wan2.2_ti2v_5B_fp16.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors",
"directory": "diffusion_models"
}
]
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 38,
"type": "CLIPLoader",
"pos": [
-30,
190
],
"size": [
350,
110
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"slot_index": 0,
"links": [
74,
75
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPLoader",
"models": [
{
"name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"directory": "text_encoders"
}
]
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 39,
"type": "VAELoader",
"pos": [
-30,
350
],
"size": [
350,
60
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"slot_index": 0,
"links": [
76,
105
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "VAELoader",
"models": [
{
"name": "wan2.2_vae.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors",
"directory": "vae"
}
]
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 8,
"type": "VAEDecode",
"pos": [
1190,
150
],
"size": [
210,
46
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 35
},
{
"name": "vae",
"type": "VAE",
"link": 76
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"slot_index": 0,
"links": [
107
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 57,
"type": "CreateVideo",
"pos": [
1200,
240
],
"size": [
270,
78
],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 107
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
}
],
"outputs": [
{
"name": "VIDEO",
"type": "VIDEO",
"links": [
108
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CreateVideo"
},
"widgets_values": [
24
]
},
{
"id": 58,
"type": "SaveVideo",
"pos": [
1200,
370
],
"size": [
660,
450
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "video",
"type": "VIDEO",
"link": 108
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "SaveVideo"
},
"widgets_values": [
"video/ComfyUI",
"auto",
"auto"
]
},
{
"id": 55,
"type": "Wan22ImageToVideoLatent",
"pos": [
380,
540
],
"size": [
271.9126892089844,
150
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 105
},
{
"name": "start_image",
"shape": 7,
"type": "IMAGE",
"link": 106
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
104
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1280,
704,
121,
1
]
},
{
"id": 56,
"type": "LoadImage",
"pos": [
0,
540
],
"size": [
274.080078125,
314
],
"flags": {},
"order": 3,
"mode": 4,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
106
]
},
{
"name": "MASK",
"type": "MASK",
"links": null
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"example.png",
"image"
]
},
{
"id": 7,
"type": "CLIPTextEncode",
"pos": [
380,
260
],
"size": [
425.27801513671875,
180.6060791015625
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 75
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
52
]
}
],
"title": "CLIP Text Encode (Negative Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 6,
"type": "CLIPTextEncode",
"pos": [
380,
50
],
"size": [
422.84503173828125,
164.31304931640625
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 74
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
46
]
}
],
"title": "CLIP Text Encode (Positive Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Low contrast. In a retro 1970s-style subway station, a street musician plays in dim colors and rough textures. He wears an old jacket, playing guitar with focus. Commuters hurry by, and a small crowd gathers to listen. The camera slowly moves right, capturing the blend of music and city noise, with old subway signs and mottled walls in the background."
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 3,
"type": "KSampler",
"pos": [
850,
130
],
"size": [
315,
262
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 95
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 46
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 52
},
{
"name": "latent_image",
"type": "LATENT",
"link": 104
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"slot_index": 0,
"links": [
35
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "KSampler"
},
"widgets_values": [
898471028164125,
"randomize",
20,
5,
"uni_pc",
"simple",
1
]
},
{
"id": 48,
"type": "ModelSamplingSD3",
"pos": [
850,
20
],
"size": [
210,
58
],
"flags": {
"collapsed": false
},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 94
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
95
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8
]
},
{
"id": 59,
"type": "MarkdownNote",
"pos": [
-550,
10
],
"size": [
480,
340
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Model Links",
"properties": {},
"widgets_values": [
"## Model Links\n\n- [Hugging Face:Comfy-Org/Wan_2.2_ComfyUI_Repackaged](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged)\n- [ModelScope:Comfy-Org/Wan_2.2_ComfyUI_Repackaged](https://modelscope.cn/models/Comfy-Org/Wan_2.2_ComfyUI_Repackaged)\n- [Hugging Face:Comfy-Org/Wan_2.1_ComfyUI_repackaged](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged)\n- [ModelScope:Comfy-Org/Wan_2.1_ComfyUI_repackaged](https://modelscope.cn/models/Comfy-Org/Wan_2.1_ComfyUI_repackaged)\n\n[Tutorial](https://docs.comfy.org/tutorials/video/wan/wan2_2\n) \n\n**Diffusion Model**\n- [wan2.2_ti2v_5B_fp16.safetensors](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors) (9.31 GB)\n\n**VAE**\n- [wan2.2_vae.safetensors](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors) (1.31 GB)\n\n**Text Encoder** \n- [umt5_xxl_fp8_e4m3fn_scaled.safetensors](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors) (6.27 GB)\n\n\nFile save location\n\n```\nComfyUI/\n├───📂 models/\n│ ├───📂 diffusion_models/\n│ │ └───wan2.2_ti2v_5B_fp16.safetensors\n│ ├───📂 text_encoders/\n│ │ └─── umt5_xxl_fp8_e4m3fn_scaled.safetensors \n│ └───📂 vae/\n│ └── wan2.2_vae.safetensors\n```\n"
],
"color": "#222",
"bgcolor": "#000"
}
],
"links": [
[
35,
3,
0,
8,
0,
"LATENT"
],
[
46,
6,
0,
3,
1,
"CONDITIONING"
],
[
52,
7,
0,
3,
2,
"CONDITIONING"
],
[
74,
38,
0,
6,
0,
"CLIP"
],
[
75,
38,
0,
7,
0,
"CLIP"
],
[
76,
39,
0,
8,
1,
"VAE"
],
[
94,
37,
0,
48,
0,
"MODEL"
],
[
95,
48,
0,
3,
0,
"MODEL"
],
[
104,
55,
0,
3,
3,
"LATENT"
],
[
105,
39,
0,
55,
0,
"VAE"
],
[
106,
56,
0,
55,
1,
"IMAGE"
],
[
107,
8,
0,
57,
0,
"IMAGE"
],
[
108,
57,
0,
58,
0,
"VIDEO"
]
],
"groups": [
{
"id": 1,
"title": "Step1 - Load models",
"bounding": [
-50,
-20,
400,
453.6000061035156
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 2,
"title": "Step3 - Prompt",
"bounding": [
370,
-20,
448.27801513671875,
473.2060852050781
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 3,
"title": "For i2v, use Ctrl + B to enable",
"bounding": [
-50,
450,
400,
420
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 4,
"title": "Video Size & length",
"bounding": [
370,
470,
291.9127197265625,
233.60000610351562
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.46462425349300085,
"offset": [
847.5372059811432,
288.7938392118285
]
},
"frontendVersion": "1.27.10",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}
@@ -0,0 +1,5 @@
{
"prompt_id": "59e817ba-001e-4dcd-be96-464f4640d1ab",
"number": 1,
"node_errors": {}
}
@@ -0,0 +1,135 @@
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_ti2v_5B_fp16.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 8.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan2.2_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
}
},
"12": {
"class_type": "Wan22ImageToVideoLatent",
"inputs": {
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 1024,
"height": 576,
"length": 145,
"batch_size": 1
}
},
"14": {
"class_type": "KSampler",
"inputs": {
"model": [
"6",
0
],
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"latent_image": [
"12",
0
],
"seed": 126150297245109,
"steps": 20,
"cfg": 5.0,
"sampler_name": "uni_pc",
"scheduler": "simple",
"denoise": 1.0
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
}
@@ -0,0 +1,576 @@
{
"last_node_id": 16,
"last_link_id": 12,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
410
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
5
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
238
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
912
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
4,
11
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
978
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
7
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1348
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
]
},
{
"id": 12,
"type": "Wan22ImageToVideoLatent",
"pos": [
520,
608
],
"size": [
360,
300
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 4
},
{
"name": "start_image",
"type": "IMAGE",
"link": 5
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1024,
576,
145,
1
]
},
{
"id": 14,
"type": "KSampler",
"pos": [
1000,
758
],
"size": [
360,
370
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 6
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 7
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 8
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
10
]
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
126150297245109,
"fixed",
20,
5.0,
"uni_pc",
"simple",
1.0
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
1480,
793
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 10
},
{
"name": "vae",
"type": "VAE",
"link": 11
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
1960,
583
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 12
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V02",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
9,
0,
12,
0,
"VAE"
],
[
5,
1,
0,
12,
1,
"IMAGE"
],
[
6,
6,
0,
14,
0,
"MODEL"
],
[
7,
10,
0,
14,
1,
"CONDITIONING"
],
[
8,
11,
0,
14,
2,
"CONDITIONING"
],
[
9,
12,
0,
14,
3,
"LATENT"
],
[
10,
14,
0,
15,
0,
"LATENT"
],
[
11,
9,
0,
15,
1,
"VAE"
],
[
12,
15,
0,
16,
0,
"IMAGE"
]
],
"groups": [
{
"title": "EP01 SC02 - phone into locker - 6s character action",
"bounding": [
-5,
-51,
2370,
1744
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}
@@ -0,0 +1,19 @@
{
"prompt_id": "f6c0810f-5a8a-49eb-8633-4b0c8ba0eeb2",
"number": 2,
"node_errors": {},
"seed": 46215638094450,
"workflow": "workflows/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03.json",
"source": "F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\first_frame_v01.png",
"input": {
"name": "2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03.png",
"subfolder": "hearthfire_tests",
"type": "input"
},
"width": 768,
"height": 432,
"frames": 49,
"fps": 16,
"variant": "14b",
"submitted_at": 1790628590.3744762
}
@@ -0,0 +1,13 @@
{
"summary": "nodes=14 edges=19 overlaps=0 crossings=4 bounds=[40, 40, 3280, 1952]",
"overlaps": [],
"crossings": 4,
"bounds": [
40.0,
40.0,
3280.0,
1952.0
],
"n_nodes": 14,
"n_edges": 19
}
@@ -0,0 +1,3 @@
[
"F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\V03_14B_无LoRA诊断\\2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03_00001.mp4"
]
@@ -0,0 +1,65 @@
{
"system": {
"os": "linux",
"ram_total": 269958979584,
"ram_free": 251367792640,
"comfyui_version": "0.34.2",
"required_frontend_version": "1.49.6",
"installed_templates_version": "0.11.50",
"required_templates_version": "0.11.50",
"comfy_package_versions": [
{
"name": "comfyui-frontend-package",
"installed": "1.49.6",
"required": "1.49.6"
},
{
"name": "comfyui-workflow-templates",
"installed": "0.11.50",
"required": "0.11.50"
},
{
"name": "comfyui-embedded-docs",
"installed": "0.5.10",
"required": "0.5.10"
},
{
"name": "comfy-kitchen",
"installed": "0.2.31",
"required": "0.2.31"
},
{
"name": "comfy-aimdo",
"installed": "0.4.15",
"required": "0.4.15"
}
],
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
"pytorch_version": "2.7.1+cu126",
"embedded_python": false,
"deploy_environment": "local-git",
"argv": [
"/opt/services/comfyui/main.py",
"--listen",
"192.168.10.51",
"--port",
"8188",
"--reserve-vram",
"4",
"--async-offload",
"--preview-method",
"none"
]
},
"devices": [
{
"name": "cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync",
"type": "cuda",
"index": 0,
"vram_total": 50864390144,
"vram_free": 32149104644,
"torch_vram_total": 18186502144,
"torch_vram_free": 36530180
}
]
}
@@ -0,0 +1,5 @@
{
"prompt_id": "f6c0810f-5a8a-49eb-8633-4b0c8ba0eeb2",
"number": 2,
"node_errors": {}
}
@@ -0,0 +1,193 @@
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 5.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan_2.1_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
}
},
"12": {
"class_type": "WanImageToVideo",
"inputs": {
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 768,
"height": 432,
"length": 49,
"batch_size": 1
}
},
"14": {
"class_type": "KSamplerAdvanced",
"inputs": {
"model": [
"7",
0
],
"latent_image": [
"13",
0
],
"add_noise": "disable",
"noise_seed": 0,
"start_at_step": 10,
"end_at_step": 20,
"return_with_leftover_noise": "disable",
"positive": [
"12",
0
],
"negative": [
"12",
1
],
"steps": 20,
"cfg": 3.5,
"sampler_name": "euler",
"scheduler": "simple"
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 16,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
},
"3": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
}
},
"7": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"3",
0
],
"shift": 5.0
}
},
"13": {
"class_type": "KSamplerAdvanced",
"inputs": {
"model": [
"6",
0
],
"latent_image": [
"12",
2
],
"add_noise": "enable",
"noise_seed": 46215638094450,
"start_at_step": 0,
"end_at_step": 10,
"return_with_leftover_noise": "enable",
"positive": [
"12",
0
],
"negative": [
"12",
1
],
"steps": 20,
"cfg": 3.5,
"sampler_name": "euler",
"scheduler": "simple"
}
}
}
@@ -0,0 +1,796 @@
{
"last_node_id": 16,
"last_link_id": 19,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
780
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
7
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
365
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
16
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
5.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1652
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
6,
13
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan_2.1_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
1105
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
4
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1475
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
5
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
]
},
{
"id": 12,
"type": "WanImageToVideo",
"pos": [
1000,
918
],
"size": [
360,
304
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "positive",
"type": "CONDITIONING",
"link": 4
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 5
},
{
"name": "vae",
"type": "VAE",
"link": 6
},
{
"name": "clip_vision_output",
"type": "CLIP_VISION_OUTPUT",
"link": null
},
{
"name": "start_image",
"type": "IMAGE",
"link": 7
}
],
"outputs": [
{
"name": "positive",
"type": "CONDITIONING",
"links": [
10,
18
]
},
{
"name": "negative",
"type": "CONDITIONING",
"links": [
11,
19
]
},
{
"name": "latent",
"type": "LATENT",
"links": [
17
]
}
],
"properties": {
"Node name for S&R": "WanImageToVideo"
},
"widgets_values": [
768,
432,
49,
1
]
},
{
"id": 14,
"type": "KSamplerAdvanced",
"pos": [
1960,
840
],
"size": [
360,
460
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 8
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 10
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 11
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "KSamplerAdvanced"
},
"widgets_values": [
"disable",
0,
"fixed",
20,
3.5,
"euler",
"simple",
10,
20,
"disable"
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
2440,
920
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 12
},
{
"name": "vae",
"type": "VAE",
"link": 13
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
14
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
2920,
710
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 14
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 16,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
},
{
"id": 3,
"type": "UNETLoader",
"pos": [
40,
410
],
"size": [
360,
300
],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
15
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
"default"
]
},
{
"id": 7,
"type": "ModelSamplingSD3",
"pos": [
520,
735
],
"size": [
360,
300
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 15
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
5.0
]
},
{
"id": 13,
"type": "KSamplerAdvanced",
"pos": [
1480,
840
],
"size": [
360,
460
],
"flags": {},
"order": 13,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 16
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 18
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 19
},
{
"name": "latent_image",
"type": "LATENT",
"link": 17
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "KSamplerAdvanced"
},
"widgets_values": [
"enable",
46215638094450,
"fixed",
20,
3.5,
"euler",
"simple",
0,
10,
"enable"
]
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
10,
0,
12,
0,
"CONDITIONING"
],
[
5,
11,
0,
12,
1,
"CONDITIONING"
],
[
6,
9,
0,
12,
2,
"VAE"
],
[
7,
1,
0,
12,
4,
"IMAGE"
],
[
8,
7,
0,
14,
0,
"MODEL"
],
[
9,
13,
0,
14,
3,
"LATENT"
],
[
10,
12,
0,
14,
1,
"CONDITIONING"
],
[
11,
12,
1,
14,
2,
"CONDITIONING"
],
[
12,
14,
0,
15,
0,
"LATENT"
],
[
13,
9,
0,
15,
1,
"VAE"
],
[
14,
15,
0,
16,
0,
"IMAGE"
],
[
15,
3,
0,
7,
0,
"MODEL"
],
[
16,
6,
0,
13,
0,
"MODEL"
],
[
17,
12,
2,
13,
3,
"LATENT"
],
[
18,
12,
0,
13,
1,
"CONDITIONING"
],
[
19,
12,
1,
13,
2,
"CONDITIONING"
]
],
"groups": [
{
"title": "2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V03",
"bounding": [
-5,
-51,
3330,
2048
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}
@@ -0,0 +1,19 @@
{
"prompt_id": "9da75712-dfc8-431c-9c47-6221be7ed021",
"number": 3,
"node_errors": {},
"seed": 156451542241519,
"workflow": "workflows/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04.json",
"source": "F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\first_frame_v01.png",
"input": {
"name": "2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04.png",
"subfolder": "hearthfire_tests",
"type": "input"
},
"width": 1024,
"height": 576,
"frames": 81,
"fps": 16,
"variant": "14b",
"submitted_at": 1790628807.7716212
}
@@ -0,0 +1,13 @@
{
"summary": "nodes=14 edges=19 overlaps=0 crossings=4 bounds=[40, 40, 3280, 1952]",
"overlaps": [],
"crossings": 4,
"bounds": [
40.0,
40.0,
3280.0,
1952.0
],
"n_nodes": 14,
"n_edges": 19
}
@@ -0,0 +1,3 @@
[
"F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\V04_14B_画质对比\\2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04_00001.mp4"
]
@@ -0,0 +1,65 @@
{
"system": {
"os": "linux",
"ram_total": 269958979584,
"ram_free": 244171816960,
"comfyui_version": "0.34.2",
"required_frontend_version": "1.49.6",
"installed_templates_version": "0.11.50",
"required_templates_version": "0.11.50",
"comfy_package_versions": [
{
"name": "comfyui-frontend-package",
"installed": "1.49.6",
"required": "1.49.6"
},
{
"name": "comfyui-workflow-templates",
"installed": "0.11.50",
"required": "0.11.50"
},
{
"name": "comfyui-embedded-docs",
"installed": "0.5.10",
"required": "0.5.10"
},
{
"name": "comfy-kitchen",
"installed": "0.2.31",
"required": "0.2.31"
},
{
"name": "comfy-aimdo",
"installed": "0.4.15",
"required": "0.4.15"
}
],
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
"pytorch_version": "2.7.1+cu126",
"embedded_python": false,
"deploy_environment": "local-git",
"argv": [
"/opt/services/comfyui/main.py",
"--listen",
"192.168.10.51",
"--port",
"8188",
"--reserve-vram",
"4",
"--async-offload",
"--preview-method",
"none"
]
},
"devices": [
{
"name": "cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync",
"type": "cuda",
"index": 0,
"vram_total": 50864390144,
"vram_free": 12054321034,
"torch_vram_total": 38252052480,
"torch_vram_free": 7296906
}
]
}
@@ -0,0 +1,5 @@
{
"prompt_id": "9da75712-dfc8-431c-9c47-6221be7ed021",
"number": 3,
"node_errors": {}
}
@@ -0,0 +1,193 @@
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 5.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan_2.1_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
}
},
"12": {
"class_type": "WanImageToVideo",
"inputs": {
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 1024,
"height": 576,
"length": 81,
"batch_size": 1
}
},
"14": {
"class_type": "KSamplerAdvanced",
"inputs": {
"model": [
"7",
0
],
"latent_image": [
"13",
0
],
"add_noise": "disable",
"noise_seed": 0,
"start_at_step": 10,
"end_at_step": 20,
"return_with_leftover_noise": "disable",
"positive": [
"12",
0
],
"negative": [
"12",
1
],
"steps": 20,
"cfg": 3.5,
"sampler_name": "euler",
"scheduler": "simple"
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 16,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
},
"3": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
}
},
"7": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"3",
0
],
"shift": 5.0
}
},
"13": {
"class_type": "KSamplerAdvanced",
"inputs": {
"model": [
"6",
0
],
"latent_image": [
"12",
2
],
"add_noise": "enable",
"noise_seed": 156451542241519,
"start_at_step": 0,
"end_at_step": 10,
"return_with_leftover_noise": "enable",
"positive": [
"12",
0
],
"negative": [
"12",
1
],
"steps": 20,
"cfg": 3.5,
"sampler_name": "euler",
"scheduler": "simple"
}
}
}
@@ -0,0 +1,796 @@
{
"last_node_id": 16,
"last_link_id": 19,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
780
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
7
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
365
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
16
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
5.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1652
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
6,
13
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan_2.1_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
1105
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
4
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Locked-off medium shot, one continuous hand-drawn anime scene. The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL SHELF INSIDE the open locker at waist height. He bends his right elbow downward and extends his forearm into the locker opening, rotates his wrist so the phone lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, opens his fingers to release it, and slowly pulls his empty hand back to his side. The phone remains visibly lying on the shelf inside the locker. His head tilts down and his eyes follow the phone. His shoulders lean gently forward then relax. The locker door stays fully open and does not move throughout this shot. Clear substantial downward and leftward arm movement, natural human gesture. The same adult man, same face and blue work uniform, mouth closed. Stable crisp 2D cel animation, consistent drawn outlines, stationary background and camera."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1475
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
5
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry, closing locker door, touching door, phone pressed to door, phone disappears, phone floating"
]
},
{
"id": 12,
"type": "WanImageToVideo",
"pos": [
1000,
918
],
"size": [
360,
304
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "positive",
"type": "CONDITIONING",
"link": 4
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 5
},
{
"name": "vae",
"type": "VAE",
"link": 6
},
{
"name": "clip_vision_output",
"type": "CLIP_VISION_OUTPUT",
"link": null
},
{
"name": "start_image",
"type": "IMAGE",
"link": 7
}
],
"outputs": [
{
"name": "positive",
"type": "CONDITIONING",
"links": [
10,
18
]
},
{
"name": "negative",
"type": "CONDITIONING",
"links": [
11,
19
]
},
{
"name": "latent",
"type": "LATENT",
"links": [
17
]
}
],
"properties": {
"Node name for S&R": "WanImageToVideo"
},
"widgets_values": [
1024,
576,
81,
1
]
},
{
"id": 14,
"type": "KSamplerAdvanced",
"pos": [
1960,
840
],
"size": [
360,
460
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 8
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 10
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 11
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "KSamplerAdvanced"
},
"widgets_values": [
"disable",
0,
"fixed",
20,
3.5,
"euler",
"simple",
10,
20,
"disable"
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
2440,
920
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 12
},
{
"name": "vae",
"type": "VAE",
"link": 13
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
14
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
2920,
710
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 14
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 16,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
},
{
"id": 3,
"type": "UNETLoader",
"pos": [
40,
410
],
"size": [
360,
300
],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
15
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
"default"
]
},
{
"id": 7,
"type": "ModelSamplingSD3",
"pos": [
520,
735
],
"size": [
360,
300
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 15
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
5.0
]
},
{
"id": 13,
"type": "KSamplerAdvanced",
"pos": [
1480,
840
],
"size": [
360,
460
],
"flags": {},
"order": 13,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 16
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 18
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 19
},
{
"name": "latent_image",
"type": "LATENT",
"link": 17
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "KSamplerAdvanced"
},
"widgets_values": [
"enable",
156451542241519,
"fixed",
20,
3.5,
"euler",
"simple",
0,
10,
"enable"
]
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
10,
0,
12,
0,
"CONDITIONING"
],
[
5,
11,
0,
12,
1,
"CONDITIONING"
],
[
6,
9,
0,
12,
2,
"VAE"
],
[
7,
1,
0,
12,
4,
"IMAGE"
],
[
8,
7,
0,
14,
0,
"MODEL"
],
[
9,
13,
0,
14,
3,
"LATENT"
],
[
10,
12,
0,
14,
1,
"CONDITIONING"
],
[
11,
12,
1,
14,
2,
"CONDITIONING"
],
[
12,
14,
0,
15,
0,
"LATENT"
],
[
13,
9,
0,
15,
1,
"VAE"
],
[
14,
15,
0,
16,
0,
"IMAGE"
],
[
15,
3,
0,
7,
0,
"MODEL"
],
[
16,
6,
0,
13,
0,
"MODEL"
],
[
17,
12,
2,
13,
3,
"LATENT"
],
[
18,
12,
0,
13,
1,
"CONDITIONING"
],
[
19,
12,
1,
13,
2,
"CONDITIONING"
]
],
"groups": [
{
"title": "2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V04",
"bounding": [
-5,
-51,
3330,
2048
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1 @@
Use case: style-transfer. Edit input image 1 (the male factory worker at his locker) into a more convincing high-quality hand-drawn 2D dramatic anime episode frame. Input image 2 is ONLY a rendering/style reference, not a character, costume, setting or composition reference. Keep image 1's EXACT scene layout, camera position, medium framing, adult 29-year-old man's face identity and proportions, short black hair, brown eyes, blue-gray uniform with pale reflective strips and chest radio, hand holding one phone, open locker at left, empty waist-level shelf, yellow helmet on upper shelf, bench and nighttime window. Change rendering rather than design: luminous readable skin with ONE clear pale neutral shadow shape, fine warm gray-brown contour lines rather than harsh black, delicately designed eyes without enlarging them, broad designed hair locks with one subtle cool highlight band. Reduce the excessive small wrinkle lines on his work jacket by about half; replace muddy multiply-layered cloth shading with a clean blue-gray base and crisp coherent single cool shadow layer. Keep the uniform recognizably ordinary workwear, not elegant fantasy clothing. Background must look separately painted in restrained gouache with simplified low-frequency detail, not metallic photoreal CGI. Neutral overhead fluorescent light with warm readable skin, cool night-blue window, subtle atmosphere without bloom or fake rim lights; lift crushed gray midtones, do NOT turn night into day. Remove all writing from wall posters and replace those rectangles with plain unmarked surfaces. Emotion is a quiet pause after sending a message to his mother: attentive tired eyes and relaxed mouth, no exaggerated sadness. Aim for the refined clean cel drawing and natural luminous color separation seen in image 2 while keeping our ORIGINAL adult male, no copied woman or costume. Preserve believable anatomy, stable locker perspective and empty shelf as the next action target. 16:9 landscape. No captions, logos, UI, watermark, canvas texture, skin pores, glossy plastic, soft airbrush shading, 3D render, game concept art, excessive detail, theatrical lighting, chibi or teenage proportions.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

@@ -0,0 +1,777 @@
{
"prompt": [
0,
"34f70d93-178a-43f5-9308-114f607e6b36",
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_ti2v_5B_fp16.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 8.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan2.2_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "A continuous hand-drawn anime medium shot, locked-off camera. The man performs a clear everyday action with visible arm, shoulder and torso movement. He glances at his phone for a brief moment, then turns his head and shoulders toward the open locker on the left. He extends his right arm into the locker and places the phone flat onto the empty shelf. He lets go of the phone and withdraws his empty right hand. Then he reaches for the open locker door and swings it shut until the door is closed, ending with his hand resting briefly on the closed metal door. His eyes follow his hand, his weight shifts naturally toward the locker. Quiet wistful expression, mouth closed. Clearly readable deliberate physical movement, natural human timing. Preserve the same adult face, short black hair, blue uniform and reflective strips, crisp cel shadows and fine drawn outlines. The background and camera remain stationary. A single uninterrupted shot."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry"
}
},
"12": {
"class_type": "Wan22ImageToVideoLatent",
"inputs": {
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 1024,
"height": 576,
"length": 145,
"batch_size": 1
}
},
"14": {
"class_type": "KSampler",
"inputs": {
"model": [
"6",
0
],
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"latent_image": [
"12",
0
],
"seed": 43717240307252,
"steps": 20,
"cfg": 5.0,
"sampler_name": "uni_pc",
"scheduler": "simple",
"denoise": 1.0
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
},
{
"extra_pnginfo": {
"workflow": {
"last_node_id": 16,
"last_link_id": 12,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
410
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
5
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
238
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
912
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
4,
11
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
978
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
7
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"A continuous hand-drawn anime medium shot, locked-off camera. The man performs a clear everyday action with visible arm, shoulder and torso movement. He glances at his phone for a brief moment, then turns his head and shoulders toward the open locker on the left. He extends his right arm into the locker and places the phone flat onto the empty shelf. He lets go of the phone and withdraws his empty right hand. Then he reaches for the open locker door and swings it shut until the door is closed, ending with his hand resting briefly on the closed metal door. His eyes follow his hand, his weight shifts naturally toward the locker. Quiet wistful expression, mouth closed. Clearly readable deliberate physical movement, natural human timing. Preserve the same adult face, short black hair, blue uniform and reflective strips, crisp cel shadows and fine drawn outlines. The background and camera remain stationary. A single uninterrupted shot."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1348
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry"
]
},
{
"id": 12,
"type": "Wan22ImageToVideoLatent",
"pos": [
520,
608
],
"size": [
360,
300
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 4
},
{
"name": "start_image",
"type": "IMAGE",
"link": 5
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1024,
576,
145,
1
]
},
{
"id": 14,
"type": "KSampler",
"pos": [
1000,
758
],
"size": [
360,
370
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 6
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 7
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 8
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
10
]
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
43717240307252,
"fixed",
20,
5.0,
"uni_pc",
"simple",
1.0
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
1480,
793
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 10
},
{
"name": "vae",
"type": "VAE",
"link": 11
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
1960,
583
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 12
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
9,
0,
12,
0,
"VAE"
],
[
5,
1,
0,
12,
1,
"IMAGE"
],
[
6,
6,
0,
14,
0,
"MODEL"
],
[
7,
10,
0,
14,
1,
"CONDITIONING"
],
[
8,
11,
0,
14,
2,
"CONDITIONING"
],
[
9,
12,
0,
14,
3,
"LATENT"
],
[
10,
14,
0,
15,
0,
"LATENT"
],
[
11,
9,
0,
15,
1,
"VAE"
],
[
12,
15,
0,
16,
0,
"IMAGE"
]
],
"groups": [
{
"title": "EP01 SC02 - phone into locker - 6s character action",
"bounding": [
-5,
-51,
2370,
1744
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}
},
"client_id": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01",
"create_time": 1790628005047
},
[
"16"
]
],
"outputs": {
"16": {
"gifs": [
{
"filename": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001.mp4",
"subfolder": "hearthfire_tests",
"type": "output",
"format": "video/h264-mp4",
"frame_rate": 24.0,
"workflow": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001.png",
"fullpath": "/opt/services/comfyui/output/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001.mp4"
}
]
}
},
"status": {
"status_str": "success",
"completed": true,
"messages": [
[
"execution_start",
{
"prompt_id": "34f70d93-178a-43f5-9308-114f607e6b36",
"timestamp": 1790628005049
}
],
[
"execution_cached",
{
"nodes": [],
"prompt_id": "34f70d93-178a-43f5-9308-114f607e6b36",
"timestamp": 1790628005054
}
],
[
"execution_success",
{
"prompt_id": "34f70d93-178a-43f5-9308-114f607e6b36",
"timestamp": 1790628140531
}
]
]
},
"meta": {
"16": {
"node_id": "16",
"display_node": "16",
"parent_node": null,
"real_node_id": "16"
}
}
}
@@ -0,0 +1,19 @@
{
"prompt_id": "34f70d93-178a-43f5-9308-114f607e6b36",
"number": 0,
"node_errors": {},
"seed": 43717240307252,
"workflow": "workflows/hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.json",
"source": "F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\first_frame_v01.png",
"input": {
"name": "2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.png",
"subfolder": "hearthfire_tests",
"type": "input"
},
"width": 1024,
"height": 576,
"frames": 145,
"fps": 24,
"variant": "5b",
"submitted_at": 1790628005.2562368
}
@@ -0,0 +1,13 @@
{
"summary": "nodes=11 edges=12 overlaps=0 crossings=2 bounds=[40, 40, 2320, 1648]",
"overlaps": [],
"crossings": 2,
"bounds": [
40.0,
40.0,
2320.0,
1648.0
],
"n_nodes": 11,
"n_edges": 12
}
@@ -0,0 +1,3 @@
[
"F:\\project\\小说设计\\06_AI动漫制作\\05_生产素材\\视频测试\\2026-09-29_男主收手机\\2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01_00001.mp4"
]
@@ -0,0 +1,200 @@
"""EP01 SC02 action test; local weights on the owner's existing :8188 service."""
import argparse
import importlib.util
import json
import secrets
import sys
import time
from pathlib import Path
from urllib.parse import quote
import requests
HERE = Path(__file__).resolve().parent
ROOT_HERE = HERE
BASE = 'http://192.168.10.51:8188'
NAME = '2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01'
SOURCE = HERE / 'first_frame_v01.png'
VARIANT = '5b'
WIDTH, HEIGHT, FRAMES, FPS = 1024, 576, 145, 24
POSITIVE = ('A continuous hand-drawn anime medium shot, locked-off camera. The man performs a '
'clear everyday action with visible arm, shoulder and torso movement. He glances at his phone '
'for a brief moment, then turns his head and shoulders toward the open locker on the left. '
'He extends his right arm into the locker and places the phone flat onto the empty shelf. '
'He lets go of the phone and withdraws his empty right hand. Then he reaches for the open '
'locker door and swings it shut until the door is closed, ending with his hand resting '
'briefly on the closed metal door. His eyes follow his hand, his weight shifts naturally '
'toward the locker. Quiet wistful expression, mouth closed. Clearly readable deliberate '
'physical movement, natural human timing. Preserve the same adult face, short black hair, '
'blue uniform and reflective strips, crisp cel shadows and fine drawn outlines. '
'The background and camera remain stationary. A single uninterrupted shot.')
NEGATIVE = ('frozen character, static image, slideshow, camera zoom, camera pan, camera shake, '
'cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, '
'extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, '
'melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry')
spec = importlib.util.spec_from_file_location('previous_test', HERE.parent / '2026-09-29_泉堂夜景/render_test.py')
previous = importlib.util.module_from_spec(spec)
spec.loader.exec_module(previous)
previous.HERE = HERE
get, save = previous.get, previous.save
def build():
assert SOURCE.is_file()
assert not (HERE / 'job.json').exists(), 'Already submitted; use --collect'
queue = get('/queue')
assert not queue['queue_running'] and not queue['queue_pending'], 'Server busy'
save('server_stats.json', get('/system_stats'))
template = ROOT_HERE.parent / ('2026-09-29_泉堂夜景/source_template.json' if VARIANT == '14b' else '2026-09-29_泉堂夜景/V02_5B/source_template.json')
save('source_template.json', json.loads(template.read_text(encoding='utf-8')))
schema = get('/object_info')
with SOURCE.open('rb') as f:
r = requests.post(BASE + '/upload/image', files={'image': (NAME + '.png', f, 'image/png')},
data={'type': 'input', 'subfolder': 'hearthfire_tests', 'overwrite': 'false'}, timeout=60)
r.raise_for_status()
uploaded = r.json()
input_name = '/'.join(filter(None, [uploaded.get('subfolder'), uploaded['name']]))
seed = secrets.randbelow(2**48)
graph = {}
def node(i, cls, **inputs):
graph[str(i)] = {'class_type': cls, 'inputs': inputs}
node(1, 'LoadImage', image=input_name)
node(2, 'UNETLoader', unet_name='wan2.2_ti2v_5B_fp16.safetensors', weight_dtype='default')
node(6, 'ModelSamplingSD3', model=['2', 0], shift=8.0)
node(8, 'CLIPLoader', clip_name='umt5_xxl_fp8_e4m3fn_scaled.safetensors', type='wan', device='default')
node(9, 'VAELoader', vae_name='wan2.2_vae.safetensors')
node(10, 'CLIPTextEncode', clip=['8', 0], text=POSITIVE)
node(11, 'CLIPTextEncode', clip=['8', 0], text=NEGATIVE)
node(12, 'Wan22ImageToVideoLatent', vae=['9', 0], start_image=['1', 0],
width=1024, height=576, length=145, batch_size=1)
node(14, 'KSampler', model=['6', 0], positive=['10', 0], negative=['11', 0],
latent_image=['12', 0], seed=seed, steps=20, cfg=5.0,
sampler_name='uni_pc', scheduler='simple', denoise=1.0)
node(15, 'VAEDecode', samples=['14', 0], vae=['9', 0])
node(16, 'VHS_VideoCombine', images=['15', 0], frame_rate=24.0, loop_count=0,
filename_prefix='hearthfire_tests/' + NAME, format='video/h264-mp4', pingpong=False,
save_output=True, pix_fmt='yuv420p', crf=18, save_metadata=True, trim_to_audio=False)
if VARIANT == '14b':
node(2, 'UNETLoader', unet_name='wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors', weight_dtype='default')
node(3, 'UNETLoader', unet_name='wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors', weight_dtype='default')
node(6, 'ModelSamplingSD3', model=['2', 0], shift=5.0)
node(7, 'ModelSamplingSD3', model=['3', 0], shift=5.0)
node(9, 'VAELoader', vae_name='wan_2.1_vae.safetensors')
node(12, 'WanImageToVideo', positive=['10', 0], negative=['11', 0], vae=['9', 0],
start_image=['1', 0], width=WIDTH, height=HEIGHT, length=FRAMES, batch_size=1)
common = dict(positive=['12', 0], negative=['12', 1], steps=20, cfg=3.5, sampler_name='euler', scheduler='simple')
node(13, 'KSamplerAdvanced', model=['6', 0], latent_image=['12', 2], add_noise='enable', noise_seed=seed,
start_at_step=0, end_at_step=10, return_with_leftover_noise='enable', **common)
node(14, 'KSamplerAdvanced', model=['7', 0], latent_image=['13', 0], add_noise='disable', noise_seed=0,
start_at_step=10, end_at_step=20, return_with_leftover_noise='disable', **common)
graph['16']['inputs']['frame_rate'] = FPS
for nid, n in graph.items():
s = schema[n['class_type']]
assert not s.get('api_node'), 'No paid/API nodes'
specs = {**s['input'].get('required', {}), **s['input'].get('optional', {})}
assert set(s['input'].get('required', {})) <= n['inputs'].keys()
for key, value in n['inputs'].items():
if key not in specs:
assert n['class_type'] == 'VHS_VideoCombine'
continue
kind = specs[key][0]
if isinstance(value, list):
origin, slot = value
assert schema[graph[origin]['class_type']]['output'][slot] == kind
elif isinstance(kind, list) and key != 'image':
assert value in kind, (nid, key, value)
ui = {'last_node_id': 16, 'last_link_id': 0, 'nodes': [], 'links': [], 'groups': [],
'config': {}, 'extra': {'ds': {'scale': 0.4, 'offset': [0, 0]}}, 'version': 0.4}
for nid, n in graph.items():
s = schema[n['class_type']]
slots, widgets = [], []
specs = {**s['input'].get('required', {}), **s['input'].get('optional', {})}
for key, spec in specs.items():
val, kind = n['inputs'].get(key), spec[0]
if isinstance(val, list) or (isinstance(kind, str) and kind not in ('INT','FLOAT','BOOLEAN','STRING','COMBO')):
slots.append({'name': key, 'type': kind, 'link': None})
elif key in n['inputs']:
widgets.append(val)
if len(spec) > 1 and spec[1].get('control_after_generate'):
widgets.append('fixed')
if n['class_type'] == 'LoadImage':
widgets.append('image')
if n['class_type'] == 'VHS_VideoCombine':
widgets = {k:v for k,v in n['inputs'].items() if not isinstance(v,list)}
ui['nodes'].append({'id':int(nid), 'type':n['class_type'], 'pos':[0,0], 'size':[360,300],
'flags':{}, 'order':len(ui['nodes']), 'mode':0, 'inputs':slots,
'outputs':[{'name':name,'type':typ,'links':[]} for name,typ in zip(s['output_name'],s['output'])],
'properties':{'Node name for S&R':n['class_type']}, 'widgets_values':widgets})
indexed = {str(n['id']):n for n in ui['nodes']}
for nid,n in graph.items():
for key,val in n['inputs'].items():
if not isinstance(val,list):
continue
origin,oslot = val
slot = next(i for i,item in enumerate(indexed[nid]['inputs']) if item['name']==key)
ui['last_link_id'] += 1
link = ui['last_link_id']
kind = indexed[origin]['outputs'][oslot]['type']
ui['links'].append([link,int(origin),oslot,int(nid),slot,kind])
indexed[nid]['inputs'][slot]['link'] = link
indexed[origin]['outputs'][oslot]['links'].append(link)
sys.path.insert(0,'C:/Users/zhang/.codex/skills/comfyui')
from workflow_layout import auto_layout, inspect, fit_group
ui = auto_layout(ui)
fit_group(ui,NAME)
layout = inspect(ui)
save('layout_check.json',layout)
print('Layout:',layout['summary'],flush=True)
save('workflow_api.json',graph)
save('workflow_gui.json',ui)
target = 'workflows/hearthfire_tests/' + NAME + '.json'
r = requests.post(BASE+'/userdata/'+quote(target,safe='')+'?overwrite=false',json=ui,timeout=30)
r.raise_for_status()
assert get('/userdata/'+quote(target,safe='')) == ui
r = requests.post(BASE+'/prompt',json={'prompt':graph,'client_id':NAME,
'extra_data':{'extra_pnginfo':{'workflow':ui}}},timeout=30)
save('submission.json',r.json())
r.raise_for_status()
job = {**r.json(),'seed':seed,'workflow':target,'source':str(SOURCE),'input':uploaded,
'width':WIDTH,'height':HEIGHT,'frames':FRAMES,'fps':FPS,'variant':VARIANT,'submitted_at':time.time()}
save('job.json',job)
print(json.dumps(job,ensure_ascii=False),flush=True)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--collect',action='store_true')
parser.add_argument('--take',type=int,choices=[1,2,3,4],default=1)
args = parser.parse_args()
if args.take == 2:
HERE = ROOT_HERE / 'V02_放下手机'
HERE.mkdir(exist_ok=True)
previous.HERE = HERE
NAME = NAME.replace('V01','V02')
POSITIVE = ('Locked-off medium shot, one continuous hand-drawn anime scene. '
'The man lowers the smartphone in his right hand toward the EMPTY HORIZONTAL '
'SHELF INSIDE the open locker at waist height. He bends his right elbow downward '
'and extends his forearm into the locker opening, rotates his wrist so the phone '
'lies horizontally, screen upward. He sets the smartphone flat on the empty shelf, '
'opens his fingers to release it, and slowly pulls his empty hand back to his side. '
'The phone remains visibly lying on the shelf inside the locker. His head tilts '
'down and his eyes follow the phone. His shoulders lean gently forward then relax. '
'The locker door stays fully open and does not move throughout this shot. '
'Clear substantial downward and leftward arm movement, natural human gesture. '
'The same adult man, same face and blue work uniform, mouth closed. Stable crisp '
'2D cel animation, consistent drawn outlines, stationary background and camera.')
NEGATIVE += ', closing locker door, touching door, phone pressed to door, phone disappears, phone floating'
if args.take in (3,4):
VARIANT = '14b'
if args.take == 3:
WIDTH, HEIGHT, FRAMES, FPS = 768, 432, 49, 16
HERE = ROOT_HERE / 'V03_14B_无LoRA诊断'
else:
WIDTH, HEIGHT, FRAMES, FPS = 1024, 576, 81, 16
HERE = ROOT_HERE / 'V04_14B_画质对比'
HERE.mkdir(exist_ok=True)
previous.HERE = HERE
NAME = '2026-09-29_EP01_LOCKER_PHONE_WAN22_14B_NO_LORA_V0' + str(args.take)
baseline = json.loads((ROOT_HERE / 'V02_放下手机/workflow_api.json').read_text(encoding='utf-8'))
POSITIVE, NEGATIVE = baseline['10']['inputs']['text'], baseline['11']['inputs']['text']
if not args.collect:
build()
previous.collect()
@@ -0,0 +1,65 @@
{
"system": {
"os": "linux",
"ram_total": 269958979584,
"ram_free": 259139092480,
"comfyui_version": "0.34.2",
"required_frontend_version": "1.49.6",
"installed_templates_version": "0.11.50",
"required_templates_version": "0.11.50",
"comfy_package_versions": [
{
"name": "comfyui-frontend-package",
"installed": "1.49.6",
"required": "1.49.6"
},
{
"name": "comfyui-workflow-templates",
"installed": "0.11.50",
"required": "0.11.50"
},
{
"name": "comfyui-embedded-docs",
"installed": "0.5.10",
"required": "0.5.10"
},
{
"name": "comfy-kitchen",
"installed": "0.2.31",
"required": "0.2.31"
},
{
"name": "comfy-aimdo",
"installed": "0.4.15",
"required": "0.4.15"
}
],
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
"pytorch_version": "2.7.1+cu126",
"embedded_python": false,
"deploy_environment": "local-git",
"argv": [
"/opt/services/comfyui/main.py",
"--listen",
"192.168.10.51",
"--port",
"8188",
"--reserve-vram",
"4",
"--async-offload",
"--preview-method",
"none"
]
},
"devices": [
{
"name": "cuda:0 NVIDIA GeForce RTX 4090 : cudaMallocAsync",
"type": "cuda",
"index": 0,
"vram_total": 50864390144,
"vram_free": 50450071552,
"torch_vram_total": 0,
"torch_vram_free": 0
}
]
}
@@ -0,0 +1,733 @@
{
"id": "91f6bbe2-ed41-4fd6-bac7-71d5b5864ecb",
"revision": 0,
"last_node_id": 59,
"last_link_id": 108,
"nodes": [
{
"id": 37,
"type": "UNETLoader",
"pos": [
-30,
50
],
"size": [
346.7470703125,
82
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
94
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "UNETLoader",
"models": [
{
"name": "wan2.2_ti2v_5B_fp16.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors",
"directory": "diffusion_models"
}
]
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 38,
"type": "CLIPLoader",
"pos": [
-30,
190
],
"size": [
350,
110
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"slot_index": 0,
"links": [
74,
75
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPLoader",
"models": [
{
"name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"directory": "text_encoders"
}
]
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 39,
"type": "VAELoader",
"pos": [
-30,
350
],
"size": [
350,
60
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"slot_index": 0,
"links": [
76,
105
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "VAELoader",
"models": [
{
"name": "wan2.2_vae.safetensors",
"url": "https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors",
"directory": "vae"
}
]
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 8,
"type": "VAEDecode",
"pos": [
1190,
150
],
"size": [
210,
46
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 35
},
{
"name": "vae",
"type": "VAE",
"link": 76
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"slot_index": 0,
"links": [
107
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 57,
"type": "CreateVideo",
"pos": [
1200,
240
],
"size": [
270,
78
],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 107
},
{
"name": "audio",
"shape": 7,
"type": "AUDIO",
"link": null
}
],
"outputs": [
{
"name": "VIDEO",
"type": "VIDEO",
"links": [
108
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CreateVideo"
},
"widgets_values": [
24
]
},
{
"id": 58,
"type": "SaveVideo",
"pos": [
1200,
370
],
"size": [
660,
450
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "video",
"type": "VIDEO",
"link": 108
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "SaveVideo"
},
"widgets_values": [
"video/ComfyUI",
"auto",
"auto"
]
},
{
"id": 55,
"type": "Wan22ImageToVideoLatent",
"pos": [
380,
540
],
"size": [
271.9126892089844,
150
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 105
},
{
"name": "start_image",
"shape": 7,
"type": "IMAGE",
"link": 106
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
104
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1280,
704,
121,
1
]
},
{
"id": 56,
"type": "LoadImage",
"pos": [
0,
540
],
"size": [
274.080078125,
314
],
"flags": {},
"order": 3,
"mode": 4,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
106
]
},
{
"name": "MASK",
"type": "MASK",
"links": null
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"example.png",
"image"
]
},
{
"id": 7,
"type": "CLIPTextEncode",
"pos": [
380,
260
],
"size": [
425.27801513671875,
180.6060791015625
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 75
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
52
]
}
],
"title": "CLIP Text Encode (Negative Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 6,
"type": "CLIPTextEncode",
"pos": [
380,
50
],
"size": [
422.84503173828125,
164.31304931640625
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 74
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
46
]
}
],
"title": "CLIP Text Encode (Positive Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"Low contrast. In a retro 1970s-style subway station, a street musician plays in dim colors and rough textures. He wears an old jacket, playing guitar with focus. Commuters hurry by, and a small crowd gathers to listen. The camera slowly moves right, capturing the blend of music and city noise, with old subway signs and mottled walls in the background."
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 3,
"type": "KSampler",
"pos": [
850,
130
],
"size": [
315,
262
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 95
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 46
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 52
},
{
"name": "latent_image",
"type": "LATENT",
"link": 104
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"slot_index": 0,
"links": [
35
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "KSampler"
},
"widgets_values": [
898471028164125,
"randomize",
20,
5,
"uni_pc",
"simple",
1
]
},
{
"id": 48,
"type": "ModelSamplingSD3",
"pos": [
850,
20
],
"size": [
210,
58
],
"flags": {
"collapsed": false
},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 94
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
95
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.45",
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8
]
},
{
"id": 59,
"type": "MarkdownNote",
"pos": [
-550,
10
],
"size": [
480,
340
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [],
"title": "Model Links",
"properties": {},
"widgets_values": [
"## Model Links\n\n- [Hugging Face:Comfy-Org/Wan_2.2_ComfyUI_Repackaged](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged)\n- [ModelScope:Comfy-Org/Wan_2.2_ComfyUI_Repackaged](https://modelscope.cn/models/Comfy-Org/Wan_2.2_ComfyUI_Repackaged)\n- [Hugging Face:Comfy-Org/Wan_2.1_ComfyUI_repackaged](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged)\n- [ModelScope:Comfy-Org/Wan_2.1_ComfyUI_repackaged](https://modelscope.cn/models/Comfy-Org/Wan_2.1_ComfyUI_repackaged)\n\n[Tutorial](https://docs.comfy.org/tutorials/video/wan/wan2_2\n) \n\n**Diffusion Model**\n- [wan2.2_ti2v_5B_fp16.safetensors](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_ti2v_5B_fp16.safetensors) (9.31 GB)\n\n**VAE**\n- [wan2.2_vae.safetensors](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors) (1.31 GB)\n\n**Text Encoder** \n- [umt5_xxl_fp8_e4m3fn_scaled.safetensors](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors) (6.27 GB)\n\n\nFile save location\n\n```\nComfyUI/\n├───📂 models/\n│ ├───📂 diffusion_models/\n│ │ └───wan2.2_ti2v_5B_fp16.safetensors\n│ ├───📂 text_encoders/\n│ │ └─── umt5_xxl_fp8_e4m3fn_scaled.safetensors \n│ └───📂 vae/\n│ └── wan2.2_vae.safetensors\n```\n"
],
"color": "#222",
"bgcolor": "#000"
}
],
"links": [
[
35,
3,
0,
8,
0,
"LATENT"
],
[
46,
6,
0,
3,
1,
"CONDITIONING"
],
[
52,
7,
0,
3,
2,
"CONDITIONING"
],
[
74,
38,
0,
6,
0,
"CLIP"
],
[
75,
38,
0,
7,
0,
"CLIP"
],
[
76,
39,
0,
8,
1,
"VAE"
],
[
94,
37,
0,
48,
0,
"MODEL"
],
[
95,
48,
0,
3,
0,
"MODEL"
],
[
104,
55,
0,
3,
3,
"LATENT"
],
[
105,
39,
0,
55,
0,
"VAE"
],
[
106,
56,
0,
55,
1,
"IMAGE"
],
[
107,
8,
0,
57,
0,
"IMAGE"
],
[
108,
57,
0,
58,
0,
"VIDEO"
]
],
"groups": [
{
"id": 1,
"title": "Step1 - Load models",
"bounding": [
-50,
-20,
400,
453.6000061035156
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 2,
"title": "Step3 - Prompt",
"bounding": [
370,
-20,
448.27801513671875,
473.2060852050781
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 3,
"title": "For i2v, use Ctrl + B to enable",
"bounding": [
-50,
450,
400,
420
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 4,
"title": "Video Size & length",
"bounding": [
370,
470,
291.9127197265625,
233.60000610351562
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.46462425349300085,
"offset": [
847.5372059811432,
288.7938392118285
]
},
"frontendVersion": "1.27.10",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true
},
"version": 0.4
}
@@ -0,0 +1,5 @@
{
"prompt_id": "34f70d93-178a-43f5-9308-114f607e6b36",
"number": 0,
"node_errors": {}
}
@@ -0,0 +1,30 @@
"""Read-only, bounded live progress listener for the currently submitted test."""
import argparse
import asyncio
import json
import time
import websockets
async def watch(client):
async with websockets.connect('ws://192.168.10.51:8188/ws?clientId=' + client, max_size=2**22) as ws:
deadline = time.monotonic() + 45
while time.monotonic() < deadline:
try:
raw = await asyncio.wait_for(ws.recv(), timeout=max(0.1, deadline-time.monotonic()))
except asyncio.TimeoutError:
break
if not isinstance(raw,str):
continue
event = json.loads(raw)
kind, data = event.get('type'), event.get('data',{})
if kind == 'progress_state':
print(json.dumps({'type':kind,'data':data},ensure_ascii=False)[:2400],flush=True)
if kind in ('progress','executing','execution_error','execution_success','status'):
if kind == 'execution_error':
data = {k:data.get(k) for k in ('prompt_id','node_id','exception_type','exception_message')}
print(json.dumps({'type':kind,'data':data},ensure_ascii=False),flush=True)
if __name__ == '__main__':
p = argparse.ArgumentParser()
p.add_argument('client')
asyncio.run(watch(p.parse_args().client))
@@ -0,0 +1,135 @@
{
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.png"
}
},
"2": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_ti2v_5B_fp16.safetensors",
"weight_dtype": "default"
}
},
"6": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"2",
0
],
"shift": 8.0
}
},
"8": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"type": "wan",
"device": "default"
}
},
"9": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan2.2_vae.safetensors"
}
},
"10": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "A continuous hand-drawn anime medium shot, locked-off camera. The man performs a clear everyday action with visible arm, shoulder and torso movement. He glances at his phone for a brief moment, then turns his head and shoulders toward the open locker on the left. He extends his right arm into the locker and places the phone flat onto the empty shelf. He lets go of the phone and withdraws his empty right hand. Then he reaches for the open locker door and swings it shut until the door is closed, ending with his hand resting briefly on the closed metal door. His eyes follow his hand, his weight shifts naturally toward the locker. Quiet wistful expression, mouth closed. Clearly readable deliberate physical movement, natural human timing. Preserve the same adult face, short black hair, blue uniform and reflective strips, crisp cel shadows and fine drawn outlines. The background and camera remain stationary. A single uninterrupted shot."
}
},
"11": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"8",
0
],
"text": "frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry"
}
},
"12": {
"class_type": "Wan22ImageToVideoLatent",
"inputs": {
"vae": [
"9",
0
],
"start_image": [
"1",
0
],
"width": 1024,
"height": 576,
"length": 145,
"batch_size": 1
}
},
"14": {
"class_type": "KSampler",
"inputs": {
"model": [
"6",
0
],
"positive": [
"10",
0
],
"negative": [
"11",
0
],
"latent_image": [
"12",
0
],
"seed": 43717240307252,
"steps": 20,
"cfg": 5.0,
"sampler_name": "uni_pc",
"scheduler": "simple",
"denoise": 1.0
}
},
"15": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"14",
0
],
"vae": [
"9",
0
]
}
},
"16": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": [
"15",
0
],
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
}
@@ -0,0 +1,576 @@
{
"last_node_id": 16,
"last_link_id": 12,
"nodes": [
{
"id": 1,
"type": "LoadImage",
"pos": [
40,
410
],
"size": [
360,
432
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
5
]
},
{
"name": "MASK",
"type": "MASK",
"links": []
}
],
"properties": {
"Node name for S&R": "LoadImage"
},
"widgets_values": [
"hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01.png",
"image"
]
},
{
"id": 2,
"type": "UNETLoader",
"pos": [
40,
40
],
"size": [
360,
300
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
1
]
}
],
"properties": {
"Node name for S&R": "UNETLoader"
},
"widgets_values": [
"wan2.2_ti2v_5B_fp16.safetensors",
"default"
]
},
{
"id": 6,
"type": "ModelSamplingSD3",
"pos": [
520,
238
],
"size": [
360,
300
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 1
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"links": [
6
]
}
],
"properties": {
"Node name for S&R": "ModelSamplingSD3"
},
"widgets_values": [
8.0
]
},
{
"id": 8,
"type": "CLIPLoader",
"pos": [
40,
1282
],
"size": [
360,
300
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"links": [
2,
3
]
}
],
"properties": {
"Node name for S&R": "CLIPLoader"
},
"widgets_values": [
"umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"wan",
"default"
]
},
{
"id": 9,
"type": "VAELoader",
"pos": [
40,
912
],
"size": [
360,
300
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"links": [
4,
11
]
}
],
"properties": {
"Node name for S&R": "VAELoader"
},
"widgets_values": [
"wan2.2_vae.safetensors"
]
},
{
"id": 10,
"type": "CLIPTextEncode",
"pos": [
520,
978
],
"size": [
360,
300
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 2
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
7
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"A continuous hand-drawn anime medium shot, locked-off camera. The man performs a clear everyday action with visible arm, shoulder and torso movement. He glances at his phone for a brief moment, then turns his head and shoulders toward the open locker on the left. He extends his right arm into the locker and places the phone flat onto the empty shelf. He lets go of the phone and withdraws his empty right hand. Then he reaches for the open locker door and swings it shut until the door is closed, ending with his hand resting briefly on the closed metal door. His eyes follow his hand, his weight shifts naturally toward the locker. Quiet wistful expression, mouth closed. Clearly readable deliberate physical movement, natural human timing. Preserve the same adult face, short black hair, blue uniform and reflective strips, crisp cel shadows and fine drawn outlines. The background and camera remain stationary. A single uninterrupted shot."
]
},
{
"id": 11,
"type": "CLIPTextEncode",
"pos": [
520,
1348
],
"size": [
360,
300
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 3
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"links": [
8
]
}
],
"properties": {
"Node name for S&R": "CLIPTextEncode"
},
"widgets_values": [
"frozen character, static image, slideshow, camera zoom, camera pan, camera shake, cuts, new character, talking, lip movement, floating phone, duplicate phone, extra arms, extra fingers, fused fingers, deformed hands, changing face, changing clothes, morphing, melting locker, flicker, photorealistic, 3d render, subtitles, watermark, blurry"
]
},
{
"id": 12,
"type": "Wan22ImageToVideoLatent",
"pos": [
520,
608
],
"size": [
360,
300
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "vae",
"type": "VAE",
"link": 4
},
{
"name": "start_image",
"type": "IMAGE",
"link": 5
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
9
]
}
],
"properties": {
"Node name for S&R": "Wan22ImageToVideoLatent"
},
"widgets_values": [
1024,
576,
145,
1
]
},
{
"id": 14,
"type": "KSampler",
"pos": [
1000,
758
],
"size": [
360,
370
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 6
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 7
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 8
},
{
"name": "latent_image",
"type": "LATENT",
"link": 9
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
10
]
}
],
"properties": {
"Node name for S&R": "KSampler"
},
"widgets_values": [
43717240307252,
"fixed",
20,
5.0,
"uni_pc",
"simple",
1.0
]
},
{
"id": 15,
"type": "VAEDecode",
"pos": [
1480,
793
],
"size": [
360,
300
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 10
},
{
"name": "vae",
"type": "VAE",
"link": 11
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
12
]
}
],
"properties": {
"Node name for S&R": "VAEDecode"
},
"widgets_values": []
},
{
"id": 16,
"type": "VHS_VideoCombine",
"pos": [
1960,
583
],
"size": [
360,
720
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 12
},
{
"name": "audio",
"type": "AUDIO",
"link": null
},
{
"name": "meta_batch",
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "Filenames",
"type": "VHS_FILENAMES",
"links": []
}
],
"properties": {
"Node name for S&R": "VHS_VideoCombine"
},
"widgets_values": {
"frame_rate": 24.0,
"loop_count": 0,
"filename_prefix": "hearthfire_tests/2026-09-29_EP01_LOCKER_PHONE_WAN22_5B_V01",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true,
"pix_fmt": "yuv420p",
"crf": 18,
"save_metadata": true,
"trim_to_audio": false
}
}
],
"links": [
[
1,
2,
0,
6,
0,
"MODEL"
],
[
2,
8,
0,
10,
0,
"CLIP"
],
[
3,
8,
0,
11,
0,
"CLIP"
],
[
4,
9,
0,
12,
0,
"VAE"
],
[
5,
1,
0,
12,
1,
"IMAGE"
],
[
6,
6,
0,
14,
0,
"MODEL"
],
[
7,
10,
0,
14,
1,
"CONDITIONING"
],
[
8,
11,
0,
14,
2,
"CONDITIONING"
],
[
9,
12,
0,
14,
3,
"LATENT"
],
[
10,
14,
0,
15,
0,
"LATENT"
],
[
11,
9,
0,
15,
1,
"VAE"
],
[
12,
15,
0,
16,
0,
"IMAGE"
]
],
"groups": [
{
"title": "EP01 SC02 - phone into locker - 6s character action",
"bounding": [
-5,
-51,
2370,
1744
],
"color": "#335159",
"font_size": 24
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.4,
"offset": [
0,
0
]
}
},
"version": 0.4
}