Skip to main content

Krisp VIVA noise reduction plugin for LiveKit Agents

Project description

Krisp VIVA Plugin for LiveKit Agents

Real-time noise reduction for LiveKit voice agents using Krisp's VIVA SDK.

Features

  • KrispVivaFilterFrameProcessor: Real-time noise reduction FrameProcessor for audio processing

Installation

# Install the plugin
pip install livekit-plugins-krisp

# Install krisp-audio SDK separately (required for actual usage)

Note: The krisp-audio package is a proprietary SDK not available on public PyPI. It must be obtained and installed separately from Krisp (https://krisp.ai/developers/).

Prerequisites

Required for All Features

  1. Krisp Audio SDK: pip install krisp-audio
  2. License Key: Obtain a license key from Krisp and set it as an environment variable:
    export KRISP_VIVA_SDK_LICENSE_KEY=your-license-key-here
    

For Noise Reduction

  1. Noise Reduction Model: Obtain a noise reduction or voice isolation .kef model file from Krisp
  2. Set environment variable:
    export KRISP_VIVA_FILTER_MODEL_PATH=/path/to/noise_model.kef
    

Quick Start

Human-to-Bot Noise Cancellation / Voice Isolation (Recommended)

For cleaning up user audio before STT/VAD processing using the FrameProcessor approach:

from livekit.agents import AgentSession, Agent, JobContext, inference, room_io
from livekit.plugins import krisp, openai

@server.rtc_session()
async def entrypoint(ctx: JobContext):
    # Create Krisp FrameProcessor
    processor = krisp.KrispVivaFilterFrameProcessor(
        noise_suppression_level=100,  # 0-100
        frame_duration_ms=10,
        sample_rate=16000,
    )
    
    session = AgentSession(
        vad=inference.VAD(),
        stt=openai.STT(),
        llm=openai.LLM(model="gpt-4o-mini"),
        tts=openai.TTS(),
    )
    
    # Start session with RoomIO and pass FrameProcessor directly
    await session.start(
        agent=MyAgent(),
        room=ctx.room,
        room_options=room_io.RoomOptions(
            audio_input=room_io.AudioInputOptions(
                sample_rate=16000,
                frame_size_ms=10,  # Must match Krisp frame_duration_ms
                noise_cancellation=processor,  # Pass FrameProcessor directly
            ),
        ),
    )

Audio Pipeline: Room → RoomIO (with KrispVivaFilterFrameProcessor) → VAD → STT → LLM

Configuration

KrispVivaFilterFrameProcessor Parameters

Parameter Type Default Description
model_path str env var Path to noise reduction .kef model
noise_suppression_level int 100 Noise reduction intensity (0-100)
frame_duration_ms int 10 Frame size: 10, 15, 20, 30, or 32ms
sample_rate int None Optional: pre-initialize with sample rate

Supported Sample Rates

8000, 16000, 24000, 32000, 44100, 48000 Hz

Important Notes

Frame Size Requirements

⚠️ Frames must match the configured duration exactly

  • 10ms @ 16kHz = 160 samples
  • 20ms @ 16kHz = 320 samples
  • 20ms @ 32kHz = 640 samples

The filter validates frame sizes and raises ValueError if incorrect.

Resource Management

  • Session created once (on first use or if sample_rate provided)
  • Call close() when done to free resources

Shared SDK Management

The plugin uses KrispSDKManager to manage the Krisp SDK instance:

  • Singleton Pattern: SDK initialized only once, shared across all components and sessions
  • Reference Counting: Tracks active users (filters)
  • Automatic Cleanup: SDK destroyed when last component releases its reference

Troubleshooting

"Krisp SDK initialization failed" or Licensing Errors

Make sure the license key is set:

export KRISP_VIVA_SDK_LICENSE_KEY=your-license-key-here

"Model path must be provided"

export KRISP_VIVA_FILTER_MODEL_PATH=/path/to/model.kef

"Unsupported sample rate"

Supported: 8000, 16000, 24000, 32000, 44100, 48000 Hz

"Frame size mismatch"

Ensure your audio frames match the configured frame_duration_ms.

For 20ms @ 16kHz, each frame must have exactly 320 samples.

Silent output

  • Verify model file is valid
  • Test with known noisy audio

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

livekit_plugins_krisp-0.2.3.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

livekit_plugins_krisp-0.2.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file livekit_plugins_krisp-0.2.3.tar.gz.

File metadata

  • Download URL: livekit_plugins_krisp-0.2.3.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for livekit_plugins_krisp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 095644d9c25e617f395ab7a2ae2e3148b63ef41a7f7473f8b73ae808654eb099
MD5 a82404bc8737111fd995a8514033b337
BLAKE2b-256 0ab8440d562b146d649e2dca5ab3eebd8f377da1b4ed136f071b59c31d16dfde

See more details on using hashes here.

Provenance

The following attestation bundles were made for livekit_plugins_krisp-0.2.3.tar.gz:

Publisher: publish.yml on livekit/agents

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file livekit_plugins_krisp-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for livekit_plugins_krisp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9dca04b0ec9f59722cf4ab05c52a02f68642ee0a87696461071470e742dd4048
MD5 5878e8f41f0985d17d689d06985becc0
BLAKE2b-256 01c00f3476da9289d9fbc5bff5dae653c34145de8b33f9bb89a90fd5e42f26ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for livekit_plugins_krisp-0.2.3-py3-none-any.whl:

Publisher: publish.yml on livekit/agents

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page