Custom MSS Separate
For the checkpoints the catalogue never got around to listing
- audio
- params
- stem_1 (Audio)
- stem_1 (String)
- stem_2 (Audio)
- stem_2 (String)
- stem_3 (Audio)
- stem_3 (String)
- stem_4 (Audio)
- stem_4 (String)
- stem_5 (Audio)
- stem_5 (String)
- stem_6 (Audio)
- stem_6 (String)
- stem_7 (Audio)
- stem_7 (String)
- stem_8 (Audio)
- stem_8 (String)
What it's for
MSS Separate hands you 297 catalogued models and downloads whichever you pick. That's great until you have your own weights: a fine-tune from MSST-WebUI, a friend's roformer, some _sdr_11.47.safetensors you grabbed off a forum post that nobody ever catalogued. Custom MSS Separate is the door for those. Point it at the folder, and it shows up in the model menu like anything else.
Same separation engine, same stem outputs, one difference that matters at the start: nothing downloads and there's no source widget, because the weights are already yours.
The folder layout is not optional
It scans <your pymss model folder>/custom - i.e. ComfyUI/models/pymss/custom on a default install, or E:/AI/Pymss-Studio/models/custom if you've pointed COMFY_MSS_MODEL_DIR there. Each model gets its own direct child folder, and the folder name is what appears in the menu. Inside it must sit a weights file and a YAML config:
ComfyUI/models/pymss/custom/
my_vocals_roformer/
model_weights.ckpt
config.yaml
Weight extensions it accepts: .ckpt, .pth, .pt, .safetensors, .safetensor, .bin. Config must be .yaml - .yml is ignored, which has bitten people. Folders missing either half simply don't appear.
The number of outputs isn't guessed. The node reads training.instruments out of your YAML and builds one output pair per entry:
training:
instruments:
- Vocals
- Instrumental
Get that list wrong and your outputs are wrong - this is the file telling the node what the model separates.
Inputs and outputs
audio- theAUDIOstream.model_name- every folder that qualified. Empty at first; see "Refresh Models" below.model_type-autoby default, which hands the YAML to pymss for architecture detection. The menu covers the 11 real choices:mel_band_roformer,bs_roformer,bs_roformer_hyperace,bs_conformer,mel_band_conformer,mdx23c,htdemucs,apollo,bandit,bandit_v2,scnet.device, plus optionalparams(MSS Params),device_idsanddebug- as on the other separators.
Outputs are the familiar pairs, stem_1 (Audio)/stem_1 (String) up to eight, trimmed to whatever your YAML declared. If no valid model pair exists yet, the node just hides them.
The two traps
ModelTypeDetectionError. Auto-detection lives in pymss-core and it's conservative: when a config is ambiguous it raises rather than guesses, and you get a RuntimeError in the console. The fix is boring - set model_type explicitly and run again. Models with no identifying YAML fields will always need this.
Wrong file chosen. If a folder holds several weights and several configs, the node prefers a pair with matching filenames, and otherwise falls back to the first file of each type in alphabetical order. It doesn't warn. One model and one config per folder is the only layout that can't surprise you.
Refresh Models. Custom models are scanned on the fly and then cached in the frontend, so after adding, deleting or editing files you have to click the Refresh Models button on the node. ComfyUI's own refresh isn't enough.
Also by design: VR/UVR models are filtered out of this menu entirely, even if you give them a YAML. Custom MSS is for MSST architectures - for the legacy .pth family, use VR Separate.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/pymss-project/comfy-mss
python -m pip install pymss # ComfyUI's Python env
(or install Comfy-MSS through ComfyUI Manager). pymss brings its own dependencies - av, librosa, numpy, torch>=2.7.1, pymss-core, pyyaml, tqdm. Then drop your weights and config into ComfyUI/models/pymss/custom/<your_model>/ and restart. Watch out for workflows built in v1.0.x: node types were renamed in v1.1.0 and they won't load.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| model_name | COMBO | 0 options: | |
| model_type | COMBO | auto | 12 options: auto, mel_band_roformer, bs_roformer, bs_roformer_hyperace, bs_conformer, mel_band_conformer, +6 |
| device | COMBO | auto | 5 options: auto, cpu, cuda, mps, mlx |
| paramsopt | PYMSS_MSS_PARAMS | — | |
| device_idsopt | STRING | 0 | — |
| debugopt | BOOLEAN | false | — |
Outputs (16)
| Name | Type | Description |
|---|---|---|
| stem_1 (Audio) | AUDIO | — |
| stem_1 (String) | STRING | — |
| stem_2 (Audio) | AUDIO | — |
| stem_2 (String) | STRING | — |
| stem_3 (Audio) | AUDIO | — |
| stem_3 (String) | STRING | — |
| stem_4 (Audio) | AUDIO | — |
| stem_4 (String) | STRING | — |
| stem_5 (Audio) | AUDIO | — |
| stem_5 (String) | STRING | — |
| stem_6 (Audio) | AUDIO | — |
| stem_6 (String) | STRING | — |
| stem_7 (Audio) | AUDIO | — |
| stem_7 (String) | STRING | — |
| stem_8 (Audio) | AUDIO | — |
| stem_8 (String) | STRING | — |