Impulse
Size and Damping re-render this impulse - watch the waveform redraw when the knob settles.
IR Browser
House Keys
70 BPM · Deep house chord stabs
Space Mini
Convolution reverb: eight synthesized spaces, twenty-five real cabinets.
Presets
Preset names do work: they teach the parameter space faster than the table below does.
About
A convolution reverb does not model a room - it multiplies your signal by a recording of one. Feed a space an impulse, record what comes back, and that recording contains everything about the space: its early reflections, its decay, its resonances, the way it eats high frequencies. Convolve anything with that recording and it sounds like it happened in there. Space Mini's whole interface is built around making that impulse visible, because once you can see it the effect stops being mysterious.
The Spaces bank is procedural: each one is generated from a recipe - discrete early reflections, an exponentially-shaped noise tail, a biquad voicing cascade, and for the plate and spring a handful of resonant modes and a dispersive chirp. The generator is seeded, so a given space at a given size always renders the same samples. That is why Size and Damping are honest controls here rather than post-filters: moving them re-renders the impulse response and the picker's thumbnail redraws to match.
The Cabinets bank is the opposite: 25 real captured impulse responses of guitar and bass speaker cabinets, 1024 samples each, fetched and decoded the first time you pick one. As reverbs they are barely reverbs - a cabinet IR is about 21 ms long, so what you hear is a box tone rather than a tail. They are in here because they are the clearest demonstration of what convolution is, and because running a drum clip through an 8x10 bass cab is worth doing at least once.
Preview honesty: the reverb you are playing on this page is plain Web Audio - a pair of ConvolverNodes and the IR generator described above. It is a real convolution, but it is not the compiled kernel, and none of the engine's byte-parity claims apply to it.
Take it into your DAW.
Same DSP as this page. The plugin isn't a rebuild — it's the identical kernel from the identical TypeScript source, compiled native instead of to WASM.
Free forever, no account, and playing it in the browser will never ask you for one. VST3 and standalone today; AU and CLAP are on the roadmap.
How it works.
The graph is a dry path and a wet path summed at the output. The wet path is pre-delay (a DelayNode, 0-200 ms) into a damping low-pass into a convolver, and the two paths meet at an equal-power crossfade - cosine on the dry, sine on the wet - so a 50% mix is not the 3 dB hole a linear blend would give you. Width is a mid/side matrix on the wet return alone, built from four gain legs, which is why collapsing it never narrows the source.
There are actually two convolvers, and that is the interesting part. Assigning a new buffer to a ConvolverNode discards its convolution state, which truncates any tail still sounding and produces an audible click. So the audible convolver is never written to: a new IR is loaded into the idle one, the pair equal-power crossfades over 60 ms, and the old node keeps its buffer until it is next needed. Switching from Cathedral to a 4x12 mid-tail is seamless.
Procedural impulses are generated on the main thread from a seeded recipe: early-reflection taps, an exponentially-shaped noise tail, optional resonant modes and a dispersive chirp, then a high-pass into peaking EQs into a damped low-pass. Every impulse - synthesized or captured - is normalized to unity A-weighted perceived loudness, which is what lets you audition 33 IRs without riding the output knob. Renders are cached and knob drags are debounced 140 ms, because a 6-second cathedral at 48 kHz is real arithmetic.
Captured IRs are fetched and decoded on first selection. Until the bytes land the previous impulse keeps convolving - a picker click never drops you into silence - and if the fetch fails the module says so and stays on what it had.
It's yours to read and to fork.
Research preview
npx codex clone space-mini
npm run devThe codex CLI name is proposed, not shipped. That command gives you this module's DSP, schema, presets and UI as a local project — change a number, hear it immediately.
preview: ConvolverNode + procedural IR bank · components/playground/ir-bank.ts