Model reference · open weights
flux-3-image-klein-pup is an open-weight language model from Black Forest Labs. flux-3-image-klein-pup (BF16) weighs 18.8 GB; the smallest configuration that runs it is RTX 4090 24 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the black-forest-labs/flux-3-image-klein-pup model card, 2026-10-16
What it is
| Released by | Black Forest Labs |
|---|---|
| Released | 2026-10-14 |
| Parameters | 9.4B |
| VRAM | 18.8 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 4060 Ti 16 GB 2 smaller cards | ||||
| RTX 3090 24 GB | 6 | 2 | 69K | 23.4 GB |
| RTX 4090 24 GB | 6 | 2 | 68K | 23.4 GB |
| RTX 5090 32 GB | 27 | 8 | all 256K | 31.0 GB |
| L40S 48 GB | 61 | 19 | all 256K | 44.0 GB |
| A100 80 GB | 154 | 48 | all 256K | 78.2 GB |
| H100 80 GB | 139 | 43 | all 256K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 181 | 57 | all 256K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 217 | 68 | all 256K | 107 GB |
| H200 141 GB | 300 | 94 | all 256K | 138 GB |
| B200 180 GB | 401 | 126 | all 256K | 176 GB |
| 2× RTX 4060 Ti 16 GB tensor parallel | 20 | 6 | 227K | 15.4 GB a card |
| 2× RTX 4090 24 GB tensor parallel | 63 | 20 | all 256K | 23.4 GB a card |
| 2× RTX 3090 24 GB tensor parallel | 63 | 20 | all 256K | 23.4 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 21.3 GB | 22.1 GB |
| 5 | 22.8 GB | 26.8 GB |
| 8 | 23.9 GB | 30.4 GB |
| 16 | 26.9 GB | 39.8 GB |
| 32 | 32.8 GB | 58.6 GB |
| 64 | 44.7 GB | 96.3 GB |
One card, with vLLM's small-card settings.
Builds
| Build | Params | Precision | Weights | Smallest setup |
|---|---|---|---|---|
| flux-3-image-klein-pup (above) ↗ | 9.4B | BF16 | 18.8 GB | RTX 4090 24 GB |
| flux-3-image-klein-pup-GGUF ↗ packaged by unsloth 4 builds: Q4_K_M 5.6 GB … BF16 17.9 GB |
GGUF | 5.6 GB | RTX 3060 12 GB |
From the model card
FLUX 3 Image Klein Prompt Upsampler is a 9B vision-language model that expands a short image request into the detailed prompt FLUX 3 Image Klein works best with. It takes the request, up to 10 reference images and an optional list of bounding boxes, and returns one prompt. It is a fine-tune of Qwen3.5-9B.
FLUX 3 Image Klein is not meant to run without a prompt upsampler in front of it, for text-to-image, editing and layout alike; a short prompt sent to the image model as typed gives generic output. This one is tuned for it, see Training. Any other LLM can do the job with the system prompts in system_prompts.json. The inference code in black-forest-labs/flux-3-image-klein loads it by default. With Diffusers, run the Transformers block below and pass the caption to the pipeline as prompt. In ComfyUI, the text-to-image templates on flux-3-image-klein-comfy have an enable_prompt_upsampler switch.
Request
A man walking with his dog, afternoon sun
Prompt
Full-color outdoor photograph, eye-level medium-wide shot in late afternoon sunlight, showing a man walking his dog along a neighborhood sidewalk. The low sun shines from the upper right, casting long shadows across the pavement and lighting the man's face and clothing with warm side light. Slightly left of center, a white man in his thirties with fair skin, short brown hair, and light stubble walks toward frame-left at an easy pace. He wears a faded olive overshirt over a plain grey T-shirt, dark blue jeans, and worn brown leather shoes. [...]
220 words in full, with the image it made, in examples/base/man_dog.json.
A full fine-tune of Qwen3.5-9B with the vision tower frozen, in two stages: supervised training on pairs of short requests and their expanded prompts, then preference tuning on pairs of the model's own prompts, rendered with FLUX 3 Image Klein at the same seed and ranked on the resulting image.
| File | Content |
|---|---|
model.safetensors | the model, bfloat16, 18.8 GB |
system_prompts.json | the four system prompts: t2i, i2i, t2i_bbox, i2i_bbox |
config.json, generation_config.json, tokenizer.json, tokenizer_config.json, chat_template.jinja, processor_config.json, preprocessor_config.json | Transformers configuration, tokenizer, chat template, image processor |
hf download black-forest-labs/flux-3-image-klein-pup --local-dir weights/pup
python scripts/cli.py "A man walking with his dog, afternoon sun" --out out.png
The upsampler is on by default; --no-pup sends the prompt as typed. To upsample without generating: python -m flux3.pup --prompt "..." --out caption.txt. Install, references and the box format: black-forest-labs/flux-3-image-klein.
import json
import torch
from huggingface_hub import hf_hub_download
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
model_id = "black-forest-labs/flux-3-image-klein-pup"
processor = AutoProcessor.from_pretrained(model_id)
model = Qwen3_5ForConditionalGeneration.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto").eval()
prompts = json.load(open(hf_hub_download(model_id, "system_prompts.json")))
messages = [{"role": "system", "content": prompts["t2i"]},
{"role": "user", "content": "A man walking with his dog, afternoon sun"}]
inputs = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=True, return_dict=True,
return_tensors="pt", enable_thinking=False).to(model.device)
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=3584, do_sample=False)
caption = processor.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True).strip()
print(caption)
For an edit, use prompts["i2i"] and a user message with the reference images first ({"type": "image", "image": pil_image} per reference) and then this text, three lines:
Reference images follow in order (the first image, the second image, ...).
User request: put a red bandana around the dog's neck
Output the caption.
Decoding: greedy, top_p 0.95, top_k 20, presence penalty 1.5 for text-to-image and 0 for edits. The *_bbox prompts take the boxes as JSON after the request and return the prompt with a box table; the exact scaffolds are flux3/pup.py and flux3/bbox.py in the inference code.
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.