一条命令跑通 FLUX.1 Fill Inpainting / Outpainting:黑白 mask 规则、交互调参与空输出避坑
【免费下载链接】fluxOfficial inference repo for FLUX.1 models项目地址: https://gitcode.com/GitHub_Trending/flux49/flux
你手里有一张底图,想只重绘其中一块局部(inpainting),或者把画布向四周扩出一圈(outpainting),FLUX.1 Fill [dev] 官方仓库把整条链路都给了:底图加一张黑白 mask,一条命令或交互会话就能出图。这篇按场景、mask 原理、最小出图路径、进阶、排障的顺序讲完。
🎯 它能在你的图上做什么
Fill 系列就干两件事:inpainting 时给底图配一张 mask,模型只重绘 mask 的白色区域,其余像素不动;outpainting 时把画面边缘标白(或在 Streamlit 里一键加黑边),模型就顺着原图往四周补内容。仓库自带一对能直接跑的示例:底图 assets/cup.png 与对应 mask assets/cup_mask.png,第一次跑建议先用这对图把流程走通。
🖼️ mask 为什么必须纯黑白
prepare_fill里 mask 先按 /255.0 归一化,底图随后执行img_cond * (1 - mask)(详见src/flux/sampling.py的prepare_fill)。也就是说 mask 上白色 255 的像素会把底图乘成 0,等于"擦掉"交给模型重新生成;黑色 0 的像素乘 1,原图完整保留。说白了这张 mask 就是你给模型划的禁区:白色是禁区,必须重画;黑色是保护区,不许碰。记忆锚点一句话:白=待生成,黑=保留。
约束是硬性的:底图与 mask 必须同尺寸,宽高都要是 32 的倍数,mask 还要纯黑白、无灰度无彩色,制作时按 0/255 的灰度图导出即可。交互模式会逐条校验,不合格直接打回,提示Image dimensions must be divisible by 32或Mask dimensions must match conditioning image,换图重输就行。
⚙️ 从零到出图的最小路径
环境用 Python 3.10 建虚拟环境并安装:
git clone https://gitcode.com/GitHub_Trending/flux49/flux && cd flux python3.10 -m venv .venv && source .venv/bin/activate pip install -e ".[all]"权重不用手动下载:启动任一 demo 时会自动从 HuggingFace 拉到checkpoints/目录;权重已在本地时,也可以放进checkpoints/,或用FLUX_MODEL、FLUX_AE两个环境变量直接指向已有文件。
出图只需一条命令:
python -m flux fill \ --img_cond_path <your_input_image> \ --img_mask_path <your_input_mask>两个尖括号占位符替换为你的本地路径,分别是底图与 mask。什么都不填也能跑:默认值就是仓库自带的 cup 示例,默认 prompt 为 "a white paper cup"。常用可调参数:
| 参数 | 默认值 | 作用 |
|---|---|---|
--prompt | a white paper cup | 重绘区域的提示词 |
--num_steps/--guidance | 50 / 30.0 | 采样步数与 guidance 强度 |
--seed | 随机 | 固定种子可复现结果 |
--offload | 关 | 显存不足时把 T5/CLIP/AE 在 CPU/GPU 间搬运 |
输出目录默认output,可用--output_dir改。
交互模式里用斜杠调参数,画板免手写 mask
python -m flux fill --loop进入交互会话后依次输入 prompt、底图路径、mask 路径,留空即复用上一轮。prompt 行支持斜杠命令:/s <seed>设下一次种子、/g <guidance>设 guidance、/n <steps>设步数、/q退出(详见src/flux/cli_fill.py)。路径输入同样过校验:文件存在、扩展名 .jpg/.jpeg/.png/.webp、尺寸 32 的倍数、mask 与底图尺寸一致,不一致就要求重输。
不想手写 mask 文件,可以跑streamlit run demo_st_fill.py:画布上直接涂抹出黑白 mask;"Zoom Out Amount (All Sides)" 和各边 zoom 滑杆会自动生成带黑边的放大底图,并把新增边框区域在 mask 中标白,outpainting 一步到位(详见demo_st_fill.py的add_border_and_mask)。
🔍 跑完 output 目录是空的?
跑完别急着找文件。采样结束先打印Done in <秒数>s,随后进入保存逻辑(详见src/flux/util.py的save_image):正常时打印Saving output/img_{idx}.jpg,文件写进output/,{idx}从 0 递增;图片会嵌入 Exif,Make是 Black Forest Labs、Model是 flux-dev-fill,默认还会把 prompt 写进ImageDescription(--add_sampling_metadata False可关)。保存前有一道 NSFW 过滤,阈值 0.85:判定 NSFW 的图片不会落盘,终端只留一句Your generated image may contain NSFW content.。如果output/没有新文件、只看到这句,就是这个原因。核对时打开最新编号的图:mask 白色区域应被按 prompt 重新生成,黑色区域保持原样。
最后说合规:FLUX.1 Fill [dev]权重是非商业许可(见model_licenses/LICENSE-FLUX1-dev);需要商用时按 README 走 BFL 商业授权,在 CLI 开启track_usage并运行前设置BFL_API_KEY自动统计用量。
【免费下载链接】fluxOfficial inference repo for FLUX.1 models项目地址: https://gitcode.com/GitHub_Trending/flux49/flux
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考