arkennemasis fal · Flux 2 Klein 9B Base Edit · $0.011/MP
The editor with a working negative prompt
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- timings
- has_nsfw_concepts
- seed
- prompt
- info
The big undistilled Klein, editing images. It's the most controllable editor in this pack and one of the more expensive: $0.011 per megapixel of input and output, so a 1024×1024 edit with one reference runs about two cents. What you're buying over the distilled edit nodes is that the guidance pass is real - negative_prompt and guidance_scale are live fields here instead of absent ones.
In practice, this is the node for edits where "don't touch the background" has to be an instruction the model can act on, or for sampling from a base-9B LoRA before you take it somewhere else.
What to put in the boxes
prompt - the edit as a command against the file, not a description of a picture. remove blur and noise, fix exposure and color profile, shadow recovery, unsharp mask. Prefer micro-contrast over sharp for skin - it doesn't buy you fake wrinkles and lashes. The failure to avoid is describing the subject, at which point the model reverts to generator mode and gives you a plausible new person.
negative_prompt - the reason this node exists alongside the distilled ones. Whatever must stay put goes here.
guidance_scale - 5. Base Klein lives at 4-5; this isn't a CFG 7 model and pushing it burns the image.
image_1 through image_6 - image_1 required, fal uses the first four, each socket can carry a batch, and they're sent in socket order so the ordering is part of the instruction. Multi-reference editing is what this model is strongest at.
image_size - the tooltip says an unset size falls back to the input image's dimensions, but the widget's default is the square_hd preset, so check which shape you're actually requesting before you blame the model for reframing your photo. custom uses image_size_width / image_size_height.
num_inference_steps - 28 here; 50 is where the community runs base Klein, and since fal bills per megapixel rather than per step, the extra steps only cost seconds. acceleration (none / regular / high) is the base/Dev flavour of the family. seed, num_images, output_format, enable_safety_checker - flagged results come back black rather than erroring.
Outputs
images is the edited IMAGE output (a batch if num_images > 1). image_paths gives you the saved files, timings is fal's timing JSON, has_nsfw_concepts reports the checker's verdict, seed is an INT worth locking on a good edit, prompt echoes the instruction the model received, and info is JSON 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 and it's under arkennemasis → fal → Image → Flux; ComfyUI-Manager → Install via Git URL with the same repo works without a terminal. The pack declares one dependency, httpx, and it belongs to its ChatGPT/Codex nodes - the fal nodes talk HTTP through the standard library, so your Python environment doesn't change.
Key in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
A warm cast on the result. Flux 2 edit output drifts slightly warm versus the source, on every variant and every precision. Colour-match against the original when the edit rejoins a sequence.
Identity drift. The family's known weakness, and the reason consistency LoRAs exist. Klein looks better than Qwen-Image-Edit and preserves a face worse - pick your poison rather than expecting both.
Paying for softness. Base isn't the pretty one. If you're just cleaning up a photo for delivery, the distilled edit node a couple of entries up this list is cheaper and better; come here for control.
Identical reruns, no second bill. That's reuse_identical_run, on by default. Turn it off when you want a new sample from the same settings, and set max_cost_usd low while experimenting - the cap is checked before upload, so tripping it costs nothing.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to edit the image. | |
| negative_prompt | STRING | Negative prompt for classifier-free guidance. Describes what to avoid in the image. Empty leaves it out. | |
| guidance_scale | FLOAT | 5.000–20 | Guidance scale for classifier-free guidance. |
| 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 generated image. If not provided, uses the input image size. '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 image generation. |
| 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. 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. 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. 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. 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. 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. 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 | — |
| timings | STRING | — |
| has_nsfw_concepts | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |