Ableton Extensions Python SDK

Honest limits

This SDK can only do what Ableton's official Extensions SDK exposes. Here's what it can't do, so you don't build on sand.

Request / response only — no live events

You read and write on demand. There are no observers: you can't subscribe to "tempo changed" or "selection changed" and get callbacks. The only inbound events are the commands and context-menu actions the user triggers.

No transport or playback

You can't start/stop playback, read the play position, arm record, or fire clips for playback. There's no real-time or per-sample access — this is not a replacement for Max for Live or a Control Surface script.

No automation

You can set a device parameter's current value, but you can't read or write automation envelopes.

Device parameters are raw numbers

Parameter values are the host's internal numbers, with min/max. There are no display strings (e.g. you get a number, not "-12.0 dB"). Quantized params expose value_items for their discrete options.

No selection reading (mostly)

You can act on a selection passed to an @on_selection handler, but you can't poll "what's currently selected" on demand.

Filesystem is sandboxed

Inside the host, file access is meant to stay within the extension's storage and temp directories. To bring an outside file into a Set, use resources.import_into_project(), which runs host-side. A stricter OS sandbox is coming, so don't rely on reaching arbitrary paths.

Single API version

This release targets host API 1.0.0. The Python SDK refuses to connect to a mismatched host rather than misbehave silently.

If a limit here is a dealbroker for your idea, it's a limit of Ableton's SDK itself — not something this project can route around.
Ableton Extensions Python SDK · MIT · GitHub