Measured, not claimed

Every chart on this page comes from a script in bench/ or the training repository that you can run yourself. Measured on 2026-10-17 and 2026-10-18 on Apple Silicon against @ricky0123/vad-web 0.0.31 and onnxruntime-web 1.30. The full method, caveats and the things that did not work are in docs/COMPARISON.md.

The short version

Two people talking

This is the case voice agents actually meet: a TV, a colleague, a family member in the same room. The chart sweeps every threshold. For any share of the user's speech you want to keep, read off how much of the other person's speech gets through.

Background false-alarm rate against foreground recall for Auricle v1 and Silero v6 with a second talker in the room
At the default threshold both models keep about 98% of the user's speech. Silero v6 also passes 81% of the other person's frames; Auricle v1 passes 35%. At every point on the curve Auricle lets through three to four times less of the background talker. Clips are 5 s of a held-out LibriSpeech speaker with a second held-out speaker 3 to 15 dB quieter, both convolved with a real room impulse response. Regenerate with python -m vadtrain.prcurve.

One person talking

On clean single-speaker audio with human labels, Silero v6 is still the slightly better detector, by about one F1 point. We say so. If your product needs Silero's exact numbers, the Rust crate builds with its weights behind the silero feature.

Precision-recall curves of Auricle v1 and Silero v6 on TEN VAD's human-labelled test set
TEN VAD's 30 human-annotated recordings (LibriSpeech, GigaSpeech, DNS Challenge). At threshold 0.5: Auricle v1 92.7% F1, Silero v6 93.6%, TEN VAD's own model 93.1%. Frame-level scoring counts every boundary frame against the model, so these are lower bounds for what a segment-level policy sees.

Seven languages

The same two-talker test on FLEURS, two hours per language, with a same-language background speaker. Auricle v1 was trained on English only. It transfers, with the biggest gain on English and a 15 to 35 point gain elsewhere.

Background false-alarm rate per language for Auricle v1 and Silero v6
Share of the background talker's frames called speech at threshold 0.5. Foreground recall is within a point of Silero in every language. Mandarin and Japanese also show lower agreement with Silero's own labels on clean speech (95% and 93% against 98% to 99% elsewhere); adding ten hours of each language to training did not move any number, so the gap sits in the labels, not the student.

CPU per frame

The model is hand-written Rust compiled to WebAssembly with SIMD. There is no inference runtime to load or call through. Measured in real browsers by Playwright, 20 timed passes. The middle bar loads vad-web's own Silero v6 weights into Auricle's engine so the comparison is like for like; the first bar is what ships.

Per-frame cost of Auricle and onnxruntime-web in Chromium and WebKit
Both are far under the 32 ms budget per frame. The gain is headroom on weak devices and less battery, not lower detection latency, which is set by frame size and policy.

Start-up

Start-up time to a ready model for Auricle and vad-web
Time from the first call to a model that can score a frame. vad-web instantiates the ONNX Runtime and then builds a session from the model file; Auricle instantiates one WASM module with the weights already inside.

Download

Gzipped download size of Auricle and vad-web
The ESM package downloads only the detector a page asks for. The single-file script build carries both detectors at 1.4 MB gzipped, still a quarter of vad-web.

Knowing when you stopped

Same speech probabilities, different end-of-turn policy. 240 labelled utterances from six voices, five gap lengths, clean and with white noise at 20, 10 and 5 dB.

Median turn-end delay for Auricle and vad-web defaults
Auricle found all 240 utterances, vad-web 236; neither produced a false alarm. The cost of closing turns faster: pauses of 0.3 s inside one thought still merge into one turn, and six long sentences in noisy files were split at a comma pause. vad-web waits 1.4 s and so never splits, which suits dictation better than conversation.

Same model, same output

Maximum difference in speech probability between the Auricle forward pass and onnxruntime-web over 603 frames of speech: 7.8e-7. With the Silero weights, detection quality is identical by construction. Everything above is about cost and about what sits around the model.

What did not work

What is not measured yet

Maturity, plainly

vad-web: 1.58 million npm downloads in the last month, 32 releases since 2023, 26 contributors. Auricle: days old, zero releases. Smaller, faster and better with a second talker is measured; proven in the field is not.

Questions people ask

Is Auricle more accurate than Silero VAD?

On one person talking, Auricle v1 is about one F1 point behind Silero v6 (92.7% vs 93.6% on TEN VAD's human-labelled test set) and far ahead when a second person is talking: it wrongly flags 35% of the background talker's speech where Silero v6 flags 81%.

How much faster is Auricle than vad-web?

As shipped, about 5x less CPU per 32 ms frame in Chromium and WebKit (0.035 to 0.038 ms vs 0.18 ms), about 20x faster start-up (4 to 10 ms vs 175 to 215 ms), and a 16x smaller download (346 KB vs 5,520 KB). With identical Silero v6 weights on both sides the engine alone is still 3.5x cheaper per frame, because the model is hand-written Rust compiled to WebAssembly with no inference runtime.

How fast does Auricle detect the end of a turn?

Median 324 ms after the user stops talking, against 1,432 ms with vad-web's default settings, on 240 labelled utterances with 100% recall and zero false alarms.

Which languages does Auricle v1 work in?

Tested on English, Spanish, German, Arabic, Hindi, Mandarin and Japanese with the FLEURS corpus. In every language Auricle v1 flags 15 to 47 points less of a background talker's speech than Silero v6, with foreground recall within a point.

How do I reproduce the benchmarks?

Every chart comes from a script in the bench/ directory of the repository or from vadtrain.prcurve in the training repository. The curve data is checked in as bench/pr-v1.json and bench/langs-v1.json.