Nodes/Meta SAM-Audio/SAM-Audio Video Separate
ComfyUI Node

SAM-Audio Video Separate

Separate the sound of what you see, straight from a VIDEO node

By ethanfel·Created 23 days ago·Updated 8 days ago· 4
SAM-Audio Video Separate
  • pipeline
  • video
  • mask
  • target
  • residual
description
seed0
inference_steps32
chunk_duration10.0
chunk_overlap1.0
reranking_candidates1

If the Visual Separator is "hear what you point at," this is the one-handed version: you hand it a native ComfyUI VIDEO value and a mask, and it reads the video's embedded audio track itself, then isolates the sound of whatever you masked. No separate Load Audio, no manual frame-to-audio sync - the video is the source of both pictures and sound. It's the convenience wrapper at the end of the pack, and for footage that already has audio, it's the node to use.

How it works

The video input expects a real ComfyUI VIDEO - the kind produced by video loader or generation nodes, containing both frames and an embedded audio track. The node decodes the frames, grabs the audio, and runs the same visual separation as the Visual Separator: your white mask picks the object, the model figures out which sound belongs to it, and out come target and residual.

There's a nice implementation detail worth knowing: the pack uses ComfyUI's already-decoded media tensors rather than pulling in TorchCodec or a heavy video-decoding dependency. That's a deliberate choice - audio node packs at the edge of the ecosystem are where dependency conflicts live, and this one refuses to add another wheel to the pile. It's one less thing that can break your ComfyUI install.

The inputs that matter:

  • video - frames plus an embedded audio track. This is non-negotiable; the node errors if the VIDEO has no audio.
  • mask - white selects the visible object whose sound you want. One mask covers all frames, or give it one per frame if the object moves.
  • description - optional text to nudge the model. Leave it empty and mask-only works fine; add "guitar" or "crowd" when the model isn't locking on.
  • The shared quartet - seed, inference_steps, chunk_duration, chunk_overlap - behaves exactly as in the other separators.

The one thing that bites people

The error you'll actually hit: VIDEO input has no audio track. A lot of ComfyUI video nodes produce frames with no audio by default, so this happens all the time. The fix is in the README: attach audio with ComfyUI's Create Video node (or an equivalent) so the VIDEO value carries a track, then feed that in.

And that's also the honest decision point between this node and the Visual Separator. If your pipeline already has the audio as a separate value, or your video genuinely has no track, use SAM-Audio Visual Separate with images + audio wired independently - it skips the embedded-audio requirement entirely. Use Video Separate when the footage comes with sound and you want the minimal setup.

Workflow and notes

Video Loader ───────────► SAM-Audio Video Separate
SAM-Audio Model Loader ─► SAM-Audio Video Separate
                          └─► PreviewAudio / SaveAudio (target)
                          └─► PreviewAudio / SaveAudio (residual)

Use a -tv (text-visual) checkpoint from the Model Loader - same rule as the Visual Separator, since this is the same visual-prompt machinery. Everything outputs mono at 48 kHz.

Install: ComfyUI Manager → search "ComfyUI-SAM-Audio", or git clone https://github.com/ethanfel/ComfyUI-SAM-Audio.git into custom_nodes and run python ComfyUI-SAM-Audio/install.py, then restart. First run downloads the checkpoint and the visual encoder assets, so don't judge it by queue time alone.

Categoryaudio/SAM-Audio

Inputs (9)

NameTypeDefaultDescription
pipelineSAM_AUDIO_PIPELINE
videoVIDEOA native ComfyUI VIDEO containing frames and an embedded audio track.
maskMASKWhite selects the visible object whose sound should be isolated. Use one mask for all frames or one per frame.
descriptionSTRINGOptional text guidance to combine with the visual prompt.
seedINT00–18446744073709550000Controls SAM-Audio's initial noise for reproducible separation.
inference_stepsINT322–128Number of midpoint function evaluations. Higher values are slower and may improve quality.
chunk_durationFLOAT10.00–3600Seconds processed per pass. Use 0 to process the entire clip at once.
chunk_overlapFLOAT1.00–60Seconds shared by adjacent chunks for a smooth crossfade.
reranking_candidatesoptINT11–8Generate multiple candidates and select one with Meta's Judge. Values above 1 lazily download and load the optional Judge model.

Outputs (2)

NameTypeDescription
targetAUDIO
residualAUDIO