Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Flux 2 Klein 9B Edit · $0.011/MP
ComfyUI Node

arkennemasis fal · Flux 2 Klein 9B Edit · $0.011/MP

The local editing default without the 20GB

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Flux 2 Klein 9B Edit · $0.011/MP
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • images
  • image_paths
  • timings
  • has_nsfw_concepts
  • seed
  • prompt
  • info
◄prompt►
◄seed-1►
◄num_inference_steps4►
◄image_sizesquare_hd►
◄image_size_width1024►
◄image_size_height1024►
◄num_images1►
◄enable_safety_checkertrue►
◄output_formatpng►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

FLUX.2 [klein] is what most people actually use to edit a photo in 2026, and the 9B distilled variant wants something like 20GB of VRAM before you've loaded an upscaler. This node is that exact model - same weights, same 4-step distillation - running on fal's GPUs, billed per megapixel. If you have the card, run it locally. If you're on a 12GB 3060 and just want to change a jacket colour, $0.011 per megapixel is a rounding error next to the render time.

What it really is

It's a thin wrapper, not a reimplementation. One node per fal endpoint, generated from a JSON file in the pack's fal_provider/models/ folder - this one points at fal-ai/flux-2/klein/9b/edit. When you hit Run, the node uploads your picture to fal's CDN, submits a job to fal's queue, polls it, and downloads the result into output/fal/fal-ai_flux-2_klein_9b_edit/. From the canvas it looks like a sampler. Underneath it's an HTTP client. Your input image leaves your machine - that's the mechanism, not a bug - and klein here is the distilled 9B: 4 steps, guidance baked in, a Qwen3-8B encoder behind the scenes.

The inputs that matter

prompt is an edit instruction, not a scene description. The failure everyone hits is the model dropping into "generator" mode and inventing a new person. Prompt the file instead: "remove blur and noise", "fix exposure and colour profile", "zoom out until her white sneakers are visible. Maintain the faces. Maintain the posture." It reads like a Photoshop command list and it works much better than adjectives.

image_1 is the picture to edit. There are extra sockets up to image_6, but fal takes a maximum of four images total, and a batch on one socket counts as several - they're numbered in socket order, first picture of socket 1 is number 1.

num_inference_steps runs 4 to 8, default 4. Take the 8. The well-known Klein hack - 8 steps at slightly higher guidance - is the thing that kills most of the extra-fingers problem, and steps here are cheap.

image_size defaults to square_hd, which is 1024×1024. The tooltip says it uses the input size if not provided, but there's no auto option in this node's list, so a 3:4 portrait comes back square unless you switch to a portrait preset or custom and set the width and height yourself.

num_images (1–4) multiplies your bill. enable_safety_checker is on by default; flagged images come back as black images, and turning it off requires authorisation on your fal account, so unauthorised requests are checked regardless.

Four options sit on every fal node: max_cost_usd (default $20, 0 disables) stops the run before anything is uploaded if the estimate is over; reuse_identical_run returns an already-paid result for identical inputs; extra_json merges a raw object into the request for fields with no box; max_concurrent (default 1) limits how many paid fal calls run at once across the whole graph.

Outputs

images wires into anything expecting an IMAGE - SaveImage, your upscale chain, a mask node. image_paths gives you the saved file locations as text. timings, has_nsfw_concepts, seed and prompt are fal's own scalar returns, and info is a JSON blob with the request id, cost estimate, saved files and fal's full answer - the honest record of what you were charged.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis

Restart, then put one line in the .env next to run_nvidia_gpu.bat (portable) or in your ComfyUI folder:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

There is no key field on the node, deliberately - a typed key ends up saved inside every workflow you share. The fal provider uses nothing but Python's standard library, so there is no pip step for these nodes; the httpx in requirements.txt is for the pack's Codex/ChatGPT nodes.

Where people get burned

An all-black image is the safety checker, not a crash. A warm colour shift on small edits is normal for Klein. Identity drift is the model's known weakness - pair it with a consistency LoRA, or reach for Qwen-Image-Edit if the face must survive. And if a run reports "same inputs as request … reused, nothing billed" when you wanted a fresh take, that's reuse_identical_run doing its job; turn it off or change the seed. At 1MP out and 1MP in you're paying $0.022 a shot, so four images and four tries is real money but not painful.

One last thing worth knowing: nobody on Reddit mentions this pack by name - an exact-phrase search of the corpus returns zero threads. There's no community folklore to inherit, so the README and the node's tooltips are the documentation.

Categoryarkennemasis/fal/Image/Flux

Inputs (19)

NameTypeDefaultDescription
promptSTRINGThe prompt to edit the image.
seedINT-1-1–2147483647The seed to use for the generation. If not provided, a random seed will be used. -1 leaves it to the model.
num_inference_stepsINT44–8The number of inference steps to perform.
image_sizeCOMBOsquare_hdThe size of the generated image. If not provided, uses the input image size. 'custom' uses the width and height below.
image_size_widthINT102416–14142Width in pixels when image_size is 'custom'.
image_size_heightINT102416–14142Height in pixels when image_size is 'custom'.
num_imagesINT11–4The number of images to generate.
enable_safety_checkerBOOLEANtrueIf 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_formatCOMBOpngThe format of the generated image.
image_1IMAGEThe 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_2optIMAGEThe 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_3optIMAGEThe 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_4optIMAGEThe 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_5optIMAGEThe 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_6optIMAGEThe 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_usdoptFLOAT20.00–100000Safety 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_runoptBOOLEANtrueIf 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_jsonoptSTRINGAdvanced: 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_concurrentoptINT11–32How 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)

NameTypeDescription
imagesIMAGE—
image_pathsSTRING—
timingsSTRING—
has_nsfw_conceptsSTRING—
seedINT—
promptSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.