AI · Model-Specific Setups
Flux.2 — Klein 4B
4 steps, 36 seconds, better results than Flux.1 dev — and Apache 2.0.
The Swiss Army knife of diffusion models
My tests started with Flux.2 dev — the flagship of the family, 32 billion parameters, and by all accounts the current state of the art in AI image generation. It runs on a MacBook Pro with 64 GB Unified Memory. But at render times around 45 minutes per image, that's not a workflow — that's waiting. Flux.2 dev simply isn't built for local operation on normal hardware.
Klein 9B was the next step. Smaller, faster — but the encoder for 9B is 8 GB, the model itself another ~10 GB. Model and encoder both need to be in memory simultaneously, alongside Stability Matrix and a browser. On 16 GB that gets tight to impossible.
Klein 4B was the surprise.
Flux2 klein 4B
What Klein 4B is
Klein 4B is a distilled model — trained to reach in 4 steps a result equivalent to a full Flux run at 20–25 steps. The diffusion model is 4.3 GB. The encoder in the quantized variant (Q6) is 3.66 GB. Both fit on 16 GB — together with Stability Matrix and open browser tabs, without clearing anything.
The encoder is Qwen 3, a 4-billion-parameter language model. No CLIP, no T5 split, no two-field interface. One text field, continuous prose. The prompt logic from 2.4.3 — Prompts for Flux transfers directly.
What it delivers
Benchmark figures — all at 1024×1024, warm (models already in memory):
| Model | MacBook Pro 64 GB | MacBook Air 16 GB |
| SDXL | 143 s | ~300 s |
| Flux.1 dev | 360 s | — (OOM) |
| Klein 4B | 36 s | 90 s |
Factor 10 against Flux.1 dev on the Pro. Factor 3.3 against SDXL on the Air — on a machine where Flux.1 dev doesn't run at all.
That alone would be remarkable. What my tests showed in addition: Klein 4B delivers better results than Flux.1 dev — consistently, not as an isolated case. With decorative elements, lighting direction, material transitions. A model with a third of the parameters, computing in a tenth of the time, and convincing on quality — that was the real revelation of these tests.
Flux.1 dev has 12 billion parameters — three times as many — and takes ten times as long. That Klein 4B doesn't fall behind qualitatively but comes out ahead suggests that Flux.2 does something architecturally different — not just scaled down.
Setup
Files and target folders
16 GB (MacBook Air) — 90 s warm:
| File | Size | Target folder |
| flux-2-klein-4b-Q8_0.gguf | 4.3 GB | diffusion_models/ |
| Qwen3-4B-UD-Q6_K_XL.gguf | 3.66 GB | text_encoders/ |
| flux2-vae.safetensors | ~335 MB | vae/ |
Total footprint ~8.3 GB. Stability Matrix and browser tabs can stay open — no clearing required.
64 GB (MacBook Pro) — 36 s warm:
Same configuration, optionally with qwen_3_4b.safetensors (BF16, 8 GB) instead of the quantized encoder. The diffusion model stays GGUF in either case — so the custom node and Python package need to be installed regardless of encoder choice.
Sources
| File | Repository |
| flux-2-klein-4b-Q8_0.gguf | unsloth/FLUX.2-klein-4B-GGUF |
| Qwen3-4B-UD-Q6_K_XL.gguf | unsloth/Qwen3-4B-GGUF |
| qwen_3_4b.safetensors (BF16) | Comfy-Org/vae-text-encorder-for-flux-klein-4b → split_files/text_encoders/ |
| flux2-vae.safetensors | Comfy-Org/flux2-dev → split_files/vae/ |
Nodes in ComfyUI
Klein 4B requires different nodes from Flux.1 dev:
| Task | Node |
| Load diffusion model | Unet Loader (GGUF) — not Load Diffusion Model |
| Encoder BF16 | CLIPLoader, type = flux2 |
| Encoder GGUF | CLIPLoader (GGUF), type = flux2 |
| Enter text | CLIP Text Encode — not CLIPTextEncodeFlux |
No two-field interface, no clip_l/t5xxl split. One text field.
MPS rule
Anything with fp8 or fp4 in the filename won't run on Apple Silicon — MPS cannot process these formats. The official ComfyUI documentation links exactly these files as the default. Use BF16 or GGUF instead.
Required step: setting up GGUF support
The diffusion model is in GGUF format — a quantization format that originated in the LLM world. ComfyUI can't load GGUF files natively; it needs a custom node (ComfyUI-GGUF by city96) and a Python package.
Step 1 — Install Python package
Stability Matrix → ComfyUI package → three-dot menu → Python Packages → + → search for gguf → install. This step must come first.
Step 2 — Install custom node
ComfyUI → Manager → Install via Git URL → https://github.com/city96/ComfyUI-GGUF → install.
Then stop ComfyUI and restart. Verify: Add Node → bootleg → Unet Loader (GGUF) — if the node appears, everything is installed correctly.
The most common mistake: the custom node installs without error but doesn't show up anywhere. The cause is almost always the missing Python package — which is why Step 1 comes first. Whether this stumbling block occurs identically on Windows I haven't tested.
Parameters
CFG 1.0 means: no functioning negative prompt. Rephrase unwanted elements positively — exactly as with Flux.1 dev, only more consistently.
Steps: 4 (Flux2Scheduler) CFG: 1.0 (CFG Guider) Sampler: euler Scheduler: simple
License
Klein 4B is the only model in the Flux family under Apache 2.0 — no usage restrictions, no open legal questions for commercial work. Klein 9B and Flux.2 dev run under Black Forest Labs' non-commercial license, with the same open questions as Flux.1 dev. More on this in 2.1.4 — Understanding licensing.
And RAY-L?
Klein 4B has convinced me enough that integration into RAY-L is decided — as soon as ControlNet Canny for Klein 4B becomes available. Currently it doesn't exist: no ComfyUI-compatible ControlNet Canny exists for either 4B or 9B. For RAY-L v1.0, Flux.1 dev remains the choice.
But Klein 4B belongs on the watch list from here on. Factor 10 faster, better results, Apache 2.0, runs on 16 GB — when ControlNet Canny arrives, the integration follows.