Latent Reverb
An 'audio' effect for images, no audio (or training) involved
- samples
- LATENT
The name is a bit of a con: Latent Reverb doesn't touch audio, doesn't call any API, and needs no key. It's a latent-space effect node. You drop it between your sampler and the VAE decode, and it takes the latent tensor, makes a bunch of spatially shifted, fading copies of it (the "reflections"), layers them back over the original, and hands the mix to your VAE. Think of it as an echo pedal for images - a way to smear a render into something gauzier, more painterly, or just stranger without touching a single sampler setting.
That's the whole game here. ComfyUI's graph already gives you LatentNoise, LatentBlend, and friends for poking the compressed representation the model works in - the 4-channel latent for SD1.5/SDXL, 16 channels for Flux and Wan, per the VAE section of our concepts notes. This node reads the channel count straight off your tensor, so it just works no matter which model family produced it.
How it "works" - and the honesty bit
"Neural reverb" oversells it. The architecture has learnable reflection weights, delays, diffusion parameters, and a multi-head attention pass - but nothing here is ever trained. Everything runs under torch.no_grad(), and the "learned" parameters are whatever they were at random init. It's a hand-tuned filter pipeline styled to resemble reverb, not a model. That's fine: it means no weights to download, no training run, and it's light enough to run on nearly any GPU.
The mechanism, read from the source: for each of num_reflections reflections, the node takes the current feedback buffer, shifts it with torch.roll (a real spatial shift, with a fade mask at the edges so the wraparound doesn't leave hard seams), pushes it through a convolution, multiplies by a decay factor (decay_rate ** i), dampens it, and accumulates it into a wet signal. Then multi-head attention for "spatial coherence," plus a blur when room_size > 0.3, edge enhancement when feedback > 0.2, and a contrast boost when room_size > 0.8. Final mix is dry * (1 - wet_mix) + wet * wet_mix. The author's tooltips in the node describe each control accurately - trust them over guesswork.
The inputs that matter
All five are sliders, but three do most of the work:
wet_mix(0–1, default 0.3) - your master volume. 0.0 is pure original, 1.0 is pure processed. Start here.room_size(0.05–4, default 0.5) - how far reflections travel, and the master switch for the blur/contrast extras. Small = subtle shift; large = smeared, diffuse glow.num_reflections(2–32, default 16) - low values give echo-y slapback, high values give a smoother wash.
feedback (0–1.5) and decay_rate (0.5–0.95) fine-tune the tail: more feedback = more layered complexity, higher decay = a longer, hall-like reverb.
Output: a single LATENT, wired straight into the same VAE Decode input the sampler was using. One node in, one node out - nothing else changes.
Install
The easy part: no model downloads, and the only dependencies are torch and numpy, which ComfyUI already has. Either search "ComfyUI-Latent-Reverb" in Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/luke-mino-altherr/ComfyUI-LatentReverb
Restart ComfyUI and you're done.
Where you might get confused
- Changing
num_reflectionsordecay_ratemid-session re-randomizes the effect. The node caches its processor by(channels, num_reflections, decay_rate, device), so tweaking those rebuilds it from a fresh random init - the character of the effect can jump, not just its strength.wet_mix,room_size, andfeedbackdon't do this; they're pure forward-pass controls. - At high-res or 16-channel latents the attention pass isn't free. It runs over H×W tokens, so big generations take a beat longer. If your card is tiny, drop resolution or reflection count.
- The
torch.rollwraparound means edge content wraps to the other side, softened by the fade mask. Expect ghosting near edges at highroom_size- that's the feature, not a bug.
One more thing worth knowing: the pack is scaffolded from Comfy's own cookiecutter extension template, and the author's repo email is [email protected] - this reads like an experiment or demo from inside the Comfy Org orbit more than a battle-tested tool, and there's essentially zero community discussion of it so far. Don't expect copy-paste workflow examples to exist. But as a zero-dependency lever for pushing a render off the clean "photo" path and into something with atmosphere, it's a fun one to have in the graph.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| samples | LATENT | — | |
| wet_mix | FLOAT | 0.300–1 | — |
| feedback | FLOAT | 0.400–1.5 | — |
| room_size | FLOAT | 0.500.05–4 | — |
| num_reflections | INT | 162–32 | — |
| decay_rate | FLOAT | 0.800.5–0.95 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |