Nodes/Sage Utils/Lora Stack
ComfyUI Node

Lora Stack

The stackable LoRA brick — chain these and load ten at once

By arcum42·Created 2 years ago·Updated 22 days ago· 33
Lora Stack
  • lora_stack
  • lora_stack
enabledfalse
lora_name
model_weight1.00
clip_weight1.00

ComfyUI's stock LoraLoader handles one LoRA per node, which is fine until you're running three or four - then it's a pile of loader nodes and a tangle of model/clip wires. The community answer is the "LoRA stack": a single chain where each node adds one LoRA to a growing list, and one loader at the end applies them all. Lora Stack is Sage Utils' brick in that system, and it's deliberately compatible with the lora_stack format other popular packs use - the node's own description says so, which is a nice piece of cross-pack politeness.

So it's less a standalone tool and more a building block: one node per LoRA, chained, then loaded.

How it works

Pick a LoRA from the lora_name dropdown (it lists whatever's in your models/loras folder) and set its weights. The node appends it to a lora_stack - if you feed an existing stack into the optional lora_stack input, it chains onto that; if not, it starts a new stack of one. Chain five of these nodes and you've described five LoRAs in one list. The pack's Lora Stack Loader then reads the whole stack and applies it to your model, and since the format is shared, other packs' stack loaders can read Sage-built stacks too.

The enabled toggle is the quietly brilliant bit. Every stack entry has one, defaulting to off. Flip it and the LoRA is simply skipped at load time - which means you can keep ten LoRAs wired into the graph and A/B test combinations by toggling booleans, no rewiring, no removing nodes. That's the workflow-saver feature people don't realize they want until they have it.

The inputs that matter

  • enabled - on/off for this entry. Start here when experimenting.
  • lora_name - which LoRA, from your models folder.
  • model_weight - strength applied to the model (default 1.0; range −100 to 100, so negative weights are on the table).
  • clip_weight - strength applied to the CLIP branch (default 1.0). For many LoRAs you can leave this equal to model weight; some style LoRAs benefit from a separate CLIP weight.
  • lora_stack - optional; the previous stack to append to.

Output: lora_stack, the combined list.

Wiring it up

The standard pattern:

Lora Stack (chara) ─┐
Lora Stack (style) ─┼─▶ Lora Stack Loader ─▶ model/clip
Lora Stack (pose) ─┘

Which is to say: chain the Lora Stack nodes together, end the chain at a stack loader, and the loader gives you the patched model and clip for your sampler. Sage's README also shows feeding the stack into its metadata construction nodes so the LoRA list lands in your saved image metadata - one graph, both the generation and the record of what ran.

Installing

Part of Sage Utils:

cd ComfyUI/custom_nodes
git clone https://github.com/arcum42/ComfyUI_SageUtils.git
cd ComfyUI_SageUtils && pip install -r requirements.txt

Restart ComfyUI, or search "Sage Utils" in ComfyUI Manager. No extra models beyond the LoRAs themselves.

Where people get tripped up

Two things. First, enabled defaults to false - so a freshly added stack entry does nothing until you flip it on. People wire up a whole stack, run, see no LoRA effect, and blame the wrong node. Second, the stack is order-dependent: chained entries apply in order, and LoRA application isn't commutative in practice, so the position of a brick in the chain can change the result. If an output looks off, try reordering before you touch weights.

CategorySage Utils/lora

Inputs (5)

NameTypeDefaultDescription
enabledBOOLEANfalseEnable or disable this LoRA stack entry.
lora_nameCOMBOChoose a LoRA model to add.
model_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
lora_stackoptLORA_STACKExisting LoRA stack to append to.

Outputs (1)

NameTypeDescription
lora_stackLORA_STACKCombined LoRA stack output.