Nodes/Sage Utils/Lora Stack (x3)
ComfyUI Node

Lora Stack (x3)

Three LoRAs in one node, and a stack format other packs respect

By arcum42·Created 2 years ago·Updated 22 days ago· 33
Lora Stack (x3)
  • lora_stack
  • lora_stack
enabled_1true
lora_1_name
model_1_weight1.00
clip_1_weight1.00
enabled_2true
lora_2_name
model_2_weight1.00
clip_2_weight1.00
enabled_3true
lora_3_name
model_3_weight1.00
clip_3_weight1.00

Most ComfyUI users have a per-LoRA routine: drag in a LoraLoader, pick a file, set a weight. Do that three times, plus a stack loader, plus wiring, and you've got a mess of spaghetti before you've even started. Lora Stack (x3) collapses three LoRAs into one node, and - the part that actually matters - emits them as a lora_stack that the rest of Sage Utils treats like a first-class object. You toggle entries on or off, dial separate model and clip weights, and hand the whole thing to one loader.

Mechanically it's simple and that's the point. Each of the three slots has enabled, lora_name, model_weight, and clip_weight. When you tick enabled, the node appends that LoRA to the stack; untick it and it's skipped as if it were never there - no need to delete a LoRA to disable it. The optional lora_stack input lets you chain stacks together, so three-slot nodes can daisy-chain into six, nine, or as many as you like. The output is a plain list of (path, model_weight, clip_weight) tuples, which is the same shape the pack's Lora Stack Loader (and its "Model + Lora Stack Loader" sibling) consume.

Here's the detail that makes it worth learning instead of just imitating: the stack isn't locked to Sage Utils. The README is explicit that its lora stacks are "compatible with other node packs that have lora_stacks," and the tuple format is a de facto standard in the ecosystem. So you can build your stack here and feed it to another pack's stack loader if that's what your workflow already uses. Don't count on every pack interchanging perfectly - formats drift - but this is the good-faith version of the idea.

Why two weight fields? Because a LoRA can modify both the UNet/diffusion model and the text encoder (clip), and they're legitimately independent. Most LoRAs want them equal, which is why the "Quick" variant exists - but the ones that don't (some SDXL LoRAs want a weaker clip weight, and certain character LoRAs tune them apart) are exactly why the full version keeps both dials. Defaults are 1.0/1.0, ranges from -100 to 100, step 0.01, which is more headroom than you'll ever want.

Where it slots in: build the stack here, feed it to Lora Stack Loader to get a patched model, and/or feed the same stack into Sage Utils' Construct Metadata so the LoRA names and weights end up in your saved image metadata. One node feeding two pipelines - that's the whole design philosophy of this pack.

Install is the pack standard: ComfyUI Manager (search "Sage Utils") or

cd ComfyUI/custom_nodes
git clone https://github.com/arcum42/ComfyUI_SageUtils.git

then restart. No model downloads; the only hard Python dependency is dynamicprompts. Note the ComfyUI-side requirement: your LoRA dropdowns populate from models/loras, so files you've already dropped there appear automatically.

CategorySage Utils/lora

Inputs (13)

NameTypeDefaultDescription
enabled_1BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_1_nameCOMBOSelect a LoRA model to include in this stack entry.
model_1_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_1_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
enabled_2BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_2_nameCOMBOSelect a LoRA model to include in this stack entry.
model_2_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_2_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
enabled_3BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_3_nameCOMBOSelect a LoRA model to include in this stack entry.
model_3_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_3_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
lora_stackoptLORA_STACKAn existing LoRA stack to append this entry to.

Outputs (1)

NameTypeDescription
lora_stackLORA_STACKCombined LoRA stack containing the selected entries.