ComfyUI 交互入门教程
面向完全没接触过 ComfyUI 的 AI 探索者。终点:在 RTX 3090 上跑通 Wan2.2 Animate 14B fp8 视频生成工作流。
CH 01ComfyUI 是什么
ComfyUI 是一个用节点图来跑 Stable Diffusion / Flux / Wan2.2 这类生成模型的工具。你把若干"积木"用线连起来,每块积木做一件事——加载模型、写提示词、采样、解码图片——线就是数据的流向。
跟其他工具的关系
用一个比喻:
| 工具 | 类比 | 给你的控制粒度 |
|---|---|---|
| Midjourney | 下馆子点菜 | 只能选菜单上的"风格 / 比例",做菜过程看不到 |
| A1111 WebUI | 家用面包机 | 按个按钮,一键出图。能调几个参数,但黑盒 |
| ComfyUI | 自己组装的流水线工厂 | 每个步骤都是看得见的积木,可以随便接线、加工序、换零件 |
对你的用例(DeepFaceLab 素材 + Wan2.2 Animate 视频生成)来说,ComfyUI 几乎是唯一选择——视频工作流要串很多步骤(输入视频 → 抽帧 → 姿态分析 → 替换 → 重编码),WebUI 那种"一键"模式根本喂不下这种复杂度。
- ComfyUI = 节点式工作流引擎,每个节点做一件事,线代表数据流
- 跟 Midjourney/WebUI 比,灵活度顶天,代价是要看得懂图
- 视频生成 / 多步骤工作流 几乎只能用 ComfyUI
- 工作流可以存成
.json或截图(PNG 里嵌元数据),别人能直接复现
为什么节点式比一键式更有未来
新模型出来时,节点式社区会先在 ComfyUI 适配。原因是节点抽象后,研究人员只要写一个新节点就能把新能力暴露出来,不用做完整 UI。所以 Flux、Wan2.2、HiDream 这些新模型一般先有 ComfyUI 工作流,几周后才有 WebUI 插件。
另一个原因:工作流可分享。一个 .json 文件等于一份"配方",别人下载就能复现你的结果。这是 Stable Diffusion 生态能持续爆发的关键。
什么时候不该用 ComfyUI
纯静态出图、风格统一、不需要复杂控制时,Midjourney 或 NovelAI 更省心——质量天花板高、不用调参数。ComfyUI 的成本是学习曲线和显存管理;如果只是想出几张高质量插图,用错了工具。
CH 02基本操作
启动 ComfyUI 后你会看到一张深色画布。所有操作都在这张画布上完成。基本动作就那么几个:
| 动作 | 方法 | 说明 |
|---|---|---|
| 添加节点 | 画布右键 → Add Node | 按分类找:loaders / sampling / image / ... |
| 搜索节点 | 双击空白 | 弹出搜索框,关键词模糊匹配,比右键快得多 |
| 移动节点 | 左键拖标题栏 | 拖中间字段会触发参数滑动,要拖标题 |
| 连线 | 从输出小圆点拖到另一个节点的输入小圆点 | 颜色不匹配的接口会自动拒绝 |
| 删除节点 | 选中后按 Delete 或 Backspace | |
| 复制节点 | Ctrl+C 然后 Ctrl+V | 带连线复制用 Ctrl+Shift+V |
| 队列执行 | 按 Q 或点 Queue Prompt | 把当前工作流推进队列开跑 |
| 缩放画布 | 滚轮 | 以鼠标位置为中心 |
| 平移画布 | 空白处拖动 或 按住空格拖 |
快捷键查找器(点击键名看动作)
- 双击空白搜索节点,比右键菜单快
- Q 排队执行,Ctrl+Enter 也行
- 连线只能"输出 → 输入",且颜色必须匹配
- 工作流卡了不动 → 看右下角队列条,有没有任务在跑
CH 03核心节点术语
每个节点本质上都是一块积木:
- 左边的小圆点 = 输入插槽(这块积木需要什么材料)
- 右边的小圆点 = 输出插槽(加工完吐出什么东西)
- 中间的字段 = 参数(这块积木的设置旋钮)
下面这 6 个节点是 95% 工作流都会用到的。一定要把名字记住,看图能立刻认出来。
.safetensors 主模型文件,把它装进显存output/ 目录- 左输入 / 右输出 / 中间参数——所有节点都遵守这个规则
- CheckpointLoader 一开口就吐三条线,记住颜色对应关系
- 采样器吐出来的是"压缩态"的图(LATENT),必须 VAEDecode 才能看
- 所有工作流的本质:加载模型 → 编码提示词 → 采样 → 解码 → 保存
CH 04第一个工作流:文生图 hello world
下面这张图是 ComfyUI 启动后的默认工作流——文生图。鼠标移到任意节点上看它的中文说明。
- 文生图的"主干":CheckpointLoader → CLIPTextEncode ×2 → KSampler → VAEDecode → SaveImage
- EmptyLatentImage 决定输出尺寸(写在画布上)
- 正向 + 负向两个 CLIPTextEncode 是标配,两个都不能省
- 线在工作流真实运行时会有动画——表示数据正在流
试试看:猜节点小游戏
给你一段功能描述,猜是哪个节点。答错有提示。
CH 05数据流颜色规范
ComfyUI 用颜色来分清哪条线传什么数据。颜色对不上是接不上线的——这是它的"类型系统"。下面这张图就是全部颜色规范:
颜色之间的转换关系
- 同色才能连——连不上多半是颜色错了
- LATENT(紫)是采样器的工作语言,KSampler 进出都是紫
- 看见绿色 = 像素图,可以直接 Save;看见紫色 = 还压着,必须 VAEDecode
- CLIP(黄)和 CONDITIONING(橙)别搞混——黄是"翻译官本人",橙是"翻译稿"
CH 06加载现有 .json 工作流
实际跑 Wan2.2 Animate 你不会自己从零搭节点——你会去 GitHub / Civitai / Comfy 工作流库下别人做好的 .json 文件。导入方式有两种:
- 拖进窗口:把
.json文件直接拖到 ComfyUI 画布上,立刻加载 - 菜单 Load:右上角
Workflow → Load选文件(老版本叫 Queue 旁边的 Load 按钮)
有些工作流甚至嵌在 PNG 里——把生成的图拖进来,ComfyUI 会从图片元数据里读出整个工作流。这是个隐藏便利。
"缺失节点 (Missing Node Types)" 怎么办
导入工作流时弹红色对话框,写着 "When loading the graph, the following node types were not found"——意思是这个工作流用了你没装的自定义节点。这是 ComfyUI 最常见的报错。
- 看红框里列出的节点名,比如
VHS_VideoCombine/WanAnimateLoader - 打开 ComfyUI-Manager(下一章会讲怎么装),点 "Install Missing Custom Nodes"
- 它会扫描你的工作流,把缺失的节点对应的插件列出来,一键安装
- 装完必须重启 ComfyUI(关掉命令行窗口重开),节点才会出现
Manager 找不到的节点怎么办
少数特别新或私人发布的节点 Manager 没收录。这时打开工作流 .json 文件,搜节点名找 GitHub 仓库地址(往往作者写在 README 里)。然后手动 git clone 到 custom_nodes/ 目录,再装它的 requirements.txt。
如果连仓库都找不到——这个工作流可能用了 alpha 版本节点,去工作流发布页问作者要。
- 拖 .json 进窗口 = 加载工作流;拖 .png 也能加载(前提是生成时嵌了 workflow)
- Missing Node = 缺自定义节点,用 Manager "Install Missing" 一键解
- 装完任何节点都要重启 ComfyUI 进程,节点才生效
- 找不到的节点 → 去 GitHub 手动 clone,少数情况要找作者要
CH 07装自定义节点的两种方式
ComfyUI 本身只带最基础的节点。视频生成、Wan2.2、人脸交换这些能力都靠"自定义节点"扩展。装节点有两条路:
方式 A:ComfyUI-Manager(推荐 90% 场景用)
它是 ComfyUI 的"应用商店"。装好之后所有插件都能图形界面一键搜索 / 安装 / 升级。
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager
# 然后重启 ComfyUI,画布右上角会多一个 "Manager" 按钮
之后想装任何节点:点 Manager → Install Custom Nodes → 搜名字 → Install → 重启。完整无脑。
方式 B:手动 git clone + pip install(特殊场景)
用得到的场景:Manager 没收录、想装某个分支、需要改源码。
cd ComfyUI/custom_nodes git clone https://github.com/作者/插件名.git cd 插件名 # 看仓库 README,一般要装依赖 ../../python_embeded/python.exe -m pip install -r requirements.txt # Windows 整合包用 python_embeded,Linux/Mac 用 venv 里的 pip
- pip 用错了:必须用 ComfyUI 自己的 Python 装依赖,不能用系统 Python。整合包路径是
python_embeded/python.exe - 依赖冲突:两个插件要不同版本的 torch / numpy,装了之后 ComfyUI 起不来。解决:看启动报错 → 锁定哪个包 → 手动
pip install 包名==特定版本
对 Wan2.2 Animate 工作流,你大概率要装这几个
ComfyUI-WanVideoWrapper(kijai 出品)— Wan2.2 系列模型的核心包装节点
ComfyUI-VideoHelperSuite(VHS)— 视频导入 / 拼接 / 导出节点
ComfyUI-KJNodes — kijai 的工具节点合集,很多工作流依赖它
ComfyUI-Frame-Interpolation — 帧间插值,把 16 帧/秒的输出补到 30 帧/秒更流畅
这些全部能在 Manager 里搜到,不用手动 clone。
- 装好 Manager 后,99% 的插件不用碰命令行
- 装完任何节点必须重启 ComfyUI 才生效
- 手动装时 pip 必须用 ComfyUI 自己的 Python,不能混用
- 插件依赖冲突是大坑——出问题先看启动日志哪一行报错
CH 08模型放哪:models/ 目录详解
ComfyUI 启动后会扫描 ComfyUI/models/ 下的每个子目录。每类模型放在固定文件夹里,名字不能错。
├── checkpoints/ # 主模型(最大一类).safetensors / .ckpt
│ ├── sd_xl_base_1.0.safetensors
│ └── Wan2.2-Animate-14B-fp8.safetensors
├── loras/ # LoRA 微调权重 (几十 MB ~ 几 GB)
│ ├── lightning_lora_4steps.safetensors
│ └── my_face_lora.safetensors
├── vae/ # 单独的 VAE 文件(有些主模型不内置 VAE)
│ └── sdxl_vae.safetensors
├── clip/ # 单独的 CLIP 文本编码器
│ └── clip_l.safetensors
├── clip_vision/ # 看图的 CLIP(图生图引导用)
│ └── clip_vision_g.safetensors
├── controlnet/ # ControlNet 骨架引导模型
│ └── control_v11p_sd15_openpose.safetensors
├── upscale_models/ # 超分辨率模型(4x-UltraSharp 等)
├── embeddings/ # Textual Inversion 嵌入
└── diffusion_models/ # Flux / Wan 等新架构主模型有时放这里
把 LoRA 放进 checkpoints/,LoRALoader 节点的下拉框就是空的。这是新手第一周最常踩的坑——把每个模型按类型对号入座。
模型大、硬盘不够:外置盘 + extra_model_paths.yaml
Wan2.2 14B fp8 一个就 14GB,配上各种 LoRA / VAE / ControlNet,500GB 硬盘扛不住。把模型放外置 SSD,让 ComfyUI 去那边读:
在 ComfyUI 根目录复制 extra_model_paths.yaml.example 为 extra_model_paths.yaml,改成:
external: base_path: D:/AI_Models/ # 你的外置盘根路径 checkpoints: checkpoints/ loras: loras/ vae: vae/ clip_vision: clip_vision/ controlnet: controlnet/
这样 ComfyUI 启动时既扫描自己的 models/,也扫描 D:/AI_Models/ 下对应子目录。两边都能放,不会冲突。
跟 A1111 共用模型库
如果你之前装过 A1111 WebUI,所有模型已经在 stable-diffusion-webui/models/。可以直接在 extra_model_paths.yaml 里把 A1111 的路径写进来,两边共用一份模型,省下半个硬盘。
a111: base_path: D:/stable-diffusion-webui/ checkpoints: models/Stable-diffusion loras: models/Lora vae: models/VAE
- 每类模型有固定文件夹,放错位置节点的下拉框就是空的
- 大模型放外置盘,靠 extra_model_paths.yaml 串联
- 跟 A1111 可以共用同一份模型库
- 新模型/新架构有时放在 diffusion_models/,看工作流要求
CH 09进阶概念:LoRA / ControlNet / VAE
主模型已经能出图,那 LoRA / ControlNet / VAE 这些"挂件"到底是什么?用一句话各自定位:
- LoRA = 主模型的"轻量化补丁",可以叠多个
- ControlNet = 给画面加"骨架",让模型按构图填色
- VAE = 潜空间和像素图之间的翻译官,必须有但通常主模型自带
- Wan2.2 Animate 用到全部三个:主模型 + Lightning LoRA + Pose ControlNet
CH 10跑 Wan2.2 Animate 视频生成
现在所有前置知识都有了,回到你的真实目标:用 DeepFaceLab 的 SRC 素材(人脸序列)+ 一段参考视频,生成换脸的高质量视频。这里把 Wan2.2 Animate 工作流里的"黑话"逐个解一遍。
关键黑话
建议工作流参数(针对 RTX 3090 24GB)
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 主模型 | Wan2.2-Animate-14B-fp8 | fp16 跑不动,fp8 是唯一选择 |
| 采样器 | euler 或 unipc | 视频生成稳定性优于 dpmpp 系列 |
| steps(每帧步数) | 4(用 Lightning LoRA) 或 20(不用) | Lightning LoRA 起步 |
| cfg | 1.0~2.0 | 视频生成 cfg 比图片低很多,太高会闪 |
| 分辨率 | 720×1280 / 832×480 | 3090 的稳定上限,再高容易 OOM |
| 视频长度 | 49~81 帧 | 大约 3~5 秒。更长一次出会爆显存,分段后拼接 |
| FPS(输出) | 16fps 原始 → 用 RIFE 插帧到 30fps | Wan 原生 16fps,靠插帧节点拉到 30fps |
- 分辨率降一级:832×480 比 720×1280 省约 40% 显存
- 视频长度砍半:从 81 帧降到 49 帧,分两段生成再拼接
- 开
--lowvram或--medvram启动参数(速度变慢但稳) - 关掉所有别的吃显存程序(浏览器、Discord、游戏)
- 试用
TorchCompileModel节点:编译模型省 10-15% 显存
典型 Wan2.2 Animate 工作流的节点链(概览)
从左到右,大致这样:
LoadImage (参考帧) ↓ LoadVideo (驱动视频) ↓ DWPoseEstimator (从驱动视频提姿态) ↓ WanVideoModelLoader (加载 Wan2.2-Animate fp8) ↓ LoRALoader (加载 Lightning LoRA) ↓ WanVideoAnimateSampler (核心采样, 4 步) ↓ VAEDecode ↓ VideoFrameInterpolation (RIFE 插帧 16→30fps) ↓ VHS_VideoCombine (导出 MP4)
具体的 .json 工作流可以在 kijai 的 GitHub(ComfyUI-WanVideoWrapper 仓库)或 ComfyUI 工作流分享站找到,下载下来直接拖进去。第一次跑通后再按你的需求调参。
跑通第一遍后的验证清单
- 5 秒视频生成时间应该在 3~6 分钟(3090 + Lightning LoRA)
- 显存峰值应该在 20~22 GB(接近 24GB 上限,正常)
- 输出脸部不闪、姿态跟驱动视频一致 = 成功
- 如果脸部"飘"或细节糊:参考帧换张更清晰的
- 如果姿态错位:驱动视频里有遮挡,DWPose 识别不出,换段干净的
- fp8 量化是 3090 24GB 上的唯一选择,fp16 直接 OOM
- Lightning LoRA + 4 步采样是视频生成的核心提速秘诀,必用
- cfg 在视频生成里要调低(1~2),图片那套 7 在这里会闪
- 显存炸了:降分辨率 → 砍长度 → lowvram 模式 → 重启释放显存
教程到这里结束。建议动手节奏:先把 ComfyUI 装上、跑通文生图(第 4 章那张图)→ 用 Manager 装 Wan / VHS 系列节点 → 下载 Wan2.2-Animate fp8 模型和 Lightning LoRA → 找一个现成的 Wan2.2 Animate 工作流 .json → 拖进去跑 5 秒测试视频。任何一步卡住,回到对应章节查。