LoRA Switchboard
LoRA Switchboard
- model
- clip
- model
- clip
- lora_tags
- positive_with_loras
- summary
Most LoRA workflows are a pile of LoraLoader nodes with their names, weights, and enabled states scattered across the canvas. This node from comfyui-prompt-library-nodes collects up to twelve of them into one switchboard, patches your model and CLIP in order, and - the part that makes it worth installing - spits out the matching <lora:...> metadata tags so your saved image's prompt says what was actually loaded.
It's a "switchboard," not a loader. You still feed it a model and clip from your checkpoint, it layers the enabled LoRAs on top, and it hands the patched versions back out.
How it works
Each of the twelve slots has an enabled toggle, a name dropdown (pulled live from your loras folder, so it knows every LoRA you've installed), and separate strength_model / strength_clip floats. Slots are applied top to bottom, exactly like chaining loaders - order matters for the model math. Zero-strength slots are skipped entirely and reported as skipped, and master_enabled is a single switch that bypasses the whole stack, which is the fastest A/B test in the pack: base model vs. full stack, one toggle.
The metadata half is the clever bit. For every active slot it builds a tag in the standard format - <lora:name:model_weight:clip_weight> when the two weights differ, <lora:name:model_weight> when they match - and joins them with separator (default , ). tag_name_mode controls the path in the tag: default relative_with_ext keeps the subfolder and extension (styles/foo.safetensors), or you can drop to basename only. Relative-with-extension is the right default if you ever re-share a workflow, because bare filenames collide constantly.
Inputs and outputs that matter
You'll actually set these:
model/clip- wire from yourCheckpointLoaderSimple. Leave them unplugged and the node raises "must run inside ComfyUI," which is its way of saying it needs real objects.positive_prompt(optional, convert-to-input friendly) - an existing prompt string you want the tags prepended to.- The
lora_N_*group per slot - enabled, name, model strength, clip strength.
Outputs, in order: model and clip go to your KSampler and CLIPTextEncode. lora_tags is the bare tag string. positive_with_loras is the tags prepended to your optional positive_prompt - feed that to an image saver's metadata and the PNG's prompt text matches the generation. summary is a human-readable list of what's active and what's skipped; handy for a debug note while you're dialing in a stack.
Installing it
No extra dependencies - just ComfyUI core. ComfyUI Manager → search "comfyui-prompt-library-nodes" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/2223290690z-hue/comfyui-prompt-library-nodes.git
Restart, and it shows up as LoRA Switchboard under Prompt Manager/LoRA.
Troubleshooting and honest gripes
- "Must run inside ComfyUI" - you've got
modelorclipunconnected, or you're executing the node standalone. - A slot is enabled but silently skipped - both strengths set to 0 makes the node treat it as skipped on purpose (it shows up in the
summary). If a LoRA genuinely has no effect, check thatenabledis on and the name isn't(none). - Order changes the result. Slots apply top to bottom, like chained loaders. If two LoRAs fight each other, swapping their slot order can change the output - useful to know before you tear your hair out.
- It's not a stack saver. There's no save/load of a stack profile; if you have a handful of preset combos you swap between, the toggle-per-slot setup means flipping them is manual. For that, a dedicated manager pack is a better fit.
Also note the search aliases are "lora manager" / "lora toggle" - ComfyUI's search will suggest this node for those terms, but it's neither a trigger-happy stack manager nor a trigger-word lister. It's a tidy, metadata-aware patcher, and if metadata alignment is your pain point, it's the node to reach for.
Inputs (54)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| master_enabled | BOOLEAN | true | — |
| tag_name_mode | COMBO | relative_with_ext | 4 options: relative_with_ext, relative_no_ext, basename_with_ext, basename_no_ext |
| separator | STRING | , | — |
| lora_1_enabled | BOOLEAN | false | — |
| lora_1_name | COMBO | 1 options: (none) | |
| lora_1_strength_model | FLOAT | 1.00-100–100 | — |
| lora_1_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_2_enabled | BOOLEAN | false | — |
| lora_2_name | COMBO | 1 options: (none) | |
| lora_2_strength_model | FLOAT | 1.00-100–100 | — |
| lora_2_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_3_enabled | BOOLEAN | false | — |
| lora_3_name | COMBO | 1 options: (none) | |
| lora_3_strength_model | FLOAT | 1.00-100–100 | — |
| lora_3_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_4_enabled | BOOLEAN | false | — |
| lora_4_name | COMBO | 1 options: (none) | |
| lora_4_strength_model | FLOAT | 1.00-100–100 | — |
| lora_4_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_5_enabled | BOOLEAN | false | — |
| lora_5_name | COMBO | 1 options: (none) | |
| lora_5_strength_model | FLOAT | 1.00-100–100 | — |
| lora_5_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_6_enabled | BOOLEAN | false | — |
| lora_6_name | COMBO | 1 options: (none) | |
| lora_6_strength_model | FLOAT | 1.00-100–100 | — |
| lora_6_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_7_enabled | BOOLEAN | false | — |
| lora_7_name | COMBO | 1 options: (none) | |
| lora_7_strength_model | FLOAT | 1.00-100–100 | — |
| lora_7_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_8_enabled | BOOLEAN | false | — |
| lora_8_name | COMBO | 1 options: (none) | |
| lora_8_strength_model | FLOAT | 1.00-100–100 | — |
| lora_8_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_9_enabled | BOOLEAN | false | — |
| lora_9_name | COMBO | 1 options: (none) | |
| lora_9_strength_model | FLOAT | 1.00-100–100 | — |
| lora_9_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_10_enabled | BOOLEAN | false | — |
| lora_10_name | COMBO | 1 options: (none) | |
| lora_10_strength_model | FLOAT | 1.00-100–100 | — |
| lora_10_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_11_enabled | BOOLEAN | false | — |
| lora_11_name | COMBO | 1 options: (none) | |
| lora_11_strength_model | FLOAT | 1.00-100–100 | — |
| lora_11_strength_clip | FLOAT | 1.00-100–100 | — |
| lora_12_enabled | BOOLEAN | false | — |
| lora_12_name | COMBO | 1 options: (none) | |
| lora_12_strength_model | FLOAT | 1.00-100–100 | — |
| lora_12_strength_clip | FLOAT | 1.00-100–100 | — |
| positive_promptopt | STRING | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| lora_tags | STRING | — |
| positive_with_loras | STRING | — |
| summary | STRING | — |