Simple Lora Stack
Five LoRAs in one node, actually applied — the one you'd reach for
- model
- clip
- model
- clip
Simple Lora Stack (loraStack_2) from the zsq_prompt pack is the useful sibling of loraStack: where that node just builds a LoRA shopping list for the pack's combo samplers, this one does the work. Feed it a model and CLIP, pick up to five LoRAs with strengths, and it returns a modified model and CLIP - exactly like chaining five LoraLoader nodes, except it's one node on your canvas.
How it works
The inputs are model, clip, num_loras, and the same lora_N_name / lora_N_strength pairs as its sibling. Under the hood it uses ComfyUI's own comfy.sd.load_lora_for_models for each selected LoRA in sequence, feeding the result of each into the next - so LoRAs stack cumulatively on the same model. The tooltip on the clip input is the author's own description: "The CLIP model used for encoding the text." Names come from your models/loras/ folder, "None" skips a slot, and it's a real loader that prints a Loading LoRA: <path> line to the console so you can confirm what got applied.
Same five-slot ceiling as the sibling, same strength range (0 to 2.5, default 1.0).
Inputs and outputs that matter
- model / clip - wire these from your checkpoint loader (or from this pack's
zsqcheckpoint). - num_loras - how many slots to activate, 1–5.
- lora_N_name - the LoRA file to apply. "None" = skip.
- lora_N_strength - per-LoRA weight. Start at 0.5–0.8, not 1.0 - the community's standing advice is that default strength is often too much for many LoRAs.
- Outputs: model, clip - the patched versions, ready for a sampler.
Where it fits
Any graph that wants a compact multi-LoRA loader. Stack a character LoRA and a style LoRA in one node instead of two, then wire straight into a KSampler. It plays especially well with the pack's zsqcheckpoint for a minimal loader→sampler chain. Just remember the LoRA checklist when results look off: is the LoRA trained for your base model's architecture, and does its trigger word appear in your prompt? The node applies faithfully; it can't fix incompatible pairings (and Pony/Illustrious/SDXL LoRAs are all selectable but often not cross-compatible, a classic gotcha).
Installing zsq_prompt
Shared pack install. ComfyUI Manager → search zsq_prompt → install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/windfancy/zsq_prompt
Restart ComfyUI. Heavy shared deps (transformers, opencv-python, opencv-contrib-python, scikit-image, timm, onnx, ultralytics) come with the pack; if Manager flags "conflicting with zsq_prompt" on a workflow, that's dependency-overlap noise, only meaningful once the pack is actually installed. No LoRA files are downloaded - it reads your existing models/loras/ folder.
Gotchas
- Strength applies equally to model and CLIP - there's no separate model/CLIP strength split like some fancier loaders offer.
- LoRAs apply in slot order. Order can matter for how interactions resolve, so if a stacked result looks wrong, try reordering before touching strengths.
- If a LoRA path is missing, the node logs the load attempt and moves on - a broken file won't necessarily error loudly. Watch the console.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | The CLIP model used for encoding the text. | |
| num_loras | INT | 11–5 | — |
| lora_1_nameopt | COMBO | 1 options: None | |
| lora_1_strengthopt | FLOAT | 1.000–2.5 | — |
| lora_2_nameopt | COMBO | 1 options: None | |
| lora_2_strengthopt | FLOAT | 1.000–2.5 | — |
| lora_3_nameopt | COMBO | 1 options: None | |
| lora_3_strengthopt | FLOAT | 1.000–2.5 | — |
| lora_4_nameopt | COMBO | 1 options: None | |
| lora_4_strengthopt | FLOAT | 1.000–2.5 | — |
| lora_5_nameopt | COMBO | 1 options: None | |
| lora_5_strengthopt | FLOAT | 1.000–2.5 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |