FLUX.1 Fill 本地 Inpainting/Outpainting 快速上手:黑白 mask 规则与一条命令出图指南
【免费下载链接】fluxOfficial inference repo for FLUX.1 models项目地址: https://gitcode.com/GitHub_Trending/flux49/flux
用 FLUX.1 Fill [dev] 做图像局部重绘(inpainting)或向四周扩展画面(outpainting)时,唯一要牢记的核心规则是:mask 上白色区域才会被模型重新生成,黑色区域原样保留。本文带你从零搭好环境、画对黑白 mask,再用一条命令或交互会话跑出第一张合格结果图,并附上常见报错与验收清单。
先记住最反直觉的一条:白色才是"画给我看"
很多 inpainting 工具用黑色标记"要改的地方",FLUX.1 Fill 恰好相反。打开 src/flux/sampling.py 的prepare_fill函数,底图会被这样处理:
mask = torch.from_numpy(mask).float() / 255.0 ... img_cond = img_cond * (1 - mask)mask 按/255.0归一化后,底图执行img_cond * (1 - mask):
- 白色(255)→
(1 - 1) = 0→ 原图被清零,交给模型按 prompt 生成; - 黑色(0)→
(1 - 0) = 1→ 原图像素原样保留。
口诀:想重绘/扩展的地方涂白,想保留的地方涂黑。
这是仓库自带的示例 mask(对应底图assets/cup.png),纯黑白两色、无灰度过渡。
两条硬约束,跑之前先检查
| 约束 | 说明 | 违反时终端提示 |
|---|---|---|
| 宽高均为 32 的整数倍 | 底图和 mask 各自都要满足 | Image dimensions must be divisible by 32, got {width}x{height} |
| mask 与底图尺寸完全一致 | 像素级对齐 | Mask dimensions must match conditioning image, ... |
交互模式(--loop)会对每次输入做上述校验,不通过就拒绝并提示重新输入,不会静默跑偏。
环境三步走:venv + 自动拉权重
安装与激活
按 README.md 的本地安装步骤,使用 Python 3.10 创建虚拟环境:
cd $HOME/flux python3.10 -m venv .venv source .venv/bin/activate pip install -e ".[all]"权重从哪来
不需要手动下载。启动任一 demo(包括python -m flux fill)时,权重会自动从 HuggingFace 仓库black-forest-labs/FLUX.1-Fill-dev拉到本地checkpoints/目录(见 docs/fill.md)。
如果你已有本地权重,可以用环境变量直接指向,跳过下载:
export FLUX_MODEL=<你的模型权重路径> export FLUX_AE=<你的 autoencoder 路径><你的...路径>是占位符,替换成你机器上的实际文件路径即可。
最小可运行命令:不改参数也能出图
默认示例直接跑
cli_fill.py 中img_cond_path和img_mask_path的默认值就是仓库自带示例,所以这条命令什么都不传也能跑:
python -m flux fill此时默认 prompt 为"a white paper cup",输出写入output/img_0.jpg。
换成你自己的图
python -m flux fill \ --prompt "a ceramic coffee mug on a wooden table" \ --img_cond_path /path/to/your/conditioning.png \ --img_mask_path /path/to/your/mask.png--prompt:描述"白色区域应该长什么样",模型只在 mask 白色区域生成,黑色区域不受 prompt 影响。--img_cond_path/--img_mask_path:底图与 mask,格式支持 jpg/jpeg/png/webp,尺寸要求见上文。
常用参数与默认值速查
以下默认值均取自 cli_fill.py 中main()的函数签名:
| 参数 | 默认值 | 说明 |
|---|---|---|
--prompt | "a white paper cup" | 采样提示词 |
--num_steps | 50 | 采样步数,越多细节越好但越慢 |
--guidance | 30.0 | guidance 蒸馏强度 |
--seed | 不设置则随机 | 固定种子可复现结果 |
--output_dir | output | 输出目录 |
--offload | False | 显存不足时把 T5/CLIP/AE 在 CPU 与 GPU 间搬运 |
--add_sampling_metadata | True | 是否把 prompt 写入图片 Exif |
--track_usage | False | 商用统计(需配合BFL_API_KEY) |
交互模式:反复试 prompt / 种子 / 步数
启动--loop会话
python -m flux fill --loop会话按prompt → 底图路径 → mask 路径的顺序依次提示,输入留空即复用上一次的值,省去重复粘贴。
斜杠命令速查
在 prompt 输入行可以直接敲斜杠命令(完整文案见 cli_fill.py 中的usage):
| 命令 | 作用 |
|---|---|
/s <seed> | 设置下一次采样的随机种子 |
/g <guidance> | 设置 guidance 值 |
/n <steps> | 设置采样步数 |
/h | 显示帮助 |
/q | 退出会话 |
提示:先固定一个
seed,再改--prompt或--num_steps,这样每次对比都是"只改了一个变量",调参更直观。
不想手写 mask?Streamlit demo
streamlit run demo_st_fill.pydemo_st_fill.py 里可以直接在画布上涂抹生成黑白 mask,也内置了 outpainting 快捷方式:拖动"Zoom Out Amount (All Sides)"滑杆(范围 1.0–3.0,步长 0.1)及各边单独的 zoom 滑杆,程序通过add_border_and_mask自动生成带黑边的放大底图,并把新边框区域在 mask 中标为白色。界面提示也写明了语义:Mask (white areas will be generated)。
结果验收:图去哪了、为什么没图
正常产物长什么样
采样结束后终端打印Done in <秒数>s(该耗时是你本机的实际运行结果,不要当作固定性能指标)。随后进入保存逻辑(见 util.py 的save_image):
- 终端打印
Saving output/img_{idx}.jpg,文件写入output/(或你指定的--output_dir); {idx}从 0 开始递增,已有文件时自动取最大编号 +1;- 图片 Exif 中
Make为Black Forest Labs、Model为flux-dev-fill; - 默认还会把 prompt 写入
ImageDescription(可用--add_sampling_metadata False关闭)。
打开output/img_0.jpg核对:mask 白色区域应按 prompt 重新生成,黑色区域保持原图内容。
没看到新文件的两种原因
NSFW 过滤拦截保存前有一道 NSFW 分类器(
Falconsai/nsfw_image_detection,阈值 0.85,见 util.py)。若判定为 NSFW,图片不会写入磁盘,终端只打印:Your generated image may contain NSFW content.如果你跑完只看到这句而
output/里没有新文件,就是这个原因——换一个更中性的 prompt 即可。输出目录写错确认
--output_dir指向的路径有写权限,且没有拼写错误。
许可红线与商用路径
FLUX.1 Fill [dev]权重遵循 FLUX.1-dev Non-Commercial License,仅限非商业用途。- 若需商用,按 README.md 说明,可通过 BFL 获得商业授权,并在 CLI 中开启
--track_usage,运行前设置BFL_API_KEY环境变量以自动统计用量:export BFL_API_KEY="your_api_key_here" python -m flux fill --track_usage ... - 更深入的模型背景可参考 docs/fill.md 与 model_cards/FLUX.1-dev.md。
【免费下载链接】fluxOfficial inference repo for FLUX.1 models项目地址: https://gitcode.com/GitHub_Trending/flux49/flux
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考