ComfyUI节点使用教程
ComfyUI节点使用教程,由ai编写,可以偶尔解决一下困难
1. 基础概念
理解这四样东西,ComfyUI 就没有神秘感了:
| 概念 | 含义 | 你的环境里对应什么 |
|---|---|---|
| MODEL | 扩散模型的 UNet/DiT 主体,负责”去噪” | z_image_turbo_bf16、qwen_image_2.1_* |
| CLIP | 文本编码器,把提示词变成向量 | qwen3vl_8b_*、qwen_3_4b |
| VAE | 潜空间 ↔ 像素空间的编解码器 | ae.safetensors、qwen_image_2.1_vae_bf16 |
| LATENT | 压缩后的”潜空间图像”,尺寸约为像素的 1/8 | 采样器之间传递的就是它 |
生成流程的本质:空潜空间 → 采样器反复去噪 → VAE 解码成像素图
一个常见误解:节点不是按位置执行的,而是按连线依赖执行的。你把它摆在画布任何角落都不影响结果。
为什么现在不用 CheckpointLoader
老式单文件模型(.ckpt / .safetensors 里同时打包 UNet+CLIP+VAE)用 Load Checkpoint 一次加载。
但你现在用的 Z-Image 和 Qwen-Image 都是分离式的——模型被拆成三个文件分发:
UNETLoader → 加载 diffusion model → 输出 MODEL
CLIPLoader → 加载 text encoder → 输出 CLIP
VAELoader → 加载 VAE → 输出 VAE
所以你的工作流里看到三个独立加载器,这是正常且必须的。
2. 数据流与节点图规则
接口类型必须匹配
每个节点的输入输出都带类型标签。只有同类型才能连线:
MODEL → MODEL ✅
IMAGE → MASK ❌ 连不上(需要 ImageToMask 转换)
你的环境里出现过的类型:MODEL CLIP VAE CONDITIONING LATENT IMAGE MASK CONTROL_NET。
节点颜色含义
| 外观 | 含义 |
|---|---|
红框 + UNKNOWN | 节点所属插件未安装 |
| 红色输出点 | 该输出的下游有错误 |
| 节点整体变红 | 执行失败 |
常用操作
| 操作 | 方法 |
|---|---|
| 添加节点 | 空白处双击 / 右键 → Add Node |
| 搜索节点 | 双击画布,直接输入名字 |
| 绕过节点 | 选中后按 Ctrl+B(保留连线但跳过执行) |
| 删除节点 | 选中按 Delete |
| 整理连线 | 拖动节点,连线自动跟随 |
| 查看节点文档 | 右键节点 → Node Info |
3. 模型加载节点
3.1 UNETLoader — 加载扩散模型
路径:model/loaders | 显示名:Load Diffusion Model
| 输入 | 类型 | 说明 |
|---|---|---|
unet_name | 下拉选择 | 从 models/diffusion_models/ 与 models/unet/ 扫描 |
weight_dtype | 枚举 | default / fp8_e4m3fn / fp8_e4m3fn_fast / fp8_e5m2 |
输出:MODEL
你环境里可选的文件:
qwen_image_2.1_bf16.safetensors 13.25 GB
qwen_image_2.1_int8_convrot.safetensors 6.76 GB
z_image_turbo_bf16.safetensors 11.46 GB
weight_dtype 怎么选(这是 12 GB 显存的关键开关):
| 值 | 用途 |
|---|---|
default | 按文件本身的精度加载。先试这个 |
fp8_e4m3fn | 把权重转成 FP8,显存直接减半,画质损失很小 |
fp8_e4m3fn_fast | 同上,但用更快的 FP8 矩阵乘(需要较新 GPU) |
fp8_e5m2 | 动态范围更大,精度略低 |
对你的建议:
z_image_turbo_bf16是 11.46 GB,而你只有 12 GB 显存。如果加载时报 OOM,把weight_dtype改成fp8_e4m3fn,或改用qwen_image_2.1_int8_convrot(6.76 GB)。
3.2 CLIPLoader — 加载文本编码器
路径:model/loaders | 显示名:Load CLIP
| 输入 | 类型 | 说明 |
|---|---|---|
clip_name | 下拉 | 从 models/text_encoders/ 与 models/clip/ 扫描 |
type | 枚举(29 个选项) | 必须与模型架构匹配 |
device(可选) | default / cpu | 编码器放 GPU 还是 CPU |
输出:CLIP
type 是关键,选错必报错。 你环境里的 29 个可选值中,与本机模型相关的:
| 你的模型 | 应选的 type |
|---|---|
z_image_turbo_bf16 | 用 stable_diffusion 或该模型文档指定值 |
qwen_image_2.1_* | qwen_image |
qwen3vl_8b_* / qwen_3_4b | 配合 Qwen-Image 时选 qwen_image |
完整 29 项:stable_diffusion stable_cascade sd3 stable_audio mochi ltxv pixart cosmos lumina2 wan hidream chroma ace omnigen2 qwen_image hunyuan_image flux2 ovis longcat_image cogvideox lens pixeldit ideogram4 boogu krea2 joyimage mage minimax yue2
device = cpu的用途:文本编码器很占显存(你的qwen3vl_8b_bf16就是 16.33 GB)。把它放 CPU 能腾出大量显存给扩散模型,代价是提示词编码变慢(只算一次,影响不大)。小显存跑大模型时非常有用。
3.3 VAELoader — 加载 VAE
路径:model/loaders | 显示名:Load VAE
| 输入 | 类型 |
|---|---|
vae_name | 下拉选择 |
输出:VAE
你环境里的可选值:
ae.safetensors 0.31 GB ← 配套 Z-Image (Flux VAE)
qwen_image_2.1_vae_bf16.safetensors 0.63 GB ← 配套 Qwen-Image 2.1
pixel_space ← 特殊选项,跳过 VAE
⚠️ VAE 必须与模型配套。 用错 VAE 会出现色彩失真、灰蒙蒙、噪点。Z-Image 用
ae,Qwen-Image 用qwen_image_2.1_vae_bf16。
3.4 CheckpointLoaderSimple — 加载整合包
路径:model/loaders | 显示名:Load Checkpoint
| 输入 | 类型 |
|---|---|
ckpt_name | 下拉(从 models/checkpoints/ 扫描) |
输出:MODEL、CLIP、VAE(三个一起给)
你环境里 checkpoints 目录为空,所以这个节点暂时用不上。仅在拿到 SD1.5/SDXL/Flux 单文件整合包时才用。
4. 提示词与条件节点
4.1 CLIPTextEncode — 文本编码
路径:model/conditioning | 显示名:CLIP Text Encode (Prompt)
| 输入 | 类型 |
|---|---|
text | STRING(多行文本框) |
clip | CLIP |
输出:CONDITIONING
标准用法:接两个,一个写正向提示词、一个写负向。
CLIPLoader ──┬── CLIPTextEncode(正向词) ──→ KSampler.positive
└── CLIPTextEncode(负向词) ──→ KSampler.negative
注意:Qwen-Image / Z-Image 这类自然语言驱动的模型,提示词应该写成完整句子,而不是 SD1.5 时代的 tag, tag, tag 堆叠风格。
4.2 TextEncodeQwenImageEdit — Qwen 图像编辑专用编码
路径:model/conditioning(你的环境已加载)
这是 Qwen-Image 编辑模型专用的条件节点——文生图用 CLIPTextEncode,而”改图”(image-to-image / 局部重绘)要用它。
输出:CONDITIONING
你装了 6 个
Qwen-Image-Edit-2509-*系列 LoRA,正是配合这个节点做定向编辑(换光、换背景、多角度等)。
4.3 TextEncodeZImageOmni — Z-Image 专用编码
路径:model/conditioning
Z-Image 的专用文本编码节点(Omni 表示支持多模态输入)。用 Z-Image 时应优先用它而非通用 CLIPTextEncode。
4.4 ConditioningCombine / ConditioningSetArea
| 节点 | 作用 |
|---|---|
ConditioningCombine | 把两组 CONDITIONING 合并(例如两个提示词共同作用) |
ConditioningSetArea | 限定提示词只作用于画面某个矩形区域 |
5. 采样节点(核心)
5.1 KSampler — 最常用的采样器
路径:model/sampling
| 输入 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | MODEL | — | 扩散模型 |
seed | INT | 0 | 随机种子;固定它可复现同一张图 |
steps | INT | 20 | 采样步数 |
cfg | FLOAT | 8.0 | 提示词引导强度 |
sampler_name | 枚举(46 项) | euler | 采样算法 |
scheduler | 枚举(9 项) | normal | 噪声调度曲线 |
positive | CONDITIONING | — | 正向条件 |
negative | CONDITIONING | — | 负向条件 |
latent_image | LATENT | — | 输入潜空间 |
denoise | FLOAT | 1.0 | 去噪强度 |
输出:LATENT
核心三个参数怎么调
steps(步数)
| 场景 | 建议值 |
|---|---|
| 普通模型 | 20 ~ 30 |
| Turbo / Lightning / 蒸馏模型 | 4 ~ 8(多了反而变差) |
| 追求极致质量 | 40 ~ 50(收益递减明显) |
你的
z_image_turbo、以及那个6step-lora,都是少步数模型——步数设 20 是浪费且会劣化画质。
cfg(引导强度)
| 值 | 效果 |
|---|---|
| 1.0 | 几乎不引导 —— Turbo/LCM 类模型的正确值 |
| 4 ~ 7 | 常用区间,兼顾遵循度与自然度 |
| 8 ~ 12 | 严格遵守提示词,但过高会过曝、色彩失真 |
| > 15 | 基本不可用 |
denoise(去噪强度) —— 图生图/重绘的关键:
| 值 | 效果 |
|---|---|
| 1.0 | 完全重绘(纯文生图) |
| 0.6 ~ 0.8 | 保留大致构图,改变细节 |
| 0.3 ~ 0.5 | 轻度修饰,大幅保留原图 |
| < 0.3 | 几乎不变 |
采样器选择(46 个选项中常用的)
| 采样器 | 特点 |
|---|---|
euler | 通用、快,默认首选 |
euler_ancestral | 加随机性,画面更”活”,但不易复现 |
dpmpp_2m | 质量与速度平衡好,很流行 |
dpmpp_2m_sde | 细节更丰富,稍慢 |
dpmpp_2m_sde_gpu | 同上,GPU 优化版 |
dpmpp_3m_sde | 更高质量,更慢 |
lcm | LCM 加速模型专用 |
ddim | 经典,兼容性最好 |
uni_pc | 少步数下表现不错 |
res_multistep | 新式多步求解器 |
heun / heunpp2 | 二阶方法,步数可少但每步更慢 |
带 _cfg_pp 后缀的(如 euler_cfg_pp、dpmpp_2m_cfg_pp)是”CFG++“变体,可在低 CFG 下改善效果。
调度器选择(全部 9 个)
| 调度器 | 特点 |
|---|---|
simple | 线性均匀,最通用 |
normal | 默认值,类似 simple |
karras | 高质量,末端步长更密 |
sgm_uniform | SD3/Flux 类模型常用 |
exponential | 指数衰减 |
beta | Beta 分布调度 |
ddim_uniform | 配合 ddim 采样器 |
linear_quadratic | 二次曲线 |
kl_optimal | 新式优化调度 |
5.2 KSamplerAdvanced — 高级采样器
比 KSampler 多出 4 个控制项,用于分阶段采样:
| 额外输入 | 说明 |
|---|---|
add_noise | enable/disable —— 是否添加初始噪声 |
noise_seed | 独立于 seed 的噪声种子 |
start_at_step | 从第几步开始 |
end_at_step | 到第几步结束 |
return_with_leftover_noise | 是否带着残余噪声返回 |
典型用途:两阶段高清修复
阶段1: KSamplerAdvanced(add_noise=enable, end_at_step=15,
return_with_leftover_noise=enable)
↓ 潜空间放大
阶段2: KSamplerAdvanced(add_noise=disable, start_at_step=15, end_at_step=30)
这样能在放大后继续采样,而不重新注入噪声。
5.3 SamplerCustomAdvanced — 模块化采样
路径:model/sampling
把 KSampler 拆成 4 个独立节点组合,灵活度最高:
RandomNoise → noise ┐
BasicGuider/CFGGuider → guider ├→ SamplerCustomAdvanced → LATENT
KSamplerSelect → sampler │
BasicScheduler → sigmas ┘
| 子节点 | 作用 |
|---|---|
RandomNoise | 生成噪声,输出 NOISE |
BasicGuider | 无 CFG 引导(cfg=1 场景,Turbo 模型用) |
CFGGuider | 带 CFG 的引导,需要 positive/negative |
KSamplerSelect | 只选采样算法 |
BasicScheduler | 只选调度器 + steps + denoise |
用 Turbo/蒸馏模型时:
BasicGuider+KSamplerSelect的组合比KSampler更省资源,因为它根本不计算负向 → 少跑一遍模型。
6. 潜空间与解码节点
6.1 EmptyLatentImage — 空潜空间
路径:model/latent
| 输入 | 说明 |
|---|---|
width / height | 像素尺寸,节点内部自动除以 8 |
batch_size | 一次生成几张 |
输出:LATENT
尺寸规则:
- 必须是 8 的倍数(否则自动取整,可能报错)
- 常用:
1024×1024、896×1152、1152×896、1216×832 - 显存与面积成正比:1024² 的显存占用是 512² 的 4 倍
你的 12 GB 显存,Z-Image 11.46 GB 模型下,建议从 1024×1024 起步。如果要 2K 出图,走”生成 → 放大”两阶段,而不是直接给大尺寸。
6.2 EmptySD3LatentImage — SD3/Flux 用空潜空间
路径:model/latent
与 EmptyLatentImage 的区别:支持不同通道数的潜空间(SD3/Flux 是 16 通道,SD1.5/SDXL 是 4 通道)。
用 Flux、SD3、以及**你那个
ae.safetensors(Flux VAE)**相关模型时,优先用这个。
6.3 VAEDecode — 潜空间转图像
路径:model/latent
| 输入 | 类型 |
|---|---|
samples | LATENT |
vae | VAE |
输出:IMAGE
它是工作流的终点前一站——采样器输出的是 LATENT,必须解码才能看。
6.4 VAEEncode — 图像转潜空间
| 输入 | 类型 |
|---|---|
pixels | IMAGE |
vae | VAE |
输出:LATENT
用途:图生图(img2img)。把已有图片编码成潜空间,再送采样器加噪重绘。
7. 图像处理节点
7.1 LoadImage — 加载图片
路径:image
| 输入 | 说明 |
|---|---|
image | 从 input 目录选择 |
输出:IMAGE、MASK(第二个输出是图片自带的 alpha 通道遮罩,做局部重绘时很有用)
你的 input 目录里已有的图片(25 张):
01.jpg
108060117_p0_master1200.jpg ~ 96743659_p0_master1200.jpg (多张)
ComfyUI_00030_.png / ComfyUI_00104_.png
hero-poster.jpg
(其余为哈希命名的图片)
7.2 SaveImage / PreviewImage
| 节点 | 作用 | 输出位置 |
|---|---|---|
SaveImage | 保存到磁盘 | G:\Comfy-Desktop\ComfyUI-Shared\output |
PreviewImage | 只在界面预览 | 不落盘 |
SaveImage 的 filename_prefix 决定文件名前缀。你之前在 RMBG 工作流里用的 CropInpaint/%date:yyyy-MM-dd... 就是利用日期变量自动分目录。
7.3 ImageScale — 缩放到指定尺寸
路径:image/upscaling | 显示名:Upscale Image
| 输入 | 可选值 | 说明 |
|---|---|---|
image | — | 输入图 |
upscale_method | nearest-exact bilinear area bicubic lanczos | 插值算法 |
width / height | INT | 目标尺寸 |
crop | disabled / center | 比例不符时是否居中裁剪 |
插值算法怎么选:
| 算法 | 适用 |
|---|---|
lanczos | 放大首选,最锐利 |
bicubic | 放大/缩小都稳,通用 |
bilinear | 快,质量一般 |
area | 缩小首选,抗锯齿好 |
nearest-exact | 像素风、遮罩图(保持硬边缘) |
⚠️ 遮罩(MASK)缩放务必用
nearest-exact,否则边缘会产生半透明灰边,导致重绘区域渗出。
7.4 ImageScaleBy — 按倍数缩放
同样是 5 种插值算法,但输入是 scale_by(浮点倍数,如 2.0)而非绝对尺寸。适合”放大两倍”这种相对操作。
7.5 ImageBatch — 批量拼接(已弃用)
显示名带 (DEPRECATED)。把两张图沿批次维合并。新工作流建议用 ImageStitch(你的环境已加载)替代,后者支持更多拼接方式。
7.6 ImageBlend — 图像混合
| 输入 | 说明 |
|---|---|
image1 / image2 | 两张图 |
blend_factor | 0~1,混合比例 |
blend_mode | 混合模式(正常/正片叠底/滤色等) |
7.7 其他常用图像节点
| 节点 | 作用 |
|---|---|
ImageInvert | 颜色反相 |
ImageCrop | 裁剪指定区域 |
ImageFromBatch | 从批次里取出第 N 张 |
ImageStitch | 拼接多张图(新式) |
ImageCompositeMasked | 按遮罩合成两张图,重绘工作流核心 |
ImageUpscaleWithModel | 用 ESRGAN 等超分模型放大 |
UpscaleModelLoader | 加载超分模型 |
8. 遮罩与局部重绘节点
局部重绘(Inpainting)是你环境里用得最多的一类——你装了 comfyui-inpaint-cropandstitch 和 comfyui-inpaint-nodes 两个插件。
8.1 基础遮罩节点
| 节点 | 作用 |
|---|---|
SolidMask | 生成纯色遮罩(全白/全黑起点) |
MaskToImage | 遮罩转图像(可视化检查用) |
ImageToMask | 图像通道转遮罩 |
InvertMask | 遮罩反相 |
CropMask | 裁剪遮罩 |
GrowMask | 膨胀/收缩遮罩(正数外扩,负数内缩) |
FeatherMask | 羽化遮罩边缘,让重绘过渡自然 |
GrowMask+FeatherMask是重绘质量的关键两件套:先外扩几像素(避免边缘残留),再羽化(避免硬拼接缝)。
8.2 SetLatentNoiseMask — 设置潜空间噪声遮罩
| 输入 | 类型 |
|---|---|
samples | LATENT |
mask | MASK |
输出:LATENT
它决定了”只重绘遮罩区域”。把它插在 VAEEncode 和 KSampler 之间:
LoadImage → VAEEncode → SetLatentNoiseMask → KSampler → VAEDecode
↑
(遮罩来源)
配合 KSampler 的 denoise 使用:denoise=1.0 时遮罩外完全不变,遮罩内完全重绘。
8.3 VAEEncodeForInpaint — 重绘专用编码
一步完成 VAEEncode + 遮罩处理,内部会把遮罩区域做特殊处理(填充灰值),专门为重绘优化。
8.4 InpaintModelConditioning — 重绘条件
| 输入 | 类型 |
|---|---|
positive / negative | CONDITIONING |
vae | VAE |
pixels | IMAGE |
mask | MASK |
noise_mask | BOOLEAN |
输出:CONDITIONING ×2、LATENT
用于专门的 inpaint 模型(如 Flux Fill、SDXL Inpaint)。它与 SetLatentNoiseMask 的区别:后者适用于普通模型,前者针对重绘模型优化。
8.5 ImageCompositeMasked — 按遮罩合成
重绘的最后一步:把重绘结果按遮罩贴回原图。
| 输入 | 说明 |
|---|---|
destination | 底图 |
source | 要贴上的图 |
mask | 贴哪些区域 |
x / y | 偏移 |
resize_source | 是否缩放 source |
8.6 你的 inpaint 插件提供的高级节点
comfyui-inpaint-nodes(Acly) —— 13 个节点:
| 节点 | 作用 |
|---|---|
INPAINT_ColorMatch | 把重绘区域的颜色与周围匹配,消除色差(你之前缺的就是它) |
INPAINT_MaskedBlur | 只在遮罩内模糊 |
INPAINT_MaskedFill | 只在遮罩内填充 |
INPAINT_ShrinkMask | 收缩遮罩 |
INPAINT_ExpandMask | 扩张遮罩 |
INPAINT_StabilizeMask | 稳定遮罩边缘 |
INPAINT_MaskBoundingBox | 取遮罩包围盒 |
INPAINT_DenoiseToCompositingMask | 把去噪结果转成合成用遮罩 |
INPAINT_LoadInpaintModel | 加载 LaMa/MAT 等专用重绘模型 |
INPAINT_InpaintWithModel | 用专用模型重绘 |
INPAINT_LoadFooocusInpaint / INPAINT_ApplyFooocusInpaint | Fooocus 重绘模型 |
INPAINT_VAEEncodeInpaintConditioning | 重绘条件编码 |
comfyui-inpaint-cropandstitch —— 提供:
| 节点 | 作用 |
|---|---|
Inpaint Crop | 把遮罩区域裁出来(可放大处理后再贴回) |
Inpaint Stitch | 把处理完的图贴回原位置 |
Inpaint Crop→ 处理 →Inpaint Stitch是提升重绘质量的核心技巧:在小区域上以高分辨率重绘,再贴回大图,避免整图放大带来的显存压力。
9. LoRA 与 ControlNet
9.1 LoraLoader — 加载 LoRA(模型 + CLIP)
路径:model/loaders
| 输入 | 说明 |
|---|---|
model | MODEL(上游模型) |
clip | CLIP |
lora_name | 选择 LoRA 文件 |
strength_model | LoRA 对模型的影响强度(常用 0.8~1.0) |
strength_clip | LoRA 对文本编码器的影响强度 |
输出:MODEL、CLIP(都要重新接给下游)
接线注意:LoRA 是串联的——加载后必须用它的输出,而不是原来的模型输出:
UNETLoader → LoraLoader → (model 输出给 KSampler)
CLIPLoader → LoraLoader → (clip 输出给 CLIPTextEncode)
多个 LoRA 可以串接(LoraLoader → LoraLoader)。
strength_model 调参:
1.0标准强度0.6 ~ 0.8风格轻微渗透1.2 ~ 1.5强化,但容易结构崩坏- 负值 = 反向应用(削弱该风格)
9.2 LoraLoaderModelOnly — 只作用于模型
不需要 clip 输入,只影响 MODEL。更省资源——当 LoRA 只训练了 UNet 部分(大多数风格 LoRA)时用它。
9.3 你环境里的 LoRA 清单
Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-lora-r128.safetensors ← 648 MB,你在用的
Qwen-Image-2.1-viggle-turbo-v0.2.1-6step-lora-r256.safetensors
Qwen-Edit-2509-Multiple-angles.safetensors Qwen-Image-Edit-2509-Anything2RealAlpha.safetensors
Qwen-Image-Edit-2509-Fusion.safetensors
Qwen-Image-Edit-2509-Light-Migration.safetensors
Qwen-Image-Edit-2509-Relight.safetensors
Qwen-Image-Edit-2509-White_to_Scene.safetensors
qwen_miratsu_style_20ep.safetensors
6step-lora是蒸馏加速 LoRA:加载它后,KSampler的steps应设为 6 左右、cfg设为 1.0。用默认的steps=20, cfg=8会又慢又难看。
r128和r256是同一 LoRA 的不同秩(rank),r256 容量更大、体积略大、效果略强。
9.4 ControlNet 相关
| 节点 | 作用 |
|---|---|
ControlNetLoader | 加载 ControlNet 模型 → 输出 CONTROL_NET |
ControlNetApplyAdvanced | 应用 ControlNet 到条件上 |
ControlNetApplyAdvanced 参数:
| 输入 | 类型 | 说明 |
|---|---|---|
positive / negative | CONDITIONING | 原条件 |
control_net | CONTROL_NET | 从 Loader 来 |
image | IMAGE | 控制图(线稿/深度/姿态) |
strength | FLOAT | 控制强度,0.5~1.0 常用 |
start_percent | FLOAT | 从采样进度百分之几开始生效 |
end_percent | FLOAT | 到百分之几停止 |
vae(可选) | VAE | 某些模式需要 |
输出:修改后的 positive 和 negative
start_percent / end_percent 的实用技巧:
0.0 → 0.7:前期强控制构图,后期让模型自由发挥细节0.0 → 1.0:全程严格控制0.3 → 1.0:先让模型自由起草,后期用控制修正结构
10. 放大与高清修复
10.1 两种放大路线
| 路线 | 节点 | 特点 |
|---|---|---|
| 潜空间放大 | LatentUpscale | 快,但会丢失细节、可能产生畸变 |
| 像素空间放大 | ImageUpscaleWithModel + ESRGAN | 慢,质量高 |
10.2 潜空间放大
LatentUpscale 在潜空间直接放大,然后可再接一段采样器补充细节。
| 输入 | 可选值 |
|---|---|
upscale_method | nearest-exact bilinear area bicubic lanczos |
width / height | 目标尺寸 |
crop | disabled / center |
10.3 标准高清修复流程
① 512×512 生成 → ② LatentUpscale 到 1024×1024
→ ③ KSampler(denoise=0.5) 补细节 → ④ VAEDecode
第 ③ 步的 denoise 是关键:
0.4 ~ 0.55:补充细节且不改变构图(推荐)0.7+:相当于重新画一遍,可能跑偏< 0.3:几乎无效果
10.4 超分模型放大
| 节点 | 作用 |
|---|---|
UpscaleModelLoader | 加载 .pth 超分模型(如 4x-UltraSharp) |
ImageUpscaleWithModel | 用加载的模型放大图像 |
你环境里 upscale_models 目录当前为空,需要时把超分模型放进去即可。
11. 工作流实战:从零拼一条文生图链路
以你的 Z-Image Turbo 为例,完整最小链路:
┌─ UNETLoader ────────────────┐
│ unet_name: z_image_turbo_bf16.safetensors
│ weight_dtype: default
└──────────┬──────────────────┘
│ MODEL
├──────────────────────────────┐
│ │
┌─ CLIPLoader ──────────────┐ │
│ clip_name: qwen_3_4b... │ │
│ type: (按模型文档) │ │
└──────────┬────────────────┘ │
│ CLIP │
┌─────┴─────┐ │
↓ ↓ │
┌─ TextEncode ─┐ ┌─ TextEncode ─┐ │
│ 正向提示词 │ │ 负向提示词 │ │
└──────┬───────┘ └──────┬───────┘ │
│ positive │ negative │
└────────┬───────┘ │
↓ ↓
┌────────────────────────────────────┐
│ KSampler │
│ steps: 6~8 (Turbo 模型!) │
│ cfg: 1.0 (Turbo 模型!) │
│ sampler: euler │
│ scheduler: simple │
│ denoise: 1.0 │
└──────────────┬─────────────────────┘
│ LATENT
┌─ EmptyLatentImage ─┐ │
│ width: 1024 │────────┘
│ height: 1024 │
│ batch_size: 1 │
└────────────────────┘
│ LATENT
↓
┌─ VAEDecode ─┐
└──────┬──────┘
│ IMAGE
↓
┌─ SaveImage ─┐
│ filename_prefix: z_image
└─────────────┘
VAE 从哪来? 单独加一个 VAELoader 选 ae.safetensors,接到 VAEDecode 的 vae 输入。
如果想加 LoRA
在 UNETLoader 和 KSampler 之间插入 LoraLoaderModelOnly:
UNETLoader → LoraLoaderModelOnly(lora_name=6step-lora-r128, strength_model=1.0) → KSampler
并相应把 steps 降到 6。
12. 你的环境专属配置
12.1 模型目录(容易踩的坑)
你的 ComfyUI 同时搜索两个地方:
| 目录 | 内容 | 谁放的 |
|---|---|---|
G:\Comfy-Desktop\ComfyUI-Shared\models | Desktop 下载的模型 | Desktop 下载器 |
G:\Comfy-Desktop\ComfyUI-Installs\ComfyUI\ComfyUI\models | 你现在用的大部分模型 | 手动下载 |
放模型时两个地方都可能生效,但要注意 UNETLoader 等下拉菜单里显示的是合并结果。
12.2 你已有的模型资产
| 类别 | 文件 | 大小 |
|---|---|---|
| diffusion_models | z_image_turbo_bf16.safetensors | 11.46 GB |
qwen_image_2.1_bf16.safetensors | 13.25 GB | |
qwen_image_2.1_int8_convrot.safetensors | 6.76 GB | |
| text_encoders | qwen3vl_8b_bf16.safetensors | 16.33 GB |
qwen3vl_8b_int8_convrot.safetensors | 8.71 GB | |
qwen3vl_8b_w4a8.safetensors | 5.88 GB | |
qwen3.5_9b_qwen_image_2.1_pe_t2i.int8_convrot.safetensors | 8.82 GB | |
qwen3.5_9b_qwen_image_2.1_pe_i2i.int8_convrot.safetensors | 8.82 GB | |
qwen_3_4b.safetensors | 7.49 GB | |
| vae | ae.safetensors | 0.31 GB |
qwen_image_2.1_vae_bf16.safetensors | 0.63 GB | |
| loras | 9 个(见 9.3 节) | 共 3.79 GB |
| RMBG | RMBG-2.0/model.safetensors | 843.89 MB |
12.3 已装的自定义节点
| 插件 | 提供的能力 |
|---|---|
ComfyUI-Manager (4.2.2) | 插件管理器 |
comfyui-inpaint-nodes (Acly) | 13 个重绘节点,含 INPAINT_ColorMatch |
comfyui-inpaint-cropandstitch (3.0.17) | 裁剪-重绘-拼接 |
comfyui-rmbg (3.1.0) | 背景去除(RMBG-2.0 / BEN2 / BiRefNet 等) |
rgthree-comfy | 实用工具节点(含 Image Comparator) |
was-ns (3.0.1) | WAS Node Suite 图像工具集 |
12.4 网络加速配置(已配好)
| 项目 | 配置 | 作用 |
|---|---|---|
| pip 镜像 | %APPDATA%\pip\pip.ini → 清华源 | 装依赖不再卡 |
| uv 镜像 | %APPDATA%\uv\uv.toml → 清华源 | Desktop 更新加速 |
| git 镜像 | ~/.gitconfig 中 insteadOf → ghfast.top | GitHub 克隆可用 |
| HF 镜像 | 环境变量 HF_ENDPOINT=https://hf-mirror.com | 插件自动下模型走镜像 |
若插件仍去连
huggingface.co,说明它没读HF_ENDPOINT,此时按插件文档把模型手动下载到它期望的目录(通常models/<类别>/<模型名>/)。
12.5 已知的本地补丁
| 文件 | 补丁内容 |
|---|---|
custom_nodes\comfyui-rmbg\py\AILab_RMBG.py | 输入强制转 RGB,修复 4 通道图导致的 tensor a (4) vs b (3) |
原文件备份在同目录 AILab_RMBG.py.bak-before-rgba-fix。插件更新会覆盖此补丁。
13. 常见报错与排查
13.1 节点显示红色 UNKNOWN
原因:工作流用到的节点,你的环境里没有对应插件。
排查:
- 右侧「工作流概览 → 缺失节点包」查看具体节点名
- 用 ComfyUI-Manager 搜索安装
- 或用 API 反查节点属于哪个包:
方法一(推荐):在 ComfyUI-Manager 界面里直接搜索节点名。
方法二:查本地映射表反查所属包:
$f = "$env:APPDATA\Comfy Desktop\..\..\..\Comfy-Desktop\ComfyUI-Installs\ComfyUI\ComfyUI\user\__manager\cache\1742899825_extension-node-map.json"
# 实际完整路径:
# G:\Comfy-Desktop\ComfyUI-Installs\ComfyUI\ComfyUI\user\__manager\cache\1742899825_extension-node-map.json
$json = Get-Content $f -Raw | ConvertFrom-Json
foreach ($k in $json.PSObject.Properties.Name) {
if ($json.$k[0] -contains 'INPAINT_ColorMatch') { "所属包: $k" }
}
13.2 The size of tensor a (4) must match the size of tensor b (3)
原因:4 通道(RGBA)图像被送进了只接受 3 通道的模型。
已修复(rmbg 插件)。通用排查思路:在出错节点前插入一个 ImageToMask→MaskToImage,或加 ImageScale,强制通道规整;也可以先用 PreviewImage 看上游输出的实际通道。
13.3 连接 huggingface.co 超时(WinError 10060)
原因:插件内置 hf_hub_download 直连 HF,国内不可达。
三种解决:
- 设置镜像:
HF_ENDPOINT=https://hf-mirror.com(已配),重启 ComfyUI - 手动下载:按插件源码里的
files字典,把文件放到models/<cache_dir>/下 - 用 hf-mirror 链接:把
huggingface.co替换为hf-mirror.com
注意:很多插件只检查文件是否存在,齐了就跳过下载(看
check_model_cache函数)。这意味着手动放置文件是可靠的绕过方式。
13.4 CUDA out of memory
按优先级尝试:
| 手段 | 效果 |
|---|---|
UNETLoader.weight_dtype 改 fp8_e4m3fn | 显存减半,最有效 |
换更小的量化模型(如 int8_convrot) | 显著降低 |
CLIPLoader.device 改 cpu | 腾出编码器的显存 |
| 降低分辨率 / batch_size | 线性降低 |
分段采样(KSamplerAdvanced) | 降低峰值 |
13.5 生成结果灰蒙蒙 / 色彩异常
原因:VAE 用错(模型与 VAE 不配套)。
排查:Z-Image → ae.safetensors;Qwen-Image → qwen_image_2.1_vae_bf16.safetensors。
13.6 图生图整体偏灰、有噪点
原因:denoise 设置不当。图生图时 denoise=1.0 相当于忽略输入图;而太低(<0.3)会导致噪声未去干净。
建议:图生图用 0.5 ~ 0.8。
14. 参数速查表
按模型选采样参数
| 模型类型 | steps | cfg | sampler | scheduler |
|---|---|---|---|---|
| Z-Image Turbo | 6 ~ 8 | 1.0 | euler | simple |
| Qwen-Image 2.1 | 20 ~ 30 | 4 ~ 7 | euler / dpmpp_2m | simple |
| Qwen-Image + 6step LoRA | 6 | 1.0 | euler | simple |
| SD1.5 / SDXL | 20 ~ 30 | 7 ~ 8 | dpmpp_2m | karras |
| Flux | 20 ~ 28 | 1.0 | euler | simple |
| LCM / Lightning | 4 ~ 8 | 1 ~ 2 | lcm | sgm_uniform |
常用分辨率(8 的倍数)
| 用途 | 尺寸 | 比例 |
|---|---|---|
| 方图 | 1024×1024 | 1:1 |
| 横版 | 1152×896 | 9:7 |
| 竖版 | 896×1152 | 7:9 |
| 宽屏 | 1344×768 | 7:4 |
| 手机壁纸 | 832×1216 | 2:3 |
denoise 取值对照
| 场景 | 值 |
|---|---|
| 纯文生图 | 1.0 |
| 大幅改造 | 0.7 ~ 0.85 |
| 中等改造 | 0.5 ~ 0.7 |
| 轻度修饰 | 0.3 ~ 0.5 |
| 高清修复补细节 | 0.4 ~ 0.55 |
插值算法(upscale_method)
| 场景 | 算法 |
|---|---|
| 放大 | lanczos |
| 缩小 | area |
| 通用 | bicubic |
| 遮罩 | nearest-exact |
| 像素风 | nearest-exact |
附录:快速自检命令
查看 ComfyUI 当前可见的模型
# 可见的 diffusion models
(curl.exe -sS "http://127.0.0.1:8188/object_info/UNETLoader" | ConvertFrom-Json).UNETLoader.input.required.unet_name[0]
# 可见的 VAE
(curl.exe -sS "http://127.0.0.1:8188/object_info/VAELoader" | ConvertFrom-Json).VAELoader.input.required.vae_name[0]
# 可见的 LoRA
(curl.exe -sS "http://127.0.0.1:8188/object_info/LoraLoader" | ConvertFrom-Json).LoraLoader.input.required.lora_name[0]
确认节点是否可用
# 例:检查 INPAINT_ColorMatch 是否存在
(curl.exe -sS "http://127.0.0.1:8188/object_info" | ConvertFrom-Json).PSObject.Properties.Name -match 'ColorMatch'
⚠️ PowerShell 的
ConvertFrom-Json在完整object_info(1510 个节点)上会因大小写不敏感的重复键(如Background与background)报错。查单个节点(如上面前两条)没问题;要遍历全量请用 Python:
import json, urllib.request
with urllib.request.urlopen('http://127.0.0.1:8188/object_info', timeout=60) as r:
oi = json.load(r)
print(len(oi), '个节点')
print([n for n in oi if 'ColorMatch' in n])
文档基于 ComfyUI v0.37.2 / Desktop v1.1.3 实际环境生成,共覆盖 1510 个节点中的常用核心节点。