Lora堆加载器(仅模型)
Stack LoRAs in One Node, Leave Your Prompt Encoder Alone
- 模型
- 模型
The problem this solves
LoRA stacking is normal now: a style LoRA, a character LoRA, a cleanup LoRA, all live in the same graph. Doing that by chaining a standard LoRA loader per adapter works fine right up until you're twelve nodes deep, can't tell which one is doing the good thing, and can't switch one off without rewiring. The community's answer is one stack node with a list of entries and per-entry weights - rgthree's Power Lora Loader, the component that actually travels in conversation about that pack.
It's the same idea from a much smaller, Chinese-authored pack, with two twists: a thumbnail browser so you pick LoRAs by looking at them, and a "model only" switch - it patches the diffusion model and nothing else.
The node is Lora堆加载器(仅模型) in the 💝可视化加载器 category. Stack loaders come in a pair in this pack; this is the one that ignores CLIP.
Why "model only" is a real choice
A LoRA file normally holds two sets of patches: one for the diffusion model, one for the text encoder. The model patch changes what the network paints. The CLIP patch changes how your prompt is read. A normal LoRA loader does both at once, which is why dropping a style LoRA to 0.6 can quietly reshape your prompt response as well as your brushstrokes.
Cutting the CLIP half out keeps your prompt behaving the way you wrote it - reducing prompt interference, in the pack's own words. It's most obviously useful when your text encoder isn't even in this graph: plenty of modern setups split a diffusion-only model from its own text encoder path, and a loader that insists on a CLIP input is just an awkward node to satisfy. This one takes a MODEL and hands back a MODEL.
How it works under the hood
The stack lives in a hidden string widget called lora_stack_config, holding a JSON array. The frontend owns that widget: click a card in the grid and it appends an entry, then you set that entry's strength_model in the list underneath. On execution the node parses the JSON, walks the array in order, and for each entry calls ComfyUI's own load_lora_for_models(model, None, lora, strength_model, 0) - that None and trailing 0 are the entire "model only" mechanism. Entries at strength 0 are skipped, and LoRA files go through a 10-entry cache so re-runs don't hit disk again.
Inputs and outputs, in full:
- 模型 (MODEL) - your incoming model.
- lora_stack_config (STRING, default
[]) - the JSON the visual UI writes. Usually you never touch it. - 模型 (MODEL) out - wire it into your sampler's model input, or into another adapter node.
You can just type the JSON
The UI hides it, but the code doesn't care: lora_stack_config is an ordinary string, so you can paste a stack by hand - handy for copying a recipe between workflows:
[{"name": "style/watercolor_v3.safetensors", "strength_model": 0.7},
{"name": "chars/mira_likeness.safetensors", "strength_model": 0.85}]
name has to be the loras-list path exactly as ComfyUI sees it, subfolders and all. The clip-strength key the UI writes alongside it belongs to this pack's other stack node; here it's ignored.
Order matters: heavier, structural LoRAs first, fine adjustments later. So do weights - 0.5–0.8 per adapter is usually closer than 1.0.
Install and setup
Via ComfyUI Manager, search ComfyUI-Model-Visual-Loader, or:
cd ComfyUI/custom_nodes
git clone https://github.com/a63976659/ComfyUI-Model-Visual-Loader.git
# restart ComfyUI
Dependencies are Pillow (thumbnails) and aiohttp, which ships with the ComfyUI server. Give each LoRA a same-named preview image next to it and the grid picks it up, scaled to a 512px thumbnail on first scan.
Where people get burned
Failures are silent. If a LoRA got renamed or an entry points at a file that no longer exists, the node prints a line to the console and moves on. Your render completes, looking slightly wrong, with no UI warning. Check the console when a stack does nothing.
The JSON outlives the files. Rename or move a LoRA and the hidden config still references the old path: the card is there, the weight is set, nothing happens. Re-add it from the grid.
The interactive grid needs the legacy canvas. These loaders are DOM widgets on top of the ComfyUI canvas, and DOM-heavy nodes are exactly what ComfyUI's Nodes 2.0 frontend has broken before - rgthree's Power Lora Loader ended up with stacked text fields and unopenable properties under it. Blank or dead grid? Suspect the frontend first, not the pack.
Quantized models change the math. Applying a stack to a GGUF model means every layer gets dequantized, patched and requantized, which can slow things down sharply; fp8 models don't pay that tax. If your stack is crawling and the base model is a Q4, that's why.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| 模型 | MODEL | — | |
| lora_stack_config | STRING | [] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| 模型 | MODEL | — |