OMNi

OmniDAW API · 74 min

Method Reference

Every OmniDAW API method with its parameters, effect and a ready-to-send request.

All 102 methods of OmniDAW API 0.21.0, generated from the live catalog (api.methods) of Omni, so this page always matches the API. Each method shows its effect (see Protocol and conventions), its parameters, and the request line you send over the connection.

Parameters are closed objects: an unknown or misspelled field is an invalid_params error. A track is referenced by its id (UUID string) or its 0-based index. Time is always in beats, levels in dB. The method descriptions are the same text an AI model receives as a tool description.

DomainMethods
Sessionsession.info, session.save
Transporttransport.get, transport.play, transport.stop, transport.set_tempo, transport.seek
Tempo maptempo.get, tempo.set_map, tempo.set_time_signatures
Groovegroove.get, groove.set, groove.set_track
Trackstracks.list, tracks.create, tracks.update, tracks.delete, tracks.duplicate, tracks.set_instrument, tracks.move
Instrumentsinstruments.list, instruments.presets, instruments.load_preset
Scenesscenes.list, scenes.launch, scenes.update
Clipsclips.generate_melody, clips.list, clips.get_notes, clips.write_midi, clips.launch, clips.stop, clips.write_progression, clips.write_drums, clips.duplicate, clips.transform, clips.set_length, clips.clear, clips.write_slices
Music theorytheory.scale, theory.chord, theory.progression, theory.harmonize, theory.analyze, theory.library, theory.vocabulary
Arrangementarrangement.get, arrangement.build_song, arrangement.place_clip, arrangement.clear, arrangement.edit_clip, arrangement.copy_clip, arrangement.remove_clip, arrangement.set_loop, arrangement.play
Markersmarkers.add, markers.remove
Automationautomation.list, automation.write, automation.clear
Audio filesaudio.import, audio.transcribe, audio.split_stems
Samplersampler.get, sampler.set, sampler.slice
Effectsdevices.types, devices.list, devices.get, devices.add, devices.remove, devices.set_bypass, devices.set_params
MIDI effectsmidi_fx.types, midi_fx.list, midi_fx.get, midi_fx.add, midi_fx.remove, midi_fx.set_params, midi_fx.render, midi_fx.set_bypass
Mixermixer.add_return, mixer.remove_return, mixer.get, mixer.set_send, mixer.set_master, mixer.set_return
Parametersparams.list, params.set
Metersmix.meters
Analysisanalysis.capture, analysis.file, analysis.compare
Jobsjobs.get, jobs.wait
Masteringmaster.targets, master.check, master.build_chain
Exportexport.render, export.stems
Undo and redoedit.undo, edit.redo

Session

Project information and saving.

session.info

Session Info · Effect: read · idempotent · since 0.1.0 · MCP tool: session_info

Overview of the open project: name, unsaved changes, sample rate, number of tracks, scenes and return buses, and whether the audio engine runs. Call this first to orient yourself.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"session.info","params":{}}

session.save

Save Project · Effect: control · idempotent · since 0.10.0 · MCP tool: session_save

Save the project with its audio collected next to it, to its own file or to an absolute .omni path (a new name becomes the project's). Does not overwrite another existing file unless asked.

ParameterTypeRequiredDescription
overwritebooleanReplace another existing file (default false).
pathstringAbsolute .omni path (default: the project's own).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"session.save","params":{"path":"C:/Music/song.omni"}}

Transport

Play, stop, seek and the project tempo.

transport.get

Transport State · Effect: read · idempotent · since 0.1.0 · MCP tool: transport_get

Play / record state, tempo (BPM), time signature and the playhead position in beats.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"transport.get","params":{}}

transport.play

Play · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_play

Start playback from the playhead. Does nothing if already playing.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"transport.play","params":{}}

transport.stop

Stop · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_stop

Stop playback (and a running recording, which is then kept).

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"transport.stop","params":{}}

transport.set_tempo

Set Tempo · Effect: edit · idempotent · since 0.1.0 · MCP tool: transport_set_tempo

Set the project tempo in BPM (40-240). Arrangement clips keep their musical position. Undoable.

ParameterTypeRequiredDescription
bpmnumberyesTempo in beats per minute. Range: 40 to 240.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"transport.set_tempo","params":{"bpm":124.0}}

transport.seek

Move Playhead · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_seek

Move the playhead to a song position in beats (0 = song start).

ParameterTypeRequiredDescription
beatnumberyesSong position in beats. Range: 0 to 1000000.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"transport.seek","params":{"beat":16.0}}

Tempo map

Tempo changes and ramps over the song, time signature changes.

tempo.get

Get Tempo Map · Effect: read · idempotent · since 0.18.0 · MCP tool: tempo_get

The project tempo, the tempo map (tempo changes and ramps over the song) and the time signature changes.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tempo.get","params":{}}

tempo.set_map

Set Tempo Map · Effect: edit · idempotent · since 0.18.0 · MCP tool: tempo_set_map

Replace the tempo map: points at song beats with a tempo, each a step or a linear ramp to the next. Timeline clips, automation, markers and the loop stay on their beats. Empty points = one tempo (transport.set_tempo). A step at a section boundary plays exactly; a ramp inside a MIDI clip is followed block by block. Undoable.

ParameterTypeRequiredDescription
points{beat, bpm, curve}[]yesTempo points in time order. Up to 256 items.

Fields of points[]:

ParameterTypeRequiredDescription
beatnumberyesSong position in beats. Range: 0 to 1000000.
bpmnumberyesTempo from here. Range: 20 to 999.
curvestringstep = jump here, linear = ramp to the next point. One of: step, linear.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tempo.set_map","params":{"points":[{"beat":0,"bpm":174},{"beat":96,"bpm":174,"curve":"linear"},{"beat":128,"bpm":160}]}}

tempo.set_time_signatures

Set Time Signatures · Effect: edit · idempotent · since 0.18.0 · MCP tool: tempo_set_time_signatures

Replace the time signature changes: from a bar on, so many beats of a unit (7/8, 3/4, …). Empty = the project signature everywhere. Undoable.

ParameterTypeRequiredDescription
points{bar, denominator, numerator}[]yesSignature changes in bar order. Up to 256 items.

Fields of points[]:

ParameterTypeRequiredDescription
barintegeryesBar (0-based) where it starts. Range: 0 to 100000.
denominatorintegeryesBeat unit. One of: 1, 2, 4, 8, 16, 32.
numeratorintegeryesBeats per bar. Range: 1 to 32.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tempo.set_time_signatures","params":{"points":[{"bar":0,"denominator":4,"numerator":4},{"bar":16,"denominator":8,"numerator":7}]}}

Groove

The project groove (swing, push, humanize) and which tracks play straight.

groove.get

Get Groove · Effect: read · idempotent · since 0.18.0 · MCP tool: groove_get

The project groove every clip follows (unless its track opts out): style, amount, grid, accent, lean, humanize; and which tracks play straight.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"groove.get","params":{}}

groove.set

Set Groove · Effect: edit · idempotent · since 0.18.0 · MCP tool: groove_set

Change the project groove (fields left out stay): style (straight, mpc, jazz, nested, push, drunk, samba, waltz, custom), amount 0-1, grid 8th/16th/32nd, accent, lean_ms, humanize_ms, humanize_vel, seed. Picking a style without amount or grid takes the style's own. Undoable.

ParameterTypeRequiredDescription
accentnumberDepth of the style's dynamics. Range: -1 to 1.
amountnumber0 = straight, 1 = the style's full shape. Range: 0 to 1.
gridstringSubdivision that swings. One of: 8th, 16th, 32nd.
humanize_msnumberRandom timing up to this many ms. Range: 0 to 30.
humanize_velnumberRandom velocity, 0-1. Range: 0 to 1.
lean_msnumberBeats 2 and 4 late (+) or early (-). Range: -40 to 40.
seedintegerHumanize seed. Range: 0 to 4294967295.
stylestringGroove style. One of: straight, mpc, jazz, nested, push, drunk, samba, waltz, custom.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"groove.set","params":{"amount":0.55,"humanize_ms":4,"style":"mpc"}}

groove.set_track

Track Groove · Effect: edit · idempotent · since 0.18.0 · MCP tool: groove_set_track

Whether a track follows the project groove (false = it plays straight, e.g. a tight bass under swung hats). Undoable.

ParameterTypeRequiredDescription
followbooleanyesFollow the groove.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"groove.set_track","params":{"follow":false,"track":1}}

Tracks

Create, edit, move, duplicate and delete tracks; set their instrument.

tracks.list

List Tracks · Effect: read · idempotent · since 0.1.0 · MCP tool: tracks_list

Every track in mixer order with its id, kind (midi/audio/group/vca), instrument, fader (dB), pan, mute/solo/arm, colour, group, insert effects and send levels. Use the ids in later calls; indices shift when tracks move.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.list","params":{}}

tracks.create

Create Track · Effect: edit · since 0.1.0 · MCP tool: tracks_create

Add a track at the end. kind 'midi' plays notes through an instrument: pass an instrument from instruments.list: a builtin URI or an installed plugin (its uri = path, or its name). Without one the track is silent. Plugins load in the background: their parameters show in params.list a moment later. kind 'audio' plays samples. Returns the new track. Undoable.

ParameterTypeRequiredDescription
instrumentstringinstruments.list uri (builtin or plugin) or plugin name (MIDI only).
kindstringyesTrack type. One of: midi, audio.
namestringTrack name (default: the instrument's name).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.create","params":{"instrument":"builtin://omni-synth","kind":"midi","name":"Bass"}}

tracks.update

Update Track · Effect: edit · idempotent · since 0.1.0 · MCP tool: tracks_update

Change a track's name, fader (volume_db, up to +6 dB), pan (-1..1), mute, solo or colour. Only the fields given change. Returns the track. One undo step (solo is monitoring and is not recorded).

ParameterTypeRequiredDescription
colorstringColour as #rrggbb.
mutebooleanMute.
namestringNew name.
pannumberPan, -1 left .. +1 right. Range: -1 to 1.
solobooleanSolo.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
volume_dbnumberFader in dB; -120 or lower = fully down. Range: -200 to 6.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.update","params":{"pan":-0.2,"track":0,"volume_db":-6.0}}

tracks.delete

Delete Track · Effect: destructive · since 0.2.0 · MCP tool: tracks_delete

Delete a track with its clips, devices and automation. Groups are not deleted this way (ungroup first). Indices of later tracks shift down. Undoable: undo rebuilds the whole track, instrument state included.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.delete","params":{"track":2}}

tracks.duplicate

Duplicate Track · Effect: edit · since 0.15.0 · MCP tool: tracks_duplicate

Copy a track (instrument, clips, effects, mixer settings, automation) right after it, named '<name> (Copy)'. A plugin instrument loads in the background: the copy shows in tracks.list a moment later. Undoable.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.duplicate","params":{"track":1}}

tracks.set_instrument

Set Instrument · Effect: edit · idempotent · since 0.3.0 · MCP tool: tracks_set_instrument

Replace the instrument of a MIDI track with one from instruments.list (builtin, or an installed plugin, loaded in the background). The track keeps its name, clips, effects and mixer settings. Undoable: undo brings the previous instrument back with its sound.

ParameterTypeRequiredDescription
instrumentstringyesinstruments.list uri, or a plugin name, e.g. Surge XT.
namestringNew track name (default: keep it).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.set_instrument","params":{"instrument":"builtin://piano-synth","track":0}}

tracks.move

Move Track · Effect: edit · idempotent · since 0.3.0 · MCP tool: tracks_move

Move a track (a group with all its members) right before another track, joining that track's group, or to the end when 'before' is absent. Returns the new track order. Undoable.

ParameterTypeRequiredDescription
beforestring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"tracks.move","params":{"before":0,"track":3}}

Instruments

Built-in and plugin instruments, and the presets of a plugin.

instruments.list

List Instruments · Effect: read · idempotent · since 0.1.0 · MCP tool: instruments_list

Instruments that tracks.create can load: name, family and the URI to pass as 'instrument'; installed plugins (group Plugin, with vendor and format) after the builtins. Families: Synth (Omni Synth = subtractive/wavetable all-rounder), Keys (Piano), Physical model (strings, winds, plucked, mallets), Drums (TOMNIC drum synth), Image to sound, DJ.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"instruments.list","params":{}}

instruments.presets

List Presets · Effect: read · idempotent · since 0.14.0 · MCP tool: instruments_presets

Preset files (.fxp) installed with the external plugin on a track, e.g. Surge XT's factory patches: name, category (their folders) and path. Filter with query words ("bass reese", "leads"); pages of up to 200.

ParameterTypeRequiredDescription
limitintegerAt most this many (default 200). Range: 1 to 200.
offsetintegerSkip this many matches. Range: 0 to 1000000.
querystringWords that must all appear in the name or category.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"instruments.presets","params":{"query":"leads","track":4}}

instruments.load_preset

Load Preset · Effect: edit · idempotent · since 0.14.0 · MCP tool: instruments_load_preset

Load a preset file (from instruments.presets) into the plugin on a track: its whole sound, as the plugin's own preset browser would. Then params.list shows the new values to tweak. Undoable.

ParameterTypeRequiredDescription
pathstringyesPreset file path from instruments.presets.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"instruments.load_preset","params":{"path":"C:/Program Files/Common Files/CLAP/Surge Synth Team/SurgeXTData/patches_factory/Leads/Moogy Saw.fxp","track":4}}

Scenes

The scene rows of the session grid.

scenes.list

List Scenes · Effect: read · idempotent · since 0.2.0 · MCP tool: scenes_list

Scene rows of the session: index, name, colour and how many tracks have a clip in the row. Clip slot N of every track belongs to scene N.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"scenes.list","params":{}}

scenes.launch

Launch Scene · Effect: control · idempotent · since 0.2.0 · MCP tool: scenes_launch

Launch every clip of a scene row together, quantised like a click on the scene. Starts the transport unless start_transport is false.

ParameterTypeRequiredDescription
sceneintegeryes0-based scene row. Range: 0 to 255.
start_transportbooleanStart playback if stopped (default true).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"scenes.launch","params":{"scene":0}}

scenes.update

Update Scene · Effect: edit · idempotent · since 0.3.0 · MCP tool: scenes_update

Rename or recolour a scene row (e.g. 'Intro', 'Drop'). Undoable.

ParameterTypeRequiredDescription
colorstring#rrggbb, or empty for the default colour.
namestringNew name.
sceneintegeryes0-based scene row. Range: 0 to 255.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"scenes.update","params":{"name":"Verse","scene":0}}

Clips

Session clips: notes, chords, drums, slices and melodies.

clips.generate_melody

Generate Melody · Effect: edit · idempotent · since 0.15.0 · MCP tool: clips_generate_melody

Write a melody into a MIDI slot with the piano roll's melody generator: a style (stepwise_flow, minimal_cell, classical_arch, funk_groove, celtic_reel, bebop_line, arpeggio_loop, synth_arp, sequence_run, ambient_drift, tension_build, modal_motive), a key, bars, register and density. It sits on the chords of the slot's chord lane, or of chords_from (e.g. the pad slot written by clips.write_progression). Same seed, same melody. Undoable.

ParameterTypeRequiredDescription
barsintegerBars to write (default 4). Range: 1 to 16.
chords_from{slot, track}
densitystringNotes per bar (default medium). One of: sparse, light, medium, dense, very_dense.
key{mode, root}yes
registerstringPitch range (default mid). One of: low, mid, high, full.
seedintegerSame seed, same melody (default 1). Range: 0 to 9223372036854775807.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
stylestringyesMelody style. One of: stepwise_flow, minimal_cell, classical_arch, funk_groove, celtic_reel, bebop_line, arpeggio_loop, synth_arp, sequence_run, ambient_drift, tension_build, modal_motive.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of chords_from:

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of key:

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.generate_melody","params":{"bars":8,"chords_from":{"slot":0,"track":2},"key":{"mode":"minor","root":"F"},"register":"high","slot":0,"style":"synth_arp","track":4}}

clips.list

List Clips · Effect: read · idempotent · since 0.1.0 · MCP tool: clips_list

The session clip slots (scene rows) of a track: empty or not, kind (midi/audio/sequencer), loop length in beats, note count, playing / queued.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.list","params":{"track":0}}

clips.get_notes

Read Clip Notes · Effect: read · idempotent · since 0.1.0 · MCP tool: clips_get_notes

Notes of a session MIDI clip (pitch, start and duration in beats, velocity) and its loop length.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.get_notes","params":{"slot":0,"track":0}}

clips.write_midi

Write MIDI Clip · Effect: edit · idempotent · since 0.1.0 · MCP tool: clips_write_midi

Write notes into a session clip slot of a MIDI track, creating the clip if the slot is empty. mode 'replace' (default) leaves exactly these notes, 'merge' adds them. length_beats sets the loop (default: the notes rounded up to whole bars). Times are in beats from the clip start (1 beat = a quarter note; in 4/4 a bar is 4 beats). The clip loops; launch it with clips.launch. Undoable.

ParameterTypeRequiredDescription
length_beatsnumberLoop length in beats. Range: 0.25 to 1024.
modestringReplace or merge the clip's notes. One of: replace, merge.
notes{chance, duration, pan, pitch, pitch_offset, pressure, start, timing, velocity, volume}[]yesNotes to write. Up to 4096 items.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of notes[]:

ParameterTypeRequiredDescription
chancenumberChance it plays each pass, 0-1 (default 1). Range: 0 to 1.
durationnumberyesLength in beats. Range: 0.0001 to 1024.
pannumberPer-note pan, -1 left to 1 right. Range: -1 to 1.
pitchintegeryesMIDI note number (60 = middle C). Range: 0 to 127.
pitch_offsetintegerPitch offset in semitones. Range: -24 to 24.
pressurenumberPoly pressure during the note, 0-1. Range: 0 to 1.
startnumberyesStart from the clip start, in beats. Range: 0 to 1024.
timingnumberMicro-timing in beats (- early, + late). Range: -0.25 to 0.25.
velocityintegerVelocity 1-127 (default 100). Range: 1 to 127.
volumenumberSustained note volume, 0-1 (default 1). Range: 0 to 1.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.write_midi","params":{"length_beats":4.0,"notes":[{"duration":0.5,"pitch":48,"start":0.0,"velocity":110},{"duration":0.5,"pitch":55,"start":1.0}],"slot":0,"track":0}}

clips.launch

Launch Clip · Effect: control · idempotent · since 0.1.0 · MCP tool: clips_launch

Play a session clip, quantised like a click on its slot. Starts the transport unless start_transport is false.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
start_transportbooleanStart playback if stopped (default true).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.launch","params":{"slot":0,"track":0}}

clips.stop

Stop Clips · Effect: control · idempotent · since 0.1.0 · MCP tool: clips_stop

Stop the session clip of one track, or of every track when no track is given.

ParameterTypeRequiredDescription
trackstring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.stop","params":{"track":0}}

clips.write_progression

Write Progression · Effect: edit · idempotent · since 0.2.0 · MCP tool: clips_write_progression

Render a chord progression (text, library or generated, see theory.progression) into a session slot of a MIDI track and set the clip's chord lane, so the user sees the chords in the piano roll. The loop length is the progression's. Replaces the clip's notes. Undoable.

ParameterTypeRequiredDescription
progression{chords, generate, key, library, perform}yes
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of progression:

ParameterTypeRequiredDescription
chordsstringRoman numerals or chord symbols. Each chord is one bar unless bars are marked: '|' separates bars and splits one between its chords, 'I:2' = 2 beats, '.' holds, '%' repeats the bar. E.g. 'ii7 V7 Imaj7 Imaj7', 'Am F C G', '| I | vi | IV V |'.
generate{bars, complexity, seed, style}
key{mode, root}yes
librarystringName of a progression from theory.library.
perform{bass, centre, chords, humanise, pattern, top, velocity}

Fields of progression.generate:

ParameterTypeRequiredDescription
barsintegerLength in bars (default 4). Range: 1 to 64.
complexitynumber0 triads .. 1 extended/altered. Range: 0 to 1.
seedintegerSame seed = same progression. Range: 0 to 9223372036854775807.
stylestringyesStyle from theory.vocabulary.

Fields of progression.key:

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Fields of progression.perform:

ParameterTypeRequiredDescription
bassbooleanWrite a bass line (default false).
centreintegerMIDI note the voicings centre on (default 60). Range: 36 to 96.
chordsbooleanWrite the chord voicings (default true).
humanisenumberTiming and velocity spread (default 0). Range: 0 to 1.
patternstringPlaying pattern from theory.vocabulary (default block).
topbooleanDouble the top voice an octave up (default false).
velocityintegerVelocity 1-127 (default 100). Range: 1 to 127.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.write_progression","params":{"progression":{"chords":"i VI III VII","key":{"mode":"minor","root":"A"},"perform":{"bass":true,"pattern":"pulse8"}},"slot":0,"track":0}}

clips.write_drums

Write Drum Pattern · Effect: edit · idempotent · since 0.8.0 · MCP tool: clips_write_drums

Write a drum pattern into a session slot of a TOMNIC track (TOMNIC plays its own step pattern, not clip notes). Each lane is one voice (kick, snare, hihat, bass, tom, perc, cymbal, fx, or 0-7) with a step string: x = hit, X = accent, . = rest; '|' and spaces may mark bars. At rate 1/16 sixteen steps are one 4/4 bar, e.g. kick "x...x...x...x...", snare "....x.......x...". Lanes may differ in length (polymeters). Replaces the pattern, or with mode merge only the lanes given. Undoable.

ParameterTypeRequiredDescription
lanes{channel, steps, swing, velocity}[]yesVoices to write. Up to 8 items.
modestringReplace the pattern or merge lanes. One of: replace, merge.
ratestringStep length (default 1/16). One of: 1/4, 1/8, 1/8t, 1/16, 1/16t, 1/32.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of lanes[]:

ParameterTypeRequiredDescription
channelstring or integeryesVoice: kick, snare, hihat, bass, tom, perc, cymbal, fx, or 0-7.
stepsstringyesSteps: x hit, X accent, . rest (1-64).
swingnumberSwing 0 straight .. 100 triplet. Range: 0 to 100.
velocityintegerHit velocity (default 100). Range: 1 to 127.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.write_drums","params":{"lanes":[{"channel":"kick","steps":"x...x...x...x..."},{"channel":"snare","steps":"....X.......X..."},{"channel":"hihat","steps":"x.x.x.x.x.x.x.x.","swing":30,"velocity":70}],"slot":0,"track":3}}

clips.duplicate

Duplicate Clip · Effect: edit · idempotent · since 0.2.0 · MCP tool: clips_duplicate

Copy a session clip to another slot, on the same track or another one of the same kind (MIDI to MIDI, audio to audio). Overwrites the target. Undoable.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
to_slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
to_trackstring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.duplicate","params":{"slot":0,"to_slot":1,"track":0}}

clips.transform

Transform Clip · Effect: edit · since 0.2.0 · MCP tool: clips_transform

Edit every note of a MIDI clip at once: transpose (semitones), quantize starts to a grid in beats (0.25 = 1/16 in 4/4) with a strength, scale and offset velocities. Undoable.

ParameterTypeRequiredDescription
quantizenumberGrid in beats. Range: 0.015625 to 4.
quantize_strengthnumberShare of the way to the grid (default 1). Range: 0 to 1.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
transposeintegerSemitones. Range: -48 to 48.
velocity_offsetintegerAdded to velocity after scaling. Range: -127 to 127.
velocity_scalenumberVelocity multiplier. Range: 0 to 4.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.transform","params":{"quantize":0.25,"slot":0,"track":0,"transpose":-12}}

clips.set_length

Set Clip Length · Effect: edit · idempotent · since 0.3.0 · MCP tool: clips_set_length

Set the loop length of a session clip in beats (notes past the end stay but do not play). Undoable.

ParameterTypeRequiredDescription
length_beatsnumberyesLoop length in beats. Range: 0.25 to 1024.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.set_length","params":{"length_beats":16.0,"slot":0,"track":0}}

clips.clear

Clear Clip · Effect: destructive · idempotent · since 0.2.0 · MCP tool: clips_clear

Empty a session clip slot (notes, audio, sequencer). Undoable.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.clear","params":{"slot":1,"track":0}}

clips.write_slices

Play Slices · Effect: edit · idempotent · since 0.19.0 · MCP tool: clips_write_slices

Write which slices of a sliced audio clip play when (replacing its notes): steps with a slice index, start and length in beats, velocity, and pitch in semitones, so one slice can play a melody (a vocal chop, a stab) and many slices a rearranged break. Undoable.

ParameterTypeRequiredDescription
length_beatsnumberLoop length in beats. Range: 0.25 to 1024.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
steps{duration, pitch, slice, start, velocity}[]yesSlice hits. Up to 4096 items.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of steps[]:

ParameterTypeRequiredDescription
durationnumberyesLength in beats. Range: 0.001 to 1024.
pitchintegerSemitones up or down. Range: -24 to 24.
sliceintegeryesSlice index from sampler.get. Range: 0 to 1023.
startnumberyesBeats from the clip start. Range: 0 to 1024.
velocityinteger1-127 (default 100). Range: 1 to 127.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"clips.write_slices","params":{"slot":0,"steps":[{"duration":0.5,"slice":0,"start":0},{"duration":0.5,"pitch":3,"slice":3,"start":0.5},{"duration":1,"pitch":7,"slice":3,"start":1}],"track":5}}

Music theory

Scales, chords, progressions, analysis and harmonization.

theory.scale

Scale · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_scale

The seven degrees of a key (names, pitch classes, MIDI notes in the middle-C octave) and its diatonic chords as numerals, triads and sevenths. Use it to stay in key when writing melodies and bass lines.

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.scale","params":{"mode":"dorian","root":"D"}}

theory.chord

Chord · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_chord

Notes of a chord symbol (C, Am7, F#m7b5, Bbmaj9, G7/B, Dsus4, …): pitch classes, names and MIDI notes in close position from the root.

ParameterTypeRequiredDescription
octaveintegerOctave of the root (4 = middle C's). Range: 0 to 8.
symbolstringyesChord symbol.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.chord","params":{"octave":3,"symbol":"Fmaj7"}}

theory.progression

Progression · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_progression

Turn a chord progression into voiced, voice-led notes ready for clips.write_midi: from text (numerals or symbols), from the library, or generated in a style. Optional bass line and playing pattern (arpeggios, pulses, strums, …). Deterministic. To write it straight into a clip with its chord lane, use clips.write_progression.

ParameterTypeRequiredDescription
chordsstringRoman numerals or chord symbols. Each chord is one bar unless bars are marked: '|' separates bars and splits one between its chords, 'I:2' = 2 beats, '.' holds, '%' repeats the bar. E.g. 'ii7 V7 Imaj7 Imaj7', 'Am F C G', '| I | vi | IV V |'.
generate{bars, complexity, seed, style}
key{mode, root}yes
librarystringName of a progression from theory.library.
perform{bass, centre, chords, humanise, pattern, top, velocity}

Fields of generate:

ParameterTypeRequiredDescription
barsintegerLength in bars (default 4). Range: 1 to 64.
complexitynumber0 triads .. 1 extended/altered. Range: 0 to 1.
seedintegerSame seed = same progression. Range: 0 to 9223372036854775807.
stylestringyesStyle from theory.vocabulary.

Fields of key:

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Fields of perform:

ParameterTypeRequiredDescription
bassbooleanWrite a bass line (default false).
centreintegerMIDI note the voicings centre on (default 60). Range: 36 to 96.
chordsbooleanWrite the chord voicings (default true).
humanisenumberTiming and velocity spread (default 0). Range: 0 to 1.
patternstringPlaying pattern from theory.vocabulary (default block).
topbooleanDouble the top voice an octave up (default false).
velocityintegerVelocity 1-127 (default 100). Range: 1 to 127.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.progression","params":{"chords":"i VI III VII","key":{"mode":"minor","root":"A"},"perform":{"bass":true,"pattern":"pulse8"}}}

theory.harmonize

Harmonize Melody · Effect: edit · idempotent · since 0.15.0 · MCP tool: theory_harmonize

Find chords for the melody in a MIDI slot, in a key and a generator style (theory.vocabulary): one chord per harmonic-rhythm slot, chosen so the melody's strong notes are chord tones. fit 0 follows the style's habits, 1 the melody. Returns the chords; with write_to also writes them into a slot (performed like clips.write_progression). Undoable.

ParameterTypeRequiredDescription
barsintegerBars to harmonise (default: the clip's). Range: 1 to 64.
fitnumber0 = style, 1 = melody (default 0.7). Range: 0 to 1.
key{mode, root}yes
seedintegerColour seed (default 1). Range: 0 to 9223372036854775807.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
stylestringGenerator style from theory.vocabulary (default pop).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
write_to{perform, slot, track}

Fields of key:

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Fields of write_to:

ParameterTypeRequiredDescription
perform{bass, centre, chords, humanise, pattern, top, velocity}
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of write_to.perform:

ParameterTypeRequiredDescription
bassbooleanWrite a bass line (default false).
centreintegerMIDI note the voicings centre on (default 60). Range: 36 to 96.
chordsbooleanWrite the chord voicings (default true).
humanisenumberTiming and velocity spread (default 0). Range: 0 to 1.
patternstringPlaying pattern from theory.vocabulary (default block).
topbooleanDouble the top voice an octave up (default false).
velocityintegerVelocity 1-127 (default 100). Range: 1 to 127.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.harmonize","params":{"key":{"mode":"minor","root":"F"},"slot":0,"track":4,"write_to":{"perform":{"pattern":"pad"},"slot":1,"track":2}}}

theory.analyze

Analyze Clip Harmony · Effect: read · idempotent · since 0.3.0 · MCP tool: theory_analyze

The chords a MIDI clip's notes spell, with symbols and numerals, one per resolution_beats (default a bar); the key is estimated from the notes unless given. Use it to understand a user's part before writing around it.

ParameterTypeRequiredDescription
key{mode, root}
resolution_beatsnumberShortest chord in beats. Range: 0.25 to 64.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of key:

ParameterTypeRequiredDescription
modestringMode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant.
rootstringyesTonic: C, C#, Db, D … B.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.analyze","params":{"resolution_beats":2.0,"slot":0,"track":0}}

theory.library

Progression Library · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_library

Search the 240 named progressions (pop, rock, jazz, soul, blues, gospel, classical, modal, electronic, film, world, dark…). Pass a name to theory.progression or clips.write_progression as 'library'.

ParameterTypeRequiredDescription
limitintegerMost entries returned (default 40). Range: 1 to 240.
querystringWords that must all match, e.g. 'jazz turnaround'.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.library","params":{"limit":10,"query":"neo soul"}}

theory.vocabulary

Theory Vocabulary · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_vocabulary

Every name the theory methods accept: modes, generator styles, playing patterns, library categories.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"theory.vocabulary","params":{}}

Arrangement

The timeline: songs from scenes, clips, loop and playback.

arrangement.get

Arrangement · Effect: read · idempotent · since 0.7.0 · MCP tool: arrangement_get

The song on the timeline: its length, whether the arrangement or the session is playing, the loop region, the markers (sections) and every track's clips with start and length in beats.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.get","params":{}}

arrangement.build_song

Build Song · Effect: edit · since 0.7.0 · MCP tool: arrangement_build_song

Lay a song out on the timeline from session scenes: each section plays one scene row for a number of bars (e.g. intro 8, verse 16, drop 16, outro 8), every MIDI track's clip in that row copied and repeated to fill it, a marker per section; TOMNIC patterns go on as their notes. Audio tracks are reported as skipped. Refuses if the range already holds clips unless clear_existing. One undo step. Then arrangement.play.

ParameterTypeRequiredDescription
clear_existingbooleanRemove timeline clips from start_beat on first.
markersbooleanAdd a marker per section (default true).
sections{bars, name, scene}[]yesSections in order. Up to 64 items.
start_beatnumberWhere the song starts (default 0). Range: 0 to 1000000.

Fields of sections[]:

ParameterTypeRequiredDescription
barsnumberyesLength in bars. Range: 0.25 to 1024.
namestringMarker name (default: the scene's).
sceneintegeryesScene row. Range: 0 to 255.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.build_song","params":{"sections":[{"bars":8,"name":"Intro","scene":0},{"bars":16,"name":"Verse","scene":1},{"bars":16,"name":"Drop","scene":2}]}}

arrangement.place_clip

Place Clip · Effect: edit · since 0.7.0 · MCP tool: arrangement_place_clip

Copy one session clip onto its track's timeline at start_beat; length_beats longer than the clip repeats it. MIDI tracks. Undoable.

ParameterTypeRequiredDescription
length_beatsnumberLength (default one loop). Range: 0.25 to 4096.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
start_beatnumberyesStart on the timeline. Range: 0 to 1000000.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.place_clip","params":{"length_beats":16.0,"slot":0,"start_beat":32.0,"track":0}}

arrangement.clear

Clear Timeline · Effect: destructive · idempotent · since 0.7.0 · MCP tool: arrangement_clear

Remove timeline clips starting inside a range (default: all), on one track or all. Undoable.

ParameterTypeRequiredDescription
end_beatnumberBefore (default: the end). Range: 0 to 1000000.
start_beatnumberFrom (default 0). Range: 0 to 1000000.
trackstring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.clear","params":{"start_beat":64.0}}

arrangement.edit_clip

Edit Timeline Clip · Effect: edit · idempotent · since 0.13.0 · MCP tool: arrangement_edit_clip

Change one timeline clip (index from arrangement.get): move it, change its length (MIDI grows or shrinks, audio only shrinks), mute it, rename it, set its gain. Fields left out stay. E.g. mute the bass in the second half of a drop after copying it there. Undoable.

ParameterTypeRequiredDescription
clipintegeryesTimeline clip index on the track, from arrangement.get. Range: 0 to 4095.
gain_dbnumberClip gain in dB. Range: -60 to 12.
length_beatsnumberNew length. Range: 0.25 to 16384.
mutedbooleanSilence the clip without removing it.
namestringClip name.
start_beatnumberMove the clip to start here. Range: 0 to 1000000.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.edit_clip","params":{"clip":0,"length_beats":32.0,"muted":false,"track":1}}

arrangement.copy_clip

Copy Timeline Clip · Effect: edit · since 0.13.0 · MCP tool: arrangement_copy_clip

Copy one timeline clip to another beat, on the same track or another one (to_track; MIDI clips go to MIDI tracks). The copy is independent: edit or mute it on its own to make a variation. Undoable.

ParameterTypeRequiredDescription
clipintegeryesTimeline clip index on the track, from arrangement.get. Range: 0 to 4095.
to_beatnumberyesWhere the copy starts. Range: 0 to 1000000.
to_trackstring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.copy_clip","params":{"clip":1,"to_beat":160.0,"track":0}}

arrangement.remove_clip

Remove Timeline Clip · Effect: destructive · since 0.13.0 · MCP tool: arrangement_remove_clip

Delete one timeline clip (index from arrangement.get; later clips on the track move down one index). Undoable.

ParameterTypeRequiredDescription
clipintegeryesTimeline clip index on the track, from arrangement.get. Range: 0 to 4095.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.remove_clip","params":{"clip":2,"track":0}}

arrangement.set_loop

Set Loop · Effect: edit · idempotent · since 0.7.0 · MCP tool: arrangement_set_loop

Set and enable (or disable) the arrangement loop region in beats. Undoable.

ParameterTypeRequiredDescription
enabledbooleanLoop on (default true).
end_beatnumberyesLoop end. Range: 0 to 1000000.
start_beatnumberyesLoop start. Range: 0 to 1000000.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.set_loop","params":{"end_beat":32.0,"start_beat":0.0}}

arrangement.play

Play Arrangement · Effect: control · idempotent · since 0.7.0 · MCP tool: arrangement_play

Play the timeline from a beat: every track follows the arrangement again (like Back to Arrangement), the playhead moves, playback starts.

ParameterTypeRequiredDescription
from_beatnumberStart (default 0). Range: 0 to 1000000.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"arrangement.play","params":{"from_beat":0.0}}

Markers

Markers and section regions on the timeline.

markers.add

Add Marker · Effect: edit · since 0.7.0 · MCP tool: markers_add

Add a marker (or, with end_beat, a section region) to the timeline. Undoable.

ParameterTypeRequiredDescription
beatnumberyesPosition. Range: 0 to 1000000.
colorstring#rrggbb.
end_beatnumberEnd of the section region. Range: 0 to 1000000.
namestringyesLabel, e.g. 'Chorus'.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"markers.add","params":{"beat":32.0,"name":"Chorus"}}

markers.remove

Remove Marker · Effect: destructive · since 0.7.0 · MCP tool: markers_remove

Remove a marker by its index from arrangement.get. Undoable.

ParameterTypeRequiredDescription
indexintegeryesMarker index. Range: 0 to 1023.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"markers.remove","params":{"index":0}}

Automation

Automation lanes of volume, pan and any parameter.

automation.list

List Automation · Effect: read · idempotent · since 0.12.0 · MCP tool: automation_list

The automation lanes of a track on the arrangement timeline: what each drives (its key), how many segments and points, the automated span in beats.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"automation.list","params":{"track":0}}

automation.write

Write Automation · Effect: edit · idempotent · since 0.12.0 · MCP tool: automation_write

Automate a track's volume, pan or any parameter over the song: points at song beats with values in the parameter's own unit; the lane is created if needed and its automation replaced. E.g. a filter sweep through a break: {param: "instrument:16", points: [{beat: 96, value: 400}, {beat: 128, value: 8000}]}. Plays when the arrangement plays. Undoable.

ParameterTypeRequiredDescription
curvestringHow each point moves to the next (default linear). One of: linear, smooth, step, sine.
paramstringyesWhat to automate: "volume" (dB), "pan" (-1..1), or a params.list key (instrument:<id>, fx:<slot>:<index>) in that parameter's range.
points{beat, value}[]yesBreakpoints in time order. Up to 1024 items.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Fields of points[]:

ParameterTypeRequiredDescription
beatnumberyesSong position in beats. Range: 0 to 1000000.
valuenumberyesValue in the parameter's unit. Range: -1000000 to 1000000.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"automation.write","params":{"param":"volume","points":[{"beat":0,"value":-30},{"beat":32,"value":0}],"track":0}}

automation.clear

Clear Automation · Effect: destructive · idempotent · since 0.12.0 · MCP tool: automation_clear

Remove the automation of one parameter on a track (the lane stays, empty). Undoable.

ParameterTypeRequiredDescription
paramstringyesWhat to automate: "volume" (dB), "pan" (-1..1), or a params.list key (instrument:<id>, fx:<slot>:<index>) in that parameter's range.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"automation.clear","params":{"param":"pan","track":0}}

Audio files

Importing audio, transcribing it to notes, splitting stems.

audio.import

Import Audio · Effect: edit · since 0.19.0 · MCP tool: audio_import

Load an audio file (WAV, AIFF, FLAC, MP3, OGG) into a session slot of an audio track, as dropping it from the browser does; arrangement.place_clip then puts it on the timeline. Needs file access, granted in Omni's Settings (AI Create). Undoable.

ParameterTypeRequiredDescription
pathstringyesAbsolute path of the audio file.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"audio.import","params":{"path":"C:/Samples/break.wav","slot":0,"track":5}}

audio.transcribe

Transcribe Audio · Effect: read · idempotent · since 0.19.0 · MCP tool: audio_transcribe

Audio to notes with Basic Pitch: a file (path) or the audio in a session slot (track + slot). mode poly (chords), melody (one line) or bass. Returns a job; its result has the notes in beats at the project tempo, ready for clips.write_midi, and the detected length. File paths need file access (Settings, AI Create).

ParameterTypeRequiredDescription
min_msnumberShortest note in ms. Range: 20 to 500.
modestringWhat to hear (default poly). One of: poly, melody, bass.
pathstringAbsolute path of an audio file.
sensitivitynumberHow readily a note is heard. Range: 0 to 1.
slotinteger0-based clip slot (scene row) on the track. Range: 0 to 255.
sustainnumberHow long notes hold. Range: 0 to 1.
trackstring or integerTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"audio.transcribe","params":{"mode":"bass","slot":0,"track":5}}

audio.split_stems

Split Stems · Effect: control · since 0.19.0 · MCP tool: audio_split_stems

Split a WAV mix into vocals, drums, bass and other with Demucs (the model downloads on first use). Returns a job; its result has the four file paths, which audio.import can load. Needs file access (Settings, AI Create).

ParameterTypeRequiredDescription
folderstringyesAbsolute path of the folder for the stems.
pathstringyesAbsolute path of the WAV to split.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"audio.split_stems","params":{"folder":"C:/Music/stems","path":"C:/Music/mix.wav"}}

Sampler

The sampler of an audio clip: playback and slicing.

sampler.get

Get Sampler · Effect: read · idempotent · since 0.19.0 · MCP tool: sampler_get

The sampler of an audio clip: file, length, playback mode, root note, transpose, envelope and its slices (index, the note that plays it, start and end in seconds).

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"sampler.get","params":{"slot":0,"track":5}}

sampler.set

Set Sampler · Effect: edit · idempotent · since 0.19.0 · MCP tool: sampler_set

Change how an audio clip's sampler plays (fields left out stay): playback_mode one_shot, loop, slice, gate, granular, warp; root note, transpose in semitones, reverse, envelope (attack/decay/release ms, sustain 0-1). Undoable.

ParameterTypeRequiredDescription
attack_msnumberAttack. Range: 0 to 10000.
decay_msnumberDecay. Range: 0 to 30000.
playback_modestringHow the clip plays. One of: one_shot, loop, slice, gate, granular, warp.
release_msnumberRelease. Range: 0 to 30000.
reversebooleanPlay backwards.
root_noteintegerNote that plays the sample unshifted. Range: 0 to 127.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
sustainnumberSustain level. Range: 0 to 1.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
transposeintegerSemitones. Range: -48 to 48.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"sampler.set","params":{"playback_mode":"gate","release_ms":80,"slot":0,"track":5}}

sampler.slice

Slice Sample · Effect: edit · idempotent · since 0.19.0 · MCP tool: sampler_slice

Cut an audio clip into slices, as the sample editor's slice detection does: on transients (sensitivity), into equal parts (count) or on beats (division per beat at the clip's tempo). A clip holds at most 92 slices (notes 36-127): slice a short loop, not a whole song. Switches the clip to slice mode: each slice gets a note, so clips.write_slices can play patterns and melodies from them. Returns the slices. Undoable.

ParameterTypeRequiredDescription
countintegerequal: number of slices. Range: 1 to 128.
divisionintegerbeats: slices per beat, 1 = quarters, 2 = eighths, 4 = sixteenths. Range: 1 to 64.
modestringHow to cut (default transients). One of: transients, equal, beats.
sensitivitynumbertransients: how readily a hit starts a slice. Range: 0 to 1.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"sampler.slice","params":{"mode":"transients","sensitivity":0.6,"slot":0,"track":5}}

Effects

Effect chains on tracks, return buses and the master.

devices.types

Device Types · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_types

Omni's builtin effects that devices.add can insert, with their family: EQ, Filter, Compressor, Limiter, MultibandDynamics, Noise Gate, Transient Shaper, Saturator, Delay, Reverb, Chorus, Phaser and creative ones.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.types","params":{}}

devices.list

List Devices · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_list

The effects of a chain in signal order: a track's inserts ({"track": id}), a return bus ({"return_bus": n}) or "master". Each with slot, name, kind (builtin/plugin/script), bypass and parameter count.

ParameterTypeRequiredDescription
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.list","params":{"chain":{"track":0}}}

devices.get

Read Device · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_get

Every parameter of a builtin effect with its current value, range, default, unit (dB, Hz, ms, %) and group; a choice lists its options (index = value, e.g. Shape 4 = HighPass). Values are in those units, not 0..1.

ParameterTypeRequiredDescription
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".
slotintegeryes0-based position in the chain (signal order). Range: 0 to 63.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.get","params":{"chain":"master","slot":0}}

devices.add

Add Device · Effect: edit · since 0.4.0 · MCP tool: devices_add

Insert a builtin effect (a name from devices.types) into a chain, at the end or at 'position'. It starts at its default settings; shape it with devices.set_params. Returns the chain. Undoable.

ParameterTypeRequiredDescription
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".
devicestringyesEffect name from devices.types, e.g. Compressor.
positioninteger0-based position in the chain (signal order). Range: 0 to 63.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.add","params":{"chain":{"track":0},"device":"EQ"}}

devices.remove

Remove Device · Effect: destructive · since 0.4.0 · MCP tool: devices_remove

Remove an effect from a chain; later slots move up. Undoable.

ParameterTypeRequiredDescription
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".
slotintegeryes0-based position in the chain (signal order). Range: 0 to 63.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.remove","params":{"chain":{"track":0},"slot":1}}

devices.set_bypass

Bypass Device · Effect: edit · idempotent · since 0.4.0 · MCP tool: devices_set_bypass

Bypass (true) or enable an effect; the switch crossfades, no click. Useful to compare before / after with mix.meters. Undoable.

ParameterTypeRequiredDescription
bypassedbooleanyesBypass the effect.
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".
slotintegeryes0-based position in the chain (signal order). Range: 0 to 63.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.set_bypass","params":{"bypassed":true,"chain":"master","slot":0}}

devices.set_params

Set Device Parameters · Effect: edit · idempotent · since 0.4.0 · MCP tool: devices_set_params

Set several parameters of a builtin effect at once, by name (as devices.get lists them, case-insensitive) or index, in the parameter's own unit. All are checked against their ranges before any changes. One undo step. Returns the device with its new values.

ParameterTypeRequiredDescription
chain"master" or {track} or {return_bus}yesEffect chain: {"track": <id or index>}, {"return_bus": <index>} or "master".
slotintegeryes0-based position in the chain (signal order). Range: 0 to 63.
valuesobjectyesParameter name or index → value.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"devices.set_params","params":{"chain":{"track":0},"slot":0,"values":{"Ratio":3.0,"Threshold":-18.0}}}

MIDI effects

MIDI effects and generators in front of an instrument.

midi_fx.types

List MIDI FX Types · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_types

MIDI effects a track can put in front of its instrument: transforms (Arpeggiator, Chord, Scale, Velocity, Note Length, Note Echo, Random, Ornaments, Tuplets) change the notes going through; generators (Marbles, Markov, L-System, Cellular, Thue-Morse, Recaman, Sequence, Shepard, Walks) play their own, locked to the song while a clip plays.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.types","params":{}}

midi_fx.list

List MIDI FX · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_list

The MIDI FX chain of a track, in processing order.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.list","params":{"track":3}}

midi_fx.get

Get MIDI FX · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_get

Every parameter of one MIDI FX slot: name, value, range, default.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.get","params":{"slot":0,"track":3}}

midi_fx.add

Add MIDI FX · Effect: edit · since 0.16.0 · MCP tool: midi_fx_add

Append a MIDI effect from midi_fx.types to a track's MIDI FX chain, with its default settings. Undoable.

ParameterTypeRequiredDescription
devicestringyesA name from midi_fx.types, e.g. Arpeggiator.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.add","params":{"device":"Arpeggiator","track":3}}

midi_fx.remove

Remove MIDI FX · Effect: destructive · since 0.16.0 · MCP tool: midi_fx_remove

Remove one MIDI FX slot; later slots move down. Undoable.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.remove","params":{"slot":0,"track":3}}

midi_fx.set_params

Set MIDI FX Parameters · Effect: edit · idempotent · since 0.16.0 · MCP tool: midi_fx_set_params

Set parameters of one MIDI FX slot by name (or index), values in each parameter's range from midi_fx.get. Undoable, one step per call.

ParameterTypeRequiredDescription
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
valuesobjectyesParameter name or index -> value.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.set_params","params":{"slot":0,"track":3,"values":{"Rate":4.0}}}

midi_fx.render

Render MIDI FX · Effect: edit · idempotent · since 0.21.0 · MCP tool: midi_fx_render

Play one MIDI FX slot offline over some bars and write what it played into a session slot as notes: a Markov / L-System / Marbles line becomes an editable clip, an Arpeggiator over the chord in input_slot becomes the arpeggio. The effect is bypassed afterwards (bypass false keeps it on). Undoable.

ParameterTypeRequiredDescription
barsintegerBars to render (default 4). Range: 1 to 64.
bypassbooleanBypass the effect afterwards (default true).
input_slotinteger0-based clip slot (scene row) on the track. Range: 0 to 255.
slotintegeryesThe MIDI FX slot. Range: 0 to 63.
to_slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.render","params":{"bars":8,"input_slot":0,"slot":0,"to_slot":1,"track":3}}

midi_fx.set_bypass

Bypass MIDI FX · Effect: edit · idempotent · since 0.16.0 · MCP tool: midi_fx_set_bypass

Bypass (or re-enable) one MIDI FX slot. Undoable.

ParameterTypeRequiredDescription
bypassedbooleanyestrue = notes pass unchanged.
slotintegeryes0-based clip slot (scene row) on the track. Range: 0 to 255.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"midi_fx.set_bypass","params":{"bypassed":true,"slot":0,"track":3}}

Mixer

The master fader, return buses and sends.

mixer.add_return

Add Return Bus · Effect: edit · since 0.11.0 · MCP tool: mixer_add_return

Add a return bus (e.g. 'Reverb', 'Delay'): put an effect on it with devices.add ({"return_bus": n}, usually at 100% mix) and feed it from tracks with mixer.set_send. Returns the mixer. Undoable.

ParameterTypeRequiredDescription
namestringName (default 'Return N').

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.add_return","params":{"name":"Reverb"}}

mixer.remove_return

Remove Return Bus · Effect: destructive · since 0.11.0 · MCP tool: mixer_remove_return

Delete a return bus with its effects and every track's send to it. Later buses move down one index. Undoable (the sends come back too).

ParameterTypeRequiredDescription
busintegeryesReturn bus index. Range: 0 to 255.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.remove_return","params":{"bus":0}}

mixer.get

Mixer State · Effect: read · idempotent · since 0.4.0 · MCP tool: mixer_get

Master fader (dB) and balance, and the return buses (index, name, fader, insert count). Track faders and sends are in tracks.list.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.get","params":{}}

mixer.set_send

Set Send · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_send

Send level from a track to a return bus in dB (up to +6; -120 or lower = off), e.g. to put a part into the reverb on a return. Undoable.

ParameterTypeRequiredDescription
busintegeryesReturn bus index from mixer.get. Range: 0 to 255.
level_dbnumberyesSend level in dB. Range: -200 to 6.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.set_send","params":{"bus":0,"level_db":-12.0,"track":0}}

mixer.set_master

Set Master · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_master

Master fader in dB (up to about +6) and balance (-1..1). Prefer leaving the master at 0 dB and balancing the tracks. Undoable.

ParameterTypeRequiredDescription
pannumberBalance -1 left .. +1 right. Range: -1 to 1.
volume_dbnumberMaster fader in dB. Range: -200 to 6.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.set_master","params":{"volume_db":0.0}}

mixer.set_return

Set Return Level · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_return

Fader of a return bus in dB. Undoable.

ParameterTypeRequiredDescription
busintegeryesReturn bus index. Range: 0 to 255.
volume_dbnumberyesFader in dB. Range: -200 to 6.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mixer.set_return","params":{"bus":0,"volume_db":-3.0}}

Parameters

Every parameter of a track's instrument and effects.

params.list

List Parameters · Effect: read · idempotent · since 0.9.0 · MCP tool: params_list

Every parameter of a track: its instrument (builtin synth or VST3 / CLAP plugin) and every insert effect, plugins included, with key, name, device, group, range, default and current value. Plugins have hundreds: narrow with filter (words that must all appear, e.g. 'filter cutoff') and page with offset / limit (default 100).

ParameterTypeRequiredDescription
filterstringWords that must all match name, group or device.
limitintegerMost returned (default 100). Range: 1 to 500.
offsetintegerSkip this many matches. Range: 0 to 100000.
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"params.list","params":{"filter":"cutoff","limit":20,"track":0}}

params.set

Set Parameters · Effect: edit · idempotent · since 0.9.0 · MCP tool: params_set

Set parameters of a track by their params.list keys (instrument:<id>, fx:<slot>:<index>), each in its own range (plugins are usually 0-1). All are checked before any changes; one undo step. For builtin effects devices.set_params by name is simpler.

ParameterTypeRequiredDescription
trackstring or integeryesTrack id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved).
valuesobjectyesParameter key → value.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"params.set","params":{"track":0,"values":{"fx:0:3":0.75,"instrument:12":0.4}}}

Meters

Live level meters.

mix.meters

Read Meters · Effect: read · idempotent · since 0.1.0 · MCP tool: mix_meters

Live levels, as the mixer meters show them: per track peak/RMS (dBFS) and EBU R128 loudness (momentary, short-term, integrated LUFS, true peak dBTP); on the master also stereo correlation and loudness range (LU). Meters only move while audio plays: start the transport, wait a few seconds, then read. null = silence or not measured yet.

ParameterTypeRequiredDescription
tracksstring or integer[]Only these tracks (default: all). Up to 1024 items.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"mix.meters","params":{"tracks":[0,1]}}

Analysis

Listening: capture and analyse the master or a track, analyse files, compare.

analysis.capture

Listen · Effect: control · since 0.5.0 · MCP tool: analysis_capture

Record what the master or one track plays for a few seconds (default 8, 1-30) and analyse it in the background: peak, true peak, RMS, crest factor, clipping, DC; LUFS integrated / short-term / momentary and loudness range, short-term per second; stereo correlation, width and mono loss; tonal balance (sub, bass, low-mid, mid, high-mid, high, air) and a 1/3-octave spectrum with per-band width. Starts playback if stopped. Returns a job id at once: call jobs.wait with it. One capture at a time.

ParameterTypeRequiredDescription
secondsnumberLength to capture. Range: 1 to 30.
source"master" or {track}yesWhat to listen to: "master" or {"track": <id or index>}.
start_transportbooleanStart playback if stopped (default true).

Request:

json
{"jsonrpc":"2.0","id":1,"method":"analysis.capture","params":{"seconds":8,"source":"master"}}

analysis.file

Analyse File · Effect: read · idempotent · since 0.6.0 · MCP tool: analysis_file

Analyse an audio file (WAV, FLAC, MP3, OGG, AIFF) the same way as analysis.capture: a reference track to compare the mix with (analysis.compare), or an exported master to master.check. Reads at most the first 10 minutes. Returns a job: jobs.wait for it.

ParameterTypeRequiredDescription
pathstringyesAbsolute path of the file.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"analysis.file","params":{"path":"C:/Music/reference.wav"}}

analysis.compare

Compare Captures · Effect: read · idempotent · since 0.5.0 · MCP tool: analysis_compare

Where two finished captures (e.g. kick and bass, vocal and guitars) compete: band by band levels and the bands where both carry energy within a few dB of each other, strongest first. The usual cure is an EQ cut on one of them there (devices.add EQ + devices.set_params).

ParameterTypeRequiredDescription
aintegeryesJob id from the call that started it. Range: 1 to 9223372036854775807.
bintegeryesJob id from the call that started it. Range: 1 to 9223372036854775807.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"analysis.compare","params":{"a":1,"b":2}}

Jobs

Long-running work: progress and results.

jobs.get

Job Status · Effect: read · idempotent · since 0.5.0 · MCP tool: jobs_get

State (running / done / failed), progress and, once done, the result of a job started by another call.

ParameterTypeRequiredDescription
jobintegeryesJob id from the call that started it. Range: 1 to 9223372036854775807.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"jobs.get","params":{"job":1}}

jobs.wait

Wait for Job · Effect: read · idempotent · since 0.5.0 · MCP tool: jobs_wait

Wait until a job finishes (at most timeout_seconds, default and limit 9) and return it as jobs.get does; call again while it is still running.

ParameterTypeRequiredDescription
jobintegeryesJob id from the call that started it. Range: 1 to 9223372036854775807.
timeout_secondsnumberLongest wait. Range: 0 to 9.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"jobs.wait","params":{"job":1,"timeout_seconds":9}}

Mastering

Delivery targets, verdicts and the mastering chain.

master.targets

Loudness Targets · Effect: read · idempotent · since 0.6.0 · MCP tool: master_targets

Delivery targets: streaming platforms (Spotify, Apple Music, YouTube, Tidal, Amazon Music, Deezer), podcast, broadcast (EBU R128, ATSC A/85) and a club convention, each with integrated LUFS, tolerance and true-peak ceiling.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"master.targets","params":{}}

master.check

Check Against Target · Effect: read · idempotent · since 0.6.0 · MCP tool: master_check

Pass / fail of a finished master capture (analysis.capture of "master", or analysis.file of an exported mix) against a target: loudness gap in LU, true peak against the ceiling, the gain that would hit the target, and notes (short capture, clipping, over-limiting, phase).

ParameterTypeRequiredDescription
jobintegeryesFinished capture job. Range: 1 to 9223372036854775807.
targetstringyesTarget id from master.targets, e.g. spotify, apple_music, ebu_r128, club.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"master.check","params":{"job":1,"target":"spotify"}}

master.build_chain

Build Master Chain · Effect: edit · since 0.6.0 · MCP tool: master_build_chain

Put a mastering chain at the end of the master: an optional glue Compressor (2:1, slow attack, soft knee) and a true-peak Limiter with its ceiling at the target's. With a capture job of the master, the compressor threshold and the limiter's input gain are set from it to approach the target loudness. Refuses if the master already has a Limiter (adjust that one with devices.set_params). One undo step. Then capture again and master.check.

ParameterTypeRequiredDescription
gluebooleanAdd the glue compressor (default true).
jobintegerFinished capture of the master. Range: 1 to 9223372036854775807.
targetstringyesTarget id from master.targets, e.g. spotify, apple_music, ebu_r128, club.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"master.build_chain","params":{"job":1,"target":"spotify"}}

Export

Render the mix or stems to WAV.

export.render

Export Mix · Effect: control · since 0.6.0 · MCP tool: export_render

Render the arrangement (start_beat to end_beat, default the whole song) to a WAV file, as the Export dialog does: in real time through the audio device, or with fast offline (faster than real time, the same mix), optionally normalised to a loudness target. Returns a job: jobs.wait until done; the result has the path and an analysis of the written file. Writes only absolute .wav paths and does not overwrite unless asked. Session clips play only if recorded into the arrangement.

ParameterTypeRequiredDescription
bit_depthinteger16, 24 (default) or 32 (float). Range: 16 to 32.
ditherstringDither when writing 16/24 bit (default: the export dialog's). One of: off, tpdf, pow_r1, pow_r2, pow_r3.
end_beatnumberEnd in beats (default: the song's end). Range: 0 to 1000000.
fastbooleanRender offline, faster than real time (default false).
overwritebooleanReplace existing files (default false).
pathstringyesAbsolute path of the .wav file to write.
start_beatnumberStart in beats (default 0). Range: 0 to 1000000.
targetstringNormalise to this target from master.targets while writing.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"export.render","params":{"fast":true,"path":"C:/Music/mix.wav","target":"spotify"}}

export.stems

Export Stems · Effect: control · since 0.17.0 · MCP tool: export_stems

Render one WAV per track (all audible tracks, or the ones listed) into a folder, offline and faster than real time: each stem is its track soloed, with its sends' returns, without the master chain unless through_master. Files are named '<NN> <track>.wav'. Returns a job whose result lists the files.

ParameterTypeRequiredDescription
bit_depthinteger16, 24 (default) or 32 (float). Range: 16 to 32.
ditherstringDither when writing 16/24 bit (default: the export dialog's). One of: off, tpdf, pow_r1, pow_r2, pow_r3.
end_beatnumberEnd in beats (default: the song's end). Range: 0 to 1000000.
folderstringyesAbsolute path of an existing folder for the stems.
overwritebooleanReplace existing files (default false).
start_beatnumberStart in beats (default 0). Range: 0 to 1000000.
through_masterbooleanKeep the master chain on each stem (default false).
tracksstring or integer[]Tracks to render (default: every non-group track). Up to 256 items.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"export.stems","params":{"folder":"C:/Music/stems","tracks":[0,1,2]}}

Undo and redo

Take back or redo the newest edit.

edit.undo

Undo · Effect: history · since 0.1.0 · MCP tool: edit_undo

Undo the newest step in Omni's history (the user's or yours; every edit call of this API is one step labelled 'API: ...'). Returns what was undone.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"edit.undo","params":{}}

edit.redo

Redo · Effect: history · since 0.1.0 · MCP tool: edit_redo

Redo the step undone last. Returns what was redone.

This method takes no parameters.

Request:

json
{"jsonrpc":"2.0","id":1,"method":"edit.redo","params":{}}