简介一套适用于ComfyUI的SDXLRefiner精炼文生图JSON工作流方案面向AI绘画开发者和进阶玩家解决在本地或局域网环境中快速搭建从基础文生图到细节精炼完整链路的问题也适合刚接触ComfyUI的创作者参考节点设计思路。资源包仅1个文件为json格式工作流配置整体压缩包大小4KB内含节点连线、模型加载路径与核心采样参数导入ComfyUI后即可查看完整结构便于理解SDXL基础模型与Refiner精炼模型如何分工协作同时文件体量较小方便快速导入测试与二次编辑。目前已有139人学习下载对于希望系统掌握ComfyUI节点化操作、减少手动搭建排错时间的用户有一定参考价值。通过这份配置可上手体验文生图后精炼的两阶段工作流设计例如在基础生成后加入Refiner阶段提升细节与质感并基于自身需求调整采样步数、引导系数等参数逐步形成个人常用模板也可作为后续项目中的功能模块直接复用。1. ComfyUI 的 SDXLRefiner 工作流到底在解决什么问题ComfyUI 里把 SDXL 的 base 与 refiner 模型接成两段采样是文生图从“构图正确”走向“细节经得起放大”最省事的一条路。单跑 base 模型1024 分辨率下构图、光影、透视都说得过去但放大看头发丝、皮肤毛孔、金属高光时会明显发肉多堆步数并不能把细节堆出来反而会把画面磨得更糊。Refiner 模型在后半程用低 denoise 接手专门补高频纹理这是官方推荐的用法但很多教程只贴图不拆参数导致不少人以为它是滤镜。这份资源给的就是一套已经接好的 ComfyUI 工作流你导入 json、把模型路径指对就能跑出 base 构图加 refiner 精炼的两段式效果。适合做写实人像、产品渲染图、需要文字边缘干净的设计从业者也适合刚接触 ComfyUI 的新手照着抄作业。2. 两段式扩散是怎么分工的Base 出结构、Refiner 出细节2.1 为什么 Base 和 Refiner 要拆两个模型扩散目标不一样很多人把 SDXL 的 refiner 当成“增强滤镜”以为 denoise 调高一点细节就更多结果越调越糊。我建议先搞清两段式扩散的设计逻辑再动手改参数。扩散模型的去噪过程里高噪声步负责把随机噪声收敛成全局结构低噪声步负责在已有结构上雕纹理。Base 模型在完整噪声区间上训练靠它出图构图稳、语义跟得准但在低噪声区间学得不够专精Refiner 模型只在低噪声区间上训练单独处理“还剩一点点噪声”的场景所以它在纹理密度、皮肤质感和边缘锐度上比 Base 更擅长。把这两个模型串起来就是让 Base 先干重活把画面大致定下来再让 Refiner 在最后几步接手把细节磨实。在 ComfyUI 里这套逻辑落到节点上不是“中途换模型”而是两个 KSampler 共用同一个 latent 空间。第一个 KSampler 绑定 Base 模型的 model 输出执行总去噪进度的前 70% 到 80%第二个 KSampler 绑定 Refiner 模型的 model 输出从第一个采样器留下的 latent 继续执行剩下 20% 到 30% 的去噪。latent 从始至终只有一条线第二个采样器不是重新生成而是接着修。所以关键就一句话精炼强度不靠额外加采样器而是靠第二个 KSampler 的 denoise 参数控制。denoise 不是“加了多少细节”是“剩余噪声里 Refiner 处理多少”。这个理解到位后面调参数才不会瞎试。2.2 ComfyUI 最小两阶段管线加载、编码、采样、解码先搭一条最精简的管线c0064 工作流再复杂也是在这条基础上长出来的。我习惯从三个部分去看模型加载、文本编码与空 latent、两段采样。第一步是加载两个 checkpoint。工作流片段如下{ 3: { inputs: { ckpt_name: sd_xl_base_1.0.safetensors }, class_type: CheckpointLoaderSimple }, 4: { inputs: { ckpt_name: sd_xl_refiner_1.0.safetensors }, class_type: CheckpointLoaderSimple } }这里 3 号节点加载 Base 模型4 号节点加载 Refiner 模型。注意 ckpt_name 要和你本机 models/checkpoints 目录里的文件名完全一致大小写也要对。节点 3 输出 model 和 clip 两个接口model 给第一个 KSamplerclip 给文本编码节点 4 只需要 model 输出给第二个 KSamplerclip 可以不管。第二步接文本编码和空的 latent{ 5: { inputs: { text: photorealistic portrait, soft window light, clip: [3, 1] }, class_type: CLIPTextEncode }, 6: { inputs: { text: blurry, low quality, oversmooth, clip: [3, 1] }, class_type: CLIPTextEncode }, 9: { inputs: { width: 1024, height: 1024, batch_size: 1 }, class_type: EmptyLatentImage } }正向提示词和负向提示词都用 Base 模型的 clip 编码不要用 Refiner 的因为两个模型的 CLIP 文本空间并不完全一致混用容易让第二阶段对语义的理解漂移。EmptyLatentImage 的宽高就是最终出图尺寸SDXL 原生建议 1024 附近不要按 SD1.5 的图习惯开到 512那样效果会明显偏弱甚至出现重复构图。第三步接两个 KSampler这一段是整条管线的核心{ 10: { inputs: { model: [3, 0], positive: [5, 0], negative: [6, 0], latent_image: [9, 0], seed: 42, steps: 30, cfg: 6.5, sampler_name: dpmpp_2m, scheduler: karras, denoise: 0.75 }, class_type: KSampler }, 11: { inputs: { model: [4, 0], positive: [5, 0], negative: [6, 0], latent_image: [10, 0], seed: 42, steps: 30, cfg: 5.5, sampler_name: dpmpp_2m, scheduler: karras, denoise: 0.25 }, class_type: KSampler } }逻辑上10 号节点先把空 latent 从纯噪声状态去噪到 75% 完成输出一个“半成品”latent11 号节点吃的是 10 号节点的 latent_image 输出而不是 9 号节点的空 latent所以它是在同一张图的同一进度上做收尾。这是两段式和“跑两遍完整采样”最本质的区别。参数怎么理解steps 是整条流程的总步数两个采样器都填 30表示第二阶段实际跑 30 乘 denoise 0.25 约 7 到 8 步。seed 两段保持一致避免 latent 空间跳变。cfg 在第二阶段我习惯从 6.5 降到 5.5原因后面第三章细讲。sampler 和 scheduler 两段保持一致阶段切换才不会有断层感。最后把 11 号节点的采样结果接到 VAE Decode再接到 SaveImage 就能出图。VAE 输出接 SaveImage 的 images 接口这一段没有特殊参数跑通预览就完成了。2.3 denoise 在两段之间怎么分0.75/0.25 与 0.8/0.2 的取舍denoise 分配是两段式出图最值得反复试的参数。我常用的三组分配如下方案Base 段 denoiseRefiner 段 denoise适用场景保守精炼0.80.2插画、场景原画只需要轻微收边标准精炼0.750.25写实人像、产品图质感提升最明显强精炼0.70.3皮肤纹理、布料细节原图偏肉时用这三组的核心思路是第二段 denoise 控制在 0.2 到 0.3 之间。低于 0.2Refiner 能改的步数太少基本等于没精炼高于 0.3Refiner 会开始重新组织局部结构出现俗称的“二次油画感”。我一般先按 0.25 出图放大看发丝和金属高光是否还糊糊就降到 0.2如果觉得细节太吵、边缘有白边就升回 0.3。这个判断要在 100% 放缩级别下做预览窗口里看不清差别。另外提醒一句denoise 分配后不要顺手把总步数砍到 20 以内。第二段步数太少时Refiner 学到的纹理特征根本来不及落到 latent 上精炼会失效。低步数用两段式没有意义不如单跑 Base 加高步数。batch_size 也保持 1两段式本身占显存出图再开多张很容易在第二步爆掉。3. Refiner 精炼不是二连出图三个关键参数与切换时机3.1 sampler 与 scheduler 对精炼段的直接影响采样器和调度器在单段出图时差别可能只在细节风格上但放到两段式里它们是阶段衔接是否自然的关键。如果两个 KSampler 用不同采样器第二段等于换了一套噪声轨迹最直接的表现是画面中段出现噪点残留或者纹理突然变砂。我推荐两段统一用 dpmpp_2m 加 karras。dpmpp_2m 在低步数下有比较好的收敛性配合 karras 调度曲线精炼段的噪声步主要落在中高频区间正好是 Refiner 擅长处理的区域。euler 也可以但 euler 的低噪声步分配比较平均会让精炼显得钝。如果你用的是 uni_pc注意它和 karras 的搭配在某些模型上会出偏色两段式里尤其明显。实际调节时先动 scheduler再动 sampler。把两段的 scheduler 从 karras 换成 normal你可能会发现第二段跑出来的画面细腻度下降但这不是 Refiner 模型的锅是噪声曲线变了。排查这类问题记住一个原则两段式管线里所有会改变噪声轨迹的参数两段必须保持一致除非你有明确目的要打破一致。参数优先级可以这样排denoise 决定精炼强度sampler 决定精炼手感scheduler 决定精炼轨迹。先定 denoise再锁 sampler最后微调 scheduler。三个参数里 scheduler 经常被忽略但颜色漂移这类玄学问题十次里有三次是它引起的。3.2 CFG 在精炼阶段要不要降从 7 到 5 的实测CFG 是我在两段式里踩过最多坑的地方。很多人两段都填同一个 CFG结果 Refiner 阶段的细节被过度推向提示词边缘反而出现白边皮肤反光像涂了层油。原因在于高噪声步阶段 CFG 把语义往提示词方向拉效果是构图更贴题低噪声步阶段 CFG 同样生效但它会把纹理细节推到过尖锐的状态。我自己常用的做法是 Base 段 CFG 6.0 到 7.0Refiner 段降到 5.0 到 5.5。降幅不用太大0.5 到 1.0 就够。CFG 降太多会让第二阶段对提示词的响应变弱细节密度反而掉下去。CFG 不是唯一控制精炼强度的旋钮它管的是“文本引导强度”denoise 管的是“处理多少噪声”两个不能互相替代。很多新手把 CFG 当成“细节旋钮”其实它是“提示词服从度旋钮”方向错了整条参数链都会歪。如果你看到 Refiner 阶段出图主体颜色变了比如肤色整体偏红、金属反光变粉先查 CFG再查 scheduler。颜色漂移大概率是 CFG 过高加第二段步数不足共同造成的单独调哪一个都不彻底。反过来如果你的图边缘干净、细节细腻把 Base 段 CFG 调高到 7 反而更出效果说明你的提示词和底模搭配本身就不需要精炼段降很多。在 c0064 这类现成工作流里我的建议是先用作者预设的参数完整跑一遍不要一上来就改。预设参数通常是某个稳定组合先让它出图再按上面的方向微调至少你能确认管线本身没问题。上来乱改 CFG 和 sampler出问题了都分不清是模型路径错还是参数错。3.3 换 Refiner 模型时提示词和 seed 哪些要固定做对比实验时要养成固定变量的习惯。验证 Refiner 的收益至少固定这几个变量seed、正向提示词、负向提示词、出图尺寸、采样器、调度器、总步数、两段 denoise 分配。只改 Base 或 Refiner 的模型文件其他全部不动。这里面最容易忽略的是负向提示词。Refiner 阶段对负向词的敏感度和 Base 不同有些词在 Base 阶段能压制低质量特征在 Refiner 阶段反而会触发过度修正。建议在两阶段共用同一条负向提示词不要为了让精炼更干净额外加“细节、纹理”这类正向词。第二阶段加正向词会误导 Refiner 把原本不该有的结构画上去等于自己给自己加噪声。seed 固定后latent 起点是一致的两段式里 Refiner 的改动才能在同一个基础上对比。如果你每轮换 seed视觉差异可能更多来自采样随机性而不是 Refiner 模型的真实效果判断就失真了。我见过有人换了个 Refiner 模型觉得效果明显变好结果发现是 seed 换了同一段提示词在另一个随机起点上运气更好。这种情况在写实人像题材里特别多因为人脸的轻微形变会被脑补成“质感提升”。4. 把 c0064 工作流跑起来资源包导入与模型路径修正4.1 解压后的目录长什么样认清 json、模型位与说明文档c0064 资源包解压后核心是一个 ComfyUI 工作流 json 文件。建议先解压到临时目录看清楚结构再动手不要直接双击打开散一地。命令行下可以用 7z 解压Windows 图形界面用 WinRAR 或 7-Zip 都行7z x c0064.rar -o/tmp/c0064 find /tmp/c0064 -maxdepth 2 -type f | sort解压出来通常包括一个 c0064.json 主工作流、可能配套的说明文档和示例出图。说明文档一般会写清楚这套工作流需要哪些模型、有没有用到自定义节点先看它再导入 json能省掉后面一半的报错排查。示例图是拿来对照的导入后按同 seed 跑一张比一下画面结构是否一致。结构一致说明管线没接错结构漂移说明模型或节点版本有差异。不要一上来就把 json 复制到 ComfyUI 的 user/default/workflows 目录先确认模型齐不齐。模型文件一般放在 models/checkpoints 下VAE 在 models/vae 下。c0064 资源本身一般不带模型文件它的定位是工作流模板模型要你自己准备。如果你本地没有任何 SDXL base 或 refiner 模型导入后必然会报红后面 4.3 会讲怎么定位。还有一个容易忽略的点json 文件不要用记事本直接改。工作流 json 结构很大手动编辑一个引号或转义符就会导致整份文件无法导入。如果非要改参数在 ComfyUI 画布上改节点比改文件安全得多。文件只负责导入和导出不负责参数维护。4.2 导入 c0064.json 的两种方式与界面卡顿处理ComfyUI 导入 json 有两条路拖拽和菜单加载。最简单的是把 c0064.json 文件直接拖到浏览器画布空白处页面会自动识别并重建节点。不想拖的话也可以用菜单 Workflow 里的 Open 打开文件选择器。两种方式结果一样选顺手的即可。如果你想把工作流固定下来方便以后反复打开把它放进用户工作流目录更稳mkdir -p ~/ComfyUI/user/default/workflows cp /tmp/c0064/c0064.json ~/ComfyUI/user/default/workflows/导入后第一次拖动几十个节点会有一点卡顿这是浏览器在重新计算节点位置不是文件坏了。处理办法是先把画布右下角的预览小图收起来再把不需要的节点折叠等布局稳了再展开。如果导入后节点位置叠成一团框选后手动排列即可不影响节点连线逻辑。导入完成后先看节点列表。如果列表里出现带感叹号的节点说明工作流引用了自定义节点需要去 ComfyUI Manager 检查缺失项。这一步不要拖缺节点直接删掉重接后续会越搞越乱。自定义节点缺失不是模型路径问题装完对应包重启 ComfyUI 就能解决。c0064 如果声明用到了第三方节点组导入前先装好依赖比报错后再补要省时间。4.3 缺模型报红怎么定位从管线末端往前查导入 c0064.json 后最常见的报错是节点变红弹窗提示找不到模型。ComfyUI 的红节点只代表执行到这一步时输入数据有问题不代表整个工作流作废。定位时我从管线末端往前查先看 SaveImage 的输入再看 VAEDecode 的 samples 来自哪个 KSampler最后看 KSampler 的 model 来自哪个 CheckpointLoader。ls ~/ComfyUI/models/checkpoints/这一步是为了确认你本地实际有哪些模型文件。比如 ls 结果显示只有 base 模型没有 refiner 模型那么第二个 KSampler 的 model 输入就是红点原因一目了然。解决方式是补一个 refiner 模型放进 checkpoints 目录然后在 CheckpointLoaderSimple 节点的下拉框里重新选择正确文件名。下拉框搜不到名字时先检查文件名后缀是 safetensors 还是 ckptComfyUI 两种都认但路径不能放错目录。提示如果第一个 KSampler 正常、第二个 KSampler 输出黑图或全灰图优先怀疑第二个 CheckpointLoader 加载的模型文件损坏或者模型文件实际是与工作流不匹配的精炼模型这种版本在 SDXL 里容易出现解码异常。换个官方命名的文件再试。另一种情况是 json 里写的模型文件名和你本地不一致比如资源作者用的是某个整合包命名。这时不需要重命名你的模型文件直接在加载器下拉框里选一次即可ComfyUI 会记住你的选择。别在文件管理器里复制粘贴改名来“对齐”改完文件名后 ComfyUI 不一定会重新扫描目录反而容易多一堆重复文件。5. 避坑SDXLRefiner 最容易翻车的几个现场5.1 显存不够与分辨率习惯为什么同样的图别人能出你不能现象按教程里的参数跑别人出图正常你这边执行到一半提示 CUDA out of memory或者前端直接无响应。原因两段式管线要同时把 Base 和 Refiner 两个模型载入显存占用比单模型高不少一旦 latent 尺寸偏大就会在第二个 KSampler 阶段撑爆显存。很多人在 SD1.5 时代跑惯了 768 以下的小图换到 SDXL 后不调整分辨率预期自然先撞显存。解决启动 ComfyUI 时加低显存模式python main.py --lowvram --preview-method auto--lowvram 会把部分模型层按需搬到内存代价是每个阶段切换时多几秒加载时间但能避免 OOM。分辨率也不要盲目开 1024 乘 10248G 以下的显卡建议先用 832 乘 1216 或 768 乘 1024 这类接近 SDXL 原生比例但面积更小的尺寸。更关键的一点不要用 SD1.5 时代 512 乘 512 的习惯去套 SDXL分辨率太低时构图会失控这不是显存问题是模型优势发挥不出来。5.2 画面变油画、构图漂移denoise 与 seed 的锅现象Refiner 阶段跑完画面出现明显笔触感像油画滤镜或者只改一个提示词构图就大变。原因第二段 denoise 超过 0.3Refiner 开始重排局部结构seed 没固定两阶段 latent 轨迹不一致。这两个问题经常同时出现因为很多人调大 denoise 后觉得画面变了顺手换 seed 想多试几张结果变量也换了问题被掩盖。解决把第二段 denoise 拉回 0.2 到 0.25同时确认两个 KSampler 的 seed 相同。如果构图还是漂检查第二个 KSampler 的 latent_image 是不是不小心接回了 EmptyLatentImage。接回空 latent 等于第二阶段从纯噪声重新开始Base 的构图直接被覆盖这是接线错位不是参数问题。5.3 精炼像没生效节点接线错误比参数错误更隐蔽现象跑出来的图和单阶段 Base 几乎一样Refiner 好像白加载了。原因最常见的是第二个 KSampler 的 model 输入接的还是第一个 CheckpointLoader而不是 Refiner 的加载器。搭工作流时连线连错很容易因为两个加载器在画布上长得一样导入的 json 如果之前被改过也可能把两个节点编号弄混。解决展开第二个 KSampler看 model 输入的来源节点是几号再对比节点列表里 Base 和 Refiner 的编号。如果来源不对重新拖一条从 Refiner 加载器到第二个 KSampler 的连线然后删掉旧线。判断精炼有没有生效最简单的方法是看输出图的局部纹理密度比如皮肤毛孔在高倍放大下是否比单阶段更清晰而不是凭整体第一印象。5.4 导入 c0064.json 后节点报红版本差异与自定义节点缺失现象拖入 json 后一部分节点显示 missing node class整条链路无法执行。原因工作流用到了你没装的第三方节点包或者 ComfyUI 版本差异导致内置节点类型名对不上。ComfyUI 更新节奏快旧工作流里的节点改名是常态不是资源本身有问题。解决先在 ComfyUI Manager 的缺失节点列表里看需要装什么包装完重启再加载。如果某个节点是新版 ComfyUI 改名或废止的内置节点最快的方法是在官方默认工作流里找同名功能节点替换然后把上下游连线重新接好。不要直接删除红节点来“解决问题”删掉后后面的节点会失去输入数据报错只会换一种形式出现。5.5 出图速度慢到像死机低显存加载不是崩溃现象点下执行按钮后界面长时间停在“正在准备”进度条不动很多人会直接强杀进程。原因低显存模式下两个模型切换加载本来就要几十秒加上 VAEDecode 和预览第一次执行比第二次慢很多。窗口看起来没反应实际日志一直在走。解决先观察左上角状态文字是不是还在滚动只要日志在变就不是死机。配合 --preview-method auto在 KSampler 阶段能实时看到采样过程心里有个底。执行完第一次后第二次再跑同尺寸图会明显快起来因为模型已经在缓存里。别急着关程序多等一轮。强杀进程不会让模型加载变快反而可能留下半截临时文件。6. 进阶搭一条可切换的精炼管线量化验证 Refiner 的收益6.1 用并联分支做成可切换的两套出图方案前面所有调整都是改参数这里提供一个更直观的方法搭一条并联工作流左边是单阶段 Base 出图右边是 Base 加 Refiner 两段出图。两个分支共用同一个 Base 加载器、同一组提示词、同一个 seed一次执行出两张图直接比差异。{ base_only: { KSampler: { model: [load_base, 0], denoise: 1.0, steps: 30 } }, refiner_path: { KSampler_1: { model: [load_base, 0], denoise: 0.75, steps: 30 }, KSampler_2: { model: [load_refiner, 0], denoise: 0.25, steps: 30 } } }结构上左边的 KSampler 从 Base 模型开始直接把 latent 跑到完成状态右边的 KSampler_1 跑到 75% 进度后交给 KSampler_2 收尾。两个分支最终各接一个 VAEDecode 和 SaveImage输出文件名里加上 base_only 和 refined 前缀方便归堆。这张对照图就是判断精炼到底值不值得开的最硬证据。6.2 用固定变量法量化 Refiner 收益把 seed、提示词、steps、CFG、采样器全部固定只对比单阶段和两段式两条输出然后在 100% 放缩级别观察几个固定区域。我习惯看四个位置发丝边缘是否毛刺、皮肤毛孔是否清晰、金属高光是否出现过曝、文字边缘是否干净。如果两段式在这四个区域都更好说明这套 denoise 分配对当前底模是正向的如果细节密了但边缘出现白边往下调 Refiner 段 CFG如果只是局部变吵往下调 denoise。从那以后我每次换底模或者换提示词风格都会用这条并联分支跑一组同一 seed 的对照图再决定 Refiner 段参数保留什么。比起凭感觉反复试一组图就能把收益看清楚。希望帮到你。本文还有配套的精品资源点击获取