Krea 2 Analyzer + Selective Loader V2
Don't re-train that Krea 2 LoRA — just mute the blocks that are fighting you
- model
- positive
- negative
- model
- positive
- negative
- analysis
- analysis_json
- weights_output
Krea 2 is the rare base model where training just works - people are knocking out usable style LoRAs from a couple of dozen images at 1250 steps, and that's great until a LoRA is 90% perfect and the last 10% is wrecking your faces. That's exactly the situation this node exists for. It analyzes which of the 28 main blocks in your Krea 2 LoRA actually carry the weight, then lets you switch individual blocks off or scale them up, all inside your workflow. The fix for an overcooked subject is usually not a longer or shorter training run - it's telling a couple of blocks to shut up.
It comes from ShootTheSound/comfyUI-Realtime-Lora ("Realtime LoRA Trainer"), the same pack as the trainer nodes. This one is the V2 combined analyzer + loader, which means it replaces a two-node setup with one. If you train Krea 2 on Raw and apply on Turbo like everyone recommends, drop this in the sampler chain and you're done.
How it works
LoRA knowledge isn't spread evenly across a model. In a 12B DiT like Krea 2, some SingleStreamBlocks learn the subject's identity, some the style, some mostly noise. The node loads your LoRA file directly, scores each block by the magnitude of its weights (it's the product of the up and down LoRA factors, normalized to a 0–100% impact figure), and then - this is the whole trick - only patches the blocks you leave enabled, using ComfyUI's normal LoRA patcher.
The impact score is what the color-coded checkboxes are showing you: blue is low impact, red is "this block is doing most of the work." Disable a low-impact block and you barely notice; disable a red one and the character changes.
Inputs that matter
- positive / negative - your conditioning, straight from CLIP encode. You wire these in because strength scheduling is done with ComfyUI hooks attached to the conditioning.
- lora_name - pick the LoRA. Or connect
lora_path_optfrom an analyzer/trainer to override the dropdown entirely. - preset - the fastest way in.
Late Only (21-27)andMid-Late (14-27)are the ones you'll actually use; the other 9 cover the obvious combinations. - block_0 through block_27, each with a
_strstrength, plus other_weights - the non-block Krea 2 linears (first, last.linear, tmlp, txtmlp, tproj, txtfusion) that don't map to a SingleStreamBlock. - strength_schedule - the fun one. It takes
step:strengthpairs, so0:.2,.5:.8,1:1.0ramps the whole LoRA over the generation. There are 40+ presets (bell curves, pulses, fades) if you don't want to type.
Outputs: model, positive, negative (the latter two carry hooks when you're scheduling), plus analysis (human-readable), analysis_json (feeds the UI coloring, or a downstream loader), and weights_output for chaining a block profile into another node.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/ShootTheSound/comfyUI-Realtime-Lora
Restart ComfyUI. ComfyUI Manager also has it if you search "Realtime LoRA Trainer". Here's the part people get wrong: this node needs no extra installation at all. The heavy training backends (sd-scripts, Musubi Tuner, AI-Toolkit) are only for the trainer nodes; the analyzers and loaders just use torch. You do need the Krea 2 model files themselves in your models folder - the Qwen3-VL text encoder and Qwen-Image VAE trip up more new users than anything else.
Where people get burned
- Scheduling uses ComfyUI's hook system, and hooks crash on quantized layers. If your model is fp8 or GGUF, the node silently skips the schedule and applies a flat strength instead. Use bf16 for scheduled runs.
- When a schedule is active, the strength field is ignored. Set it anyway - it's the fallback.
- Everything off except
other_weightswill do weird things to your output. Disable blocks in ranges, not everything at once. - If you plug a string into block_weights_string, it overrides every toggle you set in the UI. Easy way to confuse yourself later.
save_refined_lorawrites the filtered LoRA to disk with a timestamp - handy for baking a fix permanently, pointless if you're still iterating.
One honest take: block-level tuning is a scalpel, not a cure-all. If a LoRA is broken everywhere, no block filter fixes it - lower the strength or go retrain. But for the classic "subject's great, background's a mess" case, this is the fastest fix in the pack.
Inputs (71)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | Positive conditioning from CLIP encode | |
| negative | CONDITIONING | Negative conditioning from CLIP encode | |
| lora_name | COMBO | LoRA file to load and analyze | |
| strength | FLOAT | 1.00-10–10 | Overall LoRA strength (ignored when using schedule) |
| preset | COMBO | Default | Quick preset selection. Individual toggles below override when changed. |
| block_0 | BOOLEAN | true | — |
| block_0_str | FLOAT | 1.00-5–5 | — |
| block_1 | BOOLEAN | true | — |
| block_1_str | FLOAT | 1.00-5–5 | — |
| block_2 | BOOLEAN | true | — |
| block_2_str | FLOAT | 1.00-5–5 | — |
| block_3 | BOOLEAN | true | — |
| block_3_str | FLOAT | 1.00-5–5 | — |
| block_4 | BOOLEAN | true | — |
| block_4_str | FLOAT | 1.00-5–5 | — |
| block_5 | BOOLEAN | true | — |
| block_5_str | FLOAT | 1.00-5–5 | — |
| block_6 | BOOLEAN | true | — |
| block_6_str | FLOAT | 1.00-5–5 | — |
| block_7 | BOOLEAN | true | — |
| block_7_str | FLOAT | 1.00-5–5 | — |
| block_8 | BOOLEAN | true | — |
| block_8_str | FLOAT | 1.00-5–5 | — |
| block_9 | BOOLEAN | true | — |
| block_9_str | FLOAT | 1.00-5–5 | — |
| block_10 | BOOLEAN | true | — |
| block_10_str | FLOAT | 1.00-5–5 | — |
| block_11 | BOOLEAN | true | — |
| block_11_str | FLOAT | 1.00-5–5 | — |
| block_12 | BOOLEAN | true | — |
| block_12_str | FLOAT | 1.00-5–5 | — |
| block_13 | BOOLEAN | true | — |
| block_13_str | FLOAT | 1.00-5–5 | — |
| block_14 | BOOLEAN | true | — |
| block_14_str | FLOAT | 1.00-5–5 | — |
| block_15 | BOOLEAN | true | — |
| block_15_str | FLOAT | 1.00-5–5 | — |
| block_16 | BOOLEAN | true | — |
| block_16_str | FLOAT | 1.00-5–5 | — |
| block_17 | BOOLEAN | true | — |
| block_17_str | FLOAT | 1.00-5–5 | — |
| block_18 | BOOLEAN | true | — |
| block_18_str | FLOAT | 1.00-5–5 | — |
| block_19 | BOOLEAN | true | — |
| block_19_str | FLOAT | 1.00-5–5 | — |
| block_20 | BOOLEAN | true | — |
| block_20_str | FLOAT | 1.00-5–5 | — |
| block_21 | BOOLEAN | true | — |
| block_21_str | FLOAT | 1.00-5–5 | — |
| block_22 | BOOLEAN | true | — |
| block_22_str | FLOAT | 1.00-5–5 | — |
| block_23 | BOOLEAN | true | — |
| block_23_str | FLOAT | 1.00-5–5 | — |
| block_24 | BOOLEAN | true | — |
| block_24_str | FLOAT | 1.00-5–5 | — |
| block_25 | BOOLEAN | true | — |
| block_25_str | FLOAT | 1.00-5–5 | — |
| block_26 | BOOLEAN | true | — |
| block_26_str | FLOAT | 1.00-5–5 | — |
| block_27 | BOOLEAN | true | — |
| block_27_str | FLOAT | 1.00-5–5 | — |
| other_weights | BOOLEAN | true | — |
| other_weights_str | FLOAT | 1.00-5–5 | — |
| lora_path_optopt | STRING | Optional: Override LoRA selection with a path | |
| schedule_presetopt | COMBO | Custom | Select a preset schedule (populates the text field below for editing) |
| strength_scheduleopt | STRING | Strength schedule: 0:.2,.5:.8,1:1.0 (step:strength pairs). Edit freely after selecting preset. | |
| save_refined_loraopt | BOOLEAN | false | Enable to save the refined LoRA to disk |
| save_pathopt | STRING | Directory to save refined LoRA | |
| save_filenameopt | STRING | Filename for saved LoRA (timestamp auto-appended). Leave empty for auto-name. | |
| block_weights_stringopt | STRING | Input/Output block profile string. Positional text syncs with the UI. String input overrides UI values. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Model with LoRA applied (filtered by enabled blocks). |
| positive | CONDITIONING | Positive conditioning (with hooks if using schedule). |
| negative | CONDITIONING | Negative conditioning (with hooks if using schedule). |
| analysis | STRING | Per-block analysis showing impact scores. |
| analysis_json | STRING | JSON analysis data for UI coloring. |
| weights_output | STRING | Block profile string output for chaining or reuse. |