arkennemasis fal · Flux Pro v1 Fill Finetuned · $0.06/MP
Masking, but with your own concept baked in
- image
- mask
- images
- image_paths
- seed
- has_nsfw_concepts
- prompt
- timings
- info
Take Flux Pro Fill, add a finetune, charge one extra cent a megapixel. That's the node. It's the pair-member to Ultra Finetuned in this pack, and it answers a specific need: you've trained a concept on fal and you want it to appear inside a masked region of an existing photo, not on a blank canvas.
The use case is narrower than it sounds and worth spelling out. Somebody wants the product rendered sitting on the client's actual countertop. Somebody wants the character to hold a specific object. Straight Fill can do those if the prompt is good enough; Fill Finetuned does them when the thing being inserted is a concept that only exists in your head, your dataset and your finetune.
The two fields that aren't in plain Fill
- finetune_id - required. The identifier of your trained model on fal. As a string. There is no file picker, because there is no local file: this is BFL/fal-hosted finetuning, not the CivitAI LoRA in your
models/lorasfolder. If that's what you have, use the local Flux Fill workflow instead - importing it here won't work. - finetune_strength -
0to2, defaulting to0. Zero means off. People install this node, run it once, see no difference, and conclude the endpoint is broken; it's the default value. Raise it until the concept reads, bearing in mind the tooltip's own honesty that the optimal setting depends on the finetune and the prompt.
Everything else is Fill: prompt (describe what goes in the hole and what surrounds it), image and mask (both required - you paint the region in ComfyUI, the pack converts it into the RGBA form fal expects and resizes it to the image), seed, num_images (up to 4), output_format, safety_tolerance, enhance_prompt, plus the shared max_cost_usd, reuse_identical_run, extra_json and max_concurrent.
Money
$0.06 per output megapixel, rounded up, multiplied by num_images. fal counts a megapixel as 1024×1024, and the pack's estimate and the live price badge are built from the same rule, so the number you see before running is the number the guard checks. That guard - max_cost_usd, default $20 - fires before the upload, so a run you decide against costs nothing. reuse_identical_run (on by default) returns a cached result for identical inputs as long as the files are still in output/fal, including after a restart, which makes iterating on a downstream node free.
Outputs
images (IMAGE) and image_paths (STRING) are the working pair. Then seed as an INT, prompt, timings, has_nsfw_concepts, and info - the JSON with the fal request id, estimated cost, saved files and fal's full response. Files go to output/fal/fal-ai_flux-pro_v1_fill-finetuned/.
Setup
Install the pack - comfyui-arkennemasis from ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI, then create or edit the .env in the folder holding run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
No models to download and no Python dependencies for this node - the fal wrapper runs on the standard library alone.
Gotchas
The big one is conceptual, and it's why this node has a low ceiling on "just try it": without a finetune on fal, there's nothing to point finetune_id at, and no way to fake it. Second, mask discipline applies exactly as it does to plain Fill - paint past the object, feather the edges, and composite the result back over the original rather than trusting one pass. Third, cost sneaks up through num_images, not through megapixels; four candidates on a 2 MP edit is roughly half a dollar, which is fine, and four candidates on a 4 MP edit every time you tweak a word is not.
Housekeeping you get for free in this pack: a failed run stops the other fal nodes in the same graph from starting (so a failure mid-batch doesn't keep billing), Cancel on the ComfyUI canvas cancels the request on fal too, and a mid-run restart is recoverable - the free Recover Result node picks up the finished job by id from output/fal/_requests.jsonl.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to fill the masked part of the image. | |
| seed | INT | -1-1–2147483647 | The same seed and the same prompt given to the same version of the model will output the same image every time. -1 leaves it to the model. |
| num_images | INT | 11–4 | The number of images to generate. |
| output_format | COMBO | jpeg | The format of the generated image. |
| safety_tolerance | COMBO | 2 | The safety tolerance level for the generated image. 1 being the most strict and 5 being the most permissive. |
| enhance_prompt | BOOLEAN | false | Whether to enhance the prompt for better results. |
| image | IMAGE | The image URL to generate an image from. Needs to match the dimensions of the mask. | |
| mask | MASK | The mask URL to inpaint the image. Needs to match the dimensions of the input image. | |
| finetune_id | STRING | References your specific model | |
| finetune_strength | FLOAT | 0.000–2 | Controls finetune influence. Increase this value if your target concept isn't showing up strongly enough. The optimal setting depends on your finetune and prompt |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| has_nsfw_concepts | STRING | — |
| prompt | STRING | — |
| timings | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |