Egregora RNNoise Denoise
The free, tiny, speech-only denoiser that just works
- audio
- limit_ceiling
- AUDIO
If the Egregora pack's DeepFilterNet node is the heavyweight denoiser, RNNoise is the free weight that's been hiding in plain sight for years. It's the speech denoiser from the Xiph.org folks - the same people behind Opus - and it's been embedded in real-time voice stacks since 2017 because it's tiny, fast, and needs no GPU and no model downloads. This node wraps it for ComfyUI via pyrnnoise.
The catch, and it's a real one: RNNoise is speech-only. It was trained on voice, in frames of 10 ms at 48 kHz, and if you feed it music you'll get a weird, watery, artifact-laden mess. It's the right tool when your source is a person talking - podcast audio, voiceover, a vocal track pulled out of a noisy recording - and the wrong tool for basically anything instrumental. Know that going in and you'll have a great time.
How it works
Under the hood it's straightforward: the node resamples to 48 kHz (RNNoise's native rate), runs each channel through the RNNoise network frame by frame, and gets back both the cleaned audio and a per-frame speech probability. That probability is the secret sauce here - the node uses it to drive the adaptive mixing.
strength(default 1.0) sets a base wet/dry mix with an equal-power or linear curve.adaptive_mode(defaultmore_on_noise) uses the VAD probabilities to push denoising harder in frames where nobody's talking, so the vocal parts stay natural.gate_on_noiseis the more aggressive version - it basically hard-switches between "clean it" and "leave it alone."stereo_modehandles stereo either per-channel or by downmixing to mono (faster, and fine for mono podcast sources).post_gain_dbandceiling(default 0 dB and 0.999) do a final trim and peak-limit so the result doesn't clip.
So the practical difference from the DeepFilterNet node: RNNoise is CPU-cheap and instant to set up (no weights to fetch), but it has a narrower range. For a busy podcast track it's often all you need. DeepFilterNet handles harder noise and tolerates music-adjacent content better, at the cost of a heavier install.
The inputs that matter
audio- the AUDIO buffer.strength- start at 1.0 (full RNNoise), back off toward 0.7 if you hear artifacts.stereo_mode-downmix_monofor mono voice,per_channelfor stereo.
Output is one AUDIO buffer. Everything else has sane defaults; adaptive_mode is the one you might actually flip if the default leaves background hiss during silences.
Install and gotchas
The pack pulls in pyrnnoise via its requirements.txt and install.py, and the installer runs a tiny warmup to verify the backend. Two things to know:
- The default
strengthis 1.0. RNNoise at full strength is quite aggressive - it's tuned for real-time voice calls, so it can sound a touch "swirly" on clean studio recordings. For decent source, 0.8–0.9 is often the sweeter spot. - Don't run it on music. This is the most common "why does this sound terrible" report, and it's not a bug - it's the model. Keep it on speech and let FlashSR or Fat Llama handle the musical content.
If you're deciding between this and DeepFilterNet for a speech track: start here. Zero download friction, CPU-only, and if it's good enough you just saved yourself a dependency.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| frame_ms | INT | 205–60 | — |
| stereo_mode | COMBO | per_channel | 2 options: per_channel, downmix_mono |
| strength | FLOAT | 1.000–1 | — |
| mix_curve | COMBO | equal_power | 2 options: equal_power, linear |
| adaptive_mode | COMBO | more_on_noise | 4 options: off, more_on_noise, more_on_speech, gate_on_noise |
| adaptive_amount | FLOAT | 0.500–1 | — |
| vad_threshold | FLOAT | 0.900–1 | — |
| vad_smooth_ms | INT | 500–500 | — |
| post_gain_db | FLOAT | 0.0-24–24 | — |
| limit_ceiling | BOOL | true | — |
| ceiling | FLOAT | 0.9990.1–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |