Producer is a studio over a project — the file every edit lands in. The session grid, the arrangement, the stage, the code, the device chain: screens over one document, one history, one undo. Below are the designed screens of the build, in the order you meet them. The language underneath →
A project is the file Producer writes: the composition, its diff log, the stage and the arrangement. First run offers three ways to start one — capture the session that is playing right now, seed a project from an Atlas scene, or go blank — and the player keeps running underneath while the project opens.
the project is the editable document · there is no other state to keep in sync
The session grid: sections × tracks of clips, mixer strips below with per-track meters, the device chain under the selected clip, the composer prompt at the right next to the diff log of everything it changed. Ask in plain words; the change arrives as a diff you can read before it lands.
every edit is a validated diff · the meters read engine telemetry, they are not animation
The timeline of sections and clips. Drag a clip to move it, grab its edge to trim; the edit waits as the diff it will become, validates, then lands with the section boundary — with automation lanes drawn where the knobs are being driven.
edits are future-anchored · they only ever touch music that has not played yet
A top-down stage where each voice sits at an azimuth, elevation and distance; motion — an orbit, a drift — is an automation lane like any other. The placement you see folds down to the stereo pan you hear.
stereo renders today · binaural and multichannel follow the output device later
The project in its own language: sections fold, the playing region highlights, a diagnostic lands under the line that failed validation with the fix one keystroke away, and saving writes the same document the engine performs.
an edit that does not validate never reaches the engine · the log says REFUSED
The chain under a track: the instrument at the head, inserts, sends, glue. Knobs write the same parameter paths automation writes — the dot on a knob means a lane is moving it right now — and reordering the chain lands as one diff.
every knob is aset_param at the next boundary · the chain lands as one set_inserts
designed screens of the build in progress, rendered from the design — not photographs of the shipped app.
Everything above runs on the same three rules. Your gesture, a DJ move, a Shortcuts automation and the composer's proposal all become the same validated edit, in the same history, with the same undo — there is no privileged path and no hidden state. What you touch locks; the composer works around it until you release it.
Every edit — by hand, by move, by model — is a diff that passes the validator before the engine ever sees it. Bounds, schema, CPU budget; a failed edit is refused with a reason, not applied on best effort.
Diffs land at bar boundaries, on music that has not played yet. Steering never clicks, the stream never starves, and the playhead never interrupts.
The stage and the code view are read-only projections of the project; the grid, the arrangement and the chain edit it. Different screens, different rights — the same document all the way down.
The app installs with Listen; the editing surface appears the moment you want it — no extra purchase, no separate app, same document underneath.