Model Scale Flux2 Klein
Scale Flux 2 Klein's blocks to tune a model that's actually runnable
- model
- MODEL
Flux 2 proper is a 32B model that needs 18–24GB of VRAM even quantized - impressive, but out of reach for most people's daily driver. Flux 2 Klein is the January 2026 size-distilled answer: 9B, Apache 2.0, and genuinely usable on a ~13GB card, which is why it's the Flux 2 most people actually run. Model Scale Flux2 Klein is the block scaler for that model, and it comes with an unusually fine-grained widget layout because Klein's architecture is small enough that per-sub-block control is practical.
The mechanics are standard for this pack: clone the model, match weights by longest prefix, scale by weight × scale. 1.0 = untouched, 0.0 = zeroed, above 1.0 = amplified; everything defaults to 1.0. model in, single MODEL out.
The inputs, mapped to the architecture
Klein is a hybrid transformer - a few dense double-stream blocks up front, then a long single-stream tail - and the widget list mirrors that:
img_in.,time_in.,txt_in.- the input projections. Drastic knobs; leave near 1.0.double_blocks.0–double_blocks.4- the five early blocks where image and text attend jointly. Each is further split into.img_attn/.img_mlp/.txt_attn/.txt_mlp, so you can scale the text path independently of the image path inside the same block. That's a genuinely nice level of control for prompt-adherence tuning: most of the semantic understanding enters through the text-attention path in these blocks.double_stream_modulation_img./double_stream_modulation_txt.- the per-stream modulation projections.single_blocks.0–single_blocks.19- the 20 single-stream blocks, the workhorse tail. These carry most of the output detail; scaling them down "loosens" the render, scaling a middle band up can sharpen detail at the cost of coherence.single_stream_modulation.,final_layer.- the exit path.
What's worth trying
Since Klein is a distilled model - trained to compress the big model's behavior into far fewer steps - it's already tightly tuned, and large scale deviations are more likely to break it than with a bigger, more redundant model. Small nudges are the play: 0.7–1.3 on a region you care about, tested over a few seeds. A popular experiment for the "weak prompt adherence" complaints that followed Klein's launch is boosting the txt_attn/txt_mlp sub-blocks in the double-stream section - more text signal per token, at the cost of some speed. Whether that's a real win is exactly the thing you can now test in a graph instead of arguing about on Reddit.
Install
Search Easygoing in the ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/easygoing0114/ComfyUI-easygoing-nodes.git
Restart ComfyUI. No pip extras; requires a ComfyUI build with the V3 node API.
Where people get burned
The sub-block widgets assume Klein's standard module layout - if you're loading a heavily fused or otherwise modified Klein, the prefixes may not line up, and silent no-op sliders are the symptom. Check with Key Name Inspector before trusting results. And remember the scale is live-in-graph only: save the workflow, or run it through the pack's save-with-original pair if you want a persistent file.
Inputs (53)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| img_in. | FLOAT | 1.000–2 | — |
| time_in. | FLOAT | 1.000–2 | — |
| txt_in. | FLOAT | 1.000–2 | — |
| double_blocks.0. | FLOAT | 1.000–2 | — |
| double_blocks.0.img_attn. | FLOAT | 1.000–2 | — |
| double_blocks.0.img_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.0.txt_attn. | FLOAT | 1.000–2 | — |
| double_blocks.0.txt_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.1. | FLOAT | 1.000–2 | — |
| double_blocks.1.img_attn. | FLOAT | 1.000–2 | — |
| double_blocks.1.img_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.1.txt_attn. | FLOAT | 1.000–2 | — |
| double_blocks.1.txt_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.2. | FLOAT | 1.000–2 | — |
| double_blocks.2.img_attn. | FLOAT | 1.000–2 | — |
| double_blocks.2.img_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.2.txt_attn. | FLOAT | 1.000–2 | — |
| double_blocks.2.txt_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.3. | FLOAT | 1.000–2 | — |
| double_blocks.3.img_attn. | FLOAT | 1.000–2 | — |
| double_blocks.3.img_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.3.txt_attn. | FLOAT | 1.000–2 | — |
| double_blocks.3.txt_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.4. | FLOAT | 1.000–2 | — |
| double_blocks.4.img_attn. | FLOAT | 1.000–2 | — |
| double_blocks.4.img_mlp. | FLOAT | 1.000–2 | — |
| double_blocks.4.txt_attn. | FLOAT | 1.000–2 | — |
| double_blocks.4.txt_mlp. | FLOAT | 1.000–2 | — |
| double_stream_modulation_img. | FLOAT | 1.000–2 | — |
| double_stream_modulation_txt. | FLOAT | 1.000–2 | — |
| single_blocks.0. | FLOAT | 1.000–2 | — |
| single_blocks.1. | FLOAT | 1.000–2 | — |
| single_blocks.2. | FLOAT | 1.000–2 | — |
| single_blocks.3. | FLOAT | 1.000–2 | — |
| single_blocks.4. | FLOAT | 1.000–2 | — |
| single_blocks.5. | FLOAT | 1.000–2 | — |
| single_blocks.6. | FLOAT | 1.000–2 | — |
| single_blocks.7. | FLOAT | 1.000–2 | — |
| single_blocks.8. | FLOAT | 1.000–2 | — |
| single_blocks.9. | FLOAT | 1.000–2 | — |
| single_blocks.10. | FLOAT | 1.000–2 | — |
| single_blocks.11. | FLOAT | 1.000–2 | — |
| single_blocks.12. | FLOAT | 1.000–2 | — |
| single_blocks.13. | FLOAT | 1.000–2 | — |
| single_blocks.14. | FLOAT | 1.000–2 | — |
| single_blocks.15. | FLOAT | 1.000–2 | — |
| single_blocks.16. | FLOAT | 1.000–2 | — |
| single_blocks.17. | FLOAT | 1.000–2 | — |
| single_blocks.18. | FLOAT | 1.000–2 | — |
| single_blocks.19. | FLOAT | 1.000–2 | — |
| single_stream_modulation. | FLOAT | 1.000–2 | — |
| final_layer. | FLOAT | 1.000–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |