Academia SD Fast Switch ยท Models ๐ ฐ๏ธ๐ ฑ๏ธ
Two model slots, one output โ the node that plugs into any loader you own
- model_name
- label
The name is the honest part. This node is a switch, not a loader - it doesn't load a model into VRAM, doesn't need a model download, doesn't even know what a checkpoint is made of. It holds two file slots, A and B, pointed at the same models folder, and hands the filename of the active slot out to whatever loader you plug it into. Flip the side and the same cable suddenly feeds a different model. That's the whole trick, and it's why it ends up in workflows that exist in two flavours - AcademiaSD's own examples switch a whole pipeline between FL2VA and Ref2VA instead of hunting down every loader to re-point.
How it works
Everything worth knowing lives in two places. The Python side is nearly empty: it reads a switch_data widget (a serialized JSON blob the UI manages - leave it alone), figures out which side is active, and returns the filename from that slot. The clever bit is the output type: model_name is declared as a wildcard (*), and ComfyUI's validator accepts a wildcard against any input. So this one node feeds unet_name on a Load Diffusion Model, ckpt_name on a checkpoint loader, lora_name, vae_name - pick your poison, no variant per model kind needed.
The frontend is where you actually live. Two slots drawn from the same folder, the active one glowing green and the sleeping one red. Click a slot to arm it. Double-click the A or B label and type over it - call them FL2VA and Ref2VA instead of alphabet soup. The โ gear lists every folder ComfyUI already knows (models/loras, models/vae, models/text_encodersโฆ) or lets you type a path by hand, and it scans subfolders too. No caches to clear: it asks ComfyUI for a fresh file list every time.
The inputs and outputs that matter
There is exactly one required input, switch_data, and you shouldn't touch it - it's the serialized state so the whole A/B choice survives saving your workflow. The two outputs are what you wire:
model_name(wildcard*) - the filename of the active slot. Plug into any loader's model-name input.label(STRING) - the active side's label, e.g.Ref2VA. Handy as a filename prefix so your renders say which branch produced them; string it into a save node.
It also follows a Fast Switch ยท Toggle without a cable. Drop a Toggle on the canvas, link this node to it via the ๐ chip, and flipping the lever moves which slot is active. The link works in reverse: click a slot here and it asks its Toggle to flip.
Install
The whole pack installs at once - these four switch nodes all ship in comfyui_AcademiaSD. Easiest is ComfyUI Manager โ Install Custom Nodes โ search "Academia SD" or comfyui_AcademiaSD. Or the manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/AcademiaSD/comfyui_AcademiaSD
Restart ComfyUI, then hard-refresh the browser tab. No pip dependencies and no model downloads for these nodes - it works on models you already have. You'll see [AcademiaSD Loader] Loading comfyui_AcademiaSD in the console when it starts.
Where people get burned
The output is a bare filename, resolved against the folder you chose. That's the trap: if you point the folder at models/diffusion_models and then plug model_name into a lora_name input, ComfyUI goes looking for that file in models/loras and fails. Match the folder to the loader you're feeding.
The other classic error is running with an empty active slot - the node raises something like "slot A ("FL2VA") has no model selected. Pick one in the node, or flip the switch to the other side." So pick a file for both sides before you queue. And since almost all of this node is custom frontend JS, it's at the mercy of ComfyUI UI rewrites: if it renders oddly after a big ComfyUI update (the Nodes 2.0 frontend break that hit rgthree's similar DOM-heavy nodes is the precedent), the legacy canvas is usually the workaround, not a reinstall.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| switch_data | STRING | {} | Serialized state of the switch. Managed by the node UI. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model_name | * | โ |
| label | STRING | โ |