livekit-plugins-denoise
Self-hosted noise suppression and acoustic echo cancellation for LiveKit SIP agents.
- Removes background noise with DeepFilterNet3 or low-latency WebRTC noise suppression.
- Removes the agent's voice when it returns through a caller's handset or carrier path.
- Runs in your agent process: no per-minute denoising fee and no language dependency.
This is an independent, community-maintained package and is not affiliated with or endorsed by LiveKit, Inc.
Why this exists
LiveKit's managed BVCTelephony noise-cancellation option is billed per minute.
This package is a self-hosted, MIT-licensed alternative for teams that want
noise suppression and echo cancellation in their own agent process without a
per-minute denoising charge. You still pay for your own compute, telephony, and
other services.
Install
python -m pip install livekit-plugins-denoise
For local development:
python -m pip install -e ".[dev]"
Enable noise suppression and echo cancellation
Create one TelephonyDenoiser for each call. EchoReferenceTap is required
for echo cancellation because it supplies the agent's outgoing audio as the
far-end reference.
from livekit.agents import room_io
from livekit.plugins import telephony_denoise
denoiser = telephony_denoise.TelephonyDenoiser(
telephony_denoise.DenoiseOptions(
echo_cancellation=True,
noise_suppression=True,
high_pass_filter=True,
auto_gain_control=True,
enhancer="deepfilter", # use "webrtc" for lower latency
stream_delay_ms=120,
)
)
await session.start(
agent=agent,
room=room,
room_options=room_io.RoomOptions(
audio_input=room_io.AudioInputOptions(
noise_cancellation=denoiser,
auto_gain_control=False, # do not stack AGC
),
),
)
# Add this after session.start(); RoomIO replaces the output during startup.
session.output.audio = telephony_denoise.EchoReferenceTap(
denoiser, next_in_chain=session.output.audio
)
To load the neural model before the first call:
def setup(proc):
telephony_denoise.prewarm()
See examples/sip_agent.py for a complete SIP agent.
Configuration
DenoiseOptions lets you control these features independently:
| Option | Default | Purpose |
|---|---|---|
echo_cancellation |
True |
Cancels the agent's returned audio; requires EchoReferenceTap. |
noise_suppression |
True |
Removes background noise. |
enhancer |
"deepfilter" |
Use "webrtc" when minimizing latency is more important. |
high_pass_filter |
True |
Reduces low-frequency rumble and hum. |
auto_gain_control |
True |
Helps keep quiet callers audible. |
stream_delay_ms |
120 |
Starting delay estimate for SIP echo paths. |
For tuning, supported formats, model download behavior, and operating notes, see Technical notes.
Community
Issues, documentation improvements, and pull requests are welcome. See CONTRIBUTING.md. This project is MIT licensed; dependency attribution is in NOTICE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file livekit_plugins_denoise-0.1.0.tar.gz.
File metadata
- Download URL: livekit_plugins_denoise-0.1.0.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f37823d9872f5f783c61d84994af3340ff297a2aef89de269b80cebaac2612c9
|
|
| MD5 |
1500920a19c5aef2007fd92873b8d2a9
|
|
| BLAKE2b-256 |
38479534d6e1559da6f4e992c86b75f0869cf01a7f3a4007036f5e56d8644c42
|
Provenance
The following attestation bundles were made for livekit_plugins_denoise-0.1.0.tar.gz:
Publisher:
publish.yml on jaffarjawed/livekit-plugins-denoise
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
livekit_plugins_denoise-0.1.0.tar.gz -
Subject digest:
f37823d9872f5f783c61d84994af3340ff297a2aef89de269b80cebaac2612c9 - Sigstore transparency entry: 2642062526
- Sigstore integration time:
-
Permalink:
jaffarjawed/livekit-plugins-denoise@cbd5ca3383c41676ddfeb7a262d31cdd01d683ce -
Branch / Tag:
refs/tags/telephony-denoise-v0.1.0 - Owner: https://github.com/jaffarjawed
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cbd5ca3383c41676ddfeb7a262d31cdd01d683ce -
Trigger Event:
push
-
Statement type:
File details
Details for the file livekit_plugins_denoise-0.1.0-py3-none-any.whl.
File metadata
- Download URL: livekit_plugins_denoise-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d4f61afdc39dfecd06c0f94c0d7fde3087caa277a37dd55b49ea1e95503940f
|
|
| MD5 |
00f8136ba99b72b7b5004113f1b4a7a9
|
|
| BLAKE2b-256 |
b43ae76cfd6e316b9299036047c93b028f712af5ba71b8950beee182f348c3dd
|
Provenance
The following attestation bundles were made for livekit_plugins_denoise-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on jaffarjawed/livekit-plugins-denoise
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
livekit_plugins_denoise-0.1.0-py3-none-any.whl -
Subject digest:
3d4f61afdc39dfecd06c0f94c0d7fde3087caa277a37dd55b49ea1e95503940f - Sigstore transparency entry: 2642062630
- Sigstore integration time:
-
Permalink:
jaffarjawed/livekit-plugins-denoise@cbd5ca3383c41676ddfeb7a262d31cdd01d683ce -
Branch / Tag:
refs/tags/telephony-denoise-v0.1.0 - Owner: https://github.com/jaffarjawed
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@cbd5ca3383c41676ddfeb7a262d31cdd01d683ce -
Trigger Event:
push
-
Statement type: