跳转至

06-高级工作流

ComfyUI高级工作流结构图

🎯 学习目标

  • 掌握 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 工作流

Text Only
阶段一:低分辨率生成
CheckpointLoader → CLIPTextEncode (正/反) → KSampler (512×512)
阶段二:潜空间放大 + 重新采样
LatentUpscale (放大到 1024×1024) → KSampler (denoise: 0.5-0.7)
阶段三:解码输出
VAEDecode → SaveImage

节点配置详解

Text Only
# 第一阶段 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 两阶段架构:

Text Only
阶段一: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 三阶段生成管线

对于最高质量的输出,可以使用三阶段管线:

Text Only
阶段一:低分辨率生成 (512×512) — 确定构图
阶段二:潜空间放大 + 重采样 (1024×1024) — 添加细节
阶段三:像素放大 + Tile ControlNet (2048×2048) — 超高分辨率

6.3 区域控制生成

6.3.1 基本概念

区域控制允许为图像的不同区域指定不同的提示词。例如:

  • 左半部分:一个人物
  • 右半部分:一个建筑
  • 上方:蓝天白云

6.3.2 使用 ConditioningSetArea 实现

Text Only
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 实现(更灵活)

Text Only
# 通过遮罩精确控制区域形状
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 工作流

Text Only
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)

Text Only
LoadImage → VAEEncode → 作为 KSampler 的 latent_image
重复帧 (RepeatLatentBatch) 到目标帧数
KSampler (denoise: 0.6-0.8) → VAEDecode → VHS_VideoCombine

视频风格化

Text Only
加载视频帧 → VAEEncode → 每帧作为 img2img 输入
AnimateDiff 模型保持帧间一致性
输出风格化视频

💡 提示:AnimateDiff 生成视频的显存需求与帧数正相关。16帧约需 8GB 显存,32帧需要 12GB+。如果显存不足,降低帧数或分辨率。


6.5 SDXL Turbo / LCM 快速生成

6.5.1 LCM(Latent Consistency Models)

LCM 通过蒸馏技术实现了 4-8 步 快速生成,大幅降低生成时间。

使用方法

Text Only
# 方法一:使用 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 步 生成:

Text Only
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 使用

Text Only
# 加载放大模型
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(分块)处理:

Text Only
# 使用 VAEDecodeTiled 替代 VAEDecode
VAEDecodeTiled
    ├── samples: [KSampler 输出]
    ├── vae: [VAE]
    ├── tile_size: 512    ← 每次处理 512×512 的块
    └── IMAGE

# 或使用 Tiled KSampler(用于放大重采样)
# 需要安装相关自定义节点

Tiled 放大工作流

Text Only
原始图像 (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 参数

Text Only
EmptyLatentImage
    ├── batch_size: 4    ← 一次生成4张
    └── LATENT → KSampler

方法二:Queue 队列

Text Only
# 在 Queue Prompt 旁设置队列数量
Queue size: 10    ← 点击 Queue Prompt 后自动执行 10 次

方法三:Auto Queue(自动队列)

启用 Extra Options → Auto Queue,每次生成完成后自动开始下一次生成。

6.7.2 参数扫描(XY Plot)

使用 efficiency-nodes 或类似节点包实现参数扫描:

Text Only
# 安装 efficiency-nodes-comfyui
# 使用 XY Plot 节点

XY_Plot
    ├── X轴: CFG Scale [3, 5, 7, 9, 11]
    ├── Y轴: Sampler [euler, dpmpp_2m, dpmpp_sde]
    └── 输出: 网格图,直观对比不同参数组合

手动参数扫描(无额外节点)

  1. 固定种子
  2. 修改目标参数
  3. 执行生成
  4. 记录参数和结果
  5. 重复以上步骤

6.8 条件组合高级技巧

6.8.1 提示词混合(Conditioning Average)

Text Only
ConditioningAverage
    ├── conditioning_to: [条件A]
    ├── conditioning_from: [条件B]
    ├── conditioning_to_strength: 0.6    ← A的权重
    └── CONDITIONING (混合后的条件)

# 效果:60% 条件A + 40% 条件B 的混合

应用场景:平滑过渡两种风格或主题。

6.8.2 提示词调度(时序控制)

使用 ConditioningSetTimestepRange 实现不同采样阶段使用不同提示词:

Text Only
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 绑定:

Text Only
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 风格引导,实现高度精确的生成控制。


练习

  1. Hires Fix:搭建一个 SD1.5 的 Hires Fix 工作流,从 512→1024,对比有无 Hires Fix 的效果差异
  2. 图像放大:下载 RealESRGAN 放大模型,搭建一个 4x 放大工作流
  3. AnimateDiff:安装 AnimateDiff Evolved 节点,生成一段 16 帧的短动画
  4. 快速生成:使用 LCM LoRA 配置一个 4 步快速生成工作流
  5. 区域控制:使用 ConditioningSetArea 生成一张左右分区的图像(如左边人物、右边风景)
  6. 参数扫描:固定种子,依次测试 5 种不同采样器 + 3 种调度器,记录最佳组合

延伸阅读


📌 下一章07-自定义节点与扩展 —— 学习自定义节点的使用与开发


最后更新日期:2026-02-12 适用版本:ComfyUI实战教程 v2026