Engines available
| Engine | Quality | Browser support | Where it runs |
|---|---|---|---|
off | Browser-native suppression only | All | Browser |
krisp | High | Chrome, Edge, Firefox, Safari | Bundled in the widget |
deepfilter | Very high (adjustable strength) | Chrome, Edge (needs SharedArrayBuffer) | DeepFilterNet3 WASM, loaded from CDN |
Setting defaults via the appearance API
Audio preferences are per-user, stored in browserlocalStorage. The character’s widget_appearance controls the default that applies before a user picks their own, and whether the settings drawer is exposed at all.
Hide the user-facing settings drawer
Audio preferences schema
These are the fields the widget reads fromlocalStorage (and the same fields a custom UI should write):
| Field | Type | Default | Description |
|---|---|---|---|
noiseFilter | "off" | "krisp" | "deepfilter" | "off" | Active NC engine |
deepFilterStrength | 0–100 | 50 | Aggressiveness for deepfilter (higher = more removed, +latency) |
echoCancellation | boolean | true | Browser-native AEC |
noiseSuppression | boolean | true | Browser-native NS — always on when noiseFilter is "off" |
autoGainControl | boolean | false | Browser-native AGC |
voiceIsolation | boolean | false | Hardware voice isolation (Chromium/Edge 116+) |
headphonesMode | boolean | false | Disables half-duplex ducking when user wears headphones |
Self-hosting the DeepFilterNet3 model
By default the WASM, ONNX, and ESM module load fromhttps://cdn.mezon.ai. Host them yourself for CSP compliance or offline installs:
Step 1 — Download the three files
Fromhttps://cdn.mezon.ai:
df_bg.wasmDeepFilterNet3_onnx.tar.gz- the
mezonai-deepfilterESM module (fromhttps://esm.sh/mezonai-deepfilter)
Step 2 — Serve them from your CDN
Host at matching filenames onhttps://cdn.yoursite.com/.
Step 3 — Point the widget at your CDN
The widget reads these viadata-* attributes on the script tag:
Implementing NC in a custom UI
If you’re building your own voice UI on top of the LiveKit SDK, integrate the same engines yourself:Krisp
DeepFilterNet3
Switching engines at runtime
Persisting user preferences
Store the user’s choice inlocalStorage keyed by agent slug so they don’t have to set it every session:
Browser compatibility
| Feature | Chrome | Firefox | Safari | Edge |
|---|---|---|---|---|
| Krisp | ✓ | ✓ | ✓ | ✓ |
| DeepFilterNet3 | ✓ | partial | ✗ | ✓ |
setSinkId (speaker pick) | ✓ | ✓ | ✗ | ✓ |
| Voice isolation | ✓ | ✗ | ✗ | ✓ |
SharedArrayBuffer, which requires these response headers on your page:
