ComfyUI AI绘画工作流入门教程

教程简介

零基础ComfyUI AI绘画工作流入门教程,涵盖ComfyUI安装部署、节点操作、核心节点详解、文生图/图生图工作流、ControlNet精确控制、LoRA模型使用、IP-Adapter风格迁移、视频生成工作流等核心技能,配有"一键换背景"实战项目,适合AI绘画爱好者系统学习。

ComfyUI AI绘画工作流入门教程

适用读者:零基础AI绘画爱好者
教程版本:2024年最新版
预计学习时间:8-12小时


目录

  1. ComfyUI简介
  2. 安装部署
  3. 界面操作基础
  4. 核心节点详解
  5. 基础文生图工作流
  6. 图生图工作流
  7. ControlNet精确控制
  8. LoRA模型使用
  9. 高级工作流技巧
  10. IP-Adapter图像风格迁移
  11. 视频生成工作流
  12. 实战项目:一键换背景工作流

1. ComfyUI简介

1.1 什么是ComfyUI

ComfyUI 是一款基于 节点式(Node-based) 的 Stable Diffusion 图形化操作界面。它的核心设计理念是将 AI 图像生成的每一个步骤都封装为独立的"节点",用户通过拖拽节点、连接数据线的方式,自由组装出完整的图像生成工作流。

与传统的"填参数-点按钮"式操作不同,ComfyUI 赋予了用户极高的自由度和透明度——你能清楚地看到每一步数据是如何流动的,模型是如何被调用的,提示词是如何被编码的。

ComfyUI 的核心特点:

  • 节点式可视化编程:每个功能都是一个独立节点,通过连线组合
  • 高度可定制:支持自定义节点、脚本扩展、工作流模板
  • 低显存占用:相比WebUI,ComfyUI的显存管理更加高效
  • 工作流可复现:工作流可以导出为JSON文件,精确复现结果
  • 原生支持最新模型:对SDXL、SD3、Flux等新模型支持迅速
  • 活跃的社区生态:大量第三方自定义节点和扩展

1.2 ComfyUI与WebUI的区别

Stable Diffusion WebUI(通常指AUTOMATIC1111开发的sd-webui)是目前最广为人知的SD操作界面。两者各有优劣:

对比维度 ComfyUI WebUI (A1111)
操作方式 节点连线式 表单填写式
学习曲线 前期较陡,后期灵活 前期平缓,后期受限
显存占用 较低,支持分块加载 较高
可定制性 极高,可自由组合 中等,依赖插件
工作流复现 原生支持JSON导出 需要额外插件
批处理能力 强大,原生支持 需要插件
SDXL支持 原生良好支持 良好支持
社区生态 快速成长中 非常成熟
适合人群 进阶用户、研究者 入门用户、快速出图

选择建议:

  • 如果你是纯新手,只想快速出图,建议先从WebUI入手
  • 如果你想要深入理解AI绘画原理,或者需要构建复杂工作流,ComfyUI是更好的选择
  • 如果你显存有限(8GB以下),ComfyUI的优化通常更好
  • 如果你需要批量生产内容,ComfyUI的工作流复用能力更强

1.3 节点式工作流的优势

节点式工作流并非ComfyUI首创,它源自视觉编程领域的成熟理念(如虚幻引擎的蓝图系统、Blender的着色器节点)。这种工作方式有以下显著优势:

1. 可视化数据流

每个节点的输入和输出都清晰可见。你能直观地理解:提示词经过CLIP编码后变成什么 → 这个编码如何影响UNet的去噪过程 → 最终图像如何通过VAE解码生成。

2. 模块化与复用

一个精心搭建的工作流可以保存为模板,下次只需更换输入(如更换提示词或参考图),就能快速生成新内容。这对于商业用途或批量生产尤为重要。

3. 精确控制

在WebUI中,很多高级功能被隐藏在扩展和脚本背后。而在ComfyUI中,你可以精确控制每一个环节——比如在去噪过程中间插入一个条件切换,或者对不同区域应用不同的ControlNet。

4. 调试友好

当生成结果不理想时,你可以逐步检查每个节点的输出,定位问题所在。是提示词编码出了问题?还是ControlNet的权重过高?节点式界面让调试变得直观。

5. 社区协作

工作流文件(JSON格式)可以轻松分享。社区中有大量优秀的工作流模板,从简单的文生图到复杂的视频生成,应有尽有。

1.4 ComfyUI的发展历程

ComfyUI 由开发者 comfyanonymous 于2023年初发布,最初只是作为一个实验性的SD操作界面。由于其出色的架构设计和对新模型的快速支持,迅速获得了AI绘画社区的青睐。

关键里程碑:

  • 2023年1月:首个版本发布,支持SD 1.5模型
  • 2023年4月:引入自定义节点系统,社区生态开始形成
  • 2023年7月:SDXL发布后第一时间提供支持
  • 2023年10月:ControlNet深度集成,工作流能力大幅提升
  • 2024年1月:AnimateDiff支持,视频生成能力引入
  • 2024年3月:SD3支持,SVD视频生成集成
  • 2024年下半年:Flux模型支持、节点市场、ComfyUI Manager成为标配

2. 安装部署

2.1 硬件要求

在安装ComfyUI之前,请确认你的硬件配置满足以下最低要求:

显卡(GPU)要求:

配置等级 显卡型号示例 显存 可用功能
最低配置 GTX 1660 / RTX 2060 6GB SD 1.5基础生图
推荐配置 RTX 3060 / RTX 4060 8-12GB SD 1.5全功能 + SDXL基础
理想配置 RTX 3090 / RTX 4090 24GB 所有功能,包括大模型和视频生成
Apple Silicon M1/M2/M3系列 统一内存8GB+ 基础功能(通过MPS后端)

其他硬件:

  • CPU:现代多核处理器即可(不作为主要瓶颈)
  • 内存:建议16GB以上,32GB更佳
  • 硬盘:SSD强烈推荐,模型文件通常需要50-200GB空间
  • 网络:首次下载模型需要稳定网络连接

2.2 Windows系统安装

方法一:便携版安装(推荐新手)

这是最简单的安装方式,无需配置Python环境。

步骤1:下载便携版

前往ComfyUI的GitHub发布页面,下载最新的Windows便携版压缩包。文件通常命名为 ComfyUI_windows_portable.zip

步骤2:解压

将压缩包解压到一个 不含中文和空格 的路径下,例如:

D:\ComfyUI_windows_portable\

⚠️ 注意:路径中不要包含中文字符、空格或特殊符号,否则可能导致运行错误。

步骤3:运行

进入解压目录,双击运行 run_nvidia_gpu.bat(NVIDIA显卡)或 run_cpu.bat(无独立显卡)。

首次运行会自动下载一些必要的依赖文件,需要等待几分钟。

步骤4:访问界面

浏览器自动打开(或手动访问):

http://127.0.0.1:8188

看到ComfyUI的节点编辑界面即表示安装成功。

方法二:手动安装(推荐进阶用户)

手动安装可以更好地控制环境,便于后续安装自定义节点。

步骤1:安装Python

下载并安装 Python 3.10.x 或 3.11.x(建议3.11),安装时勾选"Add Python to PATH"。

步骤2:安装Git

下载安装 Git for Windows,用于后续克隆仓库和安装自定义节点。

步骤3:克隆ComfyUI仓库

打开命令行(CMD或PowerShell),执行:

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI

步骤4:创建虚拟环境并安装依赖

python -m venv venv
venv\Scripts\activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

注意:cu121 对应CUDA 12.1版本。如果你的CUDA版本不同,请相应调整。查看CUDA版本:在命令行运行 nvidia-smi

步骤5:下载模型

将模型文件放置到对应的目录:

ComfyUI/models/checkpoints/    ← 主模型(.safetensors文件)
ComfyUI/models/loras/          ← LoRA模型
ComfyUI/models/vae/            ← VAE模型
ComfyUI/models/controlnet/     ← ControlNet模型

步骤6:启动

python main.py

2.3 Linux系统安装

Linux安装流程与手动安装类似,但有一些系统级依赖需要注意。

步骤1:安装系统依赖

# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-venv python3-pip git

# Fedora
sudo dnf install python3 python3-virtualenv python3-pip git

步骤2:克隆并配置

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt

步骤3:NVIDIA驱动确认

确保已安装NVIDIA驱动和CUDA:

nvidia-smi

如果未安装,参考NVIDIA官方文档进行安装。

步骤4:启动

python main.py --listen 0.0.0.0

--listen 0.0.0.0 参数允许局域网内其他设备访问(默认只允许本机访问)。

2.4 macOS安装(Apple Silicon)

对于M1/M2/M3芯片的Mac用户:

git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio
pip install -r requirements.txt
python main.py --force-fp16

注意:macOS上某些功能可能受限,特别是部分自定义节点可能不兼容MPS后端。

2.5 模型下载

ComfyUI本身不包含任何AI模型,你需要自行下载。以下是常用的模型来源:

主模型(Checkpoints):

  • SD 1.5系列:约2-7GB,适合入门学习
    • 推荐模型:Realistic Vision、DreamShaper、Anything V5
  • SDXL系列:约6-7GB,图像质量更高
    • 推荐模型:SDXL Base 1.0、Juggernaut XL
  • SD3系列:约6-8GB,最新架构
  • Flux系列:约12-24GB,效果出色但显存要求高

下载渠道:

  • Hugging Face:最官方的模型托管平台
  • CivitAI:最大的SD模型社区,有丰富的用户评价

模型放置路径:

ComfyUI/models/checkpoints/    ← 主模型
ComfyUI/models/loras/          ← LoRA模型
ComfyUI/models/vae/            ← VAE解码器
ComfyUI/models/controlnet/     ← ControlNet模型
ComfyUI/models/embeddings/     ← Textual Inversion嵌入
ComfyUI/models/clip/           ← CLIP模型
ComfyUI/models/clip_vision/    ← CLIP Vision模型
ComfyUI/models/diffusion_models/ ← 扩散模型(SD3/Flux等)

2.6 常见问题解决

问题1:启动报错 "CUDA out of memory"

解决方案:
1. 在启动命令中添加 --lowvram 或 --novram 参数
2. 关闭其他占用显存的程序
3. 降低生成图片的分辨率
4. 使用 --fp16-vae 参数减少VAE显存占用

问题2:节点显示红色错误

解决方案:
1. 检查模型文件是否放置在正确路径
2. 确认模型文件完整(未损坏或不完整下载)
3. 检查是否有缺失的Python依赖
4. 查看控制台错误信息进行针对性排查

问题3:自定义节点安装失败

解决方案:
1. 确保已安装Git并添加到系统PATH
2. 检查网络连接(可能需要代理)
3. 尝试手动克隆节点仓库到 custom_nodes 目录
4. 运行 pip install -r requirements.txt 安装节点依赖

问题4:生成速度极慢

解决方案:
1. 确认正在使用GPU而非CPU(检查启动日志)
2. 更新NVIDIA驱动到最新版本
3. 确认PyTorch版本与CUDA版本匹配
4. 尝试使用 --preview-method auto 参数启用预览

问题5:中文路径导致的问题

解决方案:
1. 将ComfyUI整个目录移动到纯英文路径下
2. 模型文件路径也不要包含中文
3. 输出目录同样避免中文路径

3. 界面操作基础

3.1 界面总览

打开ComfyUI后,你会看到一个深灰色的画布区域,这就是节点工作区。初次打开时通常会有一个默认的文生图工作流。

界面主要区域:

  • 中央画布:放置和连接节点的主要工作区域
  • 右侧面板:Queue(队列)面板,显示生成任务
  • 菜单栏(顶部/右键):添加节点、加载工作流等操作
  • 底部状态栏:显示当前生成进度和显存使用情况

3.2 节点操作

添加节点

方法一:右键菜单

在画布空白处右键,会弹出节点分类菜单。节点按功能分类:

  • loaders:加载器(模型、LoRA、VAE等)
  • conditioning:条件控制(提示词编码等)
  • sampling:采样器(KSampler等)
  • latent:潜空间操作
  • image:图像操作
  • mask:蒙版操作
  • utils:工具节点

方法二:双击搜索

在画布空白处双击,会弹出搜索框。输入节点名称的关键词即可快速找到目标节点。例如输入 "ksam" 即可找到 KSampler 节点。

方法三:拖拽工作流模板

从社区下载的工作流JSON文件可以直接拖拽到画布中导入。

节点基本操作

移动节点:鼠标左键按住节点标题栏拖拽

选中节点:鼠标左键点击节点即可选中,选中后节点边框高亮

多选节点

  • 按住 Ctrl 点击多个节点
  • 或者在画布上拖拽出一个选框(框选)

删除节点

  • 选中节点后按 Delete
  • 或者右键节点选择 "Delete"

复制节点

  • 选中节点后按 Ctrl+C,然后 Ctrl+V
  • 节点的所有参数设置都会被复制

禁用节点

  • 右键节点选择 "Mute"(静音/禁用)
  • 被禁用的节点不会执行,但保留连接关系
  • 调试工作流时非常有用

折叠节点

  • 点击节点右上角的折叠按钮
  • 折叠后只显示标题和关键输入输出
  • 可以让复杂工作流更整洁

3.3 连线方式

节点之间的连接是ComfyUI的核心操作。每个节点都有输入端口(左侧)和输出端口(右侧)。

基本连线

将鼠标移到节点右侧的输出端口上,光标变为十字形。按住左键拖拽到另一个节点的输入端口上,即可创建连接。

连线规则:

  • 只有相同类型的端口才能连接(颜色标识类型)
  • 一个输出端口可以连接到多个输入端口(一对多)
  • 一个输入端口只能接收一个连接(一对一,后连接的会替换先连接的)

连线颜色含义

不同颜色代表不同的数据类型:

颜色 数据类型 说明
紫色 MODEL 模型数据(UNet)
黄色 CLIP 文本编码器数据
红色 VAE VAE编解码器数据
橙色 CONDITIONING 条件数据(编码后的提示词)
粉色 LATENT 潜空间数据
绿色 IMAGE 图像数据
蓝色 MASK 蒙版数据
灰色 INT/FLOAT/STRING 基础数据类型

断开连线

  • 右键点击连线的端点,选择断开
  • 或者直接将连线拖拽到空白处释放
  • 删除节点时,所有相关连线自动断开

重连连线

按住已有的连线端点,拖拽到新的端口上即可重新连接。

3.4 工作流导入导出

保存工作流

方法一:菜单保存

点击菜单栏的 "Save" 按钮,输入文件名,工作流会保存为JSON文件。

方法二:快捷键保存

Ctrl+S 快速保存当前工作流。

方法三:导出为图片

ComfyUI可以将工作流信息嵌入到生成的PNG图片中。右键画布选择 "Save (API Format)" 可以导出API格式的JSON。

加载工作流

方法一:菜单加载

点击 "Load" 按钮,选择之前保存的JSON文件。

方法二:拖拽加载

直接将JSON文件或包含工作流信息的PNG图片拖拽到画布中。

方法三:从图片加载

如果一张PNG图片是ComfyUI生成的,它会包含工作流元数据。直接将图片拖入画布即可还原完整工作流。

3.5 常用快捷键

快捷键 功能
Ctrl+S 保存工作流
Ctrl+O 加载工作流
Ctrl+Z 撤销
Ctrl+Y 重做
Ctrl+C 复制选中节点
Ctrl+V 粘贴节点
Delete 删除选中节点
Ctrl+A 全选节点
Ctrl+G 将选中节点分组
Space+拖拽 平移画布
滚轮 缩放画布
双击空白处 搜索节点
Q 开启/关闭队列面板
Ctrl+Enter 将当前工作流加入队列

3.6 节点分组

当工作流变得复杂时,可以将相关的节点分组以便管理。

  1. 选中多个相关节点
  2. Ctrl+G 或右键选择 "Group"
  3. 为分组命名(如"提示词处理"、"ControlNet设置"等)
  4. 分组可以整体移动、折叠、调整大小

分组是组织复杂工作流的重要手段,建议养成良好习惯。

3.7 ComfyUI Manager

ComfyUI Manager 是一个必装的管理扩展,它大大简化了节点管理和工作流维护。

安装方法:

cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

重启ComfyUI后,菜单栏会出现 "Manager" 按钮。

主要功能:

  • Install Custom Nodes:浏览和安装社区自定义节点
  • Install Models:从多个源下载模型
  • Update All:一键更新所有自定义节点
  • Install via Git URL:通过Git地址安装节点
  • Missing Nodes:检测工作流中缺失的节点并提示安装

4. 核心节点详解

理解核心节点是掌握ComfyUI的关键。本章将逐一讲解最重要的节点及其参数。

4.1 Load Checkpoint(模型加载器)

这是工作流的起点,负责加载Stable Diffusion主模型。

输入端口:

输出端口:

  • MODEL:UNet去噪模型(紫色)
  • CLIP:文本编码器(黄色)
  • VAE:变分自编码器(红色)

参数:

  • ckpt_name:下拉选择已放入 checkpoints 目录的模型文件

使用说明: 一个完整的SD模型(checkpoint)内部通常包含三个组件:UNet(负责去噪)、CLIP(负责理解文字)、VAE(负责图像编码解码)。Load Checkpoint节点一次性加载这三个组件并分别输出。

4.2 CLIP Text Encode(文本编码器)

将人类可读的文字提示词转换为模型能理解的向量表示。

输入端口:

  • clip:来自Load Checkpoint的CLIP输出

输出端口:

  • CONDITIONING:编码后的条件数据(橙色)

参数:

  • text:提示词文本

正面提示词示例:

a beautiful landscape painting, mountains, lake, sunset, 
golden hour, masterpiece, best quality, highly detailed, 
8k, photorealistic, dramatic lighting

负面提示词示例:

low quality, worst quality, blurry, distorted, deformed, 
ugly, duplicate, watermark, text, logo, bad anatomy, 
bad hands, extra fingers, missing fingers

提示词技巧:

  1. 权重语法(keyword:1.3) 表示增加权重到1.3倍,(keyword:0.7) 表示降低到0.7倍
  2. 顺序影响:写在前面的关键词通常影响力更大
  3. BREAK关键词:使用 BREAK 分隔不同的概念组
  4. 混合语法[keyword1:keyword2:0.5] 表示在50%步数前用keyword1,之后用keyword2

4.3 KSampler(核心采样器)

这是整个工作流的心脏,负责执行去噪过程,将随机噪声逐步转化为清晰图像。

输入端口:

  • model:UNet模型
  • positive:正面条件(正面提示词编码)
  • negative:负面条件(负面提示词编码)
  • latent_image:初始潜空间图像

输出端口:

  • LATENT:去噪后的潜空间数据

参数详解:

参数 默认值 说明
seed 随机 随机种子,相同种子产生相同结果
steps 20 去噪步数。越多越精细,但耗时越长
cfg 7.0 Classifier-Free Guidance强度。越高越遵循提示词,但过高会导致过饱和
sampler_name euler 采样算法名称
scheduler normal 调度器类型
denoise 1.0 去噪强度。1.0为完全去噪(文生图),低于1.0为部分去噪(图生图)

常用采样器对比:

采样器 特点 推荐场景
euler 快速,效果稳定 日常使用
euler_ancestral 更有创造性,结果多样 探索性创作
dpmpp_2m 高质量,速度快 通用推荐
dpmpp_2m_karras 细节丰富 高质量出图
dpmpp_sde 细节极佳,速度较慢 精细作品
dpmpp_3m_sde 最高质量,速度最慢 最终成品
uni_pc 快速收敛 少步数出图

调度器(Scheduler)选择:

调度器 特点
normal 标准线性调度
karras 更好的噪声调度,推荐使用
exponential 指数衰减
sgm_uniform SGM均匀调度

4.4 Empty Latent Image(空白潜空间)

创建一个空白的潜空间图像,作为文生图的起点。

参数:

  • width:图像宽度(像素),默认512
  • height:图像高度(像素),默认512
  • batch_size:批次大小,默认1

常用尺寸参考:

模型 推荐尺寸 说明
SD 1.5 512×512 正方形
SD 1.5 512×768 竖版人像
SD 1.5 768×512 横版风景
SDXL 1024×1024 正方形
SDXL 768×1344 竖版
SDXL 1348×768 横版

⚠️ 注意:SD模型在训练时使用的尺寸是固定的。使用非标准尺寸可能导致图像变形或出现重复内容。尽量使用训练尺寸或其整数倍。

4.5 VAE Decode(VAE解码器)

将潜空间数据解码为可见的像素图像。

输入端口:

  • samples:潜空间数据(来自KSampler)
  • vae:VAE模型(来自Load Checkpoint)

输出端口:

  • IMAGE:解码后的图像

说明:

VAE(变分自编码器)的作用是在潜空间和像素空间之间转换。编码器将图像压缩到潜空间(便于计算),解码器将潜空间数据还原为图像。

有时默认VAE的效果不够好,可以加载专门的VAE模型来提升图像质量(特别是色彩表现)。社区中常用的改进VAE如 vae-ft-mse-840000 可以让色彩更加准确。

4.6 Save Image(保存图像)

将图像保存到本地磁盘。

输入端口:

  • images:图像数据

参数:

  • filename_prefix:文件名前缀,默认 "ComfyUI"

说明:

生成的图片默认保存在 ComfyUI/output/ 目录下。文件名格式为 前缀_序号.png

4.7 Load Image(加载图像)

从本地加载一张图片作为输入。

输出端口:

  • IMAGE:加载的图像
  • MASK:自动生成的蒙版(如果图像包含alpha通道)

参数:

  • image:下拉选择已放入 input 目录的图片

使用提示:

将图片放入 ComfyUI/input/ 目录后,刷新节点即可在下拉列表中看到。也可以直接将图片拖拽到画布上创建此节点。

4.8 VAE Encode(VAE编码器)

将像素图像编码到潜空间。这是图生图(img2img)的关键步骤。

输入端口:

  • pixels:像素图像
  • vae:VAE模型

输出端口:

  • LATENT:编码后的潜空间数据

4.9 ControlNet相关节点

ControlNet是Stable Diffusion最重要的控制扩展之一,允许你通过参考图像精确控制生成结果。

Load ControlNet Model

加载ControlNet模型。

参数:

  • control_net_name:ControlNet模型文件名

Apply ControlNet

将ControlNet条件应用到生成过程中。

输入端口:

  • conditioning:原有的条件数据
  • control_net:ControlNet模型
  • image:控制图像

输出端口:

  • CONDITIONING:应用ControlNet后的条件数据

参数:

  • strength:ControlNet影响强度(0.0-1.0),默认1.0
  • start_percent:开始应用的步数百分比,默认0.0
  • end_percent:停止应用的步数百分比,默认1.0

4.10 LoRA Loader

加载LoRA模型,对主模型进行微调。

输入端口:

  • model:主模型
  • clip:CLIP编码器

输出端口:

  • MODEL:应用LoRA后的模型
  • CLIP:应用LoRA后的CLIP

参数:

  • lora_name:LoRA模型文件名
  • strength_model:对模型的影响强度,默认1.0
  • strength_clip:对CLIP的影响强度,默认1.0

4.11 KSampler Advanced(高级采样器)

提供比基础KSampler更多的控制选项。

额外参数:

  • start_at_step:从第几步开始采样
  • end_at_step:到第几步结束采样
  • return_with_leftover_noise:是否保留剩余噪声

使用场景:

高级采样器常用于需要分阶段处理的工作流,例如:

  • 先用一个采样器处理前半部分步数
  • 再用另一个采样器或参数处理后半部分
  • 实现风格渐变或条件切换

4.12 Latent系列操作节点

Latent Upscale

将潜空间图像放大到指定尺寸。

参数:

  • upscale_method:放大方法(nearest-exact、bilinear、area等)
  • width / height:目标尺寸
  • crop:裁剪方式

Latent Composite

将多个潜空间图像合成在一起。

参数:

  • samples_to:目标潜空间
  • samples_from:源潜空间
  • x / y:放置位置

Latent Noise Mask

在潜空间上应用噪声蒙版,用于局部重绘。


5. 基础文生图工作流

本章将手把手教你从零搭建一个完整的文生图(txt2img)工作流。

5.1 最简文生图工作流

这是最基础的工作流,包含5个节点:

Load Checkpoint → CLIP Text Encode (正) ─┐
                  CLIP Text Encode (负) ─┼→ KSampler → VAE Decode → Save Image
                  Empty Latent Image ────┘

搭建步骤:

步骤1:添加Load Checkpoint节点

双击画布空白处,搜索 "Load Checkpoint",添加节点。在下拉菜单中选择你已下载的模型。

步骤2:添加两个CLIP Text Encode节点

添加两个CLIP Text Encode节点。一个用于正面提示词,一个用于负面提示词。

  • 将Load Checkpoint的 CLIP 输出连接到两个CLIP Text Encode的 clip 输入
  • 在正面提示词节点中输入你想要的内容描述
  • 在负面提示词节点中输入你不想出现的内容

步骤3:添加Empty Latent Image节点

设置图像尺寸,如512×512。

步骤4:添加KSampler节点

将以下连接建立:

  • Load Checkpoint的 MODEL → KSampler的 model
  • 正面CLIP的 CONDITIONING → KSampler的 positive
  • 负面CLIP的 CONDITIONING → KSampler的 negative
  • Empty Latent Image的 LATENT → KSampler的 latent_image

步骤5:添加VAE Decode节点

  • KSampler的 LATENT → VAE Decode的 samples
  • Load Checkpoint的 VAE → VAE Decode的 vae

步骤6:添加Save Image节点

  • VAE Decode的 IMAGE → Save Image的 images

步骤7:生成

点击 "Queue Prompt" 或按 Ctrl+Enter 开始生成。

5.2 参数调优指南

CFG Scale调优

CFG(Classifier-Free Guidance)控制生成结果对提示词的遵循程度。

CFG值 效果
1-3 非常自由,结果随机性大
4-6 有一定创意性,适合艺术风格
7-9 平衡点,推荐日常使用
10-12 严格遵循提示词,但可能出现过饱和
15+ 通常过度,图像可能出现伪影

Steps调优

步数决定了去噪的精细程度。

步数 效果 耗时
10-15 快速预览,质量一般
20-25 日常使用,质量良好 中等
30-40 高质量,细节丰富 较慢
50+ 极高质量,但收益递减

建议:先用20步快速预览效果,满意后再增加到30-40步生成最终版本。

采样器选择建议

  • 快速迭代euler + 20步
  • 高质量日常dpmpp_2m + karras + 25步
  • 精细创作dpmpp_3m_sde + karras + 35步
  • 创意探索euler_ancestral + 25步

5.3 种子控制

种子(Seed)是随机数生成器的初始值。相同的种子+相同的参数=相同的结果。

种子的用途:

  1. 复现结果:找到满意的结果后,记录种子值可以精确复现
  2. 微调参数:固定种子,调整其他参数(如CFG、提示词),观察变化
  3. 批量变体:固定大部分参数,只改变种子,生成系列变体

种子控制技巧:

  • 使用 control_after_generate 选项:
    • randomize:每次生成随机新种子(默认)
    • fixed:固定当前种子
    • increment:每次自动+1
    • decrement:每次自动-1

5.4 提示词工程

基本结构

一个好的提示词通常包含以下部分:

[主体描述], [环境/背景], [风格/媒介], [质量修饰词], [光照/氛围]

示例:

a young woman reading a book in a cozy cafe, 
warm indoor lighting, soft background blur,
oil painting style, impressionist,
masterpiece, best quality, highly detailed,
golden hour, warm tones, atmospheric

负面提示词模板

通用负面提示词(适用于大多数场景):

lowres, bad anatomy, bad hands, text, error, 
missing fingers, extra digit, fewer digits, cropped,
worst quality, low quality, normal quality,
jpeg artifacts, signature, watermark, username, blurry,
deformed, distorted, disfigured, mutation, extra limbs

权重调节示例

(beautiful sunset:1.3), ocean waves, (golden sky:1.2), 
(palm trees:0.8), beach, (dramatic clouds:1.1)

此例中,"beautiful sunset"的影响力最大,"palm trees"的影响力最小。

5.5 SDXL文生图注意事项

使用SDXL模型时,有一些特别需要注意的地方:

  1. 尺寸必须是1024的倍数:推荐1024×1024、768×1344、1344×768等
  2. 提示词风格不同:SDXL对自然语言描述更友好,不需要那么多标签式关键词
  3. 通常不需要负面提示词:SDXL的CLIP编码器更强大,负面提示词的作用减弱
  4. CFG值可以稍低:推荐5-7之间
  5. 使用专门的SDXL VAE:可以获得更好的色彩表现

6. 图生图工作流

图生图(img2img)是在已有图像的基础上进行修改和风格化的过程。

6.1 基础图生图工作流

Load Checkpoint → CLIP Text Encode (正) ─┐
                  CLIP Text Encode (负) ─┤
                  Load Image → VAE Encode ─┼→ KSampler → VAE Decode → Save Image
                  (模型VAE) ─────────────┘

与文生图的区别:

唯一的区别是:不使用Empty Latent Image,而是将参考图片通过VAE Encode编码到潜空间,然后送入KSampler。

关键参数:denoise(去噪强度)

Denoise值 效果
0.1-0.3 轻微修改,基本保持原图
0.4-0.6 中等修改,保留原图结构和色调
0.7-0.8 大幅修改,只保留大致构图
0.9-1.0 几乎完全重绘,原图影响极小

6.2 风格迁移工作流

将一张照片转换为特定的艺术风格。

工作流结构:

Load Checkpoint → CLIP Text Encode ("oil painting style, impressionist, ...") ─┐
                  CLIP Text Encode (负面提示词) ─────────────────────────────┤
                  Load Image → VAE Encode ──────────────────────────────────┼→ KSampler → VAE Decode → Save Image

参数建议:

  • denoise:0.6-0.75(保留原图结构的同时实现风格转换)
  • cfg:7-9
  • steps:25-35
  • 提示词重点放在风格描述上

风格迁移提示词示例:

油画风格:

oil painting, impressionist style, thick brushstrokes, 
vibrant colors, masterpiece, gallery quality

水彩风格:

watercolor painting, soft edges, transparent layers, 
wet on wet technique, artistic, delicate

赛博朋克风格:

cyberpunk style, neon lights, futuristic city, 
dark atmosphere, glowing accents, sci-fi

动漫风格:

anime style, cel shading, vibrant colors, 
clean lines, manga art, studio ghibli inspired

6.3 局部重绘(Inpainting)

局部重绘是图生图最重要的应用之一,允许你只修改图像的特定区域,而保持其他部分不变。

Inpainting工作流结构

Load Checkpoint → CLIP Text Encode (正) ─┐
                  CLIP Text Encode (负) ─┤
                  Load Image ────────────┤
                  Load Image (蒙版) ─────┼→ VAEEncode (Inpaint) → KSampler → VAE Decode → Save Image

蒙版(Mask)的创建

蒙版是一张黑白图像:

  • 白色区域:会被重新生成(需要修改的区域)
  • 黑色区域:保持不变

创建蒙版的方法:

  1. ComfyUI内置蒙版编辑:Load Image节点支持直接在图像上绘制蒙版
  2. 外部工具:使用Photoshop、GIMP等工具绘制蒙版,保存为黑白PNG
  3. 自动蒙版:使用语义分割节点自动生成蒙版

Inpainting专用节点

ComfyUI提供了专门的Inpaint节点:VAEEncode (Inpaint)

额外输入:

  • pixels:原始图像
  • vae:VAE模型
  • mask:蒙版图像

Inpainting参数建议:

  • denoise:0.7-1.0(通常需要较高值才能让新内容与原图融合)
  • cfg:7-8
  • steps:25-30

Inpainting技巧

  1. 蒙版边缘要留有余量:不要紧贴需要修改的区域边缘绘制蒙版,稍微扩大一些可以让过渡更自然
  2. 使用专门的Inpainting模型:如 stable-diffusion-inpainting,效果通常比通用模型好
  3. 提示词要描述完整场景:不要只描述修改区域,描述整个画面可以帮助模型更好地融合
  4. 多次迭代:如果一次效果不好,可以降低denoise值,多次迭代修改

6.4 超分辨率放大

将低分辨率图像放大到高分辨率,同时增加细节。

两阶段放大工作流

第一阶段:初步放大

Load Image → Latent Upscale (2x) → KSampler (denoise=0.5) → VAE Decode

第二阶段:精细放大

上一步结果 → VAE Encode → Latent Upscale (1.5x) → KSampler (denoise=0.4) → VAE Decode → Save Image

参数建议:

  • 第一阶段denoise:0.4-0.5
  • 第二阶段denoise:0.3-0.4
  • 步数:20-30
  • 采样器:dpmpp_2m + karras

使用Upscale模型

也可以使用专门的超分辨率模型(如Real-ESRGAN)进行放大,效果通常更好。

节点: Load Upscale Model + Upscale Image (Using Model)


7. ControlNet精确控制

ControlNet是让AI绘画从"随机生成"进化到"精确控制"的关键技术。本章将详细介绍各种ControlNet的使用方法。

7.1 ControlNet原理简介

ControlNet通过在Stable Diffusion的UNet架构上添加额外的控制分支,实现对生成过程的精确控制。它接受一张"控制图像"(如边缘图、姿态图、深度图等),并引导生成过程遵循这些控制信号。

工作流程:

  1. 准备一张控制图像(如Canny边缘图)
  2. 加载对应的ControlNet模型
  3. 将控制图像和ControlNet模型通过 Apply ControlNet 节点注入到条件数据中
  4. KSampler在去噪过程中会同时参考文本提示词和ControlNet信号

7.2 OpenPose姿态控制

OpenPose可以检测人体姿态(骨骼关键点),并以此控制生成人物的姿态。

工作流结构

Load ControlNet Model (openpose) ─┐
Load Image (姿态参考) ────────────┼→ Apply ControlNet → KSampler → VAE Decode → Save Image
CLIP Text Encode ─────────────────┘

获取OpenPose骨骼图

方法一:使用预处理器

ComfyUI可以通过自定义节点(如ComfyUI-ControlNet-Aux)自动检测图像中的姿态:

Load Image → OpenPose Preprocessor → Apply ControlNet

方法二:使用外部工具

使用专门的OpenPose编辑器手动绘制骨骼:

  • OpenPose Editor:在线工具,可以自由调整骨骼关键点
  • Blender + OpenPose插件:3D姿态调整

方法三:从照片提取

很多自定义节点支持从照片中自动提取OpenPose骨骼。

OpenPose关键点

OpenPose标准模型检测18个关键点:

0-鼻子, 1-脖子, 2-右肩, 3-右肘, 4-右腕,
5-左肩, 6-左肘, 7-左腕, 8-右髋, 9-右膝,
10-右踝, 11-左髋, 12-左膝, 13-左踝,
14-右眼, 15-左眼, 16-右耳, 17-左耳

参数建议

  • strength:0.6-1.0(姿态控制通常需要较高强度)
  • start_percent:0.0
  • end_percent:1.0(或0.8,让后期自由发挥细节)

7.3 Canny边缘控制

Canny边缘检测是最经典的边缘提取算法,可以提取图像的轮廓线条。

工作流结构

Load Image → Canny Edge Preprocessor → Load ControlNet Model (canny) ─┐
CLIP Text Encode ────────────────────────────────────────────────────┼→ Apply ControlNet → KSampler → VAE Decode → Save Image

Canny参数

Canny预处理器有两个关键阈值:

参数 说明 建议值
low_threshold 低阈值,控制弱边缘检测 50-100
high_threshold 高阈值,控制强边缘检测 100-200
  • 低阈值+高阈值差值小:检测更多边缘,控制更精确
  • 低阈值+高阈值差值大:只检测主要轮廓,更自由

Canny适用场景

  • 保持建筑、物体的精确轮廓
  • 从线稿生成彩色图像
  • 将照片转换为不同风格但保持构图

参数建议

  • strength:0.5-0.8(太高会限制创意,太低会失去控制)
  • Canny预处理阈值:low=100, high=200(默认),可根据需要调整

7.4 Depth深度控制

Depth ControlNet使用深度图来控制图像的空间层次关系。

深度图的获取

方法一:从图像估计深度

使用MiDaS或Depth Anything等深度估计模型:

Load Image → MiDaS Depth Map Preprocessor → Apply ControlNet

方法二:使用3D软件渲染

在Blender等3D软件中创建场景并渲染深度图,可以精确控制空间关系。

方法三:使用深度相机

iPhone的LiDAR等深度传感器可以直接获取深度图。

Depth ControlNet适用场景

  • 保持场景的空间布局
  • 控制前景、中景、背景的关系
  • 从3D场景生成2D图像
  • 建筑可视化

参数建议

  • strength:0.5-0.8
  • 使用Depth Anything模型通常比MiDaS效果更好

7.5 其他常用ControlNet类型

Normal Map法线控制

使用法线图控制表面的朝向和光影关系。适合保持物体的立体感和光影方向。

Scribble涂鸦控制

从简单的涂鸦/线稿生成精致的图像。对初学者非常友好,不需要精确的绘画技巧。

Lineart线稿控制

比Canny更精确的线条提取,适合从高质量线稿生成图像。

Shuffle内容重组

打乱图像的内容布局,保持风格但改变具体内容。适合风格参考但不想复制构图的场景。

Reference参考

直接使用参考图像引导生成,不需要预处理。适合风格迁移和色彩参考。

7.6 多ControlNet叠加

ComfyUI的强大之处在于可以同时使用多个ControlNet,实现多重控制。

双ControlNet工作流示例

Load Image (原图) → Canny Preprocessor → Load ControlNet (canny) ─→ Apply ControlNet ─┐
Load Image (姿态) → OpenPose Preprocessor → Load ControlNet (openpose) ─→ Apply ControlNet ─┼→ KSampler
CLIP Text Encode ───────────────────────────────────────────────────────────────────────────┘

连接方式:

关键点在于链式连接Apply ControlNet节点:

  1. 第一个Apply ControlNet接收原始的CONDITIONING
  2. 第二个Apply ControlNet接收第一个的CONDITIONING输出
  3. 最终输出送入KSampler

多ControlNet权重分配

当使用多个ControlNet时,需要合理分配各自的强度:

场景:保持姿态 + 保持边缘
OpenPose strength: 0.8  (姿态需要较强控制)
Canny strength: 0.5     (边缘可以更自由)
场景:保持构图 + 保持深度
Depth strength: 0.7     (空间关系需要较强控制)
Canny strength: 0.4     (轮廓可以有变化)

7.7 ControlNet调优技巧

  1. 逐步增加:先单独测试每个ControlNet的效果,再组合使用
  2. 强度调节:从0.5开始,逐步增加到满意的程度
  3. 时间窗口:使用start_percent和end_percent控制ControlNet影响的时间段
  4. 预处理质量:控制图像的质量直接影响生成效果,花时间优化预处理
  5. 模型匹配:确保ControlNet模型与主模型版本匹配(SD1.5的ControlNet不能用于SDXL)

8. LoRA模型使用

8.1 LoRA原理简介

LoRA(Low-Rank Adaptation,低秩适应)是一种高效的模型微调技术。它不需要修改原始模型的全部参数,而是在模型的关键层之间插入小型的"适配器"矩阵,以极少的参数量实现对模型行为的调整。

LoRA的优势:

  • 文件小:通常只有10-200MB,而完整模型有2-7GB
  • 加载灵活:可以在运行时动态加载/卸载
  • 可叠加:多个LoRA可以同时使用
  • 训练成本低:在消费级显卡上就可以训练

LoRA的常见用途:

  • 角色一致性:训练特定角色的LoRA,确保每次生成的角色外观一致
  • 风格化:训练特定画风的LoRA,如油画风格、水彩风格等
  • 概念学习:训练特定概念(如特定服装、物体、场景)
  • 质量提升:某些LoRA专门用于提升图像质量

8.2 在ComfyUI中加载LoRA

基本LoRA加载工作流

Load Checkpoint ─→ Load LoRA ─→ CLIP Text Encode
                    (model输出)   (clip输出)

节点连接:

  • Load Checkpoint的 MODEL → Load LoRA的 model
  • Load Checkpoint的 CLIP → Load LoRA的 clip
  • Load LoRA的 MODEL → KSampler的 model
  • Load LoRA的 CLIP → CLIP Text Encode的 clip

LoRA参数

参数 说明 建议值
lora_name LoRA文件名 从下拉列表选择
strength_model 对UNet的影响强度 0.5-1.0
strength_clip 对CLIP的影响强度 通常与model相同

8.3 LoRA权重调节

权重是使用LoRA时最重要的参数。不同的权重值会产生截然不同的效果。

权重效果对照:

权重 效果
0.2-0.4 微弱影响,基本保持原模型风格
0.5-0.7 适度影响,平衡LoRA和原模型特点
0.8-1.0 强烈影响,充分体现LoRA的特性
1.0-1.2 超强影响,可能出现过度特征
1.5+ 通常过度,图像质量可能下降

调节建议:

  • 从0.7开始测试,根据效果上下调整
  • 角色LoRA通常需要0.7-1.0
  • 风格LoRA通常0.5-0.8效果较好
  • 质量提升LoRA通常0.3-0.5就足够

8.4 多LoRA混合

ComfyUI支持同时加载多个LoRA,通过链式连接实现混合效果。

多LoRA工作流

Load Checkpoint → Load LoRA (风格) → Load LoRA (角色) → Load LoRA (质量) → CLIP Text Encode

连接方式:

Checkpoint → LoRA_A (model, clip) → LoRA_B (model, clip) → LoRA_C (model, clip) → 使用

每个LoRA的输出连接到下一个LoRA的输入,形成链式结构。

多LoRA权重策略

示例:使用3个LoRA
- 风格LoRA:strength = 0.6
- 角色LoRA:strength = 0.8
- 质量LoRA:strength = 0.3

总效果 = 原模型 + 风格60% + 角色80% + 质量30%

注意事项:

  1. 总权重不宜过高:多个LoRA叠加后,总影响不宜超过2.0,否则容易出现伪影
  2. 冲突处理:如果两个LoRA功能重叠(如两个风格LoRA),需要降低各自的权重
  3. 测试顺序:LoRA的连接顺序可能影响最终效果,可以尝试调整顺序
  4. 显存占用:每多加载一个LoRA,显存占用会增加

8.5 LoRA触发词

许多LoRA需要在提示词中包含特定的"触发词"才能激活其效果。

查看触发词:

  1. 在CivitAI下载页面通常会标注触发词
  2. 使用ComfyUI Manager的模型信息功能查看
  3. 在LoRA文件名或说明文档中查找

使用示例:

假设一个角色LoRA的触发词是 ohwx person

正面提示词:ohwx person, standing in a garden, wearing a blue dress, 
beautiful lighting, masterpiece, best quality

负面提示词:low quality, blurry, bad anatomy

⚠️ 注意:不使用触发词时,LoRA可能不会完全激活,效果会大打折扣。

8.6 训练LoRA简介

虽然本教程主要关注ComfyUI的使用,但了解LoRA的训练过程有助于更好地使用它们。

训练数据准备

  1. 收集图片:15-50张高质量图片(角色LoRA通常需要20-30张)
  2. 裁剪和标注:统一尺寸,为每张图片编写描述文字
  3. 数据增强:可选的翻转、旋转等增强操作

训练工具

  • kohya_ss:最流行的LoRA训练工具,有图形界面
  • OneTrainer:新兴的训练工具,界面更友好
  • AI Toolkit:社区开发的训练工具包

训练参数参考

学习率:1e-4 到 5e-5
训练步数:1500-3000步
批次大小:1-4(根据显存调整)
网络维度(rank):32-128(越大文件越大,效果越精细)

训练硬件需求

显存 可训练内容
8GB SD 1.5 LoRA,rank≤64
12GB SD 1.5 LoRA,rank≤128
16GB+ SDXL LoRA
24GB 大rank值或大尺寸训练

9. 高级工作流技巧

9.1 条件分支与切换

ComfyUI支持在工作流中创建条件分支,根据不同的条件执行不同的处理路径。

Switch/Merge节点

某些自定义节点提供了条件切换功能:

条件输入 → Switch Node ─→ 路径A(风格1)
                       └→ 路径B(风格2)

应用场景:

  • 根据图像内容选择不同的处理流程
  • A/B测试不同的参数组合
  • 构建可配置的工作流模板

Prompt Switch语法

在提示词中使用切换语法:

[cat:dog:0.5]

这表示在前50%的步数中使用 "cat",后50%的步数中切换为 "dog"。

高级用法:

[realistic photo:anime style:0.3]  → 前30%写实,后70%动漫
[oil painting:watercolor:0.7]      → 前70%油画,后30%水彩

9.2 批处理

ComfyUI原生支持批量生成,可以一次性生成多张图片。

Empty Latent Image批处理

batch_size 参数设置为大于1的值:

Empty Latent Image:
  width: 512
  height: 512
  batch_size: 4    ← 一次生成4张图片

使用不同种子批量生成

结合种子的 increment 选项,可以批量生成一系列变体:

KSampler:
  seed: 12345
  control_after_generate: increment
  
生成结果:seed 12345, 12346, 12347, 12348...

批量处理多张输入图

使用自定义节点(如 Load Image Batch)可以批量加载多张图片进行处理:

Load Image Batch → VAE Encode → KSampler → Save Image Batch
(文件夹中的所有图片)                    (批量保存结果)

9.3 工作流优化

显存优化

1. 使用低显存模式启动

python main.py --lowvram     # 低显存模式
python main.py --novram      # 极低显存模式
python main.py --cpu         # 纯CPU模式(极慢)

2. 分块解码(Tiled VAE Decode)

对于大尺寸图像,使用分块解码可以大幅减少显存占用:

KSampler → Tiled VAE Decode → Save Image

3. 模型分块加载

某些自定义节点支持将模型分块加载到显存,用完立即释放。

速度优化

1. 使用合适的步数

不要盲目增加步数。20-25步通常已经足够。

2. 选择高效的采样器

dpmpp_2m + karras 在速度和质量之间有很好的平衡。

3. 使用LCM/Turbo模型

LCM(Latent Consistency Models)和Turbo模型可以在4-8步内生成高质量图像:

KSampler:
  steps: 4-8
  cfg: 1.0-2.0
  sampler_name: lcm

4. 预览设置

启用预览可以让你在生成过程中查看中间结果:

python main.py --preview-method auto

9.4 自定义节点开发

当社区中没有你需要的节点时,可以自己开发。

节点基本结构

一个ComfyUI节点就是一个Python类,包含以下核心部分:

class MyCustomNode:
    """节点的文档字符串,会显示在界面上"""
    
    # 定义输入
    @classmethod
    def INPUT_TYPES(cls):
        return {
            "required": {
                "image": ("IMAGE",),           # 图像输入
                "strength": ("FLOAT", {        # 浮点数输入
                    "default": 1.0, 
                    "min": 0.0, 
                    "max": 2.0, 
                    "step": 0.01
                }),
            },
            "optional": {
                "mask": ("MASK",),             # 可选的蒙版输入
            }
        }
    
    # 返回类型声明
    RETURN_TYPES = ("IMAGE",)
    RETURN_NAMES = ("output_image",)
    
    # 节点功能函数
    FUNCTION = "process"
    
    # 节点分类
    CATEGORY = "image/custom"
    
    def process(self, image, strength, mask=None):
        # 在这里实现节点的处理逻辑
        result = image * strength
        return (result,)

注册节点

在节点文件末尾添加注册代码:

NODE_CLASS_MAPPINGS = {
    "MyCustomNode": MyCustomNode
}

NODE_DISPLAY_NAME_MAPPINGS = {
    "MyCustomNode": "My Custom Node"
}

安装自定义节点

将节点文件放入 ComfyUI/custom_nodes/ 目录下,重启ComfyUI即可。

9.5 工作流模板化

将常用的工作流创建为可复用的模板。

使用Group Node

将多个节点组合为一个"超级节点":

  1. 选中一组节点
  2. 右键选择 "Convert to Group Node"
  3. 只暴露需要调整的参数

使用工作流参数

通过Primitive节点暴露常用参数:

Primitive (seed) ──→ KSampler (seed)
Primitive (cfg) ───→ KSampler (cfg)
Primitive (steps) ─→ KSampler (steps)

这样可以在一个集中的位置管理所有关键参数。

9.6 API调用

ComfyUI提供了REST API,可以通过编程方式调用工作流。

基本API调用:

import json
import urllib.request

# 加载工作流JSON
with open("workflow.json", "r") as f:
    workflow = json.load(f)

# 修改参数
workflow["6"]["inputs"]["text"] = "a beautiful sunset"

# 提交任务
data = json.dumps({"prompt": workflow}).encode('utf-8')
req = urllib.request.Request(
    "http://127.0.0.1:8188/prompt",
    data=data,
    headers={"Content-Type": "application/json"}
)
response = urllib.request.urlopen(req)

API端点:

端点 方法 功能
/prompt POST 提交工作流任务
/history GET 查询历史记录
/queue GET 查询队列状态
/object_info GET 获取所有节点信息
/view GET 获取生成的图片

10. IP-Adapter图像风格迁移

10.1 IP-Adapter简介

IP-Adapter(Image Prompt Adapter)是一种强大的图像提示技术,允许你使用图像作为"提示词"来引导生成过程。与ControlNet不同,IP-Adapter更关注图像的风格、内容和语义信息,而不是几何结构。

IP-Adapter vs ControlNet:

特性 IP-Adapter ControlNet
控制方式 风格/内容参考 几何/结构控制
输入要求 任意参考图 特定格式的控制图
灵活性 高,自动提取特征 需要预处理
适用场景 风格迁移、角色一致性 姿态控制、构图控制

10.2 IP-Adapter工作流搭建

基本工作流结构

Load Checkpoint → CLIP Vision Encode (参考图) ─┐
Load Image (参考图) ──────────────────────────┤
Load IP-Adapter Model ────────────────────────┼→ Apply IP-Adapter → KSampler → VAE Decode → Save Image
CLIP Text Encode ─────────────────────────────┘

所需模型文件:

  1. IP-Adapter模型:放入 models/ipadapter/ 目录
  2. CLIP Vision模型:放入 models/clip_vision/ 目录
  3. 对应的主模型

详细节点连接

步骤1:加载IP-Adapter模型

Load IP-Adapter Model → ipadapter_name: ip-adapter_sd15.safetensors

步骤2:编码参考图像

Load Image → CLIP Vision Encode (clip_vision: CLIP-ViT-H-14)

步骤3:应用IP-Adapter

Apply IP-Adapter:
  - ipadapter: IP-Adapter模型
  - clip_vision: 编码后的参考图
  - model: 主模型
  - weight: 0.7 (参考强度)

步骤4:正常生成流程

应用IP-Adapter后的model → KSampler → VAE Decode → Save Image

10.3 风格参考

使用IP-Adapter进行风格迁移是最常见的应用场景。

工作流示例:将照片转换为油画风格

Load Image (参考油画作品) → CLIP Vision Encode ─┐
Load IP-Adapter Model ─────────────────────────┼→ Apply IP-Adapter (weight=0.6) → ...
CLIP Text Encode ("a portrait of a woman") ───┘

参数建议:

  • weight:0.5-0.7(风格迁移不要太高,否则会过度复制参考图)
  • 配合文字提示词描述你想要的内容
  • 可以同时使用ControlNet控制姿态/构图

10.4 角色一致性

IP-Adapter可以很好地保持角色外观的一致性,这对于需要生成同一角色多张图片的场景非常有用。

工作流示例:保持角色一致性

Load Image (角色参考图) → CLIP Vision Encode ─┐
Load IP-Adapter Model ───────────────────────┼→ Apply IP-Adapter (weight=0.8) → ...
CLIP Text Encode ("角色描述 + 场景描述") ───┘

技巧:

  1. 参考图选择:选择清晰、正面、光线均匀的角色图片
  2. 权重调节:0.7-0.9之间,权重视角色相似度需求而定
  3. 配合文字:在提示词中加入角色的外观描述作为补充
  4. 种子固定:使用相同种子可以增加一致性

10.5 多图参考融合

IP-Adapter支持同时使用多张参考图,融合它们的特征。

双图参考工作流:

Load Image (风格参考) → CLIP Vision Encode ─→ Apply IP-Adapter (weight=0.5) ─┐
Load Image (角色参考) → CLIP Vision Encode ─→ Apply IP-Adapter (weight=0.7) ─┼→ KSampler
CLIP Text Encode ─────────────────────────────────────────────────────────────┘

融合策略:

  • 风格图 + 角色图:风格图提供画风,角色图提供人物外观
  • 高权重图 + 低权重图:主参考用高权重,辅助参考用低权重
  • 正面图 + 背景图:分别控制前景和背景

10.6 IP-Adapter进阶用法

IP-Adapter + ControlNet组合

这是最强大的组合之一:IP-Adapter控制风格/内容,ControlNet控制结构/姿态。

Load Image (风格参考) → IP-Adapter (weight=0.6) ─→ Apply ControlNet (pose, strength=0.8) → KSampler
Load Image (姿态参考) → OpenPose Preprocessor ───┘

IP-Adapter权重衰减

某些IP-Adapter实现支持时间维度的权重变化:

Apply IP-Adapter:
  weight: 0.8
  start_at: 0.0      ← 从第一步开始
  end_at: 0.8        ← 到第80%步数结束

这样可以让IP-Adapter在前期建立风格,后期让模型自由发挥细节。


11. 视频生成工作流

11.1 AnimateDiff

AnimateDiff是最流行的将Stable Diffusion扩展为视频生成工具的方法。它通过在UNet中注入运动模块(Motion Module),让模型能够生成连贯的帧序列。

基本AnimateDiff工作流

所需文件:

  • SD 1.5主模型
  • AnimateDiff运动模块(如 mm_sd_v15_v2.safetensors
  • 可选:AnimateDiff专用LoRA

工作流结构:

Load Checkpoint ─→ Load AnimateDiff Model ─→ KSampler → AnimateDiff Combine → Save Video
CLIP Text Encode ─────────────────────────┘
Empty Latent Image (batch_size=16) ────────┘

详细节点设置:

步骤1:加载模型

Load Checkpoint: 选择SD 1.5模型

步骤2:加载AnimateDiff运动模块

AnimateDiff Loader:
  model: 来自Load Checkpoint
  model_name: mm_sd_v15_v2.safetensors
  beta_schedule: sqrt_linear (推荐)

步骤3:设置潜空间

Empty Latent Image:
  width: 512
  height: 512
  batch_size: 16    ← 这里batch_size就是帧数

步骤4:采样

KSampler:
  steps: 20-25
  cfg: 7.0-8.0
  sampler_name: dpmpp_2m
  scheduler: karras

步骤5:组合并保存

AnimateDiff Combine:
  frame_rate: 8    ← 帧率,8-12fps较常用
  save_image: true

AnimateDiff参数调优

参数 建议值 说明
帧数 16-32 越多视频越长,但显存需求越大
帧率 8-12 运动平滑度
分辨率 512×512 SD 1.5标准尺寸
CFG 7-8 与普通文生图类似
步数 20-25 足够的质量

AnimateDiff提示词技巧

视频生成的提示词需要额外考虑运动描述:

正面提示词:
a girl walking in a flower garden, wind blowing hair, 
flowing dress, dynamic motion, cinematic, 
masterpiece, best quality, smooth animation

负面提示词:
static, still, frozen, blurry, distorted, 
low quality, watermark, text

运动相关关键词:

  • walking, running, dancing:人物动作
  • wind blowing, flowing, waving:自然运动
  • camera panning, zoom in, tracking shot:镜头运动
  • dynamic, motion, action:通用运动描述

11.2 SVD(Stable Video Diffusion)

SVD是Stability AI发布的视频生成模型,它从单张图片生成短视频片段。

SVD工作流结构

Load Image → SVD Encode ─┐
                          ├→ SVD Sampler → Video Combine → Save
SVD Model Loader ─────────┘

所需文件:

  • SVD模型(如 svd_xt.safetensors
  • CLIP Vision模型

节点设置:

SVD Model Loader:
  model_name: svd_xt.safetensors
  
SVD Encode:
  image: 输入图片
  width: 1024
  height: 576
  video_frames: 25
  motion_bucket_id: 127    ← 运动幅度,越大运动越剧烈
  fps: 6
  augmentation_level: 0.0  ← 噪声增强级别

SVD Sampler:
  steps: 20-30
  cfg: 2.5-3.0    ← SVD的CFG通常较低
  seed: 随机

SVD参数说明

参数 说明 建议范围
motion_bucket_id 运动幅度 100-200
fps 帧率 6-8
video_frames 帧数 14-25
augmentation_level 输入图像噪声增强 0.0-0.1
cfg 引导强度 2.0-3.5

SVD使用技巧

  1. 输入图像质量:SVD对输入图像质量非常敏感,使用高质量、清晰的图片
  2. 图像内容:适合有自然运动潜力的内容(水面、云彩、火焰、头发飘动等)
  3. 运动控制:通过 motion_bucket_id 控制运动幅度
  4. 分辨率:推荐使用接近训练分辨率的尺寸

11.3 视频转视频

视频转视频(Video-to-Video)是将现有视频转换为不同风格的过程。

基本工作流

Load Video → Extract Frames → VAE Encode → KSampler → VAE Decode → Combine Frames → Save Video

步骤详解:

步骤1:加载并提取视频帧

Load Video (VHS_VideoCombine):
  video: 输入视频文件
  force_rate: 8    ← 提取帧率
  frame_load_cap: 32    ← 最大加载帧数

步骤2:逐帧处理

将提取的帧序列送入标准的图生图流程
关键:使用较低的denoise值(0.4-0.6)保持原始视频的内容和运动

步骤3:帧间一致性

视频转视频的最大挑战是帧间一致性(temporal consistency)。如果逐帧独立处理,会导致画面闪烁。

解决方案:

  • 使用 temporal_net 等专用节点保持帧间一致性
  • 降低denoise值减少帧间差异
  • 使用ControlNet保持结构一致
  • 后期使用视频稳定工具处理

11.4 ComfyUI视频相关扩展

ComfyUI-VideoHelperSuite

最常用的视频处理扩展,提供视频加载、帧提取、视频组合等功能。

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git

ComfyUI-AnimateDiff-Evolved

AnimateDiff的增强版本,提供更稳定的效果和更多控制选项。

cd ComfyUI/custom_nodes
git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git

12. 实战项目:一键换背景工作流

本章将综合前面学到的知识,构建一个完整的"一键换背景"工作流。这个工作流可以将照片中的人物提取出来,放置到全新的背景中。

12.1 需求分析

目标: 输入一张人物照片和一段背景描述,自动生成人物在新背景中的图片。

流程分解:

  1. 加载原始人物照片
  2. 自动分割人物(去除背景)
  3. 根据文字描述生成新背景
  4. 将人物合成到新背景上
  5. 使用Inpainting融合边缘
  6. 输出最终结果

12.2 所需节点和模型

核心节点:

  • Load Image:加载原始照片
  • SAM Segment / Remove Background:人物分割
  • Load Checkpoint:加载SD模型
  • CLIP Text Encode:编码背景描述
  • KSampler:生成新背景
  • VAE Encode / VAE Decode:图像编解码
  • Image Composite:图像合成
  • VAEEncode (Inpaint):局部重绘融合

所需模型:

  • SD 1.5 或 SDXL 主模型
  • SAM(Segment Anything Model)分割模型
  • 可选:Inpainting专用模型

12.3 详细工作流搭建

阶段一:人物分割

步骤1:添加Load Image节点

加载需要换背景的人物照片。

步骤2:添加分割节点

使用ComfyUI-Impact-Pack提供的分割功能:

Load Image → SAM Segment (自动检测人物) → 分割结果

或者使用简单的背景移除节点:

Load Image → Remove Background (rembg) → 人物图像 + 蒙版

步骤3:保存分割结果

人物图像 → Save Image (保存人物)
蒙版 → Save Image (保存蒙版,用于后续Inpainting)

阶段二:生成新背景

步骤4:搭建背景生成子流程

Load Checkpoint → CLIP Text Encode ("a beautiful beach at sunset, 
golden sand, palm trees, clear sky, masterpiece, best quality") ─┐
CLIP Text Encode (负面提示词) ───────────────────────────────────┤
Empty Latent Image (与原图相同尺寸) ──────────────────────────────┼→ KSampler → VAE Decode → 背景图像

参数设置:

  • steps:25-30
  • cfg:7.0
  • sampler_name:dpmpp_2m
  • scheduler:karras
  • seed:随机(可以固定种子以便调整)

阶段三:合成与融合

步骤5:合成人物到背景

背景图像 ──────────────────→ Image Composite ─→ 合成图像
人物图像 ─→ (可选缩放) ───→ Image Composite
蒙版 ──────────────────────→ Image Composite (mask)

Image Composite节点参数:

  • destination:背景图像
  • source:人物图像
  • mask:人物蒙版
  • x / y:人物在背景中的位置

步骤6:边缘融合(Inpainting)

为了让合成更自然,需要对边缘区域进行Inpainting:

合成图像 → 创建边缘蒙版 → VAEEncode (Inpaint) → KSampler (denoise=0.3-0.5) → VAE Decode → 最终结果

创建边缘蒙版的方法:

将人物蒙版进行膨胀(dilate)操作,然后减去原始蒙版,得到只包含边缘的环形蒙版:

蒙版 → Mask Expand (expand=10-20像素) → Mask Subtract (原蒙版) → 边缘蒙版

Inpainting参数:

  • denoise:0.3-0.5(不要太高,只做边缘融合)
  • cfg:7.0
  • steps:20-25
  • 提示词描述完整场景

12.4 完整工作流连接图

┌─────────────────────────────────────────────────────────────────┐
│                     一键换背景完整工作流                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [Load Image] ─→ [Remove BG] ─┬→ 人物图像                       │
│     (原照片)                    └→ 蒙版                          │
│                                                                 │
│  [Load Checkpoint] ─→ [CLIP Encode] ─┬→ [KSampler] ─→ [VAE     │
│     (SD模型)         (背景描述)       │    (生成背景)    Decode]  │
│                      [负面提示词] ────┤                          │
│                      [Empty Latent] ──┘                          │
│                                                                 │
│  背景图像 ─→ [Image Composite] ─→ 合成图像                       │
│  人物图像 ─→ [Image Composite]                                   │
│  蒙版 ─────→ [Image Composite]                                   │
│                                                                 │
│  合成图像 ─→ [Mask Expand] ─→ [Mask Subtract] ─→ 边缘蒙版       │
│                 (膨胀15px)      (减去原蒙版)                      │
│                                                                 │
│  合成图像 ─→ [VAE Encode (Inpaint)] ─→ [KSampler] ─→ [VAE      │
│  边缘蒙版 ─→ [VAE Encode (Inpaint)]      (denoise=0.4)  Decode] │
│  [CLIP Encode] ─────────────────────→ [KSampler]                │
│     (场景描述)                                                    │
│                                                                 │
│  最终结果 ─→ [Save Image]                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

12.5 效果优化技巧

1. 光照一致性

人物和背景的光照方向不一致是合成图像最常见的问题。

解决方案:

  • 在提示词中明确指定光照方向(如 "lighting from the left")
  • 使用ControlNet的Depth或Normal控制背景的光影
  • 后期通过图像处理工具调整人物的亮度和对比度

2. 色调匹配

人物和背景的色调可能不协调。

解决方案:

  • 使用 Color Transfer 节点将背景色调应用到人物上
  • 在Inpainting时使用较低的denoise值,让色调自然过渡
  • 使用 Image Blend 节点进行全局色调调整

3. 边缘自然度

合成的边缘过于生硬。

解决方案:

  • 扩大Inpainting蒙版的范围(expand=20-30像素)
  • 使用羽化(feather)蒙版边缘
  • 多次迭代Inpainting,逐步降低denoise值

4. 分割质量

自动分割可能不够精确。

解决方案:

  • 使用SAM模型通常比rembg效果更好
  • 手动修正分割蒙版(在外部工具中编辑)
  • 使用多个分割模型取交集

12.6 批量处理版本

将上述工作流扩展为批量处理版本,可以一次性处理多张照片。

修改点:

  1. 使用 Load Image Batch 替代 Load Image
  2. 将KSampler的batch_size设置为输入图片数量
  3. 使用 Save Image Batch 批量保存结果

工作流结构:

Load Image Batch → Remove BG Batch → Composite Batch → Inpaint Batch → Save Image Batch

12.7 进阶变体

变体一:AI生成人物 + 自定义背景

Load Checkpoint → CLIP Encode (人物描述) → KSampler → VAE Decode → 人物图像
                                                    ↓
背景图像 ─→ Image Composite → Inpaint → 最终结果

变体二:风格化换背景

在换背景的同时进行风格化处理:

原图 → 分割 → 合成到新背景 → 全图风格化 (denoise=0.3-0.4) → 最终结果

变体三:多人物合成

将多个人物合成到同一个场景中:

人物A → 分割 ─┐
人物B → 分割 ─┼→ 依次合成到背景 → Inpaint融合 → 最终结果
人物C → 分割 ─┘

附录

附录A:常用自定义节点推荐

节点包 功能 重要程度
ComfyUI Manager 节点管理和更新 ★★★★★
ComfyUI-Impact-Pack 分割、检测、Inpainting增强 ★★★★★
ComfyUI-ControlNet-Aux ControlNet预处理器 ★★★★☆
ComfyUI-AnimateDiff-Evolved 视频生成增强 ★★★★☆
ComfyUI-VideoHelperSuite 视频加载和处理 ★★★★☆
ComfyUI_IPAdapter_plus IP-Adapter增强 ★★★★☆
ComfyUI-KJNodes 各种实用工具节点 ★★★☆☆
Efficiency Nodes 效率优化节点 ★★★☆☆
ComfyUI-Easy-Use 简化常用操作 ★★★☆☆
was-node-suite 综合工具节点集 ★★★☆☆

附录B:提示词模板库

人像摄影

正面:portrait photo of a [描述], professional photography, 
studio lighting, sharp focus, bokeh background, 
8k uhd, dslr, high quality, film grain

负面:blurry, low quality, distorted, deformed, ugly, 
bad anatomy, bad proportions, extra limbs

风景绘画

正面:[场景描述], landscape painting, masterpiece, 
beautiful scenery, golden hour, dramatic clouds, 
vibrant colors, highly detailed, 8k

负面:low quality, blurry, watermark, text, 
oversaturated, flat lighting

动漫风格

正面:[角色描述], anime style, manga, vibrant colors, 
clean lines, detailed eyes, studio quality, 
anime masterpiece, cel shading

负面:realistic, photo, 3d, low quality, blurry, 
bad anatomy, extra fingers

产品摄影

正面:[产品描述], product photography, professional lighting, 
white background, studio shot, high resolution, 
commercial quality, sharp details

负面:blurry, low quality, distorted, shadow, 
watermark, text, logo

附录C:显存占用参考

操作 SD 1.5 SDXL Flux
基础文生图 512×512 ~4GB - -
基础文生图 1024×1024 - ~8GB ~16GB
ControlNet叠加 +1-2GB +2-4GB -
LoRA加载 +0.5GB +1GB +1-2GB
AnimateDiff 16帧 ~8GB - -
SVD 25帧 - ~12GB -

注:以上为大致参考值,实际占用取决于具体模型和参数设置。

附录D:常见错误及解决

错误信息 原因 解决方案
CUDA out of memory 显存不足 降低分辨率/使用--lowvram/关闭其他程序
size mismatch 输入尺寸不匹配 检查所有节点的尺寸参数是否一致
NoneType object 节点连接缺失 检查是否有未连接的必需输入端口
ModuleNotFoundError 缺少Python依赖 运行pip install安装缺失模块
safetensors file corrupt 模型文件损坏 重新下载模型文件
model not found 模型路径错误 检查模型文件是否在正确目录

附录E:学习资源

官方资源:

  • ComfyUI GitHub仓库:项目源码和更新日志
  • ComfyUI官方示例:内置的基础工作流示例

社区资源:

  • CivitAI工作流分享:大量社区创作的工作流模板
  • Reddit r/comfyui:活跃的讨论社区
  • Discord ComfyUI频道:实时交流和技术支持

推荐学习路径:

  1. 第1天:安装ComfyUI,运行默认工作流,理解基本概念
  2. 第2-3天:学习节点操作,搭建基础文生图工作流
  3. 第4-5天:学习图生图和Inpainting
  4. 第6-7天:学习ControlNet控制
  5. 第8-10天:学习LoRA、IP-Adapter等高级功能
  6. 第11-14天:学习视频生成和自定义节点
  7. 第15天起:实战项目,构建自己的工作流

结语

ComfyUI是一个功能强大且灵活的AI绘画工具。虽然学习曲线比WebUI陡峭,但一旦掌握了节点式工作流的思维方式,你将拥有远超传统界面的创作自由度。

关键要点回顾:

  1. 理解数据流:模型→编码→采样→解码→保存,这是所有工作流的基础
  2. 参数要实验:没有万能的参数组合,多尝试才能找到最适合的设置
  3. 善用社区资源:大量优秀的工作流和自定义节点可以借鉴
  4. 从小到大:先掌握简单工作流,再逐步构建复杂流程
  5. 记录和复用:好的工作流要保存下来,形成自己的模板库

希望本教程能帮助你开启ComfyUI的创作之旅。AI绘画的世界充满无限可能,祝你创作愉快!


免责声明:本教程仅供学习交流使用。使用AI生成内容时请遵守当地法律法规,尊重他人权益,不得用于生成违法或侵权内容。


教程编写日期:2024年
总字数:约30,000+字符
适用ComfyUI版本:2024年最新版

内容声明

本文内容为AI技术学习教程,仅供学习参考。如涉及技术问题,欢迎通过 xurj005@163.com 与我们交流。

目录