PM KREA 2 Blocks
Per-block weights, txtfusion included
- block_definition
Krea 2 is the 12B diffusion transformer that took the open ecosystem by storm in 2026 - the "train on Raw, run on Turbo" base that finally gave people something to fine-tune that wasn't a 50GB Flux. Its LoRAs have an unusual anatomy for a DiT: the main transformer stack (diffusion_model.blocks.N) plus two extra subsystems - the txtfusion text-fusion stream and a separate txtmlp - that a naive block-weight tool would either ignore or mangle. PM KREA 2 Blocks is the node in the LoRA Power-Merger pack that knows that anatomy.
Like its sibling PM FLUX.2.Klein Blocks, it's a BlockDefinition producer, not a standalone tool. You set the weights, it outputs a block_definition, and that feeds into PM Block Selector, which binds the recipe to a specific LoRA in your stack before the merge. On its own it's just a config sitting on the canvas.
The inputs that matter
blocks_weights- comma-separated per-group weights for the mainblocks.Nstack, left to right. The tooltip is explicit that missing groups default to 1.0, which is the thing that'll trip you up later.blocks_group_size- default 5. How many consecutive transformer blocks share one weight. At 5 you're grouping Krea 2's roughly 40-odd blocks into manageable chunks; drop it to 1 for per-block control.txtfusion_layerwise- single weight for thetxtfusion.layerwise_blocksstream (default 1.0, range 0–10).txtfusion_refiner- single weight fortxtfusion.refiner_blocks.txtmlp- single weight for thetxtmlppathway.
Notice the asymmetry: the main stack is a grouped, indexed category, while txtfusion and txtmlp are single scalar "pathways." That matches the architecture - the text-fusion blocks are where Krea 2 merges in its Qwen3-VL conditioning features, and you almost always want them either at full strength or fully out, not per-block fiddled.
The single output, block_definition, goes into PM Block Selector's block_definition input.
How the weights actually apply
The definition matches layer keys against a regex for blocks.N, buckets each index into a group (group = N // group_size), and looks up that group's weight - the txtfusion/txtmlp keys get their pathway scalar instead. The (?:^|\.)blocks\. pattern deliberately won't match double_blocks or single_blocks, so this definition is safely Krea 2-specific and won't cross-fire on a Flux LoRA. During decompose, each weight scales that LoRA's up factor linearly (never up and down both, which would square it), and a 0 weight drops that block's contribution to the merge entirely.
Installing it
Same pack, same drill. ComfyUI Manager → search "LoRA Power-Merger", or:
cd ComfyUI/custom_nodes
git clone https://github.com/larsupb/LoRA-Merger-ComfyUI
cd LoRA-Merger-ComfyUI
pip install -r requirements.txt
That pulls mergekit from Arcee AI's git repo plus lxml - no model downloads, nothing to configure beyond a restart. Then wire PM KREA 2 Blocks → PM Block Selector → PM LoRA Stack Decompose, with your Krea 2 LoRA at the selector's index in the stack.
Where people get burned
Two things, both easy to hit. First, the missing-groups trap again: blocks_weights: "1, 0.5" with a group size of 5 only tames blocks 0–9; everything from block 10 on stays at full strength. If your merge looks barely different, count your groups before you blame the node. Second, the architecture mismatch: run this definition against a non-Krea LoRA and every key resolves to 1.0 - a silent no-op with the definition's model: "KREA2" never checking the actual stack. The console log line selection now covers N LoRA(s) from Block Selector is your confirmation that something actually matched.
Worth remembering the broader Krea 2 context too: Raw is the undistilled base you train on, Turbo the distilled one you run - the community's standard trick is Raw with the Turbo LoRA at ~0.6 weight. Block weighting slots in after that choice, letting you keep a character LoRA's signature blocks prominent while the style LoRA recedes. For a single LoRA and no merge, it's overkill; for stacking multiple Krea 2 LoRAs, it's the difference between blending and surgery.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| blocks_group_size | INT | 51–128 | — |
| blocks_weights | STRING | 1.0 | Comma-separated per-group weights, left-to-right. Missing groups default to 1.0. |
| txtfusion_layerwise | FLOAT | 1.000–10 | — |
| txtfusion_refiner | FLOAT | 1.000–10 | — |
| txtmlp | FLOAT | 1.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| block_definition | BlockDefinition | — |