Lora Stack (x6)
Six LoRAs in one node, with per-slot toggles and separate weights
- lora_stack
- lora_stack
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.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled_1 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_1_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_1_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_1_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| enabled_2 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_2_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_2_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_2_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| enabled_3 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_3_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_3_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_3_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| enabled_4 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_4_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_4_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_4_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| enabled_5 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_5_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_5_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_5_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| enabled_6 | BOOLEAN | true | Enable or disable this LoRA entry in the stack. |
| lora_6_name | COMBO | Select a LoRA model to include in this stack entry. | |
| model_6_weight | FLOAT | 1.00-100–100 | Weight for the LoRA model branch. |
| clip_6_weight | FLOAT | 1.00-100–100 | Weight for the LoRA clip branch. |
| lora_stackopt | LORA_STACK | An existing LoRA stack to append this entry to. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| lora_stack | LORA_STACK | Combined LoRA stack containing the selected entries. |