arkennemasis fal · Flux 2 Edit · $0.012/MP
Instruction editing that keeps image quality, not the face
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- seed
- prompt
- timings
- has_nsfw_concepts
- info
People who edit for a living still say Flux 2 Dev at fp8 is the best local edit model by a mile - and they also say it's too heavy to use. Both are true. This node is the way to get the first without the second: the multi-reference editing strength of the 32B model, on someone else's card, for about a cent and a half an edit.
What it does
Instruction-based editing. You hand it one to four pictures and a sentence describing the change, and it re-renders the file with that change applied. The multi-reference part is the real differentiator - this is the model that composes from several images at once, which is why it handles character sheets and "put this object in that scene" tasks that smaller editors fumble.
The inputs that matter
prompt - the whole game, and the most-messed-up field on the node. Describe the action on the file, not a scene to imagine. Direct, technical, post-processing language works far better than a vibe: remove blur and noise, fix exposure and color profile, shadow recovery. If you describe the subject instead of the edit, the model slides into generator mode and invents a new person. And when it's a scene edit, name what must not move: "Zoom out until the sneakers are visible. Maintain the faces. Maintain the posture."
image_1 (required) through image_6 - sockets, but fal's endpoint only uses the first four. Each socket can carry a whole batch, and they're sent in socket order, so the first picture on socket 1 is reference number 1. Which one you put where matters; that's the ordering.
image_size - square_hd by default, with custom driving image_size_width / image_size_height. For a 1024×1024 output, that's 1MP.
num_inference_steps (28), guidance_scale (2.5), acceleration (none/regular/high), enable_prompt_expansion (off - this one rewrites your careful edit instruction, so leave it alone), output_format, enable_safety_checker (flagged images come back black).
What it costs, exactly
This endpoint bills per megapixel of input and output, and inputs get resized to 1MP. So a 1024×1024 render from a 512×512 reference is 1MP in plus 1MP out: about $0.024. That's the number to keep in your head, because the node's price badge follows your image_size and num_images, not your reference image. Four references are still 1MP of input - you're paying for one, not four.
Outputs
images is the edited image (a batch if num_images > 1) - straight into SaveImage or a comparison board. image_paths gives you the file on disk, seed lets you reproduce a take, prompt echoes the instruction, timings is fal's timing JSON, has_nsfw_concepts reports the checker's read, and info carries the request id, estimate, saved files and fal's full answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, and look under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL → the same repo works if you'd rather not touch a terminal. requirements.txt is one line, httpx, and that's for the pack's ChatGPT nodes; fal runs on Python's standard library, so nothing else to install.
Key goes in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Identity drift is the documented weakness of this model, and it's legitimate: it does not hold a face the way Qwen-Image-Edit does. The result looks more real, but the character's features and expression shift. If face preservation is the job, that's a Qwen edit model, not this one. Elsewhere the community's fix is a dedicated consistency LoRA, which is what the LoRA-flavoured variants in this pack are for.
A warm colour shift on edits is reproducible on this model regardless of precision - the output comes back slightly warmer than the source. Match it back with a colour/histogram node against the original if you're cutting edits into a sequence.
Moving parts get re-rendered with a new, plausible version. The prompt fix is explicit negatives: keep the faces, keep the posture, don't change the background.
Repeated identical runs return cached files because reuse_identical_run is on by default. That's a feature - it also means a wasted run is never charged twice - but flip it off when you want a different take from the same instruction. And keep max_cost_usd modest while you're dialling in a prompt; the check happens before upload, so a run that trips the cap is free.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to edit the image. | |
| guidance_scale | FLOAT | 2.500–20 | Guidance Scale is a measure of how close you want the model to stick to your prompt when looking for a related image to show you. |
| seed | INT | -1-1–2147483647 | The seed to use for the generation. If not provided, a random seed will be used. -1 leaves it to the model. |
| num_inference_steps | INT | 284–50 | The number of inference steps to perform. |
| image_size | COMBO | square_hd | The size of the image to generate. The width and height must be between 512 and 2048 pixels. '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'. |
| num_images | INT | 11–4 | The number of images to generate. |
| acceleration | COMBO | regular | The acceleration level to use for the image generation. |
| enable_prompt_expansion | BOOLEAN | false | If set to true, the prompt will be expanded for better results. |
| enable_safety_checker | BOOLEAN | true | If set to true, the safety checker will be enabled. Disabling it requires account authorization; unauthorized requests are always checked, and images flagged as unsafe are returned as black images. |
| output_format | COMBO | png | The format of the generated image. |
| image_1 | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_2opt | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_3opt | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_4opt | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_5opt | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_6opt | IMAGE | The URLs of the images for editing. A maximum of 4 images are allowed, if more are provided, only the first 4 will be used. 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 (7)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |