Metadata-Version: 2.5
Name: livekit-plugins-murf-bvc
Version: 0.1.0
Summary: Murf background voice cancellation for LiveKit Agents
Requires-Python: >=3.10
Requires-Dist: livekit-agents>=1.2
Requires-Dist: livekit>=1.0.12
Requires-Dist: numpy
Description-Content-Type: text/markdown

# livekit-plugins-murf-bvc

Murf background voice cancellation for [LiveKit Agents](https://docs.livekit.io/agents/): keeps the
participant who is talking to the agent and removes other voices and noise before VAD, turn detection
and STT. Runs on CPU in the agent process.

```python
from livekit.agents import room_io
from livekit.plugins import murf_bvc

await session.start(
    room=ctx.room,
    agent=agent,
    room_options=room_io.RoomOptions(
        audio_input=room_io.AudioInputOptions(noise_cancellation=murf_bvc.BVC()),
    ),
)
```

`BVC()` registers a native LiveKit audio filter (like `livekit-plugins-noise-cancellation`), so frames
are processed inside LiveKit's core without crossing into Python, and one value serves every
participant. On livekit versions without audio-filter plugins, or with `native=False`, it returns a
`BVCProcessor` instead; that processes one track, so pass a selector for multi-participant rooms:
`noise_cancellation=lambda params: murf_bvc.BVC(native=False)`.

## License

Pass the Murf license token as `BVC(license_key=...)` or set `MURF_BVC_LICENSE`. It is checked
offline (signature and expiry). Without a valid license the filter logs an error and passes audio
through unprocessed, delayed by the filter latency (10 ms at 16 kHz, about 13.6 ms at 24/48 kHz).

## Options

- `restore=True`: mixes back what was removed while only the caller is talking (speaker check every 0.5 s).
- `normalize=True`: brings the caller to a fixed level before the model.
- `models_dir`: override the bundled models.

Wheels: `manylinux_2_28` x86_64 (x86-64-v3) and aarch64 (Graviton2+), macOS 11+ arm64 and
10.15+ x86_64. No ONNX Runtime or other native dependencies.
