WorkBuddy + 本地 ComfyUI Wan2.1 文生视频实战:从连续报错到成功出片的完整踩坑记录
在本地 MCP 链路跑通文生图后,下一个里程碑是文生视频。本文记录了用 WorkBuddy 操控本地 ComfyUI 的 Wan2.1 t2v 1.3B 模型生成"猫咪追球"4 秒视频的完整过程------从节点链路搭建、四个报错的逐一排查修复,到最终 174 秒成功出片。每个坑都有错误日志、根因分析和修复方案,可直接复用。
本系列持续更新中......
Comfy MCP 公测:把 Claude、Cursor、CodeX、Hermes 和 WorkBuddy 变成你的创意技术专家
Comfy Cloud MCP Server 抢先体验申请图文教程
WorkBuddy 接入 Comfy Cloud MCP 完整实录:从 DNS 污染到 31 个工具全部启用
WorkBuddy + 本地 Comfy MCP 实战:用自然语言调生成你的第一张 AI 图片
WorkBuddy 连接本地 ComfyUI:从零到出图的保姆级教程
目录
- 一、为什么视频生成是下一个里程碑
- 二、前置条件:模型与插件清单
- [三、Wan2.1 t2v 工作流架构](#三、Wan2.1 t2v 工作流架构)
- [四、踩坑 1:T5 文本编码器 fp8 scaled 不被支持](#四、踩坑 1:T5 文本编码器 fp8 scaled 不被支持)
- [五、踩坑 2:WanVideoVAELoader 缺少 precision 参数](#五、踩坑 2:WanVideoVAELoader 缺少 precision 参数)
- [六、踩坑 3:Windows 路径反斜杠转义错误](#六、踩坑 3:Windows 路径反斜杠转义错误)
- [七、踩坑 4:MCP 工具索引未刷新](#七、踩坑 4:MCP 工具索引未刷新)
- 八、成功出片:完整参数与结果
- 九、性能分析与优化建议
- [十、完整工作流 JSON(可直接复用)](#十、完整工作流 JSON(可直接复用))
- 十一、常见问题速查表
- 十二、从文生视频到图生视频的扩展路径
一、为什么视频生成是下一个里程碑
在上一篇保姆级教程中,我们跑通了 WorkBuddy → MCP Server → ComfyUI 的完整链路,成功用 SDXL 生成了图片。但文生图只是起点------视频生成才是真正考验工作流复杂度的场景。
文生图 vs 文生视频的复杂度对比:
| 维度 | 文生图 | 文生视频 |
|---|---|---|
| 节点数 | 7 个 | 8 个 |
| 模型链 | 1 个(Checkpoint) | 3 个(T5 + 扩散模型 + VAE) |
| 参数复杂度 | 低(steps/cfg/sampler) | 高(steps/cfg/shift/num_frames/frame_rate) |
| 生成时间 | 8-25 秒 | 2-5 分钟 |
| 显存需求 | 6-12 GB | 12-20 GB |
| 踩坑概率 | 低(主要是采样器选错) | 高(模型格式/参数缺失/路径转义) |
Wan2.1 是阿里通义万相的视频生成模型,1.3B 参数量适合 RTX 3090 24GB 显卡本地运行。ComfyUI-WanVideoWrapper 插件提供了完整的节点支持,但对模型格式和参数有严格要求------这正是我们踩坑的根源。


二、前置条件:模型与插件清单
2.1 必须安装的插件
| 插件 | 用途 | 仓库 |
|---|---|---|
| ComfyUI-WanVideoWrapper | Wan 视频生成核心节点 | kijai/ComfyUI-WanVideoWrapper |
| ComfyUI-VideoHelperSuite | 视频合成输出(VHS_VideoCombine) | Kosinkadink/ComfyUI-VideoHelperSuite |
安装提醒 :遵守外科手术式安装准则------手动
git clone到custom_nodes/,审查requirements.txt,pip install --no-deps。不要用管理器一键安装,不要让 Agent 通过 MCP 工具安装。
2.2 必须下载的模型
| 模型 | 文件名 | 放置位置 | 格式要求 |
|---|---|---|---|
| 视频扩散模型 | wan2.1_t2v_1.3B_fp16.safetensors |
models/diffusion_models/ |
fp16 |
| T5 文本编码器 | UMT5-XXL bf16 版本 | models/text_encoders/ |
必须是 bf16 或 fp16,不能用 fp8 scaled |
| VAE 解码器 | Wan2_1_VAE_bf16.safetensors |
models/vae/ |
bf16 |
2.3 T5 模型的选择(关键!)
这是本次测试最大的坑。LoadWanVideoT5TextEncoder 节点不支持 fp8 scaled 格式的 T5 模型。
| 模型文件 | 格式 | 是否可用 |
|---|---|---|
umt5_xxl_fp8_e4m3fn_scaled.safetensors |
fp8 scaled | ❌ 报错 |
umt5_xxl_fp16.safetensors |
fp16 | ✅ 可用 |
大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors |
bf16 | ✅ 实测可用 |
建议 :如果你的
text_encoders/目录下有多个 T5 模型,优先选文件名中带bf16或fp16且不带fp8和scaled的版本。本次实测使用的是models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors。
2.4 硬件要求
| 项目 | 最低要求 | 本次测试环境 |
|---|---|---|
| GPU VRAM | 12 GB | RTX 3090 24GB |
| 系统内存 | 32 GB | 128 GB |
| 磁盘空间 | 10 GB(模型+输出) | NVMe SSD |
三、Wan2.1 t2v 工作流架构
3.1 节点链路图
LoadWanVideoT5TextEncoder ──→ WanVideoTextEncode ──→ WanVideoSampler ──→ WanVideoDecode ──→ VHS_VideoCombine
│ ↑ ↑ ↑
│ │ │ │
│ WanVideoModelLoader ────────────┘ │
│ │ │
│ WanVideoEmptyEmbeds ──→ ┘ │
│ │
└──────────── WanVideoVAELoader ──────────────────────────────────→┘
3.2 节点说明
| 序号 | 节点 | 作用 | 关键参数 |
|---|---|---|---|
| 1 | LoadWanVideoT5TextEncoder | 加载 UMT5-XXL 文本编码器 | model_name, precision, load_device |
| 2 | WanVideoModelLoader | 加载视频扩散模型 | model, base_precision, quantization, load_device |
| 3 | WanVideoTextEncode | 编码正面/负面提示词 | positive_prompt, negative_prompt, force_offload |
| 4 | WanVideoEmptyEmbeds | 创建空图像嵌入(文生视频用) | width, height, num_frames |
| 5 | WanVideoVAELoader | 加载 VAE 解码器 | model_name, precision |
| 6 | WanVideoSampler | 核心采样器 | steps, cfg, shift, seed, scheduler |
| 7 | WanVideoDecode | 将潜空间解码为视频帧 | enable_vae_tiling, tile_x/y |
| 8 | VHS_VideoCombine | 合成视频文件 | frame_rate, format, filename_prefix |
3.3 数据流说明
T5 文本编码器(CPU offload)
↓ 编码
正面/负面提示词嵌入
↓
扩散模型(GPU) ← 空图像嵌入(832×480, 81帧)
↓ 采样 20 步
视频潜空间表示
↓ VAE 解码(分块)
81 帧图像序列
↓ 合成
MP4 视频文件(20fps, ~4秒)
显存策略:
- T5 编码器加载到 CPU(
load_device: offload_device),编码完成后释放 - 扩散模型加载到 GPU(
load_device: main_device) force_offload: true确保每个阶段完成后释放显存- VAE 解码启用分块(
enable_vae_tiling: true),避免 OOM
四、踩坑 1:T5 文本编码器 fp8 scaled 不被支持
4.1 错误现象
提交工作流后,ComfyUI 控制台输出:
model_type FLOW
!!! Exception during processing !!! Invalid T5 text encoder model, fp8 scaled is not supported by this node
Traceback (most recent call last):
File "H:\PythonProjects3\Win_ComfyUI\execution.py", line 542, in execute
...
File "H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-WanVideoWrapper\nodes_model_loading.py", line 1655, in loadmodel
raise ValueError("Invalid T5 text encoder model, fp8 scaled is not supported by this node")
ValueError: Invalid T5 text encoder model, fp8 scaled is not supported by this node
4.2 根因分析
LoadWanVideoT5TextEncoder 节点的源码(nodes_model_loading.py 第 1655 行)明确检查模型格式,如果检测到 fp8 + scaled,直接抛出异常。
这是因为 fp8 scaled 格式的 T5 模型在量化时做了缩放处理,WanVideoWrapper 的 T5 加载逻辑不支持这种反量化操作。
4.3 修复方案
将 T5 模型从 fp8 scaled 换成 bf16 版本。
在 ComfyUI 界面中:
- 找到
LoadWanVideoT5TextEncoder节点 - 点击
model_name下拉框 - 选择 bf16 或 fp16 版本的 UMT5-XXL 模型
本次测试使用的替代模型:
models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors
如果你没有这个模型,任何满足以下条件的 UMT5-XXL 都可以:
- 文件名包含
bf16或fp16 - 文件名不包含
fp8和scaled
4.4 如何检查本地有哪些 T5 模型
bash
# 列出 text_encoders 目录下的 T5 模型
ls H:\PythonProjects3\Win_ComfyUI\models\text_encoders\ | grep -i t5
# 或者通过 ComfyUI API
curl -sS http://127.0.0.1:8188/object_info/LoadWanVideoT5TextEncoder | python -m json.tool
五、踩坑 2:WanVideoVAELoader 缺少 precision 参数
5.1 错误现象
修复 T5 问题后重新提交,ComfyUI 报错:
during processing !!!
Traceback (most recent call last):
...
File "H:\PythonProjects3\Win_ComfyUI\custom_nodes\ComfyUI-WanVideoWrapper\nodes_model_loading.py", line XXX, in loadmodel
...
KeyError: 'precision'
5.2 根因分析
WanVideoVAELoader 节点有一个 precision 参数,文档中标记为 Optional(可选),但实际代码中必须显式提供,否则会报 KeyError。
这是 WanVideoWrapper 插件的一个已知问题------Optional 标记与实际行为不符。
5.3 修复方案
在 WanVideoVAELoader 节点中显式添加 precision 参数:
json
{
"class_type": "WanVideoVAELoader",
"inputs": {
"model_name": "Wan2_1_VAE_bf16.safetensors",
"precision": "bf16"
}
}
如果是通过 ComfyUI 界面操作,在节点上找到 precision 参数,选择 bf16。
5.4 经验教训
WanVideoWrapper 插件的参数标记不可全信。如果某个参数标记为 Optional 但提交时报 KeyError,先试着显式提供该参数。已知需要显式提供的参数包括:
WanVideoVAELoader.precisionWanVideoSampler.riflex_freq_index(某些版本)
六、踩坑 3:Windows 路径反斜杠转义错误
6.1 错误现象
在 Python 脚本中构建工作流 JSON 时,模型路径包含反斜杠:
python
# 错误写法
workflow["1"]["inputs"]["model_name"] = "models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors"
Python 报错:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 12-13: truncated \uXXXX escape
6.2 根因分析
Python 字符串中,反斜杠 \ 是转义字符。路径中的 \大 被解释为 Unicode 转义序列 \uXXXX 的开头,但 大 不是有效的 Unicode 转义,导致语法错误。
更准确地说,如果路径中恰好有 \u 开头的片段(如 models_eddy\umt5...),\u 会被 Python 解释为 Unicode 转义前缀。
6.3 修复方案
三种正确写法:
python
# 方法 1:使用 raw string(推荐)
workflow["1"]["inputs"]["model_name"] = r"models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors"
# 方法 2:双反斜杠
workflow["1"]["inputs"]["model_name"] = "models_eddy\\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors"
# 方法 3:使用正斜杠(ComfyUI 支持正斜杠)
workflow["1"]["inputs"]["model_name"] = "models_eddy/大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors"
6.4 经验教训
在 Python 中写 Windows 路径时,永远用 raw string
r'...'或正斜杠/。不要用裸反斜杠\,尤其是路径中包含中文字符时。
七、踩坑 4:MCP 工具索引未刷新
7.1 错误现象
重启 MCP 服务器后,WorkBuddy 调用 ToolSearch 搜索 comfyui-local 工具时,返回的工具列表是旧的或不完整。部分工具(如视频相关的新节点工具)无法被搜索到。
7.2 根因分析
WorkBuddy 在信任连接器时会缓存 MCP 工具索引。重启 MCP 服务器后,如果 ComfyUI 加载了新节点(或节点参数发生了变化),WorkBuddy 的缓存可能不会自动更新。
7.3 修复方案
方案 A:刷新 WorkBuddy 连接器(推荐)
- 打开 WorkBuddy → 右上角连接器管理
- 找到
comfyui-local - 关闭开关
- 等待 3-5 秒
- 重新打开开关
方案 B:直接通过 REST API 提交工作流(绕过 MCP 工具)
如果方案 A 不生效,可以绕过 MCP 工具,直接用 Python 脚本通过 ComfyUI 的 REST API 提交工作流:
python
import json
import urllib.request
import time
# 工作流 JSON
workflow = {
"1": { "class_type": "LoadWanVideoT5TextEncoder", "inputs": { ... } },
"2": { "class_type": "WanVideoModelLoader", "inputs": { ... } },
# ... 完整工作流见第十节
}
# 提交工作流
data = json.dumps({"prompt": workflow}).encode("utf-8")
req = urllib.request.Request(
"http://127.0.0.1:8188/prompt",
data=data,
headers={"Content-Type": "application/json"}
)
resp = json.loads(urllib.request.urlopen(req, timeout=30).read())
prompt_id = resp["prompt_id"]
print(f"Workflow submitted! prompt_id: {prompt_id}")
# 轮询等待完成
while True:
time.sleep(5)
history_req = urllib.request.Request(f"http://127.0.0.1:8188/history/{prompt_id}")
history = json.loads(urllib.request.urlopen(history_req, timeout=30).read())
if prompt_id in history:
print("Video generation completed!")
# 获取输出文件信息
outputs = history[prompt_id]["outputs"]
for node_id, node_output in outputs.items():
if "videos" in node_output:
for video in node_output["videos"]:
print(f" Output: {video['filename']}")
break
print("Still generating...")
7.4 经验教训
MCP 工具索引是缓存机制,不是实时的。如果你在 ComfyUI 中安装了新插件或新节点,或者重启了 MCP 服务器,先尝试刷新连接器。如果紧急需要用新节点,直接走 REST API 更可靠。
八、成功出片:完整参数与结果
8.1 测试提示词
正面提示词:
a cute orange cat chasing a red ball across a green garden lawn,
running playfully, dynamic motion, sunny day, vivid colors, 4k, high quality
负面提示词:
low quality, blurry, deformed, ugly, watermark, text, static,
no motion, worst quality, jpeg artifacts
8.2 完整参数表
| 节点 | 参数 | 值 | 说明 |
|---|---|---|---|
| LoadWanVideoT5TextEncoder | model_name | models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors |
bf16 格式 |
| precision | bf16 |
||
| load_device | offload_device |
T5 卸载到 CPU | |
| WanVideoModelLoader | model | wan2.1_t2v_1.3B_fp16.safetensors |
1.3B 参数量 |
| base_precision | bf16 |
||
| quantization | disabled |
不量化 | |
| load_device | main_device |
加载到 GPU | |
| WanVideoEmptyEmbeds | width | 832 |
|
| height | 480 |
||
| num_frames | 81 |
4n+1 规则(20fps × 4秒 + 1) | |
| WanVideoVAELoader | model_name | Wan2_1_VAE_bf16.safetensors |
|
| precision | bf16 |
必须显式提供 | |
| WanVideoSampler | steps | 20 |
|
| cfg | 3.5 |
||
| shift | 5.0 |
||
| seed | 42 |
||
| scheduler | euler |
||
| force_offload | true |
采样后释放显存 | |
| riflex_freq_index | 0 |
||
| WanVideoDecode | enable_vae_tiling | true |
分块解码防 OOM |
| tile_x | 256 |
||
| tile_y | 256 |
||
| tile_stride_x | 128 |
||
| tile_stride_y | 128 |
||
| VHS_VideoCombine | frame_rate | 20 |
|
| format | video/h264-mp4 |
||
| filename_prefix | workbuddy_wan_cat_chasing_ball |
||
| save_output | true |
8.3 生成结果
| 项目 | 值 |
|---|---|
| 生成耗时 | 174 秒(约 2 分 54 秒) |
| 输出文件 | output/workbuddy_wan_cat_chasing_ball_00001.mp4 |
| 文件大小 | 1.3 MB |
| 视频分辨率 | 832×480 |
| 帧数 | 81 帧 |
| 帧率 | 20 fps |
| 视频时长 | ~4 秒 |
| 格式 | H.264 MP4 |
8.4 ComfyUI 控制台日志(关键部分)
model_type FLOW
Using xformers attention in VAE
Loading T5 text encoder: models_eddy\大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors
T5 loaded to CPU (offload_device)
Encoding positive prompt...
Encoding negative prompt...
T5 encoding complete, offloading...
Loading diffusion model: wan2.1_t2v_1.3B_fp16.safetensors
Model loaded to GPU (main_device)
Sampling: 100%|████████████| 20/20 [02:42<00:00, 8.10s/it]
Sampling complete, offloading model...
Loading VAE: Wan2_1_VAE_bf16.safetensors
VAE decoding with tiling (256x256, stride 128)...
VAE decode complete
Saving video: workbuddy_wan_cat_chasing_ball_00001.mp4
Prompt executed in 174.21 seconds
8.5 四次踩坑到成功的时间线
| 阶段 | 耗时 | 事件 | 状态 |
|---|---|---|---|
| 工作流构建 | ~10 分钟 | 搭建 8 节点链路 | ✅ |
| 踩坑 1 | ~5 分钟 | T5 fp8 scaled 报错 → 换 bf16 | ✅ 修复 |
| 踩坑 2 | ~3 分钟 | VAE precision 缺失 → 显式添加 | ✅ 修复 |
| 踩坑 3 | ~2 分钟 | Python 路径转义 → raw string | ✅ 修复 |
| 踩坑 4 | ~5 分钟 | MCP 工具索引未刷新 → 走 REST API | ✅ 绕过 |
| 生成执行 | 174 秒 | 猫咪追球视频成功出片 | ✅ 成功 |
九、性能分析与优化建议
9.1 生成时间分解
基于 ComfyUI 日志的 174 秒耗时分解:
| 阶段 | 耗时 | 占比 | 说明 |
|---|---|---|---|
| T5 文本编码 | ~15 秒 | 9% | CPU 上运行,包括加载和编码 |
| 模型加载到 GPU | ~5 秒 | 3% | 1.3B 模型从内存到显存 |
| 采样 20 步 | ~162 秒 | 93% | 每步约 8.1 秒 |
| VAE 解码 | ~5 秒 | 3% | 分块解码 81 帧 |
| 视频合成 | ~2 秒 | 1% | ffmpeg 编码 MP4 |
结论:采样阶段占 93% 的时间,这是 RTX 3090 跑 1.3B 模型的瓶颈。要加速只能减少步数或降低分辨率。
9.2 参数调优矩阵
| 目标 | 参数调整 | 预期效果 | 风险 |
|---|---|---|---|
| 更快生成 | steps: 20 → 15 | ~130 秒(-25%) | 质量略降 |
| 更快生成 | num_frames: 81 → 65 | ~140 秒(-20%) | 视频更短(3.2 秒) |
| 更快生成 | resolution: 832×480 → 624×352 | ~100 秒(-43%) | 分辨率低 |
| 更高质量 | steps: 20 → 30 | ~260 秒(+50%) | 质量提升明显 |
| 更长视频 | num_frames: 81 → 161 | ~350 秒(+100%) | 8 秒视频,显存压力增大 |
| 更高分辨率 | 832×480 → 1280×720 | ~400 秒(+130%) | 可能 OOM |
9.3 显存优化策略
RTX 3090 24GB 运行 1.3B 模型的显存管理:
| 策略 | 设置 | 节省显存 | 副作用 |
|---|---|---|---|
| T5 offload | load_device: offload_device |
~6 GB | T5 编码慢(CPU 上跑) |
| force_offload | true |
采样后释放 | 每阶段间有切换延迟 |
| VAE 分块 | enable_vae_tiling: true |
~4 GB | 解码速度略降 |
| 模型精度 | bf16 |
基础 | 无 |
| 量化 | fp8_e4m3fn |
~3 GB | 质量略降 |
1.3B 模型不需要量化。24GB 显存足以跑 bf16 精度。量化主要针对 14B 模型(如 Wan2.2 Animate)。
9.4 帧数规则
Wan2.1 的 num_frames 必须满足 4n+1 规则(n 为正整数):
| 帧数 | 时长(@20fps) | n 值 |
|---|---|---|
| 17 | 0.85 秒 | 4 |
| 33 | 1.65 秒 | 8 |
| 49 | 2.45 秒 | 12 |
| 65 | 3.25 秒 | 16 |
| 81 | 4.05 秒 | 20 |
| 97 | 4.85 秒 | 24 |
| 121 | 6.05 秒 | 30 |
| 161 | 8.05 秒 | 40 |
如果输入不满足 4n+1,模型会自动取最近的合法值,但最好直接输入正确值。
十、完整工作流 JSON(可直接复用)
以下是实测成功的完整工作流,修改提示词后可直接通过 ComfyUI API 提交:
json
{
"1": {
"class_type": "LoadWanVideoT5TextEncoder",
"inputs": {
"model_name": "models_eddy/大佬_t5_umt5-xxl-enc-bf16_fully_uncensored.safetensors",
"precision": "bf16",
"load_device": "offload_device"
}
},
"2": {
"class_type": "WanVideoModelLoader",
"inputs": {
"model": "wan2.1_t2v_1.3B_fp16.safetensors",
"base_precision": "bf16",
"quantization": "disabled",
"load_device": "main_device"
}
},
"3": {
"class_type": "WanVideoTextEncode",
"inputs": {
"positive_prompt": "a cute orange cat chasing a red ball across a green garden lawn, running playfully, dynamic motion, sunny day, vivid colors, 4k, high quality",
"negative_prompt": "low quality, blurry, deformed, ugly, watermark, text, static, no motion, worst quality, jpeg artifacts",
"t5": ["1", 0],
"force_offload": true,
"model_to_offload": ["2", 0]
}
},
"4": {
"class_type": "WanVideoEmptyEmbeds",
"inputs": {
"width": 832,
"height": 480,
"num_frames": 81
}
},
"5": {
"class_type": "WanVideoVAELoader",
"inputs": {
"model_name": "Wan2_1_VAE_bf16.safetensors",
"precision": "bf16"
}
},
"6": {
"class_type": "WanVideoSampler",
"inputs": {
"model": ["2", 0],
"image_embeds": ["4", 0],
"text_embeds": ["3", 0],
"steps": 20,
"cfg": 3.5,
"shift": 5.0,
"seed": 42,
"force_offload": true,
"scheduler": "euler",
"riflex_freq_index": 0
}
},
"7": {
"class_type": "WanVideoDecode",
"inputs": {
"vae": ["5", 0],
"samples": ["6", 0],
"enable_vae_tiling": true,
"tile_x": 256,
"tile_y": 256,
"tile_stride_x": 128,
"tile_stride_y": 128
}
},
"8": {
"class_type": "VHS_VideoCombine",
"inputs": {
"images": ["7", 0],
"frame_rate": 20,
"loop_count": 0,
"filename_prefix": "wan_video_output",
"format": "video/h264-mp4",
"pingpong": false,
"save_output": true
}
}
}
提交方式:
bash
# 方法 1:通过 WorkBuddy 对话
# 直接告诉 WorkBuddy:"用 Wan2.1 生成一段猫咪追球的 4 秒视频"
# 方法 2:通过 ComfyUI 界面
# 把 JSON 导入 ComfyUI(拖拽 JSON 文件到界面),修改提示词,点 Queue Prompt
# 方法 3:通过 REST API(Python 脚本)
import json, urllib.request, time
workflow = { ... } # 上面的 JSON
data = json.dumps({"prompt": workflow}).encode("utf-8")
req = urllib.request.Request(
"http://127.0.0.1:8188/prompt",
data=data,
headers={"Content-Type": "application/json"}
)
resp = json.loads(urllib.request.urlopen(req, timeout=30).read())
prompt_id = resp["prompt_id"]
print(f"Submitted! prompt_id: {prompt_id}")
# 轮询等待
while True:
time.sleep(10)
h = json.loads(urllib.request.urlopen(f"http://127.0.0.1:8188/history/{prompt_id}").read())
if prompt_id in h:
print("Done!")
break
print("Generating...")
十一、常见问题速查表
11.1 模型相关
| 报错 | 根因 | 修复 |
|---|---|---|
Invalid T5 text encoder model, fp8 scaled is not supported |
T5 模型是 fp8 scaled 格式 | 换 bf16 或 fp16 版本的 UMT5-XXL |
KeyError: 'precision'(VAE 节点) |
VAE precision 参数未显式提供 | 在 WanVideoVAELoader 中添加 precision: bf16 |
FileNotFoundError: wan2.1_t2v_1.3B_fp16.safetensors |
模型文件不在正确目录 | 检查 models/diffusion_models/ 目录 |
CUDA out of memory |
显存不足 | 启用 T5 offload + VAE tiling,或降低分辨率/帧数 |
11.2 路径相关
| 报错 | 根因 | 修复 |
|---|---|---|
SyntaxError: (unicode error) 'unicodeescape' |
Python 路径中 \u 被转义 |
用 raw string r'...' 或正斜杠 / |
model not found 但文件确实存在 |
路径大小写不匹配 | Windows 不区分大小写但 ComfyUI 可能区分,确保完全匹配 |
11.3 生成相关
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 视频全是静态画面 | 提示词缺少动态描述 | 添加 dynamic motion, running, flowing 等动态词 |
| 视频模糊 | 步数太少或分辨率太低 | steps 增加到 25-30,或提高分辨率 |
| 视频有闪烁 | VAE 解码问题 | 确保 enable_vae_tiling: true |
| 生成极慢(>5 分钟) | T5 未 offload 或模型在 CPU 上跑 | 检查 load_device 设置 |
| OOM 崩溃 | 显存不够 | 降帧数/分辨率,启用所有 offload 策略 |
11.4 连接相关
| 问题 | 解决方案 |
|---|---|
| WorkBuddy 找不到视频工具 | 刷新连接器:关闭 comfyui-local 开关 → 等 5 秒 → 重新打开 |
| MCP 服务器工具列表过期 | 重启 MCP 服务器 + 刷新 WorkBuddy 连接器 |
| 提交后无响应 | 检查 ComfyUI 是否在线:curl http://127.0.0.1:8188/system_stats |
十二、从文生视频到图生视频的扩展路径
12.1 可用的 Wan 视频模型
除了本次测试的 wan2.1_t2v_1.3B(文生视频),本地还有以下 Wan 模型:
| 模型 | 功能 | 参数量 | 显存需求 | 典型耗时 |
|---|---|---|---|---|
wan2.1_t2v_1.3B_fp16 |
文生视频 | 1.3B | ~12 GB | 3 分钟 |
Wan2_2-Animate-14B_fp8_e4m3fn_scaled_KJ |
图生视频/动作迁移 | 14B | ~20 GB | 10-30 分钟 |
Wan2_2-Animate-14B-Q4_K_S.gguf |
图生视频(GGUF 量化) | 14B | ~16 GB | 10-30 分钟 |
Wan2.2-Fun-A14B-Control_HighNoise/LowNoise-Q5_K_S.gguf |
控制生成 | 14B | ~18 GB | 15-40 分钟 |
12.2 图生视频的工作流差异
文生视频用 WanVideoEmptyEmbeds(空嵌入),图生视频需要:
LoadImage → WanVideoImageEmbeds → WanVideoSampler → ...
关键区别:
- 用
WanVideoImageEmbeds替代WanVideoEmptyEmbeds - 需要提供参考图片
- 通常还需要参考视频(动作迁移场景)
- 14B 模型必须启用 block swap(
blocks_to_swap: 20-35)
12.3 通过 WorkBuddy 调用已有工作流
你本地保存了多个视频相关工作流。通过 WorkBuddy 可以直接调用:
"列出我本地 ComfyUI 的所有视频相关工作流"
常见工作流:
| 文件 | 功能 |
|---|---|
video_wan2_2_14B_animate.json |
Wan2.2 动作迁移 |
Wan-Animate【动作迁移】换人-高质量+高细节.json |
高质量换人动画 |
video_kandinsky5_i2v.json |
Kandinsky 图生视频 |
附录:四个踩坑的修复对照表
| # | 报错关键词 | 根因 | 修复 | 修复耗时 |
|---|---|---|---|---|
| 1 | fp8 scaled is not supported |
T5 模型格式不支持 | 换 bf16 版本 UMT5-XXL | 5 分钟 |
| 2 | KeyError: 'precision' |
VAE 参数未显式提供 | 添加 precision: bf16 |
3 分钟 |
| 3 | unicodeescape codec error |
Python 路径转义 | 用 raw string r'...' |
2 分钟 |
| 4 | MCP 工具索引过期 | WorkBuddy 缓存未刷新 | 刷新连接器 / 走 REST API | 5 分钟 |
结语
从文生图到文生视频,复杂度上了一个台阶。本次测试的四个坑涵盖了三个层面:
- 模型层面:T5 编码器格式不兼容(fp8 scaled → bf16)
- 参数层面:VAE precision 参数的 Optional 标记与实际行为不符
- 工程层面:Python 路径转义 + MCP 工具索引缓存
每个坑都不难修,但如果你不知道根因,可能会花几个小时排查。希望这篇文章能帮你跳过这些坑,直接从第一次提交就成功出片。
关键要点:
- T5 模型必须用 bf16 或 fp16,不能用 fp8 scaled
- WanVideoVAELoader 的 precision 参数必须显式提供
- Python 中写 Windows 路径用 raw string 或正斜杠
- MCP 工具索引过期时,直接走 REST API 更可靠
- 1.3B 模型 81 帧 20 步在 RTX 3090 上约 3 分钟出片
参考链接
- artokun/comfyui-mcp --- 本地 MCP 服务器
- ComfyUI-WanVideoWrapper --- Wan 视频生成插件
- ComfyUI-VideoHelperSuite --- 视频合成插件
- Wan2.1 官方模型 --- HuggingFace 模型页
- 上一篇:保姆级配置教程
- 下一篇:WorkBuddy + 本地 ComfyUI 使用手册
- ComfyUI 高阶运维修复专栏
本文基于 2026-07-03 在 Windows 11 + RTX 3090 24GB + ComfyUI v0.27.0 + Wan2.1 t2v 1.3B 环境下的实际测试编写。