Skip to content

als file format

nate
Aug 23, 20262 min read

als file format

an Ableton Live set (.als) is a gzip-compressed XML document. gunzip -c set.als yields a few MB of readable <Ableton><LiveSet>…. it reflects the last save, not the live state.

arrangement automation is in the file, joined by id

the API does not expose arrangement-lane breakpoints, but the file does:

  • each automatable parameter element carries an <AutomationTarget Id="N"> child (next to its <Manual Value=…> current value).
  • each track has <AutomationEnvelopes><Envelopes><AutomationEnvelope> whose <EnvelopeTarget><PointeeId Value="N"/> names that id, and whose <Automation><Events> holds FloatEvent / BoolEvent / EnumEvent breakpoints with Time (beats) and Value, optionally bezier handles CurveControl1X/Y, CurveControl2X/Y. a Time="-63072000" event is the pre-roll initial value.

so: walk the tree once indexing every AutomationTarget id by its enclosing track (MidiTrack/AudioTrack/ReturnTrack/MainTrack, name in Name/EffectiveName), device (the child of a <Devices> container; name in UserName or the tag, e.g. Eq8, Compressor2, DrumGroupDevice) and parameter element (the tag; rack macros are MacroControls.N, named by the sibling MacroDisplayNames.N). mixer parameters sit under DeviceChain/Mixer (Volume, Pan, Sends, and on the main track Tempo, TimeSignature). then join envelopes to that index.

values are the file's native units (mixer volume 0–1 where 0.85 is 0 dB, gains in dB, on/off as bools, enums as ints), not Live's display strings.

prior art

existing parsers (pyableton, dawtool, loive) model the schema or read tempo automation; none resolve envelopes to arbitrary device parameters, but the join above is ~150 lines of ElementTree.

sources

  • github.com/zzstoatzz/ableton-mcp — MCP_Server/als.py, 2026-08-23 (Live 12.4.3 set, MajorVersion 5 / MinorVersion 12.0)

Did you enjoy this article?

Recommend it — Standard Reader surfaces well-loved writing to more readers across the network.

Across the AtmosphereDiscussions