🎵 Deep Extract V2 - Separator
Split a song into vocals, drums and bass without leaving ComfyUI
- track
- drums
- bass
- other
- vocals
- derived_stem
You know the workflow: you want the acapella for a remix, the drums to analyze on their own, or a beat to drive an audio-reactive video. Traditionally that meant installing Demucs separately and running a terminal command. DeepExtractV2 collapses that into a single node - drop audio in, get drums, bass, other, and vocals out the other side.
Here's the honest part up front: this is a wrapper, not a new model. The top comment on its r/comfyui release thread was literally "so it's just a comfy wrapper for demucs?", and the author said yes. That's not a knock. Demucs (from Meta) is still the best open-source music source separator around, and what this node gives you is the separation step inside the graph - so the stems stay in ComfyUI as AUDIO tensors you can wire into preview, effects, or the stem-driving-keyframes setup the audio-reactive crowd runs via Yvann's nodes. No saving files, no shell, no dragging results back in.
How it works
The pack vendors a full copy of Demucs under demucs/ (MIT licensed, with the Meta license file shipped alongside - someone called that out in the release thread, and it's been handled). On first run it downloads the htdemucs checkpoint from Meta's servers (roughly 300 MB, cached by torch.hub under ~/.cache/torch/hub/checkpoints/). One detail worth knowing: stock Demucs htdemucs averages a bag of four models; this node loads just one - faster and lighter, ~4 GB VRAM is plenty - at the cost of a little bag-averaging robustness. For vocals-out-of-a-pop-song you won't notice.
Mechanically it's textbook Demucs: the audio is mean/std normalized, run through a hybrid transformer (convolutions plus a cross-transformer) that predicts the four stems, then denormalized. The segment, overlap, split, and shifts knobs feed this - long tracks get chopped into chunks so memory stays flat, and shifts re-runs prediction on random offsets and averages, the one setting that buys quality at the cost of time.
The inputs and outputs that matter
You only really touch four things:
- track (
AUDIO) - feed it from ComfyUI's built-in Load Audio node. - stem (
STRING) - the whole trick of this node. Leave it empty to get all four stems separately; typevocals,drums, orbassto isolate just that one plus a complementary track. - other_method - how that complementary track is built:
addsums the remaining stems (yourno_vocalskaraoke track),minussubtracts the selected stem from the original,noneskips it. - out (
STRING) - folder created inside your main ComfyUI directory, defaultseparated.
The rest are Demucs settings with sane defaults (shifts 1, overlap 0.25, split on, device cuda). audio_format (wav/flac/mp3), bit_depth, clip_mode, and the mp3 pair only affect how files are written. There's no model picker - it always runs htdemucs.
Outputs are drums, bass, other, vocals, then derived_stem - wire any into Preview Audio to listen. If you select a single stem, the other three outputs come back as silent placeholders, so don't panic about a muted graph.
One trap: files land in ComfyUI/<out>/<random-8-char-name>/<stem>.<ext>. The {track} in the filename pattern is that random string, not your song's name - ComfyUI's audio tensors don't carry filenames. Watch the console for the "Separated tracks will be stored in..." line to find them.
Installing it
Try ComfyUI Manager first (search "DeepExtract2"). Otherwise:
cd ComfyUI/custom_nodes
git clone https://github.com/abdozmantar/ComfyUI-DeepExtractV2.git
Then the part that trips everyone up. The pack ships a setup.py that builds its own virtualenv and installs torch into it - and on Windows only, the node actually points at that venv. So: on Windows, double-click setup.bat (it targets ComfyUI portable's embedded python). On Linux/macOS, skip setup.py entirely and install the requirements into the Python ComfyUI already uses:
cd ComfyUI/custom_nodes/ComfyUI-DeepExtractV2
pip install -r requirements.txt # the same python ComfyUI runs under
That's the source of most "node doesn't appear" and "it keeps asking for torch 2.01" complaints in the release thread. The requirements are heavier than the typical image-node (torchaudio, julius, openunmix, xformers, diffq, dora-search, lameenc), but it's a one-time install. Restart ComfyUI and you'll find DeepExtractV2 > Deep Extract V2 - Separator.
Troubleshooting
- Node missing after install - delete any
venvand__pycache__inside the pack folder, re-run setup, restart. That's the author's own fix from the release thread. - First run stalls - it's downloading the ~300 MB model, not hung. Keep Meta's download servers reachable.
- Linux,
setup.pywants torch 2.x - use thepip install -r requirements.txtroute above instead. - CPU only? Set
devicetocpuand expect it to crawl; demucs is a GPU model at heart.
It's a young, small pack - a single node, late 2025 - a convenience wrapper around a proven model rather than a new breakthrough. But for that one job, splitting a song into clean stems inside ComfyUI, it does it well.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| track | AUDIO | Input audio track to separate | |
| out | STRING | separated | Folder where to put extracted track. This folder will be created inside the main ComfyUI directory. |
| device | COMBO | cuda | Device to use for inference |
| overlap | FLOAT | 0.250–1 | Overlap between audio chunks |
| shifts | INT | 11–20 | Number of random shifts for stabilization |
| segment | INT | 00–600 | Split size of each chunk (0 = no split) |
| bit_depth | COMBO | default | Audio output bit depth |
| clip_mode | COMBO | rescale | Clipping handling strategy |
| audio_format | COMBO | wav | Output audio file format |
| mp3_bitrate | INT | 32064–320 | Bitrate for MP3 output |
| mp3_preset | INT | 22–7 | Encoder preset (2=best, 7=fast) |
| jobs | INT | 00–32 | Number of parallel jobs |
| split | BOOLEAN | true | Split audio in chunks to save memory |
| other_method | COMBO | add | Decide how to get "no_{STEM}". "none" will not save "no_{STEM}". "add" will add all the other stems. "minus" will use the original track minus the selected stem. |
| stem | STRING | Only separate audio into {STEM} and no_{STEM}. | |
| filename | STRING | {track}/{stem}.{ext} | Set the name of output file. Use '{track}', '{stem}', '{ext}' to use variables of track name without extension, track extension,stem name and default output file extension. Default is {track}/{stem}.{ext} |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| drums | AUDIO | — |
| bass | AUDIO | — |
| other | AUDIO | — |
| vocals | AUDIO | — |
| derived_stem | AUDIO | — |