Nodes/Realtime LoRA Trainer/MiniMax H3 Analyzer + Selective Loader V2
ComfyUI Node

MiniMax H3 Analyzer + Selective Loader V2

Block-by-block control over your MiniMax H3 LoRA — 50 DiT blocks, one node

By shootthesound·Created 9 months ago·Updated 21 days ago· 555
MiniMax H3 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
block_28true
block_28_str1.00
block_29true
block_29_str1.00
block_30true
block_30_str1.00
block_31true
block_31_str1.00
block_32true
block_32_str1.00
block_33true
block_33_str1.00
block_34true
block_34_str1.00
block_35true
block_35_str1.00
block_36true
block_36_str1.00
block_37true
block_37_str1.00
block_38true
block_38_str1.00
block_39true
block_39_str1.00
block_40true
block_40_str1.00
block_41true
block_41_str1.00
block_42true
block_42_str1.00
block_43true
block_43_str1.00
block_44true
block_44_str1.00
block_45true
block_45_str1.00
block_46true
block_46_str1.00
block_47true
block_47_str1.00
block_48true
block_48_str1.00
block_49true
block_49_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

MiniMax H3 is a 33B omni-modal model - text, image, video and audio in one context - which also means its LoRAs are enormous, block-dense, and about as subtle as you'd expect from something that big. When a H3 LoRA is doing 90% of what you want but smearing something on every frame, you don't retrain a 33B model. You reach for this node and tell specific DiT blocks to back off.

It's part of ShootTheSound/comfyUI-Realtime-Lora ("Realtime LoRA Trainer") and it's the V2 combined form: analyze the LoRA's block-level impact and selectively load it, in one node, with strength scheduling on top. The block guide is 50 main packed DiT blocks - 0–12 early, 13–37 middle, 38–49 late - with the token-refiner and other non-block H3 tensors grouped under a single other_weights control.

How it works

Same engine as the other V2 analyzers in the pack, pointed at H3's layout. It loads your LoRA, scores each of the 50 blocks by the magnitude of its weights (the product of the up/down factors, normalized to a 0–100% impact score), then patches only the blocks you leave enabled through ComfyUI's standard LoRA patcher. The score feeds the color-coded checkboxes, so red blocks are the ones doing the heavy lifting - mute those and the subject changes; mute the blue ones and you'll barely notice.

The one H3-specific wrinkle is worth knowing: the node understands both key formats H3 LoRAs actually ship in - native diffusion_model.blocks.* keys and the lora_unet_blocks_* training keys from the Kohya line - so it doesn't care where your LoRA came from. And when you scale a block, it scales only the "up" factor rather than both factors, because ComfyUI multiplies them together at load time; scaling just one keeps the block strength linear and signed, so you can even go negative.

Inputs that matter

  • positive / negative - your conditioning from CLIP encode. They feed back out of the node, carrying scheduling hooks when a schedule is active.
  • preset - 11 of them. Late Only (38-49) and Mid-Late (25-49) are the useful starting points for dialing down an overbaked subject.
  • block_0 through block_49, each with a _str strength, plus other_weights for the token-refiner and strays.
  • strength_schedule - step:strength pairs like 0:.2,.5:.8,1:1.0, or one of the 40+ preset curves if you'd rather not type.

Outputs: model, positive, negative, and the three strings - analysis (readable breakdown), analysis_json (UI coloring / downstream loaders), weights_output (block profile for chaining).

Installing it

cd ComfyUI/custom_nodes
git clone https://github.com/ShootTheSound/comfyUI-Realtime-Lora

Restart ComfyUI - or search "Realtime LoRA Trainer" in ComfyUI Manager. This node is a loader, not a trainer, so it needs no additional install: the sd-scripts/Musubi/AI-Toolkit backends are only for the training nodes, and the requirements file is empty beyond what ComfyUI already ships.

Reality check first

H3's open weights sit under the MiniMax H3 Community License, and its Applicable Territory excludes the US, EU, UK and South Korea. If you're in one of those regions, you're not licensed to run the local weights at all, and no node changes that. The hosted Hailuo API remains the licensed path there. Outside the excluded territories, the usual caveats apply: it's a ~33B model, so plan for serious VRAM, and don't trust the hardware floor rumors that predate the release.

Where people get burned

  • Strength scheduling rides on ComfyUI's hook system, and hooks don't work on quantized layers. On fp8/GGUF models the schedule is silently skipped in favor of flat strength - use bf16 if scheduling matters.
  • With a schedule active, the strength field is ignored (it's the fallback when you clear the schedule).
  • A connected block_weights_string overrides every UI toggle. By design, but it will absolutely confuse you later.
  • save_refined_lora bakes your filtered LoRA to disk with a timestamp - great once you've found the fix, a waste of disk while you're still guessing.

Fair warning: with 50 blocks plus scheduling, it's easy to fiddle for an hour and end up back at "all blocks at 1.0." Start with one preset, compare two images, and only then go granular.

Categoryloaders/lora

Inputs (115)

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
block_28BOOLEANtrue
block_28_strFLOAT1.00-5–5
block_29BOOLEANtrue
block_29_strFLOAT1.00-5–5
block_30BOOLEANtrue
block_30_strFLOAT1.00-5–5
block_31BOOLEANtrue
block_31_strFLOAT1.00-5–5
block_32BOOLEANtrue
block_32_strFLOAT1.00-5–5
block_33BOOLEANtrue
block_33_strFLOAT1.00-5–5
block_34BOOLEANtrue
block_34_strFLOAT1.00-5–5
block_35BOOLEANtrue
block_35_strFLOAT1.00-5–5
block_36BOOLEANtrue
block_36_strFLOAT1.00-5–5
block_37BOOLEANtrue
block_37_strFLOAT1.00-5–5
block_38BOOLEANtrue
block_38_strFLOAT1.00-5–5
block_39BOOLEANtrue
block_39_strFLOAT1.00-5–5
block_40BOOLEANtrue
block_40_strFLOAT1.00-5–5
block_41BOOLEANtrue
block_41_strFLOAT1.00-5–5
block_42BOOLEANtrue
block_42_strFLOAT1.00-5–5
block_43BOOLEANtrue
block_43_strFLOAT1.00-5–5
block_44BOOLEANtrue
block_44_strFLOAT1.00-5–5
block_45BOOLEANtrue
block_45_strFLOAT1.00-5–5
block_46BOOLEANtrue
block_46_strFLOAT1.00-5–5
block_47BOOLEANtrue
block_47_strFLOAT1.00-5–5
block_48BOOLEANtrue
block_48_strFLOAT1.00-5–5
block_49BOOLEANtrue
block_49_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.