Audio Stem Mixer ๐๏ธ
A tiny DAW inside ComfyUI for mixing separated stems
- audio
Audio is ComfyUI's unloved stepchild. You can generate a vocal stem, an instrumental, a drum line - but stitching them into one listenable track usually means exporting, firing up a real DAW, and going back and forth. AudioStemMixer from the ComfyUI-Stem-Mixer pack is a genuinely polished answer to that: a full multitrack mixer that lives inside the node graph, with faders, pan, mute/solo, a 3-band EQ per track, eight effects, VU meters, and a real-time waveform preview. You mix with your ears, hit Run, and get a standard AUDIO output ready to save. For a niche pack with no community lore behind it yet, the README is unusually professional - and the code backs it up.
How it works
Here's the mental-model shift that trips everyone up: the node has no audio input ports. You don't wire an audio-generating node into it. Instead, you load files inside the node - a ๐ Load button per track, or just drag and drop one or more WAV/FLAC/MP3/OGG/M4A/AIFF files straight onto it. They get copied into ComfyUI/input/stem_mixer/ and referenced by path in the workflow JSON.
All that mixer state - tracks, gains, pan, EQ, loop region - lives in a single hidden state string widget that the frontend writes behind the scenes. Your fader tweaks are just edits to that JSON, which is why a saved workflow reopens with everything intact.
When the workflow runs, mix() parses that state, loads each non-muted stem with torchaudio (forcing stereo and resampling everything to a common sample rate), then applies per-track EQ, the effects chain, gain, equal-power panning, and mute/solo logic - if any track is soloed, only the soloed ones contribute. Stems are padded to the longest and summed, the master fader is applied, and a soft-limiter catches peaks above 0.95 dBFS instead of hard-clipping. The preview you hear in the browser (a WaveSurfer UI) matches the rendered mix closely - the Python EQ even scales its gain by 0.7 to line up with the Web Audio preview.
One detail worth knowing: the node hashes its state plus the mtime of every referenced file, so moving a fader or swapping a file on disk triggers a re-render. No stale mixes.
Inputs and outputs
The info_schema is delightfully small because the UI does the heavy lifting:
state(STRING, multiline, default[]) - the only input, and you never touch it directly. It's the serialized mixer session the JS writes.audio(AUDIO) - the mixed result, a standard ComfyUIAUDIOdict. Wire it intoPreviewAudioto listen,SaveAudioto write a file, or any downstream audio node.
That's it. The complexity is in the widget, not the ports.
Installing it
The painless part: there are no extra Python dependencies (torch and torchaudio already ship with ComfyUI) and no model downloads. Install via ComfyUI Manager (search "ComfyUI-Stem-Mixer"), or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/tritant/ComfyUI_Stem_Mixer
Restart ComfyUI and you'll find Audio Stem Mixer ๐๏ธ under audio/mixer. That's the whole install story - a rare relief in a world of dependency hell.
Where people get burned
- The files don't travel with the workflow. Share the
.jsonand the recipient opens an empty mixer, because the audio lives in theirinput/stem_mixer/folder. You're sharing a recipe, not the ingredients. - Silence isn't a crash. If a referenced file is missing on execution, the node logs
[StemMixer] Failed to loadand skips it; if nothing loads, you get a silent audio output. Watch the console when a mix comes back empty. - It's load-from-disk only. If you hoped to wire in an in-memory AUDIO-producing node, you can't - pair this with anything that writes stems to disk instead.
- Uploads are capped at 500 MB per file, and solo is exclusive (one soloed track at a time).
Use it when you've already separated your stems and want to batch-render a mix without leaving ComfyUI. For that job, nothing else in the ecosystem does it half as well.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| state | STRING | [] | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | โ |