AbletonOSC: Control Ableton Live with OSC

November 19, 2025 · View on GitHub

stability-beta

AbletonOSC is a MIDI remote script that provides an Open Sound Control (OSC) interface to control Ableton Live. The project's aim is to expose the entire Live Object Model API (full API docs), providing comprehensive control over Live's control interfaces using the same naming structure and object hierarchy as LOM.

Installation

AbletonOSC requires Ableton Live 11 or above.

To install the script:

  • Download a zip of this repository, unzip its contents, and rename AbletonOSC-master to AbletonOSC
  • Install it following the instructions on Ableton's Installing third-party remote scripts doc, by copying the AbletonOSC folder to:
    • Windows: \Users\[username]\Documents\Ableton\User Library\Remote Scripts
    • macOS: Macintosh HD/Users/[username]/Music/Ableton/User Library/Remote Scripts
  • Restart Live
  • In Preferences > Link / Tempo / MIDI, under the Control Surface dropdown, select the new "AbletonOSC" option. Live should display a message saying "AbletonOSC: Listening for OSC on port 11000"

Activity logs will be output to a logs subdirectory. Logging granularity can be controlled with /live/api/set/log_level (see Application API below).

Usage

AbletonOSC listens for OSC messages on port 11000, and sends replies on port 11001. Replies will be sent to the same IP as the originating message. When querying properties, OSC wildcard patterns can be used; for example, /live/clip/get/* 0 0 will query all the properties of track 0, clip 0.

Application API

Documentation: Application API
AddressQuery paramsResponse paramsDescription
/live/test'ok'Display a confirmation message in Live, and sends an OSC reply to /live/test
/live/application/get/versionmajor_version, minor_versionQuery Live's version
/live/api/reloadInitiates a live reload of the AbletonOSC server code. Used in development only.
/live/api/get/log_levellog_levelReturns the current log level. Default is info.
/live/api/set/log_levellog_levelSet the log level, which can be one of: debug, info, warning, error, critical.
/live/api/show_messagemessageShow a message in Live's status bar

Application status messages

These messages are sent to the client automatically when the application state changes.

AddressResponse paramsDescription
/live/startupSent to the client application when AbletonOSC is started
/live/errorerror_msgSent to the client application when an error occurs. For more diagnostics, see logs/abletonosc.log

Song API

Represents the top-level Song object. Used to start/stop playback, create/modify scenes, create/jump to cue points, and set global parameters (tempo, metronome).

Documentation: Song API

Song methods

AddressQuery paramsResponse paramsDescription
/live/song/capture_midiCapture midi
/live/song/continue_playingResume session playback
/live/song/create_audio_trackindexCreate a new audio track at the specified index (-1 = end of list)
/live/song/create_midi_trackindexCreate a new MIDI track at the specified index (-1 = end of list)
/live/song/create_return_trackCreate a new return track
/live/song/create_sceneindexCreate a new scene at the specified index (-1 = end of list)
/live/song/cue_point/jumpcue_pointJump to a specific cue point, by name or numeric index (based on the list of cue points)
/live/song/cue_point/add_or_deleteAdd a cue point under the cursor, or, if one exists, delete it
/live/song/cue_point/set/namecue_pointRename a cue point, given its index
/live/song/delete_scenescene_indexDelete a scene
/live/song/delete_return_tracktrack_indexDelete a return track
/live/song/delete_tracktrack_indexDelete a track
/live/song/duplicate_scenescene_indexDuplicate a scene
/live/song/duplicate_tracktrack_indexDuplicate a track
/live/song/jump_bytimeJump song position by the specified time, in beats
/live/song/jump_to_next_cueJump to the next cue marker
/live/song/jump_to_prev_cueJump to the previous cue marker
/live/song/redoRedo the last undone operation
/live/song/start_playingStart session playback
/live/song/stop_playingStop session playback
/live/song/stop_all_clipsStop all clips from playing
/live/song/tap_tempoMimics a tap of the "Tap Tempo" button
/live/song/trigger_session_recordTriggers record in session mode
/live/song/undoUndo the last operation

Song properties

  • Changes to any Track property can be listened for by calling /live/song/start_listen/<property>
  • Responses will be sent to /live/song/get/<property>, with parameters <property_value>
  • For further information on these properties and their parameters, see documentation for Live Object Model - Song.

Getters

AddressQuery paramsResponse paramsDescription
/live/song/get/arrangement_overdubarrangement_overdubQuery whether arrangement overdub is on
/live/song/get/back_to_arrangerback_to_arrangerQuery whether "back to arranger" is lit
/live/song/get/can_redocan_redoQuery whether redo is available
/live/song/get/can_undocan_undoQuery whether undo is available
/live/song/get/clip_trigger_quantizationclip_trigger_quantizationQuery the current clip trigger quantization level
/live/song/get/current_song_timecurrent_song_timeQuery the current song time, in beats
/live/song/get/groove_amountgroove_amountQuery the current groove amount
/live/song/get/is_playingis_playingQuery whether the song is currently playing
/live/song/get/looploopQuery whether the song is currently looping
/live/song/get/loop_lengthloop_lengthQuery the current loop length
/live/song/get/loop_startloop_startQuery the current loop start point
/live/song/get/metronomemetronome_onQuery metronome on/off
/live/song/get/midi_recording_quantizationmidi_recording_quantizationQuery the current MIDI recording quantization
/live/song/get/nudge_downnudge_downQuery nudge down
/live/song/get/nudge_upnudge_upQuery nudge up
/live/song/get/punch_inpunch_inQuery punch in
/live/song/get/punch_outpunch_outQuery punch out
/live/song/get/record_moderecord_modeQuery the current record mode
/live/song/get/root_noteroot_noteQuery the current root note
/live/song/get/scale_namescale_nameQuery the current scale name
/live/song/get/session_recordsession_recordQuery whether session record is enabled
/live/song/get/session_record_statussession_record_statusQuery the current session record status
/live/song/get/signature_denominatordenominatorQuery the current time signature's denominator
/live/song/get/signature_numeratornumeratorQuery the current time signature's numerator
/live/song/get/song_lengthsong_lengthQuery the song arrangement length, in beats
/live/song/get/tempotempo_bpmQuery the current song tempo

Setters

AddressQuery paramsResponse paramsDescription
/live/song/set/arrangement_overdubarrangement_overdubSet arrangement overdub (1=on, 0=off)
/live/song/set/back_to_arrangerback_to_arrangerSet whether "back to arranger" is lit (1=on, 0=off)
/live/song/set/clip_trigger_quantizationclip_trigger_quantizationSet the current clip trigger quantization level
/live/song/set/current_song_timecurrent_song_timeSet the current song time, in beats
/live/song/set/groove_amountgroove_amountSet the current groove amount
/live/song/set/looploopSet whether the song is currently looping (1=on, 0=off)
/live/song/set/loop_lengthloop_lengthSet the current loop length
/live/song/set/loop_startloop_startSet the current loop start point
/live/song/set/metronomemetronome_onSet metronome (1=on, 0=off)
/live/song/set/midi_recording_quantizationmidi_recording_quantizationSet the current MIDI recording quantization
/live/song/set/nudge_downnudge_downSet nudge down
/live/song/set/nudge_upnudge_upSet nudge up
/live/song/set/punch_inpunch_inSet punch in
/live/song/set/punch_outpunch_outSet punch out
/live/song/set/record_moderecord_modeSet the current record mode
/live/song/set/session_recordsession_recordSet whether session record is enabled (1=on, 0=off)
/live/song/set/signature_denominatorsignature_denominatorSet the time signature's denominator
/live/song/set/signature_numeratorsignature_numeratorSet the time signature's numerator
/live/song/set/record_moderecord_modeSet the current record mode
/live/song/set/tempotempo_bpmSet the current song tempo

Song: Properties of cue points, scenes and tracks

AddressQuery paramsResponse paramsDescription
/live/song/get/cue_pointsname, time, ...Query a list of the song's cue points
/live/song/get/num_scenesnum_scenesQuery the number of scenes
/live/song/get/num_tracksnum_tracksQuery the number of tracks
/live/song/get/track_names[index_min, index_max]Query track names (optionally, over a given range)
/live/song/get/track_data[various]Query bulk properties of multiple tracks/clips. See below for further info.

Querying track/clip data in bulk with /live/song/get/track_data

It is often useful to be able to query data en masse about lots of different tracks and clips -- for example, when a set is first opened, to synchronise the state of your client with the Ableton set. This can be achieved with the /live/song/get/track_data API, which can query user-specified properties of multiple tracks and clips.

Properties must be of the format track.property_name, clip.property_name or clip_slot.property_name.

For example:

/live/song/get/track_data 0 12 track.name clip.name clip.length

Queries tracks 0..11, and returns a long list of values comprising:

[track_0_name, clip_0_0_name,   clip_0_1_name,   ... clip_0_7_name,
               clip_1_0_length, clip_0_1_length, ... clip_0_7_length,
 track_1_name, clip_1_0_name,   clip_1_1_name,   ... clip_1_7_name, ...]

Beat events

To request a status message to be sent to the client on each beat, call /live/song/start_listen/beat. Every beat, a reply will be sent to /live/song/get/beat, with an int parameter containing the current beat number. To stop listening for beat events, call /live/song/stop_listen/beat.


View API

Represents the view (user interface) of live

Documentation: View API
AddressQuery paramsResponse paramsDescription
/live/view/get/selected_scenescene_indexReturns the selected scene index (first scene = 0)
/live/view/get/selected_tracktrack_indexReturns the selected index track (first track = 0)
/live/view/get/selected_cliptrack_index, scene_indexReturns the track and scene index of the selected clip
/live/view/get/selected_devicetrack_index, device_indexGet the selected device (first device = 0)
/live/view/set/selected_scenescene_indexSet the selected scene (first scene = 0)
/live/view/set/selected_tracktrack_indexSet the selected track (first track = 0)
/live/view/set/selected_cliptrack_index, scene_indexSet the selected clip
/live/view/set/selected_devicetrack_index, device_indexSet the selected device (first device = 0)
/live/view/start_listen/selected_sceneselected_sceneStart listening to the selected scene (first scene = 0)
/live/view/start_listen/selected_trackselected_trackStart listening to selected track (first track = 0)
/live/view/stop_listen/selected_sceneStop listening to the selected scene (first scene = 0)
/live/view/stop_listen/selected_trackStop listening to selected track (first track = 0)

Track API

Represents an audio, MIDI, return or master track. Can be used to set track audio parameters (volume, panning, send, mute, solo), listen for the playing clip slot, query devices, etc. Can also be used to query clips in arrangement view.

To query the properties of multiple tracks, see Song: Properties of cue points, scenes and tracks.

Documentation: Track API

Track methods

AddressQuery paramsResponse paramsDescription
/live/track/stop_all_clipstrack_idStop all clips on track

Track properties

  • Changes for any Track property can be listened for by calling /live/track/start_listen/<property> <track_index>
  • Responses will be sent to /live/track/get/<property>, with parameters <track_index> <property_value>

Getters

AddressQuery paramsResponse paramsDescription
/live/track/get/armtrack_idtrack_id, armedQuery whether track is armed
/live/track/get/available_input_routing_channelstrack_idtrack_id, channel, ...List input channels (e.g. "1", "2", "1/2", ...)
/live/track/get/available_input_routing_typestrack_idtrack_id, type, ...List input routes (e.g. "Ext. In", ...)
/live/track/get/available_output_routing_channelstrack_idtrack_id, channel, ...List output channels (e.g. "1", "2", "1/2", ...)
/live/track/get/available_output_routing_typestrack_idtrack_id, type, ...List output routes (e.g. "Ext. Out", ...)
/live/track/get/can_be_armedtrack_idtrack_id, can_be_armedQuery whether track can be armed
/live/track/get/colortrack_idtrack_id, colorQuery track color
/live/track/get/color_indextrack_idtrack_id, color_indexQuery track color index
/live/track/get/current_monitoring_statetrack_idtrack_id, stateQuery current monitoring state (1=on, 0=off)
/live/track/get/fired_slot_indextrack_idtrack_id, indexQuery currently-fired slot
/live/track/get/fold_statetrack_idtrack_id, fold_stateQuery folded state (for groups)
/live/track/get/has_audio_inputtrack_idtrack_id, has_audio_inputQuery has_audio_input
/live/track/get/has_audio_outputtrack_idtrack_id, has_audio_outputQuery has_audio_output
/live/track/get/has_midi_inputtrack_idtrack_id, has_midi_inputQuery has_midi_input
/live/track/get/has_midi_outputtrack_idtrack_id, has_midi_outputQuery has_midi_output
/live/track/get/input_routing_channeltrack_idtrack_id, channelQuery current input routing channel
/live/track/get/input_routing_typetrack_idtrack_id, typeQuery current input routing type
/live/track/get/output_routing_channeltrack_idtrack_id, channelQuery current output routing channel
/live/track/get/output_meter_lefttrack_idtrack_id, levelQuery current output level, left channel
/live/track/get/output_meter_leveltrack_idtrack_id, levelQuery current output level, both channels
/live/track/get/output_meter_righttrack_idtrack_id, levelQuery current output level, right channel
/live/track/get/output_routing_typetrack_idtrack_id, typeQuery current output routing type
/live/track/get/is_foldabletrack_idtrack_id, is_foldableQuery whether track is foldable, i.e. is a group
/live/track/get/is_groupedtrack_idtrack_id, is_groupedQuery whether track is in a group
/live/track/get/is_visibletrack_idtrack_id, is_visibleQuery whether track is visible (1=on, 0=off)
/live/track/get/mutetrack_idtrack_id, muteQuery track mute (1=on, 0=off)
/live/track/get/nametrack_idtrack_id, nameQuery track name
/live/track/get/panningtrack_idtrack_id, panningQuery track panning
/live/track/get/playing_slot_indextrack_idtrack_id, indexQuery currently-playing slot
/live/track/get/sendtrack_id, send_idtrack_id, send_id, valueQuery track send
/live/track/get/solotrack_idtrack_id, soloQuery track solo on/off
/live/track/get/volumetrack_idtrack_id, volumeQuery track volume

Setters

AddressQuery paramsResponse paramsDescription
/live/track/set/armtrack_id, armedSet track arm state (1=on, 0=off)
/live/track/set/colortrack_id, colorSet track color
/live/track/set/color_indextrack_id, color_indexSet track color index
/live/track/set/current_monitoring_statetrack_id, stateSet monitoring on/off
/live/track/set/fold_statetrack_id, fold_stateSet group folded (1=on, 0=off)
/live/track/set/input_routing_channeltrack_id, channelSet input routing channel
/live/track/set/input_routing_typetrack_id, typeSet input routing type
/live/track/set/mutetrack_id, muteSet track mute (1=on, 0=off)
/live/track/set/nametrack_id, nameSet track name
/live/track/set/output_routing_channeltrack_id, channelSet output routing channel
/live/track/set/output_routing_typetrack_id, typeSet output routing type
/live/track/set/panningtrack_id, panningSet track panning
/live/track/set/sendtrack_id, send_id, valueSet track send
/live/track/set/solotrack_id, soloSet track solo (1=on, 0=off)
/live/track/set/volumetrack_id, volumeSet track volume

Track: Properties of multiple clips

AddressQuery paramsResponse paramsDescription
/live/track/get/clips/nametrack_idtrack_id, [name, ....]Query all clip names on track
/live/track/get/clips/lengthtrack_idtrack_id, [length, ...]Query all clip lengths on track
/live/track/get/clips/colortrack_idtrack_id, [color, ...]Query all clip colors on track
/live/track/get/arrangement_clips/nametrack_idtrack_id, [name, ....]Query all arrangement view clip names on track
/live/track/get/arrangement_clips/lengthtrack_idtrack_id, [length, ...]Query all arrangement view clip lengths on track
/live/track/get/arrangement_clips/start_timetrack_idtrack_id, [start_time, ...]Query all arrangement view clip times on track

Track: Properties of devices

AddressQuery paramsResponse paramsDescription
/live/track/get/num_devicestrack_idtrack_id, num_devicesQuery the number of devices on the track
/live/track/get/devices/nametrack_idtrack_id, [name, ...]Query all device names on track
/live/track/get/devices/typetrack_idtrack_id, [type, ...]Query all devices types on track
/live/track/get/devices/class_nametrack_idtrack_id, [class, ...]Query all device class names on track

See Device API for details on Device type/class_names.


Clip Slot API

A Clip Slot represents a container for a clip. It is used to create and delete clips, and query their existence.

Documentation: Clip Slot API
AddressQuery paramsResponse paramsDescription
/live/clip_slot/firetrack_index, clip_indexFire play/pause of the specified clip slot
/live/clip_slot/create_cliptrack_index, clip_index, lengthCreate a clip in the slot
/live/clip_slot/delete_cliptrack_index, clip_indexDelete the clip in the slot
/live/clip_slot/get/has_cliptrack_index, clip_indextrack_index, clip_index, has_clipQuery whether the slot has a clip
/live/clip_slot/get/has_stop_buttontrack_index, clip_indextrack_index, clip_index, has_stop_buttonQuery whether the slot has a stop button
/live/clip_slot/set/has_stop_buttontrack_index, clip_index, has_stop_buttonAdd or remove stop button (1=on, 0=off)
/live/clip_slot/duplicate_clip_totrack_index, clip_index, target_track_index, target_clip_indexDuplicate the clip to an empty target clip slot

Clip API

Represents an audio or MIDI clip. Can be used to start/stop clips, and query/modify their notes, name, gain, pitch, color, playing state/position, etc.

Documentation: Clip API
AddressQuery paramsResponse paramsDescription
/live/clip/firetrack_id, clip_idStart clip playback
/live/clip/stoptrack_id, clip_idStop clip playback
/live/clip/duplicate_looptrack_id, clip_idDuplicates clip loop
/live/clip/get/notestrack_id, clip_id, [start_pitch, pitch_span, start_time, time_span]track_id, clip_id, pitch, start_time, duration, velocity, mute, [pitch, start_time...]Query the notes in a given clip, optionally including a start time/pitch and time/pitch span.
/live/clip/add/notestrack_id, clip_id, pitch, start_time, duration, velocity, mute, ...Add new MIDI notes to a clip. pitch is MIDI note index, start_time and duration are beats in floats, velocity is MIDI velocity index, mute is true/false
/live/clip/remove/notes[start_pitch, pitch_span, start_time, time_span]Remove notes from a clip in a range of pitches and times. If no ranges specified, all notes are removed. Note that ordering has changed as of 2023-11.
/live/clip/get/colortrack_id, clip_idtrack_id, clip_id, colorGet clip color
/live/clip/set/colortrack_id, clip_id, colorSet clip color
/live/clip/get/color_indextrack_id, clip_idtrack_id, clip_id, color_indexGet clip color index (0-69)
/live/clip/set/color_indextrack_id, clip_id, color_indexSet clip color index (0-69)
/live/clip/get/nametrack_id, clip_idtrack_id, clip_id, nameGet clip name
/live/clip/set/nametrack_id, clip_id, nameSet clip name
/live/clip/get/gaintrack_id, clip_idtrack_id, clip_id, gainGet clip gain
/live/clip/set/gaintrack_id, clip_id, gainSet clip gain
/live/clip/get/lengthtrack_id, clip_idtrack_id, clip_id, lengthGet clip length
/live/clip/get/sample_lengthtrack_id, clip_idtrack_id, clip_id, sample_lengthGet clip sample length
/live/clip/get/start_timetrack_id, clip_idtrack_id, clip_id, start_timeGet clip start time
/live/clip/get/pitch_coarsetrack_id, clip_idtrack_id, clip_id, semitonesGet clip coarse re-pitch
/live/clip/set/pitch_coarsetrack_id, clip_id, semitonesSet clip coarse re-pitch
/live/clip/get/pitch_finetrack_id, clip_idtrack_id, clip_id, centsGet clip fine re-pitch
/live/clip/set/pitch_finetrack_id, clip_id, centsSet clip fine re-pitch
/live/clip/get/file_pathtrack_id, clip_idtrack_id, clip_id, file_pathGet clip file path
/live/clip/get/is_audio_cliptrack_id, clip_idtrack_id, clip_id, is_audio_clipQuery whether clip is audio
/live/clip/get/is_midi_cliptrack_id, clip_idtrack_id, clip_id, is_midi_clipQuery whether clip is MIDI
/live/clip/get/is_playingtrack_id, clip_idtrack_id, clip_id, is_playingQuery whether clip is playing
/live/clip/get/is_overdubbingtrack_id, clip_idtrack_id, clip_id, is_overdubbingQuery whether clip is overdubbing
/live/clip/get/is_recordingtrack_id, clip_idtrack_id, clip_id, is_recordingQuery whether clip is recording
/live/clip/get/will_record_on_starttrack_id, clip_idtrack_id, clip_id, will_record_on_startQuery whether clip will record on start
/live/clip/get/playing_positiontrack_id, clip_idtrack_id, clip_id, playing_positionGet clip's playing position
/live/clip/start_listen/playing_positiontrack_id, clip_idStart listening for clip's playing position. Replies are sent to /live/clip/get/playing_position, with args: track_id, clip_id, playing_position
/live/clip/stop_listen/playing_positiontrack_id, clip_idStop listening for clip's playing position.
/live/clip/get/loop_starttrack_id, clip_idtrack_id, clip_id, loop_startGet clip's loop start
/live/clip/set/loop_starttrack_id, clip_id, loop_startSet clip's loop start
/live/clip/get/loop_endtrack_id, clip_idtrack_id, clip_id, loop_endGet clip's loop end
/live/clip/set/loop_endtrack_id, clip_id, loop_endSet clip's loop end
/live/clip/get/warpingtrack_id, clip_idtrack_id, clip_id, warpingGet clip's warp mode
/live/clip/set/warpingtrack_id, clip_id, warpingSet clip's warp mode
/live/clip/get/launch_modetrack_id, clip_idtrack_id, clip_id, launch_modeGet clip's launch mode (0=Trigger, 1=Gate, 2=Toggle, 3=Repeat)
/live/clip/set/launch_modetrack_id, clip_id, launch_modeSet clip's launch mode (0=Trigger, 1=Gate, 2=Toggle, 3=Repeat)
/live/clip/get/launch_quantizationtrack_id, clip_idtrack_id, clip_id, launch_quantizationGet clip's launch Quantization Value (0=Global, 1=None, 2=8Bars, 3=4Bars, 4=2Bars, 5=1Bar, 6=1/2, 7=1/2T, 8=1/4, 9=1/4T, 10=1/8, 11=1/8T, 12=1/16, 13=1/16T, 14=1/32)
/live/clip/set/launch_quantizationtrack_id, clip_id, launch_quantizationSet clip's launch Quantization Value (0=Global, 1=None, 2=8Bars, 3=4Bars, 4=2Bars, 5=1Bar, 6=1/2, 7=1/2T, 8=1/4, 9=1/4T, 10=1/8, 11=1/8T, 12=1/16, 13=1/16T, 14=1/32)
/live/clip/get/ram_modetrack_id, clip_idtrack_id, clip_id, ram_modeGet clip's Ram Mode (0=False, 1=True)
/live/clip/set/ram_modetrack_id, clip_id, ram_modeSet clip's Ram Mode (0=False, 1=True)
/live/clip/get/warp_modetrack_id, clip_idtrack_id, clip_id, warp_modeGet clip's Warp Mode (0=Beats, 1=Tones, 2=Texture, 3=Re-Pitch, 4=Complex, 5=Invalid/Error, 6=Pro)
/live/clip/set/warp_modetrack_id, clip_id, warp_modeSet clip's Warp Mode (0=Beats, 1=Tones, 2=Texture, 3=Re-Pitch, 4=Complex, 5=Invalid/Error, 6=Pro)
/live/clip/get/has_groovetrack_id, clip_idtrack_id, clip_id, has_grooveGet clip Groove state (0=False, 1=True)
/live/clip/get/legatotrack_id, clip_idtrack_id, clip_id, legatoGet clip's Legato state (0=False, 1=True)
/live/clip/set/legatotrack_id, clip_id, legatoSet clip's Legato state (0=False, 1=True)
/live/clip/get/positiontrack_id, clip_idtrack_id, clip_id, positionGet clip's position (LoopStart)
/live/clip/set/positiontrack_id, clip_id, positionSet clip's position (LoopStart)
/live/clip/get/mutedtrack_id, clip_idtrack_id, clip_id, mutedGet clip's Muted state (0=False, 1=True)
/live/clip/set/mutedtrack_id, clip_id, mutedSet clip's Muted state (0=False, 1=True)
/live/clip/get/velocity_amounttrack_id, clip_idtrack_id, clip_id, velocity_amountGet clip's Velocity Amount (0.0-1.0 aka 0% to 100%)
/live/clip/set/velocity_amounttrack_id, clip_id, velocity_amountSet clip's Velocity Amount (0.0-1.0 aka 0% to 100%)
/live/clip/get/start_markertrack_id, clip_idtrack_id, clip_id, start_markerGet clip's start marker
/live/clip/set/start_markertrack_id, clip_id, start_markerSet clip's start marker, expressed in floating-point beats
/live/clip/get/end_markertrack_id, clip_idtrack_id, clip_id, end_markerGet clip's end marker
/live/clip/set/end_markertrack_id, clip_id, end_markerSet clip's end marker, expressed in floating-point beats

Scene API

Represents a scene, used to trigger a row of clips simultaneously. A scene's name, color, tempo and time signature can all be set and queried.

Documentation: Scene API

Scene methods

AddressQuery paramsResponse paramsDescription
/live/scene/firescene_idTrigger the given scene
/live/scene/fire_as_selectedscene_idTrigger the scene and select the next scene
/live/scene/fire_selectedTrigger the selected scene and select the next scene

Scene properties

  • Changes for any Scene property can be listened for by calling /live/scene/start_listen/<property> <scene_index>
  • Responses will be sent to /live/scene/get/<property>, with parameters <scene_index> <property_value>

Getters

AddressQuery paramsResponse paramsDescription
/live/scene/get/colorscene_idscene_id, colorQuery scene color
/live/scene/get/color_indexscene_idscene_id, color_indexQuery scene color index
/live/scene/get/is_emptyscene_idscene_id, is_emptyQuery whether scene is empty
/live/scene/get/is_triggeredscene_idscene_id, is_triggeredQuery whether scene is in triggered state
/live/scene/get/namescene_idscene_id, nameQuery scene name
/live/scene/get/temposcene_idscene_id, tempoQuery scene tempo
/live/scene/get/tempo_enabledscene_idscene_id, tempo_enabledQuery whether scene tempo is enabled
/live/scene/get/time_signature_numeratorscene_idscene_id, numeratorQuery scene time signature numerator
/live/scene/get/time_signature_denominatorscene_idscene_id, denominatorQuery scene time signature denominator
/live/scene/get/time_signature_enabledscene_idscene_id, enabledQuery whether scene time signature is enabled

Setters

AddressQuery paramsResponse paramsDescription
/live/scene/set/namescene_id, nameSet scene name
/live/scene/set/colorscene_id, colorSet scene color
/live/scene/set/color_indexscene_id, color_indexSet scene color_index
/live/scene/set/temposcene_id, tempoSet scene tempo
/live/scene/set/tempo_enabledscene_id, tempo_enabledSet whether scene tempo is enabled
/live/scene/set/time_signature_numeratorscene_id, numeratorSet scene time signature numerator
/live/scene/set/time_signature_denominatorscene_id, denominatorSet scene time signature denominator
/live/scene/set/time_signature_enabledscene_id, enabledSet whether scene time signature is enabled

Device API

Represents an instrument or effect.

Documentation: Device API

Device properties

  • Changes for any Parameter property can be listened for by calling /live/device/start_listen/parameter/value <track_index> <device index> <parameter_index>
AddressQuery paramsResponse paramsDescription
/live/device/get/nametrack_id, device_idtrack_id, device_id, nameGet device name
/live/device/get/class_nametrack_id, device_idtrack_id, device_id, class_nameGet device class_name
/live/device/get/typetrack_id, device_idtrack_id, device_id, typeGet device type
/live/device/get/num_parameterstrack_id, device_idtrack_id, device_id, num_parametersGet the number of parameters exposed by the device
/live/device/get/parameters/nametrack_id, device_idtrack_id, device_id, [name, ...]Get the list of parameter names exposed by the device
/live/device/get/parameters/valuetrack_id, device_idtrack_id, device_id, [value, ...]Get the device parameter values
/live/device/get/parameters/mintrack_id, device_idtrack_id, device_id, [value, ...]Get the device parameter minimum values
/live/device/get/parameters/maxtrack_id, device_idtrack_id, device_id, [value, ...]Get the device parameter maximum values
/live/device/get/parameters/is_quantizedtrack_id, device_idtrack_id, device_id, [value, ...]Get the list of is_quantized settings (i.e., whether the parameter must be an int/bool)
/live/device/set/parameters/valuetrack_id, device_id, value, value ...Set the device parameter values
/live/device/get/parameter/valuetrack_id, device_id, parameter_idtrack_id, device_id, parameter_id, valueGet a device parameter value
/live/device/get/parameter/value_stringtrack_id, device_id, parameter_idtrack_id, device_id, parameter_id, valueGet the device parameter value as a readable string ex: 2500 Hz
/live/device/set/parameter/valuetrack_id, device_id, parameter_id, valueSet a device parameter value

For devices:

  • name is the human-readable name
  • type is 1 = audio_effect, 2 = instrument, 4 = midi_effect
  • class_name is the Live instrument/effect name, e.g. Operator, Reverb. For external plugins and racks, can be AuPluginDevice, PluginDevice, InstrumentGroupDevice...

MidiMap API

Can be used to create assignments between MIDI CC and Live parameters.

Documentation: MidiMap API

MidiMap methods

AddressQuery paramsResponse paramsDescription
/live/midimap/map_cctrack_id, device_id, param_id, channel, ccCreate an assignment such that control change cc on channel channel will control the specified parameter.
                                            |

Note that, for consistency with other object types (and Live's internal API), channels are indexed from zero - so MIDI channel 1 should be queried with index 0, etc.


Utilities

Included with the framework is a command-line console utility run-console.py, which can be used as a quick and easy way to send OSC queries to AbletonOSC. Example:

(1653)(AbletonOSC)$ ./run-console.py
AbletonOSC command console
Usage: /live/osc/command [params]
>>> /live/song/set/tempo 123.0
>>> /live/song/get/tempo
(123.0,)
>>> /live/song/get/track_names
('1-MIDI', '2-MIDI', '3-Audio', '4-Audio')

Acknowledgements

Thanks to Stu Fisher (and other authors) for LiveOSC, the spiritual predecessor to this library. Thanks to Julien Bayle and NSUSpray for providing XML API docs, based on original work by Hanz Petrov.

For code contributions and feedback, many thanks to: