06-高级工作流¶
🎯 学习目标¶
- 掌握 Hires Fix 高分辨率修复工作流
- 学会多阶段生成与图像放大流程
- 理解区域控制生成技术
- 了解 AnimateDiff 视频生成工作流
- 掌握快速生成(LCM/Turbo)与批量生成技巧
- 学习条件组合高级技巧
6.1 Hires Fix(高分辨率修复)¶
6.1.1 为什么需要 Hires Fix¶
Stable Diffusion 在训练分辨率(SD1.5: 512×512, SDXL: 1024×1024)下效果最佳。直接生成大尺寸图像(如 1024×1024 on SD1.5)可能导致:
- 重复的人脸/物体
- 构图混乱
- 比例失调
Hires Fix 策略:先在训练分辨率生成,再放大到目标分辨率,兼顾构图正确性和高分辨率细节。
6.1.2 基本 Hires Fix 工作流¶
阶段一:低分辨率生成
CheckpointLoader → CLIPTextEncode (正/反) → KSampler (512×512)
↓
阶段二:潜空间放大 + 重新采样
LatentUpscale (放大到 1024×1024) → KSampler (denoise: 0.5-0.7)
↓
阶段三:解码输出
VAEDecode → SaveImage
节点配置详解:
# 第一阶段 KSampler
KSampler_1:
steps: 20
cfg: 7.0
sampler: dpmpp_2m
scheduler: karras
denoise: 1.0
latent_image: EmptyLatentImage (512×512)
# 潜空间放大
LatentUpscale:
upscale_method: nearest-exact / bilinear / bislerp
width: 1024
height: 1024
# 第二阶段 KSampler(重绘)
KSampler_2:
steps: 15
cfg: 7.0
sampler: dpmpp_2m
scheduler: karras
denoise: 0.55 ← 关键参数,控制细节添加程度
latent_image: LatentUpscale 输出
denoise 选择指南(第二阶段):
| denoise | 效果 |
|---|---|
| 0.3-0.4 | 微调细节,忠实于原图 |
| 0.5-0.6 | 添加适度细节,推荐值 |
| 0.7-0.8 | 较大变化,重绘细节丰富 |
💡 提示:
bislerp放大方法通常比nearest-exact产生更平滑的中间结果,但也可能过度模糊。建议分别尝试。
6.2 多阶段生成(先低分辨率再放大)¶
6.2.1 两阶段生成(Base + Refiner)¶
SDXL 模型原生支持 Base + Refiner 两阶段架构:
阶段一:Base 模型生成基础结构
CheckpointLoader (SDXL Base)
→ KSamplerAdvanced (start_step: 0, end_step: 20)
阶段二:Refiner 模型精修细节
CheckpointLoader (SDXL Refiner)
→ KSamplerAdvanced (start_step: 20, end_step: 30)
→ VAEDecode → SaveImage
KSamplerAdvanced 参数:
| 参数 | Base 阶段 | Refiner 阶段 |
|---|---|---|
| add_noise | enable | disable |
| start_at_step | 0 | 20 |
| end_at_step | 20 | 30 |
| return_with_leftover_noise | enable | disable |
6.2.2 三阶段生成管线¶
对于最高质量的输出,可以使用三阶段管线:
阶段一:低分辨率生成 (512×512) — 确定构图
↓
阶段二:潜空间放大 + 重采样 (1024×1024) — 添加细节
↓
阶段三:像素放大 + Tile ControlNet (2048×2048) — 超高分辨率
6.3 区域控制生成¶
6.3.1 基本概念¶
区域控制允许为图像的不同区域指定不同的提示词。例如:
- 左半部分:一个人物
- 右半部分:一个建筑
- 上方:蓝天白云
6.3.2 使用 ConditioningSetArea 实现¶
CLIPTextEncode ("a person") → ConditioningSetArea
├── width: 512, height: 1024
├── x: 0, y: 0
└── strength: 1.0
CLIPTextEncode ("a building") → ConditioningSetArea
├── width: 512, height: 1024
├── x: 512, y: 0
└── strength: 1.0
ConditioningCombine
├── conditioning_1: [人物区域条件]
├── conditioning_2: [建筑区域条件]
└── CONDITIONING → KSampler.positive
6.3.3 使用 ConditioningSetMask 实现(更灵活)¶
# 通过遮罩精确控制区域形状
LoadImage (遮罩图像) → ConditioningSetMask
├── conditioning: [CLIPTextEncode 输出]
├── mask: [遮罩图像]
├── strength: 1.0
└── set_cond_area: default
# 合并多个区域条件
ConditioningCombine → KSampler.positive
应用场景:
- 多人物场景中为不同人物指定不同描述
- 前景/背景分别控制
- 复杂场景的精确构图
⚠️ 注意:区域控制的边界处可能出现不自然的过渡。适当增加区域重叠和使用较高的 CFG 可以改善这个问题。
6.4 AnimateDiff 视频生成工作流¶
6.4.1 AnimateDiff 简介¶
AnimateDiff 是一个将 Stable Diffusion 扩展为视频生成的插件。它通过添加运动模块(Motion Module)来学习帧间的时间一致性。
所需资源: - AnimateDiff 运动模型 → models/animatediff_models/ - 推荐安装:ComfyUI-AnimateDiff-Evolved 自定义节点
6.4.2 基本 AnimateDiff 工作流¶
CheckpointLoaderSimple (SD 1.5 模型)
├── MODEL → ADE_AnimateDiffLoaderWithContext
│ ├── model_name: [运动模型]
│ ├── beta_schedule: sqrt_linear
│ ├── motion_scale: 1.0
│ └── MODEL → KSampler
├── CLIP → CLIPTextEncode
└── VAE → VAEDecode
EmptyLatentImage
├── width: 512
├── height: 512
└── batch_size: 16 ← 帧数!
KSampler → VAEDecode → VHS_VideoCombine (输出为GIF/MP4)
6.4.3 关键参数¶
| 参数 | 说明 | 推荐值 |
|---|---|---|
| batch_size | 输出帧数 | 16-32 |
| motion_scale | 运动幅度 | 0.8-1.2 |
| beta_schedule | 噪声调度 | sqrt_linear (AnimateDiff v2) |
| frame_rate | 输出帧率 | 8-12 fps |
6.4.4 进阶视频工作流¶
图像到视频(img2vid):
LoadImage → VAEEncode → 作为 KSampler 的 latent_image
↓
重复帧 (RepeatLatentBatch) 到目标帧数
↓
KSampler (denoise: 0.6-0.8) → VAEDecode → VHS_VideoCombine
视频风格化:
💡 提示:AnimateDiff 生成视频的显存需求与帧数正相关。16帧约需 8GB 显存,32帧需要 12GB+。如果显存不足,降低帧数或分辨率。
6.5 SDXL Turbo / LCM 快速生成¶
6.5.1 LCM(Latent Consistency Models)¶
LCM 通过蒸馏技术实现了 4-8 步 快速生成,大幅降低生成时间。
使用方法:
# 方法一:使用 LCM LoRA
CheckpointLoader → LoraLoader (LCM LoRA, strength: 1.0)
→ KSampler
steps: 4-8
cfg: 1.0-2.0 ← LCM需要很低的CFG
sampler: lcm ← 使用 LCM 采样器
scheduler: sgm_uniform
# 方法二:使用 LCM Checkpoint
直接加载 LCM 版本的 Checkpoint
KSampler (steps: 4, cfg: 1.5, sampler: lcm)
6.5.2 SDXL Turbo¶
SDXL Turbo 使用对抗蒸馏技术实现 1-4 步 生成:
CheckpointLoader (sdxl_turbo.safetensors)
→ KSampler
steps: 1-4
cfg: 1.0 ← Turbo 几乎不需要 CFG 引导
sampler: euler
scheduler: normal
denoise: 1.0
6.5.3 Lightning 模型¶
SDXL Lightning 提供多种步数配置的蒸馏模型:
| 版本 | 推荐步数 | CFG |
|---|---|---|
| 1-step | 1 | 0 |
| 2-step | 2 | 0 |
| 4-step | 4 | 0-1.0 |
| 8-step | 8 | 1.0-2.0 |
⚠️ 注意:快速生成模型的质量通常低于标准采样(20+ 步)。它们更适合快速预览和实时交互场景。
6.6 图像放大(Upscale)工作流¶
6.6.1 潜空间放大 vs 像素放大¶
| 方式 | 方法 | 优点 | 缺点 |
|---|---|---|---|
| 潜空间放大 | LatentUpscale | 快速、可配合重采样 | 可能引入模糊 |
| 像素放大 | ImageUpscaleWithModel | 保持/增强细节 | 不添加新内容 |
| 组合放大 | 像素放大 + img2img | 最佳质量 | 速度最慢 |
6.6.2 ESRGAN / RealESRGAN 使用¶
# 加载放大模型
UpscaleModelLoader
└── model_name: RealESRGAN_x4plus.pth
# 应用到图像
ImageUpscaleWithModel
├── upscale_model: [UpscaleModelLoader 输出]
├── image: [VAEDecode 输出]
└── IMAGE → SaveImage (4倍放大后的图像)
常用放大模型:
| 模型 | 倍率 | 适用场景 |
|---|---|---|
| RealESRGAN_x4plus | 4x | 通用真实感图像 |
| RealESRGAN_x4plus_anime_6B | 4x | 动漫/插画风格 |
| 4x-UltraSharp | 4x | 超锐利放大 |
| 4x_NMKD-Siax_200k | 4x | 自然风景 |
6.6.3 Tiled 放大(大图处理)¶
当图像过大时,直接放大可能导致显存溢出。使用 Tiled(分块)处理:
# 使用 VAEDecodeTiled 替代 VAEDecode
VAEDecodeTiled
├── samples: [KSampler 输出]
├── vae: [VAE]
├── tile_size: 512 ← 每次处理 512×512 的块
└── IMAGE
# 或使用 Tiled KSampler(用于放大重采样)
# 需要安装相关自定义节点
Tiled 放大工作流:
原始图像 (512×512)
↓
像素放大 4x (2048×2048)
↓
VAEEncode → Tiled KSampler (denoise: 0.3-0.5) → VAEDecodeTiled
↓
高质量 2048×2048 图像
💡 提示:Tiled 处理时,tile 之间需要一定的重叠区域(overlap)来避免拼接痕迹。多数 Tiled 节点会自动处理。
6.7 批量生成与参数扫描¶
6.7.1 批量生成¶
方法一:batch_size 参数
方法二:Queue 队列
方法三:Auto Queue(自动队列)
启用 Extra Options → Auto Queue,每次生成完成后自动开始下一次生成。
6.7.2 参数扫描(XY Plot)¶
使用 efficiency-nodes 或类似节点包实现参数扫描:
# 安装 efficiency-nodes-comfyui
# 使用 XY Plot 节点
XY_Plot
├── X轴: CFG Scale [3, 5, 7, 9, 11]
├── Y轴: Sampler [euler, dpmpp_2m, dpmpp_sde]
└── 输出: 网格图,直观对比不同参数组合
手动参数扫描(无额外节点):
- 固定种子
- 修改目标参数
- 执行生成
- 记录参数和结果
- 重复以上步骤
6.8 条件组合高级技巧¶
6.8.1 提示词混合(Conditioning Average)¶
ConditioningAverage
├── conditioning_to: [条件A]
├── conditioning_from: [条件B]
├── conditioning_to_strength: 0.6 ← A的权重
└── CONDITIONING (混合后的条件)
# 效果:60% 条件A + 40% 条件B 的混合
应用场景:平滑过渡两种风格或主题。
6.8.2 提示词调度(时序控制)¶
使用 ConditioningSetTimestepRange 实现不同采样阶段使用不同提示词:
CLIPTextEncode ("构图描述") → ConditioningSetTimestepRange
├── start: 0.0
└── end: 0.5 ← 前半段:控制构图
CLIPTextEncode ("细节描述") → ConditioningSetTimestepRange
├── start: 0.5
└── end: 1.0 ← 后半段:添加细节
ConditioningCombine → KSampler.positive
原理:
扩散过程的前期步骤决定全局结构和构图,后期步骤添加细节和纹理。利用这一特性,可以在不同阶段使用不同的提示词来精确控制。
6.8.3 GLIGEN 区域文本控制¶
GLIGEN 允许将文本条件与精确的 bounding box 绑定:
GLIGENTextBoxApply
├── conditioning_to: [基础条件]
├── clip: [CLIP]
├── gligen_textbox_model: [GLIGEN模型]
├── text: "a red apple"
├── width, height: 256, 256
├── x, y: 100, 200
└── CONDITIONING
💡 提示:区域控制技术可以组合使用。例如:GLIGEN 定位 + ControlNet 结构控制 + IP-Adapter 风格引导,实现高度精确的生成控制。
练习¶
- Hires Fix:搭建一个 SD1.5 的 Hires Fix 工作流,从 512→1024,对比有无 Hires Fix 的效果差异
- 图像放大:下载 RealESRGAN 放大模型,搭建一个 4x 放大工作流
- AnimateDiff:安装 AnimateDiff Evolved 节点,生成一段 16 帧的短动画
- 快速生成:使用 LCM LoRA 配置一个 4 步快速生成工作流
- 区域控制:使用 ConditioningSetArea 生成一张左右分区的图像(如左边人物、右边风景)
- 参数扫描:固定种子,依次测试 5 种不同采样器 + 3 种调度器,记录最佳组合
延伸阅读¶
- AnimateDiff 论文
- Latent Consistency Models 论文
- SDXL Turbo 技术报告
- Real-ESRGAN 论文
- GLIGEN 论文
- ComfyUI AnimateDiff Evolved
📌 下一章:07-自定义节点与扩展 —— 学习自定义节点的使用与开发
最后更新日期:2026-02-12 适用版本:ComfyUI实战教程 v2026