← lab.ranzi.space

ComfyUI 交互入门教程

面向完全没接触过 ComfyUI 的 AI 探索者。终点:在 RTX 3090 上跑通 Wan2.2 Animate 14B fp8 视频生成工作流。

阅读时长 30-45 分钟 目标硬件 RTX 3090 24GB 中文 · 不依赖网络

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 / ...
搜索节点双击空白弹出搜索框,关键词模糊匹配,比右键快得多
移动节点左键拖标题栏拖中间字段会触发参数滑动,要拖标题
连线从输出小圆点拖到另一个节点的输入小圆点颜色不匹配的接口会自动拒绝
删除节点选中后按 DeleteBackspace
复制节点Ctrl+C 然后 Ctrl+V带连线复制用 Ctrl+Shift+V
队列执行Q 或点 Queue Prompt把当前工作流推进队列开跑
缩放画布滚轮以鼠标位置为中心
平移画布空白处拖动 或 按住空格拖

快捷键查找器(点击键名看动作)

点上面的键名
看 ComfyUI 里这个按键对应什么动作。
核心要点
  • 双击空白搜索节点,比右键菜单快
  • Q 排队执行,Ctrl+Enter 也行
  • 连线只能"输出 → 输入",且颜色必须匹配
  • 工作流卡了不动 → 看右下角队列条,有没有任务在跑

CH 03核心节点术语

每个节点本质上都是一块积木

  • 左边的小圆点 = 输入插槽(这块积木需要什么材料)
  • 右边的小圆点 = 输出插槽(加工完吐出什么东西)
  • 中间的字段 = 参数(这块积木的设置旋钮)

下面这 6 个节点是 95% 工作流都会用到的。一定要把名字记住,看图能立刻认出来。

CheckpointLoader(模型加载器)
字面解释读取一个 .safetensors 主模型文件,把它装进显存
类比厨房里把冷藏的食材从冰箱拿出来解冻、上灶
本场景所有工作流的起点。Wan2.2 Animate 也是从这里加载
输出MODEL(蓝)/ CLIP(黄)/ VAE(红)三条线,分别给后面用
CLIPTextEncode(提示词编码器)
字面解释把你写的英文文字"a girl in red dress"翻译成模型能听懂的向量
类比翻译官把人话翻译成机器语言
本场景正向提示词(要什么)和负向提示词(不要什么)各用一个
输出CONDITIONING(橙)—— 这块翻译稿喂给采样器
KSampler(采样器)
字面解释真正"画画"的节点。从一团随机噪声开始,迭代去噪,逐步还原出图
类比画家在白布上不停"减法",每一笔都把噪点擦掉一点,最后露出图像
本场景核心参数:steps(迭代步数)、cfg(提示词遵循度)、sampler_name(去噪算法)、seed(随机种子)
输出LATENT(紫)—— 还在"压缩态"的图,需要 VAE 解码才能看
VAEDecode(解码器)
字面解释把 LATENT(潜空间)数据还原成像素图
类比把 RAW 文件冲洗成 JPEG
本场景采样器吐出 LATENT 后必接这个,否则看不到图
输出IMAGE(绿)
LoadImage(加载图片)
字面解释从硬盘读一张图当输入
类比给厨师递一张参考图
本场景图生图、ControlNet、人脸参考都靠它。Wan2.2 Animate 里加载参考帧也用它
输出IMAGE(绿)和 MASK(蒙版,可选)
SaveImage(保存图片)
字面解释把生成的图存到 output/ 目录
类比厨师把成品装盘端出
本场景所有图最终都要进这个节点;视频工作流里换成 VHS_VideoCombine 之类
输入IMAGE(绿)
核心要点
  • 左输入 / 右输出 / 中间参数——所有节点都遵守这个规则
  • CheckpointLoader 一开口就吐三条线,记住颜色对应关系
  • 采样器吐出来的是"压缩态"的图(LATENT),必须 VAEDecode 才能看
  • 所有工作流的本质:加载模型 → 编码提示词 → 采样 → 解码 → 保存

CH 04第一个工作流:文生图 hello world

下面这张图是 ComfyUI 启动后的默认工作流——文生图。鼠标移到任意节点上看它的中文说明。

CheckpointLoader 加载主模型 MODEL CLIP VAE CLIPTextEncode 正向提示词 CLIPTextEncode 负向提示词 EmptyLatentImage 空白潜空间画布 KSampler 采样器 (画画核心) model positive negative latent LATENT VAEDecode 解码成像素 latent vae Save Image
把鼠标移到节点上
看每个节点的中文说明(线在流动,是数据流方向)。
核心要点
  • 文生图的"主干":CheckpointLoader → CLIPTextEncode ×2 → KSampler → VAEDecode → SaveImage
  • EmptyLatentImage 决定输出尺寸(写在画布上)
  • 正向 + 负向两个 CLIPTextEncode 是标配,两个都不能省
  • 线在工作流真实运行时会有动画——表示数据正在流

试试看:猜节点小游戏

给你一段功能描述,猜是哪个节点。答错有提示。

CH 05数据流颜色规范

ComfyUI 用颜色来分清哪条线传什么数据。颜色对不上是接不上线的——这是它的"类型系统"。下面这张图就是全部颜色规范:

MODEL · 蓝
主模型权重(去噪的"大脑")
CLIP · 黄
文本编码器(懂语言的部分)
VAE · 红
潜空间 ↔ 像素的翻译器
IMAGE · 绿
真正的像素图(你能看的)
LATENT · 紫
压缩态的图(采样器在这里工作)
CONDITIONING · 橙
编码后的提示词(喂给采样器)

颜色之间的转换关系

英文文字 CLIPTextEncode CONDITIONING LATENT VAEDecode IMAGE IMAGE VAEEncode LATENT (反向:图生图时把已有图压回潜空间) 正向:提示词 → 采样器能用 / 潜空间 → 看得见
核心要点
  • 同色才能连——连不上多半是颜色错了
  • LATENT(紫)是采样器的工作语言,KSampler 进出都是紫
  • 看见绿色 = 像素图,可以直接 Save;看见紫色 = 还压着,必须 VAEDecode
  • CLIP(黄)和 CONDITIONING(橙)别搞混——黄是"翻译官本人",橙是"翻译稿"

CH 06加载现有 .json 工作流

实际跑 Wan2.2 Animate 你不会自己从零搭节点——你会去 GitHub / Civitai / Comfy 工作流库下别人做好的 .json 文件。导入方式有两种:

  1. 拖进窗口:把 .json 文件直接拖到 ComfyUI 画布上,立刻加载
  2. 菜单 Load:右上角 Workflow → Load 选文件(老版本叫 Queue 旁边的 Load 按钮)

有些工作流甚至嵌在 PNG 里——把生成的图拖进来,ComfyUI 会从图片元数据里读出整个工作流。这是个隐藏便利。

"缺失节点 (Missing Node Types)" 怎么办

导入工作流时弹红色对话框,写着 "When loading the graph, the following node types were not found"——意思是这个工作流用了你没装的自定义节点。这是 ComfyUI 最常见的报错。

处理步骤
  1. 看红框里列出的节点名,比如 VHS_VideoCombine / WanAnimateLoader
  2. 打开 ComfyUI-Manager(下一章会讲怎么装),点 "Install Missing Custom Nodes"
  3. 它会扫描你的工作流,把缺失的节点对应的插件列出来,一键安装
  4. 装完必须重启 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 的"应用商店"。装好之后所有插件都能图形界面一键搜索 / 安装 / 升级。

装 Manager 本身(只做一次)
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/ 下的每个子目录。每类模型放在固定文件夹里,名字不能错。

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.exampleextra_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 · 给底模加"插件"
字面解释Low-Rank Adaptation。在主模型上叠加一个小补丁文件,让模型学会某个风格 / 某个人脸 / 某个姿势
类比主模型是 macOS,LoRA 是装上去的小插件,不改系统但增加新能力
大小主模型 6~14GB,LoRA 几十 MB ~ 几百 MB
怎么用在 CheckpointLoader 之后加 LoLAtaLoader 节点,强度 0.5~1.0
本场景Wan2.2 的"闪电 LoRA(Lightning LoRA)"让模型 4 步就能出帧,比标准 20 步快 5 倍
ControlNet · 画面的"骨架引导"
字面解释给模型一张"线稿/姿态图/深度图"作为构图约束,模型按这个骨架填颜色
类比给油画家一张铅笔素描,让他在素描上涂色——构图不能乱
常见类型OpenPose(人体姿态)/ Canny(边缘线稿)/ Depth(深度图)/ Lineart(精细线稿)
本场景Wan2.2 Animate 用 OpenPose ControlNet 锁定每一帧的人体姿态,确保生成视频不"抽筋"
VAE · 翻译官
字面解释Variational AutoEncoder。负责"像素图 ↔ 潜空间"的双向翻译
类比中英翻译——人话(像素图)和机器话(潜空间)之间的双向翻译官
为什么要单独主模型在潜空间里工作(节省 64 倍算力),最后必须 VAE 解码才能给人看
什么时候要换SDXL 自带的 VAE 不够好时换成 sdxl_vae_fp16_fix;Wan2.2 用自己的 VAE 不用换
核心要点
  • LoRA = 主模型的"轻量化补丁",可以叠多个
  • ControlNet = 给画面加"骨架",让模型按构图填色
  • VAE = 潜空间和像素图之间的翻译官,必须有但通常主模型自带
  • Wan2.2 Animate 用到全部三个:主模型 + Lightning LoRA + Pose ControlNet

CH 10跑 Wan2.2 Animate 视频生成

现在所有前置知识都有了,回到你的真实目标:用 DeepFaceLab 的 SRC 素材(人脸序列)+ 一段参考视频,生成换脸的高质量视频。这里把 Wan2.2 Animate 工作流里的"黑话"逐个解一遍。

关键黑话

Wan2.2 Animate 14B fp8
字面解释Wan2.2 系列的视频动画版,14B 参数,fp8 量化
14B14 billion 参数(140 亿)。模型规模越大,质量越好,但显存吃得越凶
fp8 量化把模型权重从 fp16(16 位浮点)压缩成 fp8(8 位浮点),显存减半,质量损失很小。fp16 版要 28GB 显存,3090 跑不了;fp8 版只要 14GB,3090 24GB 刚好够
本场景这就是为什么你必须用 fp8 版本——24GB 显存上唯一能跑的选择
Lightning LoRA(闪电 LoRA · 4 步采样)
字面解释蒸馏过的 LoRA,让模型只用 4 步采样(标准要 20-30 步)就能出好质量
为什么快视频要逐帧生成,假设一段 5 秒视频 16fps = 80 帧。每帧 20 步 = 1600 步采样;每帧 4 步 = 320 步。直接快 5 倍
代价极端细节略输给 20 步版,但 90% 场景看不出区别,是 ROI 极高的优化
怎么用下载 lightning_lora_4steps.safetensors 放进 loras/,工作流里 LoRALoader 加载,KSampler 的 steps 改成 4
参考帧 / Reference Image
字面解释告诉模型"我要这张脸"——通常用 DeepFaceLab 的 SRC 文件夹挑一张正脸高清图
类比美术老师给你看一张照片:把这张脸画到那段视频里
建议用清晰、正脸、表情中性的图。眼睛和嘴的细节清楚程度直接影响最终质量
驱动视频 / Driving Video
字面解释提供动作和姿态的源视频——模型会保留它的肢体动作、镜头运动、表情
类比导演给你看一段表演视频:照这个演法,但脸换成参考帧那张
建议分辨率不必很高(1280×720 就够),但人体清晰、避免快速运动模糊

建议工作流参数(针对 RTX 3090 24GB)

参数推荐值说明
主模型Wan2.2-Animate-14B-fp8fp16 跑不动,fp8 是唯一选择
采样器euler 或 unipc视频生成稳定性优于 dpmpp 系列
steps(每帧步数)4(用 Lightning LoRA) 或 20(不用)Lightning LoRA 起步
cfg1.0~2.0视频生成 cfg 比图片低很多,太高会闪
分辨率720×1280 / 832×4803090 的稳定上限,再高容易 OOM
视频长度49~81 帧大约 3~5 秒。更长一次出会爆显存,分段后拼接
FPS(输出)16fps 原始 → 用 RIFE 插帧到 30fpsWan 原生 16fps,靠插帧节点拉到 30fps
显存爆炸 (CUDA Out of Memory) 怎么救
  • 分辨率降一级: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 秒测试视频。任何一步卡住,回到对应章节查。