最近在折腾 AI 图像生成时,我发现了一个挺有意思的现象:很多朋友在接触 Stable Diffusion 时,会不自觉地被 WebUI 那种“所见即所得”的界面所吸引,觉得它直观、易上手。但一旦开始尝试更复杂的任务,比如批量处理、特定风格的精修,或者想把生成过程嵌入到自己的自动化流程里,就会立刻遇到瓶颈——界面上的按钮和滑块,似乎总在限制你更精细地控制每一个环节。
这时,如果你还在用“哪个界面更好看”来评判工具,可能就错过了真正重要的东西。ComfyUI 的出现,本质上不是提供了一个“更好看”的 Stable Diffusion 前端,而是把图像生成的整个“黑盒”过程,拆解成了一个完全可视化、可编程、可复用的“工作流”。它解决的不是“怎么点一下出图”,而是“如何把一次成功的出图,沉淀成一套可以稳定运行、随时调用、甚至分发给团队其他人的自动化流程”。
很多人第一次打开 ComfyUI,看到满屏的节点和连线,第一反应是“太复杂了,劝退”。这恰恰是最大的误解。它的复杂,是“乐高积木”式的复杂——每一块积木(节点)都极其简单,功能单一,但通过你的连接,却能构建出任何你想要的复杂结构。而 WebUI 的“简单”,则是“一体式遥控器”的简单——按钮很多,但内部电路板对你不可见,你想改个电阻电容?几乎不可能。
所以,这篇文章不会只教你“按哪个按钮出图”。我想和你聊的是,如何从“一次性操作者”转变为“流程设计者”。我们将从零开始,搭建一个属于你自己的、可迭代、可分享的 ComfyUI 工作流。你会发现,前期花在理解节点和连线上的时间,会在你日后处理第一百张、第一千张图片时,成倍地回报给你。
1. 环境部署:别急着“下一步”,先想清楚你要在哪里“盖房子”
部署 ComfyUI 本身并不复杂,但部署前的几个选择,会直接影响你后续使用的顺畅度和扩展性。很多人卡在插件安装、模型加载上,根源往往是最初的环境没搭对。
1.1 核心选择:便携版 vs 源码克隆,哪种才是你的“舒适区”?
目前主流的部署方式有两种:
- 便携版(Portable / 一键包):通常是一个打包好的压缩文件,解压即用,内置了 Python、Torch 等必要环境。它的优点是开箱即用,对新手极其友好,几乎不会遇到环境冲突问题。
- 源码克隆(Git Clone):从 GitHub 克隆官方仓库,然后在你的现有 Python 环境中安装依赖。
如何选择?我建议用一个简单的标准来判断:你是否需要频繁地切换或测试不同的 AI 模型、工具,或者你本身就是一个 Python 开发者?
- 如果你答案是“不”,或者你只想快速体验 ComfyUI:直接选择便携版。这是阻力最小的路径,能让你在5分钟内打开软件,把精力集中在学习工作流本身,而不是和 pip、conda 报错作斗争。很多教程提供的整合包就属于此类。
- 如果你答案是“是”,或者你已有成熟的 Python 开发环境:选择源码克隆。这能让你更好地管理依赖,方便地使用
git pull更新 ComfyUI,也更容易集成到你自己编写的脚本中。但你需要面对可能的环境配置问题。
对于绝大多数想要学习和稳定使用ComfyUI 的用户,我的第一个实操建议是:首选社区维护的优秀便携整合包。一个好的整合包通常会帮你预置一些常用插件、中文汉化以及清晰的目录结构。
注意:无论选择哪种方式,请务必从 ComfyUI 官方 GitHub 仓库或你信任的、活跃的社区获取资源,避免潜在的安全风险。
1.2 目录结构解析:模型应该放在哪?生成的文件去哪了?
解压或克隆后,你会看到一堆文件夹。混乱从这里开始。理解这几个核心目录,能避免你未来80%的“模型找不到”和“图片不见了”的问题。
ComfyUI/ ├── models/ # 核心模型目录 │ ├── checkpoints/ # 放置大模型(.safetensors, .ckpt) │ ├── vae/ # 放置 VAE 模型 │ ├── loras/ # 放置 LoRA 模型 │ ├── controlnet/ # 放置 ControlNet 模型 │ └── ... # 其他如 upscale_models, clip_vision 等 ├── input/ # 可选,可放置待处理的输入图片 ├── output/ # ComfyUI 默认的图片输出目录 ├── comfy/ # 程序核心源码 ├── custom_nodes/ # **重中之重**,所有第三方插件都安装在这里 └── ... # 其他配置和日志文件关键习惯养成:从第一天起,就建立清晰的模型管理习惯。你可以把从 Civitai、Hugging Face 下载的模型,按照上述分类,放入对应的文件夹。custom_nodes文件夹的整洁与否,直接决定了你插件管理的难度。
1.3 首次启动与基础配置
启动run_nvidia_gpu.bat(Windows,N卡)或相应的启动脚本后,浏览器会自动打开本地页面(通常是http://127.0.0.1:8188)。
首次打开,界面空空如也。这是正常的,因为它是一个“空画布”。在真正开始连接节点前,先做两件小事:
- 设置输出路径:在界面设置里,确认输出目录。你可以将其指向一个你常用的、空间充足的硬盘位置。
- 熟悉操作:
- 右键点击画布空白处:这是召唤所有节点的“魔法菜单”。
- 鼠标中键拖拽:平移画布。
- 鼠标滚轮:缩放画布。
- 点击节点上的输出点(右端),拖拽到另一个节点的输入点(左端):建立连接。
环境准备就绪,画布空空如也。接下来,我们不是直接堆节点,而是先理解构建工作流最核心的“设计图”。
2. 核心逻辑:理解“工作流”的本质——数据流图
ComfyUI 的界面被称为“节点图”界面。这里的每一个节点,都代表 Stable Diffusion 生成过程中的一个确定性的函数或操作。节点之间的连线,代表数据的流动。
2.1 从“一步操作”到“流水线”
回想一下在 WebUI 中生成一张图片的过程:你填写提示词,设置参数,点击生成。这是一个“黑盒”操作。在 ComfyUI 中,这个过程被拆解了:
- 你需要一个节点来加载大模型(
Load Checkpoint)。 - 你需要节点来输入正面和负面提示词(
CLIP Text Encode)。 - 你需要节点来设置生成参数,如步数、采样器(
KSampler)。 - 你需要节点来将潜空间数据解码为图片(
VAE Decode)。 - 最后保存或预览图片(
Save Image/Preview Image)。
这些节点必须按照固定的数据依赖关系连接起来。例如,KSampler需要接收来自“模型”、“正向词条”、“负向词条”和“潜空间噪声”的数据,才能工作。它无法在缺少输入的情况下运行。
这就是工作流的本质:一个明确了数据流向和处理步骤的有向无环图(DAG)。它的优势是巨大的:
- 可复用:保存后,下次打开,所有参数、连接关系原封不动。
- 可分享:你可以将整个工作流(一个
.json文件或图片)发给别人,他加载后能得到完全相同的流程。 - 可调试:哪一步出了问题,可以精准定位到具体节点。
- 可扩展:可以在任意环节插入新的处理节点,比如在采样前加入 ControlNet,在解码后加入高清修复。
2.2 构建你的第一个最小工作流:文生图
让我们动手,构建一个最基础的文生图流程。请严格按照以下顺序添加和连接节点,这能帮你理解数据流的先后逻辑:
- 右键画布 ->
Load Checkpoint:这是你的基础模型。连接其输出MODEL和CLIP到后续节点。 - 右键画布 ->
CLIP Text Encode (Prompt):添加两个,一个用于正向提示词,一个用于负面提示词。将上一步CLIP输出连接到它们的clip输入。然后在节点内填写提示词。 - 右键画布 ->
Empty Latent Image:设置你想要的图片宽高和批次数量。它输出一个空的潜空间噪声。 - 右键画布 ->
KSampler:这是核心调度器。- 连接
model输入到步骤1的MODEL输出。 - 连接
positive输入到步骤2的正面CONDITIONING输出。 - 连接
negative输入到步骤2的负面CONDITIONING输出。 - 连接
latent_image输入到步骤3的LATENT输出。 - 在节点内选择采样器(如
euler)、调度器(如normal),设置步数(如20)和 CFG 值(如7.5)。
- 连接
- 右键画布 ->
VAE Decode:将采样后的潜空间数据解码为像素图。- 连接
samples输入到步骤4KSampler的LATENT输出。 - 连接
vae输入到步骤1Load Checkpoint的VAE输出。
- 连接
- 右键画布 ->
Save Image:保存最终图片。连接其images输入到步骤5VAE Decode的IMAGE输出。
点击“Queue Prompt”按钮。如果一切连接正确,你应该能看到图片生成并保存到output文件夹。恭喜,你刚刚手动组装了一个“Stable Diffusion 引擎”。
这个流程看似比 WebUI 点一下复杂,但它的每一个部件都暴露在你面前。接下来,我们要让这个引擎变得更强大、更智能。
3. 插件生态:如何为你的工作流安装“增强模块”
ComfyUI 本身是内核,而海量的custom nodes(自定义节点)才是其生命力所在。它们就像手机的 APP,为你添加了 ControlNet、面部修复、高清放大、视频生成等无数能力。
3.1 插件的安装与管理:推荐两种可靠方式
手动下载解压到custom_nodes目录是一种方式,但更推荐以下两种,它们能更好地处理依赖和更新:
方式一:使用 ComfyUI Manager(强烈推荐)这是管理插件的“瑞士军刀”。首先你需要安装它:通常可以从其 GitHub 仓库下载,放入
custom_nodes。安装后重启 ComfyUI,界面会出现一个“Manager”按钮。在里面,你可以浏览、安装、更新、禁用绝大多数热门插件,它会自动处理依赖。这是目前最省心的方式。方式二:使用 git clone(适合开发者)对于托管在 GitHub 上的插件,你可以直接进入
custom_nodes目录,打开终端执行git clone <插件仓库地址>。然后,根据插件说明,可能需要运行install.py或手动安装 Python 依赖(pip install -r requirements.txt)。
避坑指南:插件冲突是常见问题。如果安装新插件后 ComfyUI 无法启动,可以尝试将新安装的插件文件夹暂时移出
custom_nodes目录来排查。保持插件更新,但一次不要安装太多不熟悉的插件。
3.2 核心插件推荐与工作流增强
安装插件后,你会发现右键菜单里的节点类型暴增。不要慌,我们从几个最实用、最能改变工作流能力的插件开始:
- ControlNet 系列节点:例如
comfyui-controlnet-aux。它让你能添加姿势、边缘、深度图等控制条件。用法是在KSampler之前,将 ControlNet 节点接入到positive条件线上。关键点:你需要预先下载对应的 ControlNet 模型,并放入models/controlnet目录。 - 高清修复(Upscale)节点:如
Ultimate SD Upscale节点。它比基础的放大节点更智能,可以分块放大并保持一致性。通常连接在VAE Decode之后。 - 面部修复(Face Restoration)节点:例如
ComfyUI-Face-Restoration-CFG或Impact Pack中的相关节点。用于改善生成人脸的质量。 - LoRA 加载与应用节点:例如
Lora Loader。可以动态加载 LoRA 模型,并将其效果注入到主模型中。连接时,通常将其插入到Load Checkpoint和CLIP Text Encode之间的MODEL和CLIP连线上。 - 工作流工具类节点:
- Note:可以在画布上添加文本注释,说明工作流某部分的功能,对于复杂流程或分享至关重要。
- Primitive:提供静态值(如数字、文本),可以连接给任何输入,避免在多个节点里重复填写相同参数。
- Reroute:一种“接线板”,可以让杂乱的连线变得整洁,提高工作流可读性。
插件的作用,是把你的基础流水线,升级成一条拥有各种智能检测、精修、后处理功能的现代化生产线。
4. 从搭建到驾驭:高效工作流的设计心法与实战
有了节点和插件,就像有了乐高积木。但如何搭建出稳固、高效、易用的建筑,需要一些设计思维。
4.1 模块化设计:像搭积木一样构建复杂流程
不要试图在一个巨大的工作流中完成所有事。优秀的做法是模块化。
- 输入模块:集中放置
Load Checkpoint、CLIP Text Encode、Empty Latent Image以及各种输入图片的节点(如Load Image)。 - 处理核心模块:集中放置
KSampler以及其周围的 ControlNet、LoRA 等影响生成过程的节点。 - 后处理模块:集中放置放大、修复、滤镜、保存等节点。
你可以用Note节点为每个区域画上视觉框,或者利用Reroute节点将跨区域的连接整理清晰。这样,当你想修改提示词时,就去输入模块;想换采样器时,就去处理核心模块;想调整放大倍数时,就去后处理模块。
4.2 实现图生图与参数传递
图生图的关键在于,将一张现有图片转换为潜空间数据,而不是使用Empty Latent Image。
- 使用
Load Image节点加载图片。 - 使用
VAE Encode节点将像素图编码为潜空间数据。需要连接VAE(来自 checkpoint)和pixels(来自 Load Image)。 - 将
VAE Encode输出的LATENT,连接到KSampler的latent_image输入,以替代Empty Latent Image。 - 在
KSampler中,通过denoise参数控制重绘强度(0为完全保留原图,1为完全重绘)。
4.3 搭建一个带ControlNet和高清修复的完整工作流
让我们整合所学,构建一个更实用的工作流:基于姿势图生成人物,并进行高清放大。
- 输入模块:
Load Checkpoint:加载你的人像大模型。CLIP Text Encodex2:填写正向/负向提示词,如“photo of a person, detailed face”,“bad hands, deformed”。Load Image:加载你的姿势参考图(如OpenPose生成的骨架图)。Empty Latent Image:设置最终出图的分辨率。
- ControlNet 预处理:
- 添加
ControlNet Apply节点(或你安装的ControlNet插件的应用节点)。 - 连接:将
Load Checkpoint的MODEL和正面CLIP Text Encode的CONDITIONING输出,都连接到ControlNet Apply的对应输入。 - 在
ControlNet Apply节点内,选择control_net输入,并添加一个Load ControlNet Model节点(选择 openpose 模型)。连接其control_net输出。 - 连接
image输入到Load Image(姿势图)的输出。 ControlNet Apply会输出新的、融合了姿势条件的MODEL和CONDITIONING,将它们传递给后续的KSampler。
- 添加
- 处理核心模块:
KSampler:接收来自上一步的model,positive,以及来自负面提示词的negative,和来自Empty Latent Image的latent_image。
- 后处理模块:
VAE Decode:将采样结果解码为图片。Ultimate SD Upscale节点:连接上一步的图片。设置好放大模型(如4x-UltraSharp)、缩放倍数和分块重叠参数。Save Image:保存最终的高清大图。
这个工作流保存后,你以后只需要替换姿势图和提示词,就能快速生成一系列符合特定姿势的高清人物图。效率的提升,正来自于这种“一次搭建,无限复用”的流程化思维。
4.4 工作流的保存、加载与分享
- 保存:点击界面上的“Save”按钮,会下载一个
.json文件。这个文件包含了所有节点、参数和连接信息。 - 加载:点击“Load”按钮,选择之前保存的
.json文件即可完整恢复工作流。 - 分享:更酷的方式是,ComfyUI 支持将工作流嵌入到生成的图片中。在
Save Image节点中勾选相关选项(如“embed workflow”),生成的 PNG 图片将包含完整工作流信息。别人只需将图片拖入 ComfyUI 画布,就能一键还原你的整个流程。这是分享和复现结果的绝佳方式。
5. 进阶思路与避坑指南:从能用走向好用
当你熟悉基础搭建后,下面这些思路能帮你走得更远。
5.1 性能优化与常见问题排查
- 出图慢:
- 检查
KSampler的步数是否过高(20-30步通常足够)。 - 确认使用的是 GPU 模式(查看启动日志)。
- 高清修复时,分块大小不要超过显存承受范围。
- 考虑使用
TAESD等快速解码器(需对应 VAE 模型)。
- 检查
- 显存不足(OOM):
- 降低
Empty Latent Image中的分辨率或批次大小。 - 在启用高清修复或多个 ControlNet 时尤为注意。
- 使用
--lowvram或--medvram参数启动 ComfyUI(修改启动脚本)。
- 降低
- 颜色异常或图像扭曲:
- 检查是否加载了正确的 VAE 模型。有些大模型需要特定 VAE。
- 检查
KSampler的采样器和调度器组合是否合适。 - ControlNet 权重是否过高,导致过度扭曲原图。
- 插件节点报错“找不到模块”:
- 确认插件已正确安装在
custom_nodes文件夹。 - 根据插件说明,检查 Python 依赖是否已安装(在插件目录下运行
pip install -r requirements.txt)。 - 重启 ComfyUI。
- 确认插件已正确安装在
5.2 工作流工程化:超越单次出图
ComfyUI 的真正威力在于其可编程性。你可以通过以下方式将其集成到自动化流程中:
- API 调用:ComfyUI 内置了 WebSocket 和 HTTP API。你可以用 Python、JavaScript 等任何语言编写脚本,动态地向 ComfyUI 发送工作流 JSON 数据,并获取生成结果。这意味着你可以将 AI 生图能力嵌入到你的网站、应用或自动化脚本中。
- 批量处理:通过 API 或修改工作流中的
Empty Latent Image批次数量,结合循环逻辑,可以实现对大量不同提示词或种子值的批量生成。 - 自定义节点开发:如果你有 Python 开发能力,可以编写自己的节点,实现任何你想要的功能,并将其无缝接入到数据流中。
5.3 学习资源与社区
- 官方示例:ComfyUI 自带了一些示例工作流(
.json文件),是绝佳的学习资料。 - 社区平台:在 Civitai、Reddit 的 r/comfyui 板块、以及一些中文 AI 社区,有大量用户分享的精彩工作流。下载下来,拖入你的 ComfyUI,反向研究别人的连接逻辑,是进步最快的方式。
- 视频教程:YouTube 和 Bilibili 上有许多从入门到精通的视频教程,直观展示复杂工作流的搭建过程。
回到我们最初的观点:学习 ComfyUI,不是在学一个软件,而是在掌握一种可视化编程思维,一种将创造性任务分解、重组、并固化为自动化流程的能力。最初的节点和连线会让你感到陌生,但一旦你理解了数据如何在这些“管道”中流动,你就获得了一种远比点击按钮更强大、更自由的控制力。
它可能不会让你第一张图出得更快,但它能让你第一百张图的质量保持一致,让你的创作过程变得可追溯、可优化、可规模化。这,才是从“玩家”到“创造者”的关键一步。现在,打开你的 ComfyUI,从连接第一个Load Checkpoint和KSampler开始,亲手搭建属于你的第一座“乐高城堡”吧。