Flux Pro 1.0 Fill [Inpaint]
Flux Pro 1.0 Fill — inpainting where the server does the masking math
- image
- mask
- IMAGE
- STRING
If you've ever tried to inpaint with Flux Fill [dev] locally, you know the drill: the multi-gigabyte download, the VRAM pressure, and the eternal forum debate about how every VAE encode/decode pass degrades the image so you have to composite the inpainted region back by hand. FluxProInpaint is the version where all of that happens on Black Forest Labs' servers. You hand it an image, a mask, and a prompt; it returns a finished, fully regenerated image. Your machine never touches the model.
This is the API flavor of BFL's Flux Tools "Fill" - the same inpainting/outpainting model the community called "inpainting of an unseen level" when it shipped - accessed through the flux-pro-1.0-fill endpoint. The practical win: because the server re-renders and composites the whole image for you, you sidestep the classic local-Fill degradation trap entirely. There's no encode/decode cycle, no manual compositing step, no seam to hide.
How it works
The node base64-encodes your image (and mask), POSTs them to /v1/flux-pro-1.0-fill, then polls /v1/get_result with backoff until the job is ready. That's why your queue visibly blocks for 30 seconds to a couple of minutes - the node is synchronous, and it's waiting on BFL's GPU farm, not yours. It then decodes the response and hands it back as a normal ComfyUI IMAGE tensor. No sampling happens locally; the steps and guidance values are passed straight through to the API.
The inputs that matter
- image - the ComfyUI image to modify. The tooltip notes it can carry an alpha mask if you'd rather not use the separate mask input.
- mask - a ComfyUI MASK tensor. Black areas (0%) stay untouched; white areas (100%) get repainted. This is the one that bites people: the mask must be the exact same dimensions as the image, or the node raises a
ValueError(Mask dimensions ... do not match expected image dimensions). Resize your mask before you wire it in. Alternatively, skip it and bake the mask into the image's alpha channel. - prompt - describe what you want in the masked area. Plain English works; Flux's prompt adherence carries over to the API.
- steps - 15 to 50, default 50. Leave it unless you're experimenting; this is a paid API and steps cost money.
- guidance - 1.5 to 100, default 60. Heed the trap: this is BFL's API guidance scale, not the ~3.5 you use with local Flux Dev. Don't "fix" it by lowering it to 3.5 - you'll get mush. Trust the default until you have a reason not to.
- safety_tolerance - 0 (strictest) to 6 (no moderation), default 6. Remember moderation is still enforced server-side; the dial is how much rope BFL gives you.
- seed - set for reproducibility, -1 for random.
- prompt_upsampling - when on, BFL rewrites/expands your prompt for more creative results. Good for vague edits, annoying for precise ones.
Outputs
Two of them: IMAGE (the finished, composited result - wire it to SaveImage) and a STRING that's just a random per-session version id the author stamps on outputs. Ignore it; it means nothing downstream.
Install
Same as the rest of this pack - there's no requirements.txt and nothing to download beyond the code, because everything runs server-side. requests and Pillow are already in ComfyUI.
cd ComfyUI/custom_nodes
git clone https://github.com/Altair200333/ComfyUI_Flux_1.1_PRO
Then create config.ini in the extension folder (it's gitignored, so a fresh clone won't have one):
[API]
API_KEY=your_api_key_here
BASE_URL=https://api.us1.bfl.ai
Restart ComfyUI, and the three nodes appear under the BFL category. ComfyUI Manager also finds it if you search "Flux Pro Nodes for ComfyUI".
Gotchas
The FileNotFoundError about config.ini when you queue = you skipped the key file. Jobs that sit for two minutes are usually just the polling loop doing its job. And the one nobody says out loud: every click is billable. This node is for when the result matters - a specific object swap, a cleanup you can't get right with local models. For parameter sliders and iteration spam, run Fill locally; for the one careful, high-polish edit, let Flux Pro 1.0 Fill do it and it'll almost always justify the couple of cents.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | A Base64-encoded string representing the image you wish to modify. Can contain alpha mask if desired. | |
| prompt | STRING | The description of the changes you want to make. This text guides the inpainting process, specifying features, styles, or modifications for the masked area. | |
| steps | INT | 5015–50 | Number of steps for the image generation process. (min: 15, max: 50, default: 50) |
| guidance | FLOAT | 60.001.5–100 | Guidance strength for the image generation process. (min: 1.5, max: 100.0, default: 60) |
| safety_tolerance | INT | 60–6 | Tolerance level for input and output moderation. Between 0 (most strict) and 6 (no moderation) (default: 6) |
| output_format | COMBO | jpeg | Output format for the generated image. Can be 'jpeg' or 'png' (default: jpeg) |
| maskopt | MASK | A Base64-encoded string representing a mask for the areas you want to modify in the image. The mask should be the same dimensions as the image and in black and white. Black areas (0%) indicate no modification, while white areas (100%) specify areas for inpainting. Optional if you provide an alpha mask in the original image. | |
| seedopt | INT | -1 | Optional seed for reproducibility. |
| prompt_upsamplingopt | BOOLEAN | false | Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation. (default: false) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| STRING | STRING | — |