Nodes/multi-lora-stack/Multi LoRA Stack
ComfyUI Node

Multi LoRA Stack

Multi LoRA Stack ends the loader chain

By ShmuelRonen·Created about a year ago·Updated about a year ago· 13
Multi LoRA Stack
  • model
  • clip
  • MODEL
  • CLIP
lora_stack[]

If you've ever wanted to run a character LoRA and a style LoRA at once, you know the ritual: three LoraLoader boxes in a row, each with its own dropdown and strength, and the moment you want to try a different combination you're dragging wires and squinting at a row of nearly identical nodes. Multi LoRA Stack collapses that chain into one node with an "Add LoRA" button, a dropdown per slot, a strength slider, and a per-slot on/off toggle. It's exactly the kind of quality-of-life node that doesn't look exciting until you've stacked your fourth LoRA and the graph starts to look like tangled spaghetti.

What it is

Multi LoRA Stack is a loaders-category node that takes your base MODEL and CLIP, applies a list of LoRAs in order, and hands back the patched pair. It ships in the multi-lora-stack pack, which the author bills as "a complete replacement for rgthree's Power Lora Loader" - and "zero dependencies" is genuinely true this time. The whole backend is one Python file with no requirements.txt, no model downloads, nothing beyond stock ComfyUI. That's the appeal: it works on any install without dragging in a framework.

How it works

Here's the part people don't expect: the node you see is mostly frontend. A JavaScript extension builds the dynamic slots and buttons, and every change you make gets serialized into a single JSON string held in the node's lora_stack input, shaped like:

[
  {"on": true, "lora": "style.safetensors", "strength": 1.0},
  {"on": false, "lora": "character.safetensors", "strength": 0.8}
]

When you queue, the backend parses that JSON and walks the list in order, calling ComfyUI's built-in LoraLoader.load_lora() for each enabled slot and threading the output of one into the input of the next. So stacking order matters - later LoRAs apply on top of earlier ones, exactly like a manual chain of loaders. Slots that are toggled off, set to "None", or at zero strength are skipped silently.

The inputs that matter

There are only three, and you'll realistically set two.

  • model (MODEL) - your base model from a Checkpoint or UNET Loader.
  • clip (CLIP) - the text encoder that goes with that model.
  • lora_stack (STRING) - the JSON config above. The UI maintains this for you, so you usually won't touch it. Bonus: because it's a plain widget, your whole stack saves with the workflow and travels inside the .json.

Per-slot, the one you'll actually fiddle with is strength (a number slider, -2.0 to 2.0). Note that the full version applies the same strength to model and clip - the backend will honor a separate strengthTwo if you hand-edit the JSON, but the UI doesn't expose it.

Outputs: MODEL and CLIP, ready to feed your conditioning or sampler. One output wire now carries the entire stack.

Install

Via ComfyUI Manager, search "multi-lora-stack". Or the manual way:

cd ComfyUI/custom_nodes/
git clone https://github.com/ShmuelRonen/multi-lora-stack.git

Restart ComfyUI, then find Multi LoRA Stack under loaders. The README's file-tree section is stale - it claims a separate multi_lora_stack_model_only.py, but both node classes actually live in one file. Doesn't change the install; just don't go hunting for a file that isn't there.

The honest take

It's a "replacement" for Power Lora Loader in the same sense a folding chair is a replacement for a La-Z-Boy. The real Power Lora Loader is a heavyweight: hundreds of community threads, trigger words fetched off CivitAI, a right-click info dialog. This pack is none of that - it's just toggles and strengths, which is honestly all a lot of people need, and it got a real niche when rgthree's nodes started fighting ComfyUI's newer Nodes 2.0 canvas. If you want zero fuss and zero dependencies, it delivers.

Common issues

  • Console spam. The author left debug print()s in, so every run dumps a wall of "✅ Parsed N LoRA configs" to the terminal. Harmless, but it buries real errors - watch the console for the actual stack trace when something fails.
  • Silent failure on bad JSON. If lora_stack holds malformed JSON, the node just passes the model through unchanged. You get an image with no LoRA applied and no error. If your stack suddenly does nothing, check the console: the debug output shows exactly what it parsed.
  • Empty dropdown. The dropdown list comes from the server's object info, so your .safetensors files need to be in models/loras/ and ComfyUI restarted after you add new ones. If the list looks wrong, test the LoRA in a stock LoraLoader first.
  • Stacking limits aren't the node's fault. LoRA effects don't add linearly; past two or three strong ones, output quality gets weird fast. The community sweet spot is a style + character + concept combo with weights around 0.5–0.8. This node won't save you from that - nothing will.
Categoryloaders

Inputs (3)

NameTypeDefaultDescription
modelMODEL
clipCLIP
lora_stackSTRING[]

Outputs (2)

NameTypeDescription
MODELMODEL
CLIPCLIP