
前言
去年我发过一篇《ComfyUI 一键换衣-服装一致性》,当时只记录了"补模型"的过程,模型清单不全、参数没写、效果一致性也没定位清楚。最近在 ComfyUI v0.39.0(2026 年新版)+ RTX 4070 Ti(12G 显存) 上把这个工作流完整重跑了一遍------从零搭环境到出图 120 秒,中间踩到一个新版 ComfyUI 必踩的坑(GroundingDINO 直接崩)。
这篇是彻底重写的 2.0 版:完整模型清单(9 个,含上一版漏掉的)、两阶段工作流拆解、全部采样参数、以及手工修复报错的逐步指引。文中全部效果图都是我本机实测产出,参数可复现。
文中用到的全部模型清单、出处仓库与实测参数,已整理在文末「模型出处汇总」。
一、效果预览
工作流输入一张服装商品图(挂在衣架上的玫瑰印花衬衫),输出模特穿上这件衣服的完整试穿图:
左:输入的商品图;右:模型生成的试穿效果(红发模特 + 同款玫瑰印花衬衫 + 街景)。可以看到印花风格、配色、版型都保持了一致,手指、衣褶没有明显畸形。
服装一致性的关键在两件事:FLUX Fill 的局部重绘能力 + Redux 把商品图的图案信息注入生成过程。下面拆开讲。
二、环境与前置条件
| 项 | 实测环境 |
|---|---|
| 显卡 | RTX 4070 Ti(12G 显存) |
| ComfyUI | v0.39.0 官方便携版(Windows portable) |
| 系统 | Windows |
| 单次运行耗时 | 约 120 秒(两阶段共 55 步采样,约 2 秒/步) |
| 显存占用 | 12G 可跑(模型均为 fp8 量化版) |
自定义节点(ComfyUI Manager 里按名字搜索安装,装完重启):
| 节点包 | 用到的节点 | 来源 |
|---|---|---|
| ComfyUI_Segment_Anything | GroundingDinoModelLoader / SAMModelLoader / GroundingDinoSAMSegment | GitHub 搜 Segment_Anything |
| rgthree-comfy | Fast Groups Bypasser 等分组控制 | rgthree/rgthree-comfy |
| ComfyUI-KJNodes | GetNode / SetNode 飞线 | kijai/ComfyUI-KJNodes |
| ComfyUI-Impact-Pack | ImpactInt 等 | ltdrdata/ComfyUI-Impact-Pack |
| was-node-suite-comfyui | ImageConcanate 图像拼接 | WASasquatch/was-node-suite-comfyui |
| ComfyUI_essentials | ImageConcatMulti 等 | cubiq/ComfyUI_essentials |
| ComfyUI-Custom-Scripts | MaskPreview+ 遮罩预览 | pythongosssss/ComfyUI-Custom-Scripts |
| InpaintEasy / ReduxPromptStyler 等 | 局部重绘与提示词样式 | Manager 搜索安装 |
三、模型准备(9 个,含下载地址)
这一节是 2.0 版最重要的补充。上一版文章漏了 2 个模型、写错了 1 个目录,照着装必然缺件。完整清单如下,目录全部相对 ComfyUI 根目录:
| 模型文件 | 用途 | 放置目录 | 大小 | 官方出处 |
|---|---|---|---|---|
| flux1-dev-fp8.safetensors | 阶段①生图主模型(fp8) | models/diffusion_models | 11.9G | Kijai/flux-fp8 |
| fluxFillFP8_v10.safetensors | 阶段②换装重绘模型(Fill fp8) | models/diffusion_models | 11.9G | Kijai/flux-fp8 |
| t5xxl_fp8_e4m3fn.safetensors | 文本编码器 T5 | models/clip | 4.9G | comfyanonymous/flux_text_encoders |
| clip_l.safetensors | 文本编码器 CLIP-L | models/clip | 246M | comfyanonymous/flux_text_encoders |
| ae.safetensors | VAE | models/vae | 335M | black-forest-labs/FLUX.1-schnell |
| flux1-redux-dev.safetensors | Redux 风格参考 | models/style_models | 129M | black-forest-labs/FLUX.1-Redux-dev |
| sigclip_vision_patch14_384.safetensors | Redux 视觉编码器 | models/clip_vision | 857M | black-forest-labs/FLUX.1-Redux-dev |
| sam_vit_h_4b8939.pth | SAM 分割 | models/sams | 2.56G | Meta 官方发布 |
| GroundingDINO_SwinB.cfg.py + groundingdino_swinb_cogcoor.pth | 服装检测定位 | models/grounding-dino | 938M | IDEA-Research/GroundingDINO |
三点说明:
- HuggingFace 直连慢的读者:在 hf-mirror.com 搜索同名仓库即可国内直下。
- 显存紧张可以把 sam_vit_h 换成 sam_vit_b(375M,效果略降),12G 显存实测 vit_h 无压力。
- 许可证提醒:FLUX.1-dev / Fill / Redux 系列模型遵循 FLUX Dev Non-Commercial 许可,个人学习研究可用,商用需另行授权。
四、工作流拆解:两阶段流水线
整个工作流分两个阶段(对应画布上下两个分组):
阶段①:商品图 → 模特图(flux1-dev-fp8 + Redux)
- LoadImage 载入衬衫商品图;
- sigclip 视觉编码器 + flux1-redux-dev 把商品图的视觉特征注入 conditioning(这一步是"图案一致性"的来源);
- ReduxPromptStyler 组合提示词(模特描述 + 服装描述);
- KSampler:euler / simple / 30 步 / CFG=1 / seed 固定,flux1-dev-fp8 出模特图。
阶段②:定位服装区域 → FLUX Fill 换装重绘(fluxFillFP8_v10)
- GroundingDINO 按文本提示(如 "Tops, T-Shirts")定位模特身上的服装区域,SAM 精确分割出 mask(阈值 0.35);
- 模特图 + 服装 mask + 商品图拼接后送入 FLUX Fill(inpaint 专用模型),VAEEncode → KSampler(euler / simple / 25 步 / CFG=1)→ VAEDecode;
- 输出换装成品图(左商品图 / 右试穿图的对比拼图由 ImageConcanate 生成)。
FLUX 系模型的参数特点:CFG 恒为 1(引导已经 baked 在模型里),scheduler 用 simple,这两点和 SD 系习惯完全不同,照 SD 的经验调 CFG 反而出废图。
五、踩坑实录与手工修复(重点收藏)
坑 1:新版 ComfyUI 运行必崩 ------ GroundingDINO 报 AttributeError
现象:点运行后 7 秒内报错:
AttributeError: 'BertModel' object has no attribute 'get_extended_attention_mask'
File ...custom_nodes\comfyui_segment_anything\local_groundingdino\models\GroundingDINO\bertwarper.py, line 23
原因 :2026 年新版 ComfyUI 便携版自带的 transformers 是 5.x,而 GroundingDINO(ComfyUI_Segment_Anything 内置)依赖的 BertModel.get_extended_attention_mask 在新版 transformers 中已被移除。这不是你的模型没下对,也不是节点没装好,是依赖版本冲突。
手工修复(复制即用):在 ComfyUI 目录打开命令行,把 transformers 降到 4.46.3:
cd /d D:\ComfyUI_windows_portable
python_embeded\python.exe -s -m pip install transformers==4.46.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
(路径按你的实际安装位置调整;-i 是清华镜像,国内更快。)装完重启 ComfyUI(不是刷新页面,是关掉进程重开),再运行即可。
坑 2:差一个隐藏模型 ------ flux1-dev-fp8
工作流画布上有两个UNETLoader:阶段①用 flux1-dev-fp8(生成模特),阶段②才是 fluxFillFP8(换装重绘)。少装 flux1-dev-fp8 会直接卡在阶段①,这是上一版文章完全没提的模型。
坑 3:fluxFillFP8 不是放 checkpoints!
两个 FLUX 模型都走 UNETLoader,放 models/diffusion_models (老教程里写 models/unet 也行,新版目录叫 diffusion_models)。放 checkpoints 目录的话 UNETLoader 下拉框里永远刷不出来。
坑 4:clip_l 别乱替代
上一版我记录过"用 ViT-L-14-TEXT 替代 clip_l"的说法------重跑时核对工作流 JSON,DualCLIPLoader 引用的其实一直是 clip_l.safetensors,ViT-L 替代是当时排查时的误记。老老实实下 clip_l(246M)就好。
坑 5:GroundingDINO 用的是 SwinB,且是"两件套"
下拉框里选 GroundingDINO_SwinB (938MB),对应 models/grounding-dino/ 下两个文件 :GroundingDINO_SwinB.cfg.py(配置)和 groundingdino_swinb_cogcoor.pth(权重),缺一个都加载失败。别下成 swint_ogc------工作流引用的不是它。
坑 6:还有个 SAM 模型
上一版同样没写:SAMModelLoader 需要下载 sam_vit_h_4b8939.pth(2.56G)到 models/sams/。
坑 7:模型放对了但下拉框没有
ComfyUI 对模型目录有缓存,新放文件后刷新页面(F5),还不行就重启进程。前端节点的下拉(比如带 "(segment anything)" 后缀的那些)也要等节点包加载完才刷新。
六、模型出处汇总
6.1 工作流与测试素材
工作流原始版本出自知乎作者的分享(见文末出处),未经原作者授权不再提供二次分发下载;本文实测使用的测试图为自拍商品图。后续如需打包配置,将通过平台资源渠道发布。
6.2 模型官方出处(速查)
- flux1-dev-fp8 / fluxFillFP8_v10:HuggingFace 仓库 Kijai/flux-fp8(hf-mirror.com 同名镜像可国内直下)
- t5xxl_fp8 / clip_l:HuggingFace 仓库 comfyanonymous/flux_text_encoders
- ae.safetensors(VAE):HuggingFace 仓库 black-forest-labs/FLUX.1-schnell
- flux1-redux-dev 与 sigclip_vision_patch14_384:HuggingFace 仓库 black-forest-labs/FLUX.1-Redux-dev
- sam_vit_h_4b8939.pth:Meta 官方发布(文件名即全称,可直接搜索)
- GroundingDINO SwinB 权重与配置:HuggingFace 仓库 IDEA-Research
结语
12G 显存在 2026 年跑 FLUX 换装已经完全够用------前提是全 fp8 模型 + 正确的目录结构 + transformers 降级。服装一致性如果仍不理想,优先检查两点:GroundingDINO 的文本提示是否准确圈住了目标服装、阶段②的 mask 扩边参数是否太小。
你在跑这个工作流时卡在哪一步?评论区贴报错,我逐条回。
工作流原始版本出自知乎作者的分享,本文在其基础上做了新版本适配验证与模型清单补全,感谢原作者。