arkennemasis fal · Flux 2 Flash Edit · $0.005/MP
Picture-in, picture-out for half a cent a megapixel
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- seed
- prompt
- timings
- has_nsfw_concepts
- info
The cheapest way to hand a photo to Flux 2 and describe a change. Flash Edit is the same endpoint as the full Flux 2 Edit node, at $0.005 per megapixel instead of $0.012 - and like its text-to-image sibling, it trades away the sampling knobs to get there. No num_inference_steps, no acceleration. Prompt, references, size, output.
For bulk work - a catalogue of product shots needing the same background swap, forty frames needing the same colour correction - that's the right trade. You're not tuning a hero image here, you're processing a pile of them.
The inputs
prompt - talk to the model like a retoucher, not a dreamer. remove blur and noise, match the white balance to daylight, straighten the horizon. The known failure mode of Flux 2 editing is identity drift: describe the person and you'll get a plausible new person instead of the one in the file. Say what must not change, and use micro-contrast rather than sharp when you're after skin detail, or you'll buy yourself fake wrinkles.
image_1 - required, and the only reference socket you have to fill. But there are sockets image_2 through image_6, and they're worth understanding: fal uses the first four, each socket may carry a whole batch, and everything is sent in socket order, so the first picture on socket 1 is reference number 1. Multi-reference editing (put this on that, keep this person's face) is the strongest thing about this model, so it's worth using more than one socket.
image_size - square_hd by default; custom uses image_size_width / image_size_height. This is your output shape, not your input shape. If your source is 4:3 and you render to square, you've asked the model to reframe the picture, and it will.
guidance_scale (2.5), seed (-1), num_images, output_format, enable_safety_checker (flagged results come back as black squares; disabling it needs authorization on your fal account).
enable_prompt_expansion - off by default. Here, leave it off. An LLM rewriting your edit instruction is how "just fix the exposure" becomes "a dramatic cinematic reinterpretation."
What it costs
Billed per megapixel of input and output. Inputs are resized to 1MP, so a 1024×1024 render from a 512×512 reference is 1MP + 1MP = about $0.010. Four references still count as one megapixel of input, so feeding it more pictures doesn't multiply the price - only num_images and your output size do.
Outputs
images is the edited result as an IMAGE (a batch if you asked for several). image_paths gives the saved file paths as a string. seed is an INT - lock a good one and you can reproduce that exact edit. prompt echoes what the model actually received, timings is fal's timing JSON, has_nsfw_concepts reports the safety checker, and info is the JSON blurb with 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 ComfyUI and you'll find it under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL → the repo URL does the same thing with clicks. The pack's requirements.txt lists only httpx, which serves its ChatGPT/Codex nodes; the fal nodes use Python's standard library and add nothing to your environment.
Key line in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Grey/black squares in the output are the safety checker, not corruption. Images it flags come back black. There's no field to switch it off on an unauthorised account; unauthorised requests are checked either way.
Warm, slightly-off colour after the edit is a real, reproducible trait of this model, independent of precision - the result drifts warmer than the source. If the edited frames are going back into a sequence, add a colour-match node against the originals.
The same instruction giving you the same file twice is reuse_identical_run, on by default. It's the feature that stops you paying twice for a repeated run; turn it off when you actually want variety.
A big batch dying partway is usually a rate limit on the fal side, which the node retries with backoff on its own. Keep max_concurrent low for batch work, and remember max_cost_usd (default $20) is checked before upload - you can cap an overnight job at two dollars and it will simply stop short instead of surprising you.
Inputs (20)
| 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. |
| 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. |
| 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. |