Commit Graph
169 Commits
Author SHA1 Message Date
Brandon ThomasandClaude Opus 5.5 69570e5b54 Cap session bundles at 1 GiB: 4 GiB is all of wasm32's address space
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:16:15 -04:00
natocool2andClaude Opus 5.5 6964c50d00 Web: open, import, save and export files in the browser (fixes #63, fixes #64)
The web build could not reach any file: File > Open Session…, Import > Audio… and Import > MIDI…
showed a text box for a path the browser can't read, and every save or export failed with
«operation not supported on this platform», so work was lost on close.

On the web now:
- Open Session…, Import Audio… and Import MIDI… show the browser's file picker; files dropped on
  the page open (sessions) or import (audio, MIDI) by extension. Files travel as bytes; imports are
  one undo step each, like the import commands.
- A session is saved as ONE file, a bundle `<name>.scraftz`: a zip (stored entries) holding the
  `.scraft` and its `Audio Files/` as 32-bit float WAV — the same layout as a session folder, since
  the browser has no folders. `io::open_session_bytes` opens a bundle or a bare `.scraft` (its audio
  is then reported missing). Bundles are hostile input: entry count and size are capped, and
  declared sizes are never read past.
- Every single-file output (save, Save As Template, bounce, MIDI/score/text export, track presets)
  goes through `io::write_file`: a file natively, a download in the browser via a delivery hook
  (`io::set_deliver`) that only the web app installs.
- In the browser Save As asks for the bundle's name (`<name>.scraftz`) instead of a folder path.
Native builds keep writing files and session folders as before. Folder outputs (stems, clip
exports) are still not available on the web.

Pairs with #157 (Save on a never-saved session opens Save As), which the browser needs too: the
web app always starts on the unsaved demo.

New dependency: `zip` (MIT), default features off (stored entries only).

Checked: engine tests for the bundle round trip (every sample identical), same-named sources,
bare sessions and hostile bundles; `cargo xtask ci`. In Chromium on the packaged web build:
⌘⇧I picks and imports a WAV; WAV, MP3, FLAC, OGG, M4A, AIFF and MIDI import by drop; Save As →
`Midnight Groove.scraftz` downloads with the imported audio inside; that bundle reopens in a fresh
page with all tracks and no missing media, and saves again with the same content.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-10 19:17:07 +01:00
Brandon ThomasandClaude Opus 5.5 330a698397 Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#155)
* Progress docs to the craftrules standard; full re-measure against Pro Tools 2026.4.1

Stage: alpha. Menu breadth 482/512 (94.1%, measured), feature breadth ~70%,
ready for real work ~40%; ~350-570 agent-hours to beta, ~950-1,450 to full parity,
calibrated on this repo's PR history.

- ROADMAP.md rewritten: stage banner, two numbers, dimension/feature/language tables
- docs/target-app-parity.md: authoritative assessment (area table moved from ROADMAP)
- docs/gaps.md: 22 ranked gaps with evidence and estimates
- docs/roadmap.md: milestones, current focus, beta plan
- docs/ui-, file-format-, hardware-, plugin-, localization-parity.md: new checklists
- docs/parity.md -> docs/parity-checklist.md (generated by cargo xtask parity)
- architecture.md: video, vst3-host, au-host crates; device I/O limits

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Stage: pre-alpha under the core-workflow gate

Add the alpha gate to docs/roadmap.md: interface recording at a chosen buffer
size, MIDI recording, and session interchange with Pro Tools fail, so the stage
moves from alpha to pre-alpha (~5 points and ~110-180 agent-hours to alpha).
Mark the alpha blockers in docs/gaps.md; update ROADMAP.md, target-app-parity.md
and README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Add mainstream-practitioner and essentials-user readiness numbers

Mainstream practitioner ~36% (weekly-area depth 50.6% x 0.90 interaction x 0.92
stability x 0.85 file exchange) and essentials user ~57% (core-feature depth
72.4% x 0.90 launch/stability x 0.90 discoverability x 0.97 files), with written
weights, discounts and GitHub user evidence. Full ready-for-real-work checked
against its written dimension weights (40.6%); unchanged at ~40%, stage unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Readiness by audience: hours to ~95% for full, mainstream and essentials

Full ~40% / 950-1,450 h, mainstream ~36% / 380-600 h, essentials ~57% / 110-200 h,
calibrated on this repo's PR history. The full number is already an additive
weighted sum over the written dimension table; method unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 14:08:49 -04:00
Brandon Thomas 3bc2d92b4e Merge pull request #122 from vbasky/fix/90-clip-export-names
Give same-named clip exports their own files.
2026-10-10 04:03:53 -04:00
Brandon Thomas e5b5f9907f Merge remote-tracking branch 'origin/main' into HEAD 2026-10-10 04:01:49 -04:00
Brandon Thomas 0d3228ef9c Merge pull request #121 from vbasky/fix/94-cut-all-automation
Put Cut All Automation on the clipboard.
2026-10-10 04:01:35 -04:00
Brandon ThomasandClaude Opus 5.5 f9d0d26e5b Merge origin/main into fix/94-cut-all-automation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:59:53 -04:00
Brandon Thomas f68f737b3d Merge pull request #120 from vbasky/fix/93-snap-neighbours
Snap selected clips to their neighbours instead of past them.
2026-10-10 03:59:24 -04:00
Brandon Thomas dba0bea03d Merge remote-tracking branch 'origin/main' into HEAD 2026-10-10 03:56:37 -04:00
Brandon Thomas e77503a815 Merge pull request #119 from vbasky/fix/97-menu-dialogs
Open New Tracks and Bounce only from the menu.
2026-10-10 03:56:32 -04:00
Brandon ThomasandClaude Opus 5.5 3a4f18647f Merge origin/main into fix/97-menu-dialogs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 03:53:21 -04:00
Brandon Thomas af0174942a Merge pull request #118 from vbasky/fix/102-mix-view-aliases
Allocate Mix Window View menu paths once.
2026-10-10 03:53:03 -04:00
Brandon Thomas dc2ffda4d6 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-10 03:52:01 -04:00
Brandon Thomas 9001c76b56 Merge pull request #117 from vbasky/fix/99-tempo-stretch
Send Tempo Operations stretch as a factor.
2026-10-10 03:51:57 -04:00
Brandon Thomas 3364f7ca30 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-10 03:50:45 -04:00
Brandon Thomas f6deacbf9a Merge pull request #116 from vbasky/fix/100-io-setup
Point I/O Setup rename and delete at setup.io.
2026-10-10 03:50:39 -04:00
Brandon Thomas d034c8a17b Merge remote-tracking branch 'origin/main' into HEAD 2026-10-10 03:47:29 -04:00
Brandon Thomas d03eba8648 Merge pull request #85 from coygeek/fix/live-system-theme-69
fix(ui): follow live system appearance changes
2026-10-10 03:17:29 -04:00
Brandon Thomas 1fa02e5499 Merge pull request #110 from reoniazx/fix/new-session-stops-playback
Stop playback when replacing the session
2026-10-10 03:17:22 -04:00
Brandon Thomas 5033eb8408 Merge pull request #113 from reoniazx/fix/midi-editor-panel-height
Keep the MIDI editor dock at its resized height
2026-10-10 03:17:15 -04:00
Brandon Thomas c4c48d8527 Merge pull request #105 from grovebit/clip-gain-nudge-windows-linux
Nudge clip gain with Ctrl+Shift+Up/Down on Windows and Linux too
2026-10-10 03:17:09 -04:00
Vikram Bhaskaran 9ef16e1e6c Put Cut All Automation on the clipboard.
The command cleared every automation lane in the selection and left the clipboard empty, so the cut could not be pasted. It now uses the same copy-and-clear path as Cut Pan Automation.
2026-10-10 17:40:09 +11:00
Vikram Bhaskaran 30347ee42f Open New Tracks and Bounce only from the menu.
engine.execute and app.run of ui.new_tracks_dialog and ui.bounce_dialog were opening modal dialogs, so a script could not create tracks or bounce without a window. Those ids now return an error unless the menu invokes them.
2026-10-10 17:39:46 +11:00
Vikram Bhaskaran d07624da1f Give same-named clip exports their own files.
Export Clips as Files wrote every clip to {name}.wav, so the second clip replaced the first. A name that is already in the destination now gets a -2, -3, … suffix.
2026-10-10 17:38:53 +11:00
Vikram Bhaskaran 82340cee5c Snap selected clips to their neighbours instead of past them.
Snap to Next and Snap to Previous ignored other selected clips when looking for a destination, so a multi-clip selection piled onto the same later clip or left the gap between the selected clips in place.
2026-10-10 17:38:53 +11:00
Vikram Bhaskaran 3b9d5b9423 Allocate Mix Window View menu paths once.
The menu bar rebuilt and leaked a fresh alias string for every mix-view section on each redraw. Those fifteen paths are now created the first time the menu catalog is asked for them.
2026-10-10 17:38:53 +11:00
Vikram Bhaskaran be859f6cc5 Send Tempo Operations stretch as a factor.
event.tempo_stretch accepts factor or length, and the Apply button was sending end_bpm, which the command ignored. A lower end tempo lengthens the selection, so the factor is the start BPM divided by the end BPM.
2026-10-10 17:38:52 +11:00
Vikram Bhaskaran b92370d32f Point I/O Setup rename and delete at setup.io.
The bus row called mix.bus_rename and mix.bus_delete, which are not commands, so both buttons failed. setup.io already renames and deletes a bus by name.
2026-10-10 17:38:52 +11:00
reoniazx 94e13543ec Keep the MIDI editor dock at its resized height 2026-10-10 13:20:32 +08:00
reoniazx 0734281104 Stop playback when replacing the session 2026-10-10 12:44:01 +08:00
grovebit d3348bcbbc Nudge clip gain with Ctrl+Shift+Up/Down on Windows and Linux too
Ctrl+Shift+Up/Down (#76) only worked on macOS. The registry's Ctrl there
is the Mac Control key, which has no key of its own on Windows and Linux
(#20), so the keys did nothing there, while the Shortcuts window and the
command palette still showed Ctrl+Shift+Up.

Pro Tools for Windows puts these on the Start key, but egui does not
report that key off macOS, and Windows and GNOME use Win/Super+Shift+
Up/Down to resize and move windows. So off macOS the nudge is
Ctrl+Shift+Up/Down: the same keys as on the Mac and what the labels
already say. No SoundCraft shortcut uses them there; Ctrl+Up/Down without
Shift still extends the selection.
2026-10-10 02:34:26 +01:00
coygeek 1f5bc965fe fix(ui): follow live system appearance
Resolve System appearance from egui on every frame and fall back to Dark when the integration cannot report a theme. Keep receiving OS changes during manual modes and apply the selected palette to both widget style branches and the current root UI.

Remove the cached detector and its unused dependency. Cover startup, live transitions, manual overrides, saved System preferences, and user colors with an application-frame regression. Add reproducible offscreen system-theme inputs and document the fallback.
2026-10-09 18:28:07 -07:00
Brandon ThomasandClaude Opus 5.5 522e59f8f5 Bump version to 0.4.0 (from 0.3.0) for release; refresh contributors
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.4.0
2026-10-09 21:02:26 -04:00
Brandon Thomas caa4872df2 Merge pull request #76 from grovebit/clip-gain
Change clip gain with Ctrl+Shift+Up/Down and a fader on the clip
2026-10-09 20:52:40 -04:00
Brandon ThomasandClaude Opus 5.5 ff2bd2d3f8 Clip gain fader popup: use the current theme tokens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:50:08 -04:00
Brandon Thomas 53e1d3c624 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-09 20:49:56 -04:00
Brandon Thomas ac2435e18e Merge pull request #54 from vbasky/feature/session-audio-health
Report session audio health without changing the session
2026-10-09 20:49:44 -04:00
Brandon ThomasandClaude Opus 5.5 50f885e16b Merge origin/main into feature/session-audio-health
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:48:05 -04:00
Brandon Thomas 7c8d339a8f Merge pull request #66 from MarekSpodBiedry/issue-62
Show Ctrl instead of Cmd in shortcut text off macOS (#62)
2026-10-09 20:46:12 -04:00
Brandon ThomasandClaude Opus 5.5 4216d4f1be Merge origin/main into issue-62
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:41:26 -04:00
Brandon Thomas 504b293814 Merge pull request #65 from salignatmoandal/feat/inspect-source-loaded
inspect: report `sources[].loaded` for agents
2026-10-09 20:41:00 -04:00
Brandon ThomasandClaude Opus 5.5 e2bfdd5b73 Merge origin/main into feat/inspect-source-loaded
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:37:45 -04:00
Brandon Thomas d7fc5dc383 Merge pull request #61 from salignatmoandal/fix/import-audio-new-tracks
Honor `file.import_audio new_tracks` (#60)
2026-10-09 20:37:13 -04:00
Brandon ThomasandClaude Opus 5.5 66a682fba1 Merge origin/main into fix/import-audio-new-tracks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:35:14 -04:00
Brandon Thomas e172fef323 Merge pull request #53 from MarekSpodBiedry/issue-47
convert and bounce: refuse output extensions the encoder cannot write instead of saving WAV data (#47)
2026-10-09 20:34:53 -04:00
Brandon ThomasandClaude Opus 5.5 45e32b9781 Merge origin/main into issue-47
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:32:52 -04:00
Brandon Thomas eb340fcc4a Merge pull request #58 from MarekSpodBiedry/issue-57
Warn about missing media when opening a session (#57)
2026-10-09 20:32:32 -04:00
Brandon ThomasandClaude Opus 5.5 3a3c447904 Merge origin/main into issue-57
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:30:26 -04:00
Brandon Thomas 7e966a3d54 Merge pull request #52 from MarekSpodBiedry/issue-50
CLI: run --cmd and app reject malformed JSON instead of using empty params (#50)
2026-10-09 20:30:04 -04:00
Brandon ThomasandClaude Opus 5.5 7f258b28a7 Merge origin/main into issue-50
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 20:26:37 -04:00