PVL Flux Dev Inpaint (fal.ai)
Mask-based Flux inpainting in the cloud, the honest way
- image
- mask
- IMAGE
This is the node for people who still believe in masks. As the KB's inpainting essay makes clear, instruction-editing models like Qwen and Kontext took over most of the editing job, but they re-emit the whole frame - "the model changes every pixel," as one regular put it. Real mask-based inpainting only rewrites the region you painted. PVL Flux Dev Inpaint (fal.ai) gives you that, on Flux Dev hardware you don't own: it wraps fal.ai's fal-ai/flux-lora/inpainting endpoint (a Flux Dev inpainting pipeline) and runs entirely in the cloud.
So the use case: you've got an image, a flaw, a watermark, an unwanted object - and you want only that changed, with the rest of the pixels left alone. Draw the mask, write the prompt, get back an inpainted result with everything outside the mask untouched.
How it works
The node converts your image and your mask (a real ComfyUI MASK tensor, where 1.0 = inpaint region) into base64 PNG data URIs, submits to the fal queue API, then polls the request until done and fetches the image back. It's the two-phase submit-then-poll pattern this pack uses for its heavier nodes, complete with retries (2) and timeout_sec (120) so a slow queue doesn't hang your workflow forever.
Inputs that matter
prompt,image, andmaskare all required. The mask is the star - paint exactly what should change.strength(default 0.85) controls how much the masked region is rewritten; drop toward 0.5-0.7 for subtler fixes.steps(28) andCFG(3.5) are the diffusion knobs. Flux Dev likes low CFG; 3.5 is a fine starting point.width/height(256-2048, default 1024) set output resolution; the model works best at multiples of 64.seed(-1 = random),num_images(1-4),output_format(jpeg/png),enable_safety_checker(off),sync_mode.
Output is a single IMAGE. If num_images > 1, expect a batch.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/pvlprk/comfyui-pvl-api-nodes
Restart ComfyUI and set FAL_KEY in the environment that launches it (fal.ai/dashboard). The pack's requirements.txt installs a lot you don't need here; Manager handles it.
Where people get burned
- This one actually takes a MASK socket, unlike the Qwen Inpaint node. Wire it from an auto-masker or a mask-from-image node; don't feed it a plain RGB image and expect the right behavior.
- Cloud inpainting = paid inpainting. Keep
num_imagesat 1 until the prompt and mask are locked. - Flux Dev inpaint is solid but not magical at edges. Big mask regions can blur boundaries; feathering your mask slightly (or choosing a smaller region) usually cleans that up better than raising CFG.
- It's the LoRA-family inpaint endpoint, so if you later want LoRA paths and reference images, the sibling
PVL Kontext Dev Inpaintnode in the same pack has those inputs - this one deliberately keeps things simple.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image | IMAGE | — | |
| mask | MASK | — | |
| width | INT | 1024256–2048 | — |
| height | INT | 1024256–2048 | — |
| strength | FLOAT | 0.850–1 | — |
| steps | INT | 281–100 | — |
| CFG | FLOAT | 3.51–20 | — |
| seed | INT | -1-1–4294967295 | — |
| num_images | INT | 11–4 | — |
| enable_safety_checker | BOOLEAN | false | — |
| output_format | COMBO | png | 2 options: jpeg, png |
| sync_mode | BOOLEAN | false | — |
| retries | INT | 20–10 | — |
| timeout_sec | INT | 1205–600 | — |
| debug_log | BOOLEAN | false | — |
| delimiteropt | STRING | [++] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |