All releases, newest first.
Entries marked Beta channel only ship on the Beta update
channel before they reach the normal app.
1.2.34 (build 41)2026-09-19
V04-parity selection detail lines.
- Selecting a marker now shows the old exporter's detail format: "✓ Video: …", "✓ Audio: … (— track …)", "~ Suggested audio: … (92% confident) — click to review", or "✗ Audio: none at this marker…". The CONF column stays as V04 had it: suggestion confidence only.
- Beta channel only.
1.2.33 (build 40)2026-09-19
See which master track is active.
- The track card now shows a live status line under the Master track name field: "Active: Music (34 events)", or for a typed partial name the tracks it matches ("print → Printmaster"), or "no track matches — matching by file name". Clicking a track in the list also highlights it.
- Beta channel only.
1.2.32 (build 39)2026-09-19
Type your own master track name.
- The Export tab's track card now has a Master track name field: type any name and press Return — it is remembered across launches (
nprMasterTrack). Partial names work too ("print" finds "Printmaster", never "Blueprint"). - Master-track auto-pick now recognises more names: mstr, master, print, mix (including compounds like printmaster), no longer requires "wav" in the name, and picks the highest-scoring track instead of the first one.
- Tk exporter (
marker_matcher.py) kept in parity. - Beta channel only.
1.2.31 (build 38)2026-09-19
Correction/Cinema masking fix + Export cleanup.
- The active tab is now always the topmost layer. SwiftUI's opacity(0) does not remove a hidden tab's AppKit views from the z-order — a hidden tab could sit over the active one and mask its Finder drags. The active tab is raised above everything (
zIndex), which removes the mask that blocked Correction-tab drops (the Convert-tab cards never had this because they don't share the web stack). Verified with a new -hitProbe QA hook: the hit chain at the drop area is now EggWebView [DROP] ← WebDropTargetView [DROP] ← …. - Export page: Save Debug Info… / Send Debug Info buttons removed — Preferences → Debug & diagnostics → Export TXT is the single debug channel.
- Dev QA hooks added:
-hitProbe / -hitProbeWindow print the AppKit hit-test chain (used to prove no tab masks another). - Beta channel only.
1.2.30 (build 37)2026-09-18
Nuendo Export feedback round 3 (Paul) + drop-capture hardening.
- Exports no longer crash on snapped markers. Markers whose range is a few milliseconds shorter than their WAV previously made ffmpeg abort with "Filtering and streamcopy cannot be used together" (a pointless 1 ms tpad while the video was stream-copied). Tails under 250 ms now simply run past the video; only real tails pad the video, and padding re-encodes the video instead of copying it.
- Changed WAVs no longer export as mute. A manually chosen WAV whose BWF timecode points outside the marker (e.g. a file from another marker) previously triggered a seek past the end of the file, producing silence. Out-of-range seeks now start the file from the beginning, with a log note, in both the single-clip and segmented export paths.
- Audio suggestion window is resizable. It now has a minimum size and can be stretched from the corner; the full file path shows on one line (widen the window, or select and copy).
- Choose output has a New Folder button. The macOS 13+ folder chooser no longer shows one, so the panel now carries its own name field + New Folder button that creates the folder and enters it.
- Drop capture hardening. Hidden web tabs now hide their whole drop container (not just the webview), so an inactive tab can never sit over the active one for Finder drags; duplicate deliveries from more than one capture layer are deduped; and the Correction/Cinema tabs gain a SwiftUI-native drop fallback (the same
.dropDestination mechanism as the Analysis tab) in case AppKit's classic drag registration is bypassed. - Beta channel only.
1.2.29 (build 36)2026-09-18
Web-tab drag & drop: same AppKit drop target as the Convert cards.
- The Correction and Cinema tabs now use the exact pattern that fixed the Convert cards (1.2.24): a plain AppKit
WebDropTargetView owns the WKWebView and its own drag registration, so Finder drops are claimed independently of WebKit's internal hit-testing and SwiftUI re-renders. Previously drops on the Correction tab could vanish when the webview did not claim them. - Beta channel only.
1.2.28 (build 35)2026-09-18
Export tab is beta-only.
- The Nuendo Export tab is hidden in the published (normal) app. It went out too early in 1.2.25–1.2.26 — the exporter is still a work in progress, so it now lives only on the Beta channel (with its WIP banner and the update-channel controls).
- No other behaviour changes.
1.2.27 (build 34)2026-09-18
Nuendo Export beta feedback round 1 + 2 (Paul) + safe beta channel.
- Close Project now closes everything. The parsed result, track list, marker table, ticks and audio matches are cleared and the log emptied — previously the lists stayed populated after closing the project.
- Master audio track selection works. Clicking a track in *Audio track (master source)* re-resolves every marker's WAV from that track's events, exactly like the Python exporter — the AUDIO column updates immediately. New engine data (audio events: track, file, timeline range) makes this instant and local; the new "Auto — name match" row keeps the previous behaviour, and a wav-master track (MSTR/Master/MIX) is auto-picked when the project has one.
- Audio suggestions are computed on demand. Opening a marker's audio cell now actually searches for ranked candidates before saying "No suggestions" (a "Searching for candidate WAVs…" state shows while it runs) — no more always-empty suggestion list.
- Marker table gets more room. The table area is taller and the log is a fixed-height scrolling panel instead of growing without limit.
- Drag & drop is caught at the window level. A visible "Drop WAV files — they'll join the Correction queue" banner confirms the active drop zone while dragging, and a window-level catcher forwards drops that a webview previously swallowed silently (Correction tab). Drop steps now record in the app's debug log.
- Friendlier engine errors: a 413 now reads "upload too large for the server" instead of a raw nginx HTML page.
- Update channels. Preferences → Updates now has a Normal / Beta picker; the updater only reads the selected channel's manifest (
/tools/desktop/beta/latest.json for beta). Beta builds ship with the beta channel preselected (and a BETA badge in the toolbar), so a beta can never be pushed by the normal update stream — this fixes the incident where the beta self-updated into the normal app. Switching back to Normal offers the latest normal build even when it is older than the beta. - Beta auto-updates. On the beta channel the app downloads and installs new betas automatically — no clicks (never while a conversion, analysis or Nuendo export is running; it waits for the next launch instead). Preferences → Updates: "Install beta updates automatically" (on by default in beta builds, off in normal builds).
- WIP banner on the Export tab. A prominent amber banner now reads "BETA — WORK IN PROGRESS. Use at your own risk — always check exported files before delivery." so nobody mistakes beta output for a finished deliverable.
- Auto-install follows the channel. "Install beta updates automatically" is now off (and disabled) while Normal is selected and turns itself on when Beta is selected — the two settings can never contradict each other again.
1.2.26 (build 29)2026-09-17
Usage retry fix.
- A usage report queued while signed out is now replayed under the current session token after signing back in. Previously the stale token captured when the job ran could keep the report pending forever, leaving "N usage pending" in the toolbar until the app was quit.
- Queued reports are bound to the client that accepted the job and are never replayed under a different account.
- Nuendo exports bind usage to the account present when the export was accepted, so a mid-export sign-out is still reported (retried later).
1.2.25 (build 28)2026-09-16
Export logging & metrics.
- Every export run is now logged to the app's diagnostics log: start (file count, normalise, output folder), per-marker success / skip / failure with reasons, and a final summary — visible in Preferences → Debug & diagnostics.
- Successful exports are reported to the server as usage events (
nuendo:export, one per file with the output filename and size), so export activity now shows in the admin Usage and Files tabs.
1.2.24 (build 27)2026-09-16
Drop reliability fix.
- Convert cards no longer intermittently miss drops. Each card now owns a stable AppKit drop target whose registration survives re-renders, where the previous SwiftUI drop destination could be torn down mid-drag when the highlight state changed (the card went gold but nothing queued).
- Card layout stays stable when queue rows appear (a feedback loop could previously inflate a card to full-window height); extra rows scroll inside the card.
1.2.23 (build 26)2026-09-16
Convert drop fix.
- The whole card is now the drop target on the Convert page — dropping anywhere on a card (not just the small dashed area) enqueues files.
- The dashed drop zone fills the card height and its text is centred, so the drop area no longer looks pushed to the bottom of the box.
- Fixed: an inactive embedded page could stay visible over the active tab (WKWebView ignoring the fade) — the Correction page could show through on the Convert tab. Inactive pages are now hidden for real.
- Embedded pages get the same 20px top spacing as the native tabs, so panels sit at a consistent height under the toolbar.
1.2.22 (build 25)2026-09-15
UI consistency across tabs.
- The eggbox logo header is gone from the native Analysis and Convert tabs — every tab now starts with its content directly under the one static toolbar (the toolbar carries the build and connection state).
1.2.21 (build 24)2026-09-15
One static toolbar on every tab.
- The connection state now lives in one static toolbar spot on every tab — "Not connected" / "Connected — client" / "Sign out" — and the build is shown in the toolbar too (app build always, server build once the server advertises it via /health). The embedded pages' own top bars are hidden in the app, so there is exactly one bar and nothing jumps around between tabs. Browser users keep the website's own static top bar.
1.2.20 (build 23)2026-09-15
Runs on macOS 13 (Ventura) and later.
- The minimum system version is now macOS 13 instead of 14, so Ventura Macs can open the app (previous builds showed "You can't use this version of the application with this version of macOS").
1.2.19 (build 22)2026-09-11
Connection reliability fix.
- Fixed: with a saved key, the app could launch showing Connected in the toolbar while the embedded page stayed "Not connected" and refused to process files (the page loads before the Keychain session is restored, and the session push was only attempted once — before the page existed).
- The native session is now pushed into the page on every page load and retried shortly after load, so a slow restore can never leave the page unauthenticated. Re-entering the key is no longer needed.
1.2.18 (build 21)2026-09-10
Reliability & security pass.
- Conversion filenames are always literal — quotes, dollar signs and unusual characters can never be interpreted as shell syntax.
- Stop really stops: conversions and analysis cancel cleanly, never publish partial files, and quitting warns while work is running.
- One stable queue for all jobs — files added mid-run are processed automatically, with Reveal / Retry / Remove on every row.
- M4A to WAV honours its channel contract: mono stays mono, stereo stays stereo, wider sources are downmixed to stereo.
- Sessions are verified with the server before showing Connected, Sign out reaches the server, and usage reports retry automatically.
- Token refresh no longer reloads the open page — selected files and progress survive (Cinema / Correction pages updated too).
- Untrusted pages or frames can no longer change the native session or receive pending file drops.
- Updates verify the new app's identity, version and compatibility before installing, and restore the previous version on failure.
- FFmpeg installation is transactional — a failed download or copy can never remove your working tool.
- Preferences report the real Keychain result, diagnostics rotate and redact, and failed downloads are no longer silent.
- Connection status now lives in the toolbar, with a proper Analysis state indicator.
1.2.17 (build 20)2026-09-08
- Convert usage reporting now includes the source filename, so admin
1.2.16 (build 19)2026-09-07
Debug & diagnostics in Preferences.
- New "Debug & diagnostics" section: continuous activity logging can be switched on from Preferences (off by default) and exported as a TXT from the same place for bug reporting.
- Logs stay on this Mac only — nothing is ever uploaded.
1.2.15 (build 18)2026-09-07
Bigger drops through the instant path.
- Drops are injected one file at a time, so the instant no-click delivery now handles up to 250MB (a whole folder of broadcast WAVs). Only drops beyond 250MB fall back to the file-panel path.
1.2.14 (build 17)2026-09-07
Drops deliver instantly — no click, no waiting.
- Dropped files (and folder contents) are injected straight into the page the moment they land, so the queue populates immediately — no more "drag then press Choose Files". The file-panel click path is now only a fallback for very large drops.
1.2.13 (build 16)2026-09-07
Guaranteed drop delivery.
- On macOS/WebKit versions that refuse the app's synthetic file-input click, dropped files are now injected straight into the page through a native→JS bridge — no click, no file panel, no trusted-gesture requirement. Correction queues them; Cinema validates them (5.1 ZIP or immersive MXF, matching the drop zone). The click path is still tried first with automatic retries.
1.2.12 (build 15)2026-09-04
Drop reliability — everywhere on the page.
- Drops that land on the hidden Convert/Analysis tab areas are now forwarded to the page you are looking at instead of vanishing (the cause of "sometimes it works" — it depended on exactly where you released).
- The page's drop area lights up while a Finder drag is over it, just like in a browser.
- A short settle delay after the drop plus automatic re-clicks (up to 3) if the page hasn't asked for the files yet, so the hand-off click can't be lost to the drag's teardown.
- The Correction page's Files tile is now a large drop card (matches the Convert page) with Choose Files / Choose Folder underneath.
1.2.11 (build 14)2026-09-04
Drag & drop routing fix (hotfix).
- Finder drops are now routed to the tab you are looking at. AppKit delivers drags to the topmost webview (the hidden Cinema tab), which broke Correction-tab drops in 1.2.10 — drops go back to the active tab's page, and Cinema keeps its own drop zones.
- The remembered client key loads off the main thread, so a locked or slow keychain can no longer freeze the app at launch or in Preferences.
1.2.10 (build 13)2026-09-04
Cinema (Dolby DCM) drag & drop.
- Finder drops on the Cinema tab now reach the page's own drop zones: a dropped 5.1 ZIP or IAB MXF is handed to the matching Cinema zone (picked from where the drop landed, falling back to the file type) through the same trusted-click file channel as the Correction tab.
- The Cinema page's drop zones are now real file-input labels, so clicking them opens the picker natively in every browser.
1.2.9 (build 12)2026-09-04
Finder drag & drop — the final fix.
- Dropped files now reach the queue reliably. The hand-off click that activates the page's file input was being posted in the wrong coordinate space (AppKit bottom-up screen coords used directly as top-down global coords) — the click missed the label, so WebKit never asked for the dropped files. Corrected the y-flip and verified the full chain offline in the DragLab experiment app and with real Finder file + folder drags.
1.2.8 (build 11)2026-09-04
Correction drag & drop rewritten; remembered client key.
- Finder drops are now captured by the embedded WKWebView itself (AppKit never routes drags to overlay views on current macOS) and handed to the page through its own file-input channel with a trusted click. The old overlay bridge is gone.
- Only the active tab accepts file drags (the hidden Cinema tab previously stole drops).
- Preferences → Client key: remember your client key securely in the macOS Keychain; the app connects automatically on every launch. Clear removes it and disconnects.
1.2.7 (build 10)2026-09-03
Drop bridge hardening.
- The correction-page drop bridge stays pinned above WebKit's content view (re-raised after every page load) and always forwards mouse/scroll input through to the page.
1.2.6 (build 9)2026-09-03
Correction tab drag & drop — stronger fix.
- The drop bridge is now always the top view above the page and forwards every mouse/scroll event to the webview itself, so AppKit reliably routes Finder file drags to it while clicks, scrolling and gestures behave exactly as before. QA logging available via
-dropBridgeLog YES.
1.2.5 (build 8)2026-09-03
Finder drag & drop fixed on the Correction tab; single-window app.
- The drop bridge above the web pages now becomes the drag target while files are being dragged from Finder (it previously only responded to clicks, so Finder drops never reached the page). Dropped files route through the page's own file input — the same path Choose Files uses.
- File > New Window removed: EggBox is now a single-window app, so two windows can't be left running parallel jobs at once.
1.2.4 (build 7)2026-09-03
TXT reports download instead of opening inside the app.
- Clicking a TXT report on the Correction page opened the text inside the app window with no back button (blob links were allowed to navigate). Download links now always go to the Downloads folder, matching PDFs.
1.2.3 (build 6)2026-09-02
Updater now always quits the old app version.
- The updater previously relied on AppKit termination alone, which could leave the old process running with a stuck "Installing…" sheet after the new version was already swapped into place. It now force-exits within three seconds of spawning the install helper, so the swap and relaunch always complete.
1.2.2 (build 5)2026-09-02
Connection card no longer shows the full client ID; Cinema page matches.
- Native Convert and Analysis tabs now show "Connected — c27f375e" style (first 8 characters) instead of the full client ID, matching the web pages.
1.2.1 (build 4)2026-09-02
Correction tab now opens the renamed /correction page; /analysis is the
- The Correction tab URL updated to match the renamed WAV-compliance page (
eggbox.app/correction). The old /analysis address now hosts the new Audio Analysis webpage, which mirrors the app's Analysis tab.
1.2.0 (build 3)2026-09-02
New Analysis tab, Correction page fixes and automatic updates.
- Check for Updates — the app queries the VPS (
tools/desktop/latest.json) once a day, lights a pill in the tab bar when a newer version is available, and can download the DMG (SHA-256 verified), replace the running app and relaunch it. Also available from Preferences. - Correction page: drag & drop from Finder now works — drops are captured natively and routed through the page's file input (WebKit never delivered Finder file-drags reliably).
- New Analysis tab (4th tab): drop audio files and they are uploaded to the VPS and analysed with the server-side
audio_info workflow — container, streams, codec, sample rate, bit depth, channels, bit rate, duration, metadata, chapters, peak level, RMS, integrated loudness (LUFS), LRA, true peak, max short-term and max momentary. - Analysis is server-side only: no ffprobe/ffmpeg needed on this Mac, the measurement scripts never leave the VPS, and every analysed file is counted server-side (usage events per job) so it can't be faked.
- Measurements use the same stack as the broadcast standards workflows (lupy BS.1770 + scipy poly4 + ffmpeg ebur128 for PCM-readable files; native ffmpeg decode for other containers). Files are never transcoded to get levels — values that can't be measured stay blank. No PASS/FAIL verdicts: reporting only.
- Per-file cards collapse/expand, show a one-line summary, and have Save Report (.txt) and per-file Clear buttons.
- Release Notes window (About → Release Notes) — the bundled CHANGELOG.md is shown in-app and shipped inside the app bundle.
- Analysis page restyled to the same card language as the Convert page (card header + dashed drop area + Choose Files/Folder footer).
- Supported formats: wav, aiff, flac, mp3, m4a, aac, ogg, opus, wma, caf, au, mp2, ac3, w64, amb, m4r.
- WAV Analysis tab renamed to Correction.
- Fixed: FLAC files reported string bit-depth values that the app rejected (models now accept numeric strings); job statuses are matched case-insensitively (server reports
completed in lowercase). - Fixed: metadata tags with non-UTF-8 bytes (e.g. Latin-1 ©) crashed the analysis — the server now decodes ffprobe/ffmpeg output leniently.
- Failed analyses show the full error when the card is expanded, count in the status line, and can be re-run with a per-card Retry button.
1.1.0 (build 2)2026-09-02
Convert page rework, single-key sign-in and webview fixes.
- Convert page now a 2×2 grid of four equal cards: - VIDEO (codec picker) - M4A → WAV - Normalize to LUFS (WAV only; targets −14 / −23 / −24 LUFS, always a −1 dBTP limiter, 48 kHz 24-bit PCM output) - Video Normalize −14 LKFS (audio normalised, video passthrough)
- Per-card Clear button removes that card's queued files.
- One client key signs in to all three tabs: entering the key on the Convert page connects the WAV Analysis and Cinema tabs, and vice-versa. Fixed a race where a stale web session could log the app out right after connecting.
- WAV Analysis Choose Files / Choose Folder now open the native macOS file panels (WKWebView needs an explicit open-panel handler).
- Cinema page PDF reports now download to the Downloads folder instead of taking over the window — the page stays where it was.
- FFmpeg is treated as part of the install: when missing, the app prompts with the install sheet on launch, plus banners on the Convert page and in Preferences. Download is SHA-256 verified.
- EggBox logo shown top-left on the Convert page, matching the web tabs.
1.0.0 (build 1)2026-09-01
First packaged build.
- Tabs: WAV Analysis and Cinema embed the live eggbox.app pages; Convert runs ffmpeg locally with scripts fetched fresh from the VPS on connect.
- Preferences: ffmpeg path override + export location (same-as-source or chosen folder). About window shows version.
- Install FFmpeg sheet downloads the EggBox-hosted arm64 build with SHA-256 verification.
- Usage reporting: every successful conversion records
POST /v1/usage/convert.