Power LoRA Loader
Stack 26 LoRAs in one node, each with its own switch and strength
- model
- clip
- model
- clip
- names
- name_1
- name_2
- name_3
- name_4
- name_5
- name_6
- name_7
- name_8
- name_9
- name_10
- name_11
- name_12
- name_13
- name_14
- name_15
- name_16
- name_17
- name_18
- name_19
- name_20
- name_21
- name_22
- name_23
- name_24
- name_25
- name_26
If you stack more than one LoRA, you've felt the pain Power LoRA Loader exists to remove. Core ComfyUI chains one LoRA loader into the next, and testing combinations means rewiring or muting nodes. This node applies any number of LoRAs in a single node: each row names a file, carries its own strength, and has its own switch - so a LoRA is muted with a click instead of by unwiring anything.
The mental model is a loafer's stack. Rows apply in order onto the model and CLIP, each row's strength multiplies into whatever the previous rows left, and the toggle per row means the classic workflow of "character LoRA + style LoRA + a detail one, but today I want to A/B the detail one off" becomes a one-click change instead of a rebuild.
How to drive it
The model input is the diffusion model the LoRAs apply to, in row order. Then it's a grid - up to 26 rows (lora_1 through lora_26), each with:
- a file dropdown (every
.safetensorsin your LoRA folder, listed by name), - a
weight(from -10 to 10, though you'll live almost entirely in the -2 to 2 band), - an
enabledcheckbox per row.
Wire CLIP in and the same rows apply to the text encoder, which is what you want when a LoRA carries trigger words or style influence that lives in conditioning. Leave CLIP unwired and clip on the way out passes through untouched.
Outputs
model- the model with every switched-on row applied, in order. Goes to your sampler.clip- the text encoder with the same rows applied.names- the LoRAs that were applied, one per line, as name and strength. Empty when every row is off.name_1throughname_26- one per row, the file name of the applied LoRA (no folder or extension). Wire them into filename prefixes or a logging node so every render records exactly which stack it used. If you batch many runs with different combinations, that habit is the difference between knowing what made a great image and guessing.
The honest comparisons
The "Power" name is shared across the ecosystem - rgthree's Power Lora Loader is the other famous one, and both exist because the per-row-switch pattern is that good. What differs is flavor: rgthree's reads trigger words off the file and fetches them from CivitAI; this one is wired to the WAS suite's own workflow and sits alongside its Power LoRA Merger, which bakes a stack like this into a single file when you've found a combination worth freezing. Use this loader to apply a stack for a run; use the merger when you want the stack as one artifact.
Where people get burned: row order matters (later rows stack onto earlier ones, so put broad style LoRAs first and fine detail later), and weight is per-row cumulative, not a final strength knob - two rows at 1.0 is usually more than you think.
Installing
Power LoRA Loader ships in WAS Node Suite v3. ComfyUI Manager → search WAS Node Suite v3, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui
Restart after; needs ComfyUI 0.14.0+ and Python 3.10+. No weights or packages download - the node reads whatever LoRAs you already have in ComfyUI's model folders. That zero-dependency stance is v3's deliberate break from the old suite, which pulled in a package stack that broke on ComfyUI updates.
Inputs (82)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The diffusion model the LoRAs are applied to, in row order. | |
| clipopt | CLIP | The text encoder the LoRAs are applied to. Optional: left unconnected the model alone is patched, which is what a workflow encoding its prompt elsewhere wants. | |
| fuseopt | BOOLEAN | false | Combine every row into one patch before applying, instead of patching once per row. Cheaper on a long stack. The joined factors match applying the rows in turn to within float rounding, so a sampled image is near-identical rather than pixel for pixel. A row whose format cannot be joined is carried through. |
| strengthopt | FLOAT | 1.00-10–10 | Multiplies every row's own strength, so the whole stack is turned up or down together. 1.0 leaves each row as it is set. |
| lora_1_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_1opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_1_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_2_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_2opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_2_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_3_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_3opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_3_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_4_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_4opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_4_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_5_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_5opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_5_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_6_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_6opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_6_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_7_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_7opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_7_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_8_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_8opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_8_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_9_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_9opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_9_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_10_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_10opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_10_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_11_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_11opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_11_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_12_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_12opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_12_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_13_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_13opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_13_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_14_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_14opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_14_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_15_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_15opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_15_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_16_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_16opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_16_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_17_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_17opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_17_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_18_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_18opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_18_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_19_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_19opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_19_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_20_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_20opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_20_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_21_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_21opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_21_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_22_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_22opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_22_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_23_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_23opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_23_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_24_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_24opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_24_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_25_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_25opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_25_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
| lora_26_enabledopt | BOOLEAN | true | Whether this row takes part. `true` applies it; `false` mutes it and keeps the file and the strength it was set to, so neither is typed again to bring it back. |
| lora_26opt | COMBO | None | LoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off. |
| lora_26_weightopt | FLOAT | 1.00-10–10 | How strongly this row counts. 1.0 is the LoRA as it was trained, below 1 weakens it, above 1 pushes it past what it was trained for, and a negative value applies it in reverse. 0 leaves the row out. |
Outputs (29)
| Name | Type | Description |
|---|---|---|
| model | MODEL | The model with every switched-on row applied, in order. |
| clip | CLIP | The text encoder with the same rows applied. The input passes through untouched when no CLIP was connected. |
| names | STRING | The LoRAs that were applied, one per line, as name and strength. Empty when every row is off. |
| name_1 | STRING | File name of applied LoRA 1, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_2 | STRING | File name of applied LoRA 2, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_3 | STRING | File name of applied LoRA 3, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_4 | STRING | File name of applied LoRA 4, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_5 | STRING | File name of applied LoRA 5, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_6 | STRING | File name of applied LoRA 6, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_7 | STRING | File name of applied LoRA 7, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_8 | STRING | File name of applied LoRA 8, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_9 | STRING | File name of applied LoRA 9, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_10 | STRING | File name of applied LoRA 10, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_11 | STRING | File name of applied LoRA 11, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_12 | STRING | File name of applied LoRA 12, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_13 | STRING | File name of applied LoRA 13, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_14 | STRING | File name of applied LoRA 14, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_15 | STRING | File name of applied LoRA 15, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_16 | STRING | File name of applied LoRA 16, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_17 | STRING | File name of applied LoRA 17, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_18 | STRING | File name of applied LoRA 18, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_19 | STRING | File name of applied LoRA 19, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_20 | STRING | File name of applied LoRA 20, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_21 | STRING | File name of applied LoRA 21, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_22 | STRING | File name of applied LoRA 22, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_23 | STRING | File name of applied LoRA 23, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_24 | STRING | File name of applied LoRA 24, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_25 | STRING | File name of applied LoRA 25, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |
| name_26 | STRING | File name of applied LoRA 26, without its folder or its extension, the same name that appears in the names output. Empty when the stack applies fewer LoRAs than that. |