Dual LoRA Prompt Switch
Two model stacks, one switch, one prompt
- model_high
- model_low
- clip_high
- clip_low
- model_high
- clip_high
- model_low
- clip_low
- positive_prompt
- negative_prompt
Dual LoRA Prompt Switch is the niche one in this pack. Where its sibling handles a single model/clip pair, this node loads two separate model+LoRA stacks at once - each with its own LoRA file and strength - shares one prompt across both, and kills the whole thing with a single toggle. If that doesn't sound immediately useful, that's fine: it's built for a specific workflow shape, not for everyone.
What it's actually for
The README's example is a dual-pass setup with a high-noise and a low-noise model - the "refiner" pattern where one model does the coarse structure and a second one adds detail, or a base-model pass alongside a specialized model for the same prompt. You feed both model_high and model_low from their respective checkpoints, this node applies a different LoRA to each at different strengths, and the prompt text you add gets appended to both branches at once. One switch toggles the entire assembly: disable it and both models pass through with no LoRA applied and no text injected.
The second, arguably more practical use is A/B comparison. Two LoRAs, same prompt, same seed - run the graph twice and you're flipping between candidates without rebuilding anything. That's the same "compare without deleting nodes" philosophy as the rest of the pack, just for two stacks at once.
The inputs that matter
- model_high / model_low - the two base models, one per branch
- lora_high / lora_low - separate LoRA dropdowns per branch
- strength_high / strength_low - independent strengths, default 1.0, range -10 to 10 (negative works as an anti-LoRA on either branch)
- add_positive / add_negative - one shared set of trigger-word toggle lists, applied to both branches
- enable - the master switch
The two clip_high / clip_low inputs are optional, and that's a real convenience: comfy.sd.load_lora_for_models is happy to take a None clip, so you can leave clips disconnected when a branch doesn't need conditioning, or connect just one. Outputs are the four modified stacks (model_high, clip_high, model_low, clip_low) plus the two prompt strings.
Installing
Same pack as the others - install comfyui-lora-prompt-switch once. Via ComfyUI Manager, search the pack title, or:
cd ComfyUI/custom_nodes
git clone https://github.com/sstoye/comfyui-lora-prompt-switch
Restart ComfyUI and it shows up under loaders/lora. No pip dependencies, no extra model files; the LoRAs come from your existing models/loras folder. It's a small, AI-assisted project (the README is upfront about that), so don't build your entire pipeline on it - but for this job it does the job.
The honest advice
If you're not running a dual-pass or dual-model workflow, this node is solving a problem you don't have - two regular LoRA Prompt Switches on separate branches would do the same thing with more flexibility, since they don't force the shared prompt. The cases where Dual genuinely wins are the ones where the prompt must stay identical across both stacks and you want them toggled as one unit. If that's you, great. If it isn't, you now know the difference, which is more than most people who download it can say.
The same gotchas as its sibling apply: the prompt_separator and trailing_separator fields exist but are ignored (comma joining is hardcoded), and strength 0 is not the same as disabled - use enable. And the usual LoRA compatibility rules haven't been repealed: an SDXL-lineage LoRA on a Flux model won't do anything useful on either branch.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model_high | MODEL | — | |
| model_low | MODEL | — | |
| lora_high | COMBO | 0 options: | |
| strength_high | FLOAT | 1.00-10–10 | — |
| lora_low | COMBO | 0 options: | |
| strength_low | FLOAT | 1.00-10–10 | — |
| add_positive | STRING | — | |
| add_negative | STRING | — | |
| clip_highopt | CLIP | — | |
| clip_lowopt | CLIP | — | |
| positive_promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| prompt_separatoropt | STRING | , | — |
| trailing_separatoropt | BOOLEAN | true | — |
| notesopt | STRING | — | |
| enableopt | BOOLEAN | true | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| model_high | MODEL | — |
| clip_high | CLIP | — |
| model_low | MODEL | — |
| clip_low | CLIP | — |
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |