MSST Audio Separate
The modern stem splitter, now inside ComfyUI
- 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
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, orsingle_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 usesmelband_roformer_inst_v2.ckptfor vocals).device(COMBO) -auto,cuda, orcpu. The README's own advice: on limited VRAM, just setcpu.base_filename(STRING) - feeds the output naming. Wire it to Load Audio'sfilenameand you getsong_vocals.wavfor free.
The outputs are where the pack shows off. The schema declares model_info plus up to six stem_0–stem_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: song → song_vocals → song_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_rootis 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| model_category | COMBO | vocal_models | 3 options: vocal_models, multi_stem_models, single_stem_models |
| model_name | COMBO | 1 options: -- 请配置 config.json -- | |
| device | COMBO | auto | 3 options: auto, cuda, cpu |
| base_filename | STRING | audio | — |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| model_info | STRING | 模型元信息 JSON |
| stem_0 | AUDIO | 第 1 轨音频 |
| stem_0_fn | STRING | 第 1 轨文件名 |
| stem_1 | AUDIO | 第 2 轨音频 |
| stem_1_fn | STRING | 第 2 轨文件名 |
| stem_2 | AUDIO | 第 3 轨音频 |
| stem_2_fn | STRING | 第 3 轨文件名 |
| stem_3 | AUDIO | 第 4 轨音频 |
| stem_3_fn | STRING | 第 4 轨文件名 |
| stem_4 | AUDIO | 第 5 轨音频 |
| stem_4_fn | STRING | 第 5 轨文件名 |
| stem_5 | AUDIO | 第 6 轨音频 |
| stem_5_fn | STRING | 第 6 轨文件名 |