LoRA Multi Loader (CCN)
LoRA Multi Loader (CCN)
- model
- clip
- model
- clip
- triggers
LoRA Multi Loader (CCN) is what happens when a regular LoraLoader grows rows. Instead of chaining five loaders to stack five LoRAs - each with its own strength widget and each patching the same model - this node gives you a dynamic table: one LoRA per row, a strength per row, and an on/off toggle per row. Rows expand as you add LoRAs. It patches the model in one pass and, when you connect a CLIP, patches the text encoder too. The name is a lie in the best way: it's not "multi" as in "handles several" - it's "multi" as in "a stack that behaves like the idea of stacking was designed first."
The mechanics are standard under the hood. Each enabled row calls the same load_lora_for_models path the built-in loader uses, applying its per-row strength times the node-wide strength_multiplier. Set the multiplier to 0 and the whole stack silently disables - a single knob for "turn off all LoRAs for this comparison run." The enabled toggle does the same more explicitly, passing model and CLIP through completely untouched. Rows with an effective strength of zero are skipped without cost. Since LoRA patches are additive, row order doesn't change the result, so you don't need to think about ordering - a small mercy.
The genuinely interesting output is triggers. The node reads each applied LoRA's embedded training metadata and joins the top trigger words into a single string. For kohya-trained files it ranks by tag frequency (the tags that appeared most in training); otherwise it falls back to explicit trigger-phrase fields or dataset folder names. The same extraction feeds the row widgets' trigger chips in the UI, so what you see on the node matches what comes out the socket. If you've ever loaded a character LoRA and forgotten its trigger - and who hasn't - this output is the built-in answer, and you can wire it straight into a prompt builder.
Inputs that matter:
- model - the base model to patch (required). clip - optional; when connected, row strengths also apply to the text encoder.
- enabled - master bypass. strength_multiplier - multiplies every row's strength; 0 kills the whole stack.
Outputs: model, clip, and triggers.
Install
ComfyUI Manager → "ComfyCollectorNodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/valkymaera/ComfyCollectorNodes
Restart ComfyUI; it appears in the "CCN" category. The dynamic rows come from a JavaScript extension the pack ships, so it needs the frontend to load (a hard refresh after install is a fair move). No extra Python deps, no models to download, MIT.
Common issues
If the rows aren't rendering, the JS didn't load - hard-refresh the browser, check you restarted ComfyUI after cloning, and make sure you didn't disable the pack's js folder. Strength stacking catches people too: rows are multiplied by strength_multiplier, so two rows at 1.0 with a multiplier of 1.0 really do apply both at full strength - which is usually too much. Most people end up around 0.5–0.8 per row when stacking more than two. And the triggers output is only as good as the metadata in the files: LoRAs with stripped metadata return empty strings, not lies.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Model to patch. | |
| clipopt | CLIP | Optional; row strengths also apply to the text encoder when connected. | |
| enabledopt | BOOLEAN | true | When off, the model and CLIP pass through unchanged and no triggers are emitted. |
| strength_multiplieropt | FLOAT | 1.00-10–10 | Multiplies every row's strength; 0 disables the whole stack. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| triggers | STRING | — |