FLUX.2 Klein Draws in One Pass Now. The Free File That Did It Is 735 MB.
A free add-on takes a small image model from four passes to one, runs it in a browser tab with no install, and comes with a licence you can actually put in client work. Here is what it does, how to try it in ten seconds, and what the speed costs you.
Black Forest Labs' smallest image model, FLUX.2 Klein 4B, has been on people's disks since mid-January. It needs four passes through the model to produce a picture. A 735 MB file published on September 18 takes that down to one, and at two passes the author says it matches the four-pass original for detail. Nobody trained a new model to get there. They trained a file that sits on top of the model you already have.
Then they packaged the same file to run in a web browser, and put it behind a link anyone can click.
That last part is what makes this worth twenty minutes of your Saturday. There is a lot of fast image generation around right now. Almost none of it is something you can open without installing a Python environment, renting a graphics card, or reading a licence agreement to find out which countries you are allowed to be in. This one is a URL.
Why the licence is the story, not the speed
Speed on its own is boring. Every week something gets faster.
What is different here is who is allowed to use it. The add-on, radames/FLUX.2-klein-Sana-Sprint, is Apache 2.0. So is the model underneath it. Apache 2.0 means commercial work, no permission slip, no revenue ceiling above which you have to email someone, no clause about which countries you may download in.
Compare that to the other big speed release of the same week. A video add-on called HyperFlow cut a video model's work from 49 passes to eight, roughly a threefold speedup end to end. It is genuinely impressive engineering. It is also, as a matter of law, off limits to anyone in the European Union, the United Kingdom, South Korea or the United States without written authorisation from the company that made the base model. Two files, same basic trick, and the one you can actually bill for is decided by something that happened eighteen months ago when somebody picked which model to build on.
If you take one thing from this: when you pick a base model to learn deeply, you are also picking the licence you will live under for every add-on anyone ever builds on top of it. That is a bigger decision than which model renders hands better this month.
What is actually happening when it goes from four passes to one
A picture model does not draw a picture. It starts with noise and cleans it up, and it does that cleaning in a series of passes. More passes, more cleanup, better picture, longer wait.
Klein 4B already comes pre-shortened. Most image models of its generation need twenty or thirty passes. Klein needs four, because Black Forest Labs already did the work of teaching a fast version to copy what a slow version produces. So this add-on is not the first shortcut applied to this model. It is a second shortcut on top of the first one.
The way it gets there, borrowed from a technique called SANA-Sprint, is worth understanding in plain terms. The normal training asks the model "given where you are, what is the next small step toward a clean picture?" The technique here asks a different question: "given where you are, what does the finished picture look like?" A model trained to answer the second question can jump the whole distance in one move instead of walking it in four.
The catch is that jumping the whole distance is a harder question, and models trained this way tend to give you a slightly generic answer. You get the composition right and lose some texture. Which is more or less exactly what the author reports.
Reading the author's own comparison honestly
The model card ships a grid: same prompt, same seed, stock model against the modified one, at one, two and four passes. It is the most useful thing on the page and I want to be clear about what it is and is not.
It is not an independent test. It is the person who made the file showing you his own results, in his own words. He describes the stock model at one pass as "washed-out blur," the modified model at one pass as "sharp, composed; slightly softer texture than 2 steps," and at two passes as "the sweet spot" that "matches the 4-step base in detail."
That is a strong claim about his own work. What makes it credible is that he publishes the grid so you can disagree with him, and he volunteers the flaw without being asked: the add-on produces "a slightly warmer, higher-contrast look than the stock model," which he calls "a look, not a bug," and says is consistent across prompts.
I would take him at his word on the first claim and take the second one seriously as a working constraint. A consistent colour shift is not a small thing if you are matching plates, building a palette for a client, or generating variations that have to sit next to each other. Test it against your own reference before you commit a project to it.
Put this into practice
Three routes, easiest first.
1. The browser, ten seconds, nothing installed.
Open radames/flux-klein-web. There is a switch in the prompt bar that flips between the one-pass add-on and the stock model. Type a prompt, flip the switch, compare. That is the whole test. There is a second page, Flux-2-klein-Real-Time-Image-to-Image, that does the same thing with a picture as input.
This runs the model on your own machine through your browser's graphics support, which means you need a recent Chrome or Edge, and your laptop fans will make themselves known. Nothing leaves your machine, which is its own argument if you work on things under an agreement.
2. Python, about ten minutes including the download.
You need the diffusers library at version 0.37 or newer and peft installed. Then:
import torch
from diffusers import Flux2KleinPipeline
pipe = Flux2KleinPipeline.from_pretrained(
"black-forest-labs/FLUX.2-klein-4B", torch_dtype=torch.bfloat16
).to("cuda")
pipe.load_lora_weights("radames/FLUX.2-klein-Sana-Sprint")
image = pipe(
prompt="a red bicycle leaning on a whitewashed wall, morning light",
width=512, height=512,
num_inference_steps=2,
generator=torch.Generator("cuda").manual_seed(7),
).images[0]
image.save("bicycle.png")
Three things in there will trip you up if nobody says them out loud. First, set the pass count to 2, not the 4 you would use with the stock model, and not the 20 or 30 you might be used to from other models. Second, do not bother setting a guidance value. Klein ignores it, so the add-on ignores it too. Third, and this is the part I like: pipe.set_adapters(["default_0"], [0.0]) turns the add-on off and gives you the plain model back without reloading anything. That makes an A/B test one line rather than two scripts.
3. Editing with a reference picture.
The thing most speed shortcuts break is the model's ability to work from a reference image. This one keeps it. Pass a picture alongside the prompt:
from diffusers.utils import load_image
ref = load_image("photo.jpg")
out = pipe(
prompt="make it a watercolor painting",
image=[ref],
width=512, height=512,
num_inference_steps=2,
).images[0]
You can pass several reference pictures. For a designer generating a hundred variations on a mood board, this is the actual use case, and two passes instead of four halves the wait on every one of them.
If the warmer colour bothers you, blend the add-on down with pipe.set_adapters(["default_0"], [0.7]). You will get closer to the stock look and give back some of the speed. Somewhere between 0.7 and 1.0 there is a setting that works for your palette. Finding it takes about five minutes.
Where it breaks
The size ceiling is real. The author says it is best between 256 and 512 pixels and gets "less consistent" above that. Larger sizes run, they just stop being reliable. This is a thumbnailing and iteration tool. It is not what you render the final frame with. If your workflow is "generate forty options small, pick three, render those properly," this fits perfectly. If your workflow is "generate one image at print size," it does not fit at all.
The colour shift does not go away. Warmer and punchier, consistently. You can dial it back but you cannot turn it off without turning the whole thing off.
One pass is genuinely softer than two. The author says so plainly. Use two unless you are fighting for every millisecond, at which point you probably want to be asking why.
Everything here is the author's own evaluation. No independent benchmark, no third party running the comparison. The grid is published and reproducible, which is more than most releases give you, but it is one person's read of one person's work.
In the browser, your machine is the machine. WebGPU support means recent Chrome or Edge on reasonably current hardware. On an older laptop it will either refuse or crawl, and neither failure is well explained.
Nothing about this makes the base model better. It makes it faster. Whatever Klein 4B could not draw on Thursday, it still cannot draw on Saturday.
What this changes about how you shop for tools
The thing I keep turning over is what the unit of release has become. A month ago the question was which model to download. This week the honest answer is that you probably already have the model, and the file worth your attention is 735 MB of instructions for making it behave differently. That is a different kind of shopping. You are not evaluating models any more so much as evaluating which base has the healthiest ecosystem of files growing on top of it, and which licence that ecosystem inherits.
By that measure Klein 4B is having a good month. Two separate projects built on it this week: this speed add-on, and a squeezed-down version that runs inside a Mac and iPhone app, with the picture-drawing part compressed to four bits and the part that reads your prompt to three. Both Apache 2.0, because the base is. A 4B model that is small enough to squeeze hard and permissive enough to build a product on turns out to be a magnet for exactly this kind of work.
Which raises the question I do not have a good answer to. If the add-on is the release now, what happens to your shelf of add-ons when the base they all name gets retired, or its licence terms change? Every one of these files points at a specific version of a specific model. Keeping local copies of the bases you depend on has gone from paranoid to sensible, and I suspect it is about to go from sensible to obvious.
If you have run this against a real colour-managed pipeline and the warmer cast either did or did not survive contact with your grade, I would like to hear which.
Medium metadata
Recommended reading time: 8 minutes
Primary sources:
- radames/FLUX.2-klein-Sana-Sprint (Hugging Face createdAt 2026-09-18 06:57 UTC)
- black-forest-labs/FLUX.2-klein-4B (createdAt 2026-01-14, Apache 2.0, 3.88B parameters)
- SANA-Sprint, arXiv:2503.09641
- Free demos: flux-klein-web, Flux-2-klein-Real-Time-Image-to-Image