Nodes/Mochorong/Audio Selector
ComfyUI Node

Audio Selector

Four stems, one dropdown, and a very loud error when you forget to wire one

By mochorongo·Created a day ago·Updated a day ago· 0
Audio Selector
  • Bass
  • Drums
  • Guitar
  • Vocals
  • audio
select

Stem separation hands you a pile of outputs - drums, bass, vocals, and whatever else the model felt like splitting - and most of the time you want to do something to exactly one of them. Audio Selector is the node that turns "which one" into a dropdown instead of a second copy of your entire effect chain.

You pick one of four labelled AUDIO inputs and it hands that one through. That's it. No mixing, no gain, no summing.

Where this fits

The audio layer in ComfyUI is late and thin: the models are real, but they arrived to give silent video a soundtrack, so they live in bespoke packs with their own dependency stacks. Music generation is the same story: ACE-Step got good enough to be the local Suno for instrumentals. The moment you have a finished track and a separator in the same graph, you have four wires that want the same downstream chain - an echo on the vocals only, a sidechain, a reactive visual driven by the drums. Duplicating that chain per stem is how a workflow goes from readable to 200 nodes. A selector collapses it back.

The four labels are not arbitrary: Bass, Drums, Guitar, Vocals is Demucs-speak. The six-stem htdemucs_6s model is the one that isolates a guitar, while the common 4-stem separation packs (DeepExtractV2 and friends) give you drums/bass/vocals/other - their own author has said it can't isolate guitar specifically. So this node was written for a stem-splitting workflow. It just doesn't care whether you use it that way.

The mechanism, and the one thing it does that matters

select is a four-way combo. The other four inputs - Bass, Drums, Guitar, Vocals - are all optional AUDIO inputs. At run time the node pulls the input whose name matches the dropdown:

def select_audio(self, select, **kwargs):
    audio = kwargs.get(select)
    if audio is None:
        raise ValueError(f"No audio connected to '{select}' input")
    return (audio,)

Two consequences worth internalising.

Failing loudly is the feature. Flip the dropdown to Vocals with nothing wired to the Vocals socket and you don't get silence or a mystery - you get a ValueError naming the input, on that node, in the log. Much better than the silent-wrong-output kind of bug that eats an evening.

The labels are labels. The node never inspects the audio it receives, so nothing stops you from plugging an "other" stem into the Guitar socket and selecting Guitar. It's a useful hack when your separator's naming doesn't match the four names on the box, and a mild lie you should annotate with a Note node. The AUDIO type itself is a shared convention - a dict of waveform plus sample rate - so stems from any separator or music pack plug straight in.

One input arrives, one leaves. Only the selected wire is read; the rest are untouched. If you wanted drums plus bass blended, this node can't do it - stacking the second stem downstream won't sum them either, not without a mixing node.

Outputs: a single audio (AUDIO). Wire it into whatever chain you built for "the stem I care about right now".

Install

Cut and paste, like the rest of the pack - one author, five nodes, MIT. Find it in ComfyUI Manager by searching Mochorong (publisher mochorongo), or:

cd ComfyUI/custom_nodes
git clone https://github.com/mochorongo/Mochorong

Restart ComfyUI. There's a registry equivalent too: comfy node install comfyui-mochorong.

Nothing downloads, nothing compiles - there's no requirements file, just torch, numpy, PIL and folder_paths, all already present. Python 3.10+. If the nodes don't appear after a restart, check the clone isn't nested a level too deep.

If it's not working

  • ValueError: No audio connected to 'Vocals' input - the dropdown points at an empty socket. Either wire that stem or switch the selection.
  • The workflow queues and then fails at execution. All four stem inputs are optional, so there's nothing to validate up front; the error only appears when the node runs. Expected, not a broken install.
  • You wanted two stems merged. Different node. A selector routes, it doesn't mix.
  • You already run rgthree. Its Any Switch handles ANY-typed wires and picks the first connected input - same routing job, no dropdown, chosen by what's wired rather than what you picked. Either is fine; don't install both packs just for this.

One more note since the pack is obscure: it has all but no community footprint, and this node is a four-way passthrough with a guard clause. You're not adopting a framework - you're avoiding four copies of the same chain.

Sources: Mochorong audio_selector.py and README (read 2026-09-14); docs/knowledge/audio-generation.md for the music/stem-separation landscape and ACE-Step; docs/knowledge/comfyui-node-plumbing.md for the A/B-switch versus fallback-switch distinction and optional-inputs-are-None convention; kg/entities/rgthree-comfy.json for Any Switch's role. Community signal on 4-stem naming from reddit corpus modidex_reddit (thread 1o1jnra).

CategoryMochorong

Inputs (5)

NameTypeDefaultDescription
selectCOMBO4 options: Bass, Drums, Guitar, Vocals
BassoptAUDIO
DrumsoptAUDIO
GuitaroptAUDIO
VocalsoptAUDIO

Outputs (1)

NameTypeDescription
audioAUDIO