Audio Reverb ποΈ
Put Generated Audio in a Room That Doesn't Exist
- audio_samples
- audio
- summary
Generated audio almost always sounds like it was recorded in a void - dry, flat, no space around it. Audio Reverb is the node that fixes that, applying reverb two ways: an algorithmic Schroeder reverb (comb + allpass filters, the classic digital-reverb recipe) or a convolution reverb against a synthetic impulse response. Either way it's pure NumPy, no impulse-response files to download, no external deps.
The two flavors
reverb_type picks the algorithm, and the choice is about sound character more than quality:
- algorithmic - the Schroeder design. Denser, more synthetic, the "1980s rack reverb" sound. Computationally cheap and predictable, great for adding a sense of space to a voice or a synth without it sounding like a cathedral.
- convolution - a synthetic impulse response convolved with the signal. Generally richer and more natural-sounding, closer to what you'd get from a real room impulse response. The IR is generated in code, so you get the character of convolution without hunting for
.wavIR files.
Either way, the controls are the same, and they're the standard reverb vocabulary:
room_size(0β1) - how big the virtual space is. Small for a closet, high for a hall.damping(0β1) - how quickly high frequencies die off. High damping = darker, softer tail; low = brighter, more metallic.wet_level/dry_level- the blend. This is the mix control:wetis the reverb tail,dryis the original signal. Start with the defaults (0.33 wet / 0.75 dry) and nudge wet up until it sounds like space rather than mud.pre_delay_ms- gap before the reverb tail starts. A little pre-delay (20β40ms) keeps a voice intelligible while still giving it a room, because the tail arrives after the syllables, not on top of them.stereo_width- how wide the reverb tail spreads in the stereo field. Wide for a lush bed, narrow to keep clarity.
The output and the workflow
The audio output is the wet/dry mix, ready to feed a mixer or a save node, plus a summary string. It slots naturally right after a pitch shift or transient shaping, before Audio Normalize or the mixer - reverb should almost always come before the final level control, because the wet signal adds energy the normalize step should account for.
The honest caveats
This is algorithmic reverb, not a modeled-room plugin - it will never fool a mastering engineer, and on dense material a long tail can get smeary. It's a "make it sound like it's in a space" node, which is exactly what most generated-audio workflows need. And because wet_level and dry_level are separate, leaving dry at 1.0 and wet at 1.0 is a classic way to blow up your level - the sum of both can exceed the original signal's peak. Keep the defaults until you know what you're doing.
Install
ComfyUI Manager β search OmniNodes, or:
cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes
Restart ComfyUI; it's under TensorVizion/Audio. No extra installs - which, for a reverb, is the whole win: you get a room without downloading a single impulse response file.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_samples | AUDIO | β | |
| sample_rate | INT | 441008000β192000 | β |
| reverb_type | COMBO | 2 options: algorithmic, convolution | |
| room_size | FLOAT | 0.500β1 | β |
| damping | FLOAT | 0.500β1 | β |
| wet_level | FLOAT | 0.330β1 | β |
| dry_level | FLOAT | 0.750β1 | β |
| pre_delay_ms | FLOAT | 200β500 | β |
| stereo_width | FLOAT | 0.500β1 | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |
| summary | STRING | β |