Nodes/Realtime LoRA Trainer/Krea 2 Analyzer + Selective Loader V2
ComfyUI Node

Krea 2 Analyzer + Selective Loader V2

Don't re-train that Krea 2 LoRA — just mute the blocks that are fighting you

By shootthesound·Created 10 months ago·Updated 2 months ago· 568
Krea 2 Analyzer + Selective Loader V2
  • model
  • positive
  • negative
  • model
  • positive
  • negative
  • analysis
  • analysis_json
  • weights_output
◄lora_name▾►
◄strength1.00►
◄presetDefault►
◄block_0true►
◄block_0_str1.00►
◄block_1true►
◄block_1_str1.00►
◄block_2true►
◄block_2_str1.00►
◄block_3true►
◄block_3_str1.00►
◄block_4true►
◄block_4_str1.00►
◄block_5true►
◄block_5_str1.00►
◄block_6true►
◄block_6_str1.00►
◄block_7true►
◄block_7_str1.00►
◄block_8true►
◄block_8_str1.00►
◄block_9true►
◄block_9_str1.00►
◄block_10true►
◄block_10_str1.00►
◄block_11true►
◄block_11_str1.00►
◄block_12true►
◄block_12_str1.00►
◄block_13true►
◄block_13_str1.00►
◄block_14true►
◄block_14_str1.00►
◄block_15true►
◄block_15_str1.00►
◄block_16true►
◄block_16_str1.00►
◄block_17true►
◄block_17_str1.00►
◄block_18true►
◄block_18_str1.00►
◄block_19true►
◄block_19_str1.00►
◄block_20true►
◄block_20_str1.00►
◄block_21true►
◄block_21_str1.00►
◄block_22true►
◄block_22_str1.00►
◄block_23true►
◄block_23_str1.00►
◄block_24true►
◄block_24_str1.00►
◄block_25true►
◄block_25_str1.00►
◄block_26true►
◄block_26_str1.00►
◄block_27true►
◄block_27_str1.00►
◄other_weightstrue►
◄other_weights_str1.00►
◄lora_path_opt—►
◄schedule_presetCustom►
◄strength_schedule►
◄save_refined_lorafalse►
◄save_path►
◄save_filename►
◄block_weights_string►

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_opt from an analyzer/trainer to override the dropdown entirely.
  • preset - the fastest way in. Late Only (21-27) and Mid-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 _str strength, 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:strength pairs, so 0:.2,.5:.8,1:1.0 ramps 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_weights will 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_lora writes 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.

Categoryloaders/lora

Inputs (71)

NameTypeDefaultDescription
modelMODEL—
positiveCONDITIONINGPositive conditioning from CLIP encode
negativeCONDITIONINGNegative conditioning from CLIP encode
lora_nameCOMBOLoRA file to load and analyze
strengthFLOAT1.00-10–10Overall LoRA strength (ignored when using schedule)
presetCOMBODefaultQuick preset selection. Individual toggles below override when changed.
block_0BOOLEANtrue—
block_0_strFLOAT1.00-5–5—
block_1BOOLEANtrue—
block_1_strFLOAT1.00-5–5—
block_2BOOLEANtrue—
block_2_strFLOAT1.00-5–5—
block_3BOOLEANtrue—
block_3_strFLOAT1.00-5–5—
block_4BOOLEANtrue—
block_4_strFLOAT1.00-5–5—
block_5BOOLEANtrue—
block_5_strFLOAT1.00-5–5—
block_6BOOLEANtrue—
block_6_strFLOAT1.00-5–5—
block_7BOOLEANtrue—
block_7_strFLOAT1.00-5–5—
block_8BOOLEANtrue—
block_8_strFLOAT1.00-5–5—
block_9BOOLEANtrue—
block_9_strFLOAT1.00-5–5—
block_10BOOLEANtrue—
block_10_strFLOAT1.00-5–5—
block_11BOOLEANtrue—
block_11_strFLOAT1.00-5–5—
block_12BOOLEANtrue—
block_12_strFLOAT1.00-5–5—
block_13BOOLEANtrue—
block_13_strFLOAT1.00-5–5—
block_14BOOLEANtrue—
block_14_strFLOAT1.00-5–5—
block_15BOOLEANtrue—
block_15_strFLOAT1.00-5–5—
block_16BOOLEANtrue—
block_16_strFLOAT1.00-5–5—
block_17BOOLEANtrue—
block_17_strFLOAT1.00-5–5—
block_18BOOLEANtrue—
block_18_strFLOAT1.00-5–5—
block_19BOOLEANtrue—
block_19_strFLOAT1.00-5–5—
block_20BOOLEANtrue—
block_20_strFLOAT1.00-5–5—
block_21BOOLEANtrue—
block_21_strFLOAT1.00-5–5—
block_22BOOLEANtrue—
block_22_strFLOAT1.00-5–5—
block_23BOOLEANtrue—
block_23_strFLOAT1.00-5–5—
block_24BOOLEANtrue—
block_24_strFLOAT1.00-5–5—
block_25BOOLEANtrue—
block_25_strFLOAT1.00-5–5—
block_26BOOLEANtrue—
block_26_strFLOAT1.00-5–5—
block_27BOOLEANtrue—
block_27_strFLOAT1.00-5–5—
other_weightsBOOLEANtrue—
other_weights_strFLOAT1.00-5–5—
lora_path_optoptSTRINGOptional: Override LoRA selection with a path
schedule_presetoptCOMBOCustomSelect a preset schedule (populates the text field below for editing)
strength_scheduleoptSTRINGStrength schedule: 0:.2,.5:.8,1:1.0 (step:strength pairs). Edit freely after selecting preset.
save_refined_loraoptBOOLEANfalseEnable to save the refined LoRA to disk
save_pathoptSTRINGDirectory to save refined LoRA
save_filenameoptSTRINGFilename for saved LoRA (timestamp auto-appended). Leave empty for auto-name.
block_weights_stringoptSTRINGInput/Output block profile string. Positional text syncs with the UI. String input overrides UI values.

Outputs (6)

NameTypeDescription
modelMODELModel with LoRA applied (filtered by enabled blocks).
positiveCONDITIONINGPositive conditioning (with hooks if using schedule).
negativeCONDITIONINGNegative conditioning (with hooks if using schedule).
analysisSTRINGPer-block analysis showing impact scores.
analysis_jsonSTRINGJSON analysis data for UI coloring.
weights_outputSTRINGBlock profile string output for chaining or reuse.