04-工作流设计¶
🎯 学习目标¶
- 掌握工作流设计的核心原则
- 学会搭建 txt2img、img2img、Inpainting、Outpainting 四大基础工作流
- 深入理解采样器、调度器、CFG、Steps 等核心参数
- 掌握提示词工程技巧
- 学会工作流的保存、导入、导出与分享
4.1 工作流设计原则¶
4.1.1 清晰性¶
- 单一职责:每个节点只做一件事
- 命名规范:为节点添加描述性标题(右键 → Title)
- 布局整洁:从左到右排列,保持数据流方向一致
- 注释说明:使用 Note 节点标注关键参数和设计意图
4.1.2 模块化¶
将工作流按功能拆分为若干逻辑模块:
每个模块用分组(Group)框起来,方便理解和维护。
4.1.3 可复用¶
- 将常用的节点组合保存为工作流模板
- 使用原语节点(Primitive Node)将参数外置,便于快速调整
- 设计时考虑通用性,避免硬编码特定值
4.1.4 渐进式构建¶
- 先搭建最简化的工作流验证基本功能
- 逐步添加增强模块(LoRA、ControlNet、后处理)
- 在每一步验证输出正确后再继续
4.2 基础工作流模板¶
4.2.1 txt2img(文本生成图像)¶
最基础的工作流,从文本描述生成图像。
节点构成:
CheckpointLoaderSimple
├── MODEL ──────────────── → KSampler.model
├── CLIP ──┬─ CLIPTextEncode (正向) → KSampler.positive
│ └─ CLIPTextEncode (反向) → KSampler.negative
└── VAE ──────────────────── → VAEDecode.vae
EmptyLatentImage ──────────── → KSampler.latent_image
KSampler.LATENT ──────────── → VAEDecode.samples
VAEDecode.IMAGE ──────────── → SaveImage.images
关键参数:
| 参数 | SD 1.5 推荐值 | SDXL 推荐值 |
|---|---|---|
| 分辨率 | 512×512 / 512×768 | 1024×1024 / 896×1152 |
| Steps | 20-30 | 20-30 |
| CFG | 7-8 | 5-7 |
| Sampler | euler_a / dpmpp_2m | euler / dpmpp_2m |
| Scheduler | normal / karras | normal / karras |
| Denoise | 1.0 | 1.0 |
4.2.2 img2img(图像到图像)¶
以已有图像为基础,结合文本提示词生成新图像。
与 txt2img 的区别:
- 用
LoadImage → VAEEncode替代EmptyLatentImage denoise参数设置为 < 1.0(控制变化程度)
节点构成:
LoadImage ──────────────────── → VAEEncode.pixels
VAEEncode.vae ← CheckpointLoader.VAE
VAEEncode.LATENT → KSampler.latent_image
CheckpointLoaderSimple
├── MODEL → KSampler.model
├── CLIP → CLIPTextEncode (正/反向) → KSampler.positive/negative
└── VAE → VAEEncode.vae + VAEDecode.vae
KSampler (denoise: 0.5-0.8) → VAEDecode → SaveImage
denoise 参数指南:
| denoise 值 | 效果 |
|---|---|
| 0.1-0.3 | 微调,保留原图大部分内容 |
| 0.4-0.6 | 中等变化,保持构图但改变细节 |
| 0.7-0.8 | 大幅变化,仅保留基本结构 |
| 0.9-1.0 | 几乎完全重新生成 |
4.2.3 Inpainting(图像修复/局部重绘)¶
对图像的特定区域进行重新生成。
核心概念:通过 Mask(遮罩) 指定需要重新生成的区域,白色区域将被重绘,黑色区域保持不变。
节点构成:
LoadImage ─────────┬── IMAGE → VAEEncodeForInpaint.pixels
└── MASK → VAEEncodeForInpaint.mask
CheckpointLoaderSimple
├── MODEL → KSampler.model
├── CLIP → CLIPTextEncode → KSampler.positive/negative
└── VAE → VAEEncodeForInpaint.vae + VAEDecode.vae
VAEEncodeForInpaint.LATENT → KSampler.latent_image (denoise: 0.8-1.0)
KSampler → VAEDecode → SaveImage
操作要点:
- ComfyUI 的 LoadImage 节点支持直接在图像上绘制遮罩
- 右键 LoadImage 节点的图像预览区域 → Open in MaskEditor
- 在遮罩编辑器中用画笔标记要重绘的区域
- Inpaint 专用模型(如 sd-v1-5-inpainting)效果更好
💡 提示:Inpainting 时,提示词应描述你想在遮罩区域内生成的内容,而不是整张图的描述。
4.2.4 Outpainting(图像扩展)¶
将图像向外扩展,生成超出原始边界的内容。
节点构成:
LoadImage → ImagePadForOutpaint
├── IMAGE (扩展后的图像,新区域为空白)
└── MASK (标记扩展区域的遮罩)
扩展后的流程与 Inpainting 类似:
ImagePadForOutpaint → VAEEncodeForInpaint → KSampler → VAEDecode → SaveImage
参数说明:
| 参数 | 说明 |
|---|---|
| left | 向左扩展的像素数 |
| top | 向上扩展的像素数 |
| right | 向右扩展的像素数 |
| bottom | 向下扩展的像素数 |
| feathering | 边缘羽化程度(过渡自然度) |
⚠️ 注意:Outpainting 对提示词的全局一致性要求较高,建议使用描述整体场景的提示词,并适当提高 Steps。
4.3 参数详解¶
4.3.1 采样器(Sampler)¶
采样器决定了去噪过程的数学方法。不同的采样器在速度、质量和风格上有差异:
| 采样器 | 速度 | 质量 | 特点 | 适用场景 |
|---|---|---|---|---|
euler | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 快速,结果稳定 | 快速预览、日常生成 |
euler_a | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 快速,更有创意 | 创意探索、多样性生成 |
dpmpp_2m | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 质量优秀,广泛使用 | 高质量最终输出 |
dpmpp_2m_sde | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 高质量+随机性 | 细节丰富的成品 |
dpmpp_sde | ⭐⭐⭐ | ⭐⭐⭐⭐ | 良好的细节表现 | 人物、风景 |
dpmpp_3m_sde | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 最新算法,质量极高 | 追求极致质量 |
uni_pc | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 低步数高质量 | 快速高质量生成 |
ddim | ⭐⭐⭐⭐ | ⭐⭐⭐ | 确定性采样 | 需要精确复现 |
lcm | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 极少步数(4-8步) | LCM 模型专用 |
💡 提示:入门建议使用
euler_a快速探索,最终出图使用dpmpp_2m+karras。
4.3.2 调度器(Scheduler)¶
调度器控制去噪过程中噪声水平的变化曲线:
| 调度器 | 说明 | 效果 |
|---|---|---|
normal | 线性噪声调度 | 均匀去噪,通用性好 |
karras | Karras 噪声调度 | 低噪声端更精细,细节更好 |
exponential | 指数噪声调度 | 高步数时效果好 |
sgm_uniform | SGM 均匀调度 | SDXL 默认推荐 |
simple | 简单线性调度 | 基础场景 |
ddim_uniform | DDIM 专用调度 | 配合 DDIM 采样器 |
beta | Beta 分布调度 | Flux 模型常用 |
推荐组合:
- 通用:
dpmpp_2m+karras - SDXL:
euler+sgm_uniform - Flux:
euler+beta - 快速预览:
euler_a+normal
4.3.3 CFG Scale(引导系数)¶
CFG(Classifier-Free Guidance)控制生成结果对提示词的遵循程度:
| CFG 值 | 效果 |
|---|---|
| 1-3 | 创意自由,与提示词关联低 |
| 4-7 | 平衡自然,推荐范围 |
| 8-12 | 严格遵循提示词 |
| 13-20 | 过度饱和,可能出现伪影 |
| 20+ | 图像质量下降,过度锐化 |
不同模型推荐值:
- SD 1.5: 7-8
- SDXL: 5-7
- SD3: 4-5
- Flux (guidance): 2.5-4(Flux 的 guidance 与传统 CFG 不同)
4.3.4 Steps(采样步数)¶
| Steps | 效果 | 耗时 |
|---|---|---|
| 1-5 | 粗糙草稿(LCM/Turbo 除外) | 极快 |
| 10-15 | 可用但细节不足 | 快 |
| 20-30 | 最佳质价比,推荐范围 | 中等 |
| 30-50 | 细节精细,收益递减 | 较慢 |
| 50+ | 极少有进一步提升 | 慢 |
⚠️ 注意:Steps 的收益在 20-30 步后急剧递减。更多的步数不一定意味着更好的质量,但一定意味着更长的生成时间。
4.3.5 种子(Seed)使用技巧¶
种子是随机数生成器的初始值,决定了生成的随机性:
- 固定种子:相同种子 + 相同参数 = 相同结果(可复现)
- 随机种子:每次生成不同结果(探索阶段使用)
- 种子变异:在已知好种子的基础上微调(如 ±1),可获得相似但略有变化的结果
种子使用策略:
1. 探索阶段:randomize(随机种子),批量生成多张
2. 发现好构图后:fixed(固定种子),调整其他参数精修
3. 微调变化:在固定种子基础上 ±1~10 探索邻近结果
4.4 提示词工程¶
4.4.1 正向提示词结构¶
一个高效的正向提示词通常包含以下层次:
示例:
主体: a young woman with long black hair, wearing a white dress
场景: standing in a flower garden, sunset background
风格: oil painting style, impressionism
质量: masterpiece, best quality, highly detailed, 8k
细节: soft lighting, warm colors, depth of field
组合结果:
a young woman with long black hair, wearing a white dress,
standing in a flower garden, sunset background,
oil painting style, impressionism,
masterpiece, best quality, highly detailed, 8k,
soft lighting, warm colors, depth of field
4.4.2 反向提示词常用模板¶
# 通用反向提示词模板
ugly, deformed, noisy, blurry, low contrast, distorted,
unrealistic, bad anatomy, bad proportions, bad hands,
extra fingers, missing fingers, extra limbs,
disfigured, out of frame, watermark, signature,
text, logo, low quality, worst quality, jpeg artifacts
# 人物专用补充
cross-eyed, bad face, mutation, mutated,
extra head, cloned face, long neck
# 风景专用补充
oversaturated, overexposed, underexposed,
flat lighting, boring composition
4.4.3 权重调节语法¶
ComfyUI 支持使用括号和冒号来调节提示词权重:
# 基本权重语法
(word) → 权重 1.1 (默认增强)
(word:1.0) → 权重 1.0 (标准权重)
(word:1.5) → 权重 1.5 (增强 50%)
(word:0.5) → 权重 0.5 (减弱 50%)
(word:2.0) → 权重 2.0 (强调两倍)
# 嵌套语法
((word)) → 权重 1.1 × 1.1 = 1.21
(((word))) → 权重 1.1 × 1.1 × 1.1 ≈ 1.33
# 实际应用
(red hair:1.3), (blue eyes:1.2), (smile:0.8)
→ 红色头发较强调,蓝色眼睛适度强调,微笑减弱
使用建议:
- 权重范围建议 0.5 ~ 1.8,超出可能导致图像失真
- 主体特征权重建议 1.0 ~ 1.3
- 需要弱化的元素 使用 0.5 ~ 0.8
- 避免大量使用极端权重值
4.4.4 CLIP 编码原理简述¶
CLIP(Contrastive Language-Image Pre-training) 是提示词编码的核心组件:
- 文本分词(Tokenization):将文本拆分为 token(词元)
- 编码映射:token 被映射到高维向量空间
- 注意力计算:token 之间的关联关系被编码
- 条件输出:最终输出条件向量(Conditioning)指导去噪过程
实际影响:
- CLIP 有 77 token 限制(约 60-70 个英文单词)
- 超出限制的内容会被截断
- 前面的词通常比后面的词有更强的影响
- 使用 BREAK 关键字可以开启新的 77 token 窗口(需要特定节点支持)
💡 提示:提示词不需要是完整的句子。逗号分隔的关键词列表通常比长句子效果更好。
4.5 工作流的保存、导入、导出与分享¶
4.5.1 保存工作流¶
工作流 JSON 文件包含: - 所有节点的类型和配置 - 节点之间的连接关系 - 节点位置和分组信息 - 参数值和状态
4.5.2 导入工作流¶
💡 提示:ComfyUI 生成的图像默认嵌入了完整的工作流信息。你可以将任何 ComfyUI 生成的 PNG 图像拖入界面来还原工作流。
4.5.3 导出与分享¶
导出为 JSON: - Ctrl + S 保存完整工作流 - API 格式导出:Menu → Save (API Format),生成用于 API 调用的精简格式
导出为图像: - 生成的 PNG 图像自带工作流元数据 - 分享图像即分享工作流
社区分享平台: - OpenArt:上传工作流 JSON,附带说明和示例图 - Civitai Workflows:与模型社区集成 - ComfyWorkflows:专注于工作流分享
4.5.4 工作流版本管理¶
对于频繁迭代的工作流,建议:
项目目录/
├── workflows/
│ ├── v1_basic_txt2img.json
│ ├── v2_add_lora.json
│ ├── v3_add_controlnet.json
│ └── v4_final_production.json
├── outputs/
│ ├── v1_sample.png
│ └── v4_final.png
└── notes.md (记录每个版本的设计决策)
⚠️ 注意:分享工作流前,确认其中没有包含敏感信息(如自定义路径、私有模型名等)。建议使用相对路径和通用模型名称。
练习¶
- 基础练习:搭建一个 txt2img 工作流,用不同的采样器和调度器各生成一张图,对比效果差异
- img2img 练习:找一张参考图,使用 img2img 工作流尝试不同 denoise 值(0.3/0.5/0.7/0.9)
- Inpainting 练习:加载一张人物图像,用遮罩工具选择背景区域,替换为不同场景
- 提示词练习:固定种子和参数,仅修改提示词中的权重值,观察变化
- 参数扫描:保持提示词不变,分别测试 CFG 值 ⅗/7/10/15 的效果差异
- 工作流管理:将你搭建的最佳工作流保存、导出并重新导入验证
延伸阅读¶
📌 下一章:05-模型加载与使用 —— 深入学习各类模型的加载与配置
最后更新日期:2026-02-12 适用版本:ComfyUI实战教程 v2026