VIBE FM Mk1 Open firmware, officially supported. The first 100 get 10% off Join the list →

The Firmware Hub · FM-1 · Matryoshka

Matryoshka for the M-VAVE FM-1

Matryoshka1.14.0

by michael glaviano GitHub ↗

synth

A modular synth for the FM-1: 30 factory patches built from nested modules, from classic polysynths to drum machines, each played with four knobs per page, plus a step sequencer with patterns and songs. Build your own patches in the browser editor and send them to the FM-1 over USB.

Text by the maker.

About it

Engines
FM (2–4 op)Analog / VAWavetablePhysical modelling
Its own: Oscillator/VCF/ADSR modules, operator & fm pair assemblies, Wavetable, Phase distortion, String (Karplus), Resonator, Comb; Granular is an input processor
Runs on
FM-1 · Browser ↗
Release
1.14.0 · released 13 Nov 2026 · on the hub since 26 Oct 2026596 KB · what's new
Licence
GPL-3.0 · source ↗ · copy on the hub
Flash chip
Every FM-1, the newer chip 0xB36014 too
Identity
FM-1_7011400what it reports over USB while it runs
Build
Built by its maker, not signed
Popular
↓ 5 installs via the hub · ★ 9 on GitHub

Family

Like Matryoshka

Changelog

What changed, version by version19 versions

1.14.0 — 2026-11-13

  • Editable master FX: ordinary assemblies provide the present stages in Drive → Chorus → Delay → Reverb order, without duplicating effects already exposed by an instrument. One Reverb adds a mono wet return while preserving stereo dry sound.
  • The Effects shelf also offers master FX for custom patches, with stereo jack bundles and editable child stages. Unsupported helper-bypass edits retain ordinary module playback instead of being force-enabled by FX recognition.
  • MASTER FX on compatible new firmware: SELECT chooses a present effect, K1–K4 edit its first page, SEL toggles it, and FX or HOME returns. Normal device pages keep the later parameters. Drive and Chorus ramp to dry; Delay and Reverb stop new input and spill tails, with a bounded two-second fade for sustained or frozen tails.
  • A switched-off Delay or Reverb stops using CPU once its tail falls silent. Before, every Delay or Reverb that an earlier preset had switched on kept running at full cost, so stepping through presets could raise the FM-1’s load until it muted. Audible tails still spill unchanged.
  • New melodic factory revisions put Harmony on LFO, initially off like ARP and the added effects. The Harmony light and FX stage rows show enabled state. Sallen 20’s SWITCH and Canvas’s PULSER move from FX to EDIT. Legacy patch button mappings are unchanged. The promoted controls use standard 500 ms Delay and single-stage Drive without oversampling; the underlying modules remain editable.
  • Format 55 stores optional sparse master FX bindings and selects enabled-state lights for verified LFO/Harmony Toggles, even without an FX rack. Other patches keep their older compatible format. Portable graphs targeting 1.13 do not add the new firmware’s FX page, light or tail behavior.
  • Firmware updates preserve saved patch bytes and names rather than replacing raw factory matches. Empty-store initialization, explicit factory reset, additions of new factory names to empty slots and saved assembly preset migrations remain.
  • Archived factory and XL patches remain discoverable through Community with author and source under GPL-3.0-only, including originals whose names match differently configured selected defaults. Existing Community submissions retain CC BY-SA 4.0; relocation does not relicense data.
  • FM-1 defaults exclude non-hardware-based examples: Init, Simple FM, Plucked String, Basic Poly, Drift Poly, Mono Lead, Supersaw Stack and <7PH remain editor-available. The composite <7PH patch data and hardware-derived drum/drone data are preserved.
  • The owner-approved 22-patch bank now supplies normal browser defaults, numeric exports and firmware generation without retuning. Protected drum/drone patches keep main's current versions, including Verona Drum 1's per-channel PAN and the calibrated kits; the 909 Kit needs no output trim. Melodic sounds are calibrated to the factory loudness rule by gain alone; their timbre and effects are unchanged. Sallen 20 uses Drive + Chorus + Delay without Harmony. Hera 3 retains independent per-note filters and amplifiers. Three factory synths play fewer notes than in 1.13.0, to make room for the added effects: Algo Four plays 4 (was 8, as many as the Yamaha DX100), Expander S plays 3 (was 4, as many as the Oberheim Four Voice) and Hera 3 plays 3 (was 4; the Roland Juno-106 plays 6). Their 1.13.0 versions stay available in Community. Existing saved graphs remain authoritative; a legacy name-only Hera 4 reference resolves its archived original.
  • Fmini-1-informed preset studies emphasize deliberate oscillator registers, distinct filter/amplitude contours and playable gestures, especially on Monolith D. All 110 melodic sounds received owner listening approval, including nine new lo-fi designs. The audition firmware passed 96 default-profile phases and 330 authored-sound phases without mute, shedding or late events, reaching 93.87% peak CPU without scoped exceptions. These finite development probes do not qualify arbitrary edits or the final 1.14.0 artifacts.
  • Synth and FX preset recall: compatible single-instrument racks recall their sound and complete promoted FX settings together, including enabled stages. Init stays dry; legacy synth-only presets leave FX unchanged. Scoped transfers require the new firmware capability, not merely native format 55.
  • Authored sounds ship in the read-only factory preset list without consuming user-store slots. Normal firmware generation includes the approved bank; the former --selected-bank opt-in is removed.
  • Factory preset ROM values use lossless dictionary packing and sparse overrides. Recall expands into the existing preset buffer; stored presets, Q16 values and the audio path are unchanged.
  • Loading an assembly preset respects that card's exposed parameter limits. A four-voice preset no longer raises a three-voice Expander candidate above its selected cap, and the untouched stored preset remains usable on a wider copy.
  • Factory fitting evaluates explicitly shared filters, contours and amplitude articulation before further voice/FX cuts. Sharing is an audible articulation compromise, not a transparent optimization.
  • Canvas candidates retain their full patch-field choices with shorter PRESS/SEQ/ENV/RND1 legends, fitting Harmony/Steps/Arp without a new binary format or audio-path change. Additional FX still require separate resource qualification.
  • Multimode, Ladder and Diode filters skip redundant cutoff-coefficient work when modulation depth is zero: a Multimode filter keeps its fixed-cutoff coefficients while its CV depth is zero, and the Ladder takes its audio-rate FM path only while its CV amount is nonzero. The output samples are bit-identical (#806; the non-exact 8/16-sample coefficient updates it proposes remain open). Live depth changes retain their normal modulation, saturation and self-oscillation behavior; no parameter-rate or sound-model restriction is introduced.
  • Reverb uses constant-index feedback writes, caches slow-sine table endpoints with exact audio-rate interpolation, and reuses exact decay coefficients while effective size/freeze remain unchanged. Analog FM oscillators without feedback or sync choose their waveform once per block. Native differential checks retain identical samples and DSP state, including live controls, freeze tails and oscillator-mode transitions. Neither change lowers modulation rate or sound quality; MCU savings require rig measurement.
  • Chorus reuses exact sine endpoints and separates its two taps. Nonlinear multimode filters cache only the reciprocal seed division while retaining the current denominator in every sample's refinement. Quantizers reuse results only for identical consecutive input within a block; Steps skips inactive gate-timer scans, and a stopped Steps track with nothing to play skips its per-sample loop (bit-identical; about 12,600 counted cycles a block, the idle track cost Canvas about 145 µs a block on the FM-1). Native differential checks cover live controls, clock transitions, key events and DSP state without restricting their sound or update rates.
  • Multimode filters specialize single-output LP12/HP6 routing and fixed linear MIX-only routing without changing their state equations. Phase-distortion oscillators skip unused resonance-ratio calculations and specialize an unmodulated alternate-bend path. Native differential checks retain identical connected outputs and persistent state across routing and control transitions; hardware qualification is separate.
  • The editor's CPU estimate follows the faster single-output filter and fully wet Chorus and Reverb paths, and charges a choice moved by a cable at its costliest setting.
  • Reverb uses exact 32-bit damping products for fixed delay taps, including its first two taps when modulation is off. Fully wet Reverb and Chorus omit redundant final mixing while preserving delay memory, modulation and freeze state.
  • Native-rate Drive selects common single-stage softclip/fold and two-stage fold transfers once per block. Differential checks retain identical samples and persistent state across live mode, stage and oversampling changes; no controls or sound quality are removed.
  • Oscillator phase-modulation sums reuse the same lane’s discarded-output scratch buffer, recovering 1 KiB of static RAM without reducing voices, effect capacity or the firmware’s memory safety margins.
  • Emulator execution commands unpack .fwsc firmware packages before running them. The packaged-image boot/recovery gate now tests the app rather than decoding encrypted transport bytes as instructions.
  • Fixed pan positions take less CPU on the FM-1 without changing the output samples.
  • Verona Drum 1 has PAN on each of its six channels. Saved presets keep their control values and start with centered PAN.
  • Firmware capability updates refresh Library budgets without interrupting an active bank transfer.
  • Patches can use memory recovered by sharing signal buffers. In the [host allocation check](tools/buffer_budget.py), one patch uses 1,536 bytes of signal storage instead of 44,032, recovering 42,496 bytes for its effect lines. The editor follows the connected firmware's reported rule; older firmware and offline budgets stay conservative. Voice and CPU limits are unchanged. Host allocation checks, the focused emulator scenario and registered-FM-1 audio/timing qualification pass.
  • Hardware CPU surveys clear the previous patch's cached diagnostic peak before committing the next patch, without discarding its first rendered block.
  • Historical CPU calibration uses frozen released factory graphs, so new bank revisions are not compared against recordings of different patches. Counter checks skip structurally unencodable candidates without excluding candidates solely for a high CPU estimate.
  • Experimental assembly capability inspector (?capabilities=1): inspect engine recognition and supported audio paths while editing, load design examples, and validate a dry-route bypass preview. The preview leaves audio unchanged.
  • The experimental capability inspector shows current module names beside IDs and explains filter output labels. It distinguishes unmet engine/audio-path requirements from unimplemented Harmony, Arp and Steps performance recognition.
  • Release-packaging checks preserve the host compiler's search path while isolating firmware build settings.
  • Selecting a user preset in the editor loads its own values even when a factory preset has the same name, without replacing the drum pattern.
  • Device scenario runs enforce and save EDITOR IGNORE on the test rig, check it around installs and scenarios, and stop if it cannot be confirmed.
  • Send saved assembly presets with a patch: FM-1 & MIDI now offers “Send this patch’s presets” beside Send patch. It transfers saved assembly presets, including nested ones, asks before replacing FM-1 copies, and refreshes Library even after incomplete transfers. PRESET selects presets for matching device pages; nested assemblies have no separate page in that patch. Sending the patch itself still preserves its sound without copying preset lists.
  • Expand the Monolith audition studies to seven composed effects treatments, each with a dry reference.
  • Factory sound revisions soften 8 Lire’s Pair FM Bells and Feedback Howl, give Spokes more contrasting chord roles, and reduce prominent tonal percussion. The 909 and Perun demonstration grooves use their actual hat and snare lanes.
  • Factory drum sounds carry distinct default patterns. Selecting another factory sound changes only an untouched factory pattern; saved user patterns stay in place. Factory sound banks add practical melodic and kit choices, reduce harsh drone settings, and correct final-output peaks in the audition phrases.

1.13.0 — 2026-11-10

  • Harmonizer chords can feed Arpeggiator and Steps. Cable order chooses root recording or editable chord notes, including step recording with Side chord buttons. ARP inserts after harmony; unsupported keys routes show an explanation. These routes require firmware supporting patch format 53.
  • USB playback through your FM-1: hear computer audio through the headphone output while recording the synth over the same USB cable. USB RETURN sets playback volume independently of MASTER; playback stays out of the recording.
  • Name your FM-1: save a name from FM-1 & MIDI → Name & USB playback, then reconnect USB to apply it to the device’s USB name. Host apps may retain an earlier label. A serial from the flash chip identifies the unit and survives factory reset.
  • Piano-roll keys play notes: outside step record, all 27 FM-1 keys play their own pitches. Stopped REC still starts step record. Drum and other eight-row instruments keep their step input.
  • Silent step recording: during piano-roll step record, hold SEL and press FX to turn note preview off or on. The screen says SILENT when entry is quiet; notes are still written normally.
  • Oracle V CPU experiment (off by default, #808): generated member functions keep their temporary storage out of one large stack frame, fixing the second-core startup stack overflow. A focused emulator check now watches the actual stack pointer while the compiled code runs on core 1. No added instrument capacity or hardware speed-up is claimed.

1.12.0 — 2026-11-09

  • Live edits stay in step with the FM-1: a value change that changes the compiled module layout sends the whole patch before further edits. Arming, muting and focus changes wait for an upload to finish. The Harmonizer releases held keys correctly after its split moves, and extended chords follow every inversion step correctly.
  • Harmonizer module: one key plays a whole chord on that root, after the Telepathic Instruments Orchid. Cable it between Main's keys and a Voicing. Its chord buttons are maj, min, dim, sus2, sus4, 7 and 9, and buttons held together combine (min + 7 + 9 is a minor ninth). On the FM-1 they are its seven lowest keys, at any octave: black keys 1 to 3 pick maj, min or dim, white keys 1 to 4 add sus2, sus4, 7 or 9, and every other key plays a root; the screen names the chord (CHORD: MIN7). From a MIDI keyboard they are the seven keys under the split (F3 to B3 as made). With no button held the card's own chord plays. LOCK keeps the chord so the buttons need not be held; VOICING moves it through its inversions. A patch with a Harmonizer is saved in format 52, which needs this firmware.
  • The supply as M-VAVE's own firmware sets it: at power-on the FM-1 raises its core supply from 1.26 V to 1.38 V and another internal supply from 1.40 V to 1.60 V, in the stock firmware's order, as Melodee does, before the second core starts (#735). If that setup fails, the FM-1 starts on one core. The CPU clock is not changed. tools/m1_link.py cpuclock shows the levels.
  • The sound engine compiled for speed: the code the audio interrupt runs (the render, every module, the mix, USB audio's copy) is built at -O2, the rest of the firmware for size as before. In the standalone #798 comparison, the image grew 531,088 → 546,236 B of its 581,564 B slot (CI measurement). On the rig, the combined batch against 1.11.1 took Verona Drum 1 from 85 % to 81 % and the 808 Kit from 83 % to 80 %, while Oracle V rose from 74 % to 78 % and Init from 21 % to 25 %. These are steady peaks across stopped and running playback at the existing voice counts ([measurements](docs/measurements/2026-11-09-rig-integration.md)). The editor's CPU estimate is recalibrated on all 30 factory patches.
  • The FM-1 plays what the editor plays when a patch holds modules no one hears: the editor still leaves them out of what it sends, but no longer the ones before a Random module, a Steps track, a Shift register or an oscillator with analog, which take their randomness from their place in the patch. A P-lock on a module no one hears stays in the patch after you edit the track's locks on the FM-1, and an edit made while a patch goes to the FM-1 waits for it. Canvas sends four fewer modules: 3,759 → 3,730 bytes (the editor's count, #801).
  • Less memory touched per block, the same sound: a patch's signal buffers are shared once nothing reads them any more. Oracle V renders through 63 buffers instead of 232 (116 KB → 32 KB), Algo Four 224 → 103, Cassia 1 227 → 92, all 30 factory patches 2,435 → 916 (host count, #800). Every patch that loaded still loads, and nothing more does yet.
  • Oracle V CPU experiment (off by default, #808): with ENG_AOT=1, the FM-1 runs the Oracle V assembly from code made ahead of time instead of on its interpreter, bit for bit the same output. The CPU model predicts a lower peak, but the rig loses its second core when this experiment starts. It remains disabled; no hardware speed-up or added capacity is claimed.
  • Room for code that runs from RAM: the #725 CI comparison increased free space after the effect memory's second line area from 96 to 1,484 B. The USB setup log (tools/m1_link.py usblog) keeps the last 64 USB requests and bus events, not 128, and an unused part of the flash driver is left out of the app.
  • A key pressed right after SEL arms a device plays. A key in the same 3 ms as the arm was cut with the keys the old set held. The naive-owner simulator found it on <7PH, with DRUMS and PATTERN armed: key 1 was silent (#748).

1.11.1 — 2026-11-08

The same firmware format as 1.11.0: update the FM-1 and every patch plays as before, only with more room.

  • A faster engine, the same sound: the envelopes, input sums, filter, Mixer and Math do less work for the same output, bit for bit. On the test rig, the steady peak of a busy patch fell: Briefcase 3 91 % → 76 %, Algo Four 87 % → 77 %, Verona Drum 1 83 % → 78 %, the 808 Kit 82 % → 79 %, Oracle V 78 % → 74 %.
  • Cassia 1 plays four voices again (two in 1.11.0): 77 % on the test rig with all four, nothing dropped.

1.11.0 — 2026-11-08

A patch that uses something new in 1.11 is saved in format 51, which needs this firmware; an FM-1 with older firmware is told to update. Every other patch keeps the older format.

  • Hera 4 takes Hera 6's slot: the Juno-106's whole panel (saw and pulse at once, the four-position HPF, chorus I / II, LFO delay, portamento, the hold pedal and more) with four voices, where Hera 6 had a cut-down panel with six. Hera 6 XL still plays all six in the browser. Your Hera 6 presets move to Hera 4.
  • Wanderer is the whole ARP Odyssey: Wanderer XL takes Wanderer's slot (each VCO's saw and pulse at once, continuous coarse tuning, the ring modulator and S/H on the pulses), with a PATTERN track. Wanderer XL leaves the list.
  • Canvas is the whole Music Easel: Canvas XL takes Canvas's slot (the patch field with a named source for each input, random voltages, pressure, the mod oscillator's dial, every switch named). It keeps the Arpeggiator but has no PATTERN track. Canvas XL leaves the list.
  • Oracle V plays like a Prophet-5: both oscillators' waves at once, Poly Mod into frequency, pulse width and filter, Wheel-Mod's five destinations, velocity and aftertouch, unison, the Release switch. Four voices (was five); test rig 79 %.
  • Algo Four plays like a DX100: eight voices (was three), all eight algorithms, the DX100's 64 frequency ratios and seven detune positions. Test rig 86 %.
  • Cassia 1 has more of the CZ-1: a pitch envelope for line 2, velocity, key follow and level per line, glide, bend range, the mod wheel on vibrato, OCTAVE, and the stereo chorus. Two voices; test rig 64 %.
  • 8 Lire has all 46 of the Lyra-8's controls: FM source and structure switches, TOTAL FB, LINK, two delay lines, FAST, PITCH and VIBRATO. It is mono now, as the Lyra-8 is. Test rig 80 %.
  • Expander S gets the SEM's modulation: FM and PWM from envelope or LFO, sync, band pass, a drone switch, portamento, octave, tune and assign mode. Still four voices.
  • Wanderer, Vernon 100 and Briefcase 3 get a PATTERN track in front of the Arpeggiator.
  • Io 4 and Vernon 100 name every switch position as on their panels (OFF / ON, COLOR, MODE LP / BP / HP / BR and the rest).
  • One key assign switch: Io 4's POLY I / POLY II / UNISON I / UNISON II as one row, as on the Jupiter-4; Hera 4 gets the Juno-106's assign mode and Algo Four the DX100's POLY / MONO.
  • Filters closer to their originals: the Multimode filter's drive (an MS-20-style scream in Sallen 20; gentler in Expander S, Vernon 100 and Hera 4), the Ladder's diode mode (Silver Box, Briefcase 3) and stage saturation (Monolith D, Oracle V, Io 4, Wanderer). Off in your own patches.
  • Analog oscillators: a new ANALOG row gives an oscillator an analog VCO's small flaws, each voice its own. On in the factory instruments with analog VCOs.
  • Canvas's lopass gates close slowly: open in 10 ms and close in 350 ms (both were 40 ms), as the Easel's vactrols do, so plucks ring out. The Slew limiter has a new FALL row for it.
  • Full parity: in 1.11, Io 4, Vernon 100, Wanderer, Monolith D, Sallen 20 and Silver Box reach full parity on the FM-1, apart from hardware (#375).
  • 808 Kit and Verona Drum 1 keep their 1.10 layout: the 808's mid and high toms and Verona's DRUM 2 and PAN are in their XLs only; with them the FM-1 could not keep up.
  • Longer Delays: a RATE row (44k, 22k, 11k) trades brightness for time: the longest Delay 1.9 s → 3.8 s at 44k, 7.6 s at 22k, 15.2 s at 11k. Changing RATE while it plays bends the echoes like a tape changing speed.
  • Tape on the Delay: a TAPE switch darkens and saturates each repeat, a WOW row wobbles its pitch, and HEADS picks up to three playback heads.
  • The Delay costs less: a plain Delay 1.3 % → 1.1 % of the audio time, with ping-pong 1.8 % → 1.4 %, the same sound bit for bit (the editor's CPU model).
  • Five effect assemblies: envelope filter, ducking delay, gated reverb, overdrive and octave fuzz, each with four presets.
  • Granular follows the keyboard: a new pitch input plays the grains in tune (C4 = the recording's own pitch).
  • Saving no longer cuts the sound: SAVE 8.7 ms of silence → none, a preset store 11.0 ms → none, the settings record 5.8 ms → none (the test rig's USB audio). FM-1s with the UC25HQ80 flash chip still write as before.
  • Up to 128 modules a patch (was 64). A patch takes what it needs from one 362 KB memory instead of separate fixed pools, so a patch without a Granular has room for more voices.
  • 3.5MM OUT ON / OFF: GLO › SYSTEM › 3.5MM OUT turns the speaker and the headphone jack off while a computer records over USB audio; MASTER still sets the level. Hold HOME + OCT- + OCT+ for 2 s to switch it from any page.
  • EDITOR ALLOW / IGNORE: GLO › SYSTEM › EDITOR set to IGNORE keeps the editor from connecting to that FM-1 or installing firmware on it.
  • Play once with a count-in: SEQ held + PLAY counts in one bar, plays the pattern or song once, then stops. REC's count-in clicks too (speaker and jacks only, not USB audio).
  • The tempo in the menu: GLO › PANEL › TEMPO shows it, as GLOBAL 120, or GLOBAL EXT on MIDI clock.
  • Whole numbers look whole: rows that move in whole steps show 2, not 2.00, and their knob clicks stay on whole steps.
  • Fix: a settings save no longer cuts a hole in a Delay's echo.
  • Arming reaches the FM-1: with Live on, arming a device in the editor arms it on the FM-1 too (needs this firmware).
  • The CPU estimate reads the test rig: refitted to the rig's survey of every factory patch, it now reads within 3 points below and 5 above it, where it read up to 20 points low (Spokes 6 66 % → 84 %, rig 84 %). A VOICES row stops at the most voices that stay at 90 % or under.
  • Smaller FM-1 patches (format 51): default values, unchanged input depths and repeated names are left out, and a morph B side stores only what differs from A. The 50 factory, XL and community patches: 527 bytes less each in the first step, then 252,544 → 151,415 bytes in all. Lire + Elvira fits the FM-1 again.
  • The FM-1 knobs check boxes are gone: they did nothing since the FM-1 became a patch player.
  • Two FM-1s on one computer: notes and Start / Stop from an FM-1 the editor is not connected to no longer play anything in the editor.

1.10.1 — 2026-11-08

  • Newer FM-1s: units with the UC25HQ80 flash chip (sold since autumn 2026) can store patches and install updates. Before, they showed NO FLASH ID: NO UPDATES (#739).

1.10.0 — 2026-11-06

A patch with a drone is saved in format 50, which needs this firmware; every other patch keeps the older format.

  • Dual core: the FM-1 plays on both of its processor cores. Poly patches use 24–37 % less of the audio time, with the same sound bit for bit. INFO › PROCESSOR shows 2 CORES.
  • Verona Drum 1: a new factory drum engine after the Vermona DRM1 MKIV (slot 30), with five presets. Its hi-hats cut and ring in either order.
  • Effect memory: a patch can have several Delays, reverbs, choruses, strings and Granulars, as long as they fit in 190 KB. Each Delay has a LENGTH, up to 1.9 s, set in the editor.
  • Drones: a note or a whole row can hold for as long as the pattern plays. Make one on the SEQ page (LFO held + a note's own step, or LFO + FX for a row), or hold a note round the loop in a live take.
  • Mono output: GLO › SYSTEM › OUTPUT sets STEREO, MONO or MONO L (MONO L is for one mono cable into a recorder).
  • Your presets come back: presets you stored before an engine's controls changed (1.7.0 and 1.9.1) show again on today's factory patch, under their own names.
  • New factory patches reach an updated FM-1: each goes into an empty slot, never over one of yours, and the bar says where.
  • Improved on-device controls discoverability: hints for the tempo, arming, layered sounds, drum keys, step record, patterns and songs.
  • Fixes: no dropout after a tempo change; an engine no keys reach says so on SEL instead of arming silently.
  • Store to an FM-1 slot lists all 64 slots with their names, and picks the first empty one.
  • Effect memory in the FM-1 budget, with each Delay's LENGTH row.
  • Drones in the Steps card and the piano roll (L, and Shift+L for a row).
  • Sandbox mode plays a Drum map on the FM-1's black keys.
  • New community patch: Babushka by fairplay, a Benjolin-like Rungler (#663).

1.9.1 — 2026-11-04

  • Even loudness: every factory patch and preset plays at about the same loudness, and none clips.
  • Level row: every engine has one (level, volume or vol). Presets you stored yourself for 11 of these engines stay with the patches you stored them on and don't show on the new factory patches yet; a later update brings them over.
  • Cassia 1: shorter row names (wave, rate, depth, delay, res) to make room for vol.
  • Controls sheet: SEL reads "arm only this", with a new row "ENV then SEL arm several".
  • "Delete with its modules" also deletes nested assemblies, and one Undo brings them back.

1.9.0 — 2026-11-03

The patch format is 49. Older patches still play, and the editor offers an FM-1 on older firmware the update.

  • P-locks: a step can set any row of the device its track plays, such as cutoff or decay, to its own value on that step. To make one, hold the step, ALGO to the device's page and turn a knob.
  • Matrix: a new module with 4 inputs and 4 outputs. Each input-to-output pin runs −1..1. On the FM-1 it shows as a grid, with one page per output.
  • Modulation scaling: a route's depth reaches ±2, and "Play between two values" can use an LFO's full swing.
  • New modules: the Shift register (a Turing Machine and a Rungler in one), Range, and the Comparator.
  • Phase modulation: the Oscillator gets pm2 and pm3 plus an index input. Its pm goes up to 16.
  • LFO: a smooth random wave, and the wide range now goes up to 80 Hz.
  • Module names: a module you name in the editor shows that name on its page header, in capitals, up to 12 characters.
  • Controls sheet: a new row order and new wording. HOME is the way out of a Page button's list. Hint lines use the sheet's words, and PLAY held + PRESET sets the tempo in the settings menu too.
  • NO KEYS REACH THIS DEVICE: SEL shows it on an engine no keys cable reaches, poly or mono, and arms nothing.
  • SEQ page: a white key switches its step when you let go of it, and not if you turned a knob while holding it.
  • P-locks in the Steps grid: right-click a step to add them, and a step with locks gets a dot.
  • Rename any module.
  • Route depth is shown in the parameter's own units ("+2 oct"), and typed values stay exactly as typed, fractions included.
  • The controls strip under the Emu view's copy of the FM-1, showing what the controls do right now.
  • The Emu view stays on the FM-1's page, with no flicker.
  • The ? help card is built from the same table as the FM-1's controls sheet.
  • The editor refuses to arm an engine no keys reach.
  • 8 Lire XL no longer clicks when it opens.

1.8.4 — 2026-11-03

  • The ? help card's "On the FM-1" rows match the FM-1 again: HOME goes to the device's first page, then the patch's home page, and held alone does nothing; PRESET steps the focused device's presets and HOME + PRESET the patches; GLO opens the settings menu in tabs (MIDI, PANEL, SYSTEM, INFO, GUIDE); REC on the SEQ page starts step record while stopped; the piano roll's SELECT moves 8 pitches (SEL held: one). New rows for step record and SEQ held + a black key (mute). The Library's empty-bank text and the GLO and SEL hints in the button editor say the same.

1.8.3 — 2026-11-02

  • The FM-1 works with an iPad as a USB MIDI device and as an audio input (44.1 kHz) (#536, #537). Tested on iPadOS 26 through a USB hub (it need not be plugged into the wall), with a USB-C cable from the hub to the FM-1: MIDI Wrench saw its MIDI port and its MIDI, and Reel recorded from it (68 s without a dropout). Apps that need 48 kHz, such as Voice Memos, do not list it. A USB-C to USB-C cable straight into the iPad does not work. For this the FM-1's USB interfaces come in a new order: audio control, then the audio input, then MIDI (before, MIDI sat between the two, and the iPad showed neither the audio input nor a MIDI port), and the FM-1 asks for full speed USB only. Update mode is unchanged.
  • Step record on the SEQ page (#532), on the piano roll and the drum grid: with the transport stopped, tap REC to start on the first step of the page shown (step 1, or step 17 when steps 17 to 32 are shown), or hold REC and press a white key to start on that step (this works while the transport plays too). The bar says STEP and the step, the cursor's column is lit, and so is REC. Play a note or a chord: it sounds, and letting go of the last key writes it on that step (replacing what was there) and moves on one step. Tap LFO for a rest; press LFO while keys are held to tie the keys still held onto the next step. Hold FX for an accent (velocity 127, else 100). K4 moves the cursor without writing, black key 10 steps back and clears that step, OCT- / OCT+ change the octave, and past the pattern's last step the cursor wraps to step 1 (the page follows it past step 16). It works stopped and while the transport plays. During a live take, REC held + a white key ends the take and starts step record on that step. PLAY in step record starts the transport and goes on as a live take, as on the M-VAVE firmware. REC stops it (HOME and SEQ too). On a drum grid black keys 1 to 8 write their rows. On the SEQ page REC no longer starts the transport while it is stopped: for a live take from a stop, press PLAY then REC (or REC then PLAY). On every other page REC is as before. The editor follows each step as it is written. Before, the FM-1 could only switch steps one row at a time or record live. In the editor's FM-1 tab, the keys held on a drum grid and in step record now sound too.
  • The FM-1's piano roll moves 8 pitches at a time (#546): SELECT shows the next or previous 8 pitches (C3-G3, then G#3-D#4 and so on), and the bar names the pitches shown after the track's name. Hold SEL and turn SELECT to move one pitch at a time. Hold SEL and press any key, white or black, to jump to that key's pitch: this now works in step record too, where it writes nothing (before, it wrote the note out of sight and SEL's release opened the SONG page). The selected row keeps its place on the screen and its black key. Before, SELECT moved the selected row a pitch a click and scrolled only at the edge, so reaching another octave took up to 12 clicks; now it takes 1 or 2. The small marks over and under a step still show notes above or below the pitches shown.
  • The FM-1 sends MIDI clock over USB (#473), so a DAW, a synth or a second FM-1 can play in time with it. It sends 24 clocks a quarter note all the time, at the tempo it plays (the global tempo, or the patch's when TEMPO is PATCH), so the other gear has the tempo before you press PLAY. PLAY's Start and Stop go out as before, and the Start comes together with the first clock of the bar. GLO > MIDI > CLOCK OUT (K4) turns the clock off; it is on as made. With MIDI OUT off, nothing goes out. While MIDI clock comes in and drives the FM-1, it sends none of its own, and half a second after that clock stops it sends its own again. Measured on the test rig against a Mac at 120 and 300 bpm: the time between two clocks was never more than 0.44 ms off (0.24 ms on average), with the transport running or stopped; before, the FM-1 sent no clock. Saving on the FM-1 pauses the clock for about 40 ms, as it pauses the sound.
  • Every module output says its signal's range (#518): hover an output jack or a cable. An LFO gives −1..1 (times depth), an envelope 0..1, a pitch 1 per octave with 0 at middle C, an oscillator ±1 times its level, a gate 0 or 1; an Offset, Attenuverter or Math works it out from its settings.
  • The Scope's screen can be read (#518): one scale for both traces, gridlines labelled with their values, the time per division, and a scale button (auto, ±1, ±4; auto fits the traces and labels the scale it chose). Under the screen each input shows its lowest and highest value, peak to peak, and its source with that output's range. The screen is 96 px tall, 64 before.
  • Comment boxes on the canvas, like Max comments (#518): right-click the empty canvas or use the palette's Add comment. They are moved, resized, selected, copied, deleted and undone like cards, saved in the patch, its link and its .json file (a link without the layout leaves them out), and never sent to the FM-1.
  • The editor no longer follows MIDI clock that comes from an FM-1, so a connected FM-1 sending its clock does not change the editor's tempo (#473). Clock from other gear still drives the editor as before.
  • While the editor follows a connected FM-1, its transport follows the FM-1's own Start and Stop, and the editor no longer starts the FM-1's transport by itself (#549). Before, the editor's copy of the FM-1's panel could read a press differently from the FM-1 and send the result back: after SEL held + a key on the SEQ page (or REC held + a key), the FM-1's next REC started the transport and a live take instead of step record, and REC held + a black key on a device page started the transport while it only arms.
  • With Live on, a change that leaves the FM-1's patch as it is no longer sends the whole patch to the FM-1 again: adding, editing or moving a comment, moving a card, any change to the layout only. The editor compares the patch as the FM-1 would get it with what it sent last.
  • The FM-1 keeps a log of the last 128 USB requests and bus events since it was powered on (#535, #537), so a computer or tablet that fails to set it up can be diagnosed from another: tools/m1_link.py usblog reads it. It only watches; nothing the FM-1 sends over USB changes.
  • The scripted emulator and test-rig checks no longer start a second emulator beside a run, and the tie checks no longer fail now and then on a hit that runs past the end of what they measured (#520, #521, #529).

1.8.2 — 2026-11-01

  • The Multimode is now called Multimode filter, on its card and on the FM-1 (#513). It is the state-variable filter with low, band and high pass outputs, called Filter until 2026-10-22.
  • Searching for a module finds it by what it does and by its old name: "filter" lists the Multimode filter and the Ladder, "high pass", "hp" or "state variable" find the Multimode filter, and "scale" or "glide" find the Attenuverter and the Slew limiter (#513).
  • Library > Presets sends a Cassia 1 preset to the FM-1 whole, all 118 rows (#485). An FM-1 with older firmware is not sent a preset of more than 88 rows: the editor says "Update the FM-1 to store this preset on it". A Cassia 1 preset the FM-1 stored before 1.8.2 loads the 88 rows it has, the rest keep their values, and the status line says how to fix it; Library > Presets marks such a preset "88 of 118 rows".
  • The Delay no longer clicks when its time changes, on the FM-1 and in the browser (#484). 8 Lire's lfo → delay was the loudest case: its Hyper LFO is a square wave, so every edge jumped the echo by up to 350 ms. Now the echo glides to the new time and its pitch bends while it moves (at most an octave down or a fifth up). Turning the Delay's time knob, Perun 4's LFO on the delay time, the morph and a synced Delay's new tempo glide too. Measured on both engines' renders of 8 Lire with both HOLDs up, the Hyper LFO at 5 and 7.3 Hz and lfo → delay at 1.5 (golden kit lire-hyper-delay-1): the largest jump at a time change fell from 0.78 to 0.03 of full scale, the size of the sound's own steps; sharp steps over 0.05 fell from 98 to 12 a second (26 with the LFO off). A time that holds still plays exactly as before. While the time moves, the FM-1's Delay takes about 1.6 % more of its CPU (counted on the CPU model, npm run cpu-costs).
  • 8 Lire no longer clicks when a patch or preset opens with HOLD up, such as Eight Drone and Feedback Howl (#515). The drone used to start at full level on its first sample, and one voice started 3 ms after the others. Now HOLD fades the drone in over 30 ms, and all eight voices start together. Measured on both engines' renders of 8 Lire opened with both HOLDs up: the largest jump in the first 100 ms fell from 0.46 of full scale to 0.03. With the Delay fix above, sharp steps over 0.05 fell to none. HOLD's two smoothing modules add about 1 % to 8 Lire's CPU on the FM-1 (38 % → 39 %, CPU model). Untouched 8 Lire slots in the bank get the new patch at the next start-up.
  • A vibrato costs the oscillators much less: they work out their pitch every 8 samples instead of every sample, with a straight line in between (#461). Io 4's Ensemble Pad keeps its vibrato and plays four notes without dropping a part: before, it dropped one at four and at eight notes in 3 of 3 runs; now four notes average 79 % of the audio block (77 % without the vibrato, 82 % before), with no drop in 3 of 3 runs (test rig, docs/measurements/2026-11-01-rig-io4-vibrato.json). A pitch that holds still sounds exactly as before.
  • Storing a Cassia 1 preset on the FM-1 (ENV held + SAVE, or from the editor) now keeps all 118 of its rows (#485). Before, it kept 88 and loading it left the other 30 (line 2's envelopes, its tuning, two Scale gain rows) as they were. A preset of more than 88 values takes two of the store's slots, which now hold 58 (60 before), so that a power cut while the FM-1 tidies a full store cannot leave it refusing to store presets. Presets you already stored stay as they are. A Cassia 1 preset stored before this release still has 88 values: loading it sets those rows and shows STORED SHORT: SEE EDITOR; store it again to keep all its rows.
  • The FM-1 no longer drops an occasional message from the editor (#486). About 1 message in 500 was lost while the transport ran: on the test rig, 8 of 4,000 TEST_PEAK requests went unanswered (1.8.1, transport running). Any message could be lost this way, such as a parameter change, a focus change, the tempo or a stored preset, and the editor and the FM-1 then disagreed without saying so. After the fix, on the same rig with the transport running: none of 8,000 requests went unanswered, and in a second run none of 20,000 messages was lost (16,000 of them parameter changes). DIAG pages 117 and 118 now count the link's messages in and out.

1.8.1 — 2026-11-01

  • With Live on, turning SELECT or ALGO on the FM-1 no longer sometimes moves the editor one device or page further than the FM-1, which left K1..K4 in the editor on a different device from the FM-1's (#504). The FM-1 tab's copy of the panel stays on the FM-1's page too.

1.8.0 — 2026-11-01

  • Clearer control hints: the SEQ page names OCT for steps 17 and up (#490), shows a held step's knobs and fits SEQ+REC clear again; PRESET on a module says HOME+PRESET changes patches (#450).
  • The FM-1 teaches its controls (#450): after power-on a quick start card shows the knobs (HOME closes it, HOME + SAVE turns it off, GLO > SYSTEM > QUICK START turns it on again), and OCT- + OCT+ pressed together open a controls sheet for the page you are on, with a second tab of what every button does everywhere (ALGO switches tabs, SELECT scrolls, HOME closes; the keys and PLAY keep working). OCT- and OCT+ now act when let go, so pressing both changes nothing.
  • The settings menu's MANUAL tab is now GUIDE: it explains the ideas behind the FM-1 (patch, preset, device, engine, track, pattern, song, arming, the environment, Live, sandbox mode) and leaves the controls to the controls sheet (#450).
  • When a control can't act, the header says why (#450): a patch button with nothing to do in the patch ("EDIT: NOT USED IN PATCH"), PRESET with an empty bank ("BANK EMPTY"), OCT on a SEQ page of 16 steps or fewer ("ALL 16 STEPS SHOWN"), SEL on a Drum map that no keys cable reaches ("NO KEYS REACH THIS DEVICE", #215), and SAVE, REC, SEQ, ENV and SEL in sandbox mode ("SANDBOX: SEQ IN EDITOR"; they still go to the editor). In sandbox mode with MIDI OUT off, the header says "TURN ON MIDI OUT: GLO, K3". ENV in the settings menu now opens the environment, and HOME comes back to the tab you were on.
  • The FM-1 tells the editor which version of Matryoshka it runs. When it is older than the version this site comes with, connecting says both versions and offers Update. From this release the FM-1 identifies itself as FM-1_7 plus two digits each for major, minor and patch (1.8.0 is FM-1_7010800), so versions such as 1.10 fit (#216); the installers still recognise 1.0 to 1.7.
  • Sandbox mode looks like any device page (#325): the header shows the editor's device, page group and pages with their dashes, and the footer turns gold with SANDBOX where the patch name goes, plus the browser's tempo, the octave and the battery. The gold band, the "3/5" line, the page rail and the BROWSER PLAYS line are gone. PLAY held + PRESET now sets the tempo of the patch playing in the browser; before, it changed the muted FM-1 patch's tempo and PLAY's release could start or stop the browser. Until the editor's first page arrives, the knobs change nothing, so they no longer edit the muted FM-1 patch.
  • One tempo for every patch: GLO > PANEL > TEMPO is GLOBAL as made, so changing the patch (PRESET, program change, the editor) keeps the tempo you set with PLAY held + PRESET or on Main's page. The FM-1 remembers it without SAVE, about 5 seconds after the last change once the transport is stopped. Each patch still keeps its own tempo: TEMPO PATCH plays it, as before. Patches made around a tempo, such as <7PH at 124, play at the global tempo unless TEMPO is PATCH.
  • FM-1 & MIDI > Tempo: Global (as made) or Patch, the same setting as the FM-1's and shared with it while connected. While Global, the browser, MIDI clock out and the FM-1 tab play one tempo whatever patch is open, and Main's tempo row is labelled global tempo. Older firmware gets the global tempo as the patch's while Live is on.
  • A/B is back in the editor: Set snapshot A, Set snapshot B and Switch A / B snapshots in Commands, or Alt+B (Option+B on a Mac). A flip keeps the canvas where it is (cards, frames, the view) and takes the other version's name. When only values differ (parameters, attenuverters, bypass, macro ranges, Steps notes) the browser and, with Live on, the FM-1 change them in place, so notes keep sounding; anything else loads the other version whole.
  • A patch opened with Live on now opens on its first instrument on the FM-1 too. Before, the editor kept the last patch's device in focus when the new patch had one with the same internal number (Main always does), so the FM-1 could open the new patch on Main (#496).

1.7.1 — 2026-10-31

  • PRESET on Cassia 1 now sets all 118 card rows. Before, only 88 were set, so line 2's envelopes and tuning kept the previous preset's values (#464).
  • The FM-1 drops a voice when the audio actually glitches: an average load over 90 %, or a late audio block twice within 2 s. Before, it waited for two busy blocks in a row, so a patch could click about once a second without it stepping in (Oracle V's Poly-Mod Bell at five voices: about 80 % on average, every 32nd block up to 101 %; measured on the test rig) (#458).
  • Connect FM-1 works when macOS shows the FM-1 under another name, such as "Felucca". If it still can't find it, the message lists the MIDI ports it sees, and a SysEx block says where to allow it (#187).
  • <7PH no longer shows as over the FM-1's memory in the editor (3,894 of 3,840 bytes before, 3,840 now, as on the FM-1). The drum kits' velocity inputs show as jacks instead of sliders that did nothing (#465).
  • A preset that changes the voice count no longer keeps part of the previous preset's sound (#470).
  • Emulator view: black keys 1 to 8 play a Drum map's rows 1 to 8, as on the FM-1 (#467).
  • Expanding an assembly moves the cards around it out of the way instead of covering them (#206).
  • A firmware package whose first byte happens to be < (about 1 build in 256) is no longer refused as a web page.

1.7.0 — 2026-10-30

1.7 contains the last big changes of the badly-needed redesign of FM1 controls:

  • Turning the preset knob alone now changes engine preset rather than changing the engine.
  • To change the engine, hold HOME and turn the preset knob. Don't sleep on this, there are a fuckton of engines
  • The global settings menu, the info screen, and the manual now live under GLO alongside the midi settings that were already there.
  • HOME on a params page now takes you back to that device's first page. Press it again to go to the home page of the patch.
  • Count-in before recording: GLO > PANEL > COUNT-IN, 1 or 2 bars. Recording always starts on a bar.

1.7 also replaces the placeholder presets for each engine with five well-thought-out patches per engine, many of them based on the factory presets from the instruments they were modeled after.

  • Every preset for every engine was audited for distortion caused by CPU overload as well as clipping. On the rare occasion that the CPU threatens to fuck with your sound, the patch will preemptively decrement polyphony instead, dropping one voice until the patch is loaded again.
  • Knobs feel better. A turn back no longer jumps 5 clicks at once. HOME held + a knob turns in fine steps. A click glides over 23 ms, so levels and cutoffs no longer zipper.
  • Screens draw faster: a page reached by SELECT / ALGO in 103 ms instead of 124.
  • Delay reaches 700 ms on the FM-1, up from 520.
  • Elvira 2's drone and 8 Lire's hold turn in steps of 0.01, not 0.08.
  • Arming on the FM-1 shows in the editor, and the editor draws arming as the cables the keys really travel.
  • PRESET's first turn reaches a real preset instead of loading INIT again.
  • Values are rounded, not cut off: one click from 0 reads 0.01, not 0.00.
  • Every engine has five hand-written presets, named for what they're for: Fat Bass, Vintage Strings, Acid Squelch, Tight Techno, and so on. They replace the rule-made Bright / Dark / Pad set.
  • Four new factory patches: Basic Poly, Drift Poly, Mono Lead and Supersaw Stack. They appear after FACTORY RESET.
  • Nothing in the factory set clips anymore. Every factory patch and preset was played with all its voices and patterns going. The ones that clipped were turned down, so some patches are quieter than before.
  • The heaviest presets were trimmed to fit the FM-1's CPU, after measuring them on a real FM-1 with 1, 4 and 8 notes held:
  • Oracle V's Poly-Mod Bell plays 3 voices.
  • Io 4's Unison Lead has no vibrato.
  • Drift Poly's Slow Pad and Analog Strings play 6 voices.
  • Oscillators with moving pitch (vibrato, glide) cost less.
  • Io 4's Ensemble Pad can still drop a voice at 4 notes.
  • Idle voices no longer all wake in the same block.
  • Cassia 1 reaches its resonance waves. Its rows now match the Casio CZ-1's: named waves, a real "off" for wave 2, and the CZ's four line modes. Presets you stored for Cassia 1 on the FM-1 no longer match it.
  • Factory fixes reach your FM-1. An update now refreshes untouched factory slots whenever the factory patches change, and says FACTORY PATCHES UPDATED. Slots you edited and saved are kept.
  • Loading a preset no longer pushes a patch over the FM-1's size limit. A few long knob names were shortened to make room.
  • The step sequencer assembly is gone: a Steps track, a pattern or the Arpeggiator does its job. Patches that hold one still play.
  • Restore Official Open: an FM-1 set up with M-VAVE's Official Open can go back to it from M-VAVE's own file, and from there to V15.
  • The installer checks which start-up software the FM-1 has and won't send a package it would refuse.
  • A filter's cutoff no longer wraps from 20 kHz to 20 Hz at the top of the knob.
  • A message to the editor is no longer cut off half-way when the computer stops reading the FM-1.
  • A return to stock that was cut off finishes with the package it was writing.

1.6.0 — 2026-10-28

  • On the FM-1, SEL arms what the keys play (#395). SEL on a device page arms that device and disarms the others, so the keys play it; an instrument whose keys come through a track and an Arpeggiator (every factory instrument) is armed with them, and REC records that track. On a device with no keys input, or an Arpeggiator alone, the bar says NOTHING HERE TAKES KEYS and nothing changes. In the editor, arming an instrument works the same way. SEL on an armed device's page disarms it again (the others stay armed; the last one out leaves the keys wired). SEL on an environment row adds that device to the armed ones or takes it out (a layer or a split); REC there no longer arms. With nothing armed the keys are wired: Main's cables decide where they go, as before, and the footer says KEYS WIRED after the patch's name. A patch loads wired. The SEQ page arms the track it shows when it opens and when ALGO picks another. SEL no longer opens the SEQ page (SEQ does), a row's device pages, or an assembly's preset list; a device's presets are still stepped with PRESET or ALGO on its environment row. On the SEQ page the track line's SEQ+REC: CLEAR hint no longer fits next to ARMED.
  • On the FM-1, REC records the same way on every page (#395). With the transport stopped, REC starts it and records; running, REC records; REC again stops recording and the transport goes on. PLAY stops both. What records is every armed Steps track, over the notes already there, and a track armed while REC is on records from then on (ALGO on the SEQ page included). REC never changes the page: it no longer opens the SEQ page, and SEQ is the only way there. With no track armed REC still runs and the bar says REC: NO TRACK ARMED. On a drum grid a black key now always sounds its row and picks it, and while recording it also records the hit; SELECT moves the row silently. On the piano roll, all 27 keys play and record while REC records, and the black keys pick rows otherwise. Gone: REC with nothing armed recording hits from the black keys, REC on the SEQ page while stopped, and REC arming the roll's track itself.
  • On the FM-1's piano roll the black keys pick the rows, not the track (#387). Black keys 1 to 8 are the 8 pitches on screen, black key 1 the bottom one, and they follow the window as SELECT scrolls it. With the transport stopped the row picked sounds, with REC on or off; its black key is lit, as on the drum grid. ALGO picks the track. Before, black key n switched to track n, so in a one-track patch only the first did anything. SEQ held or REC held + a black key still mutes or arms track n, and a live take still plays all 27 keys.
  • 8 Lire XL's TUNE is continuous, as the Lyra-8's knob: each tune row is an Offset into its voice's pitch, ±4 octaves in hundredths of an octave (12 cents), from the voice's own tuning. It stepped in semitones before. The default sound is unchanged (rendered sample for sample); the XL has 151 modules (143) and an estimated 146 % CPU (144 %).
  • Meridian 8 XL's gate inputs take any voltage, as the NOON's: the inputs gate 1..gate 8 power their channel directly, after its mute button, so an offset, a held gate, an LFO or an oscillator there drones the channels that hold a sound (DOT, for one) with no key held. The keys still play the channels as before. The default sound is unchanged (rendered sample for sample); the XL has 180 modules (172) and an estimated 148 % CPU (143 %).
  • Choosing what an assembly's card shows: a switch row's check box no longer covers its name. On rows with named positions (a Selector, such as Io 4's ASSIGN or LEGATO) the name now moves right of the box and gets more of the row, as on a slider's row (#342).
  • Space after clicking Octave down / Octave up starts the transport again. The button no longer keeps the focus after a click, so Space no longer pressed it a second time. Reached from the keyboard, it keeps the focus (#208).
  • Ties on the FM-1's drum-track grids, and ties that reach (#368). On the SEQ page, LFO held + a white key now ties a note on a track that plays a Drum map, as it already did on the piano roll. A Drum map row stays up while its note sounds, so a tie holds a voice that sustains, such as a Lire plate or an Elvira voice. On both grids the tie now reaches: the row's last note before that step is extended to end on it, so one press ties step 1 through step 16 (before, the key only tied the note sounding on the step before). LFO + a step inside a note ends it there, and LFO + its last step makes it one step again (before, a tied step cut the note before it). With no note before the step the bar says NOTHING TO TIE; a tie does not run across the end of the loop. The grid draws a tied note's steps dim and joined, and a white key on a step a tie runs through cuts the tie there and starts a hit. Notes made longer in the editor's piano roll now show their length on the FM-1 too.
  • Held black keys on the FM-1's drum grids (#368). On a drum track's SEQ page a black key now sounds its row for as long as it is held, not as a one-step hit, with REC on or off and the transport running or stopped. With REC on and the transport running it records a note lasting the whole steps it was held (at least one), on the nearest step, the same way a live take records melodic notes. The white keys still place steps while REC records.
  • Wording: cursor entry and step write. The editor's recording with the transport stopped (the keys held together fill the cursor's step) is now called cursor entry, in its tooltips and help. Placing steps with the white keys, on the FM-1 or on a Steps card, is step write.

1.5.1 — 2026-10-27

  • The editor starts about three times faster. It no longer works out, as the page loads, every factory patch, the FM-1 budget of every patch in the Open picker, and the presets of every XL. A factory patch is built when it is first opened. The picker's FM-1 · NN % and SANDBOX chips are worked out after the page is up, while it is idle (all of them at once if the picker is opened first); they read as before. The factory presets of an engine are made when an engine of that structure is first shown. Structure fingerprints and the patch check no longer compare every cable with every other one. The Library's Patches section is drawn when it is shown, and remembers which patches fit the FM-1. Measured in headless Chrome on the built site, empty browser storage: on an M-series Mac, the page was ready (DOMContentLoaded) after 0.33 s (1.22 s before), with 0.56 s of script (1.13 s); with the CPU slowed 4× and a 9 Mbit/s, 70 ms network, after 1.69 s (4.21 s), with 1.03 s of script (2.98 s). With a browser that holds 50 saved patches, a 64-slot bank and 20 library assemblies, mostly in the 1.3 and 1.4 formats, and an XL open: 0.47 s (1.42 s) on the Mac and 1.98 s (4.90 s) slowed. Script time is counted until 4 s after load, so it includes the chips worked out while idle (all but a few of them in the slowed run with stored patches).
  • The browser tab's icon is 12 KB instead of the 841 KB full-size logo.

1.5.0 — 2026-10-27

Figures compare this release with 1.4.2. Unless a line says otherwise, an FM-1 figure is the editor's estimate: modules and patch bytes from its budget, CPU from its CPU model, both run on each version's factory patches.

  • The FM-1 no longer stalls when it is plugged into a computer where no app reads its MIDI. Each message for the editor (a step entered, a knob turned) waited up to 0.2 s for USB room there, as in 1.4.2. Entering steps quickly then froze the screen, the LEDs and the keys for seconds, and the sound cut out. On the test rig, with a build from before the fix (Elvira 2, sequencer running, steps entered by hand), the main loop's longest pass took 7.46 s. Now a message waits at most 0.05 s. Once one has waited that long with nothing read, the next ones are dropped at once, until the computer reads again; the editor syncs when it connects. In the emulator, after 30 steps entered with nothing reading, the SEQ page closes in 140 emulated ms (2,890 before). The final version is tested on the host, in the emulator, and by hand on the test rig.
  • USB MIDI keeps consecutive editor messages in order instead of dropping one that arrives while the one before is still pending. Entering sandbox mode sends LIVE paused before its first page, so the FM-1 mutes and receives that page together.
  • Turning VOICES past the available memory keeps the last playable setting. Cassia 1's fifth voice could exhaust the engine's memory, leaving the row at −1 and the instrument silent. A failed edit now restores the patch, shows NO ROOM and does not send the rejected value to the editor. Reloads pause audio while the engine is rebuilt. Checked with the host panel test; not yet checked on a device.
  • The patch-bytes budget counts the panel buttons' record. A patch whose ARP, FX or LFO button is not a plain gate sends 9 more bytes than the editor counted. So a patch within 9 bytes of the 3,840 limit passed the budget and was then refused by the FM-1. The budget

CHANGELOG.md on GitHub ↗