arkennemasis fal · Flux 2 Klein 9B Base · $0.011/MP
The checkpoint the Klein LoRA ecosystem is actually trained on
- images
- image_paths
- timings
- has_nsfw_concepts
- seed
- prompt
- info
Most of the Klein LoRAs you'll find - the realism stacks, the skin fixes, the consistency and NSFW LoRAs - were trained against FLUX.2-klein-base-9B and then applied at inference to the distilled 9B. This node runs the base model itself: undistilled, real classifier-free guidance, a negative prompt that does something, 28 steps as fal ships it.
It's not the node for making pictures you're proud of. Black Forest Labs are explicit that base isn't intended for generation and the distilled model looks better, and the community repeats it. What base is for is being the correct host for a LoRA built on it, and giving you a controlled look at what a fine-tune actually contains.
What base changes in the UI
Four fields appear on this node that the distilled 9B doesn't have: negative_prompt, guidance_scale, acceleration and a higher default step count. That's the whole distillation story made visible - the distilled variants have guidance baked into the weights, so there's no unconditional pass and a negative prompt would be a dead field. Here it's live.
The 9B base is guidance-distilled but not step-distilled, which is the distinction people keep tripping over: it wants real guidance at 4-5, and it wants steps - the community's 2000-image test ran base at 50. Fal's default of 28 is a reasonable cost-conscious starting point, and because billing is per megapixel rather than per step, going to 50 costs you time and not money.
The inputs
prompt - sentences with explicit ownership and spatial relations. The encoder is a Qwen3 LLM reading a chat turn; tag soup and weight syntaxes underperform. Structured, JSON-ish prompts reportedly work well on this family.
negative_prompt - actually functional here. Unlike its distilled siblings.
guidance_scale - 5 by default, and 4-5 is where base Klein lives. Do not import an SDXL CFG habit; this is a flow-matching model.
image_size - landscape_4_3 default, custom with width/height.
num_images, output_format (png), enable_safety_checker (flagged output comes back black; disabling needs fal authorisation), seed.
Outputs
images (IMAGE batch), image_paths (STRING), timings, has_nsfw_concepts, seed (INT), prompt (STRING), and info - a JSON string with the request id, cost estimate, saved files and fal's full answer. That info output is the cheapest way to find out what a run actually cost.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI; it lands under arkennemasis → fal → Image → Flux. ComfyUI-Manager → Install via Git URL with the same repo is the click route. The pack's requirements.txt has one entry, httpx, for its ChatGPT/Codex nodes - the fal provider uses Python's standard library, so nothing new is installed.
Key, in the .env beside run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
Where people get burned
Judging base by its unadorned output. It looks softer and less finished than the distilled 9B at the same size. That's expected. If you're generating for real, use the distilled node.
Running it at 4 steps. That's a distilled habit. Base at 4 steps is a smear.
Assuming the licence travels. The 9B weights are non-commercial under BFL's Flux licence; the 4B is the Apache 2.0 tier. Relevant if a fine-tune is eventually going into a product rather than a gallery.
Not knowing what's cached. reuse_identical_run is on by default - the same inputs with files still in output/fal come back without a second charge, which is a good default and a confusing one when you expected a fresh sample. max_cost_usd defaults to $20 and is evaluated before upload: an over-budget run costs nothing, which makes it a safe leash for a long experiment.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The prompt to generate an image from. | |
| 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 | landscape_4_3 | The size of the image to generate. '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. |
| 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. |