未在播放

FLUX.1 Fill 局部重绘部署指南


FLUX.1 Fill + 遮罩 — 局部重绘部署与应用指南

适用场景:换衣物、换背景、修局部、去物体、画面扩展(outpainting) 硬件约束:12GB VRAM / 24GB RAM(WSL2)


目录

  1. 为什么需要 Fill 而非基础 img2img
  2. flux1-dev vs flux1-fill-dev 技术对比
  3. 模型下载与部署
  4. 工作流结构
  5. 遮罩的三种创建方式
  6. 参数调节速查
  7. 实战场景

1. 为什么需要 Fill 而非基础 img2img

基础 img2img 的核心操作是降噪法denoise < 1.0),改变的是整张图:

基础 img2img:全局操作                 Fill + 遮罩:局部操作
┌──────────────────┐                 ┌──────────────────┐
│  ████████████████ │                 │                  │
│  ████████████████ │ 整张图都在变化   │   ▓▓▓▓▓▓▓▓▓▓   │ 只有白色遮罩区变化
│  ████████████████ │ 脸→歪           │                  │ 脸/背景→不变
│  ████████████████ │ 背景→也变了      │                  │
└──────────────────┘                 └──────────────────┘

根本问题:你只是想换一件衣服,但降噪法没有任何机制区分”要改的部分”和”要保留的部分”。结果要么改动不够(denoise 太低),要么整张图面目全非(denoise 太高)。没有中间甜点。

Fill 解决了什么:模型在训练时被教会了一件事——“盯着图中被挖掉的区域,用周围像素的上下文来合理填补”。这个上下文感知能力是基础 img2img 完全不具备的。


2. flux1-dev vs flux1-fill-dev 技术对比

维度flux1-devflux1-fill-dev
输入通道噪声 latent(1 组)噪声 latent + masked latent + mask(3 组)
训练数据完整图 → 加噪 → 去噪恢复完整图 → 随机挖洞 → 去噪填补
核心能力从零创造画面看着周围,填补空缺
提示词遵循作用于全图仅作用于遮罩区域
遮罩感知无(不接收 mask 输入)有(mask 是模型的一个专用输入通道)
局部编辑做不到专为此而生

关键理解:Fill 不是 dev 的”插件”或”升级版”。它是一个独立训练出来的不同模型。把它替换掉 dev 的 UNET 后,整个管线从”自由创作”变为”上下文感知填补”。


3. 模型下载与部署

3.1 模型选型(基于 12GB 显存)

Fill 模型比 dev 略大(多了 mask 处理层),推荐对应量化级别:

量化大小显存质量推荐
Q4_K_M~7.0 GB与当前 dev 持平★★★½保守选择
Q5_K_M~8.0 GB略高 ~0.3 GB★★★★推荐
Q6_K~9.2 GB较紧张★★★★½可能 swap

你当前 dev 用 Q5_K_M 跑得动(~7.7GB),Fill 的 Q5_K_M 约 8.0GB,仅多 ~0.3GB,12GB 显存仍有余量。如果不放心可以先用 Q4_K_M。

3.2 下载地址

Fill 模型的 GGUF 量化版(City96 社区制作):

https://huggingface.co/city96/FLUX.1-Fill-dev-gguf

推荐文件:
  flux1-fill-dev-Q5_K_M.gguf    (~8.0 GB)
  flux1-fill-dev-Q4_K_M.gguf    (~7.0 GB,备选)

也可以从 Black Forest Labs 官方下载 flux1-fill-dev.safetensors(~24GB),然后自行量化,但 GGUF 社区版足以应对。

3.3 放置位置

# 和当前 dev 模型放同一目录
mv flux1-fill-dev-Q5_K_M.gguf \
  /home/doebk/ai/image-generation/ComfyUI/models/unet/

放置后的目录:

ComfyUI/models/unet/
├── flux1-dev-Q5_K_M.gguf          # 文生图用
└── flux1-fill-dev-Q5_K_M.gguf     # Fill 用

3.4 其他依赖

不需要额外下载。 Fill 复用了你现有的:

  • CLIP-L(clip_l.safetensors)
  • T5-XXL(t5xxl_fp8_e4m3fn.safetensors)
  • VAE(ae.safetensors)

唯一变化就是 UNET 节点里选的模型从 flux1-dev 换成 flux1-fill-dev


4. 工作流结构

4.1 核心管线

                            ┌─────────────────────┐
                            │    LoadImage         │
                            │  (你要修改的原图)      │
                            └──────┬──────────────┘

                    ┌──────────────┼──────────────┐
                    ▼              ▼              ▼
            ┌──────────┐   ┌──────────┐   ┌──────────┐
            │ VAEEncode│   │VAEEncode │   │ 遮罩处理  │  ← ComfyUI 内置节点:
            │          │   │          │   │ (白色=改) │    LoadImage → MaskEditor
            └────┬─────┘   └────┬─────┘   └────┬─────┘
                 │              │              │
                 ▼              ▼              ▼
            latent_image   mask_latent      mask
            (原图latent)   (可选备用)      (黑白遮罩)
                 │                             │
                 └──────────┬──────────────────┘

              ┌─────────────────────────┐
              │  KSampler (Fill 去噪)    │ ← 只处理遮罩白色区域
              │  denoise: 0.6~0.9        │
              └────────────┬────────────┘

                   ┌──────────────┐
                   │  VAEDecode   │
                   └──────┬───────┘

                   ┌──────────────┐
                   │  SaveImage   │
                   └──────────────┘

4.2 与你现有工作流的区别

你当前的文生图工作流(flux-gguf-basic.json)结构是:

EmptyLatentImage → RandomNoise → SamplerCustomAdvanced → VAEDecode

Fill 工作流的关键替换:

旧节点新节点原因
EmptyLatentImageVAEEncode(输入图片)从”空 latent”变为”已编码的原图 latent”
RandomNoise保留(不变)噪声仍然要加
无遮罩LoadImage + MaskEditor → VAEEncode(mask)Fill 模型需要遮罩通道
UnetLoaderGGUFUnetLoaderGGUF只换模型名,节点不变
denoise=1.0denoise=0.7~0.9Fill 场景通常用稍低的 denoise

4.3 关键参数

参数Fill 推荐值说明
denoise0.7 - 0.9Fill 的值比基础 img2img 高。太低(<0.5)遮罩区变化不足;太高(1.0)遮罩区与周围光影不一致
CFG2.0 - 3.0与 dev 类似,2.0 是安全起点
steps25 - 30与 dev 一致
samplerdpmpp_2m细节更好
schedulerbeta细节优先

5. 遮罩的三种创建方式

方式 A:手绘遮罩(最灵活,最常用)

在 ComfyUI 中:

  1. 添加 LoadImage 节点,选择原图
  2. 右键点击节点 → “Open in MaskEditor”
  3. 用画笔在原图上涂抹:
    • 白色 = 要修改的区域(会被 Fill 重绘)
    • 黑色 = 保留不变的区域
  4. 保存后自动生成遮罩输出
示例:换衣服
  原图:人物全身照
  遮罩:用画笔涂白上衣区域(包括边缘羽化)

  结果:只有上衣区域被重绘,脸、裤子、背景完全不变

方式 B:抠图生成遮罩(适合换背景 / 全身衣物)

安装 rembg 节点后:

LoadImage → rembg(移除背景) → 人物轮廓遮罩 → 反转 = 背景遮罩


                                           Fill 只改背景

方式 C:语义分割(适合精确选中物体)

需要额外安装 GroundingDINO / SAM 节点(但它们会额外占用显存,12GB 环境不建议常驻)。


6. 参数调节速查

按问题的调试策略

问题原因解决
遮罩区变化不够/没变denoise 太低提高到 0.8-0.9
遮罩区与周围融合不自然denoise 太高降低到 0.65-0.75
遮罩边缘有接缝遮罩边缘太硬在 MaskEditor 中用羽化笔刷(软的边缘)
遮罩区内容不符合提示词CFG 太低提高到 2.5-3.0
遮罩区过于塑料感CFG 太高降低到 2.0,检查提示词
生成的内容光影与周围不一致提示词没描述光照加入 matching lighting, consistent shadows
纹路/材质不自然steps 不够提高到 30

羽化的重要性

遮罩边缘不能是硬边界(0/1 二值)。在 MaskEditor 中:

  • 软画笔(低硬度)
  • 遮罩边缘有 3-5 像素的灰色过渡
  • 这让 Fill 有”过渡区”来平滑地融合新旧内容

7. 实战场景

场景一:换上衣

原图:  人物半身照,穿白色T恤
遮罩:  涂白 T恤区域(边缘羽化)
提示词:"wearing a black leather jacket, realistic fabric texture, 
         matching the same lighting, consistent with the scene"
denoise: 0.8
CFG:     2.5

预期:T恤变成皮夹克,褶皱/光影与周围协调

场景二:换背景

原图:  人物在前景
遮罩:  涂白背景区域,留黑人物
提示词:"a sunlit garden with purple flowers, shallow depth of field,
         natural outdoor lighting, photorealistic"
denoise: 0.9
CFG:     2.0

预期:背景完全替换,人物不受影响

场景三:去除物体

原图:  风景照里有个垃圾桶
遮罩:  涂白垃圾桶 + 周围小范围
提示词:(留空或 "natural continuation of the scene")
denoise: 0.85
CFG:     2.0

预期:垃圾桶被周围的草地/墙面自然填补

补丁法:多次小遮罩 vs 一次大遮罩

一次大遮罩:
  ┌────────────────┐
  │    ████████    │ 一整块涂白 → 一次生成
  │    ████████    │ 风险:大面积内容可能不协调
  └────────────────┘

多次小遮罩(推荐):
  ┌────────────────┐
  │   ▓▓   ▓▓▓    │ 分区域、分批生成
  │   ▓▓   ▓▓▓    │ 每次只改一小块
  └────────────────┘
  更安全、更可控、融合质量更高

补充:Outpainting(画面扩展)

Fill 还能做”往外扩展”——比原图更大的画面:

  1. 新建一个比原图大的空白画布
  2. 把原图贴到中间
  3. 遮罩涂白四周空白区
  4. Fill 自动生成新内容,与中间原图无缝衔接

适合把横图扩展为竖图、加天空、延展背景等。


附录:与你现有环境的关系

你当前的文生图管线:flux1-dev Q5_K_M(~7.7GB)
Fill 管线:          flux1-fill-dev Q5_K_M(~8.0GB)

两者共享:
  ├── CLIP-L (0.2GB)
  ├── T5-XXL (4.6GB)
  └── VAE (0.3GB)

切换方式:
  在 UnetLoaderGGUF 节点里把模型名从
    "flux1-dev-Q5_K_M.gguf"   →  "flux1-fill-dev-Q5_K_M.gguf"
  然后加入 LoadImage + VAEEncode + 遮罩输入即可

不需要:
  ✗ 额外安装 nodes
  ✗ 额外下载 CLIP/VAE
  ✗ 改动系统配置

显存影响:
  净增约 +0.3 GB(Fill 比 dev 略大),12GB 仍够用
2026-07-26T00:00:00.000Z