
FLUX 3 Image Klein Prompt Upsampler: The 18.8 GB Model BFL Shipped Without Naming It
- OrcaNEWOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1M tokens · 72 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Intelligence
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Intelligence
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1M tokens · 733 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Intelligence
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Intelligence
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Intelligence
- xAIGrok 4.72026-09-2146Intelligence
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 per 1M tokens · 35 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 per 1M tokens · 821 tok/s
- DeepSeekDeepSeek: DeepSeek V4.1 Flash2026-09-1040Intelligence
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Intelligence77Coding
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Intelligence76Coding
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Intelligence76Coding
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Intelligence82Coding
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 per 1M tokens · 52 tok/s
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 per 1M tokens · 107 tok/s
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642Intelligence72Coding
- DeepSeekDeepSeek: DeepSeek V4 Flash Vision (Exp)2026-08-21$0.22 / $0.66 per 1M tokens · 185 tok/s
- z-aiZ.ai: GLM 5.32026-08-1845Intelligence75Coding
Black Forest Labs shipped two models on 15 October 2026 and announced one of them. The announced model is FLUX 3 Image Klein, the 5.6B open-weights image generator that drew the launch post, the pricing table, the ComfyUI workflow and a round of trade coverage. The other is the FLUX 3 Image Klein Prompt Upsampler — an 18.8 GB fine-tune of Qwen3.5-9B that rewrites your short request into the long caption the image model expects — and it is the single most permissive artifact in the release. Its repository is public, requires no account, and carries the Apache License 2.0, where each of its three sibling repositories carries the FLUX Kommunity License and an access gate. BFL's launch post never names it. Neither does the model page, the release notes, or the API documentation for FLUX 3 Image Klein, which does not contain the word "upsampler" once in 35,000 characters.
That gap is checkable in about five minutes, and it is worth checking, because the upsampler decides more about what your images look like than most of the settings you will spend the weekend adjusting. It also raises a question the announcement does not answer: whether BFL intends it as a standalone model you can build on, or as a load-bearing dependency of its own inference code that happened to get published with an Apache header. This piece separates what the repository proves from what only BFL can confirm. Every number below comes from the model card, the Hugging Face API, the reference inference code or BFL's own documentation, and none of it has been independently benchmarked by a third party.
What actually shipped, and which part was not named
Start with the dates, because they are exact. The upsampler repository was created on Hugging Face at 20:40 UTC on 14 October 2026 and last written to at 15:32 UTC on 15 October — the same minute-scale window as the FLUX 3 Image Klein repositories it serves. The launch post is dated 15 October. So this is not a leak, not a preview, and not a checkpoint anyone is sitting on: it is a first-party release published alongside the model it belongs to.
What it did not get is a name in the announcement. Read BFL's own enumeration of the release and the pattern is consistent:
• The launch post describes FLUX 3 Image Klein's weights, its FP8, INT8 and NVFP4 builds built with NVIDIA, its day-one ComfyUI and Diffusers support, and its licence. It mentions "prompt upsampling" once, as a feature of the hosted API endpoint, without naming a model or linking a repository.
• The model page at bfl.ai/models/flux-3-image-klein lists the undistilled and distilled versions and describes API access as including "prompt enhancement". Also no repository.
• The release notes for 15 October list the weights: Klein (distilled), Klein Base, and the ComfyUI weights. The upsampler is not among them.
• The API documentation for FLUX 3 Image Klein runs 35,148 characters. A case-insensitive search for "upsampl" returns zero hits.
• The reference inference code on GitHub is where it finally appears — a README section titled "Prompt upsampling", a --no-pup flag on the CLI, a --pup-memory budget, and a flux3/pup.py module. Which is the honest answer to "is it hidden?": no. It is documented, it is integrated, it runs by default, and if you cloned the repo you would meet it immediately.
The distinction matters and is easy to blur. This is not a stealth release; it is a release whose most permissively licensed component was treated as plumbing. The community noticed faster than the press did — by 15 October there were already third-party GGUF quantisations of the upsampler on Hugging Face, and a mirror organisation had copied all four repositories.

What the upsampler actually is
The model card is direct about the lineage: it is a full fine-tune of Qwen3.5-9B with the vision tower frozen. The config file confirms the shape — 32 layers, a 4,096-wide hidden state, 16 attention heads against 4 key-value heads, a 262,144-token position ceiling, and a vocabulary of 248,320. The layer stack is not uniform: three of every four layers use linear attention, with a full-attention layer every fourth. The vision tower is 27 layers deep at 1,152 wide, patch size 16, spatial merge 2. This is a current-generation hybrid-attention vision-language model, not a prompt template with a language model bolted on.
On disk it is a single 18.82 GB bfloat16 safetensors file plus a tokenizer, a chat template and one file that is more interesting than the rest: system_prompts.json, 12.6 KB holding four complete system prompts named t2i, i2i, t2i_bbox and i2i_bbox. Those four prompts are the model's actual interface. They are also readable, which means the behaviour of the upsampler is not a black box — you can read exactly what it was instructed to do, and then check whether it did it.
Training came in two stages, per the card: supervised fine-tuning on pairs of short requests and their expanded prompts, then preference tuning on pairs of the model's own outputs, rendered through FLUX 3 Image Klein at a fixed seed and ranked on the resulting image. That second stage is the notable one. The upsampler was not tuned to write prompts that read well; it was tuned on which of its own prompts produced the better picture when the image model ran them. That is a vendor-reported methodology, not a published ablation, and no independent evaluation of it exists.
The four modes, and how the pipeline picks one
The upsampler is not always a text-to-image tool. Which system prompt it loads depends on what you hand it, and the rule lives in bbox.py:
• No reference images, no boxes — the t2i prompt. It expands a request into a single detailed caption.
• Reference images, no boxes — the i2i prompt. It looks at the references and writes an editing instruction that identifies each referent by what it actually looks like. A vague request is read as the most plausible edit of the supplied images.
• Boxes supplied, text-to-image — the t2i_bbox prompt. The output becomes a caption followed by a JSON element table, one row per object on a 0-to-1000 canvas, and the caption cites each row by angle-bracket id.
• Boxes plus references — the i2i_bbox prompt, which returns an annotation record with a from field distinguishing content taken from ref_image_N from content marked target, plus a box in the source and a box in the imagined output.
Your boxes win a conflict. The code converts your 0-to-1 coordinates onto the 0-to-1000 grid, hands them to the model as an authoritative locked list, and then reconciles the answer: any row the model re-planned under its own id that overlaps a locked box by an intersection-over-union of 0.9 or better takes the locked id, and the locked rows are written back verbatim with the model's description adopted. Your layout is not a suggestion the model may improve on.
Decoding is fixed and worth copying if you call it yourself: greedy, top-p 0.95, top-k 20, a ceiling of 3,584 new tokens, and a presence penalty of 1.5 for text-to-image against 0.0 for edits. That asymmetry is deliberate — the penalty exists to stop the caption generator repeating itself, and an editing instruction that legitimately mentions the same object twice should not be punished for it.
What the prompts demand — and why your prompts look the way they do
The t2i system prompt is the most useful document in the release for anyone who has found FLUX 3 Image Klein's behaviour odd. Some of its instructions explain the model's output style directly:
• Length. "Typical length is 100 to 350 words, more for complex scenes." The upsampler is not compressing your prompt or summarising it. It is expanding it by roughly an order of magnitude, and the image model was trained against captions in that range.
• Every person in focus gets a profile. Ethnicity, gender, age range, skin tone, hair and clothing — as observable attributes. The prompt gives the examples "fair skin" and "brown skin".
• The background gets about a sixth of the caption. Explicit. The prompt also requires out-of-focus and distant content to be described as shapes, colours and silhouettes rather than identities or readable text.
• Style defaults to photography. Without a stated style the model plans an actual photograph and opens with a medium convention — "Full-color outdoor photograph", "Studio photograph" — reserving "Photorealistic" for renders. A request for something "realistic" is converted into the photograph convention rather than repeated back.
• Prohibitions. No hedging adverbs. No quality or emotion judgments. No closing sentence about mood. Negations are rewritten as statements of what is present. The generative voice is mandatory: "this image shows" and "we can see" are banned outright.
• Anti-stock-photo. The prompt asks for "a few ordinary, non-ideal specifics drawn from the scene's own objects instead of the stock-photo ideal." That is an instruction to make images less generic, written into a system prompt.
• Text handling. Rendered text must be transcribed verbatim inside double quotes in its original language and script, with line breaks preserved, typography, colour and placement specified. Where a request needs text it did not supply, the model authors concrete, domain-correct wording.
Read that list against a disappointing generation and you can usually find which rule was not given enough to work with. A flat portrait with an empty background is a request with no scene, no lighting and no ordinary specifics in it. A prompt the model then expanded anyway, filling the gap with a generic plan of its own choosing.

What it costs you in memory and time
The upsampler is on by default in BFL's own pipeline, and the practical reason to care is that "on by default" means a second model resident while the first one generates. From the reference code and documentation:
• Disk — 18.82 GB for the bfloat16 weights, against 11.1 GB for the distilled image model's own safetensors and about 11 GB for the base.
• VRAM — the reference implementation gives the upsampler a share of the GPU, defaulting to 0.35 in the Python API and 0.85 in the standalone module's command line. BFL's memory table, measured on a B200, runs 31 GB in bf16 for the image model with --no-pup; the upsampler's reserved share sits on top of that.
• The 8 GB story gets more complicated. BFL's headline is that the INT8 build of FLUX 3 Image Klein runs on an RTX GPU with as little as 8 GB of VRAM, and that is the image model. In the ComfyUI repository the prompt upsampler ships as a separate 9.75 GB INT8 text encoder file. Nobody has published a configuration in which both an 8 GB card and the upsampler are resident at once.
• The off switch is one flag. --no-pup sends your prompt as typed. The demo has the same toggle, and the hosted API's prompt upsampling is part of the endpoint rather than a separate line item in the published rate card: $0.008 at 768 square, $0.009 at 1K, $0.011 at 1.5K, $0.014 at 2K and $0.036 at 4K, with generation and editing priced the same.
• References are downscaled before the upsampler sees them. One reference is capped at about one megapixel; two get 724 square each; three or more get 512 square each, re-encoded to JPEG at quality 92. The model card lists this as a limitation in as many words — small details in a reference can be described wrongly — and it is the mechanism behind a specific failure you can reproduce: ask for an edit that depends on a small printed detail and the instruction may come back describing the wrong thing, because the upsampler never saw it at full resolution. The image model gets your original.
The licence is the part worth arguing about
Here is the asymmetry, stated plainly. The FLUX 3 Image Klein weights carry the FLUX Kommunity License, which permits free commercial use only for individuals and companies under $5M in annual revenue, with larger organisations routed to self-hosted licensing or the API. Trigger a commercial licence enquiry on a product and the model you are shipping is not the only artifact in scope.
Four repositories were part of this release. Three of them — the distilled model, the base model and the ComfyUI weights — are listed by the Hugging Face API as gated: auto, which means you must accept terms before you can download the files. One is not gated at all, and carries the Apache License 2.0: the prompt upsampler. It is also the only one of the four whose model card states a permissive licence directly, and the reference repository's own README draws the line explicitly — the code is Apache 2.0, the Klein weights are FLUX Kommunity, and "the prompt upsampler is Apache 2.0."

What that buys you depends on the unresolved question. If the upsampler is genuinely a standalone artifact, it is a 9B-class vision-language model you can fine-tune, redistribute and ship in a commercial product without a revenue threshold, and it is currently the cheapest way to acquire that capability from a frontier image lab under terms that do not require a lawyer. If it is intended only as a dependency of BFL's reference code, then repurposing it carries a risk that no document currently resolves.
What is confirmed, and what is not
Confirmed from the repository and the Hugging Face API, all of it re-checkable: the file inventory and byte sizes, the Apache 2.0 licence, the absent access gate, the Qwen3.5-9B base, the four system prompts and their full text, the decoding parameters, the reference preprocessing budget, the box-reconciliation behaviour, the two-stage training description, and the published limitations.
Not confirmed, and stated as open rather than guessed: whether BFL considers the upsampler a supported product or an internal dependency; whether the Apache 2.0 header was a deliberate licensing decision or an inherited default from Qwen3.5-9B; how much the upsampler actually improves output, since no third party has run a controlled comparison and BFL has published no ablation; whether the preference-tuning stage generalises beyond the prompts in its training set; and whether the 9.75 GB INT8 ComfyUI file is the same model at lower precision or a differently prepared one, since that repository's model card is gated and could not be read.
Also open: the numbers on the repository itself are small. Thirteen downloads and ten likes on the upsampler, against 3,241 downloads and 128 likes on the distilled image model, twenty-four hours after release. That is not evidence the model is unimportant — it is evidence that almost nobody knew it was there.
Where OrcaRouter fits, and where it does not
The honest version first: OrcaRouter hosts no Black Forest Labs model. The catalogue was checked rather than assumed, and there is no FLUX entry in it. Nothing below implies otherwise.
What does sit in the catalogue is the comparison set. If you are going to spend a weekend testing whether prompt expansion helps your images, the interesting experiment is running the same request through FLUX 3 Image Klein with the upsampler on and off, and then against a hosted image model that does its own prompt handling — Google's image models, OpenAI's, Grok's — to see whether the gap you are measuring is the upsampler or the generator. Those hosted models are reachable from a single key on OrcaRouter, at the provider's list price with no markup added, so the cost of the experiment is the provider's own rate and nothing on top of it. That is a cheaper way to answer the question than downloading 18.82 GB four times.
Worth being precise about the limit of that advice, though. If you do want to fine-tune the upsampler under Apache 2.0, you need the weights on your own hardware and a runtime that can serve a 9B vision-language model. OrcaRouter does not do that part, and the licence question above is yours to settle.
What would turn this into a bigger story
Four things, in rough order of how much they would change. First, a named mention from BFL — a model card, a docs page, a line in the release notes — which would settle the framing here and probably force an update to this piece. Second, a controlled evaluation, ours or anyone's, of images generated with and without the upsampler at a fixed seed; that number is currently missing and it is the one everyone actually wants. Third, a statement on whether the Apache 2.0 licence is deliberate, since that is what makes the artifact interesting rather than merely unlisted. Fourth, the same treatment applied to the rest of the FLUX 3 family: if the upsampler pattern holds, other tiers will ship with permissive helper models attached and unannounced.
Until then the practical reading is narrow and unglamorous. Because the downloaded image model is gated and its licence carries a revenue threshold, most people who want to build on FLUX 3 Image Klein will start with the API, where the upsampler is not a decision you make — it is something the endpoint does, priced into a rate card that starts at $0.008 an image. The people who should care about the repository are the ones self-hosting, and for them the useful fact this week is simply that the most permissively licensed piece of the release is also the one nobody told them about.
For a model whose failure modes are still undocumented, the useful counterpart is the record of what has already gone wrong elsewhere: the documented AI incidents and agent failures around models in this class are collected in the OrcaRouter AI Incident Archive, where each entry carries its own sources, severity, confidence grade and disputed flag.
