ucdaw talks to Studio Pro the way the Studio Pro Remote iPad app does: over
the local network, with Studio Pro in the background. Every change is read back
from Studio Pro before ucdaw reports it, and every answer is one plain line.
The same engine is exposed three ways:
- the
ucdawCLI, ucdaw serve, a background process that holds one session open (answers in about 40 ms instead of 0.4–3 s),ucdaw mcp, registered in Claude Code asstudio-pro-ucnet.
First checks
command -v ucdaw # installed? (go install ./cmd/ucdaw from the ucmix repo)
ucdaw discover # is Studio Pro on the network?
ucdaw state # what is in the song?
If discover finds nothing: Studio Pro must be open with a song, and its
Remote service on. Keep ucdaw serve running in a terminal for instant answers.
--host <ip> (or UCDAW_HOST) trusts only Studio Pro at that address.
Musician-level commands
ucdaw song new --tempo 72 --click on # new empty song; the open one stays in its tab
ucdaw transport play --bars 4 # play 4 bars, then stop
ucdaw transport play --for 2s # play 2 seconds, then stop
ucdaw transport play | stop | rtz # plain play keeps going until stop
# A timed play that someone stops (or restarts) in Studio Pro is left alone.
ucdaw transport loop on|off # needs a loop range in the song
ucdaw click on|off # metronome
ucdaw tempo 96 # bpm; `ucdaw tempo` reads it
ucdaw track add mono --name Guitar # mono or stereo audio track
ucdaw track add --name Guitar --insert "my clean guitar" # with a plug-in or favorite
ucdaw insert Guitar "Guitar Rig 7" --preset Clean
ucdaw instrument add "Syntronik 2" --name Pad [--preset P] # instrument track, preset read back
ucdaw fader Pad -6 | --down 3 | --up 2 # dB, on Studio Pro's own curve
ucdaw plugins rig # installed effects and instruments
ucdaw presets "Pro EQ" [filter] # a plug-in's Studio Pro presets
ucdaw state # song summary; `ucdaw state mixer/channel/ch1` for every value
Mixing: measure, trim, gain-stage
Read mixing.md before changing any level. It is the engineer's workflow: measure first, trim fixes the stem, faders set the balance, never normalize to peak, never reset the musician's balance without asking, ear notes become small dB moves, every change reported with numbers.
ucdaw analyze # every audio track's stem in the open song
ucdaw analyze Bass Drums # the stems imported onto these tracks
ucdaw analyze ~/Music/stems # files or folders; no Studio Pro needed
ucdaw trim Bass 20 | -6 | --up 3 # input trim (Input Gain), -24..+24 dB
ucdaw gainstage [tracks] [--target -18] # every trim to the target; faders untouched
analyze reports per stem: average (RMS over active audio; gaps below
-60 dBFS left out), peak, integrated LUFS (ITU-R BS.1770), active time, silent
("Loops is silent: an empty export"), clipping, and the trim that brings it to
the -18 dBFS target. A track name is resolved from ucdaw's import log, or from
the song's waveform cache plus Spotlight (checked by length in frames).
Negative levels work as plain arguments: ucdaw fader Drums -3.
Starting a new song
ucdaw song new # the New window's current template and settings
ucdaw song new --tempo 72 --click on # "a new song at 72 with the click on"
Runs File > New, presses OK in Studio Pro's New window (found by its label),
waits until Studio Pro reports the new song's name (the date and the user's name,
"(2)" for a second one that day), then sets tempo and click and reads them back:
"Started a new song (2026-10-12 Stephen Clarke) at 72 bpm, click on." The song
that was open stays open in its own tab; nothing is saved or closed. serve
follows the new song without reconnecting. If Studio Pro shows any other window
instead, ucdaw closes it with its Cancel (or No) button and says so, or leaves it
open for the musician when no button just cancels. command run "File > New Session"
only cancels the New window and points here.
Arrangement (arranger sections)
ucdaw section # Verse bar 1 (8 bars), Chorus bar 9 …
ucdaw section add Verse Chorus Bridge [--bars 8] # appended at the end
ucdaw section repeat Chorus after Bridge # "repeat chorus one after the bridge"
ucdaw section duplicate Chorus # copy right after itself
ucdaw section move Bridge before "Chorus 2" # two undo steps
ucdaw section delete Bridge # gap closes
ucdaw section rename 1 Intro
ucdaw section play Chorus --bars 4 # "play from the chorus"
Sections are named by name, number, or name and occurrence ("Chorus 2", "second chorus", "last chorus"). Everything in a section's time moves with it. Each edit is confirmed from the arranger list Studio Pro sends back.
Audio edits
ucdaw audio fade-out Guitar [--bars 1] # "crossfade the end of the take"
ucdaw audio fade-in Guitar
ucdaw audio split Guitar 9 # at bar 9
ucdaw audio trim-end Guitar 17
ucdaw audio crossfade Guitar [--ms 10]
ucdaw audio quantize Guitar
They act on every event of the track. Studio Pro does not report audio events to remote apps, so these are sent but not read back, and the answer says so.
Importing stems
ucdaw import ~/Music/stems # every WAV/AIFF in the folder, in name order
ucdaw import Kick.wav Snare.wav # files
ucdaw import Vox.wav --onto Vox --at 17 # onto an existing track, at bar 17
Each file gets its own new track, mono or stereo to match the file, named for a musician ("01_Kick_Final.wav" → Kick, "03-Pad (Stereo) v2.wav" → Pad; a prefix every file shares, like the song name, is dropped), with its clip at bar 1 and the clip renamed to match. Files go in one at a time; other files in the folder are skipped and named in the answer.
What is read back: each track (created, named, selected, mono or stereo). What is
not: the clip's position, because Studio Pro does not report clips to remotes.
ucdaw knows Studio Pro read each file from the waveform it draws into the song's
Cache/Images folder; a file the song has seen before gets a two-second wait
instead. Pass the "not read back" part on to the musician.
- Studio Pro must be on this Mac: ucdaw hands it each file with
open. - Undo is about three
Edit > Undopresses per stem; press it untilget_songno longer lists the tracks. - A conversion question from Studio Pro is accepted (the musician wants the stems in); any other dialog is closed with its Cancel button and reported, or left open for the musician when no button just cancels.
Favorites
ucdaw favorite set "clean guitar" "Guitar Rig 7" --preset Clean
ucdaw favorite set "worship synth" "Syntronik 2"
ucdaw favorite list | remove <name>
insert, track add --insert and instrument add take a favorite wherever
they take a plug-in ("my clean guitar" works). A preset must be a Studio Pro
preset: a sound saved only in Guitar Rig's own browser has to be saved once
from the preset menu at the top of the plug-in window in Studio Pro.
Anything else: Studio Pro's own commands
Studio Pro advertises its whole command list (about 1,450 commands in 52 categories: every menu item and key command) to the remote. Run any of them:
ucdaw command list undo
ucdaw command run "Edit > Undo"
ucdaw command run Track "Add Audio Track (stereo)"
ucdaw command run "Zoom > Zoom Full"
ucdaw command run Transport "Forward Bar" --arg Bars=4 # arguments, as macros carry them
ucdaw reports what changed ("removed Guitar Rig 7 from Guitar"). View and editing commands change nothing Studio Pro reports; the answer says so. Commands act on the current selection, like their menu items.
If a command opens a dialog (it needs choices), ucdaw presses its Cancel (or No, Don't…) button at once and says so, so Studio Pro is not left blocked. It never chooses for the musician: a dialog with no such button (Save / Don't Save, Yes / OK) stays open and the answer names it and its buttons; ask the musician to answer it in Studio Pro. A dialog about saving, discarding, deleting, removing, overwriting or closing is never answered by ucdaw, even with Cancel.
Parameters by path
The full remote object model (from Studio Pro's own dawremote.xml) is listed
by ucdaw params [filter], one line per pattern (mixer/channel/ch<n>/mute).
ucdaw param get mixer/channel/ch1/volume
ucdaw param set mixer/channel/ch1/mute on
ucdaw param set mixer/channel/ch1/label "Lead Vox"
ucdaw param set mixer/channel/ch1/volume -6 # dB; "60%" sets fader travel
Values are in the parameter's own units: on/off for switches, bpm for tempo, dB for faders, sends and cue mixes, list entries by name.
MCP tools (studio-pro-ucnet)
get_song, new_song (tempo, click), analyze_audio, trim, gain_stage, transport, click, tempo, add_track, add_insert,
add_instrument, import_audio, section, audio_edit, fader, favorite,
list_plugins, list_presets, get_values, get_param, set_param,
list_params, list_commands, run_command (with args). Start with
get_song. Undo is run_command Edit / Undo.
Rules
- Never save, record, arm, open, close or switch songs, or quit Studio Pro,
unless the musician asks for exactly that. Start a new song (
song new,new_song) only when they ask for one. - After a test that changes the song, undo it. Tempo is not in Studio Pro's undo history; set it back. A fader move is not reliably undone either; set the old level back.
- Plug-in presets are Studio Pro presets, named relative to the plug-in's
preset folder:
Misc/50 Hz Removal. A preset that is not found leaves the plug-in on default settings and the answer says so. --jsonon any command gives structured output.