Build: b436e0e | April 29 – May 6, 2026
⚗️ Alchemy — Chemistry-Driven Polyphonic Synthesizer
Omni's newest synthesizer takes a completely different approach to sound design. Alchemy maps the periodic table of elements to synthesis parameters — pick elements, combine them in a reactor, and let their chemical properties shape the sound.
How It Works
- 118 elements from the full periodic table, each with real physical properties: atomic weight, valence, ionisation energy, electronegativity, group membership
- Elements are loaded into a reactor — the engine's
bake_patch()maps their group and properties to FM operator ratios, modulation indices, ADSR curves, filter response, wavefolder drive and reverb amount - Oscillator waveform is auto-selected from the element's group: alkali metals → Morph, transition metals → FM/ChaosFM, halogens → Vowel, noble gases → VowelFOF, chalcogens → SinFold, and so on
- Filter cutoff direction depends on electronegativity (Mulliken proxy): electronegative nonmetals raise the cutoff, electropositive metals invert it — each element sounds physically consistent
DSP Engine
- 16-voice polyphony with wait-free hot-swap via
Arc<ArcSwap<ReactorPatch>>— patch changes never interrupt the audio thread - Hybrid synthesis: Braids carrier + 4-operator PM matrix (DX7-style routing bitmask) + ADAA wavefolder + SVF ZDF filter (f64 coefficients)
- Two LFOs per voice, ADSR envelope, FDN reverb (8 delay lines), DC blocker, output limiter
- Zero allocations in
process()— all voice state pre-allocated
Modulation and UI
- Marbles modulator — stochastic LFO with spread, bias, jitter and smoothing; matrix-routable to any Alchemy parameter
- Granular Cloud FX — integrated per-synth granular processor
- COLOR / TIMBRE knobs — continuous timbre morphing driven by EN and ionisation energy of loaded elements
- Animated plasma orb in the UI — reacts to the current patch energy visually
- Stoichiometry drag control on the periodic table — per-element blend power, fill-visualised in the cell
- 4-column layout: periodic table · reactor · modulation matrix · global parameters
Ampoule Snapshot System
- Full patch save/recall backend — each ampoule stores the complete reactor state: elements, blend powers, all parameter values
- UI syncs ampoule state from the engine on project load; vector padding handles migration from older saves
- State persists via the standard
get_state/set_statepath — nothing is lost on reload
🎹 MIDI Learn — Complete Implementation
MIDI Learn is now fully implemented across all phases. Any knob, fader, pad, transport button or modulator parameter in Omni can be mapped to hardware in seconds.
Core Mapping
- CC → continuous params: faders, pan, FX knobs, synth params, modulator params (ADSR, LFO rate/depth, Marbles, Step Sequencer)
- NoteOn → pads and transport: ClipLaunch, scene launch, Play, Stop, Record, Mute, Solo, Arm
- Right-click on any learnable widget → MIDI Learn → move the controller → done. One interaction.
- All mappings serialised into the project file; undo/redo supported
Takeover and Encoder Modes
- Pickup mode: the plugin ignores incoming CC until the hardware knob passes through the current value — eliminates parameter jumps when switching presets
- Jump mode: immediate absolute assignment
- Encoder modes: Relative Signed, Relative 2's-Complement, Relative Offset/64 — covers all common endless-encoder protocols
- 14-bit CC: MSB+LSB pair, auto-assigns LSB = CC+32, checkbox in the MAP window
Device Templates
- One-click instant mapping via bundled device templates (JSON) — load a template and all pads, faders and transport buttons are mapped immediately
- User templates stored in
XDG_CONFIG_HOME/omni/midi_templates/
LED Feedback
- Per-binding LED toggle: Omni sends CC back to the controller to light up the mapped pad or button
- Output port picker in the MAP window; CC echo for immediate visual confirmation
Transport Buttons Split
- Play and Stop are now separate toolbar buttons (no more toggle ambiguity with hardware)
- Record and Stop Recording are similarly separated
- Both pairs are individually learnable — each button gets its own binding
- ClipLaunch respects the track's Immediate/NextLoop launch mode when triggered via MIDI
omni_midi_sim
- The built-in MIDI controller simulator now has an 8×8 pad grid with 8 column-stop buttons below — a full grid controller layout for testing without hardware
- Cross-platform: Linux virtual ALSA/JACK port, Windows loopMIDI fallback
🔇 Gate — Professional Noise Gate / Downward Expander
Omni gets a full-featured gate built to professional standards:
- State-machine architecture: CLOSED → OPENING → OPEN → HOLDING → CLOSING — smooth, click-free transitions
- Dual threshold with hysteresis: separate open/close thresholds prevent chattering on signals near the edge
- Hard gate or soft expander: ratio from 1 (gentle expansion) to 100 (full gate), with C¹-continuous soft knee
- Configurable lookahead: 0–10 ms; pre-allocated circular buffer; latency reported to PDC so the rest of the graph stays aligned
- Per-channel sidechain filters: HP and LP Butterworth biquads on the key signal — tune the gate to trigger only on a specific frequency band
- Peak or RMS detection with configurable stereo linking
- Hold time prevents rapid open/close chattering on reverb tails
- Range: minimum gain floor when closed (partial gating for natural-sounding results)
- Parallel dry/wet mix for transparent parallel gating
- Three-layer denormal protection
⚡ Transient Shaper — SPL-Style Attack and Sustain Control
The Transient Shaper is based on the dual-envelope ratio detector concept from the SPL Transient Designer:
- Fast and slow envelopes: their ratio identifies attack onsets (fast > slow) and sustain/decay regions (slow > fast)
- Attack gain ±24 dB — boost or cut the transient punch independently of the body
- Sustain gain ±24 dB — control the tail length without touching the attack
- Sensitivity knob — maps the ratio scale to the 0–1 detection range; set how aggressively the detector responds
- Sidechain support, stereo linking (0 = dual-mono, 1 = max-linked)
- 0.5 ms gain smoothing — artefact-free on all transient material
- All coefficient math in f64; three-layer denormal protection
🔌 VST3 FX Support
VST3 plugins can now be loaded as insert effects in any FX chain — tracks, returns, and the master bus:
- Unified plugin FX loader: autodetects CLAP or VST3 from the file extension
Vst3FxPluginwrapper implementsFxEffect— same interface as builtin FX, same slot, same bypass- VST3 entries appear in the plugin browser, device panel and master FX chain alongside CLAP plugins
- Multi-class scan: bundles with several plugin classes are each shown as a separate entry
- Release build passes clippy with zero warnings
🔌 CLAP Multi-Plugin Bundle Support
CLAP bundles that contain multiple independent plugins are now correctly handled:
- The scanner enumerates all sub-plugins in a bundle and shows each as a separate entry in the browser
- Plugin path uses the
::plugin_idnotation (path/to/bundle.clap::lsp_plugins/compressor) for unambiguous identification - Fixes LSP Plugins and other multi-plugin
.clapbundles that previously showed only the first plugin
🎲 Algorithmic MIDI Generators — 10 New Algorithms
Ten generative algorithms land in the MIDI FX rack, covering a wide range of compositional strategies:
- Phase A (complex/mathematical): Markov Chain, L-System, Cellular Automaton, Thue-Morse sequence, Recamán sequence
- Phase B (musical/perceptual): Sequence looper, Shepard tone generator, Random Walk, Ornament & Crime (Turing-machine style), Tuplet generator
- All generators are RT-safe, MIDI-FX-compatible, and respect the active scale and transport
- 28 MIDI FX parameters exposed as modulation targets — any generator parameter can be modulated via the modulation matrix
🔧 Bass Synth — Mono Retrigger Fix
A subtle but audible bug in Bass Synth mono mode has been eliminated:
- Problem: in mono mode, filter states (Moog Ladder, Comb, SVF), oversampler state, and post-filter distortion state were not reset on retrigger (except true legato). Accumulated resonance or feedback energy would bleed into the next note's attack — an unwanted "bloom" artefact, especially at high resonance settings
- Fix: all filter and oversampler states are now reset on retrigger, unless the note is a true legato transition. Poly mode voice allocation also resets post-filter distortion oversamplers on allocation
- Clean note starts, no resonant energy carryover between notes
🎼 Factory Preset Banks
Curated factory preset banks are now included for two synths:
- Bass Synth — bass, sub, growl, pluck and lead patches
- PolySynth — pads, keys, strings and lead patches
🎛️ Step Sequencer — Multi-Step Selection UX
- Shift+Esc clears the multi-step selection without deselecting the clip
- Selected step bars are visually wider — easier to see the selection at a glance
Omni is actively developed — the next update is coming soon. 🚀
Alchemy or MIDI Learn — which one gets patched into your rig first? Let us know.
