AudioSeparation
Split any track into vocals, drums, bass, and everything else
- audio
- Bass
- Drums
- Other
- Vocals
If you've ever wanted a clean acapella, an instrumental-only version of a song, or just the drums out of a mix, this is the node that does it. AudioSeparation runs Hybrid Demucs - a pretrained source-separation model from torchaudio - and splits whatever you feed it into four stems: bass, drums, other, and vocals. It's the flagship node of the audio-separation-nodes-comfyui pack, and honestly the reason the other six nodes in the pack exist at all - they're mostly there to help you do something with the output.
Why you'd reach for it
The obvious use is vocal isolation: pull the singing out of a song, or strip vocals to get a clean instrumental for a remix or a karaoke track. People also use it the other way around - separate, then swap the "vocals" stem for something new while keeping the original backing track. On Reddit it comes up specifically for replacing background music in a video: separate the original mix, drop in a new BGM track (people pair it with Stable Audio generations, keeping denoise low so the new track stays sonically close to the old one), and you've dodged a copyright strike without re-recording anything.
One thing worth knowing up front: there's no dedicated "guitar" or "synth" stem. Demucs only gives you four buckets, and anything that isn't bass, drums, or vocals lands in Other. If you want an instrument specifically, separate first, then use the AudioCombine node to subtract what you don't want from that Other stem.
How it works
Demucs doesn't process a whole song in one pass - it slices the audio into overlapping chunks, separates each chunk, then stitches them back together. The overlap exists so you don't get an audible seam every few seconds; without it you'd hear a click or a phase jump at every chunk boundary.
That's what the three optional inputs control. chunk_length (default 10, in seconds) is how big each slice is - longer chunks can use more memory but the tooltip notes they might produce better separation. chunk_overlap (default 0.1s) is how much adjacent chunks overlap; bump it up if your audio changes quickly or you're using short chunks, since there's less context to smooth over. chunk_fade_shape (default linear) picks the crossfade curve used at those overlaps - linear is an even fade, half-sine is smoother, and logarithmic/exponential bias the fade toward a quick cut on one side. For a first pass, the defaults are fine; only touch these if you're hearing artifacts at regular intervals.
The only required input is audio (an AUDIO type - wire in a LoadAudio node or the output of another audio node). Out come four AUDIO outputs, one per stem, ready to plug into a SaveAudio, AudioCombine, or any other AUDIO-typed node downstream.
Installing it
Easiest path: open ComfyUI Manager and search for audio-separation-nodes-comfyui. Manually, it's the standard pattern - cd ComfyUI/custom_nodes, git clone https://github.com/christian-byrne/audio-separation-nodes-comfyui, then cd in and pip install -r requirements.txt before restarting ComfyUI. The pack needs librosa, torchaudio>=2.3.0, numpy, and moviepy - none of it exotic, but worth having installed before your first run rather than discovering a missing package mid-workflow.
You don't need to hunt down a model file yourself - the Hybrid Demucs checkpoint downloads automatically from the torch hub cache the first time you run the node.
Common issues
That auto-download is also the pack's one documented failure mode: if the checkpoint download gets interrupted, you'll hit a BadZipFile: failed finding central directory error. It means the cached .th file is corrupted, not that anything's wrong with your workflow. Fix is simple - delete it and let ComfyUI re-download on the next run:
rm ~/.cache/torch/hub/checkpoints/*.th # Linux/macOS
del %USERPROFILE%\.cache\torch\hub\checkpoints\*.th # Windows
On Windows you may also see a ConnectionResetError / _ProactorBasePipeTransport traceback in the console - that's harmless asyncio noise from Python's event loop closing a connection, and it doesn't affect your separated audio. Safe to ignore.
If you want to feed a video file straight into a LoadAudio node (rather than separating the audio track after the fact), note that stock ComfyUI's LoadAudio only accepts audio extensions by default - you'd need to edit ComfyUI's nodes_audio.py to add video extensions. Easier option: use this same pack's AudioVideoCombine node, which takes a VIDEO input directly and doesn't require that edit.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| chunk_fade_shapeopt | COMBO | linear | Audio is split into segments (chunks) with overlapping areas to ensure smooth transitions. This setting controls the fade effect at these overlaps. Choose Linear for even fading, Half-Sine for a smooth curve, Logarithmic for a quick fade out and slow fade in, or Exponential for a slow fade out and quick fade in. |
| chunk_lengthopt | FLOAT | 10.00 | The length of each segment (chunk) in seconds. Longer chunks may require more memory and MIGHT produce better results. |
| chunk_overlapopt | FLOAT | 0.10 | The overlap between each segment (chunk) in seconds. A higher overlap may be necessary if chunks are too short or the audio changes rapidly. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| Bass | AUDIO | — |
| Drums | AUDIO | — |
| Other | AUDIO | — |
| Vocals | AUDIO | — |