如何三步用 FLUX.1 Fill 完成局部重绘与扩画布:从黑白 mask 到出图
如何三步用 FLUX.1 Fill 完成局部重绘与扩画布从黑白 mask 到出图【免费下载链接】fluxOfficial inference repo for FLUX.1 models项目地址: https://gitcode.com/GitHub_Trending/flux49/flux只想改一张图里的某个局部或把画面往四周撑大又不想整张重画FLUX.1 Fill [dev] 就是为此准备的给它一张底图和一张黑白 mask它只重新生成 mask 上标白的部分其余像素原样保留。本文基于官方推理仓库走一遍完整流程先提醒一句这套权重受 FLUX.1-dev Non-Commercial License 约束仅限非商业用途。先跑通一条命令生成第一张图装环境用 Python 3.10 建虚拟环境再装依赖模型权重不用你手动下——启动任意一次 demo 时会自动从 HuggingFace 的black-forest-labs/FLUX.1-Fill-dev拉进checkpoints/目录。如果你已经有本地权重也可以用环境变量指过去把占位符换成真实路径即可python3.10 -m venv .venv source .venv/bin/activate pip install -e .[all] export FLUX_MODEL你的模型文件路径 export FLUX_AE你的 autoencoder 文件路径环境就绪后最省事的办法是直接跑 cli_fill.py 里带默认值的命令——不传任何参数时底图和 mask 默认指向仓库自带的示例assets/cup.png与assets/cup_mask.png默认 prompt 是a white paper cuppython -m flux fill想换成自己的图把两个路径参数传进去就行底图换成你的底图、mask换成对应的 maskpython -m flux fill --img_cond_path 底图 --img_mask_path mask第一次跑会花点时间加载 T5、CLIP、扩散模型和 autoencoder单次生成的耗时视本机而定看到终端打印Done in X.Xs就代表这一次采样结束了。mask 怎么画白色是要重画的黑色是要保留的这里最反直觉的一点是黑白到底谁该涂哪。看 sampling.py 里prepare_fill的做法mask 先按/255.0归一化到 0~1然后底图执行img_cond * (1 - mask)。也就是说 mask 上等于 255白的地方底图像素被直接清零、交给模型生成等于 0黑的地方(1 - mask)是 1原像素原封不动地留下来。一句话记牢想动哪里就涂白想留住哪里就涂黑。官方 Streamlit 演示里的提示文案也是这么写的——Mask (white areas will be generated)白色区域会被生成。所以局部重绘inpainting在底图上把要替换的部分比如某个物件、一块污渍涂成白色其余涂黑。扩画布outpainting把底图四周要新增的边框区域在 mask 里标白模型会往四周长出内容。不想手画 mask 的话可以直接用仓库自带的 Streamlit 演示拖动 Zoom Out Amount (All Sides) 及各边滑杆它会用add_border_and_mask自动生成带黑边的放大底图并把新边框标白一句streamlit run demo_st_fill.py即可不必自己拼 mask。小提示mask 必须与底图完全同尺寸、且只含纯黑纯白像素。导出时用 255/0 的灰度图就行别带灰阶或彩色否则归一化后的中间值会让边界变得不可控。底图与 mask 的三条硬性校验交互模式下程序会对每次输入做校验不合规会直接打回重输。三条规则整理成表校验项规则不通过时的提示尺寸整除底图、mask 的宽高都必须能被 32 整除Image dimensions must be divisible by 32, got {宽}x{高}尺寸一致mask 必须和已选底图逐像素等大Mask dimensions must match conditioning image, ...文件格式必须是存在的.jpg/.jpeg/.png/.webpFile ... does not exist or is not a valid image file为什么要 32 整除因为扩散模型走的是压缩后的潜在空间底图会按固定倍数下采样再放大尺寸若不是 32 的倍数这一步就对不齐了。如果你的图不是 32 的倍数先把它裁剪或缩放到 32 的倍数再喂进去。结果去哪找output 目录为什么可能没有新文件一次采样结束后保存逻辑在 util.py 的save_image里记住这三点正常保存时打印Saving output/img_{idx}.jpg文件落在output/或你指定的output_dir{idx}从 0 开始递增目录已存在时会接着上一次的编号继续。每张图会写入 ExifMake为Black Forest Labs、Model为flux-dev-fill默认还会把 prompt 写进ImageDescription想关掉就传--add_sampling_metadata False。保存前有一道 NSFW 分类器nsfw_image_detection阈值 0.85。一旦被判为 NSFW图片不会落盘终端只打印Your generated image may contain NSFW content.。所以如果你跑完只看到这句提示、output/里却没有新文件就是这个原因——不是出图失败而是被过滤器拦下了。核对产物时打开output/img_0.jpg或最新编号mask 白色区域应已按 prompt 重画、黑色区域应与原图一致。参数怎么调单次采样与交互模式改 prompt、种子、步数单次采样常用参数默认值取自 cli_fill.py 的函数签名参数默认值作用--prompta white paper cup采样提示词--num_steps50采样步数--guidance30.0guidance 值控制贴合提示词的强度--seed不设置则随机随机种子复现同一结果时用--output_diroutput输出目录--offloadFalse显存不够时把 T5/CLIP/AE 在 CPU 与 GPU 间来回搬以省显存想反复试 prompt、种子和步数而不想每次重敲命令行进入交互模式python -m flux fill --loop每次会话依次提示输入 prompt、底图路径、mask 路径输入留空即复用上一次的值。prompt 输入行还支持斜杠命令/s seed设定下一次采样的种子/g guidance设定 guidance/n steps设定采样步数/h查看帮助/q退出权重从哪里来商用前要做什么默认情况下权重启动时自动下载checkpoints/里没有就会从 HuggingFace 拉取详见 docs/fill.md。如果你选择手动指定就用前面那对FLUX_MODEL/FLUX_AE环境变量。关于许可证把它放在心里而不是只记在文末FLUX.1 Fill [dev]走的是 FLUX.1-dev Non-Commercial License非商业、非生产用途。需要商用时得通过 BFL 获取商业授权按量计费官方提供用量统计代码用法是在 CLI 里开启track_usage并在运行前设置BFL_API_KEY环境变量来自动上报用量。更多模型背景可以继续看 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),仅供参考