Fal AI fal-ai/flux-2/klein/9b/edit
FLUX.2 Klein image editing, hosted β your GPU bills nothing
- IMAGE
- IMAGE_1
- IMAGE_2
- IMAGE_3
- IMAGE_4
- IMAGES
- API_JSON
FLUX.2 Klein is Black Forest Labs' size-distilled answer to the complaint that Flux 2 was unusable on real hardware - the KB's Flux 2 panel notes Klein 9B reopened the "consumer fight" in January 2026 and is the main rival to Z-Image for editing work. The only problem is that even Klein wants roughly 13GB of VRAM. This node doesn't care: it's the fal-ai/flux-2/klein/9b/edit endpoint, so the whole model runs on fal.ai's servers and your machine - a CPU-only VM, a weak laptop, anything - just shuffles pixels across the network. For anyone whose ComfyUI install can't run the model locally, this is the edit node that makes that workflow possible.
Same caveat as every Fal schema node in this pack, so let's get it out of the way: the input names are generic. The pack generates nodes from API schemas, and for this endpoint the mapping flattened things into slots - required IMAGE (a STRING field, for URLs), INT, STRING, STRING_1, and optional IMAGE, IMAGE_1 through IMAGE_4 (these ones are real IMAGE tensor inputs you can wire), INT (default 512), STRING, BOOLEAN. The underlying fal schema, shipped in the pack's schemas/FalAi/ folder, is clearer about intent: prompt (edit instruction), image_urls (up to 4 reference images), num_inference_steps, num_images, output_format, and enable_safety_checker. The generic slots map to those in order, and the API_JSON output tells you exactly what got sent.
Because the slot order is easy to get wrong, the pack's debug tooling isn't optional here - it's the workflow. Set dry_run to true and the node skips the API call entirely, returns a mock, and fills API_JSON with the exact payload it would have posted. Read that JSON, fix the slot you meant, repeat until the payload matches what you intended, then flip dry_run off. That's not a workaround; it's the intended way to use these generated nodes, and it costs you nothing.
The other inputs worth knowing:
sync_mode(default false) - off means fal hands back a URL to your result; on means the media comes back inline as a data URI. Flip it on if the next node needs inline data.- The optional
BOOLEAN(default true) corresponds to the safety checker. If you're editing something the checker keeps rejecting, you can turn it off - but know what you're opting out of.
Outputs are IMAGES (an IMAGE tensor - good, this one actually returns a tensor you can save or keep piping) and API_JSON.
Install is the shared pack flow - ComfyUI Manager, search ComfyUI-API-DockerCPU, or:
cd ComfyUI/custom_nodes
git clone https://github.com/trustypangolin/ComfyUI-API-DockerCPU
cd ComfyUI-API-DockerCPU
pip install -r requirements.txt
Set FAL_KEY (required) and restart. It lives under π¨ DockerCPU API/π¨ FalAi.
Two things to keep in mind. First, editing via prompt on FLUX.2 is genuinely good at following instructions on the image content, but it's still a cloud bill - steps, image count, and output size all multiply cost, and unlike a local model you can't "try 50 seeds and keep the best" for free. Second, remember Klein's censorship history: the KB's Flux 2 panel notes the model is "heavily safety-filtered," and the safety checker is on by default here. If that's a surprise, it'll show up as refused outputs, and the BOOLEAN slot is your lever. Budget your runs, dry-run your payloads, and this becomes a genuinely practical way to edit with FLUX.2 from a machine that has no business running it.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| dry_run | BOOLEAN | false | β |
| sync_mode | BOOLEAN | false | β |
| IMAGE | STRING | β | |
| INT | INT | 0 | β |
| STRING | STRING | β | |
| STRING_1 | STRING | β | |
| BOOLEANopt | BOOLEAN | true | β |
| IMAGEopt | IMAGE | β | |
| IMAGE_1opt | IMAGE | β | |
| IMAGE_2opt | IMAGE | β | |
| IMAGE_3opt | IMAGE | β | |
| IMAGE_4opt | IMAGE | β | |
| INTopt | INT | 512 | β |
| STRINGopt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGES | IMAGE | β |
| API_JSON | STRING | β |