FLUX.2 [klein] 9B KV
FLUX.2 Klein 9B — the consumer-grade Flux, served cloud-side
- referenceImages
- lora
- acceleratorOptions
- advancedFeatures.watermark.image
- image
When FLUX.2 Dev landed, it was the best open image model on paper and completely out of reach for consumer hardware - 18–24GB of VRAM even quantized, minutes per image on a 5090. BFL's answer was Klein: a size-distilled Flux 2 that runs in about 13GB locally. Klein 9B is the stronger of the two consumer tiers (4B is the Apache-licensed entry point; 9B is the non-commercial flagship, and the community's favorite for editing and for NSFW LoRA quality). This node serves the 9B tier from the cloud, and the "KV" in the name reflects the KV-cache-optimized serving path - the kind of detail that only matters if you're thinking about the serving, which you don't have to, because it's not your VRAM.
So why use a cloud Klein 9B when Klein's whole pitch is that it fits on consumer cards? Honestly, sometimes you're on a machine that still can't run it (13GB is a lot for a 3060-era laptop), or you want FLUX.2 output without downloading the fp8 weights and babysitting a local install, or you just want one consistent cloud pipeline across everything in the Runware pack. For that, this node is the sweet spot: near-flagship quality at a much friendlier price-per-call than Dev.
How it works
Same pattern as the Dev node: an imageInference request to Runware, returned as a native IMAGE tensor. What differs is the default posture - Klein is a distilled model built for speed, and this node's defaults reflect it: steps defaults to 4 (not a gate, unlike Dev), and CFGScale defaults to 3.5. That's the distilled sweet spot: few steps, light guidance. If you've been fighting local Flux and instinctively reaching for 28 steps, stop - this model is tuned to run fast and short.
Inputs that matter
positivePrompt,width,height(required) - 128–2048px in 16px steps, default 1024². Klein handles the 16:9 and portrait presets fine.steps- default 4, 1–50. Distilled checkpoints genuinely benefit from very few steps; going to 20+ usually adds nothing but time (and cloud cost). Experiment, but don't assume "more is better."CFGScale- default 3.5, 1–20. Low guidance is the Klein norm. If output looks overcooked, lower it; if it's ignoring the prompt, nudge up - but small moves.referenceImages- theIMAGEinput for editing/multi-reference. This is where Klein 9B has its reputation - editing quality that some rate above Z-Image's. Wire a source image in and describe the change.lora- the Runware LoRA builder socket. Community LoRA quality on Klein 9B is a known strength; if you have a LoRA model ID, this is where it goes.scheduler- 76 options,(default)is right for a distilled model.negativePrompt- exists but is ignored when CFG ≤ 1; with a 3.5 default you're usually above that, but don't expect SDXL-style negative engineering to matter much.acceleration/acceleratorOptions- an optimization level dropdown (none/low/medium/high) plus a builder socket. "High" trades a little quality for speed/cost. On a model this fast, try(default)first.numberResults,outputFormat,outputQuality,safety,ttl- the usual.
Single output: image → Preview or Save.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Or ComfyUI Manager → search Runware → install → restart. API key via Settings, RUNWARE_API_KEY, or runware auth login.
The honest fine print
Klein 9B is under the FLUX Non-Commercial License (the 4B is the commercial tier) - that travels with the cloud service, so check the license before selling output. And the model is still safety-filtered in the weights; the community routes around it with LoRAs, which is a "you do you" situation that the terms of a cloud API make stickier than on your own disk. For anyone who wants FLUX.2 quality without the hardware bill, though, this is the node - the distilled model was designed for exactly this kind of cheap, fast, accessible serving.
Inputs (27)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| width | INT | 1024128–2048 | Width of the generated media in pixels. |
| height | INT | 1024128–2048 | Height of the generated media in pixels. |
| referenceImagesopt | IMAGE | — | |
| loraopt | RUNWARE_LORA | — | |
| acceleratorOptionsopt | RUNWARE_ACCELERATOROPTIONS | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| negativePromptopt | STRING | Prompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1). | |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | INT | 41–50 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| scheduleropt | COMBO | (default) | Scheduler to use for the diffusion process. |
| CFGScaleopt | FLOAT | 3.501–20 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| accelerationopt | COMBO | (default) | Optimization level. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |