ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SDXL Refiner 串联实战:ComfyUI 双模型工作流参数与避坑指南

SDXL Refiner 串联实战:ComfyUI 双模型工作流参数与避坑指南 简介这份资源面向使用 ComfyUI 进行 AI 绘画的进阶用户聚焦 SDXL 搭配 Refiner 模型的精炼文生图工作流配置。它解决的是基础文生图在细节、质感与画面完成度上不足的问题适合已掌握 ComfyUI 基本节点操作、希望进一步提升出图质量的中高级创作者。压缩包内共 1 个文件为 json 格式的工作流配置文件整体约 4KB体积轻量导入 ComfyUI 后即可直接加载使用省去手动搭建复杂节点连线的过程。该工作流将 SDXL 基础模型与 Refiner 精炼阶段串联通过两段式采样在保留整体构图的同时强化局部细节是当前主流的高质量出图方案之一。目前已有 138 人学习下载可作为研究 SDXL 精炼流程、对照节点参数与采样设置的实用参考帮助读者快速理解 Refiner 在文生图管线中的接入位置与作用。1. 精炼不是二次放大SDXL 双模型串联到底在补什么很多人第一次在 ComfyUI 里搭 SDXL 文生图出图速度是快了但放大到 1024 以上就开始糊脸、糊手、糊背景纹理于是去搜「SDXL Refiner 怎么用」。这里要先说清一个反直觉结论Refiner 不是超分模型它不负责把 512 拉到 2048它负责的是在潜空间里对 base 模型已经画完的图做一次「低幅度重绘」把高频细节补回来。SDXL 官方把生成拆成 base 和 refiner 两段base 管构图、光影、大色块refiner 管皮肤纹理、毛发、材质边缘。你在 ComfyUI 里看到的KSampler接KSampler (Advanced)再进 VAE Decode本质就是让两个模型各管一段去噪步数。这套流程适合已经能跑通基础文生图、但被细节质量卡住的人也适合想把「一次出图」变成「可控两段式」的从业者。秋叶整合包、ComfyUI Manager 这些热词背后大家真正要的是不重装环境把 refiner 接进现有工作流。2. 把 base 和 refiner 接成一条链节点、步数与切换点2.1 为什么是两段式采样而不是一次跑满SDXL base 模型训练时用的噪声调度和 refiner 不是同一套。base 在 0 到 1 的整个去噪区间里学的是「从纯噪声到可辨认图像」refiner 学的是「从一张已经比较干净的图到更干净的图」。如果你把 refiner 从第一步就接进去它没见过那么脏的输入出来的东西会崩。常见做法是让 base 跑总步数的 70% 到 80%剩下的交给 refiner。这个比例不是玄学是官方示例里验证过的区间base 步数太少构图没定太多refiner 没有发挥空间。在 ComfyUI 里这个「切换点」由KSampler (Advanced)的start_at_step和end_at_step控制。base 的KSampler跑完steps * 0.8步后把 latent 交给 refiner 的KSampler (Advanced)后者从steps * 0.8开始跑到steps。注意这里两个采样器共享同一个steps总数不是各跑各的。2.2 最小可复现工作流从 Checkpoint 到 VAE Decode下面这段不是完整节点图而是把关键节点的参数按顺序列出来你照着在 ComfyUI 里连就能跑。假设你已经装好 ComfyUI模型放在models/checkpoints下。[Load Checkpoint: sd_xl_base_1.0.safetensors] | v [CLIP Text Encode: 正向提示词] -- [KSampler] [CLIP Text Encode: 负向提示词] -- [KSampler] [Empty Latent Image: 1024x1024] -- [KSampler] | v [KSampler: seed固定, steps30, cfg7, samplerdpmpp_2m, schedulerkarras, denoise1.0] | v [Load Checkpoint: sd_xl_refiner_1.0.safetensors] | v [CLIP Text Encode: 同一组提示词] -- [KSampler (Advanced)] [KSampler 输出的 LATENT] -- [KSampler (Advanced)] | v [KSampler (Advanced): add_noisedisable, start_at_step24, end_at_step30, steps30, cfg7, samplerdpmpp_2m, schedulerkarras, denoise1.0] | v [VAE Decode] -- [Save Image]逻辑说明base 的KSampler从第 0 步跑到第 30 步但我们在它后面接的是 refiner 的KSampler (Advanced)并把start_at_step设成 24。这意味着 base 实际只贡献了前 24 步的去噪结果refiner 从第 24 步接手跑到第 30 步。add_noise必须设成disable因为 latent 已经是 base 去噪过的不能再加噪声。denoise保持 1.0因为步数区间已经由start_at_step和end_at_step限定了。参数说明steps30是总步数base 和 refiner 共享。start_at_step24对应 80% 切换点如果你想要更多 refiner 参与可以降到 2170%。cfg7是 SDXL 的常用值refiner 阶段可以略降到 6减少过曝。sampler和scheduler两段保持一致避免调度器不匹配导致画面发灰。2.3 提示词要不要分两套官方示例里 base 和 refiner 用的是同一组提示词但实际用下来refiner 阶段对提示词的敏感度低很多。我一般会保持正向提示词完全一致负向提示词在 refiner 阶段可以精简只留最核心的几条比如blurry, low quality, deformed。原因是 refiner 只跑 6 到 9 步它没有足够步数去响应复杂的负向约束写太多反而容易让画面变平。如果你用的是秋叶整合包里面通常已经预置了 SDXL base 和 refiner 的模型路径你只需要在Load Checkpoint节点里分别选中两个模型文件。注意不要选成同一个否则就是自己接自己refiner 阶段等于白跑。3. 参数怎么调步数、CFG、切换点与显存预留3.1 步数分配30 步是起点不是标准答案SDXL base 在 30 步左右已经能出可用的图refiner 再补 6 到 9 步总步数落在 30 到 40 之间。如果你把总步数拉到 50base 跑 40 步、refiner 跑 10 步边际收益很低但显存和时间都上去了。反过来总步数 20、base 跑 16、refiner 跑 4refiner 几乎来不及做任何事细节提升肉眼难辨。我自己的习惯是草稿阶段总步数 20base 16、refiner 4快速看构图定稿阶段总步数 32base 25、refiner 7。切换点用start_at_step控制base 的KSampler不需要设end_at_step因为它的输出直接进 refiner实际有效步数由 refiner 的start_at_step决定。3.2 CFG 在两段里的差异base 阶段 CFG 7 到 8 是安全区refiner 阶段建议降到 5 到 6。原因在于 refiner 的输入已经是低噪声 latent高 CFG 会放大分类器自由引导的副作用表现为边缘出现光晕、肤色偏红。如果你发现 refiner 跑完后画面比 base 阶段更「脏」先检查 CFG 是不是没降。3.3 显存预留--reserve-vram到底在做什么热词里有人问comfyui --reserve-vram 含义。这个启动参数的作用是让 ComfyUI 在加载模型时预留一部分显存不占用给系统和其他进程留余地。SDXL base 加 refiner 两个模型同时驻留显存8G 卡很容易爆。常见做法是启动时加--reserve-vram 1.0表示预留 1GB。但注意这个参数不是万能药它只是减少爆显存的概率真正吃显存的是两个模型同时加载。如果你显存紧张可以在 base 跑完后用Unload Model节点把 base 卸掉再加载 refiner代价是切换时间变长。# Windows 便携版启动示例在 run_nvidia_gpu.bat 里改 python main.py --reserve-vram 1.0 --disable-smart-memory--disable-smart-memory是另一个常用参数它让 ComfyUI 不缓存已卸载的模型进一步省显存但会拖慢连续生成的速度。这两个参数怎么选取决于你是「一次出很多张」还是「出一张调半天」。3.4 采样器和调度器的搭配SDXL 官方推荐dpmpp_2m配karras这个组合在 base 和 refiner 阶段都稳。如果你换成euler_abase 阶段可能没问题但 refiner 阶段容易在低步数下产生噪点。ddim在 refiner 阶段表现偏软细节补不回来。所以我的建议是两段用同一套采样器和调度器不要分开调除非你有明确理由。4. 避坑与排查refiner 接上后画面反而变差的 5 个原因4.1 现象refiner 跑完画面发灰、对比度下降原因add_noise设成了enablerefiner 在已经去噪的 latent 上又加了噪声相当于把 base 的成果破坏了一部分。解决把KSampler (Advanced)的add_noise改成disable这是最常见的翻车点。4.2 现象人物脸部出现重影或五官错位原因start_at_step设得太小refiner 接手太早它没有足够的上下文去理解 base 的构图于是按自己的理解重画了一部分。解决把start_at_step提高到总步数的 75% 到 80%让 base 先把构图定死。4.3 现象显存直接爆报 OOM原因base 和 refiner 两个模型同时驻留加上 1024x1024 的 latent 和 VAE8G 卡扛不住。解决启动加--reserve-vram 1.0或者在 base 后插入Unload Model节点把 base 卸掉再加载 refiner。如果还不行把分辨率降到 768x768 先跑通流程。4.4 现象refiner 阶段提示词完全不起作用原因refiner 只跑 6 到 9 步CLIP 文本编码的影响被稀释。解决不要指望 refiner 阶段改提示词能换风格它只补细节。要改内容回 base 阶段改。4.5 现象换用秋叶整合包后找不到 refiner 模型原因部分整合包默认只带 base 模型refiner 需要单独下载放到models/checkpoints。解决确认Load Checkpoint节点里能选到 refiner 文件文件名通常带refiner字样。如果没有去模型站搜sd_xl_refiner_1.0放到对应目录后刷新节点列表。5. 进阶用 ControlNet 和分块重绘把 refiner 的价值榨干5.1 在 refiner 阶段接 ControlNet 做局部约束base 阶段用 ControlNet 控制构图refiner 阶段其实也可以接一个轻量 ControlNet比如tile或lineart让 refiner 在补细节时不跑偏。做法是在 refiner 的KSampler (Advanced)前插入ControlNet Apply (Advanced)把 base 输出的图像作为控制图权重设 0.3 到 0.5。这样 refiner 补纹理时会贴着 base 的结构走不会把背景纹理补成另一张图。5.2 分块重绘只让 refiner 处理脸部区域如果你只关心脸部细节可以用Mask把脸部框出来refiner 阶段只对 mask 区域做去噪。ComfyUI 里用VAE Encode (for Inpainting)配合Set Latent Noise Mask把 mask 外的 latent 锁住refiner 只改 mask 内。这样显存占用更低refiner 的步数可以给到 10 到 12 步脸部细节提升更明显。5.3 验证 refiner 是否真的生效一个简单的验证方法固定 seed跑两次一次接 refiner一次不接把两张图叠在一起做差值。如果 refiner 生效差值图会在高频区域毛发、布料纹理、边缘出现明显差异而在大色块区域差异很小。如果差值图全图均匀变化说明 refiner 的start_at_step设得太小它在重画整张图而不是补细节。验证项正常表现异常表现差值图高频区域差异明显无差异差值图大色块区域差异微弱差异明显显存占用base 卸载后 refiner 加载两模型同时驻留出图时间比单模型多 20% 到 40%翻倍5.4 我自己的习惯我现在搭 SDXL 工作流第一件事不是调提示词而是先把 base 和 refiner 的切换点固定在一个可复现的值上比如总步数 32、start_at_step25。然后只动提示词和 seed把构图跑满意了再回头微调 refiner 的 CFG 和步数。这样每次出问题我能快速判断是 base 的锅还是 refiner 的锅。血泪经验是不要同时改切换点和提示词否则你永远不知道是哪个参数让画面变好的。希望帮到你。本文还有配套的精品资源点击获取
返回列表