arkennemasis fal · Flux Kontext Dev · $0.025/image
Two and a half cents for an edit, no 12 GB checkpoint
- image
- images
- image_paths
- timings
- has_nsfw_concepts
- seed
- prompt
- info
Kontext made instruction-based editing a commodity: feed it a photo and a sentence, get the photo back with the sentence applied. Change the clothing, swap the background, remove an object, delete a watermark. The community found it "shockingly effective" at that last one, and it was the strongest character-consistency tool of the Flux 1 era because reference images go into the model's context rather than through an adapter, so identity survives successive edits instead of drifting.
Then Klein and Qwen-Image-Edit arrived and it got superseded as a daily driver. By mid-2026 the standard line was "I would consider Kontext obsolete at this point". This node is the 12B checkpoint on fal for $0.025 per megapixel, which is about two and a half cents an edit - cheap enough that installing it locally to do the same job is hard to justify unless you already have the weights.
Why it's still worth a bookmark
Two reasons, both real.
One capability nobody reproduced. Kontext could be prompted into a genuinely new composition rather than a re-texture of your input. "Cloud resembling someone in the sky", "liquid metal forming up into someone from the floor" - the newer editors stubbornly give you the source photo with new surfaces. If your edit is transformative rather than corrective, Kontext still does something the 2026 models won't.
The LoRA library. Kontext has its own LoRA ecosystem that was never retrained for Qwen or Klein - the Depth reference LoRA and Zoom Out get named whenever this comes up, along with style LoRAs that only exist for the Kontext base. That's why people keep it installed rather than deleting it. On fal, those LoRAs go through a sibling node (...kontext_lora) rather than this one, which has no LoRA field at all.
The settings
prompt is the edit instruction - "make the jacket leather", "remove the person on the left", "put her in a snowstorm". image is required: the picture being edited. Max dimensions are 14142px per side, and fal notes a 20-second timeout on the fetch.
resolution_mode defaults to match_input, and this is the field to appreciate - it's the one the newer edit endpoints are missing. match_input makes the output follow your input's shape, and auto lets the model pick from a preset list that best matches your input's aspect ratio. Either way you're not fighting the node to preserve a 16:9 frame.
Then: acceleration (default none, a speed lever), num_inference_steps 28, guidance_scale 2.5 (Flux guidance - not CFG; this is guidance-distilled, so pushing it up doesn't buy adherence, it burns the image and doubles the work), seed -1 to pin a composition, num_images up to 4, enable_safety_checker (on; disabling requires account authorization at fal, and unauthorized requests are checked anyway), output_format defaulting to jpeg.
Outputs
images and image_paths (in output/fal/fal-ai_flux-kontext_dev/), then timings, has_nsfw_concepts, seed, prompt, and info with the request id, cost estimate, saved files and fal's raw answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI, or use ComfyUI-Manager → Install via Git URL. The pack's only declared dependency is httpx, for its Codex nodes; the fal nodes use Python's standard library. No checkpoint download, no VRAM.
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat (portable build) or in your ComfyUI folder - never a node widget, so the key can't leak into shared workflow JSON.
Knowing the failure modes before you spend
Anatomy degrades at scale. This isn't a node problem, it's a documented Kontext ceiling: when a full body fits in a 1024×1024 frame, heads and hair pick up artifacts that look like heavy JPEG pressure, and large edits skew proportions - heads too big, torsos too small. People blamed censorship for part of it. If you're editing full-body shots, expect to fix them.
It's not a mask. Whole-frame edits come back as whole-frame images; pixels outside your intended change are regenerated. For provably untouched regions you need a mask and a local composite, which is what the inpainting nodes in this pack are for.
Licensing. Kontext [dev] sits under BFL's non-commercial licence - the v2.0 revision names "FLUX.x [dev]" and covers Kontext, Fill, Canny, Depth and Redux together. There's no separate "Kontext licence", and the anti-circumvention clause people read as an NSFW ban lives in that shared document. Check it before commercial delivery.
Cost
$0.025 per megapixel: 1024×1024 ≈ 2.5¢, a 2048-wide landscape ≈ 10¢, four images at 1024 ≈ 10¢. max_cost_usd (default $20; 0 removes it) refuses the run before upload when the estimate is over. And reuse_identical_run stays on by default, so an unchanged graph gives you the cached file back for free - remember that when you queue a re-run expecting a different result from the same seed.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to edit the image. | |
| image | IMAGE | The URL of the image to edit. Max width: 14142px, Max height: 14142px, Timeout: 20s | |
| num_inference_steps | INT | 2810–50 | The number of inference steps to perform. |
| 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. |
| guidance_scale | FLOAT | 2.501–20 | The CFG (Classifier Free 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. |
| num_images | INT | 11–4 | The number of images to generate. |
| 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 | jpeg | Output format |
| acceleration | COMBO | none | The speed of the generation. The higher the speed, the faster the generation. |
| resolution_mode | COMBO | match_input | Determines how the output resolution is set for image editing. - `auto`: The model selects an optimal resolution from a predefined set that best matches the input image's aspect ratio. This is the recommended setting for most use cases as it's what the model was trained on. - `match_input`: The model will attempt to use the same resolution as the input image. The resolution will be adjusted to be compatible with the |
| 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 | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |