ComfyUI Node

MSST Audio Separate

The modern stem splitter, now inside ComfyUI

By Wang-Huachen·Created 4 months ago·Updated 4 months ago· 0
MSST Audio Separate
  • audio
  • model_info
  • stem_0
  • stem_0_fn
  • stem_1
  • stem_1_fn
  • stem_2
  • stem_2_fn
  • stem_3
  • stem_3_fn
  • stem_4
  • stem_4_fn
  • stem_5
  • stem_5_fn
model_categoryvocal_models
model_name
deviceauto
base_filenameaudio

This is the node you're actually here for. MSST Audio Separate is the star of Wang-Huachen's ComfyUI-MSST-WebUI pack: it takes one audio file and splits it into stems - vocals, drums, bass, other - using the modern MSST model family, the current quality pick in music source separation. If the older tools in this space are Demucs wrappers, MSST is the generation after: Roformer-based models that do multi-stem separation, denoising, dereverb, even karaoke. The whole job is running those models from inside ComfyUI, where audio tooling has always been bolted on rather than built in.

How it works - and why it won't break your ComfyUI

The pack's architecture is its best feature. It doesn't try to import MSST's heavy stack (torch, librosa, the training repo) into your ComfyUI Python environment - that's how audio packs normally create dependency hell, because every node in your install shares one environment with zero isolation. Instead, this node writes your AUDIO to a temp WAV, spawns a subprocess running the MSST WebUI portable package's own bundled Python, runs MSST's real MSSeparator inference code there, reads the resulting stem WAVs back into ComfyUI AUDIO objects, and cleans up after itself. The pack's own Python dependency is a single soundfile line. That's the honest fix for the class of problem the KB flags as the default failure mode in ComfyUI audio.

The flip side: this means MSST WebUI (with its workenv Python and models) is a hard requirement, not a nice-to-have. No MSST install, no separation.

The inputs that matter

  • audio (AUDIO) - from MSST Load Audio, or from another separator's stem output if you're chaining.
  • model_category (COMBO) - vocal_models, multi_stem_models, or single_stem_models. This filters the model list; the README's dereverb/denoise jobs live under single-stem models.
  • model_name (COMBO) - auto-populated by actually querying your MSST install, then filtered by category. Pick a model (the pack's example uses melband_roformer_inst_v2.ckpt for vocals).
  • device (COMBO) - auto, cuda, or cpu. The README's own advice: on limited VRAM, just set cpu.
  • base_filename (STRING) - feeds the output naming. Wire it to Load Audio's filename and you get song_vocals.wav for free.

The outputs are where the pack shows off. The schema declares model_info plus up to six stem_0stem_5 audio/stem-name pairs, and the node's JS extension renames the visible output ports to the actual stem names of whichever model you picked - vocals/other for a 2-stem model, drums/bass/other/vocals for a 4-stem, right up to kick/snare/toms/hh/ride/crash for a 6-stem drum model. model_info is a JSON string with the model name and the instrument-to-port mapping. Unused output pairs emit silence plus an empty filename, so the graph stays valid no matter what you connect.

Building a real workflow

Load → separate → save, then cascade for the classic use case: take the vocals stem and run it through a dereverb single-stem model.

MSLoadAudio → MSSTSeparate(vocal_models)
    ├── vocals → MSSTSeparate(single_stem_models, dereverb)
    │              └── noreverb → MSSaveAudio
    └── other → MSSaveAudio

Because each stem carries its own _fn string, filenames accumulate as you chain: songsong_vocalssong_vocals_noreverb. Wire each stem's _fn into a save node's filename input and the naming takes care of itself.

Installing it

cd ComfyUI/custom_nodes/
git clone https://github.com/Wang-Huachen/ComfyUI-MSST-WebUI

Then set msst_root in custom_nodes/ComfyUI-MSST-WebUI/config.json to your MSST WebUI portable directory (the README example is D:\MSST_WebUI_1.7.0_v2_cu128), leave python_env empty, restart ComfyUI. Or install through ComfyUI Manager by searching "MSST". You must also have the MSST WebUI portable package with its workenv environment and the models themselves in its pretrain folder - nothing is auto-downloaded here.

Common issues

  • Empty model dropdown. The placeholder is literally the Chinese for "please configure config.json". Your msst_root is wrong or the MSST env is broken. Fix the config, restart.
  • Models missing. The dropdown only shows what your MSST install actually has. No models downloaded, no dropdown.
  • Slow runs / VRAM. There's no model caching between executions - each run instantiates and reloads the model, so a batch workflow pays the load cost every time, and device=cpu (the README's recommendation for tight VRAM) is slower still. One run through a big model is fine; looping a hundred songs will test your patience.
  • It separates everything. The node runs the full model even if you only connect one stem. That's not a bug, just don't expect partial-cost runs.
  • Timed-out subprocess. The worker has a 10-minute cap; very long tracks on CPU with heavy models can hit it.

Respect the MSST WebUI prerequisite, wire the strings, and song becomes four files.

Categoryaudio/separation

Inputs (5)

NameTypeDefaultDescription
audioAUDIO
model_categoryCOMBOvocal_models3 options: vocal_models, multi_stem_models, single_stem_models
model_nameCOMBO1 options: -- 请配置 config.json --
deviceCOMBOauto3 options: auto, cuda, cpu
base_filenameSTRINGaudio

Outputs (13)

NameTypeDescription
model_infoSTRING模型元信息 JSON
stem_0AUDIO第 1 轨音频
stem_0_fnSTRING第 1 轨文件名
stem_1AUDIO第 2 轨音频
stem_1_fnSTRING第 2 轨文件名
stem_2AUDIO第 3 轨音频
stem_2_fnSTRING第 3 轨文件名
stem_3AUDIO第 4 轨音频
stem_3_fnSTRING第 4 轨文件名
stem_4AUDIO第 5 轨音频
stem_4_fnSTRING第 5 轨文件名
stem_5AUDIO第 6 轨音频
stem_5_fnSTRING第 6 轨文件名