Coalescent is a set of strange oscillators for VCV Rack 2: gliding stochastic tones, scanned physical bodies, spiking neuron voices, three-phase genetic circuits, and predator–prey ecologies. Built around one idea: let a small dynamical system run, and listen to it. Each module is a different system — stochastic, physical, neural, genetic, or ecological — driven hard enough to make sound. They're grouped as the Fluctuations series (a label used throughout the docs, not a separate brand); the same plugin has room for other series later.
| Module | System | Character |
|---|---|---|
| GENDYN | Xenakis dynamic stochastic synthesis (GENDY3) | a piecewise-linear waveform whose breakpoints random-walk each cycle — directed glissandi and living timbres |
| Haptik | scanned synthesis (mass–spring ring) | a ring of masses scanned at audio rate; pitch and timbre decoupled — pluck it, freeze it, or resonate it |
| Neuron · Axon | FitzHugh–Nagumo neuron | a spiking relaxation oscillator that crosses from drone to one-shot percussion on a single CURRENT knob |
| Neuron · Soma | Hindmarsh–Rose neuron | Axon's three-variable sibling: tonic spikes → bursts → chaos, all from injected current |
| Operon | Elowitz–Leibler repressilator (gene ring) | three genes repressing each other in a ring, ~120° out of phase — a native three-phase oscillator, LFO, and clock |
| Bunnies | Lotka–Volterra / Rosenzweig–MacArthur | predator & prey chasing each other a quarter cycle apart — a two-phase oscillator, LFO, and clock |
- Evolving digital noise / stochastic textures and glissandi? → GENDYN
- Plucked, struck, or resonant string-like bodies you can freeze? → Haptik
- Pingable spikes and rubbery, excitable neuron percussion or drones? → Axon
- Bursting, slow-fast, chaotic motion? → Soma
- Three-phase tones, three-phase LFOs, or a three-phase clock? → Operon
- Two-phase boom-bust motion, or a two-phase clock? → Bunnies
Axon and Soma are conceptual twins — the FitzHugh–Nagumo and Hindmarsh–Rose
spiking-neuron models — and they're built that way: both live in src/neuron/ over
a shared src/dsp/rk4.hpp (a generic coalescent::rk4<N> step + pitch-adaptive
substepping, where the HR model extends the FHN one with a third, slow adaptation
equation). They
share a name prefix so they sort together in the browser and an accent/panel
language so the kinship reads visually; they're also the only two modules tagged
Polyphonic (up to 16 voices), so a browser filter narrows to exactly the pair.
- GENDYN — dynamic stochastic synthesis
- Haptik — scanned synthesis
- Axon — FitzHugh–Nagumo neuron (+ polyphony notes)
- Soma — Hindmarsh–Rose neuron
- Operon — Elowitz–Leibler repressilator (three-phase)
- Bunnies — Lotka–Volterra / Rosenzweig–MacArthur predator–prey
The patches/ folder holds ready-to-load .vcv demos for every module (free-run,
sync, polyphony, playable MIDI, and per-module character patches), plus
coalescent_gallery.vcv — a gallery of modules side by side for a quick look.
These demos are generated by the scripts in tools/ and, on WSL, are also copied
into the Windows Rack patches folder when present. Separately, patches/community/
holds bigger, fully-produced patches contributed by users (hand-built, not
script-generated) — see its README for credits and setup. To regenerate the demos:
python3 tools/make_patches_neuron.py # Axon + Soma
python3 tools/make_patches_haptik.py # Haptik
python3 tools/make_patch_gendyn.py # GENDYN 16-voice
python3 tools/make_patch_gendyn_2voice.py
python3 tools/make_patch_gendyn_cluster.py
python3 tools/make_patch_operon.py # Operon (repressilator)
python3 tools/make_patch_bunnies.py # Bunnies (predator-prey)
python3 tools/make_patch_gallery.py # gallery viewFrom the VCV Library (recommended). Coalescent is in the official VCV Library — subscribe there, then in Rack use Library → Update all (or Sync on Rack Pro). This keeps the plugin updated automatically and is the easiest path for most users.
Manual (development builds / unreleased changes). Download the .vcvplugin
bundle for your platform from the
latest GitHub Release,
drop it into your Rack user folder's platform-specific plugins directory — since
Rack 2.5 this is plugins-<os>-<cpu>/ (for example plugins-lin-x64/,
plugins-win-x64/, plugins-mac-arm64/), not a bare plugins/ — which you can
open via Rack → Help → Open user folder. Then restart Rack.
Download the VCV Rack 2 Plugin SDK and point
RACK_DIR at the extracted path.
# Linux (native)
make RACK_DIR=~/Rack2-SDK/Rack-SDK dist
# Windows cross-compile (from WSL, MinGW-w64)
RACK_DIR=~/Rack2-SDK-win/Rack-SDK \
CC=x86_64-w64-mingw32-gcc-posix CXX=x86_64-w64-mingw32-g++-posix \
STRIP=x86_64-w64-mingw32-strip MACHINE=x86_64-w64-mingw32 make distmake dist writes a .vcvplugin bundle to dist/. CI (.github/workflows/build.yml)
builds Linux x64, Windows x64 and macOS arm64 on every push, and attaches the
bundles to a GitHub Release on a v* tag.
make check parses plugin.json (a jq syntax check) and runs every module's
standalone kernel replica (stability/calibration) plus the RK4 equivalence check
— no Rack SDK needed. It's the same guardrail CI gates releases on. A second target,
make check-simd, proves the float_4 (poly-SIMD) path matches the scalar kernel;
it needs the Rack headers, so CI runs it after the SDK download.
make check # SDK-free stability/calibration/RK4
make check-simd RACK_DIR=~/Rack2-SDK/Rack-SDK # SIMD equivalence (needs Rack headers)Each replica can also be built and run on its own:
g++ -O2 -o /tmp/t tools/stability/axon.cpp && /tmp/t # FitzHugh–Nagumo
g++ -O2 -o /tmp/t tools/stability/soma.cpp && /tmp/t # Hindmarsh–Rose
g++ -O2 -o /tmp/t tools/stability/haptik.cpp && /tmp/t # scanned-synthesis ringThese are intended behaviours, called out so they don't read as defects:
- GENDYN aliases at high center frequencies / extreme settings — it's a raw piecewise-linear oscillator, not band-limited. Part of the GENDY3 sound.
- Haptik Slow mode steps the lattice every 256 samples by design (tactile, haptic-rate morphing); the readout is interpolated so it doesn't sound stepped.
- Axon/Soma are excitable systems — they click and spike on purpose, and their pitch is open-loop (CURRENT/EPS/BURST/ADAPT pull it a little).
- Soma's chaotic region sits around the documented CURRENT; nearby values shift with rate, drive, and modulation — chaos isn't a fixed point on the dial.
- GENDYN and Haptik preserve their evolved internal state with the patch (the running waveform / frozen lattice), so a sound you let run or freeze reloads as itself. Axon, Soma, Operon and Bunnies restart from their defined initial conditions; all knob and menu settings persist everywhere.
GPL-3.0-only. © Jeremy Gray.
