Reverb
Algorithmic room reverb with bounded feedback.
The Stargate reverb, ROM tables and all.
Announced release
$59 preorder
You are in the live demo. Included formats, release status, and downloads live on the product page.
The Ursa Major Stargate 323 and its 626 sibling were digital reverberators from the early 1980s, and this module reconstructs one rather than designing a new one: same parameter set, same ranges and defaults, same signal chain, same EPROM tables, same quirks, carried into a compiled kernel. The face follows the machine's front panel - the program list, the six knobs, the two switches, the RVBCLR button - and ships no logo or store links.
The deliberate departures from the hardware's behaviour are written down rather than discovered later. The feedback recirculation delay is pinned at 128 samples instead of drifting with the host's block size, the smoothers and input filters run on that same fixed virtual block, the noise generator is a seeded xorshift so a render is reproducible, and the sample rate is pinned at 48 kHz. Every one of those exists so the result is testable; the full list is in the design document beside the module.
What has been proven so far, precisely: the compiled kernel agrees with its TypeScript oracle and its native build to a maximum drift of zero across the three lanes, the built VST3 passes the Steinberg validator at 47 tests passed and none failed, and a host render is exact at both 128- and 127-frame blocks. A listening comparison against the hardware has not been run.
What is not proven, stated plainly: there is no in-browser evidence yet. No AudioWorklet lane has been generated for this module and no plug-in release is served, so the module is listed as coming soon with no playable format claimed. Those are the next gates, not an oversight in the copy.
The downloadable SG-323 release supports the hosts and systems listed below.
Works in Ableton Live, Reaper, Cubase, Studio One, Bitwig and FL Studio.
Every row below is a recorded build row or the recorded absence of one. Nothing here is inferred from what this module is meant to support.
| Format | Result | Download |
|---|---|---|
| Browser package (JS) | Builtweb bundle sha256 f71cc25069a9… · 499 KB | Built, but no downloadable archive was recorded. |
| Browser package (WASM) | Builtweb bundle sha256 7b3436ccf4c4… · 2.7 MB | Built, but no downloadable archive was recorded. |
| VST3 | Builtdarwin-arm64Steinberg validator + VST3 host render: passed bundle sha256 7a71fe64da5d… · 2.6 MB | CodexSg323-vst3-darwin-arm64.zip archive sha256 4438b03178ff… · 2.6 MB · darwin-arm64 |
| Audio Unit | Not built no recorded artifact row for au; native-lane-report.json is absent or records no au row for this module | Not built for macOS |
| CLAP | Not built no recorded artifact row for clap; native-lane-report.json is absent or records no clap row for this module | Not built for macOS, Windows or Linux |
| Standalone app | Not built no recorded artifact row for standalone; native-lane-report.json is absent or records no standalone row for this module | Not built for macOS, Windows or Linux |
Parity
browser-js = browser-wasm = vst3 qualified against their own recorded digests. Not recorded: au, clap, standalone.
Start from a named sound, then adjust the instrument to make it yours.
Migration fallback: approximated from parameter groups, not a runtime wiring diagram.
The reverberator is a large block of delay memory - 65536 words, one word every 1/32000 of a second - written through a permuted address sequence rather than as a plain ring buffer. That permutation is what makes the tap spacings irregular, and it is the reason the sound is a room rather than a comb filter.
Twenty-three taps read out of that memory: fifteen return to the input as feedback, and eight are summed into the two output channels. Where each tap sits is not a design choice made here - the addresses come from the original machine's EPROM tables, carried across verbatim. Changing program swaps the table, which is why the sixteen programs are genuinely different rooms.
The taps move. A modulation clock walks the read addresses around their nominal positions, and the amount it walks is driven by the input level, so playing harder changes the character of the tail and not only its loudness. That is the machine's own behaviour, and the Input Gain control sits in front of it for exactly that reason.
Before anything reaches the memory the signal passes a first-order high-pass and a first-order low-pass - the controls the hardware called Low and High Frequency Decay. They shorten the tail at one end or the other by never letting those frequencies into the memory in the first place, which is not the same as filtering the output.
Two switches reproduce the hardware's converters. Vintage rounds what is written into the memory to 16 bits, and Noise adds a low white-noise floor under it. Both are on by default because both were unavoidable on the original; turning them off is the one thing this can do that the machine could not.
The kernel is compiled restricted TypeScript, so the same source runs on the host, in the native plug-in and as a WASM reactor. It processes at a fixed 48 kHz internally and a host at another rate goes through the shell's rate adapter, because the delay memory is allocated in samples when the instance is created.
Algorithmic room reverb with bounded feedback.
A stereo delay that shows each repeat as it moves across the beat.
Six bands, a curve you can drag, and a bit-exact bypass.