Apply Silero VAD
Find the speech timestamps in a long recording
- model
- audio
- timestamps
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) andaudio- required.threshold(default0.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(default250) - 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(default100) - 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(default512) - 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(default30) - 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | SILERO_VAD | — | |
| audio | AUDIO | — | |
| threshold | FLOAT | 0.500–1 | — |
| min_speech_duration_ms | INT | 2500–4294967296 | — |
| max_speech_duration_s | FLOAT | — | |
| min_silence_duration_ms | INT | 1000–4294967296 | — |
| window_size_samples | INT | 5120–4294967296 | — |
| speech_pad_ms | INT | 300–4294967296 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| timestamps | SILERO_VAD_TIMESTAMPS | — |