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 in localStorage keyed by agent slug, so returning users keep their settings.

Noise-cancellation engines

The widget offers three noise-cancellation modes, selectable per user:
EngineAvailabilityQualityNotes
OffAlwaysBrowser-native NS onlyUses the browser’s built-in noise suppression if enabled.
KrispDesktop browsers (Chrome, Edge, Firefox)High@livekit/krisp-noise-filter — closed-source, bundled with the widget. Best for most use cases.
DeepFilterNet3Chrome / Edge (requires SharedArrayBuffer / WASM)Very highOpen-source by mezonai. Adjustable strength (0–100). Loads WASM model from CDN at runtime.

DeepFilterNet3 CDN

By default the WASM and ONNX files load from https://cdn.mezon.ai. To self-host (e.g. for CSP compliance), override via data-* attributes on the script tag:
<script
  src="https://api.oshara.ai/widget.js"
  data-agent="support-bot"
  data-deepfilter-cdn="https://cdn.yoursite.com"
  data-deepfilter-wasm-url="https://cdn.yoursite.com/df_bg.wasm"
  data-deepfilter-onnx-url="https://cdn.yoursite.com/DeepFilterNet3_onnx.tar.gz"
  data-deepfilter-module-url="https://cdn.yoursite.com/deepfilternet3.esm.js">
</script>
Download the model files from the default CDN and host them at matching paths.

Audio preferences schema

The full set of per-user preferences stored in localStorage:
FieldTypeDefaultDescription
echoCancellationbooleantrueBrowser-native acoustic echo cancellation (AEC).
noiseSuppressionbooleantrueBrowser-native noise suppression. Always on when noiseFilter is "off".
autoGainControlbooleanfalseBrowser-native automatic gain control. Disabled by default to avoid level pumping.
voiceIsolationbooleanfalseHardware voice isolation (Chromium/Edge 116+).
noiseFilter"off" | "krisp" | "deepfilter""off"Active noise-cancellation engine.
deepFilterStrengthnumber (0–100)50Aggressiveness of DeepFilterNet3 (higher = more noise removed, slight latency increase). Only used when noiseFilter is "deepfilter".
micDeviceIdstring""deviceId of selected microphone. Empty = system default.
speakerDeviceIdstring""deviceId of selected speaker (uses setSinkId). Empty = system default.
outputVolumenumber (0–100)80Speaker volume percentage.
headphonesModebooleanfalseDisables half-duplex ducking. Enable when the user is wearing headphones to allow full-duplex audio without echo.
transcriptionEnabledbooleantrueShow the live transcript strip during the call.
textInputEnabledbooleanfalseShow 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
}
Set 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

FeatureChromeFirefoxSafariEdge
Krisp noise filter
DeepFilterNet3✓ (limited)
setSinkId (speaker select)
Voice isolation
DeepFilterNet3 requires SharedArrayBuffer to be available, which needs Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp headers on your page.