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

Lora Stack (x6)

Six LoRAs in one node, with per-slot toggles and separate weights

By arcum42·Created 2 years ago·Updated 28 days ago· 33
Lora Stack (x6)
  • 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
enabled_4true
lora_4_name
model_4_weight1.00
clip_4_weight1.00
enabled_5true
lora_5_name
model_5_weight1.00
clip_5_weight1.00
enabled_6true
lora_6_name
model_6_weight1.00
clip_6_weight1.00

Everyone who stacks multiple LoRAs ends up with the same mess: six LoraLoader nodes, each with its own dropdown and weight, plus the constant risk that a workflow you share has one of them disabled and one at weight 3.5 and nobody can tell why. The Sage Utils LoRA stack approach fixes it by making the stack the thing that travels - and this node is the six-slot version: six LoRAs, per-slot enable toggles, and separate model and CLIP weights, all bundled into one LORA_STACK you can pass to a loader or into your metadata.

How it works

For each slot 1 through 6 you get four inputs: enabled_N (a boolean toggle, default on), lora_N_name (dropdown of your installed LoRAs), model_N_weight (how hard the LoRA is applied to the diffusion model, default 1.0), and clip_N_weight (how hard it's applied to the CLIP/text side, default 1.0). Disabled slots are skipped entirely; the weights range from -100 to 100, which covers negative-LoRA territory too. There's also an optional lora_stack input, so you can chain a stack onto an existing one, and the output is the combined lora_stack.

That stack is just a list of (lora, model_weight, clip_weight) tuples. You don't usually inspect it - you feed it to the pack's Lora Stack Loader to actually apply the LoRAs, and/or to a Construct Metadata node so the metadata records exactly which LoRAs and weights were used. Having model and CLIP weights separate is the part most stacks get wrong: plenty of LoRAs want a lower CLIP weight than model weight (or the opposite), and most simple stack nodes force one number.

Why the stack model wins

Compared to wiring six individual LoraLoader nodes, the stack gives you two real advantages. First, the metadata: because the stack is data, it can be read back into your PNG metadata automatically - no transcription errors. Second, sharing: a workflow with stack nodes is much easier to read at a glance than one with a dozen loaders. It's the same idea that made rgthree's Power Lora Loader famous, just implemented as a separate stack-plus-loader split, which fits the pack's metadata-first design.

Installing it

Sage Utils via ComfyUI Manager (search Sage Utils) or:

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

Restart ComfyUI. Only pip dependency is dynamicprompts; the LoRAs themselves are your own model files.

Where people stumble

The classic mistake is connecting the stack to a LoraLoader node expecting it to accept the stack - it won't; you need the pack's Lora Stack Loader (or Model + Lora Stack Loader). And remember that enabled toggles are the intended way to A/B test: flip slots on and off rather than zeroing weights, since a disabled slot is skipped cleanly while a weight of 0 still gets processed. If you only need three slots, the pack's Lora Stack (x3) is the same node with fewer inputs.

CategorySage Utils/lora

Inputs (25)

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.
enabled_4BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_4_nameCOMBOSelect a LoRA model to include in this stack entry.
model_4_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_4_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
enabled_5BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_5_nameCOMBOSelect a LoRA model to include in this stack entry.
model_5_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_5_weightFLOAT1.00-100–100Weight for the LoRA clip branch.
enabled_6BOOLEANtrueEnable or disable this LoRA entry in the stack.
lora_6_nameCOMBOSelect a LoRA model to include in this stack entry.
model_6_weightFLOAT1.00-100–100Weight for the LoRA model branch.
clip_6_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.