ComfyUI 工作流实践

# ComfyUI 工作流实践

ComfyUI (opens new window) 是节点式生成工具:把加载模型、编码提示词、采样、解码和保存结果拆成节点,再通过连线传递数据。它的价值是把一套出图过程保存成可检查、可复用的配置。

# 第一次使用怎样操作

  1. 按 官方安装说明 (opens new window) 选择适合操作系统和显卡的安装方式。NVIDIA CUDA 的操作不能直接用于普通 Mac。
  2. 从内置模板选择与模型匹配的基础文生图工作流,不先安装大量第三方节点。
  3. 按模板提示准备权重,检查下载来源、许可和文件大小;不同模型可能分别需要扩散模型、文本编码器和 VAE。
  4. 先用默认尺寸和一张图的批次运行,确认能完整保存结果。
  5. 再一次只改一个参数,记录它如何影响质量、耗时和显存。

第三方节点会执行本机代码。先用官方基础模板跑通,再按需求添加插件。

# 第一个练习:生成一张杯子海报背景

选择经典 SD 文生图模板后,按这个顺序操作:

  1. 在 Load Checkpoint 选中已下载的兼容模型;找不到文件时检查安装目录下的 models/checkpoints,刷新模型列表。
  2. 在正向 CLIP Text Encode 填入:白色陶瓷杯,木桌,咖啡馆背景,左侧自然光,右侧留白,产品摄影。负向条件先用模板默认值。
  3. 在 Empty Latent Image 设置尺寸与批次。以普通 SD 1.5 基础模型练习时可从 512 × 512、批次 1 开始;其他模型沿用对应模板推荐尺寸。
  4. 保留模板的采样参数,点击运行。成功后,预览区和输出目录应出现图片;如果只看见 latent 数据,那还没有完成 VAE 解码和保存。
  5. 记录 Seed,并关闭生成后自动随机更换 Seed 的设置。只把咖啡馆改为书房再运行,比较背景是否改变。
  6. 保存工作流 JSON。重新打开它,确认模型能找到、节点不缺失、参数仍然保留。

这个练习的目标不是一次得到完美海报,而是知道 在哪改文字、在哪改尺寸、在哪执行、结果保存在哪里。明确这些入口后再增加结构控制和放大节点。

# 基础 SD 工作流的节点怎么连接

下面是经典 SD 检查点工作流,不是所有新模型的通用节点表。

节点 输入与输出 作用
Load Checkpoint 权重文件 → MODEL、CLIP、VAE 加载生成网络、文本编码器和图像编解码器
CLIP Text Encode,正向与负向各一个 文本和 CLIP → conditioning 把文字变成采样时的条件
Empty Latent Image 尺寸与批次 → latent 定义输出尺寸及潜变量形状,采样器按 Seed 添加初始噪声
KSampler MODEL、条件、latent、参数 → latent 按步骤生成图像的潜变量表示
VAE Decode latent 和 VAE → IMAGE 把潜变量解码成可见图片
Save Image IMAGE → 输出文件 保存图片与可用的工作流元数据

连接时,KSampler 接收四类输入:Checkpoint 的 MODEL、正向条件、负向条件、Empty Latent Image 的 latent。它的输出接到 VAE Decode,同时把 Checkpoint 的 VAE 接过去,最后将解码后的 IMAGE 连接到 Save Image。

想做图生图时,用图片加载和 VAE 编码替代空 latent 输入,再调整去噪强度。想局部重绘时,使用适配模型的重绘模板,增加蒙版,检查白色区域与黑色区域在具体节点中的含义。

# 从文生图扩展成可用的商品工作流

# 图生图:让输入照片成为起点

在基础工作流中加入 Load Image 和 VAE Encode,将图片编码后的 latent 接到 KSampler,替代 Empty Latent Image。编码与解码使用兼容 VAE,再调整 KSampler 的 denoise。

低强度通常更保留原图,高强度允许更大变化。先用同一张商品照从低强度试起,检查商品轮廓是否仍正确。尺寸变化也会影响构图,不能只记录强度而忽略图片预处理。

# 结构控制:明确连的是哪一种数据

使用与模型匹配的 ControlNet 模板,先得到边缘、深度或姿态条件,再把条件和 ControlNet 模型送入对应 Apply 节点,处理后的 conditioning 再接到采样器。

这里有三个不能混淆的文件或输出:原图是素材,预处理结果是结构提示,ControlNet 权重是处理这种结构的模型。只把原图接上而遗漏预处理或使用不匹配权重,常会得到错误结果或维度错误。

# 局部重绘:先看蒙版,再排队

选适配基座的重绘模板,加载原图,在蒙版编辑器圈出要修改的位置。先预览实际送入节点的蒙版,确认改的是杯把而不是整张背景,再执行。

不同节点对蒙版、噪声蒙版和 latent 的处理不同,不能把任何图生图工作流加一张黑白图片就叫重绘。输出后比较未修改区域是否保持、接缝是否自然,必要时调整蒙版边缘与去噪强度。

# 放大:把昂贵步骤放在确认构图之后

先用较低成本生成并选择构图,再连接放大或重绘式放大流程。放大增加的不只是文件尺寸,也可能增加显存和执行时间;扩散式放大还可能重新解释细节。价格、日期和二维码最终再排版,不依赖模型保持准确文字。

# 节点连线为什么能自动决定执行顺序

每条连线都是数据依赖:VAE Decode 需要 KSampler 的输出,所以不能先解码。ComfyUI 根据提交的输出目标和依赖执行所需节点;你把节点拖到画布最左边,并不会因此让它最先执行。

API 格式里,下面这个输入表示取节点 4 的第 0 个输出,不是普通的两个业务数值:

{ "model": ["4", 0] }
1

节点类型不兼容时,应先检查线上传递的是 MODEL、CLIP、VAE、IMAGE、LATENT 还是 conditioning。颜色相似或名字接近都不能替代类型匹配。执行器也可能复用未变化节点的结果,修改提示词后不一定重新加载所有模型;但缓存不能替代版本记录。

# 保存什么才能复现

至少保存工作流 JSON、所有模型名称及校验值、ComfyUI 与自定义节点版本、输入素材、Seed、尺寸、采样器、步数和生成时间。图片元数据可能在平台压缩或转码后丢失,因此不要只保留一张 PNG。

界面工作流 JSON 主要保存编辑器节点和布局;提交给服务 API 的工作流描述是执行所需的节点及输入。两者用途不同,程序化调用时要使用对应版本提供的 API 导出功能,而不是直接把界面 JSON 原样提交。

# 常见错误怎么定位

现象 优先检查 不要先做什么
节点缺失 是否用了未安装或版本不符的第三方节点 盲目安装所有推荐插件
张量维度不匹配 基座、LoRA、VAE、ControlNet 是否属于兼容架构 反复改提示词
显存不足 分辨率、批次、模型大小、其他 GPU 进程 把 Steps 调到极低并认为解决了一切
画面失真 模型配套采样配置、guidance、VAE 和素材 只堆负面提示词
同配置难复现 版本、随机状态、精度和硬件差异 只比较 Seed

# 优缺点与适用场景

优势是生成过程透明,能复用多步骤流程,也容易定位哪个环节影响结果。代价是节点、模型和依赖的版本需要管理,复杂工作流对新手有学习成本。

个人出图可以直接使用工作台;要让网站用户提交描述并获得图片,再增加业务接口,见 把 AI 生图接入网站。不要直接把工作台管理端口公开给用户。

# 工作流从个人使用变成团队复用

保存一份已经跑通的基准工作流,并附上输入样例、预期输出和所需模型。团队日常修改提示词、尺寸和 Seed 等允许项,不随意替换节点版本。升级节点或权重时,先用这组样例比较结构、质量、耗时与显存,再决定是否采用。

缺失节点与缺失模型是两类问题:前者需要可信插件及兼容依赖,后者需要正确的权重文件与目录。不要看到报错就安装所有插件,更不要把从外部拿来的工作流当成可信可执行配置直接提供给网站用户。

程序化提交、查询和下载的完整例子见 把 AI 生图接入网站。ComfyUI 队列负责执行生成,业务系统仍要负责用户归属、限额和长期结果保存。

# 面试问答

1. 为什么用 ComfyUI,而不是每次在网页里手动调参数?参考答案

当任务包含结构控制、局部重绘和放大等多个步骤时,ComfyUI 可以把它们连接成可复用的工作流,输入素材和参数明确,方便做对比实验。但它主要解决生成流程组织,产品的权限、并发调度和结果验收仍要单独实现。