Nodes/WAS Node Suite v3/Power LoRA Loader
ComfyUI Node Runs on cloud

Power LoRA Loader

Stack 26 LoRAs in one node, each with its own switch and strength

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
Power LoRA Loader
  • 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
fusefalse
strength1.00
lora_1_enabledtrue
lora_1None
lora_1_weight1.00
lora_2_enabledtrue
lora_2None
lora_2_weight1.00
lora_3_enabledtrue
lora_3None
lora_3_weight1.00
lora_4_enabledtrue
lora_4None
lora_4_weight1.00
lora_5_enabledtrue
lora_5None
lora_5_weight1.00
lora_6_enabledtrue
lora_6None
lora_6_weight1.00
lora_7_enabledtrue
lora_7None
lora_7_weight1.00
lora_8_enabledtrue
lora_8None
lora_8_weight1.00
lora_9_enabledtrue
lora_9None
lora_9_weight1.00
lora_10_enabledtrue
lora_10None
lora_10_weight1.00
lora_11_enabledtrue
lora_11None
lora_11_weight1.00
lora_12_enabledtrue
lora_12None
lora_12_weight1.00
lora_13_enabledtrue
lora_13None
lora_13_weight1.00
lora_14_enabledtrue
lora_14None
lora_14_weight1.00
lora_15_enabledtrue
lora_15None
lora_15_weight1.00
lora_16_enabledtrue
lora_16None
lora_16_weight1.00
lora_17_enabledtrue
lora_17None
lora_17_weight1.00
lora_18_enabledtrue
lora_18None
lora_18_weight1.00
lora_19_enabledtrue
lora_19None
lora_19_weight1.00
lora_20_enabledtrue
lora_20None
lora_20_weight1.00
lora_21_enabledtrue
lora_21None
lora_21_weight1.00
lora_22_enabledtrue
lora_22None
lora_22_weight1.00
lora_23_enabledtrue
lora_23None
lora_23_weight1.00
lora_24_enabledtrue
lora_24None
lora_24_weight1.00
lora_25_enabledtrue
lora_25None
lora_25_weight1.00
lora_26_enabledtrue
lora_26None
lora_26_weight1.00

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 .safetensors in 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 enabled checkbox 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_1 through name_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.

CategoryWAS Suite/LoRA

Inputs (82)

NameTypeDefaultDescription
modelMODELThe diffusion model the LoRAs are applied to, in row order.
clipoptCLIPThe 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.
fuseoptBOOLEANfalseCombine 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.
strengthoptFLOAT1.00-10–10Multiplies 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_enabledoptBOOLEANtrueWhether 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_1optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_1_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_2optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_2_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_3optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_3_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_4optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_4_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_5optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_5_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_6optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_6_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_7optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_7_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_8optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_8_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_9optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_9_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_10optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_10_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_11optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_11_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_12optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_12_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_13optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_13_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_14optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_14_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_15optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_15_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_16optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_16_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_17optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_17_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_18optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_18_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_19optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_19_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_20optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_20_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_21optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_21_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_22optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_22_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_23optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_23_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_24optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_24_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_25optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_25_weightoptFLOAT1.00-10–10How 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_enabledoptBOOLEANtrueWhether 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_26optCOMBONoneLoRA file this row uses. `None` leaves the row empty, which counts the same as switching it off.
lora_26_weightoptFLOAT1.00-10–10How 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)

NameTypeDescription
modelMODELThe model with every switched-on row applied, in order.
clipCLIPThe text encoder with the same rows applied. The input passes through untouched when no CLIP was connected.
namesSTRINGThe LoRAs that were applied, one per line, as name and strength. Empty when every row is off.
name_1STRINGFile 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_2STRINGFile 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_3STRINGFile 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_4STRINGFile 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_5STRINGFile 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_6STRINGFile 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_7STRINGFile 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_8STRINGFile 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_9STRINGFile 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_10STRINGFile 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_11STRINGFile 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_12STRINGFile 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_13STRINGFile 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_14STRINGFile 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_15STRINGFile 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_16STRINGFile 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_17STRINGFile 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_18STRINGFile 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_19STRINGFile 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_20STRINGFile 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_21STRINGFile 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_22STRINGFile 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_23STRINGFile 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_24STRINGFile 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_25STRINGFile 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_26STRINGFile 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.