Repository navigation
v0.4.0
0.4.0 (2026-10-01)
Features
- analysis: trimming never removes audio; shorter segues (c8fa45b)
- app: ask before analysing tracks of an older version (08212f1)
- app: look for missing files again (4de2bb4)
- app: start the remote control server (0c6f587)
- control: a control-surface crate that reads MIDI messages (c88dae5)
- control: a MIDI service with hot-plug, feedback and learn (c87a68e)
- control: LED feedback for bound buttons (76418d6)
- control: MIDI faders move volumes with soft takeover (5a4fb66)
- control: route MIDI buttons to player commands (0696431)
- control: which control a message offers to MIDI learn (bd5f32c)
- MIDI control surfaces (24bf6a0)
- missing files explained and recovered, loaded waveforms first, stopped players show their next (47dba88)
- model: insert and assign tracks already in the library (a2e0728)
- model: MIDI configuration and a shared fader curve (5eda331)
- model: OSC remote configuration and source allow-lists (775725d)
- model: record each player's history (53f7414)
- model: remote control configuration (f2c2b93)
- model: repeat an entry until the operator moves on; stop after it (ff56fbf)
- model: repeat and stop-after flags on playlist entries (a0f9659)
- model: restart the current entry and go back to the previous one (04d91d8)
- model: say which transport actions are available (f1a35ba)
- model: tuning.missing_recheck_ms (6ef70b4)
- per-track repeat and stop after (75003af)
- remote: crate with the control trait and the API's JSON contract (03b02aa)
- remote: edit playlists, cart pages and markers (d8a774d)
- remote: editing routes and Settings > Remote (3338789)
- remote: event stream over SSE (be49a10)
- remote: HTTP API to read and operate the player (ee97a9e)
- remote: HTTP routes to read and operate players and carts (0085f00)
- remote: live events over SSE and OSC control (4c2a5ed)
- remote: OSC addresses, values and subscriptions (fb0e6bb)
- remote: OSC server with subscriptions (e8f1bae)
- remote: reduce a waveform to n buckets, and send it without a JSON tree (68dd94a)
- remote: resource events from snapshot diffs (ec53675)
- remote: server thread that follows the configuration (9f1bffc)
- remote: token, origin and host checks with CORS and limits (5ed95c2)
- remote: turn operations into checked model commands (88ae81f)
- restart and previous with button availability (8704ec2)
- store: drop config fields this version does not use (953dd24)
- ui: a stopped player shows the track Play will start (756a3bc)
- ui: a view mapping for waveform zoom (417a2da)
- ui: drag on the waveform to seek on release; dim trimmed audio (a98031a)
- ui: elapsed / total under the waveform (a543b08)
- ui: give the meter muted zone colours (e6dde85)
- ui: interface polish from operator feedback (bc576b2)
- ui: make slate the default waveform colour (e5803f7)
- ui: meter and fader column with a dB scale (d9d16f0)
- ui: move the meter and fader into a column on the right (bcf9d3e)
- ui: own icons for missing files and outdated analyses (bf9fe46)
- ui: proportional playlist columns (81739e5)
- ui: proportional playlist columns and follow the current track (075da68)
- ui: repeat and stop-after in the track table (e726520)
- ui: restart and previous buttons, dimmed when unavailable (9d9d855)
- ui: restart and previous shortcuts, ignored when unavailable (12e9a5d)
- ui: say why a track is unavailable (c6db4c1)
- ui: Settings > MIDI and MIDI control at start-up (9acba92)
- ui: Settings > Remote (ab35d3c)
- ui: show the version and an About window (34fc916)
- ui: the playlist follows the current track (8f39032)
- ui: waveform drag, zoom and trimmed regions (a038b48)
- ui: zoom and pan the waveform with the wheel (7de230a)
Bug Fixes
- analysis: never trim audio, and start segues relative to the track (1f570af)
- analysis: tracks on a player are analysed ahead of the library (ecddf8e)
- app: analyse again tracks marked by an older analysis version (c70d5e5)
- app: look for missing files on a probe thread (68b1326)
- app: review follow-ups for the file probe and promotion (8b297ce)
- app: tracks with a missing file do not count as outdated (1cc4ee8)
- backends: label unnamed devices and fall back to the address (023aa4c)
- backends: tell same-named output devices apart (d11f551)
- control: keep MIDI faders in control and leave other ports alone (5d5cb4d)
- decode: drop the Opus pre-skip in Ogg and Matroska (1cec52a)
- engine: keep repeat passes and commands in step at a boundary (05f2e3e)
- model: a position restored at the end comes back at the cue-in (998e66e)
- model: previous skips missing and unreadable files (f817624)
- remote: edit a cart page and a cart as one atomic command (e31b07b)
- remote: idempotent on/off commands and no wildcard origin without a token (7d10096)
- remote: JSON 405, bind retry, case-insensitive bearer, cart times like the UI (5522c1e)
- remote: log a busy port once, not on every retry (97e043c)
- remote: one in-flight request limit for the whole server (5006bd2)
- remote: OSC clears the addresses that disappear (56cd347)
- remote: refuse deeply nested OSC packets and bound the cost of floods (f435371)
- remote: review follow-ups, long recordings, meters and screenshot (0a8703a)
- ui: a discreet alignment mark on the meter (4d428d9)
- ui: a stopped player's waveform shows times without seeking (32f51fd)
- ui: count table scrolls and drags, and keep resizes out of widths (2d26486)
- ui: draw a labelled dB scale with lines across both meter bars (6adbd0c)
- ui: draw SINGLE and CONT as one segmented control (4501cbe)
- ui: each meter type shows only the settings its standard defines (de1be28)
- ui: fit the countdown between the grid and the meter (6b6547b)
- ui: keep countdowns and times at a fixed width (2895ec7)
- ui: keep waveform drags and zoom from acting on the wrong track (f61407c)
- ui: redraw the stop-after-current icon as play then stop (95c146a)
- ui: Settings > Remote applies a pending edit when another section opens (09e5ae3)
- ui: Settings > Remote buttons look like the other sections' (fa77283)
- ui: Settings > Remote keeps what is in use until a value is valid (318ee59)
Performance
- decode: decode Opus with a real FFT, not an O(n²) DFT (d6f0005)
Documentation
- a 1920x1080 main screenshot made in Xvfb (df150a3)
- CLAUDE.md lists the vendored Opus decoder (4f5deb0)
- describe MIDI control surfaces (66d32de)
- describe peak trimming and relative segues (c479c20)
- describe per-track repeat and stop after (683ec74)
- describe proportional columns and follow current (00c9afe)
- describe remote events and OSC (a94f3d2)
- describe restart, previous and button availability (a0df87e)
- describe the interface polish (eeb3fec)
- describe the meter column (ad9f81a)
- describe the remote control API (8d2e79b)
- describe waveform drag, zoom and trimmed regions (ad58e3e)
- docs: design and plan the operator feedback work (23c0ef6)
- docs: design the operator feedback work (cfcd2f6)
- docs: plan MIDI control (b6c1e6a)
- docs: plan per-entry repeat and stop (6b06495)
- docs: plan proportional columns and follow current (a339c2f)
- docs: plan restart, previous and button availability (b4eecd6)
- docs: plan the marker tuning (02a0f7e)
- docs: plan the operator feedback work (7e348a9)
- docs: plan the waveform drag and zoom (5638059)
- plan 4 adds long recordings and the re-analysis notice (660d994)
- plan 4, remote follow-ups, restore at the end, meter and screenshot (4a29405)
- plan the missing-file tooltip and recheck (ed35c47)
- plan: remote control plan 1, HTTP foundation (888495c)
- plan: remote control plan 2, events and OSC (5de4d98)
- plan: remote control plan 3, editing and Settings (5e8db60)
- remote editing, Settings > Remote, and a main screen on air (27eb705)
- spec: remote control over HTTP and OSC (e3231ce)
Unsigned installers
- the Windows installer (SmartScreen warns about an unknown publisher)
- the macOS app (not signed or notarised: macOS asks before its first start)
How to open them: Getting started.