Black Forest Labs shipped FLUX.2 [klein] 4B on 15 January 2026: Apache 2.0, text-to-image and single/multi-reference editing in one stack, official repo claiming sub-second runs on consumer NVIDIA cards. Most “best open source image AI” roundups still hand you a 2024 checkpoint and a 40-node Comfy graph. This is the path I used – official black-forest-labs/flux2 CLI plus Diffusers – not another workflow-JSON tour.
If you need weights you can own, fine-tune, and ship commercially without a non-commercial trap, install Klein 4B.
System requirements (what actually matters)
~13GB VRAM is the figure on the Hugging Face model card and BFL’s Klein post; the flux2 README also mentions ~8GB in one place. Practical floor: 12-16GB with CPU offload. 24GB if you want the stack resident and fast. Target class: RTX 3090 / 4070-era cards. Stack BFL tested: Python 3.12 + CUDA 12.9.
| Resource | Minimum | Comfortable |
|---|---|---|
| GPU VRAM | ~12-13 GB with CPU offload | 24 GB full-resident |
| Offload host memory | Enough RAM for model CPU offload under load | Headroom so the OS doesn’t thrash during spikes |
| Disk | Room for transformer (~7.75 GB) + text-encoder shards + venv | Extra if you keep Base + FP8/NVFP4 quants |
| OS / stack | Linux or Windows + NVIDIA | CUDA 12.9-tested; Python 3.12 |
FP8 / NVFP4 builds from the NVIDIA collab cut VRAM roughly 40-55% when you’re tight (BFL Klein announcement). This guide stays on the official CUDA path.
Official download source
Clone the real inference repo – not a random mirror:
git clone https://github.com/black-forest-labs/flux2.git
cd flux2
Weights: black-forest-labs/FLUX.2-klein-4B on Hugging Face. Main transformer shard is about 7.75 GB. No gated non-commercial click-through for the 4B Apache build. Product/docs hub: bfl.ai · docs.bfl.ai · release notes on the BFL Klein blog.
Optional offline pin so the CLI doesn’t surprise-download mid-session:
export KLEIN_4B_MODEL_PATH="/path/to/FLUX.2-klein-4B"
export AE_MODEL_PATH="/path/to/flux2-ae"
Unset is fine – the tooling auto-pulls on first run (flux2 README).
Install FLUX.2 Klein step by step
CUDA 12.9. Python 3.12. Older torch wheels → cryptic ABI errors. Don’t improvise.
- Clean venv inside the repo:
python3.12 -m venv .venv
source .venv/bin/activate # Windows: .venvScriptsactivate
- Editable install with the matching PyTorch CUDA index:
pip install -e . --extra-index-url https://download.pytorch.org/whl/cu129 --no-cache-dir
- GPU smoke check:
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
True + your card name → generate.
Pro tip: Keep this venv dedicated. Mixing ComfyUI’s global torch with flux2’s cu129 pin is how “CUDA capability sm_XX not supported” shows up after a random upgrade.
Diffusers path (first-class on the model card):
pip install git+https://github.com/huggingface/diffusers.git
pip install -U transformers accelerate safetensors
First-time configuration
The catch is the distilled defaults: num_inference_steps=4, guidance_scale=1.0. Copying SDXL-era CFG 3.5-7 and 20-50 steps wastes time and can hurt quality – the HF Flux2KleinPipeline example is explicit.
import torch
from diffusers import Flux2KleinPipeline
device = "cuda"
dtype = torch.bfloat16
pipe = Flux2KleinPipeline.from_pretrained(
"black-forest-labs/FLUX.2-klein-4B",
torch_dtype=dtype,
)
pipe.enable_model_cpu_offload() # required under ~24GB
image = pipe(
prompt="A ceramic mug on a sunlit oak desk, shallow depth of field",
height=1024,
width=1024,
guidance_scale=1.0,
num_inference_steps=4,
generator=torch.Generator(device=device).manual_seed(0),
).images[0]
image.save("flux-klein-first.png")
CLI from the repo:
PYTHONPATH=src python scripts/cli.py
Interactive T2I + reference editing. Set KLEIN_* paths first if weights are already mirrored.
I still remember the first run without offload – VRAM graph spikes, process dies before a single latent finishes. One function call later it worked. Hardware unchanged. Load order changed.
Verify the install works
- CLI starts clean and takes a short prompt.
- Diffusers writes a non-black PNG in a few seconds on a 24GB card (longer with offload).
nvidia-smisits in the expected band – not an instant OOM.
No classic flux --version binary. Success = image on disk + no traceback.
Ever watch a “fits in 13GB” model OOM a 16GB card anyway? That’s the load-spike case below – not a bad GPU, a bad load path.
Common install errors and fixes
RuntimeError: CUDA out of memory on hardware that “should” fit. Turns out peak spikes hit during initial load – before offload/quantization settle. Community threads (including flux2 issue #35 on 16GB-class cards) match the HF card’s offload guidance. Keep enable_model_cpu_offload(), close other GPU apps, try FP8/NVFP4, or drop resolution first. Fragmentation helper: export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True.
Black or garbage frames. Almost always the FLUX.1 ae.safetensors paired with a FLUX.2 backbone. Official flux2 docs: the FLUX.2 autoencoder is a separate Apache 2.0 artifact and is not drop-in compatible. Point AE_MODEL_PATH at the FLUX.2 AE only.
Mat1/mat2 shape errors or broken text conditioning. Don’t mix FLUX.1 loaders or encoder weights with the 4B Klein transformer. Same-family stack only.
Diffusers VRAM roughly doubles (seen on FLUX.2-dev-class checkouts). Root-level full safetensors plus a transformer/ folder double-loaded the transformer – one HF discussion went 178GB → normal after deleting the redundant root weight. Mirror carefully.
Slow first run. Multi-GB auto-download. Pre-stage: huggingface-cli download black-forest-labs/FLUX.2-klein-4B, then set KLEIN_4B_MODEL_PATH.
Upgrade, migrate from FLUX.1, uninstall
git pull in flux2 → reactivate venv → same pip install -e . --extra-index-url https://download.pytorch.org/whl/cu129 --no-cache-dir. Pin an HF revision when you need bit-for-bit repro.
From FLUX.1: new repo name (flux2), new pipeline class (Flux2KleinPipeline), new AE (see errors section – do not symlink the old VAE). Keep environments separate.
deactivate
rm -rf flux2/ # or your clone path
# optional HF cache wipe
rm -rf ~/.cache/huggingface/hub/models--black-forest-labs--FLUX.2-klein-4B
Docker or ComfyUI are fine for UI-heavy work. Day-one debugging is simpler on the official inference surface.
FAQ
Is FLUX.2 Klein 4B really the best open source image AI for self-hosting?
For Apache 2.0 commercial use plus unified generate/edit on one consumer GPU – yes, in early 2026. Bigger open weights win pure quality; they cost license freedom or VRAM.
Do I need Hugging Face login?
Not for the 4B Apache weights. Log in only when you also pull gated non-commercial siblings (9B / dev) or private mirrors. Example: 4090 on the desk, A/B Klein 4B against a 4-bit FLUX.2-dev build the same week – then hf auth login matters for the gated repo, not for Klein 4B itself.
Can I run it under 12GB VRAM?
Sometimes. Aggressive offload plus FP8/NVFP4 (or other community quants) can boot, but generations slow down and crash risk climbs. Official positioning is ~13GB class and up; the README’s ~8GB note is the optimistic floor, not a promise. Treat 8-10GB as experimental. If the graph spikes on load, offload isn’t optional – it’s the difference between a PNG and a traceback.
Next: clone black-forest-labs/flux2, 3.12 venv, cu129 install, Diffusers snippet with enable_model_cpu_offload() until flux-klein-first.png lands. Remember that missing offload line? That’s still the first thing to check when a “13GB model” murders a 16GB card. Then swap the prompt for real work.