Package Exports
- deepfilternet3-worker-test
Readme
LiveKit DeepFilterNet3 Noise Filter
DeepFilterNet3-based noise suppression designed to plug into LiveKit’s TrackProcessor API.
Install
yarn add livekit-deepfilternet3-noise-filter
Peer dependency expected at runtime: livekit-client
.
Quick start (LiveKit TrackProcessor)
import { DeepFilterNoiseFilter } from 'livekit-deepfilternet3-noise-filter';
import { Room, LocalAudioTrack } from 'livekit-client';
const room = new Room();
await room.connect('wss://your-livekit-server', '<token>');
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mic = stream.getAudioTracks()[0];
const localAudioTrack = await LocalAudioTrack.create(mic);
const processor = DeepFilterNoiseFilter({ enabled: true, sampleRate: 48000, frameSize: 480 });
await localAudioTrack.setProcessor(processor);
await room.localParticipant.publishTrack(localAudioTrack);
// Toggle bypass
await processor.setEnabled(false);
await processor.setEnabled(true);
// Adjust suppression level (0..100)
processor.setSuppressionLevel(75);
// Cleanup
await processor.destroy();
Browser requirements
SharedArrayBuffer requires:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Our dev server sets these for test/sample.html
.
Also exported (advanced)
DeepFilterNet3Processor
: low-level control over Worker + AudioWorklet graph.
import { DeepFilterNet3Processor } from 'livekit-deepfilternet3-noise-filter';
const df3 = new DeepFilterNet3Processor({ sampleRate: 48000, frameSize: 480, enableNoiseReduction: true });
await df3.initialize();
const ac = new AudioContext({ sampleRate: 48000 });
const node = await df3.createAudioWorkletNode(ac);
df3.setNoiseSuppressionEnabled(true);
df3.setSuppressionLevel(60);
df3.destroy();
Build
yarn
yarn build
Outputs:
dist/index.esm.js
,dist/index.js
dist/worker/worker.js
(Dedicated Worker)dist/worker/audio-processor.js
(AudioWorklet)dist/pkg/*
(WASM glue + df_bg.wasm)dist/deepfilternet3/DeepFilterNet3_onnx.tar.gz
(model)
Model source
The included model archive DeepFilterNet3_onnx.tar.gz
is downloaded from the DeepFilterNet project:
Please refer to the upstream repository for licensing and updates.
Building assets from source (contributors)
To regenerate the WASM package and copy resources from the upstream project:
git clone https://github.com/Rikorose/DeepFilterNet/
cd DeepFilterNet
bash scripts/build_wasm_package.sh
# Copy WASM glue into this repo's pkg/
cp -r libdf/pkg ../livekit-deepfilternet3-noise-filter/pkg
# Copy DF3 model archive into this repo's deepfilternet3/
cp models/DeepFilterNet3_onnx.tar.gz ../livekit-deepfilternet3-noise-filter/deepfilternet3/
cd ../livekit-deepfilternet3-noise-filter
Notes:
- Ensure the destination paths match this repo's layout (
pkg/
anddeepfilternet3/
). - After copying, run
yarn build
.
Local React example
A minimal Vite + React app is included under examples/react-app
to verify the built package works in a browser with SharedArrayBuffer.
- Build the library so
dist/
exists:
yarn build
- Install example deps (links local package automatically via
file:../..
):
yarn --cwd examples/react-app
- Run the example dev server (sets COOP/COEP headers):
yarn example:dev
Then open http://localhost:5173
, grant mic permission, and you should hear processed audio. Use the Enable checkbox and Level slider to adjust suppression.
Optional:
yarn example:build
yarn example:preview