Gabe's Audio Workstation is an agent-native, hierarchical DAW built around transparent JSON projects, immutable audio assets, recursive compositions, and ordered first-party processing stacks.
GAW can convert a materialized audio asset into editable MIDI event data with Spotify Basic Pitch. Install the Basic Pitch CLI in the environment used to launch GAW:
uv tool install --python 3.11 --with 'setuptools<81' basic-pitch==0.4.0The setuptools pin works around Basic Pitch 0.4.0's use of the deprecated pkg_resources API.
Right-click an audio asset and choose CONVERT TO MIDI. GAW runs transcription in the background
and adds <source> (MIDI) to the Assets sidebar without changing the source audio. If the executable
is not on PATH, set GAW_BASIC_PITCH to its path before launching GAW.
Drag the resulting MIDI asset onto an event track to create a piano-roll clip. Dropping it elsewhere
creates a new event track with an empty sampler, ready for you to assign sounds. To export the
canonical notes as a Standard MIDI File, use
gaw midi-export <project> <event-data-id> <destination.mid>; the stable ID is shown in the asset
inspector.
Basic Pitch's CSV represents pitch bends per detected note, while GAW's canonical event stream uses one track-wide bend lane. GAW currently imports note pitch, timing, and velocity and omits those per-note bends rather than merging overlapping bends incorrectly.
GAW can split a materialized audio asset into the eight targets provided by
X-LANCE MSR: vocals, guitars, keyboards, bass,
synthesizers, drums, percussions, and orchestral elements. Select an audio asset and choose
STEM SPLITTER… in its inspector or context menu. The generated assets are added atomically under
SPLIT - <original file name> and retain immutable, content-addressed WAV storage.
The bundled integration currently supports Linux with an NVIDIA CUDA GPU; upstream documents inference on an RTX 4090. Create a dedicated Python 3.12 environment before launching GAW:
uv venv --python 3.12 .venv-xlance
uv pip install --python .venv-xlance/bin/python \
-r scripts/xlance-requirements-linux.lock
GAW_XLANCE_PYTHON="$PWD/.venv-xlance/bin/python" cargo run -p gaw-app -- ./projects/my-songThe bundled adapter pins the upstream code and checkpoint revisions. On the first split it clones
the pinned X-LANCE source and downloads only the selected checkpoints from
the official checkpoint repository. A complete
eight-stem setup uses about 4.3 GB of model weights. Set GAW_XLANCE_CACHE to relocate the cache,
GAW_XLANCE_REPO to use an existing checkout, or GAW_XLANCE to replace the bundled adapter with a
compatible executable. Long recordings use a project-local staging area under .gaw/xlance; set
GAW_XLANCE_TIMEOUT_HOURS to change the default six-hour job limit.
The product source of truth is design.md.
gaw-core: canonical domain model, IDs, time, commands, and validationgaw-project: project storage, media import, recovery journal, and derived cachegaw-dsp: instruments, effects, analyzers, and render-safe processor contractsgaw-stretch: safe single-owner Signalsmith Stretch backendgaw-audio: render graph, transport, scheduling, device I/O, and background renderinggaw-app: nativeeguiapplicationgaw-cli: structured agent and developer command-line interface
cargo test --workspace
cargo run -p gaw-cli -- --helpBefore constructing an edit, inspect the machine-readable Draft 2020-12 schemas:
gaw schema transaction
gaw schema processorProcessor-bearing schemas include a top-level x-gaw-processor-catalog extension. It is the
authoritative catalog for defaults, exact numeric and unit-specific bounds, array limits, enum
choices, automation support, indexed band/step paths, and cross-field constraints to satisfy before
gaw apply.
Create and open a persistent project:
cargo run -p gaw-cli -- create ./projects/my-song --name "My Song" --bpm 120 --sample-rate 48000
cargo run -p gaw-app -- ./projects/my-songThe app recovers a pending crash journal by default. Recovery can also be inspected or replayed explicitly before startup, and startup can instead discard or reject pending recovery:
cargo run -p gaw-cli -- recover ./projects/my-song --dry-run
cargo run -p gaw-cli -- recover ./projects/my-song
cargo run -p gaw-app -- ./projects/my-song --recovery recover
cargo run -p gaw-app -- ./projects/my-song --recovery discard
cargo run -p gaw-app -- ./projects/my-song --recovery abortRun the bundled non-persistent UI fixture with:
cargo run -p gaw-app -- --demo