Clearline-NC-CPU
Streaming noise cancellation for LiveKit Agents (rtc.FrameProcessor[rtc.AudioFrame]), a drop-in for GTCRN.
16 kHz, 32 ms delay, CPU only, trained on wideband and telephone audio. Two modes: asr (default, for a speech
recogniser) and quality (for a listener).
The CPU half of Clearline-NC. The GPU model its quality mode is distilled from is version 1 of Clearline-NC-GPU (the repository now holds version 2); both, with
Clearline-VAD, are in the Clearline collection.
This repository was Scicom-intl/Clearline-NC; the old name redirects here.
2026-10-30: a new quality mode. It keeps a second voice (within about 1 dB) and takes crowd babble about 25 dB
down. It leads GTCRN on VoiceBank+DEMAND and on DNS 2020's synthetic set, and still trails it on DNSMOS of DNS 2020's
real recordings. The ASR mode is unchanged. The previous quality model is revision d3a7d272. How both modes were
trained is in the Clearline preprint below.
Work in progress. Clearline is still being trained, and this repository is updated as better models pass our development-set rules; every upload is its own revision, so pin one (STT-API's plugin does). The numbers below are the models in this revision.
| GTCRN | ASR mode | quality mode | |
|---|---|---|---|
| plugin CPU per stream, 16 kHz, 8 streams (% of a core) | 5.39% | 1.71% | 2.77% |
| plugin CPU per stream, 48 kHz, 8 streams | 6.95% | 3.30% | 3.89% |
| p99 per 20 ms frame | 3.24 ms | 0.46 ms | 0.72 ms |
| VoiceBank+DEMAND PESQ | 2.535 | 2.135 | 2.575 |
| VoiceBank+DEMAND SI-SDR | 14.6 dB | 10.5 dB | 17.4 dB |
| DNS 2020 synthetic PESQ | 2.293 | 1.697 | 2.389 |
| DNS 2020 real recordings, DNSMOS overall | 2.75 | 2.34 | 2.73 |
| Whisper WER, wideband / G.711 phone (unprocessed 1.45% / 2.95%) | 2.65% / 4.26% | 1.55% / 2.90% | 2.32% / 5.79% |
| Whisper WER, DNS 2020 synthetic (unprocessed 5.38%) | 5.30% | 5.02% | 6.48% |
| Whisper WER over 8 conditions, mean ratio to unprocessed | 2.17 | 1.00 | 1.45 |
The quality mode is the larger graph (256 units with per-bin levels and gains, against the ASR mode's 128), and costs about half of GTCRN's CPU per stream; the ASR mode about a third. Whisper large-v3 on all 824 VoiceBank test utterances (and the 150 DNS synthetic clips), scored against its own transcript of the clean signal, through STT-API's benchmark harness as fixed: a streaming filter's output is flushed and aligned before Whisper hears it. The first version of the harness cut each utterance's last 32 ms (the filter's delay) for every streaming filter and for nothing else, which cost every filter words.
Telephone
The 824 utterances through five codecs at 8 kHz (* never in training), then each filter, then Whisper.
| Whisper WER | unprocessed | GTCRN | ASR mode | quality mode |
|---|---|---|---|---|
| G.711 | 3.25% | 10.72% | 3.20% | 4.64% |
| GSM | 7.41% | 15.60% | 6.96% | 9.10% |
| Opus | 4.94% | 13.46% | 4.81% | 7.32% |
| AMR-NB* | 4.83% | 13.66% | 5.24% | 6.99% |
| G.723.1* | 7.72% | 16.62% | 7.78% | 9.89% |
On the phone the ASR mode is level with the unprocessed line: a little under it through the codecs it trained on, a little over it through the two it never heard. GTCRN adds 7 to 9 points of WER.
Use
import sys
from huggingface_hub import snapshot_download
sys.path.insert(0, snapshot_download("Scicom-intl/Clearline-NC-CPU"))
from clearline.livekit import NoiseCancellation
room_io.AudioInputOptions(sample_rate=16000, noise_cancellation=lambda params: NoiseCancellation()) # mode="asr"
Files
| file | what |
|---|---|
clearline_nc_asr.onnx |
ASR mode: noise kept 20 dB down, 70% of the input mixed back by the plugin |
clearline_nc.onnx |
quality mode: distilled from a GPU teacher; removes background noise, keeps every voice |
pytorch/*.pt |
PyTorch weights for clearline/nc_model.py |
clearline/ |
the LiveKit plugin, both models bundled |
Notes
- One instance per audio stream; feed it 16 kHz to skip resampling.
- Use ASR mode for agents: quality mode costs Whisper more words, most of all on the phone. The ASR mode leaves most of the noise in (it lowers the noise floor by about 2.5 dB): a robust recogniser is hurt by a filter's artifacts more than by noise, and 70% of the input mixed back, chosen on development data, is where Whisper's word error rate was lowest.
- Not trained on VoiceBank, VCTK or DEMAND. On DNS 2020's synthetic set the quality mode scores higher PESQ than GTCRN and DTLN; on its real recordings GTCRN's DNSMOS is still higher.
- License not set yet: some training data is CC BY-NC (Expresso, EARS, WHAM!).
Husein Zolkepli. Clearline: voice activity detection and noise cancellation for voice agents, on one CPU core. Scicom (MSC) Berhad, 2026.


