Page 1 of 1

Unofficial documentation for MIDI Remote Scripts (Live Object Model 9 to 12 + framework guides)

Posted: Mon May 25, 2026 3:09 pm
by julienb
Hi everyone,

If you've ever tried to write or modify a MIDI Remote Script, you know the problem: the framework behind every hardware integration in Live has never had real documentation. You learn it by reading other people's scripts and guessing.

I've been trying to fix that

https://midiremotescripts.structure-void.com

Image

Quick background: I was the first to decompile Live's MIDI Remote Scripts back in 2012, and I maintain the decompiled-sources repos some of you already use.

For anyone starting out:
  • Your first script: where the script folders live on Mac/Windows, a minimal skeleton, activating it in Live, and reading Log.txt.
  • From idea to working script: a full walkthrough building a real generic-controller script (8 encoders to the device, transport buttons, a clip-launch grid), with all the code explained.
  • A cookbook of short, copy-pasteable recipes.
For the more experienced:
  • The full Live Object Model for Live 9, 10, 11 and 12, side by side, in one place. Finally compare what changed across versions instead of guessing after an upgrade.
  • The framework internals: ControlSurface lifecycle, the Component / Layer / Mode model, Controls & Elements, the full MIDI message flow (button press to Live and back to the LED), and v2 (_Framework) vs v3 (ableton.v3).
How it's built, for the curious: Live 12 is Python 3.11, which can't be reliably decompiled anymore (zero-cost exception tables, adaptive interpreter). But documentation doesn't need the source. A compiled Python object still keeps the whole API surface: class hierarchy, argument names, docstrings. So I read that straight from the bytecode, and capture the rest (defaults, the C-level Live module) by introspecting from inside Live at runtime.

Unofficial, not affiliated with Ableton. Feedback and corrections very welcome.

Happy scripting.

Re: Unofficial documentation for MIDI Remote Scripts (Live Object Model 9 to 12 + framework guides)

Posted: Thu May 28, 2026 4:13 pm
by julienb
Hi everyone,

Companion to the docs post. Even once you understand the framework, writing a script from scratch is mostly boilerplate: you wire up CC and note numbers by hand, guess at the right element types, reload Live, read Log.txt, repeat. For a simple "8 encoders to the device, transport buttons, a few faders" controller, that loop eats an evening before anything moves.

Image

So I built a generator that does the tedious part for you, entirely in the browser:

https://midiremotescripts.structure-void.com/generator/

What it does:
  • Live signal detection: plug in your controller, move things, and it reads the incoming MIDI over WebMIDI. No looking up CC numbers, it captures them as you touch each control.
  • Mapping by action: assign each control to an action, grouped by family (selected track, global transport, selected device). Faders, buttons, encoders.
  • Device parameter banks: capture a bank of 1 to 32 encoders, pick the MapMode per bank (absolute or one of the relative modes), and it wires them to the appointed device with blue-hand following.
  • Real output: it emits a working ControlSurface script (the .py plus __init__.py), with a live code preview and file tabs, downloadable as a zip. Drop it into your Remote Scripts folder and it runs.


How it's built, for the curious: it is fully static. No backend, no account, no upload, nothing leaves the page. WebMIDI reads your controller and the Python is generated client-side. The output is plain readable code, not a black box: you can open it, learn from it, and keep editing by hand with the docs next to you.

One honest note: the generated scripts target the classic _Framework layer for now (v2). The ableton.v3 path is on the list.

Unofficial, not affiliated with Ableton. Feedback and bug reports very welcome.