arkennemasis fal · Flux 2 Flex Edit · $0.05/MP
Multi-reference editing where you set the shape, not the model
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- seed
- info
The editing tier of Flux 2 with the control knobs left on. Text plus up to four references in, an edited image out, at $0.05 per megapixel of input and output - so a 1024×1024 edit is about a dime. You'd reach for this over the cheaper edit nodes when the instruction is fussy, the typography has to be right, or you need to loosen safety_tolerance below the blunt on/off of the safety checker.
The one setting people get wrong first
image_size defaults to auto on this node, which means the model decides the output shape. That sounds helpful and often isn't: hand it a 4:3 photo and ask for a small change, and "auto" is the model's opinion about framing, not a promise to keep yours. If the edit has to land back in the same frame, set image_size explicitly or use custom with image_size_width / image_size_height. On every other edit node in this family, the default is a preset; here it isn't, and that catches people.
The inputs
prompt - for edits, write it like a post-processing queue rather than a scene description. "Remove blur and noise, fix exposure, unsharp mask, micro-contrast" gets you a cleaned file; a paragraph about the woman on the beach gets you a new woman on a beach. When something absolutely must survive, name it: maintain the faces, maintain the posture.
image_1 through image_6 - sockets. image_1 is required; fal uses the first four, each socket can carry a batch, and they're ordered by socket position, so where you plug things in is part of the instruction.
num_inference_steps (28), guidance_scale (3.5), safety_tolerance (1-5, default 2), enable_safety_checker (a flagged image comes back black), seed (-1), num_images, and output_format - jpeg by default on this endpoint, which is worth changing to png if anything downstream will edit the result again.
Cost, plainly
Input plus output, rounded up, at $0.05/MP. Inputs are resized to 1MP, so attaching four references doesn't multiply the bill - it's 1MP of input either way. A 1024×1024 edit from any number of references is roughly $0.10, and num_images is what turns that into a bigger number. Compare that to the plain edit node in this pack at about two cents for the same job; you're paying for the knobs and the text rendering.
Outputs
images is the edited IMAGE output. image_paths is the saved location as a string. seed is an INT, so a good take is reproducible. info is a JSON string with the request id, cost estimate, saved files and fal's full response - and this node stops there. There's no timings and no has_nsfw_concepts output on the Flex pair, unlike the other Flux 2 nodes.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, and it's under arkennemasis → fal → Image → Flux. Or ComfyUI-Manager → Install via Git URL with the same repo. The pack's requirements.txt is a single httpx line for its Codex nodes; the fal nodes run on the standard library, so there's nothing to pip install for this one.
Key in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Identity and detail drift. Flux 2 editing looks better than the alternatives and holds a face worse than Qwen-Image-Edit does. If a character has to survive the edit, that's the known weak spot - the ecosystem's answer is a consistency LoRA, and the pack has LoRA variants of the Klein nodes for exactly this kind of work.
The warm shift. Edited output comes back slightly warmer than the source, consistently. If you're cutting edits into a sequence next to untouched shots, match the colour back.
Rounding up. 0.3MP renders at the same price as 1MP ones, so don't use this endpoint for throwaway tests.
Repeated reruns returning cached files - reuse_identical_run, on by default, serving the same result from output/fal instead of charging again. Turn it off for a genuinely new take. And keep max_cost_usd sane while you dial things in; the estimate is checked before upload, so a run that hits the cap costs nothing.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| image_size | COMBO | auto | The size of the generated image. If `auto`, the size will be determined by the model. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| seed | INT | -1-1–2147483647 | The seed to use for the generation. -1 leaves it to the model. |
| safety_tolerance | COMBO | 2 | The safety tolerance level for the generated image. 1 being the most strict and 5 being the most permissive. |
| enable_safety_checker | BOOLEAN | true | Whether to enable the safety checker. Disabling it requires account authorization; unauthorized requests are always checked. |
| output_format | COMBO | jpeg | The format of the generated image. |
| image_1 | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| guidance_scale | FLOAT | 3.501.5–10 | The guidance scale to use for the generation. |
| num_inference_steps | INT | 282–50 | The number of inference steps to perform. |
| image_2opt | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_3opt | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_4opt | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_5opt | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_6opt | IMAGE | List of URLs of input images for editing Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| 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 (4)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |