You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Queue an audio → MIDI transcription (raw audio bytes)
Commands (146 total)
Device Management (21 commands)
Command
Description
Parameters
device_list
List all connected devices with settings
—
device_refresh
Refresh device list from hardware
—
device_info
Get device details
deviceId
device_set_properties
Set device properties
deviceId, properties
device_enable
Enable/disable device
deviceId, enabled
device_identity_request
Request SysEx identity
deviceName, deviceId?
device_save_sysex_identity
Save SysEx identity
deviceId, channel?, identity
instrument_update_settings
Update instrument settings
deviceId, channel, settings
instrument_get_settings
Get instrument settings
deviceId, channel?
instrument_update_capabilities
Update instrument capabilities
deviceId, channel, capabilities
instrument_get_capabilities
Get instrument capabilities
deviceId, channel?
instrument_list_capabilities
List all instrument capabilities
—
instrument_list_registered
List registered instruments
—
instrument_list_connected
List connected instruments
—
instrument_delete
Delete instrument
deviceId, channel?
instrument_add_to_device
Add instrument to device channel
deviceId, channel, config
instrument_list_by_device
List instruments on device
deviceId
instrument_create_virtual
Create virtual instrument
name, preset, channel, config
virtual_create
Create virtual device
name
virtual_delete
Delete virtual device
deviceId
virtual_list
List virtual devices
—
MIDI Messages (8 commands)
Command
Description
Parameters
midi_send
Send raw MIDI message
deviceId, type, message data
midi_send_note
Send note on/off
deviceId, channel, note, velocity, duration?
midi_send_cc
Send Control Change
deviceId, channel, controller, value
midi_send_pitchbend
Send Pitch Bend
deviceId, channel, value
midi_panic
All sound off on all channels
deviceId
midi_all_notes_off
All notes off on all channels
deviceId
midi_reset
MIDI System Reset
deviceId
File Management (WebSocket commands)
Upload + download moved to HTTP in v6. Uploads use
POST /api/files (raw binary body) and downloads stream from
GET /api/files/:id/blob. The legacy file_upload WS command is
gone; file_export now returns { url, contentHash, size, ... }
instead of an inline base64 payload. See "HTTP endpoints" below.
Command
Description
Parameters
file_list
List files in folder
folder? (default '/')
file_metadata
Get file metadata
fileId
file_read
Read MIDI file for editing
fileId
file_write
Write MIDI file from editor
fileId, midiData
file_delete
Delete file
fileId
file_save_as
Save with new name
fileId, newFilename, midiData
file_rename
Rename file
fileId, newFilename
file_move
Move file to folder
fileId, folder
file_duplicate
Duplicate file (no-op when content_hash exists)
fileId
file_export
Return signed download metadata {url}
fileId
file_search
Search files
query
file_filter
Advanced filtering
Multiple filter criteria
file_channels
Get MIDI channels
fileId
file_reanalyze_all
Reanalyze all files
—
file_routing_status
Get routing status
fileId
midi_instruments_list
List distinct instruments
—
midi_categories_list
List instrument categories
—
HTTP endpoints
Method
Path
Body / Query
Response
POST
/api/files?filename=&folder=
Raw MIDI bytes (Content-Type: application/octet-stream), capped at MAX_MIDI_FILE_SIZE
201 {fileId, contentHash, status:'created', ...} or 200 {status:'duplicate'} if content already known
GET
/api/files/:id/blob[?dl=1]
—
200 streaming audio/midi; ETag is the SHA-256 content hash
Same-origin browser requests skip the bearer-token check; external
clients must send Authorization: Bearer <GMBOOP_API_TOKEN>.
WS events (server → client)
Event
Payload
When
file_upload_progress
{uploadId, stage}
Emitted during POST /api/files for stages: received, hashed, parsed, analyzed, stored
file_uploaded
{fileId, filename, contentHash}
Once a file row is committed
file_list_updated
{files: [...]}
After any CRUD on the library
file_delete
{fileId}
After a file row + blob is deleted
file_write
{fileId, contentHash}
After the editor saves new bytes
playback_status, playback_position
scheduler state
High-frequency push during playback
playlist_item_changed, playlist_waiting
queue state
Multi-file playback transitions
monitor_event
live MIDI message
Routing monitor stream
device_connected, device_disconnected
{deviceId, ...}
Hot-plug detection
latency_calibration_complete
{deviceId, latency, min, max}
After latency_measure finishes
API surface not consumed by the bundled SPA
These WS commands are exposed for external clients or future UI work
but the current SPA does not call them. They are NOT dead — removing
them would break programmatic clients. Listed here so contributors
know the gap on the UI side:
route_* (CRUD on static device-to-device routes) — the SPA uses
per-file routing (file_routing_sync) instead.
midi_panic — no emergency-stop button wired in the SPA.
file_export — the SPA downloads via GET /api/files/:id/blob?dl=1
directly; this command duplicates the URL returned by file_metadata.
file_channels, playlist_status — diagnostic queries, no UI surface.
latency_measure / _set / _get / _list / _delete /
_auto_calibrate / _recommendations / _export — the SPA uses
the calibrate_* family. Profiles are persisted on the device's
channel-0 row of instruments_latency (sync_delay, avg_latency,
min_latency, max_latency, last_calibration) and reloaded at
every boot via LatencyCompensator.loadProfilesFromDB.
Optional feature — see AUDIO_TRANSCRIPTION.md. On a
server with no engine installed every command still answers: capabilities
report disabled/degraded and the others fail with a typed
ERR_TRANSCRIPTION_* code rather than an internal error.