Overview
The widget ships with a full audio settings drawer (accessible via the gear icon during a call). Users can choose their microphone, speaker, output volume, noise-cancellation engine, and more. All preferences are persisted inlocalStorage keyed by agent slug, so returning users keep their settings.
Noise-cancellation engines
The widget offers three noise-cancellation modes, selectable per user:| Engine | Availability | Quality | Notes |
|---|---|---|---|
| Off | Always | Browser-native NS only | Uses the browser’s built-in noise suppression if enabled. |
| Krisp | Desktop browsers (Chrome, Edge, Firefox) | High | @livekit/krisp-noise-filter — closed-source, bundled with the widget. Best for most use cases. |
| DeepFilterNet3 | Chrome / Edge (requires SharedArrayBuffer / WASM) | Very high | Open-source by mezonai. Adjustable strength (0–100). Loads WASM model from CDN at runtime. |
DeepFilterNet3 CDN
By default the WASM and ONNX files load fromhttps://cdn.mezon.ai. To self-host (e.g. for CSP compliance), override via data-* attributes on the script tag:
Audio preferences schema
The full set of per-user preferences stored in localStorage:| Field | Type | Default | Description |
|---|---|---|---|
echoCancellation | boolean | true | Browser-native acoustic echo cancellation (AEC). |
noiseSuppression | boolean | true | Browser-native noise suppression. Always on when noiseFilter is "off". |
autoGainControl | boolean | false | Browser-native automatic gain control. Disabled by default to avoid level pumping. |
voiceIsolation | boolean | false | Hardware voice isolation (Chromium/Edge 116+). |
noiseFilter | "off" | "krisp" | "deepfilter" | "off" | Active noise-cancellation engine. |
deepFilterStrength | number (0–100) | 50 | Aggressiveness of DeepFilterNet3 (higher = more noise removed, slight latency increase). Only used when noiseFilter is "deepfilter". |
micDeviceId | string | "" | deviceId of selected microphone. Empty = system default. |
speakerDeviceId | string | "" | deviceId of selected speaker (uses setSinkId). Empty = system default. |
outputVolume | number (0–100) | 80 | Speaker volume percentage. |
headphonesMode | boolean | false | Disables half-duplex ducking. Enable when the user is wearing headphones to allow full-duplex audio without echo. |
transcriptionEnabled | boolean | true | Show the live transcript strip during the call. |
textInputEnabled | boolean | false | Show a text input box so the user can type messages instead of speaking. |
Enabling/disabling the settings drawer
Control whether users can open the audio settings panel at all:show_audio_settings: false in your character’s appearance configuration to hide the gear icon entirely. Users will still get your default audio constraints, but won’t be able to change them.
Headphones mode
When a user is on headphones there is no risk of speaker audio looping back into the microphone, so the widget can operate in full-duplex (user and agent can speak simultaneously). Enable headphones mode to remove the automatic volume-ducking behaviour that would otherwise cut the agent’s audio when the user speaks. Users can toggle this in the settings drawer, or you can default it on/off from the server side via a custom initial session parameter.Browser compatibility notes
| Feature | Chrome | Firefox | Safari | Edge |
|---|---|---|---|---|
| Krisp noise filter | ✓ | ✓ | ✓ | ✓ |
| DeepFilterNet3 | ✓ | ✓ (limited) | ✗ | ✓ |
setSinkId (speaker select) | ✓ | ✓ | ✗ | ✓ |
| Voice isolation | ✓ | ✗ | ✗ | ✓ |
SharedArrayBuffer to be available, which needs Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp headers on your page.