arkennemasis fal · Flux 2 Klein 4B Base Edit · $0.009/MP
Instructions that actually listen, because guidance isn't baked in
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- timings
- has_nsfw_concepts
- seed
- prompt
- info
The un-distilled Klein 4B doing edits. It's the least-exciting corner of the family and the one with the most legitimate niche: it has a real guidance pass, so it responds to a negative prompt and to guidance_scale in a way the distilled edit nodes simply cannot. If you keep fighting a distilled editor that ignores "don't change the background", this is the variant where that instruction has somewhere to land.
What's different from the distilled edit node
Three fields, and they're the whole story. negative_prompt exists here. guidance_scale exists here and defaults to 5 rather than being absent. acceleration (none / regular / high) exists here. The distilled 4B edit node has none of the three, because guidance is trained into its weights and an unconditional pass would just be wasted compute.
The trade is the usual one: base is slower and softer out of the box at low step counts, better behaved when you need control.
The inputs that matter
prompt - write 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 - a Photoshop action list. Describe the subject instead and you'll get a different subject; that identity drift is the family trait and base doesn't cure it.
negative_prompt - the reason to be here. Things you want left alone go in here.
image_1 through image_6 - sockets, 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.
image_size - tooltip says that if you don't set it, the input image's size is used, but the node's default is the square_hd preset - so check which shape you're actually asking for before blaming the model for reframing your photo. custom uses image_size_width / image_size_height.
num_inference_steps - 28 here against the 50 that people actually run base Klein at. Billing is per megapixel, so this is free to raise and worth raising.
guidance_scale 5, seed -1, num_images, output_format, enable_safety_checker.
Cost
$0.009 per megapixel of input and output, inputs resized to 1MP. A 1024×1024 edit from one reference is about $0.018, and attaching four references doesn't multiply it - the input side is 1MP either way.
Outputs
images is the edited IMAGE output. image_paths gives the saved files, timings is fal's timing JSON, has_nsfw_concepts reports the checker, seed is an INT worth locking when you get a good edit, prompt echoes the instruction, and info is JSON containing the request id, cost estimate, saved files and fal's full answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI and it's under arkennemasis → fal → Image → Flux; ComfyUI-Manager → Install via Git URL with the same repo is the click-driven route. The pack's requirements.txt is one line, httpx, for its ChatGPT/Codex nodes - fal uses Python's standard library, so nothing else installs.
Key, in the .env by run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Using it as a general-purpose editor. Base isn't meant for generation, and BFL say the distilled model makes nicer pictures. If you just want to change a photo, the distilled edit nodes are cheaper and better - come here for control.
A warm cast on the result. Flux 2 editing drifts slightly warm versus the source, consistently, and this variant is no exception. Colour-match against the original if the frame is going back into a sequence.
The same output twice in a row. reuse_identical_run is on by default: identical inputs, files still in output/fal, served from cache without a second charge. Turn it off when you want a different take from the same instruction, and remember max_cost_usd defaults to $20 and is checked before anything is uploaded - an over-budget run 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. |