ComfyUI Node

Latent Reverb

An 'audio' effect for images, no audio (or training) involved

By luke-mino-altherr·Created about a year ago·Updated about a year ago· 3
Latent Reverb
  • samples
  • LATENT
wet_mix0.30
feedback0.40
room_size0.50
num_reflections16
decay_rate0.80

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_reflections or decay_rate mid-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, and feedback don'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.roll wraparound means edge content wraps to the other side, softened by the fade mask. Expect ghosting near edges at high room_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.

Categorylatent/transform

Inputs (6)

NameTypeDefaultDescription
samplesLATENT
wet_mixFLOAT0.300–1
feedbackFLOAT0.400–1.5
room_sizeFLOAT0.500.05–4
num_reflectionsINT162–32
decay_rateFLOAT0.800.5–0.95

Outputs (1)

NameTypeDescription
LATENTLATENT