Doss Multi-LoRA Loader
Stop daisy-chaining LoRA loaders — this node stacks them in one place
- model
- clip
- model
- clip
The stock ComfyUI way to use more than one LoRA is to chain Load LoRA nodes in a ladder - model out of node one into node two, out of node two into node three, and so on. That works, right up until you're stacking a character, a style, and a slider for the fifth workflow in a row and half your canvas is vertical wiring. The Doss Multi-LoRA Loader (from the Doss Node Suite pack) replaces the ladder with one node holding an ordered, editable list. Add a row, pick a file, set weights, run. The whole stack is applied to your model in one pass.
If you mostly use a single LoRA, you don't need this. If you routinely run two or three at once - and the community absolutely does, LoRAs are built to stack - it's one of those small quality-of-life swaps that makes your workflow graph actually readable again.
How it works
Inside the node you get an "Add LoRA" button that appends a row with an enable checkbox, a dropdown of your installed LoRAs, separate MODEL and CLIP weight fields, and a remove button. Rows apply top to bottom, so the order on screen is the patch order - reordering rows changes the result. There's a Refresh button that re-reads the folder list if you drop new files into models/loras while ComfyUI is running.
What actually executes is boring in the good way: the node parses the row list and calls ComfyUI's native safe-loading path - comfy.utils.load_torch_file(..., safe_load=True) plus comfy.sd.load_lora_for_models - once per enabled row, chaining the result into the next. It even keeps a small LRU cache keyed on file path and file size/mtime, so files you've already loaded don't get re-read from disk on every queue. No third-party dependencies, no model downloads, nothing to download for the pack itself.
One detail worth knowing: your stack lives as versioned JSON in a hidden lora_stack_json widget, which is how the node persists it inside the workflow file. The tooltip's advice is correct - edit it with the node's controls, not by hand. If you open the JSON and mangle it, you'll get a hard error, not a silent fallback.
The inputs and outputs that matter
It's a passthrough pair, the same shape as any single LoRA loader:
model(MODEL) - in from your checkpoint/UNET loader, out patched.clip(CLIP) - in from your CLIP loader, out patched.
Outputs feed straight into your sampler's model and positive/negative conditioning paths. The only thing the node actually requires beyond those is the hidden lora_stack_json string, which comes preloaded with an empty stack. Wire model and clip in, add your rows, and you're done.
Installing it
Via ComfyUI Manager, search "Doss" and install the Doss Node Suite, then restart. Or clone it manually:
cd <ComfyUI installation>\custom_nodes
git clone https://github.com/JamesDanielDoss/Doss-Node-Suite.git ComfyUI-Doss-Node-Suite
Restart ComfyUI and look for Doss Multi-LoRA Loader under the ⚡ Doss Node Suite category.
Where people get burned
- Architecture mismatch is not a bug you can fix here. An Illustrious LoRA won't run on Flux no matter how you stack it. The loader applies whatever you give it; it's on you to match the checkpoint family, same as any other LoRA node.
- Weight 1.00 on everything is usually too strong. LoRA defaults are often overpowering; 0.5–0.8 is the common working range. Separate MODEL and CLIP weights let you knock the style influence down while keeping the subject intact.
- Order matters. Row order is patch order, and adjacent LoRAs can fight. If a stack looks washed out, try flipping rows before you blame individual weights.
- It fails closed. Missing files, malformed stack JSON, an unsupported stack version, or more than 32 entries raise an error instead of silently substituting a different file - which is a feature, honestly, given how many nodes quietly pretend a failed LoRA applied.
Worth noting for context: this competes with rgthree's Power Lora Loader, the community heavyweight, which also fetches trigger words from CivitAI. This one doesn't do that - no trigger-word reading, no CivitAI lookups, just a clean ordered stack. If that's all you need, it's a tidy, dependency-free way to get it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| lora_stack_json | STRING | {"version":2,"entries":[]} | Persisted Doss Multi-LoRA stack. Edit it with the controls inside the node. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |