Nodes/ComfyUI-DBS/DBS Separate (music / sfx / speech)
ComfyUI Node

DBS Separate (music / sfx / speech)

Pull the dialogue out of a video without leaving ComfyUI

By hiroki-abe-58·Created 2 days ago·Updated 2 days ago· 32
DBS Separate (music / sfx / speech)
  • model
  • audio
  • music
  • sfx
  • speech
  • report
◄channelsmono►
◄output_sample_rate44100►

Here's the job nobody builds a node for. You've got a clip with a soundtrack - dialogue, music, effects glued together - and you want the parts: speech gone for a re-score, speech alone for dubbing or a lip-sync model.

ComfyUI's audio layer barely helps. It's a generation layer: TTS packs for voices, ACE-Step for music, MMAudio for foley, native audio in LTX-2. Everything makes new sound. Source separation - taking an existing mix apart - is the inverse direction, and searching the big subs for it turns up a couple dozen threads about Demucs and songs. DBS Separate (music / sfx / speech) is the rare node for the film-mix version: three stems out of one audio input, and the three adding back up to what you put in.

How it works

Dynamic Band Splitting is the model, not the marketing. Classic separators of this family (BSRNN, TIGER) chop the spectrogram into bands using a fixed split - someone picked the band edges. DBS learns them per input: a router scores every STFT bin as a likely boundary, hard Top-K keeps a fixed number per coarse frequency region, and each variable-width band is pooled into one token. A mask decoder smooths those tokens back onto the STFT grid and emits complex masks, one per stem. The paper's claim is simply that where you cut the spectrum should depend on the audio - sensible, and on the model cards' numbers it buys a little SI-SDR.

Long audio is done in windows, and that matters more than the architecture does. The official overlap-add windows are baked in per model: DBS-TIGER runs 6-second windows every 3 seconds, DBS-BSRNN 3-second windows every 1.5 seconds. Shorter than a window is a single pass; longer gets averaged across overlaps. Any length works.

The stems are additive. Music plus sfx plus speech reconstruct the input to around 1e-6, in phase. That's why the remove-dialogue workflows just add music and sfx together with add - the two non-speech stems sum to the original minus the dialogue.

The inputs you actually touch

model takes the DBS_MODEL bundle from DBS Loader - the whole reason that node exists. audio is a plain ComfyUI AUDIO, so Load Audio goes straight in, or Load Video → Get Video Components if your source is a clip.

Then two settings decide most of it. channels defaults to mono, which separates the channel mean the way the official usage does - great for speech, but the stems come out mono and stereo gets collapsed. each channel separates every channel on its own, keeps stereo, and roughly doubles runtime on stereo input. output_sample_rate defaults to 44100, the model's rate; pick input and the stems come back at your source's rate instead, no pointless 44.1k round trip.

Those two travel together. remove_dialogue.json and video_remove_dialogue.json both use each channel + input, which is exactly right for "keep this video's stereo audio, minus the talking."

The outputs

music, sfx and speech are all plain AUDIO, so they wire into Save Audio, or into a Merge Audio node with add to reassemble a dialogue-free track - the shipped workflow. For the video case you recombine with Create Video.

The fourth output, report, is a STRING and more useful than a report usually is: JSON with the model, the device it actually ran on, the input rate, whether resampling happened, the window count and times_real_time. Wire it into Preview Any and "why did this take four minutes" answers itself.

Installing the pack

ComfyUI Manager: search DBS Soundtrack Separation for ComfyUI. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/hiroki-abe-58/ComfyUI-DBS
python -m pip install -r ComfyUI-DBS/requirements.txt
python custom_nodes/ComfyUI-DBS/tools/download_model.py --models-dir models/dbs

Dependencies are einops and safetensors, both already in a normal ComfyUI install. The models are 23 MB for the pair, SHA-256 checked, into models/dbs/DBS-TIGER-DnR/ and models/dbs/DBS-BSRNN-DnR/. It needs ComfyUI v0.38.0+ for the V3 node API, and nothing downloads at run time. Installed via Manager? You still need that download step - Manager won't populate models/dbs.

Where it bites

CPU with the default model is painful. DBS-TIGER runs around 0.5x real time on a 24-thread CPU, so a five-minute clip is ten minutes of queue. Switch the loader to DBS-BSRNN-DnR for CPU work. Interrupt takes effect between windows, so expect up to one hop of lag before cancel lands.

Mono in, mono out. Left channels on mono and your stems sound flat and centred? That's the setting, not the model.

It's a film-mix tool, not a vocal remover. The models were trained on English speech (LibriSpeech), Free Music Archive music and FSD50K effects, mixed like a film soundtrack. On a song, expect the singing in music - arguably correct, definitely not what someone stripping vocals wanted. Other languages and very loud music are "for you to judge" per the README.

Determinism. On CUDA, repeated runs differ in the last digits - the official code does the same - so pass --deterministic if you need byte-identical files. On CPU the pack matches the official package exactly.

An odd little node doing an unfashionable job with a 1M-parameter model, and that's why it's worth knowing: nothing else in your ComfyUI install goes backwards through a soundtrack.

Categoryaudio/dbs

Inputs (4)

NameTypeDefaultDescription
modelDBS_MODEL—
audioAUDIO—
channelsCOMBOmonomono: the channel mean, as the official usage does. each channel: every channel separated on its own (keeps stereo; takes longer)
output_sample_rateCOMBO4410044100: the model's rate. input: resampled back to the input's rate

Outputs (4)

NameTypeDescription
musicAUDIO—
sfxAUDIO—
speechAUDIO—
reportSTRING—