Pre-compiled 14-class keyword spotter weights in .vxrt
format, packaged for the VoxRT on-device inference runtime.
Streaming Conformer, cache-aware attention, 25 fps emit rate.
Pair with the consumer library:
- Browser —
voxrt-kws-browser· npm@voxrt/kws-browser - Android / iOS / Linux — coming (same distribution shape as
voxrt-wake-word-*)
This repo is a thin distribution layer — the actual files live as GitHub Release attachments per version, not in the git tree. The README below is the index.
Fires on any of these 14 English keywords:
yes, no, cancel, play, pause, next, previous, up,
down, back, on, off, voxrt, hey_vox
The class list is embedded in the .vxrt manifest — the runtime
reads it at load time via engine.classNames(), so a future rev
with a different vocab reuses the same runtime binary.
A self-contained, binary, framework-agnostic model file:
- Topology + weights encoded in a compact format (no ONNX / PyTorch dependency at consume time). Runtime-configurable Conformer topology — d_model, n_blocks, n_heads, kernel sizes are all read from the manifest at load time.
- AES-256-GCM encrypted at rest, decrypted on load by the native SDKs; the browser SDK ships a pre-decrypted plaintext variant (no crypto material in the browser binary, per voxrt-wake-word-browser tier table).
- Versioned —
arch = "kws-v1"in the manifest; newer arch tags may add features that older runtimes refuse to load.
You don't need to know the format to use it — feed the bytes to
KwsEngine.fromBytes(bytes) and it Just Works.
| File | Size | SHA-256 |
|---|---|---|
voxrt_kws.vxrt |
1.3M | 2fdddc5ea63b26342b28a9bd1c78bb946f0cc8943b4086c46e51c53ac6cc3353 |
Compatible with: @voxrt/kws-browser@v0.1.0 (uses the
matching plaintext variant baked into the npm package —
independent build produced from the same encrypted source above
via vxrt-plaintext-convert at release time on the dev box).
14-class held-out validation split, speaker-disjoint from train + val.
- val/f1_macro: 0.9671
- val/acc: 0.9966
At the recommended deploy threshold of 0.9 with 3-consecutive- frame confirmation + 25-emit (~1 s) per-class cooldown, the model is live-mic robust to media noise + MUSAN speech/music mix.
- Streaming Conformer, cache-aware causal MHSA over 2 s past frames.
- 4 blocks × 4 heads (d_model=96, head_dim=24), ffn_expand=2 (ffn_dim=192), conv module kernel=9.
- 2× stride-2 convolutional subsampling stem (mel 100 fps → emit 25 fps).
- Total: 636 K parameters, fp16-packed weights.
See LICENSE in this repo. Proprietary in-house model,
trained on synthetic (Pocket TTS) and licensed speech (Common
Voice) — no upstream license obligations.