Nodes/DeepExtract2/🎵 Deep Extract V2 - Separator
ComfyUI Node

🎵 Deep Extract V2 - Separator

Split a song into vocals, drums and bass without leaving ComfyUI

By abdozmantar·Created 11 months ago·Updated 11 months ago· 55
🎵 Deep Extract V2 - Separator
  • track
  • drums
  • bass
  • other
  • vocals
  • derived_stem
outseparated
devicecuda
overlap0.25
shifts1
segment0
bit_depthdefault
clip_moderescale
audio_formatwav
mp3_bitrate320
mp3_preset2
jobs0
splittrue
other_methodadd
stem
filename{track}/{stem}.{ext}

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; type vocals, drums, or bass to isolate just that one plus a complementary track.
  • other_method - how that complementary track is built: add sums the remaining stems (your no_vocals karaoke track), minus subtracts the selected stem from the original, none skips it.
  • out (STRING) - folder created inside your main ComfyUI directory, default separated.

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 venv and __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.py wants torch 2.x - use the pip install -r requirements.txt route above instead.
  • CPU only? Set device to cpu and 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.

CategoryDeepExtractV2

Inputs (16)

NameTypeDefaultDescription
trackAUDIOInput audio track to separate
outSTRINGseparatedFolder where to put extracted track. This folder will be created inside the main ComfyUI directory.
deviceCOMBOcudaDevice to use for inference
overlapFLOAT0.250–1Overlap between audio chunks
shiftsINT11–20Number of random shifts for stabilization
segmentINT00–600Split size of each chunk (0 = no split)
bit_depthCOMBOdefaultAudio output bit depth
clip_modeCOMBOrescaleClipping handling strategy
audio_formatCOMBOwavOutput audio file format
mp3_bitrateINT32064–320Bitrate for MP3 output
mp3_presetINT22–7Encoder preset (2=best, 7=fast)
jobsINT00–32Number of parallel jobs
splitBOOLEANtrueSplit audio in chunks to save memory
other_methodCOMBOaddDecide 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.
stemSTRINGOnly separate audio into {STEM} and no_{STEM}.
filenameSTRING{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)

NameTypeDescription
drumsAUDIO
bassAUDIO
otherAUDIO
vocalsAUDIO
derived_stemAUDIO