Egregora WPE Dereverb
Pull the room out of a recording without killing the voice
- audio
- AUDIO
Reverb is the sneakiest audio problem. A recording can have zero noise floor and still sound bad - muddled, distant, hard to understand - because the room itself got captured. That's what this node is for. It wraps the classic Weighted Prediction Error (WPE) dereverberation algorithm via the nara-wpe library, which has been a workhorse in speech research and ASR for years. It's the "dereverb" step in the Egregora pack's recommended cleanup chain: denoise, then dereverb, then enhance.
WPE is worth understanding at a high level because it explains the difference from a noise gate or an EQ. It estimates the late reflections - the part of the signal that's the room ringing after the direct sound - and subtracts a prediction of them from the signal. The name "prediction error" is the whole trick: model the reverberant tail as a weighted linear prediction of the past, then subtract. It's math, not magic, and it's been the default answer in speech enhancement pipelines for a reason.
How it works
The node does STFT → WPE → iSTFT: it transforms your audio into the frequency domain, runs nara_wpe's iterative WPE on the spectral frames, and transforms back. It works mono or multi-channel. The n_fft (default 1024) and hop (default 256) control the STFT resolution, and use_float32 (on by default) keeps memory down on long files.
The inputs that matter
taps(default 10) - how many previous frames the prediction uses. More taps = more aggressive reverb removal, but also more computation and a greater chance of artifacts.delay(default 3) - skips the first few frames when predicting, so the direct sound (which is not reverb) isn't treated as reverb. This is the "don't eat the voice" guardrail; raise it if you hear the dry signal getting smeared.iterations(default 3) - passes of the WPE estimate. 2–3 is the sweet spot; more is slower with diminishing returns.
Output is a single AUDIO buffer. Wire it after your denoiser and before any enhancement stage, then check the result with the pack's null-test or loudness nodes to confirm you actually improved it.
Install notes
nara-wpe comes from the pack's requirements.txt (nara-wpe>=0.0.9, imported as nara_wpe). If you skip the installer and hit "nara-wpe not installed," that's just the missing dependency - run install.py with ComfyUI's embedded Python or pip install nara-wpe yourself.
Where it gets fiddly
The honest caveats: WPE is CPU math and it can be slow on long files, and aggressive settings can leave a slightly "swishy" artifact on material that was already fairly dry. The node tries to be graceful - if a batch hits a memory error it falls back to passing the audio through and prints a warning rather than crashing your queue. And keep expectations in check: WPE is best at reverberant speech (lectures, room-mic'd vocals, ASR data). It won't undo a cavernous hall on a music mix, and it's not a substitute for a clean capture. If your goal is intelligibility of a voice in a room, though, this is exactly the tool.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| taps | INT | 103–32 | — |
| delay | INT | 31–16 | — |
| iterations | INT | 31–10 | — |
| n_fft | INT | 1024256–4096 | — |
| hop | INT | 25664–1024 | — |
| use_float32 | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| AUDIO | AUDIO | — |