Switch Source Pixaroma
Flip an entire pipeline between two setups with one click
- a_1
- a_2
- a_3
- a_4
- a_5
- a_6
- a_7
- a_8
- a_9
- a_10
- a_11
- a_12
- a_13
- a_14
- a_15
- a_16
- b_1
- b_2
- b_3
- b_4
- b_5
- b_6
- b_7
- b_8
- b_9
- b_10
- b_11
- b_12
- b_13
- b_14
- b_15
- b_16
- output_1
- output_2
- output_3
- output_4
- output_5
- output_6
- output_7
- output_8
- output_9
- output_10
- output_11
- output_12
- output_13
- output_14
- output_15
- output_16
Switch Source Pixaroma exists for the workflow where you maintain two of everything. You have a local model pipeline and an API-backed one, or a combined checkpoint loader and three separate model/CLIP/VAE loaders, and you're tired of ticking ten little switches every time you swap. This node swaps them all at once: wire your A bank into one set of inputs, your B bank into another, and a single click flips every row over.
It's the multi-row sibling of the simple Switch. Where the plain Switch picks one of several values for a single output, Switch Source carries a whole set of wires - up to 16 rows - and switches them as a block. Think "swap the input side of my graph between two configurations," not "pick one image."
How it works
Each row has an a_N input and a b_N input, and one output. The A/B toggle on the node decides which side every row passes through. Rows are declared in pairs - a_1/b_1 feed output_1, a_2/b_2 feed output_2, and so on through row 16.
The mechanism detail worth knowing: this node uses ComfyUI's lazy execution, so only the active side's upstream nodes actually run. The whole reason it's fast and clean is that your unused bank doesn't waste VRAM or time - the skipped branch is genuinely skipped, not just ignored at the output. (One side effect, per the changelog: if you export the workflow to API format, the unused branches are now really in the file, so an API run can complain about a missing model on the other bank. In the normal UI this never bites you.)
What to set
The inputs and outputs are all generic * wires, so any type works - MODEL, CLIP, VAE, IMAGE, LATENT, STRING, masks, audio, whatever. You set two things on the node body:
- Rows - how many rows you need. You can wire as many as you like; unused ones just sit empty.
- The empty-row behavior - the toggle below the A/B switch:
- Allow empty: if the active side has no wire on a row, that output is silently left empty. Great when your banks are asymmetric - say B has three things wired and A only has one.
- Show error: raises a clear error when the other side was wired on a row but the active side wasn't. This catches the classic mistake of dropping a wire on the wrong bank and then wondering why the output is missing.
The active side is highlighted on the node, and output labels are editable per row so you can name them ("main checkpoint" vs "alt") instead of reading type names.
Install and gotchas
Install via ComfyUI Manager (search "Pixaroma") or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/pixaroma/ComfyUI-Pixaroma
Restart ComfyUI. No dependencies, no model downloads.
The usual Pixaroma caveat applies after any update - if nodes render blank or half-built, hard-refresh with Ctrl+Shift+R (Cmd+Shift+R on Mac) before reporting anything. It's the browser cache, not your workflow.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| a_1opt | * | Source A for row 1. Flows to output_1 when the toggle is on A. | |
| a_2opt | * | Source A for row 2. Flows to output_2 when the toggle is on A. | |
| a_3opt | * | Source A for row 3. Flows to output_3 when the toggle is on A. | |
| a_4opt | * | Source A for row 4. Flows to output_4 when the toggle is on A. | |
| a_5opt | * | Source A for row 5. Flows to output_5 when the toggle is on A. | |
| a_6opt | * | Source A for row 6. Flows to output_6 when the toggle is on A. | |
| a_7opt | * | Source A for row 7. Flows to output_7 when the toggle is on A. | |
| a_8opt | * | Source A for row 8. Flows to output_8 when the toggle is on A. | |
| a_9opt | * | Source A for row 9. Flows to output_9 when the toggle is on A. | |
| a_10opt | * | Source A for row 10. Flows to output_10 when the toggle is on A. | |
| a_11opt | * | Source A for row 11. Flows to output_11 when the toggle is on A. | |
| a_12opt | * | Source A for row 12. Flows to output_12 when the toggle is on A. | |
| a_13opt | * | Source A for row 13. Flows to output_13 when the toggle is on A. | |
| a_14opt | * | Source A for row 14. Flows to output_14 when the toggle is on A. | |
| a_15opt | * | Source A for row 15. Flows to output_15 when the toggle is on A. | |
| a_16opt | * | Source A for row 16. Flows to output_16 when the toggle is on A. | |
| b_1opt | * | Source B for row 1. Flows to output_1 when the toggle is on B. | |
| b_2opt | * | Source B for row 2. Flows to output_2 when the toggle is on B. | |
| b_3opt | * | Source B for row 3. Flows to output_3 when the toggle is on B. | |
| b_4opt | * | Source B for row 4. Flows to output_4 when the toggle is on B. | |
| b_5opt | * | Source B for row 5. Flows to output_5 when the toggle is on B. | |
| b_6opt | * | Source B for row 6. Flows to output_6 when the toggle is on B. | |
| b_7opt | * | Source B for row 7. Flows to output_7 when the toggle is on B. | |
| b_8opt | * | Source B for row 8. Flows to output_8 when the toggle is on B. | |
| b_9opt | * | Source B for row 9. Flows to output_9 when the toggle is on B. | |
| b_10opt | * | Source B for row 10. Flows to output_10 when the toggle is on B. | |
| b_11opt | * | Source B for row 11. Flows to output_11 when the toggle is on B. | |
| b_12opt | * | Source B for row 12. Flows to output_12 when the toggle is on B. | |
| b_13opt | * | Source B for row 13. Flows to output_13 when the toggle is on B. | |
| b_14opt | * | Source B for row 14. Flows to output_14 when the toggle is on B. | |
| b_15opt | * | Source B for row 15. Flows to output_15 when the toggle is on B. | |
| b_16opt | * | Source B for row 16. Flows to output_16 when the toggle is on B. |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| output_1 | * | Row 1: carries the A or B input for this row, depending on the toggle. |
| output_2 | * | Row 2: carries the A or B input for this row, depending on the toggle. |
| output_3 | * | Row 3: carries the A or B input for this row, depending on the toggle. |
| output_4 | * | Row 4: carries the A or B input for this row, depending on the toggle. |
| output_5 | * | Row 5: carries the A or B input for this row, depending on the toggle. |
| output_6 | * | Row 6: carries the A or B input for this row, depending on the toggle. |
| output_7 | * | Row 7: carries the A or B input for this row, depending on the toggle. |
| output_8 | * | Row 8: carries the A or B input for this row, depending on the toggle. |
| output_9 | * | Row 9: carries the A or B input for this row, depending on the toggle. |
| output_10 | * | Row 10: carries the A or B input for this row, depending on the toggle. |
| output_11 | * | Row 11: carries the A or B input for this row, depending on the toggle. |
| output_12 | * | Row 12: carries the A or B input for this row, depending on the toggle. |
| output_13 | * | Row 13: carries the A or B input for this row, depending on the toggle. |
| output_14 | * | Row 14: carries the A or B input for this row, depending on the toggle. |
| output_15 | * | Row 15: carries the A or B input for this row, depending on the toggle. |
| output_16 | * | Row 16: carries the A or B input for this row, depending on the toggle. |