🔥Fire Switch
An ANY switch that doesn't leave ghost inputs behind
- input1
- input2
- input3
- input4
- input5
- input6
- input7
- input8
- input9
- input10
- input11
- input12
- input13
- input14
- input15
- input16
- input17
- input18
- input19
- input20
- input21
- input22
- input23
- input24
- input25
- input26
- input27
- input28
- input29
- input30
- input31
- input32
- out
- selected_index
Switch nodes are the plumbing of every workflow that keeps two or three interchangeable branches around and flips between them. They're also, if you've used enough of them, a source of a specific kind of annoyance: you disconnect a source, and the dead input slot just sits there on the node like a ghost. RectumFireSwitch is an index-based ANY switch whose whole selling point is that it cleans up after itself.
The mechanism is standard ComfyUI switch territory. The backend takes a select integer (default 1, range 1–32) and up to 32 wildcard inputs, input1 through input32. It clamps the selector to the valid range and passes through whichever input you pointed at. On the way out you get two outputs: out (the selected value, any type) and selected_index (the integer you selected - handy if you're feeding the choice into something that wants to know about it).
The part that makes it different
The ghost-input fix lives in the frontend. The node watches its connections, then normalizes the socket list so it always has exactly "connected + 1" inputs - meaning one spare slot, minimum two, maximum 32. When you disconnect a source, the trailing empty slot gets trimmed, and links are disconnected cleanly before a socket is removed. Rewire a workflow and the node shrinks instead of accumulating dead sockets. It's a small thing, but it's the difference between a switch you rework constantly and one you leave alone.
Because every input is * (ANY), it routes images, latents, models, conditionings - whatever you throw at it. The classic use: two model loaders, one downstream pipeline, and you flip between them with the selector instead of rewiring.
Where it falls short - read this before you rely on it
The README is admirably honest about the one gap. This switch works by selected index, and it does not yet mirror the behavior of rgthree's Switch (Any), where muting one source lets the next available source take over automatically. That first-non-null fallback behavior is the other major switch shape in the ecosystem - an A/B-style index switch (this one) versus a fallback switch that just walks its inputs and picks the first live branch. If your workflow relies on "mute one branch and the graph keeps running," this node isn't there yet; the author says it's known, planned, and not implemented. If you flip branches with a selector, it's perfect.
Install
Part of the RectumFire pack - no dependencies, no models, just the usual:
cd ComfyUI/custom_nodes
git clone https://github.com/vladgohn/ComfyUI-RectumFire.git
or ComfyUI Manager, searching "ComfyUI-RectumFire". Restart ComfyUI, and hard-refresh the browser afterwards - the socket-trimming behavior is frontend JS, so the browser needs to load it. Node doesn't appear at all? Check the ComfyUI console for import errors and make sure the repo is actually inside custom_nodes/.
If you keep two versions of anything in a workflow - checkpoints, LoRA stacks, upscalers - this is the switch to reach for. It just needs to not leave litter behind, and it doesn't.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| select | INT | 11–32 | — |
| input1opt | * | — | |
| input2opt | * | — | |
| input3opt | * | — | |
| input4opt | * | — | |
| input5opt | * | — | |
| input6opt | * | — | |
| input7opt | * | — | |
| input8opt | * | — | |
| input9opt | * | — | |
| input10opt | * | — | |
| input11opt | * | — | |
| input12opt | * | — | |
| input13opt | * | — | |
| input14opt | * | — | |
| input15opt | * | — | |
| input16opt | * | — | |
| input17opt | * | — | |
| input18opt | * | — | |
| input19opt | * | — | |
| input20opt | * | — | |
| input21opt | * | — | |
| input22opt | * | — | |
| input23opt | * | — | |
| input24opt | * | — | |
| input25opt | * | — | |
| input26opt | * | — | |
| input27opt | * | — | |
| input28opt | * | — | |
| input29opt | * | — | |
| input30opt | * | — | |
| input31opt | * | — | |
| input32opt | * | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| out | * | — |
| selected_index | INT | — |