Krisp VIVA plugin for LiveKit Agents
Real-time noise reduction for LiveKit voice agents using Krisp's VIVA SDK, exposed as a LiveKit FrameProcessor.
See https://docs.livekit.io/agents/integrations/ for more information.
Installation
pnpm add @livekit/agents-plugin-krisp
The default backend is bundled with the plugin and authenticates through LiveKit Cloud using the room's credentials — no separate SDK download, license key, or model file is required.
Using your own Krisp license instead? That path has additional prerequisites — see below.
Quick start
krisp.voiceIsolation() resolves its backend from the environment: if both KRISP_VIVA_SDK_LICENSE_KEY and KRISP_VIVA_FILTER_MODEL_PATH are set, it uses the Krisp license path (you are responsible for installing @krisp/viva-node-sdk); otherwise it uses LiveKit Cloud authentication — the bundled backend ships the voice isolation model and authenticates against LiveKit Cloud using the room JWT the agent framework hands to the FrameProcessor automatically. Pass authProvider to pin a backend explicitly.
For telephony audio, use krisp.voiceIsolationTelephony() instead — it takes the same options and behaves identically, but selects a noise-reduction model tuned for telephony.
Pass the processor as noiseCancellation in the session's input options:
import { type JobContext, voice } from '@livekit/agents';
import * as krisp from '@livekit/agents-plugin-krisp';
import * as openai from '@livekit/agents-plugin-openai';
import * as silero from '@livekit/agents-plugin-silero';
export default async function entry(ctx: JobContext) {
const noiseCancellation = krisp.voiceIsolation({
noiseSuppressionLevel: 100,
});
const session = new voice.AgentSession({
vad: await silero.VAD.load(),
stt: new openai.STT(),
llm: new openai.LLM({ model: 'gpt-4o-mini' }),
tts: new openai.TTS(),
});
await session.start({
agent: new voice.Agent({ instructions: 'You are a helpful assistant.' }),
room: ctx.room,
inputOptions: {
noiseCancellation,
},
});
}
Audio pipeline: Room → RoomIO (with voiceIsolation) → VAD → STT → LLM
Configuration
KrispVivaFilterOptions
authProvider | AuthProvider | LiveKitCloudAuthProvider | Authentication backend. Defaults to LiveKit Cloud. See the alternative. |
noiseSuppressionLevel | number | 75 | Noise reduction intensity (0-100). |
Input frames of any size and sample rate are buffered and adapted automatically.
Runtime control
noiseCancellation.setEnabled(false);
noiseCancellation.setNoiseSuppressionLevel(50);
noiseCancellation.close();
Alternative: Krisp license auth
Most users should use the default LiveKit Cloud path above. This alternative is for running the proprietary Krisp SDK directly with your own Krisp license — for example, when using the LiveKit OSS server.
This path uses the proprietary @krisp/viva-node-sdk together with a Krisp license key and a .kef model file that you obtain from Krisp.
Prerequisites
- Krisp Node SDK — proprietary, not bundled with this plugin. Obtain and install it separately from Krisp:
pnpm add @krisp/viva-node-sdk
- License key:
export KRISP_VIVA_SDK_LICENSE_KEY=your-license-key-here
- Noise-reduction model — a
.kef model file from Krisp:
export KRISP_VIVA_FILTER_MODEL_PATH=/path/to/noise_model.kef
Usage
Select the license backend by passing authProvider. Both the model path and
the license key come from the environment variables above (read by the native
SDK), so krispLicense() takes no arguments:
import * as krisp from '@livekit/agents-plugin-krisp';
const noiseCancellation = krisp.voiceIsolation({
authProvider: krisp.auth.krispLicense(),
noiseSuppressionLevel: 100,
});
Troubleshooting
@livekit/plugins-krisp-viva-internal is missing
The default (LiveKit Cloud) backend is bundled as a dependency. If it reports as missing, the install is likely broken — reinstall the plugin, or fall back to the Krisp license auth path.
"@krisp/viva-node-sdk is not installed" (license auth only)
Install the proprietary Krisp Node SDK (pnpm add @krisp/viva-node-sdk), or use the default auth.livekitCloud() provider.
"Krisp model path is required" / "Krisp model file not found" (license auth only)
export KRISP_VIVA_FILTER_MODEL_PATH=/path/to/model.kef
"Unsupported sample rate"
Supported: 8000, 16000, 24000, 32000, 44100, 48000 Hz.
License
The source code in this package (@livekit/agents-plugin-krisp) is licensed under the Apache-2.0 license.
The default backend is a separate, closed-source package (@livekit/plugins-krisp-viva-internal) installed automatically as a dependency. It is proprietary and distributed under the LiveKit Terms of Service. That package bundles the Krisp VIVA SDK along with its third-party open-source components.
The Krisp license alternative (KrispLicenseAuthProvider) instead needs a manual install of the proprietary @krisp/viva-node-sdk together with your own Krisp license key and model file, governed by your agreement with Krisp.