Magic LoRA Loader (CRT)
A LoRA loader that merges, stacks, and hands you the merged weights
- model
- clip
- MODEL
- CLIP
- merged_lora
- lora_stack_info
LoRA loading in ComfyUI is a stack of LoraLoaderModelOnly nodes with hardcoded strengths, and stacking more than a couple gets painful fast - especially when the LoRA was trained for a model family the stock loader doesn't know about yet. Magic LoRA Loader (CRT) is the pack's take on fixing both: a single node that takes model + CLIP and any number of LoRA inputs, applies them with fine control, and - the party trick - can hand you the merged LoRA weights as an output you can save to disk.
How it works
It's built on the standard LoraLoader underneath, but with a dynamic input surface: drop in as many LoRA wires as you like and each one gets its own strength control. Beyond that there are two things that matter:
- A global wet/dry mix on the whole stack, so you can load several LoRAs and tune their combined effect in one place instead of touching every strength.
- Per-block weight control. The loader can apply different weights per block group (
double,single,transformer,layers, and so on) - which is how people get clean merges on models like Flux 2 Klein, LTX 2.3, Z-Image Turbo, WAN 2.2, ERNIE, Ideogram 4, and Krea 2 Turbo. A model-family selector tells it whose block layout it's working with; that's the part that lets it handle LoRAs the core loader still doesn't know about.
The outputs
MODEL/CLIP- the patched model and clip, wired onward into your sampler.merged_lora- the merged weights, but only computed when the socket is actually connected (the node checks the graph for that). That means zero overhead in the normal case.lora_stack_info- a string describing what was applied, handy for logging or debugging a merge.
The merged_lora output exists to feed the pack's Magic Save Merged LoRA (CRT) node, which bakes the merged delta to a .safetensors file - the fast path to turning a good multi-LoRA stack into a single file you can reuse without the whole graph.
Why it's conditional
This one registers only if its imports succeed - the README lists it (and its save sibling) as conditional nodes. If you installed the pack and the node isn't in your menu, check that ComfyUI's own LoraLoader (via nodes.py) is importable in your environment; that's the dependency the loader leans on.
Gotchas
- Dynamic inputs can hide. The node's sockets appear as you wire them; if a LoRA doesn't show up, look for the
model_typeselector matching your model family. - Wet is global, blocks are per-LoRA. Mixing both is powerful but easy to lose track of - log
lora_stack_infowhen you're iterating. - Merging has a cache gotcha. When
merged_lorais wired, the node forces a re-run (never serves a stale cached merge) - that's by design, so don't be surprised by the re-execution cost.
Install CRT-Nodes via ComfyUI Manager (CRT-Nodes) or git clone https://github.com/plugcrypt/CRT-Nodes.git into custom_nodes, install requirements.txt, restart.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| modelopt | MODEL | — | |
| clipopt | CLIP | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| CLIP | CLIP | — |
| merged_lora | MERGED_LORA | — |
| lora_stack_info | STRING | — |