ComfyUI Node

Egregora WPE Dereverb

Pull the room out of a recording without killing the voice

By lucasgattas·Created 12 months ago·Updated 7 months ago· 60
Egregora WPE Dereverb
  • audio
  • AUDIO
taps10
delay3
iterations3
n_fft1024
hop256
use_float32true

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.

CategoryEgregora/Enhance

Inputs (7)

NameTypeDefaultDescription
audioAUDIO
tapsINT103–32
delayINT31–16
iterationsINT31–10
n_fftINT1024256–4096
hopINT25664–1024
use_float32BOOLEANtrue

Outputs (1)

NameTypeDescription
AUDIOAUDIO