Changelog

From v1.0 to native v1.13

Every public release of Reverie, with the technical detail behind each step. The first release went live on March 24, 2026. Today, two and a half months later, we are shipping the first fully native version of the Reverie Engine.

2.5 months
between releases
Native
rewrite, both OS
Chain Builder
37 modules user-selectable
Dreamtime
our extended Paulstretch evolution
Up to 5x
faster, measured across 8 styles

v1.13.0

The Native ReleaseLatest

Two and a half months after our first public release, the Reverie Engine is no longer running through a JavaScript shell. The DSP has been rebuilt as native code on macOS and Windows, and the architecture that drives it has been retuned for long-form ambient work. Under a strict pipeline-parity benchmark, depending on the style, the same 5-minute render runs anywhere from 1.05 to 5.2 times faster, with two to four times less peak memory across the board. The toolbox is also much deeper: the new Custom Chain Builder exposes the full set of 37 DSP modules and lets you arrange them yourself, where 1.0 only offered curated styles.

Dreamtime

From Paulstretch to Dreamtime

Our extreme time-stretch module gets a name of its own. Dreamtime is our evolution of Paul Nasca's 2006 Paulstretch algorithm with six engineering signatures: spectral drift, stochastic multi-segment extraction, phase continuity blending, adaptive segmentation, engine-level duration correction, and seeded phase RNG. The result: live evolving soundscapes, not frozen drones.

Native

Reverie Engine, now native

The DSP pipeline was rewritten end to end in native code on macOS and Windows. Up to 5x faster wall-clock on a 5-min render, 2 to 4x less peak memory across all styles, and no IPC bridge between the UI and the engine.

Pro mode

Custom Chain Builder

Assemble your own effect chain from the full set of 37 DSP modules. Reorder, tweak parameters, save chains as personal presets. v1.0 only offered curated styles, with no way to compose your own pipeline. Full undo and redo history.

+5 presets

Five new Pro presets

Deteriorating Memories, Harmonic Healing, Forest Breathing, DNA Splice and Ancient Chant join the factory roster. Two new styles, Chimera (spectral DNA fusion) and Sacred (ritual drones), back the last two.

Inside the engine

What makes the Reverie Engine ours

Architecture choices that survive the rewrite, baked into both native builds.

Reproducibility

USeed (Universal Seed)

A portable Base62 code that captures the full chain: 64-bit engine seed, module indices, every parameter value, stereo spread, with CRC-8 integrity. One code is enough to reproduce a render bit for bit on any machine, in any mode. The displayed USeed is truncated to 16 characters for readability; the full string is preserved internally.

Determinism

Per-module RNG isolation

Each module receives its own deterministic sub-seed derived from hash(main_seed, module_name, chain_position). Tweaking one effect never silently shifts the random parameters of another.

Headroom

Inter-module soft limiting

A tanh curve sits between every module to prevent resonance buildup on long chains. Transparent below threshold, audible only when the chain would otherwise clip.

Loudness

Long-form LUFS normalization

Loudness is measured on a 60-second window in the middle of the file (-16 LUFS, +3 dBFS headroom). Adapted to homogeneous drones, lighter on memory than full-file measurement.

Architecture

Three-layer preset system

Module defaults, then style overrides, then factory preset overrides. Recipes never have to mutate a module to fix a single preset, which keeps every other style intact.

DSP highlights

What changed under the hood, module by module

The Python build of 1.0 and the native build of 1.13 share the same algorithms. These are the nine modules where the rewrite brought a measurable change in either sound quality, numerical stability, or speed.

  • dreamtimeSix engineering signatures beyond Paulstretch

    Reverie's extreme time-stretch module, now shipped as Dreamtime, is a custom evolution of Paul Nasca's 2006 Paulstretch. Six differences from the baseline: (1) Spectral Drift – read head wanders through the source following three sinusoids at golden-ratio frequencies, drift plus-minus 30%, where the original reads linearly, keeping hour-long renders alive. (2) Stochastic Multi-Segment – for sources over 3 seconds, 2 to 4 non-contiguous micro-segments are extracted and crossfaded, with silent-zone detection and retry, instead of a single contiguous segment. (3) Phase Continuity Blending – 70% new random phase plus 30% previous with shortest-arc wrapping, reducing the grainy digital artefacts of per-frame random while keeping the drone character. (4) Adaptive Segmentation – segment duration auto-scales from 40-70% of the source for short inputs down to 20-40% for longer ones, always guaranteeing at least 40 FFT frames. (5) Duration Correction Loop – engine-level post-chain orchestration with pre-loop, re-stretch and 3.5s sigmoid fades to hit the target duration exactly, where the original is single-pass. (6) Seeded Phase RNG – MT19937 isolated from segment selection RNG, letting you lock the drone texture while varying upstream modules. Net effect: same spectral magic, with the motion, robustness and reproducibility needed for production work.

  • spectral_freezePer-bin Perlin drift, decoupled phase seed

    Captures multiple phase snapshots and interpolates them slowly. v1.0 jittered each FFT bin with plain random noise; 1.13 replaces it with deterministic 1D Perlin noise (3-octave fbm), so long-form freezes evolve smoothly instead of shimmering. The phase seed is also decoupled from the texture seed so you can vary one without disturbing the other.

  • temporal_evolutionNative IIR filtering, no more handcrafted FIR

    Slow macro envelopes (30 to 300 seconds) sweep brightness, cutoff and amplitude to fight drone fatigue. v1.0 reimplemented the filtering with handcrafted scipy windows; 1.13 uses native Butterworth IIR filters, more stable numerically and significantly cheaper per sample.

Benchmark

Measured, not estimated

30-minute ambient render, strict pipeline parity on both versions: identical source file, identical preset and parameters, identical mastering chain end to end. Two scenarios because the two main time-stretch families (paulstretch and spectral_freeze) stress different parts of the engine and gain differently from the native rewrite.

Dreamtime chain (Dark style)

Chain: Dreamtime, lowpass, spectral_blur, reverb, breathing. Stresses time-stretch FFT batching and the IIR filter path.

Metricv1.0 (Python)v1.13 (native)Delta
Wall-clock time39.08 s21.87 s1.79x faster
Peak resident memory5.10 GB1.75 GB2.91x less
User CPU time35.01 s38.40 snative runs work across cores in parallel*
Cycles retired146.8 G143.4 Gsimilar work, much shorter wall time
Output WAV duration1800.3 s1800.0 sidentical

Spectral freeze chain (Spectral style)

Chain: lowpass, spectral_freeze, spectral_blur, shimmer_reverb, stereo_width. Spectral-domain heavy, dominated by STFT/FFT across the chain.

Metricv1.0 (Python)v1.13 (native)Delta
Wall-clock time29.56 s24.56 s1.20x faster
Peak resident memory5.17 GB2.79 GB1.85x less
User CPU time29.67 s45.98 snative runs work across cores in parallel*
Cycles retired117.8 G170.6 Gnative does more work in parallel, finishes sooner
Output WAV duration1781.1 s1800.0 swithin v1.0 internal 5% target tolerance

* User CPU time is the cumulative work across all cores. The native build is higher because it runs effects in parallel across multiple cores; what you actually wait for as a user is wall-clock time.

Sweep across 8 styles, 5-minute renders

Same source, same parameters, same mastering chain. Only the style changes. Ordered by wall-clock speedup. Spectral-dominated styles gain less because the FFT path is already efficient in scipy; chains heavy in time-stretch and modulation gain the most from the native rewrite.

Stylev1.0 wallv1.13 wallSpeedupv1.0 RAMv1.13 RAMRAM saved
Crystalline35.86 s6.90 s5.20x4.41 GB1.36 GB3.24x
Bright26.55 s5.49 s4.84x4.24 GB1.14 GB3.72x
Cloud14.14 s6.26 s2.26x4.08 GB1.14 GB3.58x
Dark11.63 s6.36 s1.83x4.61 GB1.13 GB4.08x
Warm10.31 s6.79 s1.52x3.22 GB1.45 GB2.22x
Deep Drone10.42 s7.25 s1.44x3.19 GB1.45 GB2.20x
Vintage13.72 s10.13 s1.35x3.62 GB1.42 GB2.55x
Spectral5.91 s5.62 s1.05x2.63 GB0.91 GB2.89x
Test conditions
  • ·Hardware: MacBook Air, Apple M3, 8 cores (4 performance + 4 efficiency), 16 GB unified memory, macOS 26.3.1
  • ·Source: 238 s stereo 48 kHz PCM 16 input (electronica)
  • ·Parameters: chaos 70, brightness -50, stretch 35, target 30 min, seed 42
  • ·Mastering chain identical on both versions: DC removal at 5 Hz, multiband resonance taming, brightness-aware high-shelf, soft tanh limiter at 0.95, LUFS normalization to -14 LUFS with -1 dBFS true-peak ceiling, LR2 stereo bass mono crossover at 200 Hz
  • ·Output: stereo 48 kHz WAV PCM 24-bit, around 494 MB per render
  • ·Measured with /usr/bin/time -l, file load included in the timing

Single-run numbers. v1.13 was measured against the macOS-native Reverie engine, the exact code that ships inside the macOS app. v1.0 was measured against the legacy Python build, with the LR2 stereo bass mono crossover backported into its mastering pipeline so that both versions run the same mastering chain end to end. The bench harness on the native side is a dev-only tool, disabled by default and never bundled with the shipped app.

Performance

  • Engine compiled with AVX2 and FMA on Windows for 256-bit SIMD float operations
  • Native Apple Silicon and Intel binaries on macOS
  • SIMD-vectorized FFT replaces the Python scipy path on the heaviest spectral modules
  • O(n log n) FFT convolution on reverb and shimmer paths
  • Native Butterworth IIR filters in place of handcrafted scipy filters on temporal_evolution and similar modules
  • Single-pass in-place processing on modulation modules (breathing, micro_drift), better cache behavior on long renders
  • Double-precision phase accumulators on every LFO, fixing float drift that the Python build accumulated past 6 minutes at 48 kHz

Added

  • Custom Chain Builder (Pro mode): full set of 37 DSP modules now user-selectable, replacing the curated-styles-only workflow of 1.0
  • Five new factory presets: Deteriorating Memories, Harmonic Healing, Forest Breathing, DNA Splice, Ancient Chant
  • Multi-format export: WAV, FLAC, OGG, AIFF in 16 or 24-bit
  • USeed (Universal Seed): Base62 code that captures the full chain, modules, parameters and stereo spread for byte-identical reproduction on any machine
  • Phase seed parameter on Dreamtime for stable base texture across upstream changes
  • Undo and redo on the entire session
  • Multi-select drag and drop
  • Native file drag and drop
  • Icon picker for custom presets

Improved

  • Pixel-perfect native UI on both macOS and Windows
  • Faster startup, no JavaScript runtime to warm up
  • Tighter audio scheduling, no IPC latency between UI and engine

Fixed

  • A class of bridge-related bugs from the 1.0 stack disappeared with the native rewrite

Compatibility

macOS and Windows. Same licenses as 1.0, no re-purchase needed. Output duration unchanged: 30 minutes on Pro, 3 minutes on Free.

v1.0.0

The First Release

The first public release of Reverie. The Reverie Engine ran in Python (NumPy and SciPy DSP) inside a hybrid desktop shell, with a curated style-based workflow. Everything you hear in 1.13 starts here.

Added

  • Reverie Engine in Python, hybrid desktop application on macOS
  • Style-based generation: pick a curated style or roll the random one, then hit generate
  • 15 factory presets for the Pro tier, 5 Lite presets in the free tier
  • Up to 100x stretch ratio
  • Pro tier export up to 30 minutes, Free tier capped at 3 minutes
  • WAV export
Changelog | Reverie