Model Switch
An A/B switch for anything a loader answers
- input_a
- input_b
- output
Model Switch is the two-way version of the "choose a model with a boolean" idea. Wire one loaded model into input_a, another into input_b, and a boolean picks which one passes through - true sends A, false sends B. A/B between two checkpoints, two VAEs, two upscalers, two ControlNets, whatever. It's the switch you reach for when you want one graph that can render with either of two models by flipping a widget, or swap models on a schedule from a condition.
It's a WAS Node Suite logic node (WAS Suite/Logic/Switch), the little sibling of Model Index Switch (which does the same job for up to 26 inputs chosen by a number). Two inputs is its whole personality: simple, legible, nothing to configure.
How it works
Three inputs, all required: input_a, input_b, and boolean. The sockets accept anything a loader answers - MODEL, VAE, CLIP, CLIP_VISION, CONTROL_NET, UPSCALE_MODEL, STYLE_MODEL, and the other loader types - and the first connection fixes the type, so input_b and the output are locked to whatever type you plugged into A. You can't build a switch that silently alternates between a VAE and a diffusion model, which would be meaningless downstream anyway. boolean is true by default: true = input_a, false = input_b.
The feature that makes it worth wiring at all is the same one as the index version: the branch it doesn't pick is never loaded. ComfyUI evaluates lazily, so the unselected loader sits idle - no load time, no VRAM. A switch between a photo-real checkpoint and an anime one is only practical because the loser doesn't live in memory during the run. Wire the boolean from a Logic Compare Numbers, a Mask Statistics is_empty, or a counter, and the model choice becomes a downstream decision instead of a manual click.
Output is a single output wire, typed to whatever was connected. That's the whole surface - which is the appeal. For "one of two, by a flag," you don't want a node with fifty settings.
When you'd actually use it
Two real patterns. First, one workflow, two looks: keep a checkpoint pair (or VAE pair) wired and A/B between them by a widget so you can batch the same prompt through both without rebuilding the graph. Second, conditional routing: only inpaint with the high-detail model when a mask actually found something; render at the fast model otherwise. The boolean can come from anywhere a true/false lives, which is what makes this a logic node rather than a glorified selector.
Installing it
Standard WAS Node Suite v3:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
or ComfyUI Manager → "WAS Node Suite v3", restart. Needs ComfyUI 0.14.0+ and Python 3.10+; no pip dependencies.
Where people get burned
The same trap as its bigger sibling, in miniature: this isn't a loader, so each side still needs its own loader node upstream. Second, the type-locking means the first connection decides what the switch is - if you wire input_a with a MODEL and then try to drop a VAE into input_b, ComfyUI will refuse the socket. Wire both sides before you expect a boolean toggle to work. And if you flip the boolean and the output seems frozen, check whether both loaders are actually on separate branches - if one is also feeding something else, it loads regardless of the switch, and "the other branch is never loaded" quietly stops being true.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| input_a | COMFY_MATCHTYPE_V3 | Passed on when boolean is true. Takes MODEL, VAE, CLIP, CLIP_VISION, CONTROL_NET, UPSCALE_MODEL, STYLE_MODEL and the other loader types. The first connection fixes the type; input_b and output then take that type only. | |
| input_b | COMFY_MATCHTYPE_V3 | Passed on when boolean is false. Must match input_a's type. | |
| boolean | BOOLEAN | true | Selects the input. true = input_a, false = input_b. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | COMFY_MATCHTYPE_V3 | The selected input, typed to whatever was connected. |