cloudseed
cloudseed · effectsExact algorithm port of Ghost Note Audio's CloudSeed reverb (MIT-licensed, github.com/GhostNoteAudio/CloudSeedCore). Stereo input cross-mixes then per-channel passes through: optional 1-pole HP + LP pre-EQ → modulated pre-delay → multitap early-reflection field (up to 256 taps, seed-deterministic) → AllpassDiffuser (up to 12 stages) → 12 parallel late-field DelayLine voices, each with optional in-loop AllpassDiffuser + LowShelf + HighShelf + LP, with T60-targeted feedback that produces a precise decay-seconds tail. Cross-seed control divides the L/R seeded delay layouts for stereo decorrelation. 45 parameters total — 7 macros (DRY / EARLY / LATE faders, INPUT MIX, LOW CUT, HIGH CUT, CROSS SEED) are exposed as AudioParams for CV summing; 38 toggle/integer/seed/modulation parameters live on the worklet's message port. Bundled v1 preset bank: DIVINE INSPIRATION (DarkPlate from Programs.h verbatim), SHORT ROOM, BRIGHT HALL, INFINITE PAD. Card footer cycles through the preset bank with click-numbered slots, prev/next arrows, and a live DECAY readout that reflects LateLineDecay's computed RT60.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
in_l | audio | Left audio input into the reverb. Pairs with IN R as the stereo source; a signal patched into only one side is mirrored to both channels, so a mono source still excites both stereo tanks. audio signal; L/R stereo pair with in_r — L-only auto-duplicates to R |
in_r | audio | Right audio input into the reverb, partnering IN L for the stereo source (same mono-mirroring when patched alone). audio signal; L/R stereo pair with in_l |
dry_cv | cv | CV that offsets the DRY output-mix macro (0..1, ±1 CV sweeps the full span around the knob): raise the level of the un-reverbed (post-INPUT-MIX) signal in the output blend. control voltage (CV); modulates dry_out (additive offset — ±1 CV sweeps the full range, centered on the knob) |
early_cv | cv | CV that offsets the EARLY output-mix macro: raise the level of the pre-tank stage (pre-delay + taps + diffusion) in the blend. control voltage (CV); modulates early_out (additive offset — ±1 CV sweeps the full range, centered on the knob) |
late_cv | cv | CV that offsets the LATE output-mix macro: raise the level of the long reverberant tank in the blend — modulate it for swells. control voltage (CV); modulates late_out (additive offset — ±1 CV sweeps the full range, centered on the knob) |
input_mix_cv | cv | CV that offsets the INPUT MIX macro — the front-of-path stereo cross-feed that everything (dry tap included) hears — sliding the two channel feeds from fully independent L/R toward the same mono average. control voltage (CV); modulates input_mix (additive offset — ±1 CV sweeps the full range, centered on the knob) |
low_cut_cv | cv | CV that offsets the LOW CUT macro — the wet-path input high-pass corner — to thin or thicken the lows entering the reverb. control voltage (CV); modulates low_cut (additive offset — ±1 CV sweeps the full range, centered on the knob) |
high_cut_cv | cv | CV that offsets the HIGH CUT macro — the wet-path input low-pass corner — to darken or brighten what enters the reverb. control voltage (CV); modulates high_cut (additive offset — ±1 CV sweeps the full range, centered on the knob) |
cross_seed_cv | cv | CV that offsets the CROSS SEED macro, sweeping the L/R tank layouts between fully independent (wide, de-correlated tail) and identical (centered). control voltage (CV); modulates cross_seed (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
out_l | audio | Left channel of the output blend — the DRY, EARLY, and LATE faders summed. Pair with OUT R to keep the stereo width. audio signal; L/R stereo pair with out_r |
out_r | audio | Right channel of the output blend, the partner of OUT L. audio signal; L/R stereo pair with out_l |
params
| id | label | range | default | curve |
|---|---|---|---|---|
dry_out | Dry | 0..1 | 0.87 | linear |
early_out | Early | 0..1 | 0 | linear |
late_out | Late | 0..1 | 0.66 | linear |
input_mix | Input Mix | 0..1 | 0.23 | linear |
low_cut | Low Cut | 0..1 | 0.64 | linear |
high_cut | High Cut | 0..1 | 0.29 | linear |
cross_seed | Cross Seed | 0..1 | 0 | linear |
preset_index | Preset | 0..? | 0 | discrete |
controls
| control | what it does |
|---|---|
| Cloudseed clear {n} | CLEAR TAIL — flushes the reverb instantly: every tap, early-diffusion all-pass and late-tank delay line (and their in-loop shelves and lowpass) is zeroed, so whatever is still ringing stops on the spot. It changes no setting and is not undoable — the space is unchanged, only its current contents are dropped. The gesture DECAY makes necessary: at the long end the tail runs ~60 seconds, and INFINITE PAD parks near it. |
| Cross Seed | CROSS SEED — L/R layout convergence: at 0 each channel rolls a fully independent seeded layout (the widest, most de-correlated tail); raising it blends both channels toward one shared layout until at 100% the L and R tanks are identical (a centered, mono-correlated wet). CV via the X-SEED input. |
| Dry | DRY output level — how much un-reverbed input is in the blend. The dry tap is taken AFTER the INPUT MIX cross-feed (so raising INPUT MIX narrows the dry signal itself) but ahead of the cut filters, pre-delay, and the rest of the wet chain. Internally a dB fader (−30 dB..0 dB; the bottom reads MUTED). CV via the DRY input. |
| Early diffuse count | EARLY DIFFUSION STAGES — number of cascaded all-pass diffusers (1..12); more stages smear the early reflections into a smoother, denser cloud. |
| Early diffuse delay | EARLY DIFFUSION DELAY — the base all-pass delay (10..100 ms); each stage sits at a seeded fraction of it, setting the grain/texture of the early diffusion. |
| Early diffuse enabled | EARLY DIFFUSION enable — switches the cascaded all-pass network (which smears the taps into a denser cloud) in or out. |
| Early diffuse feedback | EARLY DIFFUSION FEEDBACK — the all-pass feedback coefficient (0..100%); higher thickens and lengthens the early diffusion. |
| Early diffuse mod amt | EARLY DIFFUSION MOD AMT — how deeply the diffusers' delays are modulated, adding chorusing/shimmer to the early field (modulation engages once the depth clears a small threshold). |
| Early diffuse mod rate | EARLY DIFFUSION MOD RATE — the LFO rate (0..5 Hz, per-stage seeded variation) of the early-diffusion modulation. |
| Early | EARLY output level — the wet path tapped just before the tank: the pre-delayed input plus TAPS and EARLY DIFFUSION when those stages are on (dB fader, MUTED at the bottom). CV via the EARLY input. |
| Eq cutoff | EQ CUTOFF — the corner frequency (~400 Hz–20 kHz) of the in-loop lowpass. |
| Eq high freq | EQ HI FREQ — the corner frequency (~400 Hz–20 kHz) of the in-loop high shelf. |
| Eq high gain | EQ HI GAIN — cut-only shelf gain (−20..0 dB; 0 = no cut) applied to the highs on every pass, progressively darkening the tail as it decays. |
| Eq high shelf enabled | EQ HIGH SHELF enable — switches the in-loop high shelf in or out; per-pass high damping is the classic dark-tail move. |
| Eq low freq | EQ LO FREQ — the corner frequency (~20 Hz–1 kHz) of the in-loop low shelf. |
| Eq low gain | EQ LO GAIN — cut-only shelf gain (−20..0 dB; 0 = no cut) applied to the lows on every pass through the loop, progressively thinning the tail's bottom as it decays. |
| Eq low shelf enabled | EQ LOW SHELF enable — switches the low shelf inside each tank line's feedback loop in or out; its cut compounds with every recirculation (late tail only — dry/early are untouched). |
| Eq lowpass enabled | EQ LOWPASS enable — switches the in-loop lowpass (set by EQ CUTOFF) in or out for the steepest progressive darkening. |
| High Cut | HIGH CUT — the wet-path input low-pass corner (~400 Hz–20 kHz); darkens everything entering the reverb (the dry path is untouched). In circuit only while HIGH CUT ENABLE is on. CV via the HI CUT input. |
| High cut enabled | HIGH CUT enable — switches the wet-path input low-pass (set by HIGH CUT) in or out of circuit. |
| Input Mix | INPUT MIX — the stereo cross-feed at the very front of the reverb (0..1), ahead of each channel's ENTIRE path (wet chain AND dry tap alike): at 0 each channel's path is fed its own input untouched; raising it blends in the opposite channel until at 1 both paths receive the same (L+R)/2 mono average. Because the dry tap sits after it, raising it also pulls the DRY signal toward mono — not just the reverb feed. CV via the IN MIX input. |
| Interpolation | INTERPOLATION on/off — enables smooth fractional-delay reads in the late tank's diffusers for cleaner modulation (less zipper/pitch grit) at a small CPU cost. |
| Late diffuse count | LATE DIFFUSION COUNT — number of all-pass stages inside each tank line (1..8); more = a smoother, more washed-out tail. |
| Late diffuse delay | LATE DIFFUSION DELAY — the base all-pass delay (10..100 ms) inside each tank line, shaping the tail's texture. |
| Late diffuse enabled | LATE DIFFUSION enable — switches the all-pass diffuser inside each tank line's feedback loop in or out. |
| Late diffuse feedback | LATE DIFFUSION FEEDBACK — feedback coefficient of the in-line diffusers (0..100%); higher lengthens and thickens the diffuse tail. |
| Late diffuse mod amt | LATE DIFFUSION MOD AMT — modulation depth of the in-line diffusers, adding shimmer to the tail. |
| Late diffuse mod rate | LATE DIFFUSION MOD RATE — the LFO rate (0..5 Hz) of the late-diffusion modulation. |
| Late line count | LATE LINE COUNT — number of parallel delay lines in the reverb tank (1..12); more lines = a denser, smoother tail. |
| Late line decay | DECAY — the reverb time / RT60 (0.05 s..60 s, the hero readout): each line's feedback is computed so the tail falls 60 dB in exactly this many seconds, from a tight room to a near-infinite pad. |
| Late line mod amt | LATE LINE MOD AMT — how deeply the tank delay lines are modulated, adding movement and de-metallizing long tails. |
| Late line mod rate | LATE LINE MOD RATE — the LFO rate (0..5 Hz, per-line seeded variation) of the tank delay-line modulation. |
| Late line size | LATE LINE SIZE — the base delay-line length (20..1000 ms), i.e. the perceived size of the space; each of the 12 lines rolls a seeded 0.5×..1.5× of it. |
| Late mode | LATE MODE (PRE/POST) — where each tank line's output is tapped: PRE taps straight off the delay line (its diffuser + EQ shape only the recirculating feedback); POST taps after the diffuser + EQ, so you hear them directly on every echo. |
| Late | LATE output level — the tank sum in the blend, the main "reverb" you hear (dB fader, MUTED at the bottom). CV via the LATE input. |
| Low Cut | LOW CUT — the wet-path input high-pass corner (mapped along CloudSeed's frequency curve, ~20 Hz–1 kHz); rolls off lows before they enter the reverb (the dry path is untouched). In circuit only while LOW CUT ENABLE is on. CV via the LO CUT input. |
| Low cut enabled | LOW CUT enable — switches the wet-path input high-pass (set by LOW CUT) in or out of circuit. |
| Preset | The active preset slot in the bundled bank (DIVINE INSPIRATION / SHORT ROOM / BRIGHT HALL / INFINITE PAD). Selecting a slot writes that whole preset — every macro AND every message-port value — into the module as ONE undoable edit, so the sound, the saved rack and every collaborator agree. Because the recall is a graph edit rather than a hidden push to the reverb, a rack-mate sees all 46 knobs move. |
| Seed delay | DELAY SEED (000–999) — the random seed for the tank's delay-line lengths; reshapes the tail's modal structure. |
| Seed diffusion | DIFFUSION SEED (000–999) — the random seed for the early all-pass layout; reshapes the diffuse texture without changing the knob settings. |
| Seed post diffusion | POST-DIFFUSION SEED (000–999) — the random seed for the diffusers inside the tank lines (each line derives its own from it); another dial for re-rolling the late texture. |
| Seed tap | TAP SEED (000–999) — the random seed for the multitap layout; change it to audition a different early-reflection pattern at the same settings. |
| Tap count | TAP COUNT — how many discrete early taps the multitap layer fires (1..256); more taps = denser early reflections. |
| Tap decay | TAP DECAY — the level slope across the tap cluster (0..100%): at 0% every tap is equal; raising it makes later taps fall away exponentially. |
| Tap enabled | TAPS enable — switches the seeded multitap early-echo stage in or out (when on it colors both the EARLY output and what feeds the tank). |
| Tap length | TAP LENGTH — the total time span (10..1000 ms) the taps are spread across; longer = the early-reflection cluster lasts longer. |
| Tap predelay | PRE-DELAY — a 0..500 ms gap ahead of the entire wet path (taps, early AND late; dry is unaffected) — the classic reverb pre-delay that pushes the space back behind the source. |
source
cloudseed.ts on GitHub.