home/ modules/ controlling-live-over-osc-with-abletonosc

Controlling Ableton Live Over OSC with AbletonOSC

  • learner can navigate the Live Object Model tree and reach any track, clip, device or parameter
  • learner can install and drive AbletonOSC as a MIDI remote script to control transport, devices, clips and MIDI notes over OSC
  • learner can build a synchronous query interface and bulk data queries against Live's state via the fixed request/reply port pair

Using AbletonOSC, build a control panel that starts/stops transport and sets tempo, edits notes in a clip, tweaks a device parameter by index, and bulk-queries several tracks' data in one message — issuing wildcard queries and the synchronous client pattern where useful — and drive a short performance of a Live set entirely over OSC.

This module is where your rig stops being “a laptop running Live” and becomes a programmable instrument: an external process — a Python script, a visual host, a generative system — driving an entire Live session over UDP. In an AV performance context this is the backbone move: your code fires clips, nudges tempo, writes MIDI notes into a running clip, and sweeps a synth’s filter, all without touching the Live GUI.

The arc starts supported. First, internalise the Live Object Model tree — Song at the root, tracks, clip slots, devices, parameters, all zero-based — because every OSC address you will ever send is a path plus indices into that tree. Install AbletonOSC as a MIDI remote script (no Max for Live needed) and send your first transport commands: start/stop and tempo via the Song API. Then wire the reply side using the fixed 11000/11001 port pair, and wrap it in the synchronous client pattern (threading.Event blocking on the reply) so queries feel like function calls. From there, layer in note editing, device parameter control by index, clip-slot firing for session-style launching, wildcard queries for one-shot property sweeps, and the single-message bulk track_data query to sync your panel to the set’s state.

Each required atom gates a clause of the capstone: you cannot build the panel without addresses (LOM), transport, notes, parameters, firing, replies, sync queries, wildcards, and bulk reads. The supporting atoms enrich rather than gate — the M4L view of the LOM, the internal dispatch and track_data implementations, launch quantization codes, and runtime CC mapping are where to go when you want depth or your queries behave unexpectedly.

Atoms in this module

Required — these gate the capstone

The Live Object Model organises Live's entire state as a tree: Song > Tracks > Clips/Devices > Parameters
Concept L2 First instrument JN
AbletonOSC is installed as a MIDI remote script that exposes Live's full API over OSC
Concept L2 First instrument JN
The Song API lets you start/stop playback, set tempo, and jump to cue points using OSC messages
Procedure L2 First instrument J
AbletonOSC lets you add, remove, and query MIDI notes in a clip programmatically over OSC
Procedure L3 Craft J
AbletonOSC's Device API lets you read and write any synthesiser or effect parameter by index via OSC
Procedure L3 Craft J
The /live/song/get/track_data command queries multiple tracks and clips in a single OSC message
Procedure L3 Craft J
The AbletonOSC Python client uses a threading.Event to block on an OSC reply, creating a synchronous query interface
Procedure L3 Craft JN
AbletonOSC uses a fixed port pair: commands arrive on 11000, replies go out on 11001
Fact L2 First instrument J
A Clip Slot is the container; firing it via OSC triggers play/pause regardless of whether a clip exists
Concept L2 First instrument J
AbletonOSC supports OSC wildcard patterns using * to query all sub-addresses matching a path segment
Concept L3 Craft J

Supporting — enrichment, not gating

Ableton's Live Object Model exposes Live's internals to Max for Live for programmatic control
Concept L2 First instrument JE
The track_data handler uses a dot-namespace format to query track, clip, clip_slot, or device properties in a single call
Procedure L3 Craft JN
AbletonOSC implements OSC wildcard dispatch by converting * to a [^/]+ regex and matching all registered handlers
Concept L3 Craft JN
Clip launch quantization in AbletonOSC maps integer codes to musical durations, from None to 1/32
Fact L2 First instrument J
AbletonOSC's MidiMap API creates persistent MIDI CC assignments to device parameters via OSC, without Max for Live
Concept L3 Craft J
Max for Live devices come in three types — Audio Effect, Instrument, and MIDI Effect — each with distinct signal roles
Fact L2 First instrument JB