SAM-Audio Text Separate
Separate any sound by describing it
- pipeline
- audio
- target
- residual
This is the node you'll reach for first, and honestly the reason most people install the pack. Load an audio file, type a description of a sound in a few plain words, and out come two tracks: target - that sound, isolated - and residual, everything else. "Man speaking" and you get the voice with the room tone stripped away. "Dog barking" and you get just the dog, not the traffic it's barking at.
What makes this different from the stem-separator tools you already know (Deezer's Demucs and friends) is that there's no fixed list of "stems." Music separators split into vocals/bass/drums/other. SAM-Audio splits into whatever you described. That's a much bigger space - it's what a foundation model trained across text, audio, and vision gets you.
How it works
You describe the sound and the model runs a diffusion-style separation conditioned on that text. The prompt style genuinely matters, and the node's own docs are the ground truth here: short, lowercase noun or verb phrases - man speaking, dog barking, car honking - match what the model was trained on. You don't write a sentence; you name the thing. If you find yourself typing a paragraph, the model is more likely to hedge than to help.
The inputs you'll actually touch:
description- the sound to isolate. Keep it short and lowercase.predict_spans- off by default. Flip it on and the model first locates non-ambient sound events before separating (SAM-Audio calls this the PE span predictor). It uses extra memory and time, and it lazily downloads a separate 5.8 GB predictor model on top of your checkpoint. It's a genuinely better pipeline for long, event-dense recordings - just know what you're agreeing to download.seedandinference_steps- same story as every separator here: the run starts from noise, so the seed makes results reproducible, and 32 steps is the default sweet spot.chunk_duration/chunk_overlap- 10-second chunks with a 1-second crossfade by default, so long clips don't eat all your VRAM.0means one full pass over the whole clip.
Everything is mono at 48 kHz on the way out, which is a SAM-Audio property, not a bug - preview both outputs before you wire them into anything expecting stereo.
Installing it
ComfyUI Manager, search "ComfyUI-SAM-Audio", install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/ethanfel/ComfyUI-SAM-Audio.git
python ComfyUI-SAM-Audio/install.py
Then load a model with SAM-Audio Model Loader (the default large checkpoint works for everything), load your audio, connect both, and queue. First run downloads the checkpoint - 5–15 GB depending on the model you picked, so expect a long first queue and a fast second one.
Common issues
- The model grabs the wrong thing. Your prompt is too vague or too specific. Try
man speakinginstead ofmale voice with a southern accent, or escalate to the Span Prompt + Span Separate nodes to add timing guidance. predict_spanssuddenly eats your disk. That's the 5.8 GB PE predictor downloading once. It's cached after that.- Empty description. The node rejects it for text separation - you need some text here. Only the visual nodes let you leave it blank.
- Audio at the wrong sample rate. The node resamples to 48 kHz internally, so a 44.1 kHz file still works - it just costs you a conversion you don't see.
The workflow shape is four nodes: Load Audio → Text Separate, Model Loader → Text Separate, then PreviewAudio (or a save node) on both target and residual. That's the whole trick - it's the pack's easiest win.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeline | SAM_AUDIO_PIPELINE | — | |
| audio | AUDIO | — | |
| description | STRING | man speaking | A concise lowercase description of the sound to isolate. |
| predict_spans | BOOLEAN | false | Ask supported models to locate non-ambient sound events before separation. Uses additional memory and time. |
| seed | INT | 00–18446744073709550000 | Controls SAM-Audio's initial noise for reproducible separation. |
| inference_steps | INT | 322–128 | Number of midpoint function evaluations. Higher values are slower and may improve quality. |
| chunk_duration | FLOAT | 10.00–3600 | Seconds processed per pass. Use 0 to process the entire clip at once. |
| chunk_overlap | FLOAT | 1.00–60 | Seconds shared by adjacent chunks for a smooth crossfade. |
| reranking_candidatesopt | INT | 11–8 | Generate multiple candidates and select one with Meta's Judge. Values above 1 lazily download and load the optional Judge model. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| target | AUDIO | — |
| residual | AUDIO | — |