A source-based look at Black Forest Labs' newest open image model and the seven ComfyUI graphs that ship with our walkthrough — what each graph connects, what the video claims, and where the two stop agreeing.
The short version
FLUX 3 Image Klein is an open-weights image model: 5.6B parameters, text-to-image, image editing, multi-reference generation, and bounding-box layout prompting, with native high-resolution output.
The companion video reports the numbers most people care about: 16 steps on the distilled checkpoint, 50 on the base checkpoint, roughly 4 seconds for a 1-megapixel image on an RTX 5090, and a theoretical 8 GB VRAM floor. Those are the creator's measurements and the model card's figures. This article did not re-run them, and you should treat them as reported, not reproduced.
What this article does do is read the seven distributed JSON files node by node. That turns out to matter, because three things people repeat about this release — "ten reference images", "a 28-run benchmark in the workflow", "boxes that keep everything else pixel-identical" — are not what the files contain.
Base or distilled? What the video tested, and what the files contain
BFL shipped two checkpoints. Our graphs select them by filename:
| Checkpoint | Steps | CFG | Where it appears |
|---|---|---|---|
flux3_image_klein_base_int8_convrot.safetensors |
50 | 3.5 | workflows 01, 03, 07 |
flux3_image_klein_sd_int8_convrot.safetensors (step-distilled) |
16 | 1.0 | workflows 02, 04, 05, 06, 07 |
In the video, from 05:33, the creator reports 28 comparison tests between the two checkpoints and walks through the pairs on screen: portraits, full-body figures, product text, interior architecture, a two-person scene with a red bicycle and a coffee cup, a black dress recoloured to green, an earring swap, and a standing-to-sitting pose change. The summary is that editing results are close, text-to-image differences are small, and the distilled model occasionally edges ahead — which is why the recommendation is to default to distilled.
That account comes from the video. Workflow 07, the A/B graph, contains no test data at all — it is a two-branch comparison graph you run yourself. Its absence proves the export does not include the test series; it does not disprove the tests in the video. If you want to verify the count of 28, check the video frames, not the JSON.
What the JSON does confirm is the configuration the comparison ran on: the base branch samples at 25 steps, CFG 3.5, the distilled branch at 16 steps, CFG 1.0, sharing one prompt, one zeroed negative conditioning, one empty latent and one VAE. Note that 25 is not 50 — the shipped A/B graph deliberately uses a cheaper base setting, so a like-for-like comparison against the video needs that step count raised.
What is actually in the seven files
| # | File | Top-level nodes | Nested | What it is |
|---|---|---|---|---|
| 01 | image_flux3_klein_t2i.json |
8 | 14 | Base text-to-image, wrapped in a subgraph |
| 02 | image_flux3_klein_distilled_t2i.json |
9 | 14 | Distilled text-to-image, separate subgraph definition |
| 03 | image_flux3_klein_image_edit.json |
25 | 0 | Base image editing, box + reference image |
| 04 | image_flux3_klein_distilled_image_edit.json |
25 | 0 | Distilled image editing, different negative path |
| 05 | 05_F05_Distilled_MultiReference_1to10.json |
12 | 0 | Reference composition — two connected inputs |
| 06 | 06_F06_Distilled_BoundingBox_Layout_Edit.json |
13 | 0 | Bounding-box layout request |
| 07 | 07_F07_Base_vs_Distilled_A_B.json |
14 | 0 | Two-branch output comparison |
106 top-level nodes and 28 nodes inside two subgraph definitions. The two text-to-image files share a subgraph identifier but store different definitions — do not deduplicate them by name.
The seven graphs
01 — Base text-to-image, in a subgraph
Eight top-level nodes hide a fourteen-node definition: loaders, prompt generation and switching, conditioning, latent, sampling, decoding. The outer resolution selector at node 19 drives width and height, and the subgraph's latent node is linked to those inputs — so the stored 1024×1024 widget values inside are not the effective resolution.
The prompt switch takes its boolean from an outer enable_prompt_upsampler input; the inner switch's saved false does not tell you which branch is selected. Same for the sampler: its stored array is not a recipe.
One trap worth naming: the top-level box helper feeds a layout-text preview only. It is not connected to the generation prompt. Editing those boxes changes nothing downstream.
02 — Distilled text-to-image
Same shape, different definition, distilled checkpoint. The box helper again reaches only a preview. The source note suggests trying 4–16 steps; that is a suggestion, not a measurement.
03 — Base image editing
Base loader is node 59; the reference image at 54 feeds the box background, the reference-latent input, the comparer, and the prompt-expansion image batch. Switch 51 takes generated text on on_false and layout text on on_true, with false saved. Negative conditioning comes from encoder 58.
Two things to ignore: node 44 (EmptyFlux2LatentImage) is not on the sampler path, so changing it does not resize anything; node 60 is a disconnected text encoder. And the save prefix still says distilled although the loader selects the base file — trust the loader, not the prefix.
04 — Distilled image editing
SD loader at node 1, reference image at 11, same switch arrangement as 03 but a different negative path: ConditioningZeroOut at node 32 instead of a negative text encoder. The saved edit request concerns an earring; it is a request, not an observed result.
05 — Multi-reference: two inputs are connected
The filename says 1to10. The file connects two LoadImage nodes, 4 and 5, into images.image0 and images.image1 of reference node 8. The prompt at node 6 assigns the person to <ref_image_0> and the clothing to <ref_image_1>.
That matches what the creator says in the video around 05:02: one or two reference images work well, and four or more degrade. The "1 to 10" label describes the model's reference mechanism, not the shipped configuration — and it is why the collection's cover for this workflow was rewritten. If you want more inputs, check the installed node's interface yourself; nothing in this export demonstrates a tested ten-image run.
ConditioningZeroOut at node 7 sits on the negative path. It does not switch off a reference slot, and it does not disconnect either image input — an easy misreading because the node sits right next to the reference wiring.
06 — Bounding-box layout
Image 4 supplies the background for CreateBoundingBoxes at 6. Box elements feed Flux3LayoutPrompt at 7, whose string connects to the text input of encoder 5. Saved canvas is 1024×1024 with the main-subject box at x=320, y=100, w=360, h=800. Unlike 01 and 02, this path is genuinely connected to conditioning.
What it is not: a mask. There is no dedicated mask input here, the saved rectangle does not prove regional isolation, and the file gives no evidence for a universal 0–1000 coordinate protocol or particular src_bbox/tgt_bbox semantics. The creator says the same thing at around 04:31 — "this technique is not a hard mask, it cannot keep everything outside the box unchanged" — and describes it as a stronger attention hint. If you need pixel-exact preservation, this is the wrong tool.
07 — Base vs distilled comparison
Two model branches share prompt 3, zeroed negative conditioning 4, empty latent 5 and VAE 2. There is no LoadImage in the graph: the comparer receives the two saved-image outputs (AIKSK_F07_Base, AIKSK_F07_Distilled), not an original photograph plus two results.
So this graph produces a pair per prompt. The 28-test series in the video is a set of runs someone made with it — not something bundled in the file.
What I checked, and what I did not
Checked, by reading the JSON: node counts, connections on both ends, selected model filenames, sampler step and CFG values, box coordinates, save prefixes, and which previews are actually wired in.
Not checked here: whether the graphs run on your machine, actual VRAM use, speed, output quality, model licensing for commercial use, or the accuracy of any benchmark number. No inference was run for this article. Where the video gives a measurement, it is labelled as the video's.
One inherited claim I removed rather than repeated: an earlier version of this post cited a specific composite benchmark score against Qwen Image 2.1. I could not trace that number to the video or the model card, so it is gone. The video's own framing — that BFL claims three first-place results among open-weight models and that this is the vendor's own evaluation — is the honest version.
Getting the files
Everything below is published by this channel. The graphs are free to download; the model weights are separate and carry their own licence.
- Hugging Face — the seven-workflow collection: AI-KSK/flux3-klein-seven-workflows-319 — all seven JSONs, the covers, and a SHA256 manifest. Start here.
- ModelScope (魔搭, China): seven repositories, one per workflow, starting at flux3-klein-base-t2i
- Civitai: one entry per workflow — base T2I, base edit, distilled T2I, distilled edit, multi-reference, bbox layout, A/B comparison
- No local GPU? The same seven graphs are preloaded in a cloud ComfyUI image: 优云智算 / CompShare
- Watch the walkthrough: Bilibili · YouTube
Verdict
Klein's selling point is not that it beats everything. It is that open weights, high-resolution output, editing and reference composition arrive in one 5.6B model that fits on consumer hardware — and the distilled checkpoint is fast enough to explore with.
The caveats are the ones this article spent its length on: reference counts in the shipped graphs are two, not ten; the A/B graph holds no test series; boxes bias layout without masking; and ConditioningZeroOut is not a reference-slot switch. None of that makes the model worse. It just changes what you should expect when you press queue.
Written from a static read of the seven distributed JSON files, the episode subtitles, and the published video metadata. The 28-run comparison is the creator's test series shown in the video; no inference was run while preparing this article. Weights are distributed by Black Forest Labs under their own licence — check it before commercial use.
Resource entry points
- Compshare image used by this episode: https://www.compshare.cn/images/UiBQ2YVeySxF
- Compshare registration (referral code in the link): https://passport.compshare.cn/register?referral_code=A7fTQUYY9lCDFJwA6MMvoq
- Cloud-image index (Notion): https://www.notion.so/2b72459a3ac6808f8282f2c687ed8f52
- AI-KSK RunningHub catalog: https://www.runninghub.ai/zh-cn/user-center/1846601088051884033/userPost?inviteCode=rh-v1111
Top comments (0)