简介这份资源面向使用 ComfyUI 进行 AI 绘画的进阶用户聚焦 SDXL 基础模型与 Refiner 精炼模型的两阶段文生图工作流帮助解决单模型出图细节不足、画面质感欠佳的问题。资源包内共 1 个文件为 json 格式的工作流配置文件压缩包体积约 4KB可直接导入 ComfyUI 加载使用省去手动搭建节点的繁琐过程。该工作流将基础采样与精炼采样串联通过 Refiner 对潜空间结果二次处理从而提升图像清晰度与细节表现适合已有 ComfyUI 环境、希望快速体验 SDXL 精炼流程的创作者参考。目前已有 138 人学习下载可作为搭建高质量文生图管线的起点便于在此基础上调整采样步数、切换比例与提示词策略逐步形成自己的出图方案。1. 为什么 SDXL 出图总差一口气Refiner 到底补了什么用 ComfyUI 跑 SDXL 文生图的人十有八九经历过这个场景底模一口气采样完画面构图、光影、色彩都对可放大一看皮肤纹理发糊、发丝边缘发虚、材质细节像蒙了层雾。这不是你的提示词写得不好而是 SDXL 的 base 模型和 refiner 模型分工不同导致的。base 负责在低噪声阶段把整体结构和语义搭出来refiner 负责在高噪声阶段接手专门打磨高频细节。跳过 refiner等于让 base 一个人干两份活细节自然撑不住。这篇要讲的就是在 ComfyUI 里把 SDXL base Refiner 这条链路跑通、跑稳、跑出可复现效果。适合已经装好 ComfyUI、能跑通基础文生图、但出图质量卡在“能用但不够好”这个阶段的从业者。核心问题有三个refiner 在哪个时间点切入、切入时噪声水平怎么对齐、显存不够时怎么取舍。把这三个问题解决SDXL 的出图质量会有肉眼可见的提升。2. SDXL 双模型架构拆解base 和 refiner 各自管什么2.1 从噪声调度看两个模型的分工边界SDXL 的采样过程是一条从纯噪声到清晰图像的轨迹。base 模型在整条轨迹上都能跑但它的训练重点在低噪声区间——也就是从纯噪声到中等噪声这一段它擅长把“这是什么”定下来。refiner 的训练重点在高噪声区间也就是从中等噪声到接近清晰这一段它擅长把“这长什么样”磨出来。具体到参数上base 和 refiner 的切换点通常设在总步数的 0.2 左右。假设总步数 30 步base 跑前 24 步refiner 接手后 6 步。这个比例不是拍脑袋定的Stable Diffusion 官方在 SDXL 论文里给出的推荐值是 0.2社区大量实测也验证了这个区间最稳。低于 0.1refiner 介入太晚细节提升有限高于 0.3refiner 介入太早它还没足够的信息去判断该磨哪里容易把结构磨坏。这里有个容易翻车的点base 和 refiner 的噪声调度必须对齐。ComfyUI 的 KSampler 节点里有个add_noise和start_at_step参数如果 base 跑完直接接 refiner 而不做噪声水平匹配refiner 会以为自己在处理一个完全不同的噪声状态结果就是画面崩坏或者细节全丢。正确做法是用KSampler (Advanced)节点把 base 的end_at_step和 refiner 的start_at_step设成同一个值让两个采样器在同一个噪声水平上交接。2.2 ComfyUI 里搭出 base refiner 的最小节点图先给一个能直接抄的最小工作流结构。你需要这些节点CheckpointLoaderSimple加载 SDXL base 模型CheckpointLoaderSimple加载 SDXL refiner 模型CLIPTextEncode正面提示词CLIPTextEncode负面提示词EmptyLatentImage设置出图尺寸KSampler (Advanced)跑 base 采样KSampler (Advanced)跑 refiner 采样VAEDecode解码最终 latentSaveImage保存关键连接逻辑base 的 KSampler 输出 latent 直接连到 refiner 的 KSampler 输入refiner 的 KSampler 输出连到 VAEDecode。两个 KSampler 共用同一组提示词编码但 refiner 那一路的提示词可以稍微调整——比如加一些细节描述词因为 refiner 对细节类提示更敏感。下面是一个可复现的参数配置直接对应到节点里的数值# base KSampler (Advanced) 参数 base_sampler { seed: 42, steps: 30, cfg: 7.0, sampler_name: dpmpp_2m, scheduler: karras, denoise: 1.0, start_at_step: 0, end_at_step: 24, # 总步数的 80% add_noise: enable, return_with_leftover_noise: enable # 关键保留噪声给 refiner } # refiner KSampler (Advanced) 参数 refiner_sampler { seed: 42, # 必须和 base 一致 steps: 30, # 必须和 base 一致 cfg: 7.0, sampler_name: dpmpp_2m, scheduler: karras, denoise: 1.0, start_at_step: 24, # 接上 base 的 end_at_step end_at_step: 10000, # 跑完剩余步数 add_noise: disable, # 关键不再加新噪声 return_with_leftover_noise: disable }逻辑说明base 的return_with_leftover_noise必须设为enable这样它跑完 24 步后不会把 latent 完全去噪而是保留当前噪声水平交给 refiner。refiner 的add_noise必须设为disable因为它接手的是一个已经带噪声的 latent再加噪声就乱了。两个采样器的seed和steps必须一致否则噪声调度对不上。参数说明steps设 30 是 SDXL 的常用值显存够可以拉到 40但超过 40 收益递减明显。cfg7.0 是 SDXL 的甜点值低于 5 画面偏灰高于 9 容易过饱和。sampler_name用dpmpp_2m配karras调度器是社区验证过最稳的组合换euler也能跑但细节稍弱。2.3 显存不够时怎么砍refiner 的取舍策略SDXL base 模型 fp16 大概占 6.5GB 显存refiner 再占 6.5GB加上 latent 和中间激活12GB 显存跑双模型会非常紧张。如果你的卡是 8GB 或 12GB有几个降级方案方案一base 用 fp16refiner 用 fp8。ComfyUI 支持在CheckpointLoaderSimple里指定精度refiner 用 fp8 后显存占用降到 3.5GB 左右画质损失在可接受范围内。方案二refiner 只跑最后 4 步而不是 6 步减少 refiner 的激活显存。方案三如果显存实在不够可以只跑 base然后用Ultimate SD Upscale做后期放大但这不是真正的 refiner 精炼细节提升方式不同。我一般会先看显存余量再决定 refiner 的精度。用nvidia-smi监控如果 base 跑完还剩 4GB 以上refiner 用 fp16 没问题剩 2-3GBrefiner 切 fp8剩不到 2GB要么降分辨率要么放弃 refiner。3. 把 Refiner 接进工作流从节点连线到参数对齐3.1 用 KSampler (Advanced) 做噪声交接的完整步骤很多人第一次接 refiner 会直接用两个普通KSampler节点串起来结果发现画面要么没变化要么直接崩。问题出在普通 KSampler 没有start_at_step和return_with_leftover_noise这两个关键控制项。必须用KSampler (Advanced)它在 ComfyUI 的节点菜单里叫KSampler (Advanced)不是KSampler。完整操作步骤第一步在 ComfyUI 画布上添加两个KSampler (Advanced)节点。右键菜单 →sampling→KSampler (Advanced)。第二步把 base 模型的MODEL输出连到第一个 KSampler 的model输入refiner 模型的MODEL输出连到第二个 KSampler 的model输入。第三步正面和负面提示词的CONDITIONING输出同时连到两个 KSampler 的positive和negative输入。如果想让 refiner 用不同的提示词可以再加一组CLIPTextEncode单独连给 refiner。第四步EmptyLatentImage的LATENT输出连到第一个 KSampler 的latent_image输入。第一个 KSampler 的LATENT输出连到第二个 KSampler 的latent_image输入。第五步按 2.2 里的参数表设置两个 KSampler 的数值。重点检查base 的end_at_step等于 refiner 的start_at_stepbase 的return_with_leftover_noise是enablerefiner 的add_noise是disable。第六步第二个 KSampler 的LATENT输出连到VAEDecode再连SaveImage。跑之前建议先用 512x512 小图测试确认噪声交接没问题再上 1024x1024。小图跑一次大概 15 秒大图要 1-2 分钟先小后大能省不少调试时间。3.2 切换步数比例怎么定0.2 不是唯一答案官方推荐 0.2 的切换比例但实际用下来这个值跟你的提示词复杂度、采样器类型、甚至出图尺寸都有关系。我整理了一个实测对照表基于 30 步总步数、dpmpp_2m karras切换步数切换比例适用场景细节表现结构风险210.3简单主体、大色块细节提升明显偶发结构变形240.2通用场景细节与结构平衡低270.1复杂构图、多主体细节提升有限极低180.4纯纹理、材质特写纹理极强结构容易崩我的习惯是人像和产品图用 0.2风景和建筑用 0.15纯材质特写可以试 0.25 但要做好结构崩了重跑的心里准备。如果发现 refiner 接手后画面变糊大概率是切换太早refiner 还没足够信息如果画面局部出现不合理的纹理堆积是切换太晚base 已经把细节定死了 refiner 改不动。3.3 提示词要不要分两套base 和 refiner 的编码差异base 和 refiner 共用一套 CLIP 编码器但它们的注意力重点不同。base 对主体、动作、场景类提示更敏感refiner 对材质、光照、纹理类提示更敏感。所以一个实用技巧是base 的提示词写清楚“画什么”refiner 的提示词补上“什么质感”。比如画一个陶瓷杯子# base 提示词 a ceramic coffee cup on a wooden table, soft daylight, minimalist composition # refiner 提示词在 base 基础上追加 a ceramic coffee cup on a wooden table, soft daylight, minimalist composition, glossy ceramic surface, subtle reflections, fine grain texture on woodrefiner 那一路多加的glossy ceramic surface、subtle reflections、fine grain texture就是专门喂给 refiner 的高频细节描述。实测下来这样分开写比两路用同一套提示词细节丰富度能提升一档。但注意不要给 refiner 加太多主体描述词否则它会试图重新理解画面内容反而干扰 base 已经定好的结构。4. 避坑与排查Refiner 工作流里最容易翻车的五个地方4.1 画面全黑或全灰噪声交接没对齐现象base 跑完接 refiner出图要么全黑要么一片灰雾完全看不出内容。原因base 的return_with_leftover_noise没开或者 refiner 的add_noise没关。base 如果完全去噪了交给 refiner 的是一个干净 latentrefiner 按自己的噪声调度去处理等于在干净图上加噪声再采样结果就是崩。反过来 refiner 如果开了add_noise它会在 base 的噪声 latent 上再加一层噪声噪声水平翻倍采样直接失控。解决检查两个开关。base 的return_with_leftover_noise必须是enablerefiner 的add_noise必须是disable。这两个是硬性条件没有例外。4.2 细节没提升反而更糊切换步数设错了现象接了 refiner 之后画面比只用 base 还糊细节像被抹平了。原因切换步数太早比如总步数 30 步base 只跑了 15 步就交给 refiner。refiner 接手时噪声水平还很高它没有足够的信息去判断该磨哪里只能按自己的先验去猜结果就是把 base 好不容易搭出来的结构又糊回去了。解决把切换步数往后调从 0.2 比例开始试。如果 0.2 还糊降到 0.15。同时检查 base 的end_at_step和 refiner 的start_at_step是否一致不一致的话噪声水平对不上也会糊。4.3 显存爆了refiner 加载时机不对现象跑 base 的时候显存正常一接 refiner 就 OOM。原因ComfyUI 默认会把两个模型都加载到显存里。base 跑的时候 refiner 已经在显存里占着位置两个模型加起来超过显存上限。解决在 ComfyUI 设置里开启--lowvram或--medvram启动参数让 ComfyUI 按需加载模型。或者用CheckpointLoaderSimple的model输出接一个ModelSamplingDiscrete节点做精度转换把 refiner 转成 fp8。如果还不行考虑用--reserve-vram参数预留一部分显存给系统避免爆显存导致进程被杀。4.4 出图尺寸变了latent 被 refiner 重采样现象base 出图是 1024x1024接了 refiner 之后变成 512x512 或者比例不对。原因refiner 的 KSampler 如果denoise设成了小于 1.0 的值它会按自己的方式重采样 latent可能导致尺寸变化。或者EmptyLatentImage的尺寸没同步给 refiner 那一路。解决refiner 的denoise保持 1.0不要动。EmptyLatentImage只连给 base 的 KSamplerrefiner 的 latent 输入来自 base 的输出不需要再连EmptyLatentImage。如果尺寸还是不对检查VAEDecode是不是接在了 base 的输出上而不是 refiner 的输出上。4.5 换了采样器就崩调度器不匹配现象base 用 dpmpp_2m karras 正常换成 euler normal 之后接 refiner 就崩。原因不同采样器和调度器的噪声调度曲线不同。base 和 refiner 必须用同一套采样器和调度器否则两个模型的噪声水平定义不一致交接时对不上。解决base 和 refiner 的sampler_name和scheduler必须完全一致。如果非要换两个一起换不要只换一个。实测 dpmpp_2m karras 是最稳的组合euler normal 也能跑但细节稍弱dpmpp_sde karras 细节更强但显存占用更高。5. 进阶用 Refiner 做局部精炼和批量出图的技巧5.1 只精炼人脸区域用遮罩控制 refiner 的作用范围refiner 全图跑一遍显存和时间成本都不低如果只是人脸细节不够可以只让 refiner 处理人脸区域。做法是在 base 跑完之后用MaskFromSegmentation或者手动画一个遮罩把 latent 的人脸区域抠出来只对这块区域跑 refiner 的 KSampler然后再合并回去。具体节点组合base 输出 latent →LatentCompositeMasked配合遮罩 → refiner KSampler 只处理遮罩区域 → 再LatentCompositeMasked合并回原 latent。这样 refiner 的步数可以设得更少比如只跑 4 步因为作用范围小收敛更快。我一般会在人像工作流里加这个分支显存占用比全图 refiner 低 40% 左右出图速度提升明显。遮罩不用画得很精确比人脸大一圈就行refiner 会自动在边缘做过渡。5.2 批量出图时怎么固定 refiner 的效果批量跑图最怕的是每张图 refiner 的效果不一致。要固定效果关键是固定三个东西seed、切换步数、refiner 的提示词。seed 固定后 base 的初始噪声就固定了切换步数固定后交接点固定refiner 提示词固定后细节方向固定。如果要做 seed 遍历比如同一个提示词跑 10 个不同 seed建议把 refiner 的切换步数稍微调低到 0.15因为不同 seed 下 base 的收敛速度略有差异切换晚一点能让 refiner 更稳定地接手。另外批量跑的时候把SaveImage的filename_prefix设成带 seed 的格式方便回溯哪张图对应哪个 seed。5.3 验证 refiner 是否真的生效一个简单的对比方法跑完一张图怎么确认 refiner 真的起作用了而不是白跑最直接的方法是对比 latent 的数值变化。在 refiner KSampler 后面接一个LatentToRGB或者直接看VAEDecode前后的像素差异。更简单的方法把 refiner 的end_at_step设成和start_at_step一样等于 refiner 不跑出一张图再把 refiner 正常跑出另一张图。两张图放一起对比如果细节有肉眼可见的提升说明 refiner 生效了如果完全一样检查 refiner 的模型是不是加载错了或者add_noise和return_with_leftover_noise的设置是不是反了。我自己的习惯是每次调完 refiner 参数先跑一张 512x512 的对比图确认细节有变化再上大图。这个习惯帮我省了很多次白跑大图的时间。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
Meta Muse 数字人全栈方案深度拆解:AI生成、实时驱动与内容工作流实战 最近圈子里热度最高的,就是 Meta Muse 首次亮相的消息,从发布会现场的反馈到各家社群里的讨论,几乎一边倒的好评。这个项目有意思的地方在于,它没有走传统虚拟偶像“烧钱堆CG”的老路,而是把 AI 生成、实时驱动和内容工… · 2026/9/23 6:44:17
2026年C/C++一级考试改革与备考全攻略 1. 2026年C/C一级考试改革深度解析2026年3月起,电子学会对全国青少年软件编程等级考试(C/C一级)进行了重大改革。作为一名长期从事编程教育的从业者,我认为这次改革将客观题比例提升至60%,编程题缩减为2道,这种调整更符合编程初学… · 2026/9/23 6:44:17
SEO优化培训全攻略:从入门到精通的系统性学习路径 这几年在企业里做网站运营和内部SEO培训,带过不少新人,也见过很多从培训班出来却依然找不到方向的学员。大家最常问的一句话是:SEO优化到底怎么学?有的人一上来就钻研各种偏门技巧,有的人天天盯着排名数据自嗨… · 2026/9/23 6:44:11
swagger-codegen 生成的 C 客户端 Order 模型详解:从 Swagger 定义到源码与实战使用 开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http… · 2026/9/23 7:35:29
2026就业难破局指南:从认知到行动的高转化求职法 2026年,几乎所有社交平台都被“史上最难就业季”刷了屏,我身边也有不少朋友从年初就开始投简历,反馈率却低得让人发慌。网上甚至有人直接甩出一个“失业率狂飙到18.1%”的数字,真假我不去考证,但大家那股子焦虑是真真切… · 2026/9/23 7:35:29
Claude知识工作插件开发指南:从斜杠命令到团队工作流 1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会以为是某个 IDE 的插件市场镜像,或者某个笔记软件的扩展包。实际上,它是 Anthropic 官方围绕 Claude 生态推出的一个… · 2026/9/23 7:35:29
ELISPOT技术:单细胞检测原理与应用指南 1. ELISPOT技术概述:单细胞检测的黄金标准ELISPOT(酶联免疫斑点)技术自1983年由Czerkinsky首次报道以来,已成为免疫学研究领域不可或缺的工具。这项技术的独特之处在于其惊人的灵敏度——能够检测到每百万个细胞中仅有一个活性分泌… · 2026/9/23 7:35:23
智能设备断网能力真相:从唤醒到执行的全链路拆解 1. 这不是“断网自救指南”,而是一次设备能力的真相拆解“小智断网后还能做什么?”——这句话最近在智能硬件圈被反复提起,不是因为有人真把路由器拔了做压力测试,而是越来越多用户发现:当Wi-Fi灯一灭,手里… · 2026/9/23 7:35:23
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29