mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-14 14:26:46 -04:00
UI.9: reconcile upstream before shared UI landing
This commit is contained in:
commit
5589d97257
15 files changed
+1037
-73
No files matched your search
@@ -6,7 +6,7 @@ Standards and learnings shared across the crafting apps live in `../../craftrule
|
||||
|
||||
## Start every session here
|
||||
1. Read `plan/STATUS.md` (current milestone, next task) and `plan/execution-plan.md`. `plan/` is gitignored (local only). Behaviour reference: `plan/protools/` (observed menu tree `menus-clean.txt` and screenshots; never committed).
|
||||
2. Read `ROADMAP.md` (committed) for status, milestones and the parity estimate.
|
||||
2. Read `ROADMAP.md` (committed) for stage, status and the parity numbers; pick work from `docs/gaps.md`. The progress docs follow craftrules `standards/progress-docs.md`: `docs/target-app-parity.md` (assessment), `docs/gaps.md`, `docs/roadmap.md`, `docs/ui-parity.md`, `docs/file-format-parity.md`, `docs/hardware-parity.md`, `docs/plugin-parity.md`, `docs/localization-parity.md`; `docs/parity-checklist.md` is generated. Update their timestamps and revision history when you change them.
|
||||
3. Work autonomously; don't stop to ask unless a decision is genuinely the user's.
|
||||
|
||||
## ⚠️ Assets: the absolute rule
|
||||
@@ -51,7 +51,7 @@ Nothing below L6 depends on egui/eframe/winit/rfd. The UI is thin: panels read e
|
||||
## Everything is a command
|
||||
User-visible behaviour = a command in `crates/engine/src/cmd/*` (id, label, menu path, shortcut, params doc, `enabled`, `run`) + tests. UI-only commands (windows, dialogs) live in `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`). Menus, shortcuts, the CLI, the control channel and MCP all dispatch the same ids. Programmatic calls never open dialogs; only menu-style invocation (`ui.menu.invoke`) does. New commands go in a new module with its own `specs()`, registered by one line in `cmd/mod.rs`.
|
||||
|
||||
Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the incumbent's menu leaves (names only). `cargo xtask parity` writes `docs/parity.md`; a test enforces a floor that only rises.
|
||||
Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the incumbent's menu leaves (names only). `cargo xtask parity` writes `docs/parity-checklist.md` (generated; the hand-written assessment is `docs/target-app-parity.md`); a test enforces a floor that only rises.
|
||||
|
||||
## Running and looking at the app
|
||||
- `cargo run --release -p soundcraft -- --demo --control 0` (demo session + control channel on a free port; the port is printed).
|
||||
@@ -69,7 +69,7 @@ Parity is measured, not guessed: `crates/engine/catalog/menus.txt` lists the inc
|
||||
Push to the `release` branch to build signed installers for macOS (universal DMG), Windows (x64/x86 MSI + zip), Linux (AppImage, deb, rpm, tar.gz, Flatpak manifest), FreeBSD and Web (wasm zip). Version: `cargo xtask version [set X.Y.Z]`. See `docs/release-playbook.md` and craftrules `release/playbook.md`.
|
||||
|
||||
## Roadmap
|
||||
`ROADMAP.md` (committed) tracks status, milestones and estimates. Update it whenever a milestone lands.
|
||||
`ROADMAP.md` (committed) is the one-page summary (stage, numbers, dimensions, languages, progress log); milestones live in `docs/roadmap.md`. Update both whenever a milestone lands, and close or shrink the matching `docs/gaps.md` entry.
|
||||
|
||||
## Contributor credits (About window)
|
||||
|
||||
|
||||
@@ -237,10 +237,15 @@ and layering checks and the WebAssembly build.
|
||||
|
||||
## Status and roadmap
|
||||
|
||||
SoundCraft is **pre-alpha, and close to its first alpha**: it covers 94 % of the incumbent's menu
|
||||
items and roughly two thirds of its features in depth. The core works and is fun to use, and plenty is still missing. The
|
||||
honest status, what's next and our effort estimates are in [`ROADMAP.md`](ROADMAP.md); the
|
||||
menu-by-menu comparison is in [`docs/parity.md`](docs/parity.md). Bug reports and wish lists are
|
||||
SoundCraft is **pre-alpha**: it covers 94 % of the incumbent's menu items (measured), about 70 % of
|
||||
its features by presence, and is roughly 40 % of the way to replacing it for real work: record,
|
||||
edit, mix and bounce work end to end, but choosing an audio interface and buffer size,
|
||||
recording MIDI from a controller and session interchange (AAF/OMF) are still missing, and those
|
||||
are the alpha checklist. Translations are missing too. The status, the stage and our effort
|
||||
estimates are in [`ROADMAP.md`](ROADMAP.md); the full assessment is in
|
||||
[`docs/target-app-parity.md`](docs/target-app-parity.md), the ranked list of what's missing in
|
||||
[`docs/gaps.md`](docs/gaps.md), and the menu-by-menu comparison in
|
||||
[`docs/parity-checklist.md`](docs/parity-checklist.md). Bug reports and wish lists are
|
||||
very welcome, in the issues or on Discord.
|
||||
|
||||
## Downloads
|
||||
|
||||
+128
-61
@@ -1,54 +1,114 @@
|
||||
# SoundCraft roadmap
|
||||
|
||||
**Stage: pre-alpha** · next: alpha, ~5% and ~110–180 h away (the alpha gate's three failing workflows)
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (readiness by audience with hours to ~95 %) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
SoundCraft is a clean-room, pure-Rust digital audio workstation that aims at full parity with
|
||||
Avid Pro Tools, and then beyond it: faster, open, scriptable and agent-controllable. This file is
|
||||
the honest status: what works today, what is missing, and how far we are.
|
||||
Avid Pro Tools, and then beyond it: faster, open, scriptable and agent-controllable. This page is
|
||||
the one-page summary; the detail is in [`docs/target-app-parity.md`](docs/target-app-parity.md)
|
||||
(assessment), [`docs/gaps.md`](docs/gaps.md) (ranked work list), [`docs/roadmap.md`](docs/roadmap.md)
|
||||
(milestones and beta plan) and [`docs/parity-checklist.md`](docs/parity-checklist.md) (generated
|
||||
menu checklist).
|
||||
|
||||
## Where we are (2026-10-07)
|
||||
## Headline numbers
|
||||
|
||||
| Measure | Value | How |
|
||||
| Number | Value | Kind |
|
||||
|---|---|---|
|
||||
| Menu-catalog parity (engine + UI) | **482 / 512 menu items (94 %)**; engine alone 397 / 512, see [`docs/parity.md`](docs/parity.md) | `cargo xtask parity` compares the incumbent's 512 menu leaves (names observed black-box) with our command registry. Most of what is left is Avid's online services (sign-in, cloud projects, collaboration, Splice, Learn), Dolby Atmos-specific items, HEAT and ARA |
|
||||
| Estimated overall feature parity | **~65 %** | judgement across the areas below, weighted by how much working engineers rely on them. Menu items are only the surface; depth (editing feel, plugin catalogue, MIDI and score editing, video) is where the gap is |
|
||||
| Distance to an **alpha** | **~85 % there, ~12–18 wall-clock hours** of Claude Opus 5.5 work | see [Alpha](#alpha) below |
|
||||
| Distance to **100 % parity** | **~110–150 wall-clock hours** of Claude Opus 5.5 work with a single agent; roughly 40–55 hours with 3–4 agents in parallel (the last three features in this session were built in parallel this way) | sum of the per-area estimates below |
|
||||
| Menu breadth | **482 / 512 Pro Tools menu leaves (94.1 %)**; engine alone 397 / 512 | measured (`cargo xtask parity` + UI-layer aliases) |
|
||||
| Feature breadth | **~70 %** | estimated (menus plus plugins, hardware, formats, immersive, cloud) |
|
||||
| **Ready for real work** | **~40 %** | estimated, weighted by dimension |
|
||||
| Mainstream practitioner (tracking/mixing engineer) | **~36 %** | estimated: 50.6 % weekly-area depth × 0.90 interaction × 0.92 stability × 0.85 file exchange ([how](docs/target-app-parity.md#mainstream-practitioner-and-essentials-user)) |
|
||||
| Essentials user (song or podcast, defaults) | **~57 %** | estimated: 72.4 % core-feature depth × 0.90 launch/stability × 0.90 discoverability × 0.97 files ([how](docs/target-app-parity.md#mainstream-practitioner-and-essentials-user)) |
|
||||
| Remaining to alpha | **~110–180 Opus 5.5 agent-hours** (the failing gate rows) | estimated, calibrated on PR history |
|
||||
| Remaining to beta | **~350–570 Opus 5.5 agent-hours** (includes the alpha work; ~60–70 % parallelizable) | estimated |
|
||||
| Remaining to full parity | **~950–1,450 Opus 5.5 agent-hours** | estimated |
|
||||
|
||||
### Area by area
|
||||
| Audience | Ready % | Agent-hours to ~95 % | Work that dominates |
|
||||
|---|---:|---:|---|
|
||||
| Full target (ready for real work) | ~40 % | ~950–1,450 h | Hardware, the stock plugin catalogue, AAF/OMF and immersive, localization, fidelity |
|
||||
| Mainstream practitioner | ~36 % | ~380–600 h | Interface and MIDI recording, AAF/OMF, stock-plugin depth, core-path bugs |
|
||||
| Essentials user | ~57 % | ~110–200 h | Launch and platform fixes, onboarding, effect panels and presets, MP3/AAC export |
|
||||
|
||||
| Area | Status | Parity | Remaining (h) |
|
||||
|---|---|---:|---:|
|
||||
| Session model, save/load, undo | Tracks, playlists, clips, fades, clip gain, automation, markers, groups, busses, video; JSON `.scraft` + Audio Files folder; plugin state; autosave; copy-on-write undo with gesture coalescing | 85 % | 8 |
|
||||
| Audio file I/O | WAV/BWF/RF64, AIFF/AIFC, FLAC (read/write); MP3, OGG, AAC, ALAC, CAF (read); peaks. Whole files are decoded into memory: disk streaming for very long sessions is still to do | 70 % | 12 |
|
||||
| Editing | Slip/Shuffle/Spot/Grid, cut/copy/paste/clear/duplicate/repeat/shift, Paste Special (merge MIDI, markers, clip gain/effects), separate/heal/trim/consolidate/strip silence, fades & crossfades, nudge, playlists with comping, every tool gesture, edit groups, clip groups (and `.scgrp` import/export) | 75 % | 20 |
|
||||
| Mixer & routing | Faders, pan, mute/solo (SIP, implicit solo), sends pre/post, busses, aux inputs, master faders, VCAs, routing folders, 10 inserts, plugin delay compensation, clip effects, preamp/instrument/object views | 75 % | 15 |
|
||||
| Automation | Breakpoint lanes for volume/pan/mute/sends/plugin params, trim automation; live Write/Touch/Latch passes; write/thin/glide/convert/coalesce. Surround-pan automation is still to do | 60 % | 15 |
|
||||
| Plugins (built-in) | 26 original processors + 2 instruments, AudioSuite offline processing for the whole AudioSuite menu | 45 % | 30 |
|
||||
| Third-party plugins | CLAP, VST3 and Audio Units (macOS): audio, parameters, latency, notes, state saved in sessions, instances created/destroyed off the audio thread, editors (floating CLAP GUIs, VST3 views on macOS, verified with Melodyne). Missing: AU editors, embedded CLAP GUIs, VST3 editors on Windows/Linux, ARA | 80 % | 10 |
|
||||
| MIDI & notation | MIDI/instrument tracks, SMF import/export, MIDI editor (piano roll, velocity, rubber-band select, keyboard transpose/move), event list, step input, quantize/transpose/velocity/duration, real-time properties, Score Editor, MusicXML export (Sibelius) and printable SVG score | 55 % | 20 |
|
||||
| Recording | Input capture, punch in/out (selection, on the fly, pre/post-roll), loop record into playlists, input monitoring through the channel strip, autosave and recovery | 60 % | 10 |
|
||||
| Elastic Audio / TCE / Beat Detective | Pitch-preserving warp on Elastic tracks, TCE to timeline, conform to tempo, Beat Detective and Identify Beat windows; audio-to-MIDI pitch detection | 45 % | 15 |
|
||||
| Surround | Main and bus formats from stereo to 9.1.6 and Ambisonics, surround panner with divergence/centre/LFE/height, ITU fold-down, multichannel bounce, Renderer window, object/bed routing | 60 % | 12 |
|
||||
| Video | Picture track with thumbnails, Video and Video Universe windows, H.264 (Baseline/Main/High), ProRes (all flavours) and Motion JPEG decoders in pure Rust, sync offset, relinking. Missing: HEVC/AV1/DNx, timecode-track placement, video export | 55 % | 15 |
|
||||
| UI fidelity | Edit + Mix windows, toolbar, rulers, track headers, menus for the whole catalog (macOS system menu bar), floating windows, dialogs (every file command has a path prompt), command palette | 70 % | 20 |
|
||||
| Agent control | CLI, JSON control channel, MCP server (headless + bridged), offscreen UI renders | 90 % (ahead of the incumbent) | 3 |
|
||||
| Release engineering | Signed macOS universal, Windows x64/x86, Linux AppImage/deb/rpm/tar/Flatpak, FreeBSD, Web/WASM on every push to `release` | 80 % | 3 |
|
||||
Hours are Opus 5.5 agent wall-clock hours, calibrated on this repo's PRs; 60–70 % parallelizes.
|
||||
Detail: [target-app-parity.md](docs/target-app-parity.md#readiness-by-audience).
|
||||
|
||||
## Alpha
|
||||
**Why pre-alpha:** the core-workflow gate in [docs/roadmap.md](docs/roadmap.md#alpha-gate) fails.
|
||||
Editing, mixing, bouncing, and saving and reopening work end to end. But a Pro Tools user can't
|
||||
record from a chosen audio interface at a chosen buffer size (only the default devices, a fixed
|
||||
512-sample block, and takes held in RAM). They can't record MIDI from a keyboard (there is no
|
||||
MIDI device layer). And they can't bring a session in or hand one back (no AAF/OMF/`.ptx`).
|
||||
Readiness (~40 %) sits right at the alpha bar, but a gate failure keeps the app pre-alpha. The
|
||||
2026-10-07 estimate ("~65 % overall, 110–150 h to 100 %") counted feature presence. This one
|
||||
measures readiness and adds hardware, localization and field bug reports.
|
||||
|
||||
An alpha is a build people can download, open the demo or their own audio in, record, edit, mix
|
||||
and bounce without crashes or lost work. Feature-wise SoundCraft is past that bar; what is left is
|
||||
shipping and hardening:
|
||||
## By dimension
|
||||
|
||||
1. **Publish the repository and cut the first release** (needs a decision from the maintainers:
|
||||
the GitHub repo, the release secrets, and a push to the `release` branch). The pipelines exist
|
||||
but have never run end to end. ~2 h once unblocked, mostly fixing what the first run finds.
|
||||
2. **Platform smoke tests** of the installers on Windows, Linux and FreeBSD (only macOS has been
|
||||
exercised by hand). ~3–4 h.
|
||||
3. **Disk streaming** of long sources, so an hour-long multitrack session does not need all of its
|
||||
audio in RAM. ~5–6 h.
|
||||
4. **A hands-on QA pass** in the live app: recording on real interfaces, long sessions, plugin-heavy
|
||||
mixes, save/reopen loops. ~3–4 h.
|
||||
5. **Docs**: a short user guide next to the existing agent/CLI docs. ~1 h.
|
||||
| Dimension | Ready | Remaining (h) | Doc |
|
||||
|---|---:|---:|---|
|
||||
| Features | ~45 % | 520–810 | [target-app-parity.md](docs/target-app-parity.md#feature-areas) |
|
||||
| UI/UX fidelity | ~55 % | 60–100 | [ui-parity.md](docs/ui-parity.md) |
|
||||
| File formats | ~40 % | 70–120 | [file-format-parity.md](docs/file-format-parity.md) |
|
||||
| Hardware (interfaces, MIDI, surfaces, sync) | ~12 % | 110–180 | [hardware-parity.md](docs/hardware-parity.md) |
|
||||
| Localization | ~12 % (1 of Pro Tools' 8 languages) | 70–110 | [localization-parity.md](docs/localization-parity.md) |
|
||||
| Performance | ~35 % (unmeasured) | 40–70 | [hardware-parity.md](docs/hardware-parity.md#performance) |
|
||||
| Stability | ~45 % | 50–80 | [gaps.md](docs/gaps.md) |
|
||||
| Platforms | ~65 % (5 platforms built, macOS exercised) | 20–40 | [gaps.md](docs/gaps.md) |
|
||||
| Ecosystem / plugins | ~30 % | in Features + Hardware | [plugin-parity.md](docs/plugin-parity.md) |
|
||||
| AI features | ~5 % | 30–50 | [gaps.md](docs/gaps.md) |
|
||||
| Agent control | ahead of Pro Tools | 3 | [control-protocol.md](docs/control-protocol.md), [mcp.md](docs/mcp.md) |
|
||||
|
||||
## Features
|
||||
|
||||
| Area | Breadth | Ready | Remaining (h) |
|
||||
|---|---:|---:|---:|
|
||||
| Recording and monitoring | 75 % | 40 % | 40–60 |
|
||||
| Editing | 92 % | 65 % | 40–60 |
|
||||
| Mixing and routing | 85 % | 60 % | 35–50 |
|
||||
| Automation | 80 % | 55 % | 20–30 |
|
||||
| Built-in plugins and AudioSuite | 40 % | 35 % | 80–120 |
|
||||
| Third-party plugin hosting | 70 % | 45 % | 40–60 |
|
||||
| MIDI and instruments | 70 % | 30 % | 50–80 |
|
||||
| Score and notation | 60 % | 35 % | 20–30 |
|
||||
| Elastic Audio, TCE, Beat Detective | 70 % | 35 % | 40–60 |
|
||||
| Surround and immersive | 55 % | 35 % | 50–80 |
|
||||
| Video and post | 60 % | 40 % | 40–60 |
|
||||
| Session, file management, interchange | 55 % | 35 % | 60–100 |
|
||||
| Collaboration and cloud (Avid services) | 0 % | 0 % | owner decision |
|
||||
| Agent control | 100 % | 100 % | 3 |
|
||||
|
||||
Weights and evidence per row: [target-app-parity.md](docs/target-app-parity.md#feature-areas).
|
||||
|
||||
## Languages
|
||||
|
||||
| Language | Code | Status | Translated |
|
||||
|---|---|---|---:|
|
||||
| English | en | full | 100 % |
|
||||
| Simplified Chinese | zh-Hans | none | 0 % |
|
||||
| Spanish | es | none (PR #143 open) | 0 % |
|
||||
| Hindi | hi | none | 0 % |
|
||||
| Arabic | ar | none | 0 % |
|
||||
| French | fr | none (PR #143 open) | 0 % |
|
||||
| Portuguese | pt | none | 0 % |
|
||||
| Indonesian | id | none | 0 % |
|
||||
| Japanese | ja | none | 0 % |
|
||||
| German | de | none | 0 % |
|
||||
| Korean | ko | none | 0 % |
|
||||
| Vietnamese | vi | none | 0 % |
|
||||
|
||||
Other languages shipped: 0. Detail: [localization-parity.md](docs/localization-parity.md).
|
||||
|
||||
## Upcoming
|
||||
|
||||
Ranked; the alpha gate, the alpha checklist and the beta plan are in [docs/roadmap.md](docs/roadmap.md).
|
||||
|
||||
1. **Alpha blocker:** audio interfaces: device and buffer-size choice, duplex stream, ASIO; record to disk (G-01, G-06). 35–55 h.
|
||||
2. **Alpha blocker:** MIDI devices: record from keyboards, play instruments live, output (G-02). 20–35 h.
|
||||
3. **Alpha blocker:** AAF/OMF import and export (G-03). 50–90 h.
|
||||
4. macOS plugin entitlement (#153), then AU editors (G-05). 1 h for the entitlement (needed for the mix row), then 15–25 h.
|
||||
5. Land the open bug-fix PRs and clear the correctness backlog (G-04). 15–25 h.
|
||||
6. PR CI running `cargo xtask ci` on three OSes (G-14). 5–10 h.
|
||||
7. Fidelity harness against Pro Tools (G-07). 20–30 h.
|
||||
|
||||
## Robustness
|
||||
|
||||
@@ -57,28 +117,35 @@ command parameters through the engine and mixer; they have caught fade, overflow
|
||||
unbounded-allocation bugs. Every command also runs with empty parameters on empty and demo
|
||||
sessions. Hosted plugins live in isolated unsafe crates (`clap-host`, `vst3-host`, `au-host`) and
|
||||
are created, loaded and destroyed off the audio thread. The video decoders survive hundreds of
|
||||
mutated and truncated movies.
|
||||
mutated and truncated movies. Field reports from the first public week are tracked in
|
||||
[gaps.md](docs/gaps.md) (G-04).
|
||||
|
||||
## Current focus
|
||||
## Progress log
|
||||
|
||||
Common toolbar icon buttons and track record-enable buttons use shared `craft-ui` interaction,
|
||||
accessible labels and keyboard focus, retaining SoundCraft's blue tool-selection and red record-arm
|
||||
states. The specialized transport buttons, faders, meters and saved session model remain local.
|
||||
- **2026-10-10 (UI docking):** Tracks and Groups, Clips, MIDI Editor, Memory Locations, and Undo History use movable panels. Edit and Mix retain separate arrangements; Clips and MIDI Editor belong to Edit. Transport, plug-in, and specialist utility windows retain their existing hosts. Panel moves and reset are available as UI commands, and saved UI preferences retain arrangements. Common toolbar and track record-enable buttons share interaction, accessible labels and keyboard focus through `craft-ui`, retaining blue tool selection and red record-arm states. No readiness percentage change.
|
||||
- **2026-10-10** — Stage re-normalized to **pre-alpha** by the core-workflow gate (interface recording, MIDI recording and session interchange fail). Full re-measure against Pro Tools Ultimate 2026.4.1 and the standard
|
||||
progress-docs set (this page, target-app parity, gaps, roadmap, UI/format/hardware/plugin/
|
||||
localization parity). v0.4.0 released. Community fixes: Cut All Automation, snap to neighbours,
|
||||
tempo stretch, I/O Setup, clip export names, menu-only dialogs, playback stop on new session.
|
||||
- **2026-10-09** — Light theme and live system appearance, clip-gain fader and nudge, missing-media
|
||||
warnings, session audio health, malformed-JSON and encoder-extension checks in the CLI, macOS
|
||||
system menu bar, Windows DX12 default, Linux fontconfig, metronome click in playback.
|
||||
- **2026-10-08** — v0.2.x–v0.3.0 released (Flatpak, AppImage zsync); VST3 quit crash fixed;
|
||||
Ctrl-as-Cmd shortcuts on Windows/Linux; plugin menus by vendor, AU inserts, instrument picker;
|
||||
rotating log file; branded DMG.
|
||||
- **2026-10-07** — Repository published; About window credits; release CI on macOS runners.
|
||||
- **2026-10-06** — Video track, Audio Unit hosting, plugin state and editors, Renderer; Mix
|
||||
window views; score export and print; surround mixing; VST3 hosting; property tests.
|
||||
- **2026-10-05** — Foundation crates, Edit and Mix windows, playback, CLI/MCP, parity report,
|
||||
recording and punch, CLAP hosting, Elastic Audio, Beat Detective, release pipeline.
|
||||
|
||||
1. The alpha list above.
|
||||
2. Surround-pan automation; AU editor views.
|
||||
3. Built-in plugin depth (more processors, better UIs).
|
||||
4. MIDI and score editing depth.
|
||||
## Revision history
|
||||
|
||||
## Milestones
|
||||
|
||||
- **M0–M4 (done):** workspace, gates, model, IO, DSP, mix engine, command engine, Edit/Mix UI, realtime playback, metering, plugins, bounce.
|
||||
- **M5 (done):** editing depth (tools, modes, playlists, fades, comping, clip groups).
|
||||
- **M6 (done for the first cut):** recording, punch, loop record, monitoring.
|
||||
- **M7 (in progress):** MIDI and notation editing.
|
||||
- **M8 (done):** CLI, control channel, MCP, agent acceptance test.
|
||||
- **M9 (in progress):** AudioSuite breadth (done), Elastic Audio, Beat Detective.
|
||||
- **M10 (next):** alpha release on all platforms.
|
||||
- **M11 (mostly done):** third-party plugin hosting (CLAP, VST3, AU), video, surround.
|
||||
|
||||
- **2026-10-10 (UI docking):** Tracks and Groups, Clips, MIDI Editor, Memory Locations, and Undo History use movable panels. Edit and Mix retain separate arrangements; Clips and MIDI Editor belong to Edit. Transport, plug-in, and specialist utility windows retain their existing hosts. Panel moves and reset are available as UI commands, and saved UI preferences retain arrangements. No milestone percentage change.
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Readiness-by-audience table with hours: full 950–1,450 h, mainstream 380–600 h, essentials 110–200 h |
|
||||
| 2026-10-10 | minor | Added mainstream practitioner ~36 % and essentials user ~57 % to the headline numbers |
|
||||
| 2026-10-10 | minor | Stage alpha → pre-alpha: the core-workflow gate fails on interface recording, MIDI recording and session interchange; alpha distance added |
|
||||
| 2026-10-10 | major | Rewritten to the progress-docs standard: stage alpha (re-normalized the same day), two numbers (breadth ~70 %, ready ~40 %), dimension/feature/language tables, hours re-calibrated; area table moved to docs/target-app-parity.md, milestones to docs/roadmap.md |
|
||||
| 2026-10-07 | major | Menu parity 94 %, ~65 % estimated feature parity, alpha list |
|
||||
| 2026-10-06 | minor | Alpha and parity estimates |
|
||||
@@ -351,7 +351,7 @@ fn mcp(args: &[String]) -> ExitCode {
|
||||
fn parity(args: &[String]) -> ExitCode {
|
||||
let p = soundcraft_engine::catalog::parity_json();
|
||||
let mut md = String::new();
|
||||
md.push_str("# Parity report\n\nGenerated by `soundcraft-cli parity --write docs/parity.md` (also `cargo xtask parity`).\n");
|
||||
md.push_str("# Parity report\n\nGenerated by `soundcraft-cli parity --write docs/parity-checklist.md` (also `cargo xtask parity`).\n");
|
||||
md.push_str("It compares the incumbent's menu tree (feature names observed black-box, `crates/engine/catalog/menus.txt`) with SoundCraft's command registry.\n");
|
||||
md.push_str("UI-layer commands (windows, AudioSuite) are counted by the app's own report (`engine.parity` over the control channel).\n\n");
|
||||
md.push_str(&format!(
|
||||
|
||||
+22
-2
@@ -1,5 +1,7 @@
|
||||
# Architecture
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (crate diagram brought up to date: video, vst3-host, au-host; device I/O limits) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
SoundCraft is a Cargo workspace of small crates with enforced layering (`cargo xtask layers`).
|
||||
Nothing below the UI knows about egui, so the interface can be replaced.
|
||||
|
||||
@@ -11,8 +13,9 @@ nonlinear meters, faders, pan gestures, fonts and the live theme resolver remain
|
||||
requires Rust 1.95 or later without raising the core workspace's Rust 1.90 declaration.
|
||||
|
||||
```
|
||||
L0 time audio-io midi (standalone: no workspace deps)
|
||||
L1 dsp clap-host (plugins; clap-host is the only unsafe crate)
|
||||
L0 time audio-io midi video (standalone: no workspace deps)
|
||||
L1 dsp clap-host vst3-host au-host (plugins; the three hosts are the only crates
|
||||
allowed `unsafe`, confined to their FFI modules)
|
||||
L2 model (the session document)
|
||||
L3 mix (the mix engine)
|
||||
L4 engine playback (commands, undo, I/O · audio devices)
|
||||
@@ -48,6 +51,16 @@ process in parallel; plugin delay compensation aligns every path. The same engin
|
||||
bounces offline (`render_range`) and realtime playback (`soundcraft_playback::Player`, which owns
|
||||
it on the audio thread and receives new session snapshots through a channel).
|
||||
|
||||
Device I/O today is the system's *default* output and *default* input device, opened as two
|
||||
separate cpal streams; the mix renders 512-sample blocks and resamples to the device rate when
|
||||
they differ. There is no device or buffer-size selection, no ASIO, and no MIDI device layer yet
|
||||
(see [`hardware-parity.md`](hardware-parity.md)). Sources are decoded whole into the `SourcePool`
|
||||
and recordings are captured in memory until stop.
|
||||
|
||||
`soundcraft-video` holds our own H.264, ProRes and Motion JPEG decoders and the ISO-BMFF demuxer
|
||||
for the video track. Hosted plugins (`clap-host`, `vst3-host`, `au-host`) are scanned, created and
|
||||
destroyed off the audio thread; only `process` runs on it.
|
||||
|
||||
The cpal callbacks mark their thread (`soundcraft_playback::mark_audio_thread`). Code that may run
|
||||
there can ask `on_audio_thread()` before doing anything that blocks; the desktop app's logger does,
|
||||
so a `log::` record from the audio thread (a stream error, a full synth event queue, a hosted
|
||||
@@ -59,3 +72,10 @@ by the UI thread (see README › Logs).
|
||||
The desktop app's control channel (JSON lines over TCP) exposes engine commands, inspection,
|
||||
synthetic input and screenshots; `soundcraft-cli mcp` wraps either a headless engine or a running
|
||||
app as an MCP server. See `control-protocol.md` and `mcp.md`.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Added video, vst3-host and au-host to the layer diagram; documented device I/O limits and in-memory media |
|
||||
| 2026-10-05 | major | First architecture overview |
|
||||
@@ -0,0 +1,83 @@
|
||||
# File-format parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first format inventory against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
Every format Pro Tools reads or writes, and ours. The Pro Tools list comes from the document types
|
||||
its bundle declares (`CFBundleDocumentTypes` in Info.plist: names only, nothing else read) and its
|
||||
documented import/bounce options. Ours comes from `crates/audio-io` (`detect_format`, `decode`,
|
||||
`ENCODE_EXTENSIONS`), `crates/engine/src/cmd/file.rs`, `crates/engine/src/score.rs`,
|
||||
`crates/engine/src/clip_group_file.rs` and `crates/video`.
|
||||
|
||||
**File formats: ~40 % ready** (estimated: weighted by how often a Pro Tools user hits each row;
|
||||
session interchange carries a third of the weight and is at 0 %). Remaining ≈ 70–120 h.
|
||||
|
||||
Legend: ✅ supported and tested · 🟡 partial · ❌ missing · — not applicable.
|
||||
|
||||
## Sessions and interchange
|
||||
|
||||
| Format | Pro Tools | Read | Write | Tests / notes |
|
||||
|---|---|---|---|---|
|
||||
| Pro Tools session `.ptx` (and `.ptf` from 7–9) | native | ❌ | ❌ | Proprietary, undocumented. Owner decision needed on black-box format study (G-03) |
|
||||
| Session templates `.ptxt` | read/write | ❌ | ❌ | We have no templates at all (G-16) |
|
||||
| AAF (Advanced Authoring Format) | import/export | ❌ | ❌ | #40. The post-production handoff from picture editors (G-03) |
|
||||
| OMF | import/export | ❌ | ❌ | Legacy, still delivered by some editors |
|
||||
| Media Composer–compatible session | export | ❌ | ❌ | AAF variant |
|
||||
| ADM BWF (Dolby Atmos master) | import/export | ❌ | ❌ | G-12 |
|
||||
| SoundCraft session `.scraft` + `Audio Files/` | — | ✅ | ✅ | JSON (serde); mutated-file property test loads or fails cleanly; plugin state embedded |
|
||||
| Import Session Data (from another session) | Pro Tools sessions | 🟡 | — | From `.scraft` only |
|
||||
| Session info as text | export | — | ✅ | `file.export_session_text` |
|
||||
| Clip groups `.rgrp` / ours `.scgrp` | read/write | 🟡 | 🟡 | Our own `.scgrp` format; Pro Tools' clip-group files not read |
|
||||
| Track presets, fade presets, I/O settings, workspace, sync settings | read/write | ❌ | ❌ | Their equivalents don't exist yet (G-16) |
|
||||
|
||||
## Audio
|
||||
|
||||
| Format | Pro Tools | Read | Write | Tests / notes |
|
||||
|---|---|---|---|---|
|
||||
| WAV / BWF (PCM 16/24/32, float 32), `bext` | native | ✅ | ✅ | Native reader/writer, TPDF dither option; also 8-bit and float 64 read |
|
||||
| RF64 / BW64 (> 4 GiB) | read/write | ✅ | ✅ | `encode_wav_rf64` |
|
||||
| WAV `WAVE_FORMAT_EXTENSIBLE` multichannel with channel mask | read/write | ✅ | ✅ | `encode_with_channel_mask`; default 5.1 import creates a stereo track (#89, PR #128) |
|
||||
| AIFF / AIFF-C | native | ✅ | ✅ (`fl32`) | Native |
|
||||
| FLAC | import | ✅ | ✅ | Own encoder |
|
||||
| MP3 | import, bounce | ✅ (symphonia) | ❌ | G-21 |
|
||||
| AAC / M4A / MP4 audio | import, bounce | ✅ (symphonia) | ❌ | G-21 |
|
||||
| ALAC | import | ✅ | ❌ | |
|
||||
| Ogg Vorbis | — | ✅ | ❌ | Beyond Pro Tools |
|
||||
| CAF | — | ✅ | ❌ | |
|
||||
| Sound Designer / SD II | import (legacy) | ❌ | — | Rare today |
|
||||
| ReCycle / REX | import | ❌ | — | Loops |
|
||||
| MXF audio (OP-Atom, OP1a) | import | ❌ | ❌ | Avid media; FilmCraft has an MXF reader to learn from |
|
||||
| iXML / polyphonic field-recorder metadata | read | ❌ | ❌ | G-17 |
|
||||
| Peak overviews | `.wfm` cache | ✅ (own, in memory) | — | `audio-io::peaks`; not cached on disk |
|
||||
|
||||
## MIDI and notation
|
||||
|
||||
| Format | Pro Tools | Read | Write | Tests / notes |
|
||||
|---|---|---|---|---|
|
||||
| Standard MIDI File (type 0/1) | import/export | ✅ | 🟡 | Exported MIDI omits imported controllers and ignores the tracks filter (#87, #98; PR #125) |
|
||||
| MusicXML (to Sibelius) | export | — | ✅ | `file.export_sibelius`, `score.rs` |
|
||||
| Printable score | print | — | ✅ (SVG) | |
|
||||
|
||||
## Video
|
||||
|
||||
| Format | Pro Tools | Read | Write | Tests / notes |
|
||||
|---|---|---|---|---|
|
||||
| QuickTime / MP4, H.264 | import, bounce | ✅ | ❌ | Own pure-Rust decoder (Baseline/Main/High); mutated-movie fuzzing |
|
||||
| ProRes (all flavours) | import | ✅ | ❌ | Own decoder |
|
||||
| Motion JPEG | import | ✅ | ❌ | |
|
||||
| HEVC, AV1 | import | ❌ | ❌ | G-17 |
|
||||
| DNxHD / DNxHR, MXF video | import | ❌ | ❌ | G-17 |
|
||||
| Bounce with video | export | — | ❌ | G-17 |
|
||||
|
||||
## Plugin and preset files
|
||||
|
||||
| Format | Pro Tools | Ours |
|
||||
|---|---|---|
|
||||
| AAX plug-ins | the only format it hosts | ❌ (cannot: Avid SDK licence, PACE signing) |
|
||||
| VST3 / Audio Units / CLAP | — (AAX only) | ✅ hosted (ahead of Pro Tools) |
|
||||
| Plug-in settings `.tfx` | read/write | ❌ (our own JSON presets per plugin) |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | Created: format inventory against Pro Tools 2026.4.1's declared document types and import/bounce options |
|
||||
+200
@@ -0,0 +1,200 @@
|
||||
# Where SoundCraft falls short of Pro Tools
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (alpha blockers marked after the core-workflow gate) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
Every known shortfall, one entry each, ranked by how much it stops a Pro Tools user from doing
|
||||
real work in SoundCraft. This is the work list: pick from the top. Rows marked **alpha blocker**
|
||||
fail the core-workflow gate in [`roadmap.md`](roadmap.md#alpha-gate) and keep SoundCraft pre-alpha. Numbers and weights live in
|
||||
[`target-app-parity.md`](target-app-parity.md); the plan that orders these into milestones is
|
||||
[`roadmap.md`](roadmap.md). Hours are Opus 5.5 agent-hours (calibration in target-app-parity.md).
|
||||
Estimates marked "≈" are judgements; issue numbers are `storytold/soundcraft` GitHub issues.
|
||||
|
||||
When you close a gap, delete its entry (or shrink it) in the same PR, and bump the timestamp.
|
||||
|
||||
## Ranked gaps
|
||||
|
||||
| # | Gap | Dimension | Doc | Est. (h) |
|
||||
|---|---|---|---|---:|
|
||||
| G-01 | **Alpha blocker.** No audio device, channel or buffer-size selection; no duplex low-latency path | Hardware | [hardware-parity.md](hardware-parity.md) | 25–40 |
|
||||
| G-02 | **Alpha blocker.** No MIDI device input or output | Hardware / MIDI | [hardware-parity.md](hardware-parity.md) | 20–35 |
|
||||
| G-03 | **Alpha blocker.** Cannot exchange sessions with Pro Tools (no AAF/OMF, no `.ptx`) | File formats | [file-format-parity.md](file-format-parity.md) | 50–90 |
|
||||
| G-04 | Open correctness bugs in features counted as done (~25 issues) | Stability | this file | 25–40 |
|
||||
| G-05 | (Entitlement part: alpha blocker for the mix row) Third-party VST3s blocked in the signed macOS build; AU editors missing | Ecosystem | [plugin-parity.md](plugin-parity.md) | 15–25 |
|
||||
| G-06 | (Record-to-disk part: alpha blocker for the tracking row) Sources decoded whole into RAM; recording into RAM | Performance | [hardware-parity.md](hardware-parity.md) | 15–25 |
|
||||
| G-07 | Nothing is compared against Pro Tools' output (no fidelity harness) | Features | this file | 20–30 |
|
||||
| G-08 | Built-in plugin catalogue thin and unverified | Features | [plugin-parity.md](plugin-parity.md) | 80–120 |
|
||||
| G-09 | English only, no string catalog, no CJK/RTL rendering | Localization | [localization-parity.md](localization-parity.md) | 70–110 |
|
||||
| G-10 | No control surfaces (HUI/MCU, EUCON) | Hardware | [hardware-parity.md](hardware-parity.md) | 40–70 |
|
||||
| G-11 | No external sync (MTC, LTC, MIDI clock, video reference) | Hardware | [hardware-parity.md](hardware-parity.md) | 15–25 |
|
||||
| G-12 | Immersive delivery: no Dolby Atmos/ADM BWF, MPEG-H, binaural | Features | [file-format-parity.md](file-format-parity.md) | 50–80 |
|
||||
| G-13 | Sidechain inputs, ARA, out-of-process plugin sandboxing | Ecosystem | [plugin-parity.md](plugin-parity.md) | 30–50 |
|
||||
| G-14 | Windows/Linux/Web exercised only lightly at runtime; no PR CI running the tests | Platforms / Stability | this file | 20–40 |
|
||||
| G-15 | Elastic Audio depth: one algorithm, no Elastic Pitch | Features | [target-app-parity.md](target-app-parity.md) | 30–45 |
|
||||
| G-16 | Session templates, track presets, workspace browser, batch rename | Features | [target-app-parity.md](target-app-parity.md) | 25–40 |
|
||||
| G-17 | Video: HEVC/DNx decode, video export, external timecode | Features / Formats | [file-format-parity.md](file-format-parity.md) | 30–50 |
|
||||
| G-18 | Speech-to-text transcription | AI | this file | 30–50 |
|
||||
| G-19 | UI feel: generic plugin windows, shortcut collisions, pro-grade meters and scaling | UI/UX | [ui-parity.md](ui-parity.md) | 60–100 |
|
||||
| G-20 | MIDI/instrument depth: MIDI learn, sampler, notation editing | Features | [target-app-parity.md](target-app-parity.md) | 40–60 |
|
||||
| G-21 | Compressed export (MP3, AAC/M4A, Ogg/Opus) | File formats | [file-format-parity.md](file-format-parity.md) | 10–20 |
|
||||
| G-22 | Avid cloud services (collaboration, Sketch, Splice, sign-in) | Ecosystem | — | not estimated (owner decision) |
|
||||
|
||||
## Details
|
||||
|
||||
### G-01. Audio interface support
|
||||
|
||||
- **Missing:** choosing the output or input device, the device's channel count and routing to
|
||||
physical channels, the buffer size, and the sample rate from the hardware side. Input and
|
||||
output are separate cpal streams on the *default* devices (`crates/playback/src/lib.rs`
|
||||
`open_device`, `record.rs`); the mix runs in fixed 512-sample blocks and resamples when rates
|
||||
differ. `setup.playback_engine` stores `device`/`buffer_size` params, but playback ignores them.
|
||||
No ASIO on Windows (WASAPI shared only), so latency there is high.
|
||||
- **Evidence:** code above; Playback Engine window says "Mix block size: 512 samples"; issue #42
|
||||
(no input device selection, forced monitoring feedback with virtual routing).
|
||||
- **Impact:** blocks tracking with any multichannel interface; latency makes overdubs hard.
|
||||
- **Estimate:** ≈ 25–40 h (device enumeration and selection, buffer size, duplex stream with one
|
||||
clock, ASIO feature build, per-channel I/O mapping into I/O Setup, latency reporting and
|
||||
record-offset compensation). Needs hands-on hardware testing.
|
||||
|
||||
### G-02. MIDI devices
|
||||
|
||||
- **Missing:** all MIDI hardware I/O. No `midir`/CoreMIDI/WinMM/ALSA sequencer code exists;
|
||||
`setup.midi_input_devices` and `setup.midi_studio` only store names. You cannot record from a
|
||||
keyboard, play a hosted instrument live, drive external synths, or send MIDI clock/MTC.
|
||||
`midi_editor.rs:288` notes audition "needs a live MIDI input path".
|
||||
- **Impact:** MIDI production is limited to drawing notes and importing SMF.
|
||||
- **Estimate:** ≈ 20–35 h (device layer, realtime input to armed tracks and instruments with
|
||||
timestamps, MIDI record/merge/loop, thru, output tracks, clock out).
|
||||
|
||||
### G-03. Session interchange with Pro Tools
|
||||
|
||||
- **Missing:** opening or saving `.ptx`/`.ptf`, AAF and OMF import and export (#40), Media
|
||||
Composer–compatible sessions. Our session format is `.scraft` JSON.
|
||||
- **Impact:** the standard's main-format bar for beta. A Pro Tools user cannot bring a project in
|
||||
or hand one back; post-production (picture editors deliver AAF) is blocked.
|
||||
- **Estimate:** AAF/OMF import + export ≈ 50–90 h (FilmCraft already writes AAF/OMF; we can learn
|
||||
from it but not share code). `.ptx` is proprietary and undocumented: owner decision on whether
|
||||
black-box format study is in the clean-room rules; not included in the estimate.
|
||||
|
||||
### G-04. Correctness bugs in "done" features
|
||||
|
||||
Open on 2026-10-10 (several have PRs open):
|
||||
editing #3, #5, #140, #144; clip/session #86 (PR #123), #88 (PR #130), #91 (PR #124), #92 (PR #132);
|
||||
automation #104 (PR #134); mix/bounce #59 (PR #131), #103 (PR #133), #152; playback #101 (PR #129);
|
||||
MIDI #87, #98 (PR #125); import #89 (PR #128); CLI #95, #96 (PR #126, #127); MCP #145 (PR #146);
|
||||
web #63, #64, #136; Clip List #4 (PR #75); plugin view #6; shortcuts #7, #41;
|
||||
launch #142; Linux #45, #107.
|
||||
- **Impact:** each one is small, but together they say "presence is not parity": an outside
|
||||
contributor found seven in one sitting (#116–#122).
|
||||
- **Estimate:** ≈ 25–40 h at 0.5–1.5 h each, plus review of the open PRs.
|
||||
|
||||
### G-05. Plugin hosting on macOS
|
||||
|
||||
- **Missing:** the `com.apple.security.cs.disable-library-validation` entitlement in the signed
|
||||
build, so hardened runtime refuses third-party VST3 bundles (#153, #149). AU editor views
|
||||
(`crates/au-host/src/lib.rs` header: "Not hosted yet: Audio Unit editor views"). Embedded CLAP
|
||||
GUIs; VST3 editors on Windows/Linux.
|
||||
- **Estimate:** ≈ 15–25 h (entitlement ≈ 1 h; AU Cocoa views and VST3 HWND/X11 views most of it).
|
||||
|
||||
### G-06. Memory-bound media
|
||||
|
||||
- **Missing:** streaming sources from disk; recording to disk. Every source is decoded whole into
|
||||
the `SourcePool`; takes accumulate in RAM until stop (PR #84 open).
|
||||
- **Impact:** hour-long multitrack sessions and long takes exhaust memory; a crash during a long
|
||||
take loses it.
|
||||
- **Estimate:** ≈ 15–25 h.
|
||||
|
||||
### G-07. Fidelity harness against Pro Tools
|
||||
|
||||
- **Missing:** any measured comparison: null tests of bounces of the same material, fade curve
|
||||
and pan-law checks, plugin frequency/dynamics responses, elastic-audio quality, automation
|
||||
timing. Pro Tools is installed; it can be driven black-box with synthetic sessions (outputs kept
|
||||
under `plan/`, never committed).
|
||||
- **Estimate:** ≈ 20–30 h for the harness and the first 20 scored cases; turns many "≈" in
|
||||
target-app-parity.md into measurements.
|
||||
|
||||
### G-08. Built-in plugins
|
||||
|
||||
See [`plugin-parity.md`](plugin-parity.md): 26 processors + 2 instruments against Pro Tools'
|
||||
roughly 80 bundled processors and instruments; no fidelity checks; generic parameter UIs; EQ
|
||||
parametric request #139. ≈ 80–120 h.
|
||||
|
||||
### G-09. Localization
|
||||
|
||||
See [`localization-parity.md`](localization-parity.md): no catalog, every string literal in code;
|
||||
egui has no complex-script shaping or RTL; no CJK font fallback (PR #141 open). ≈ 70–110 h plus
|
||||
native-speaker review.
|
||||
|
||||
### G-10. Control surfaces
|
||||
|
||||
None: no HUI or Mackie Control, no EUCON (Avid-proprietary, needs Avid's SDK: owner decision),
|
||||
no generic MIDI controller mapping. Pro Tools users on S1/S3/S4/S6/Dock or HUI devices can't
|
||||
switch. ≈ 40–70 h for HUI/MCU plus a mapping layer; hardware needed to verify.
|
||||
|
||||
### G-11. Sync
|
||||
|
||||
No MTC/LTC chase or generation, no MIDI Beat Clock (`setup.midi_beat_clock` stores a flag only),
|
||||
no video reference or word clock awareness, no Satellite-style linking. ≈ 15–25 h after G-01/G-02.
|
||||
|
||||
### G-12. Immersive delivery
|
||||
|
||||
No Dolby Atmos renderer integration, ADM BWF import/export, re-renders, binaural monitoring,
|
||||
MPEG-H (new in Pro Tools 2026.4), surround/object automation. ≈ 50–80 h; Dolby's renderer and
|
||||
SDKs are licensed, so we'd write our own ADM and object renderer.
|
||||
|
||||
### G-13. Plugin ecosystem depth
|
||||
|
||||
No sidechain (key input) buses for any host; no ARA (Melodyne-style editing is a menu in Pro
|
||||
Tools); plugins run in-process, so a crashing plugin can take the session down. ≈ 30–50 h. AAX
|
||||
cannot be hosted (#109): Avid's AAX SDK licence and PACE signing; owner decision, likely never.
|
||||
|
||||
### G-14. Platforms and CI
|
||||
|
||||
Only `freebsd.yml` and `windows-arm64.yml` run on pull requests, and only for manifest paths;
|
||||
nothing runs `cargo xtask ci` on PRs. Windows and Linux have startup and rendering reports
|
||||
(#41, #45, #107, #142). ≈ 20–40 h (a PR CI matrix plus runtime smoke tests on three OSes).
|
||||
|
||||
### G-15. Elastic Audio depth
|
||||
|
||||
One warp algorithm; Pro Tools offers several per track (polyphonic, rhythmic, monophonic,
|
||||
varispeed, high-quality offline) plus Elastic Pitch and warp-marker editing depth. ≈ 30–45 h.
|
||||
|
||||
### G-16. Session management
|
||||
|
||||
No session templates, track presets, workspace/sound browser with previews, batch rename (new in
|
||||
2026.4), disk-usage and relink depth. ≈ 25–40 h.
|
||||
|
||||
### G-17. Video and post
|
||||
|
||||
No HEVC, DNxHD/HR or AV1 decode; no bounce with video; no external timecode/9-pin; no iXML
|
||||
field-recorder conform. ≈ 30–50 h.
|
||||
|
||||
### G-18. Speech-to-text
|
||||
|
||||
Pro Tools transcribes dialogue to a searchable transcript (upgraded in 2026.4). We have a
|
||||
settings command only. Needs an openly licensed local speech model. ≈ 30–50 h.
|
||||
|
||||
### G-19. UI feel
|
||||
|
||||
See [`ui-parity.md`](ui-parity.md). ≈ 60–100 h.
|
||||
|
||||
### G-20. MIDI and instrument depth
|
||||
|
||||
MIDI learn, a sampler (PR #108), drum machine depth, notation editing (tuplets, lyrics,
|
||||
articulations, parts). ≈ 40–60 h.
|
||||
|
||||
### G-21. Compressed export
|
||||
|
||||
Bounce writes WAV/BWF/RF64, AIFF and FLAC; Pro Tools also writes MP3 and AAC/M4A in Bounce Mix.
|
||||
≈ 10–20 h (pure-Rust encoders).
|
||||
|
||||
### G-22. Avid cloud services
|
||||
|
||||
Collaboration, cloud projects, Sketch, Splice, Learn, sign-in: 11 of the 30 menu leaves still
|
||||
missing. Out of scope unless the owner decides otherwise.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Marked the alpha blockers (G-01, G-02, G-03; parts of G-05 and G-06) from the core-workflow gate |
|
||||
| 2026-10-10 | major | Created from the full re-measure against Pro Tools Ultimate 2026.4.1: 22 ranked gaps with evidence and estimates |
|
||||
@@ -0,0 +1,75 @@
|
||||
# Hardware parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first hardware audit against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
A DAW is judged by how it drives audio interfaces, MIDI gear, control surfaces and sync. This is
|
||||
SoundCraft's weakest dimension. Ours is measured from `crates/playback` (cpal) and the absence of
|
||||
any MIDI-device or control-surface code; Pro Tools' from its documentation and Setup menus.
|
||||
|
||||
**Hardware: ~12 % ready** (estimated). **Performance: ~35 %** (estimated; nothing benchmarked
|
||||
against Pro Tools). Remaining ≈ 110–180 h for hardware, 40–70 h for performance.
|
||||
|
||||
Legend: ✅ works · 🟡 partial · ❌ missing.
|
||||
|
||||
## Audio interfaces
|
||||
|
||||
| Feature | Pro Tools (macOS / Windows) | SoundCraft macOS | Windows | Linux | FreeBSD | Web |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Driver API | Core Audio / ASIO | 🟡 Core Audio via cpal | 🟡 WASAPI shared via cpal; no ASIO | 🟡 ALSA/Pulse via cpal; no JACK | 🟡 cpal (ALSA layer) | 🟡 Web Audio |
|
||||
| Choose playback device | ✅ Playback Engine | ❌ default output only | ❌ | ❌ | ❌ | ❌ |
|
||||
| Choose input device | ✅ | ❌ default input only (#42) | ❌ | ❌ | ❌ | ❌ |
|
||||
| Buffer size (32–2048) | ✅ | ❌ fixed 512-sample mix block | ❌ | ❌ | ❌ | ❌ |
|
||||
| Duplex stream on one clock | ✅ | ❌ separate input/output streams | ❌ | ❌ | ❌ | ❌ |
|
||||
| Hardware I/O mapping (I/O Setup to physical channels) | ✅ | 🟡 multichannel output in order; no per-channel map | 🟡 | 🟡 | 🟡 | ❌ |
|
||||
| Low-latency monitoring | ✅ | ❌ (`options.low_latency_monitoring` is a stored flag) | ❌ | ❌ | ❌ | ❌ |
|
||||
| Latency reporting and record offset compensation | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
||||
| Sample rate follows the session; resample when it can't | ✅ (switches device) | 🟡 resamples (input pitch bug fixed, #28) | 🟡 | 🟡 | 🟡 | 🟡 |
|
||||
| Avid HDX / HD Native DSP, Hybrid Engine DSP mode | ✅ | ❌ (out of reach: Avid hardware) | ❌ | ❌ | ❌ | ❌ |
|
||||
| Disk allocation / record to disk | ✅ | ❌ recording into RAM (PR #84) | ❌ | ❌ | ❌ | ❌ |
|
||||
|
||||
## MIDI
|
||||
|
||||
| Feature | Pro Tools | SoundCraft (all platforms) |
|
||||
|---|---|---|
|
||||
| MIDI input devices (keyboards, pads) | ✅ | ❌ no MIDI device layer at all (`setup.midi_input_devices` stores names) |
|
||||
| MIDI output to external gear | ✅ | ❌ |
|
||||
| MIDI Thru, input filter | ✅ | ❌ (stored flags only) |
|
||||
| MIDI Beat Clock out, MTC generate/chase | ✅ | ❌ |
|
||||
| MIDI learn / controller mapping | ✅ (via surfaces and plug-in maps) | ❌ |
|
||||
| Virtual MIDI keyboard | ✅ (MIDI Keyboard window) | 🟡 window exists, no live audition path |
|
||||
|
||||
## Control surfaces
|
||||
|
||||
| Feature | Pro Tools | SoundCraft |
|
||||
|---|---|---|
|
||||
| EUCON (S1/S3/S4/S6, Dock, Control app) | ✅ | ❌ Avid-proprietary SDK; owner decision |
|
||||
| HUI | ✅ | ❌ |
|
||||
| Mackie Control Universal | ✅ (via HUI emulation and personalities) | ❌ |
|
||||
| Generic MIDI controller personalities | ✅ | ❌ |
|
||||
|
||||
## Sync and video hardware
|
||||
|
||||
| Feature | Pro Tools | SoundCraft |
|
||||
|---|---|---|
|
||||
| LTC / MTC chase, 9-pin machine control | ✅ (Ultimate) | ❌ |
|
||||
| Word clock / video reference awareness | ✅ via interface | ❌ |
|
||||
| Video output to a second display or video card | ✅ | ❌ (video window only) |
|
||||
| Satellite linking of systems | ✅ | ❌ |
|
||||
|
||||
## Performance
|
||||
|
||||
| Feature | Pro Tools | SoundCraft | Evidence |
|
||||
|---|---|---|---|
|
||||
| Parallel mixing across cores | ✅ | ✅ | `soundcraft-mix` renders independent strips in parallel (rayon) |
|
||||
| Plugin delay compensation | ✅ | ✅ | |
|
||||
| Disk streaming of long sources | ✅ | ❌ | Whole files decoded into the `SourcePool` |
|
||||
| Track count (Ultimate: 2,048 voices) | ✅ | unmeasured | No benchmark exists; add `cargo xtask bench` |
|
||||
| Real-time audio thread discipline | ✅ | ✅ | No blocking/allocation in steady state, audio-thread-aware logger |
|
||||
| Freeze / commit to save CPU | ✅ | 🟡 | `track.commit` renders; `track.freeze` only sets a flag (no CPU saved) |
|
||||
| GPU-accelerated UI | — | ✅ (wgpu/glow via eframe) | llvmpipe X11 issue #107 |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | Created: audit of audio interface, MIDI, control-surface, sync and performance support against Pro Tools 2026.4.1 |
|
||||
@@ -0,0 +1,42 @@
|
||||
# Localization parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first per-language status) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
SoundCraft is English only. There is no string catalog: every menu label, dialog and tooltip is a
|
||||
literal in Rust (`crates/engine/src/cmd/*`, `crates/ui-egui/src/*`). Pro Tools ships its UI in
|
||||
**8 languages** (bundle `.lproj` folders: English, German, Spanish, French, Japanese, Korean,
|
||||
Simplified Chinese, Traditional Chinese).
|
||||
|
||||
**Localization: ~12 %** (measured: 1 of the target's 8 UI languages, and English is the only one
|
||||
complete). Remaining ≈ 70–110 h: a catalog and extraction pass (≈ 15–25 h), a font fallback for
|
||||
CJK/Devanagari/Arabic (PR #141 open), RTL layout and complex-script shaping (egui has neither:
|
||||
≈ 25–40 h, or ship Arabic/Hindi menus-only), then ≈ 3–5 h of agent translation per language, plus
|
||||
native-speaker review (human).
|
||||
|
||||
Open work: PR #143 (French and Spanish, a Language setting), PR #141 (bundled multilingual font
|
||||
fallbacks), issue #67 (Ukrainian).
|
||||
|
||||
| Language | Code | UI strings translated | Dialogs / tooltips / help | Script support | Native review | Status | Est. to full (h) | In Pro Tools |
|
||||
|---|---|---|---|---|---|---|---:|---|
|
||||
| English | en | all (source) | ✅ | Latin ✅ | — | **full** | 0 | ✅ |
|
||||
| Simplified Chinese | zh-Hans | 0 (0 %) | ❌ | ❌ no CJK font fallback, no IME testing | no | none | 6–10 | ✅ |
|
||||
| Spanish | es | 0 (0 %) — PR #143 pending | ❌ | Latin ✅ | no | none | 3–5 | ✅ |
|
||||
| Hindi | hi | 0 (0 %) | ❌ | ❌ no Devanagari font or shaping | no | none | 8–15 | ❌ |
|
||||
| Arabic | ar | 0 (0 %) | ❌ | ❌ no RTL layout, no shaping | no | none | 15–25 | ❌ |
|
||||
| French | fr | 0 (0 %) — PR #143 pending | ❌ | Latin ✅ | no | none | 3–5 | ✅ |
|
||||
| Portuguese | pt | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ❌ |
|
||||
| Indonesian | id | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ❌ |
|
||||
| Japanese | ja | 0 (0 %) | ❌ | ❌ no CJK font fallback, no IME testing | no | none | 6–10 | ✅ |
|
||||
| German | de | 0 (0 %) | ❌ | Latin ✅ | no | none | 3–5 | ✅ |
|
||||
| Korean | ko | 0 (0 %) | ❌ | ❌ no Hangul font fallback | no | none | 6–10 | ✅ |
|
||||
| Vietnamese | vi | 0 (0 %) | ❌ | 🟡 Latin with stacked diacritics, untested | no | none | 3–5 | ❌ |
|
||||
|
||||
Other languages shipped: **0**. (Pro Tools also ships Traditional Chinese, zh-Hant.)
|
||||
|
||||
Per-language hours exclude the shared catalog and script work above.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | Created: English only, no catalog; the twelve key languages at 0 %; Pro Tools' 8 languages listed from its bundle |
|
||||
@@ -1,6 +1,8 @@
|
||||
# Parity report
|
||||
|
||||
Generated by `soundcraft-cli parity --write docs/parity.md` (also `cargo xtask parity`).
|
||||
> **Generated:** 2026-10-06 (last run of `cargo xtask parity`; the catalog and aliases are unchanged since) · **Target:** Avid Pro Tools Ultimate 2026.4.1 menu tree
|
||||
|
||||
Generated by `soundcraft-cli parity --write docs/parity-checklist.md` (also `cargo xtask parity`).
|
||||
It compares the incumbent's menu tree (feature names observed black-box, `crates/engine/catalog/menus.txt`) with SoundCraft's command registry.
|
||||
UI-layer commands (windows, AudioSuite) are counted by the app's own report (`engine.parity` over the control channel).
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# Plugin parity: built-in processors and plugin hosting
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first plugin checklist against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
Pro Tools users live in plugins: the bundled set covers everyday mixing, and third-party plugins
|
||||
cover the rest. This doc tracks both. Our plugins have our own names and are written from
|
||||
scratch (clean-room rule): Avid plugin names are not used here, only categories.
|
||||
|
||||
**Built-in plugins and AudioSuite: breadth ~40 %, ready ~35 %** (80–120 h).
|
||||
**Third-party hosting: breadth ~70 %, ready ~45 %** (40–60 h). Both estimated.
|
||||
|
||||
## Built-in processors (measured from `crates/dsp/src/plugins`)
|
||||
|
||||
| Category | Pro Tools bundles (approx., by category) | SoundCraft (ids) | Gap |
|
||||
|---|---|---|---|
|
||||
| EQ | 1-band and 7-band EQ, channel strip, vintage EQ models | `eq_1band`, `eq_7band`, `channel_strip` | Vintage models, linear phase, dynamic EQ; parametric UI (#139) |
|
||||
| Dynamics | compressor/limiter, expander/gate, de-esser, maximizer, vintage compressors, multiband | `compressor`, `expander_gate`, `de_esser`, `maximizer` | Vintage/opto models, multiband, sidechain input (no key input anywhere) |
|
||||
| Reverb | algorithmic room/plate/hall; convolution (paid tier) | `room_reverb`, `plate_reverb` | Hall/chamber, convolution, early-reflection editor |
|
||||
| Delay | modulated delay, tape/analog delays | `mod_delay` | Tape, ping-pong, multi-tap, tempo-sync depth |
|
||||
| Modulation | chorus, flanger, phaser, tremolo, ring/frequency shift | `chorus`, `flanger`, `phaser` | Tremolo, auto-pan, ring modulation |
|
||||
| Harmonic | lo-fi, rectifier, amp simulation, saturation, tape | `lofi`, `rectifier`, `saturator` | Amp and cabinet models, tape |
|
||||
| Pitch and time | pitch shift, varispeed effects, time shift | `pitch_shifter`, `time_shift` | Formant control, varispeed effect, pitch correction |
|
||||
| Utility | trim, gain, invert, DC offset, signal generator, dither, time adjuster | `trim`, `gain`, `invert`, `dc_offset_removal`, `signal_generator`, `dither` | Time adjuster, meter/analyzer plugins, noise shaping options |
|
||||
| Instruments | several virtual instruments (multi-sampler, piano, drum machine, organ, synths, sample player; Massive X Player added in 2026.4) | `subtractive_synth`, `drum_synth` | Sampler (PR #108 open), piano, organ, wavetable, content library |
|
||||
| **Total** | **≈ 80 processors and instruments** (estimate from Avid's bundle documentation) | **26 processors + 2 instruments** | |
|
||||
|
||||
AudioSuite: every catalog AudioSuite leaf maps to one of our processes (`AUDIOSUITE` in
|
||||
`crates/ui-egui/src/menus.rs`), so the AudioSuite menu is 100 % present. Depth: no preview,
|
||||
handles, "clip by clip / entire selection" and multi-input modes beyond the basics; hosted
|
||||
plugins can't be used offline as AudioSuite yet.
|
||||
|
||||
Fidelity: **unmeasured.** Nothing compares a SoundCraft processor's frequency response, gain
|
||||
reduction curve or reverb tail with the Pro Tools equivalent (G-07 in [`gaps.md`](gaps.md)).
|
||||
User report #152: a saved instrument level does not reach the bounce.
|
||||
|
||||
## Third-party plugin hosting
|
||||
|
||||
| Feature | Pro Tools | SoundCraft | Notes |
|
||||
|---|---|---|---|
|
||||
| Plugin format | AAX only (Native and DSP) | CLAP, VST3, Audio Units (macOS) | Users' libraries mostly ship VST3/AU too. AAX (#109) needs Avid's SDK licence and PACE signing: owner decision, likely never |
|
||||
| VST2, LV2, LADSPA | — | ❌ (#30) | Beyond Pro Tools; VST2 SDK is no longer licensable |
|
||||
| Scan, vendor menus, instrument picker | ✅ | ✅ | #23 |
|
||||
| Audio, parameters, automation, latency (PDC) | ✅ | ✅ | |
|
||||
| Notes / MIDI to instruments | ✅ | ✅ | But no live MIDI input (G-02) |
|
||||
| State saved in sessions, presets | ✅ | ✅ | |
|
||||
| Create/destroy off the audio thread | ✅ | ✅ | |
|
||||
| Editors: CLAP | — | 🟡 floating windows; no embedded GUI | |
|
||||
| Editors: VST3 | — | 🟡 macOS only (verified with a commercial pitch editor) | Windows/Linux views missing |
|
||||
| Editors: AU | — | ❌ | Cocoa view hosting missing |
|
||||
| Multiple editor pages | ✅ | 🟡 | #6 |
|
||||
| macOS hardened-runtime entitlement for third-party code | ✅ | ❌ | #153, #149 — signed builds refuse third-party VST3 |
|
||||
| Sidechain / key input | ✅ | ❌ | All three hosts |
|
||||
| ARA 2 (pitch/time editors in the timeline) | ✅ | ❌ | Menu leaves Track/Clip/Window ▸ ARA still missing |
|
||||
| Crash isolation | in-process (DSP on HDX) | in-process | Out-of-process hosting would beat Pro Tools |
|
||||
| Plugin delay reporting changes on the fly | ✅ | 🟡 | Aux insert latency bug #103 (PR #133) |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | Created: built-in processor inventory by category and third-party hosting checklist |
|
||||
@@ -0,0 +1,90 @@
|
||||
# SoundCraft roadmap: milestones and what's next
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (alpha gate added; stage re-normalized to pre-alpha) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
Forward-looking plan. Status and numbers: [`../ROADMAP.md`](../ROADMAP.md) and
|
||||
[`target-app-parity.md`](target-app-parity.md); the ranked work list: [`gaps.md`](gaps.md).
|
||||
Hours are Opus 5.5 agent-hours.
|
||||
|
||||
## Current focus
|
||||
|
||||
1. **Merge or close the open bug-fix PRs** (#123–#134, #146, #148, #75) and fix the rest of the
|
||||
correctness backlog (G-04). ≈ 15–25 h.
|
||||
2. **Audio interface basics** (G-01): device selection, buffer size, duplex stream, ASIO. ≈ 25–40 h.
|
||||
3. **MIDI devices** (G-02): input to armed tracks and instruments, output, thru, clock. ≈ 20–35 h.
|
||||
4. **macOS plugin hosting** (G-05): library-validation entitlement now (#153), then AU editors. ≈ 15–25 h.
|
||||
5. **A PR CI that runs `cargo xtask ci`** on Linux, macOS and Windows (G-14). ≈ 5–10 h.
|
||||
|
||||
## Alpha gate
|
||||
|
||||
The core workflows a Pro Tools professional does every day, checked end to end on macOS (the
|
||||
main platform). Any **no** keeps SoundCraft **pre-alpha**, and those rows are the alpha checklist
|
||||
(craftrules `standards/progress-docs.md`, Stages).
|
||||
|
||||
| Workflow | Works end to end? | Evidence | Hours to pass |
|
||||
|---|---|---|---:|
|
||||
| Record audio from a chosen interface at a chosen buffer size, monitor, punch, keep the takes | **no** | Default output and input devices only. Fixed 512-sample block. Separate input and output streams. `setup.playback_engine` params ignored by playback. Takes held in RAM until stop (PR #84). No input device choice (#42). | 35–55 |
|
||||
| Record MIDI from a controller and play it back through an instrument | **no** | Playback of drawn and imported MIDI works. No MIDI device layer at all, so nothing can be recorded and instruments can't be played live (G-02). | 20–35 |
|
||||
| Edit: select, trim, fade, comp playlists, Slip/Shuffle/Grid | yes (rough) | Every Edit menu command; property-tested with undo; open bugs #3, #5, #140 don't block the workflow | — |
|
||||
| Mix with built-in and third-party plugins, sends, busses, automation | partial (passes on CLAP/AU) | 26 built-in processors; CLAP and AU host on the signed macOS build, but its missing entitlement blocks third-party VST3 (#153). No AU plugin windows yet; VST3 windows on macOS only | 1–2 (entitlement) |
|
||||
| Bounce mix and stems; save and reopen the session | yes (rough) | WAV/BWF/AIFF/FLAC bounce, stems, `.scraft` save/reopen with plugin state; bugs #59, #103 in bus bounce and aux latency (PRs open) | — |
|
||||
| Exchange a session with Pro Tools or a picture editor | **no** | No `.ptx`, AAF or OMF import or export (#40, G-03) | 50–90 |
|
||||
|
||||
**Result: pre-alpha.** Three workflows fail. Passing them is ~110–180 h, about 70 % of it
|
||||
parallelizable (interfaces, MIDI and AAF are independent crates).
|
||||
|
||||
## Milestones
|
||||
|
||||
Status: ✅ done · 🟡 in progress · ⬜ not started.
|
||||
|
||||
| # | Milestone | Status | Remaining (h) |
|
||||
|---|---|---|---:|
|
||||
| M0–M4 | Workspace, gates, model, I/O, DSP, mix engine, command engine, Edit/Mix UI, playback, metering, plugins, bounce | ✅ | — |
|
||||
| M5 | Editing depth (tools, modes, playlists, fades, comping, clip groups) | ✅ (bugs open, G-04) | in G-04 |
|
||||
| M6 | Recording, punch, loop record, monitoring | 🟡 first cut; device choice and record-to-disk missing | 40–60 |
|
||||
| M7 | MIDI and notation editing | 🟡 | 50–80 |
|
||||
| M8 | CLI, control channel, MCP, agent acceptance test | ✅ | 3 |
|
||||
| M9 | AudioSuite breadth ✅, Elastic Audio 🟡, Beat Detective 🟡 | 🟡 | 40–60 |
|
||||
| M10 | Public releases on all platforms | ✅ v0.3.0 (2026-10-08) and v0.4.0 (2026-10-10) released for every platform | — |
|
||||
| M11 | Third-party plugin hosting (CLAP, VST3, AU), video, surround | 🟡 mostly done | 40–60 |
|
||||
| M12 | **Hardware**: audio interfaces, MIDI devices, sync, control surfaces | ⬜ | 110–180 |
|
||||
| M13 | **Interchange**: AAF/OMF import/export, disk streaming, record to disk | ⬜ | 65–115 |
|
||||
| M14 | **Fidelity harness** against Pro Tools (null tests, plugin responses) | ⬜ | 20–30 |
|
||||
| M15 | **Localization**: catalog, fonts/RTL, the 8 Pro Tools languages first | ⬜ (PRs #141, #143 open) | 70–110 |
|
||||
| M16 | Built-in plugin depth, sidechain, ARA | ⬜ | 110–170 |
|
||||
| M17 | Immersive delivery (ADM BWF, object renderer, binaural) and video depth | ⬜ | 80–130 |
|
||||
|
||||
## To beta (~350–570 h, about 60–70 % parallelizable)
|
||||
|
||||
Beta needs ~75 % ready for real work and no blocking gap in session interchange.
|
||||
|
||||
| Step | Gaps | Est. (h) |
|
||||
|---|---|---:|
|
||||
| Correctness backlog and a PR CI | G-04, G-14 | 40–65 |
|
||||
| Audio interfaces, MIDI devices, sync | G-01, G-02, G-11 | 60–100 |
|
||||
| AAF/OMF interchange, disk streaming, record to disk | G-03, G-06 | 65–115 |
|
||||
| Plugin hosting completeness on every OS, sidechain | G-05, G-13 | 35–60 |
|
||||
| Fidelity harness and the fixes it finds | G-07 | 40–60 |
|
||||
| Built-in plugin essentials (EQ/dynamics/reverb/delay depth, sampler) | G-08 (half) | 40–60 |
|
||||
| UI feel pass: shortcuts, plugin windows, meters | G-19 (half) | 30–50 |
|
||||
| Localization of the 8 Pro Tools languages (catalog, CJK fonts) | G-09 (part) | 40–60 |
|
||||
|
||||
Needs a human: hardware for G-01/G-02/G-10/G-11, native-speaker review, and owner decisions on
|
||||
AAX, `.ptx` and Avid cloud features.
|
||||
|
||||
## After beta (to full parity, a further ~600–900 h)
|
||||
|
||||
Control surfaces (G-10), immersive delivery (G-12), the rest of the built-in plugin catalogue
|
||||
(G-08), Elastic Audio depth (G-15), session templates and browser (G-16), video depth (G-17),
|
||||
speech-to-text (G-18), notation and instrument depth (G-20), compressed export (G-21), and the
|
||||
remaining languages.
|
||||
|
||||
There is no `cargo xtask scorecard` in this repo; the measured number is `cargo xtask parity`
|
||||
([`parity-checklist.md`](parity-checklist.md)).
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Added the alpha gate (3 of 6 core workflows fail → pre-alpha) |
|
||||
| 2026-10-10 | major | Created from ROADMAP.md's milestones and alpha list; added M12–M17 and the beta plan with estimates |
|
||||
@@ -0,0 +1,252 @@
|
||||
# Target-app parity: SoundCraft vs Avid Pro Tools
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (hours to ~95 % for each audience; full number confirmed as an additive weighted sum) · **Target:** Avid Pro Tools Ultimate 2026.4.1 (bundle 26.4.1.179, macOS)
|
||||
|
||||
The authoritative assessment of how close SoundCraft is to Pro Tools. [`ROADMAP.md`](../ROADMAP.md)
|
||||
summarizes it, [`gaps.md`](gaps.md) itemizes every shortfall, and the per-dimension docs go deeper:
|
||||
[`ui-parity.md`](ui-parity.md), [`file-format-parity.md`](file-format-parity.md),
|
||||
[`hardware-parity.md`](hardware-parity.md), [`plugin-parity.md`](plugin-parity.md),
|
||||
[`localization-parity.md`](localization-parity.md). The generated menu checklist is
|
||||
[`parity-checklist.md`](parity-checklist.md).
|
||||
|
||||
## Headline
|
||||
|
||||
| Number | Value | Kind |
|
||||
|---|---|---|
|
||||
| Menu breadth (engine + UI layer) | **482 / 512 menu leaves (94.1 %)** | **measured**: the 512-leaf catalog `crates/engine/catalog/menus.txt` against the command registry; engine alone 397 / 512 (77.5 %) from `cargo xtask parity` ([`parity-checklist.md`](parity-checklist.md)); the 85 UI-layer matches re-counted on 2026-10-10 from `crates/ui-egui/src/menus.rs` (`UI_COMMANDS`, `AUDIOSUITE`, `MENU_WINDOWS`, Mix Window Views) by script |
|
||||
| Feature breadth (menus plus everything not in a menu: plugins, hardware, formats, immersive, cloud) | **~70 %** | estimated (area table below, presence only) |
|
||||
| **Ready for real work** (whole of Pro Tools) | **~40 %** | estimated: written dimension weights × values = 40.6 % ([By dimension](#by-dimension)) |
|
||||
| **Mainstream practitioner** (a working tracking/mixing engineer) | **~36 %** | estimated: written area weights and discounts ([below](#mainstream-practitioner-and-essentials-user)) |
|
||||
| **Essentials user** (making a song or podcast with the core features) | **~57 %** | estimated: written feature weights and discounts ([below](#mainstream-practitioner-and-essentials-user)) |
|
||||
| Stage | **pre-alpha** (core-workflow gate fails) | see [Stage](#stage) |
|
||||
| Remaining effort to alpha | **~110–180 Opus 5.5 agent-hours** | estimated: the failing gate rows |
|
||||
| Remaining effort to beta | **~350–570 Opus 5.5 agent-hours** | estimated, calibrated (below) |
|
||||
| Remaining effort to full parity | **~950–1,450 Opus 5.5 agent-hours** | estimated, calibrated (below) |
|
||||
|
||||
### Readiness by audience
|
||||
|
||||
| Audience | Ready % | Opus 5.5 agent wall-clock hours to ~95 % | Work that dominates |
|
||||
|---|---:|---:|---|
|
||||
| Full target (ready for real work) | ~40 % | ~950–1,450 h (~60–70 % parallelizable) | Hardware (interfaces, MIDI, surfaces, sync), the built-in plugin catalogue, AAF/OMF and immersive delivery, localization, fidelity against Pro Tools |
|
||||
| Mainstream practitioner | ~36 % | ~380–600 h (~60 % parallelizable) | Interface recording and MIDI devices, AAF/OMF exchange, stock-plugin depth, the core-path bug backlog, interaction feel |
|
||||
| Essentials user | ~57 % | ~110–200 h (~70 % parallelizable) | Launch and platform fixes, an onboarding and user guide, stock-effect panels and presets, MP3/AAC export, editing and transport bugs |
|
||||
|
||||
Each audience's hours are for its own areas only, so essentials ⊂ mainstream ⊂ full. Calibration
|
||||
is the same as for the full estimate ([Effort and calibration](#effort-and-calibration)): bug fixes
|
||||
at 0.5–1.5 h each, features at about 200–300 tested lines per agent-hour, from the public-week PRs.
|
||||
- **Mainstream sum:** recording 40–60, MIDI 50–80, editing 40–60, mixing 35–50, automation 20–30,
|
||||
stock plugins 80–120, AAF/OMF 50–90, compressed export 10–20, bug backlog 25–40, interaction
|
||||
feel 30–50.
|
||||
- **Essentials sum:** default-device recording 10–15, transport 5–10, editing polish 15–25, effect
|
||||
panels and presets 20–30, MP3/AAC export 10–20, built-in instrument 10–20, launch and platform
|
||||
15–25, onboarding and user guide 15–25, save fixes 5–10.
|
||||
|
||||
The previous figure in ROADMAP.md (2026-10-07: "~65 % overall feature parity", "110–150 h to 100 %")
|
||||
measured feature *presence*. This pass measures readiness, and found new evidence that pulls the
|
||||
numbers down: 37 open GitHub issues from the first public week (about 25 of them correctness bugs
|
||||
in features counted as done), no MIDI hardware input or output at all, no audio device or buffer
|
||||
size selection, no localization, and a macOS release that cannot load signed third-party VST3s
|
||||
(#153). The estimates did not drift up; the scope of what is measured widened.
|
||||
|
||||
## How this was measured
|
||||
|
||||
- **The target.** `/Applications/Pro Tools.app` on the owner's Mac: Info.plist reports version
|
||||
26.4.1.179 (Pro Tools Ultimate 2026.4.1). Only bundle metadata was read (version,
|
||||
`CFBundleDocumentTypes` for the file types it opens, the `.lproj` folder names for its UI
|
||||
languages: en, de, es, fr, ja, ko, zh-Hans, zh-Hant). Nothing inside the bundle's resources,
|
||||
plug-ins or code was read or copied (clean-room rule, AGENTS.md).
|
||||
- **The menu tree.** `plan/protools/menus-clean.txt` (observed black-box, local only) became the
|
||||
committed 512-leaf catalog; `cargo xtask parity` and the UI layer's `engine.parity` score it.
|
||||
- **Avid's own documentation.** *What's New in Pro Tools 2026.4* (Track Pin, MPEG-H renderer,
|
||||
Dolby headphone personalization, speech-to-text upgrades, batch file rename) and earlier
|
||||
release notes for features outside menus (Dolby Atmos renderer integration, ADM BWF, Sketch,
|
||||
cloud collaboration, Splice, ARA, HEAT, control surfaces, I/O setup).
|
||||
- **The code on origin/main (3bc2d92, 2026-10-10).** Read and counted with grep: ~70,900 lines of
|
||||
Rust; 524 `#[test]` functions plus proptest suites; ~350 macro-registered engine command ids;
|
||||
26 built-in processors and 2 instruments in `crates/dsp/src/plugins`; audio I/O in
|
||||
`crates/audio-io`; device I/O in `crates/playback` (cpal default output and default input only);
|
||||
no MIDI device crate (no `midir`/CoreMIDI anywhere); no string catalog.
|
||||
- **Users.** The 37 open and 21 closed GitHub issues, and the 42 merged and 29 open pull
|
||||
requests up to 2026-10-10, are the only field evidence. Nothing has been benchmarked against
|
||||
Pro Tools.
|
||||
- **Not done:** running Pro Tools side by side on the same material (null tests of mixes, plugin
|
||||
responses, fades, elastic audio). That is gap G-01 in [`gaps.md`](gaps.md).
|
||||
|
||||
## By dimension
|
||||
|
||||
Weights are how much each dimension decides whether a Pro Tools user (music production,
|
||||
post-production, tracking) can switch. "Ready" is depth, correctness and fidelity, not presence.
|
||||
|
||||
| Dimension | Weight | Ready | Kind | Remaining (h) | Doc | Evidence |
|
||||
|---|---:|---:|---|---:|---|---|
|
||||
| Features | 45 % | **~45 %** | estimated | 520–810 | [area table](#feature-areas) | Menu breadth 94 % measured, but depth is thin: see the area table |
|
||||
| UI/UX fidelity | 10 % | **~55 %** | estimated | 60–100 | [ui-parity.md](ui-parity.md) | Edit/Mix windows, every menu, floating windows; open UX bugs #3 #5 #6 #7 #140 #144; shortcuts only recently right on Windows/Linux (#15, #41); generic plugin UIs |
|
||||
| File formats | 10 % | **~40 %** | estimated | 70–120 | [file-format-parity.md](file-format-parity.md) | WAV/BWF/RF64/AIFF/FLAC read+write, compressed formats read; no `.ptx`, AAF, OMF, ADM BWF, MP3/AAC export, video export |
|
||||
| Hardware | 10 % | **~12 %** | estimated | 110–180 | [hardware-parity.md](hardware-parity.md) | Default output and default input device only, fixed 512-sample block, no ASIO, no MIDI devices, no control surfaces, no sync |
|
||||
| Stability | 10 % | **~45 %** | estimated | 50–80 | [gaps.md](gaps.md) | Never-crash rules and proptests (random edits, mutated sessions, hostile params); but ~25 open correctness bugs, a launch failure (#142), X11 llvmpipe failure (#107) |
|
||||
| Performance | 5 % | **~35 %** | estimated (unmeasured) | 40–70 | [hardware-parity.md](hardware-parity.md) | Parallel strip rendering and PDC exist; whole files decoded into RAM, recording into RAM (#84 open), no track-count or latency benchmarks |
|
||||
| Ecosystem / plugins | 4 % | **~30 %** | estimated | in Features + Hardware | [plugin-parity.md](plugin-parity.md) | CLAP/VST3/AU hosting; no AAX (Pro Tools' only format), no ARA, no sidechain, no control-surface ecosystem, no content library |
|
||||
| Platforms | 3 % | **~65 %** | estimated | 20–40 | [ROADMAP.md](../ROADMAP.md) | Builds for macOS, Windows x64/x86/arm64, Linux, FreeBSD, Web (Pro Tools: macOS, Windows), but only macOS is exercised at runtime; Web lacks file pickers (#63, #64) |
|
||||
| Localization | 2 % | **~12 %** | measured (catalog count) | 70–110 | [localization-parity.md](localization-parity.md) | English only, no string catalog; Pro Tools ships 8 UI languages; FR/ES PR #143 open |
|
||||
| AI features | 1 % | **~5 %** | estimated | 30–50 | [gaps.md](gaps.md) | Pro Tools has speech-to-text transcription (upgraded in 2026.4); we have only an audio-to-MIDI pitch tracker |
|
||||
| **Weighted** | 100 % | **~40 %** | | **~950–1,450** (overlaps removed) | | |
|
||||
|
||||
Agent control is not weighted (Pro Tools has only its scripting SDK); SoundCraft is ahead there:
|
||||
every command is reachable from the CLI, the JSON control channel and MCP.
|
||||
|
||||
## Mainstream practitioner and essentials user
|
||||
|
||||
Both use the method in craftrules `standards/progress-docs.md`. Each multiplies a weighted depth
|
||||
average by written-down discounts. Depths come from the [Feature areas](#feature-areas) table and
|
||||
the evidence there; issue numbers are `storytold/soundcraft` GitHub issues.
|
||||
|
||||
### Mainstream practitioner: ~36 %
|
||||
|
||||
The typical Pro Tools professional is a music or post engineer who tracks through an audio
|
||||
interface, overdubs MIDI, edits, mixes with the stock plugins and bounces every week. This number
|
||||
leaves out third-party plugin hosting, Avid cloud services and AI, control surfaces and sync,
|
||||
immersive delivery, video, notation, and languages other than English.
|
||||
|
||||
| Area (weekly use) | Weight | Depth |
|
||||
|---|---:|---:|
|
||||
| Recording and monitoring through an interface | 20 % | 40 % |
|
||||
| Editing (trim, fades, comping, Slip/Grid, nudge) | 22 % | 65 % |
|
||||
| Mixing and routing (faders, sends, busses, inserts, PDC) | 18 % | 60 % |
|
||||
| Automation | 10 % | 55 % |
|
||||
| Built-in plugins and AudioSuite | 12 % | 35 % |
|
||||
| MIDI recording, editing, instruments | 10 % | 30 % |
|
||||
| Bounce, save and reopen | 8 % | 60 % |
|
||||
| **Weighted depth** | 100 % | **50.6 %** |
|
||||
|
||||
| Discount | Factor | Evidence |
|
||||
|---|---:|---|
|
||||
| Interaction fidelity | ×0.90 | Shortcut collisions and dead shortcuts (#140 Heal, #144 Mix/Edit vs zoom, #7 Export); Multitool handles don't adjust audio (#5); generic plugin parameter panels (#138, #139); clip deletion inconsistencies (#3, #4) |
|
||||
| Stability on real machines | ×0.92 | 26 open core-path bugs, e.g. bounce and latency (#59, #103), playback speed (#101), session saves (#86, #91), plus a launch failure (#142). Never-crash rules and property tests hold up: no crash reports on macOS since #16 |
|
||||
| File exchange with Pro Tools users | ×0.85 | Engineers trade sessions, not stems. No `.ptx`, AAF or OMF (#40); WAV/BWF stems and MIDI files do work, so the factor isn't lower |
|
||||
| **Result** | 50.6 × 0.90 × 0.92 × 0.85 = **35.6 % ≈ 36 %** | |
|
||||
|
||||
This comes out *below* the full number (~40 %), which the standard says is unusual. The
|
||||
mainstream engineer's weekly core is interface recording and MIDI overdubs, exactly the
|
||||
alpha-gate failures. The full number gets partial credit from areas this user doesn't weight:
|
||||
editing breadth, five platforms built, agent control.
|
||||
|
||||
**User evidence** (GitHub, 2026-10-10; all 69 issues are from 28 outside reporters, none from
|
||||
maintainers):
|
||||
- **Praise:** 0 threads, and no "switched from Pro Tools" reports.
|
||||
- **Open issues:** of 48 open, 26 are core-path bugs (editing, bounce, playback, sessions,
|
||||
shortcuts, plugin loading, recording monitoring), 7 are niche-path bugs (web build, CLI/MCP,
|
||||
Linux fonts and llvmpipe), and 15 are requests.
|
||||
- **Requests:** several ask for other DAWs' feel: Ableton shortcuts and layout (#71, #72), an
|
||||
FL/Ableton port (#38), Audition-style file editing (#81, #82). AAX (#109), VST2/LV2 (#30),
|
||||
Ukrainian (#67).
|
||||
- **Closed:** 21.
|
||||
- **Contributions:** 12 outside contributors have merged PRs in the first week. That's
|
||||
engagement, not yet use on real projects.
|
||||
|
||||
### Essentials user: ~57 %
|
||||
|
||||
A user who needs only the essentials: makes a song, demo or podcast, records through the computer's default
|
||||
microphone or interface, uses default settings, and exports a file to share.
|
||||
|
||||
| Core feature | Weight | Depth | Notes |
|
||||
|---|---:|---:|---|
|
||||
| New session, open a session, demo | 10 % | 80 % | |
|
||||
| Import audio (drag and drop, WAV/MP3/AAC/FLAC) | 10 % | 80 % | Reads every common format |
|
||||
| Record from the default device | 12 % | 65 % | Works on the default input; forced monitoring can feed back (#42) |
|
||||
| Play, stop, loop, scroll, zoom | 10 % | 75 % | Half-speed after Stop (#101) |
|
||||
| Basic editing: select, cut/copy/paste, split, trim, move, fades | 18 % | 70 % | #3, #5 |
|
||||
| Undo/redo | 5 % | 90 % | Every command undoable |
|
||||
| Volume, pan, mute, solo | 10 % | 85 % | |
|
||||
| Add a stock effect (EQ, compressor, reverb) and pick a preset | 10 % | 60 % | Generic panels, few presets |
|
||||
| Draw MIDI notes for a built-in synth | 5 % | 50 % | Two built-in instruments |
|
||||
| Save and reopen | 5 % | 80 % | Web build can drop unsaved edits (#136) |
|
||||
| Export / bounce a file to share | 5 % | 60 % | WAV/AIFF/FLAC only, no MP3/AAC |
|
||||
| **Weighted depth** | 100 % | **72.4 %** | |
|
||||
|
||||
| Discount | Factor | Evidence |
|
||||
|---|---:|---|
|
||||
| Launch and stability | ×0.90 | Doesn't launch for one user (#142), X11 llvmpipe failure (#107), Linux symbols as boxes (#45), Windows shortcuts (#41); macOS is solid |
|
||||
| Discoverability and UI clarity | ×0.90 | Pro Tools' dense layout with no onboarding or user guide; shortcut collisions; plugin windows are bare sliders |
|
||||
| Opening files people send them | ×0.97 | These users get WAV/MP3, which work; only Pro Tools sessions fail |
|
||||
| **Result** | 72.4 × 0.90 × 0.90 × 0.97 = **56.9 % ≈ 57 %** | |
|
||||
|
||||
## Feature areas
|
||||
|
||||
Weights by what Pro Tools users actually spend time on. **Breadth** = the feature exists;
|
||||
**Ready** = it works deeply and correctly enough for paid work.
|
||||
|
||||
| Area | Weight | Breadth | Ready | Remaining (h) | What's there / what's missing |
|
||||
|---|---:|---:|---:|---:|---|
|
||||
| Recording and monitoring | 12 % | 75 % | **40 %** | 40–60 | Punch in/out, QuickPunch-style punch on the fly, pre/post-roll, loop record into playlists, input monitoring through the strip, autosave/recovery. Missing: input/output device choice, buffer size, duplex low-latency path, record straight to disk (#84 open), per-channel hardware input routing, TrackPunch/destructive punch beyond flags, monitoring opt-out (#42) |
|
||||
| Editing | 15 % | 92 % | **65 %** | 40–60 | Slip/Shuffle/Spot/Grid, every Edit menu command, fades/crossfades, playlists and comping, clip groups, nudge, Tab to transient, separate/heal/consolidate/strip silence. Open bugs: #3, #5 (Multitool handles), #140 (Heal shortcut), #86, #91, #92; no batch fade presets, no field-recorder workflows |
|
||||
| Mixing and routing | 12 % | 85 % | **60 %** | 35–50 | Faders, pan, sends, busses, aux, masters, VCAs, folders, 10 inserts, PDC, solo modes, I/O Setup. Missing: sidechain inputs, hardware-channel I/O mapping, bus/AFL/PFL paths verified, HEAT; bugs #59, #103 |
|
||||
| Automation | 7 % | 80 % | **55 %** | 20–30 | Lanes for volume/pan/mute/sends/plugin params, trim, Write/Touch/Latch, glide/thin/coalesce. Missing: surround-pan and object automation, Touch/Latch prime and preview modes, automation on control surfaces; bug #104 |
|
||||
| Built-in plugins and AudioSuite | 8 % | 40 % | **35 %** | 80–120 | 26 processors + 2 instruments covering every AudioSuite category; Pro Tools bundles roughly three times as many plugins plus virtual instruments. No fidelity comparison, generic parameter UIs (#139). See [plugin-parity.md](plugin-parity.md) |
|
||||
| Third-party plugin hosting | 8 % | 70 % | **45 %** | 40–60 | CLAP, VST3, AU: audio, params, latency, notes, state, presets, off-thread lifecycle, CLAP floating GUIs, VST3 editors on macOS. Missing: AU editors, VST3 editors on Windows/Linux, sidechain buses, ARA, out-of-process sandboxing, macOS library-validation entitlement (#153, #149). AAX cannot be hosted (Avid SDK licence, PACE signing) |
|
||||
| MIDI and instruments | 8 % | 70 % | **30 %** | 50–80 | Piano roll, event list, step input, quantize/transpose, real-time properties, SMF import/export. Missing: **any MIDI device input/output** (no keyboard recording, no external synths, no MIDI clock/MTC out), MIDI learn, instrument depth (Sampler PR #108 open), bug #98 |
|
||||
| Score and notation | 2 % | 60 % | **35 %** | 20–30 | Grand-staff Score Editor, MusicXML export, printable SVG. Missing: notation editing depth (tuplets, articulations, lyrics, parts layout) |
|
||||
| Elastic Audio, TCE, Beat Detective, pitch | 5 % | 70 % | **35 %** | 40–60 | Pitch-preserving warp on Elastic tracks, TCE, conform to tempo, Beat Detective and Identify Beat, audio-to-MIDI. Missing: per-algorithm choice (polyphonic/rhythmic/monophonic/varispeed/X-Form), warp markers UI depth, Elastic Pitch, quality vs Pro Tools unmeasured |
|
||||
| Surround and immersive | 5 % | 55 % | **35 %** | 50–80 | Formats stereo → 9.1.6 and Ambisonics, surround panner, fold-down, multichannel bounce, object/bed routing. Missing: Dolby Atmos renderer integration and ADM BWF, MPEG-H (new in 2026.4), binaural/headphone monitoring, surround automation; bug #89 |
|
||||
| Video and post | 5 % | 60 % | **40 %** | 40–60 | Video track, H.264/ProRes/MJPEG decoders, sync offset, relinking, timecode rulers. Missing: HEVC/DNx/AV1, video bounce/export, timecode sync to external machines, speech-to-text transcript, field-recorder/iXML conform |
|
||||
| Session, file management, interchange | 10 % | 55 % | **35 %** | 60–100 | `.scraft` + Audio Files, Save Copy In, Import Session Data, clip groups, session text export, audio-health report. Missing: `.ptx` read/write, AAF/OMF (#40), session templates, track presets, workspace/Soundbase browser, disk streaming of long sources, batch rename; bugs #86, #91, #136 |
|
||||
| Collaboration, cloud, Sketch, Splice | 2 % | 0 % | **0 %** | not estimated | Avid services; out of scope unless the owner decides otherwise |
|
||||
| Agent control (CLI, control channel, MCP) | 1 % | 100 % | **100 %** | 3 | Ahead of Pro Tools' scripting SDK; one open bug (#145) |
|
||||
| **Weighted** | 100 % | **~70 %** | **~45 %** | **~520–810** | |
|
||||
|
||||
## Stage
|
||||
|
||||
**Pre-alpha.** Readiness (~40 %) is at the alpha bar, but the core-workflow gate
|
||||
([`roadmap.md`](roadmap.md#alpha-gate)) fails three of six Pro Tools workflows on macOS, the main
|
||||
platform:
|
||||
|
||||
- Tracking from a chosen interface at a chosen buffer size: **no**. Only the default devices are
|
||||
used, the mix runs in fixed 512-sample blocks, input and output are separate streams, and
|
||||
takes are held in RAM.
|
||||
- MIDI recording: **no**. There is no MIDI device layer.
|
||||
- Session interchange with Pro Tools or picture editors: **no**. No AAF/OMF/`.ptx`.
|
||||
|
||||
Editing, mixing with plugins, bouncing, and saving and reopening pass (with known bugs).
|
||||
|
||||
**Distance to alpha: ~5 points of readiness and ~110–180 agent-hours** (G-01, G-02, G-03, part
|
||||
of G-06, and the #153 entitlement). **Distance to beta: ~35 points and ~350–570 agent-hours**
|
||||
(beta also needs ~75 % ready). The beta plan is in [`roadmap.md`](roadmap.md).
|
||||
|
||||
## Effort and calibration
|
||||
|
||||
Hours are **Opus 5.5 agent wall-clock hours**: one agent session working sequentially, including
|
||||
tests and verification.
|
||||
|
||||
**Calibrated against this repo's history** (`git log`, `gh pr list`):
|
||||
|
||||
- The 10-05 bulk commits (`first commit` through `Video track, Audio Unit hosting…`, ~70k lines)
|
||||
carry batch-commit times, not authoring times, so they don't calibrate.
|
||||
- The public week (2026-10-07 → 10-10, 42 merged PRs) does. Focused bug fixes with a regression
|
||||
test, +20 to +120 lines (#116–#122, #25, #28, #37, #61), took **~0.5–1.5 h** each. Small
|
||||
features of +200 to +1,000 lines (#32 light theme +516, #11 log file +981, #8 credits +666, #23
|
||||
plugin menus +259, #76 clip-gain fader +198) took **~2–5 h**: about **200–300 tested lines per
|
||||
agent-hour**.
|
||||
- Areas were sized by the code they need at that rate (for example, MIDI device I/O plus MIDI
|
||||
recording ≈ 3–5k lines ≈ 12–25 h), plus a 1.3–1.5× tail factor for verification against Pro
|
||||
Tools behaviour, as FilmCraft observed for its long tail.
|
||||
|
||||
**Parallelism.** About 60–70 % of the work parallelizes across 4–5 agents by crate (dsp plugins,
|
||||
hardware/playback, file interchange, UI, localization). The audio-thread and hardware work
|
||||
serializes more, because it needs hands-on testing.
|
||||
|
||||
**Needs a human:**
|
||||
- Owner decisions: AAX (requires Avid's SDK licence and PACE signing; probably never), `.ptx`
|
||||
reverse engineering (clean-room implications), Avid cloud features (out of scope by default).
|
||||
- Hardware we don't have in CI: multichannel interfaces, ASIO drivers, control surfaces (HUI/MCU,
|
||||
EUCON is Avid-proprietary), MIDI keyboards, sync generators.
|
||||
- Native-speaker review for every language beyond English.
|
||||
- Ears: a mix engineer's A/B of plugins, fades and elastic audio.
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | minor | Readiness-by-audience table: hours to ~95 % for full (950–1,450 h), mainstream (380–600 h) and essentials (110–200 h). The full number is already the additive weighted sum over the written dimension table (40.6 %); method unchanged |
|
||||
| 2026-10-10 | minor | Added the mainstream-practitioner (~36 %) and essentials-user (~57 %) numbers with written weights, discounts and user evidence. Checked the full ~40 %: it is the written dimension weights × values (40.6 %), so it doesn't move |
|
||||
| 2026-10-10 | minor | Stage alpha → pre-alpha under the core-workflow gate; alpha distance ~110–180 h |
|
||||
| 2026-10-10 | major | Full re-measure against Pro Tools Ultimate 2026.4.1: two numbers (breadth ~70 %, ready ~40 %), dimension and area tables with hours, stage alpha; hours re-calibrated from PR history (110–150 h → 950–1,450 h to full parity: the old figure counted presence only) |
|
||||
| 2026-10-07 | major | Area table and "~65 % overall, 110–150 h" estimate (then in ROADMAP.md) |
|
||||
@@ -0,0 +1,67 @@
|
||||
# UI parity
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** major (first interaction checklist against Pro Tools 2026.4.1) · **Target:** Avid Pro Tools Ultimate 2026.4.1
|
||||
|
||||
How SoundCraft feels in the hands of a Pro Tools user: tools, modes, modifiers, shortcuts,
|
||||
windows, meters. Measured from `crates/model/src/session.rs` (tools, modes), the command
|
||||
registry (shortcuts), `crates/ui-egui/src` (windows, gestures) and user issues; compared with
|
||||
reference screenshots kept locally under `plan/protools/screenshots/` (16, never committed).
|
||||
|
||||
**UI/UX fidelity: ~55 % ready** (estimated). Remaining ≈ 60–100 h.
|
||||
|
||||
Legend: ✅ matches · 🟡 partial · ❌ missing.
|
||||
|
||||
## Tools and modes
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---|---|---|
|
||||
| Tools: Zoom, Trim, Selector, Grabber, Scrubber, Pencil, Smart (7) | ✅ present | Trim variants (TCE, loop, scrub trim) and Grabber variants (separation, object) partial; Multitool fade/trim handles don't adjust audio (#5) |
|
||||
| Edit modes: Shuffle, Slip, Spot, Grid (absolute/relative) | ✅ | Spot dialog present |
|
||||
| Grid and nudge values, all timebases | ✅ | Bars/Beats, Min:Secs, Timecode, Feet+Frames, Samples |
|
||||
| Keyboard focus modes (Commands, Clip List, Groups) | 🟡 | Commands focus single-key editing ✅; list focus partial |
|
||||
| Link timeline/edit, link track/edit, Tab to transient, insertion follows playback | ✅ | |
|
||||
| Mirrored MIDI, MIDI merge, layered editing | 🟡 | Stored and partly honoured |
|
||||
|
||||
## Keyboard and mouse
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---|---|---|
|
||||
| Default shortcuts | 🟡 146 bound (measured: distinct `Some("…")` shortcuts in the registry) | Pro Tools' default set is several hundred incl. numeric keypad and focus keys. Collisions: Mix/Edit toggle vs zoom (#144), Heal (#140), Export (#7) |
|
||||
| Ctrl as Cmd on Windows/Linux | ✅ since #15, #41 still open in some builds | #62 shows Ctrl in labels |
|
||||
| Numeric keypad transport and memory-location recall | 🟡 | Classic / Transport / Shuttle modes not all present |
|
||||
| Modifier gestures (Alt for all tracks, Shift-Alt for selected, Cmd-click fine faders, Ctrl-click defaults) | 🟡 | Main ones on faders and pan; not across every control |
|
||||
| Scroll/zoom: wheel, trackpad pinch | 🟡 | Anchored trackpad zoom in open PRs #112, #137 |
|
||||
| Drag and drop: Clip List → tracks, files → tracks | ✅ macOS/Windows; 🟡 Wayland (PR #150) | |
|
||||
| Context menus (clip, track name, ruler, Clip List) | 🟡 | Clip and track menus exist; depth lower than Pro Tools'; Clip List delete (#4) |
|
||||
|
||||
## Windows and panels
|
||||
|
||||
| Window | Status | Notes |
|
||||
|---|---|---|
|
||||
| Edit window: rulers, track headers, view columns, Clip List, Groups, Tracks list | ✅ | Track Pin (new in 2026.4) ✅ (`track.pin`) |
|
||||
| Mix window: strips, views (inserts, sends, I/O, comments, EQ curve, preamps, instruments, object) | ✅ | Narrow Mix ✅; Delay Compensation view and HEAT missing |
|
||||
| MIDI Editor, Score Editor, Event List | 🟡 | Dock height bug fixed (#113); notation editing shallow |
|
||||
| Transport, Big Counter, Memory Locations, Automation, Video, Universe, Renderer, UI Customization | ✅ present | |
|
||||
| Workspace / sound browser with previews | ❌ | G-16 |
|
||||
| I/O Setup | 🟡 | Busses and paths; no hardware channel matrix (G-01) |
|
||||
| Preferences | 🟡 | Many settings stored, fewer honoured |
|
||||
| Window configurations, Tile/Cascade | 🟡 | Configurations ✅; Tile/Cascade in PR #151 |
|
||||
| Plugin windows | 🟡 | Generic parameter sliders; Pro Tools plugins have bespoke GUIs (#138 asks for skeuomorphic design); multi-page plugin views (#6) |
|
||||
| Command palette (Search) | ✅ | Over every command |
|
||||
|
||||
## Look and meters
|
||||
|
||||
| Feature | Status | Notes |
|
||||
|---|---|---|
|
||||
| Dark theme close to Pro Tools' | ✅ | Light theme (#32) and live system appearance (#85) beyond Pro Tools |
|
||||
| Interface scaling | 🟡 | Slider in PR #147 |
|
||||
| Meter types and ballistics (peak, RMS, VU, K-scales, gain reduction) | 🟡 | Peak/RMS; meter type choice and GR meters partial |
|
||||
| Clip indicators, track colours, waveform views (peak/power/rectified/outlines) | ✅ | |
|
||||
| Fader resolution, fine adjust, numeric entry | 🟡 | |
|
||||
| macOS system menu bar | ✅ | #10 |
|
||||
|
||||
## Revision history
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-10 | major | Created: tools, modes, shortcuts, windows and meters checklist against Pro Tools 2026.4.1 |
|
||||
+1
-1
@@ -113,7 +113,7 @@ fn assets() -> Result<(), String> {
|
||||
}
|
||||
|
||||
fn parity() -> Result<(), String> {
|
||||
cargo(&["run", "-q", "-p", "soundcraft-cli", "--", "parity", "--write", "docs/parity.md"])
|
||||
cargo(&["run", "-q", "-p", "soundcraft-cli", "--", "parity", "--write", "docs/parity-checklist.md"])
|
||||
}
|
||||
|
||||
/// Crates that must compile for the web.
|
||||
|
||||
Reference in new issue
Block a user