ComfyUI Node

Apply Silero VAD

Find the speech timestamps in a long recording

By kale4eat·Created 2 years ago·Updated about a year ago· 23
Apply Silero VAD
  • model
  • audio
  • timestamps
threshold0.50
min_speech_duration_ms250
max_speech_duration_s
min_silence_duration_ms100
window_size_samples512
speech_pad_ms30

This is the node that actually finds where the speech is. SDT_SileroVADLoader just gets the model into memory - this one runs it against a real clip and returns the timestamps of every segment it thinks contains speech, filtering out silence, room tone, and noise in between.

How it works

It's a direct wrapper around Silero VAD's own speech-timestamp logic: the model scores short windows of audio for speech probability, and the surrounding parameters here (thresholds, minimum durations, padding) shape how those raw per-window scores get merged into final speech segments. The output, SILERO_VAD_TIMESTAMPS, is the list of detected segment boundaries - you'd feed those into whichever downstream node in the pack consumes VAD timestamps to actually slice the source audio into individual speech clips.

The inputs and outputs that matter

  • model (SILERO_VAD) and audio - required.
  • threshold (default 0.5, range 0–1) - the speech-probability cutoff. Lower it if VAD is missing quiet or mumbled speech; raise it if it's flagging background noise as speech.
  • min_speech_duration_ms (default 250) - discards detected speech blips shorter than this. Useful for filtering out clicks or brief noise the model mistakes for a word.
  • max_speech_duration_s (optional, unbounded by default) - caps how long a single detected speech segment can run before it's forced to split; leave it unbounded unless you specifically need short segments.
  • min_silence_duration_ms (default 100) - how long a gap needs to be before it's treated as a real pause rather than folded into the surrounding speech segment. Raise this if VAD is chopping natural speech into too many tiny fragments at every brief pause.
  • window_size_samples (default 512) - the model's internal analysis window size; this is a model-architecture parameter more than a tuning knob most people should touch.
  • speech_pad_ms (default 30) - padding added to both edges of each detected segment, so words don't get clipped right at the boundary the model detected.
  • timestamps (output, SILERO_VAD_TIMESTAMPS) - the detected speech regions.

How to install it

ComfyUI Manager: search ComfyUI-speech-dataset-toolkit, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/kale4eat/ComfyUI-speech-dataset-toolkit
cd ComfyUI-speech-dataset-toolkit
pip install torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
pip install onnxruntime-gpu   # required for Silero VAD specifically, not bundled in requirements.txt

If you're CPU-only, install plain onnxruntime instead and set force_onnx_cpu to true on the loader.

Common issues & troubleshooting

Errors before this node even runs. That's almost always the missing onnxruntime install on the loader side, not this node - see SDT_SileroVADLoader for the fix.

Too many tiny fragmented segments. Raise min_silence_duration_ms so brief pauses (breaths, short hesitations) get folded into the surrounding speech instead of splitting it. This is the single most common Silero VAD tuning complaint, and it's a tuning issue, not a model quality one.

Missing quiet speech at the start or end of a clip. Lower threshold a bit, and make sure speech_pad_ms is giving you enough margin - the model's raw detection boundary is often slightly tighter than where speech actually starts.

Categoryspeech-dataset-toolkit/ai/SileroVAD

Inputs (8)

NameTypeDefaultDescription
modelSILERO_VAD
audioAUDIO
thresholdFLOAT0.500–1
min_speech_duration_msINT2500–4294967296
max_speech_duration_sFLOAT
min_silence_duration_msINT1000–4294967296
window_size_samplesINT5120–4294967296
speech_pad_msINT300–4294967296

Outputs (1)

NameTypeDescription
timestampsSILERO_VAD_TIMESTAMPS