191 lines
13 KiB
Markdown
191 lines
13 KiB
Markdown
# 16|现有工作流拆解与搭建练习
|
||
|
||
[返回知识库目录](README.md) · [生成方式选择](14_文生视频与图生视频的选择.md) · [工作流搭建与排错](15_ComfyUI工作流搭建与排错.md)
|
||
|
||
本章用你已有项目说明“画面意图如何落到节点和连线”。案例是《明天的来电》的 S01 图生视频图,以及较早项目中的 Wan 5B 研究图。本轮只读检查,不提交渲染、不修改旧项目工作流。
|
||
|
||
资料核查:2026-10-29。服务器当时可访问,报告 ComfyUI **0.39.0**;这些是本次环境快照,不是其他机器的安装要求。
|
||
|
||
## 1. 先把四种“验证通过”分开
|
||
|
||
| 层级 | 本例的证据 | 能说明什么 | 不能说明什么 |
|
||
|---|---|---|---|
|
||
| 文件与历史 | S01 保存 API 与历史真正执行的图完全相等;记录为 success、completed=true | 这份图确实曾被成功执行 | 当前所有依赖仍与当时完全一致 |
|
||
| 当前节点接口 | 对16个节点逐个核对实时 schema,必填输入与引用输出类型未发现错误 | 当前节点存在,接线声明相容 | 张量尺寸、数值稳定性和内容质量一定正确 |
|
||
| 当前模型列表 | 本例5个模型或 LoRA 文件均在对应 loader 的可选列表中 | 文件名当前可被 loader 识别 | 每种量化、LoRA组合或硬件执行都已重新测试 |
|
||
| 本轮实际生成 | 未提交新任务 | 本章没有消耗一轮新生成来证明效果 | 原参考图片现在仍可加载、任意新尺寸都能成功 |
|
||
|
||
具体节点、连线、模型与验证边界保存在[工作流接口核对.json](工作流接口核对.json)。它是审计记录,不是可以直接提交的工作流。
|
||
|
||
## 2. 实际文件在哪里
|
||
|
||
下列链接指向制作电脑上的原项目,不随这个文档仓库打包;在别的电脑阅读时,需要使用自己的工作流与输入素材。
|
||
|
||
- [S01 的 GUI 工作流](F:/AI视频项目/short_drama_batch_20261028/C01_mystery/jobs/S01/workflow_gui.json):打开画布学习16个节点和19条连线。
|
||
- [S01 的 API 工作流](F:/AI视频项目/short_drama_batch_20261028/C01_mystery/jobs/S01/workflow_api.json):学习程序实际执行的字段与引用。
|
||
- [S01 的执行历史](F:/AI视频项目/short_drama_batch_20261028/C01_mystery/jobs/S01/history.json):核对真正执行的图与输出状态。
|
||
- [S01 的作业记录](F:/AI视频项目/short_drama_batch_20261028/C01_mystery/jobs/S01/job.json):对应项目的作业状态。
|
||
|
||
学习时先复制成自己的新版本,再替换首图和镜头描述。原执行文件可以继续作为历史依据。
|
||
|
||
## 3. 为什么说这次执行的是图生视频
|
||
|
||
看这条真实连线:
|
||
|
||
```text
|
||
LoadImage(ID 1,输出0:IMAGE)
|
||
→ MiniMaxH3ImageToVideo(ID 104)的 first_frame 输入
|
||
```
|
||
|
||
首图接入 `first_frame`,因此本次是首帧 I2V。判断依据是输入职责和实际连线,不是文件名、模型名或工作流标题。本手册所举的 Wan2.2 TI2V-5B 支持文字或图片模式,也不能据此判断某一次执行没有接图。首图提供起始视觉依据,不锁定未见背面、完整三维结构或后续动作时序;转身、环绕和交接仍须审片。
|
||
|
||
本次接口中,`MiniMaxH3ImageToVideo` 的必填项是 `clip / vae / prompt / width / height / length`,`first_frame / last_frame` 是可选图片输入。接口上的“可选”只描述字段要求;切到另一种模式,还应确认所选权重、模板与整个流程支持该任务。官方提供了不同模式模板,适合用来做准确对照。[Comfy H3 官方指南](https://docs.comfy.org/tutorials/video/minimax/minimax-h3)
|
||
|
||
## 4. 把16个节点分成六组读
|
||
|
||
### 4.1 主模型与加速分支
|
||
|
||
```text
|
||
UNETLoader 6
|
||
→ LoraLoaderModelOnly 121
|
||
├→ BasicGuider 16
|
||
└→ BasicScheduler 9
|
||
```
|
||
|
||
主模型负责生成,模型专用的 Turbo LoRA 改变这里的 MODEL 流。该图用的是 **ModelOnly** loader,CLIP 分支没有经过它;不要因为普通图片教程里出现了 `LoraLoader`,就给这里补一个并不存在的 CLIP 改动。
|
||
|
||
这份 LoRA 的用途是本项目的加速组合,没有证据说明它是为片中角色训练的身份 LoRA。减少步数必须与对应权重和采样方案相容;不能把“8步”当作随便换模型后仍成立的质量承诺。
|
||
|
||
### 4.2 文本、首图与视频潜空间
|
||
|
||
```text
|
||
CLIPLoader 13 ────────────────┐
|
||
VAELoader 11(视频VAE)───────┼→ MiniMaxH3ImageToVideo 104
|
||
LoadImage 1(首图)───────────┘ ├ 输出0:CONDITIONING → Guider 16
|
||
└ 输出1:LATENT → Sampler 14
|
||
```
|
||
|
||
提示词在104里与所需输入一起处理。它不仅输出条件,也准备带视频时间维度的潜空间;因此普通文生图中一个 `EmptyLatentImage` 不能不经模型适配地替代这个节点。
|
||
|
||
### 4.3 采样器不是一个“神奇黑盒按钮”
|
||
|
||
| ID / 节点 | 交给采样过程的是什么 | 本图设置或来源 |
|
||
|---|---|---|
|
||
| 15 `RandomNoise` | 起始噪声 | `noise_seed` |
|
||
| 16 `BasicGuider` | 模型与条件形成的引导 | 模型来自121,条件来自104输出0 |
|
||
| 17 `KSamplerSelect` | 采样算法对象 | `res_multistep` |
|
||
| 9 `BasicScheduler` | 采样噪声级别序列 SIGMAS | `simple`、8 steps、denoise 1.0 |
|
||
| 14 `SamplerCustomAdvanced` | 综合上述对象处理潜空间 | 初始 latent 来自104输出1 |
|
||
|
||
这里的 `BasicGuider` 只有模型与 conditioning 输入,没有普通正负提示成对输入。照搬其他模型的“加一个负向分支”并不能自动改善它。要按当前模型官方流程决定负向条件和引导方式。
|
||
|
||
### 4.4 一份采样结果,分别解出视频与声音
|
||
|
||
```text
|
||
SamplerCustomAdvanced 14(输出0)
|
||
├→ VAEDecode 10 + 视频VAE 11 → IMAGE 帧批次 ┐
|
||
└→ VAEDecodeAudio 23 + 音频VAE 24 → AUDIO ─┴→ CreateVideo 91
|
||
```
|
||
|
||
两个解码器取自同一采样结果,使用各自的 VAE。这里不能把音频 VAE 当作视频 VAE 使用,也不能把视频分支换成普通图片模型的 VAE。更不能把这条联合音视频路径推广为所有视频模型都具备原生音频。
|
||
|
||
### 4.5 封装和保存是两个职责
|
||
|
||
```text
|
||
CreateVideo 91(帧、音频、24fps)
|
||
→ SaveVideo 92(文件名前缀、容器/编码设置)
|
||
```
|
||
|
||
`CreateVideo` 把输入组合成 VIDEO,`SaveVideo` 才是这个例子中的保存终点。构图、角色一致性与对白质量仍要观看输出,文件存在不代表内容合格。
|
||
|
||
## 5. 节点 ID、输出 slot 和参数怎样对应
|
||
|
||
以下是从本例抽出的教学片段,省略了其余节点,并替换了原提示词;**不能单独提交运行**:
|
||
|
||
```json
|
||
{
|
||
"104": {
|
||
"class_type": "MiniMaxH3ImageToVideo",
|
||
"inputs": {
|
||
"clip": ["13", 0],
|
||
"vae": ["11", 0],
|
||
"first_frame": ["1", 0],
|
||
"prompt": "这里填写自己的镜头描述",
|
||
"width": 960,
|
||
"height": 544,
|
||
"length": 192
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
- `"104"` 是这个图里的节点 ID,不是所有 H3 图固定使用的编号。
|
||
- `class_type` 指具体节点实现,不能随意改成界面中文标题。
|
||
- `["13", 0]` 表示13号节点的第0个输出,slot 从0起数。
|
||
- `width: 960` 是直接填写的参数,不是连线。
|
||
- 本图104的第0输出是 CONDITIONING,第1输出才是 LATENT。两者如果接反,数字格式看似合法,类型却不相容。
|
||
|
||
GUI 文件还包含画布坐标、连线、控件与分组。修改 GUI 后,重新导出 API 比按猜测修改 `widgets_values` 的位置顺序更可靠。模型文件名、输入图与节点版本也要一起记录。[Comfy 工作流概念](https://docs.comfy.org/basic-concepts/workflow)
|
||
|
||
## 6. 本例参数只能当作基线记录
|
||
|
||
| 项目 | 该次图内的值 | 学习时注意 |
|
||
|---|---|---|
|
||
| 主模型 | `minimax_h3_fl2va_pruned_int8_convrot.safetensors` | 量化、架构和 loader 兼容需要对应环境验证 |
|
||
| 加速 LoRA | `minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors`,strength 1.0 | 名称和强度都属于这个组合 |
|
||
| 文本编码器 | `qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors`,type=minimax | 名字含 CLIP 的 loader 不代表内部一定是传统 CLIP 模型 |
|
||
| 视频 VAE | `minimax_h3_video_vae_fp16.safetensors` | 和音频 VAE 分开 |
|
||
| 音频 VAE | `minimax_h3_audio_vae_fp32.safetensors` | 不替代视频解码器 |
|
||
| 尺寸 / 帧数 | 960×544,192帧 | 不等于最终剪辑输出尺寸;帧数约束按具体模型确定 |
|
||
| 封装帧率 | 24fps | 192÷24是名义8秒,实际文件时长需媒体探测 |
|
||
| 采样设置 | 8步、res_multistep/simple、denoise 1.0 | 不外推为通用最快配置 |
|
||
|
||
改变分辨率、时长、量化或 LoRA 都可能改变内存和数值行为。已经成功过的8秒图,也不能证明任意长片段或多人动作都稳定。
|
||
|
||
## 7. 新手照着怎样练搭建
|
||
|
||
这是练习安排,不会因阅读本章自动排队任务。
|
||
|
||
1. **先读闭环。** 在 GUI 副本里从保存节点逆着线走,找出帧、声音、采样、条件和模型的来源。能回答每条线是什么类型,再动手删改。
|
||
2. **替换首图与描述。** 在界面上传自己的图片,让 `LoadImage` 使用服务端实际收到的文件;远程 Linux ComfyUI 不能直接读取 Windows 的 `F:/...` 路径。
|
||
3. **保留已知基线。** 起初保持对应模板的模型、编码器、VAE、采样器与调度参数;尺寸和帧数调整也遵守模型限制。
|
||
4. **只更改一个创作变量。** 比较相同构图下静止、缓慢转头、一次递物等动作,不同时更换模型、首图、运镜、步数和 LoRA。
|
||
5. **记录运行与画面。** 检查任务完成、文件可播放、时长与声音,并观看关键动作、首尾帧和前后镜连续性。
|
||
6. **再添加一项功能。** 需要另一种控制时,选择该模型支持的参考、首尾帧或控制模板;需要放大时在输出路径另加明确阶段,分别验证。
|
||
7. **保存两个格式与依赖。** 画布版用于打开编辑,API版用于程序调用;记录它们对应同一版本。
|
||
|
||
如果想练纯文生视频,另开官方 T2V 模板,确认未接首帧、尾帧或参考图/视频等视觉输入,且当前路径确为文字驱动,再和 I2V 做同一镜头任务的对照。不要把这份已接首图的图改个文件名就当作 T2V 基线。
|
||
|
||
## 8. Wan 5B 的本地参考为什么不能与 H3 混接
|
||
|
||
[本地 Wan 参考 API](F:/AI视频项目/moon_repair_20261016/research/wan5b_reference_from_gui.api.json)的路径是:
|
||
|
||
```text
|
||
UNETLoader → ModelSamplingSD3 → KSampler → VAEDecode → VHS_VideoCombine
|
||
CLIPLoader → 正向/负向 CLIPTextEncode ────→ KSampler
|
||
LoadImage → Wan22ImageToVideoLatent ──────→ KSampler.latent_image
|
||
Wan2.2 VAE ───→ 视频 latent 准备与 VAEDecode
|
||
```
|
||
|
||
这也是 I2V:`LoadImage` 接到了 `start_image`。图中使用 Wan2.2 5B、对应的 Wan2.2 VAE,以及 UMT5 编码器;它与 H3 的条件处理、采样组织和音频路径不同。本地保存版使用 VHS 输出,官方当前示例也可采用其他保存节点;不要因输出节点不同就把整个模型链混换。[Wan2.2 官方教程](https://docs.comfy.org/tutorials/video/wan/wan2_2)
|
||
|
||
同目录的[竖屏候选图](F:/AI视频项目/moon_repair_20261016/research/wan5b_i2v_portrait_candidate.api.json)仍含 `REPLACE_WITH_UPLOAD_RETURNED_PATH.png`。它不能原样运行,81帧设置也不能借后来73帧的成片记录冒称已经验证。学习时区分“研究候选”“真实提交图”“成功输出”,保留每一步的证据。
|
||
|
||
## 9. 复制前的五个检查问题
|
||
|
||
- 这张图实际是文生、首图驱动,还是参考驱动?输入线在哪里?
|
||
- 我想锁定的是身份、首帧、动作还是镜头路线,当前输入方式真的约束了它吗?
|
||
- 模型、编码器、VAE、加速 LoRA、采样路径是否属于兼容的一套?
|
||
- 改图后能从保存终点追到完整输入吗?图片、视频和声音类型是否匹配?
|
||
- 我的“可用”证据到哪一层:只有能打开、接口通过、跑完过,还是已经观看并验收?
|
||
|
||
## 10. 依据与边界
|
||
|
||
- 原项目 GUI、API、作业和历史文件:本章节点 ID、连线与已执行证据的直接来源。
|
||
- [本轮工作流接口核对](工作流接口核对.json):当前节点与模型列表的只读核实,不代表新渲染成功。
|
||
- [Comfy H3 官方指南](https://docs.comfy.org/tutorials/video/minimax/minimax-h3):模板模式与多模态工作流入口。
|
||
- [Comfy Wan2.2 官方教程](https://docs.comfy.org/tutorials/video/wan/wan2_2):5B 文/图双模式与模型组件的对应关系。
|
||
- [Comfy 工作流概念](https://docs.comfy.org/basic-concepts/workflow):节点、类型、连线和保存。
|
||
|
||
本章没有重分发模型或输入图片,没有新建可直接执行的完整工作流。上面的图示和片段用于教你读懂和搭建;真正运行时,以完整模板、实机接口与自己的素材为准。
|