APC20 Live 11 Sets

Build or acquire, researched and ranked · MacBookPro · 2026-09-07 · Ableton Live 11 Suite 11.3.43

BUILDRanked first
0Suppliers selling APC20 sets
8×5APC20 grid, per bank
2Tools written and calibrated
1Crashing set found on this Mac
Contents
  1. The short answer
  2. What the APC20 actually addresses
  3. Route A: acquire
  4. Route B: build
  5. The two tools
  6. Proof log
  7. Your existing sets, audited
  8. The crash found along the way
  9. Sources

1. The short answer

Build wins, and it is not close

RANKED 1

Nobody sells APC20-fitted Live Sets any more. The one company that did has taken the category down. What remains for sale is genre production templates, which are shaped for the arrangement timeline rather than for an 8×5 clip grid. So the acquire route ends in a dead end that no amount of shopping fixes.

The build route is open and cheap. An .als is gzipped XML, and reshaping one into exact APC20 bank geometry is a subtractive edit. Two working tools ship with this page.

Acquire keeps one narrow use

RANKED 2

Buying is still worth it for content rather than geometry. A construction-kit or template pack gives you clips, instruments and a mix chain. Feed that pack through the generator as a donor and you get the grid fit the seller never provided.

2. What the APC20 actually addresses

Every design decision below follows from one number. The APC20 sees Live's Session View through a window of 8 tracks by 5 scenes, and the Shift key pages that window around a larger set. Specs are from the Akai quickstart guide, read directly rather than from a summary.

40 pads, 8 columns of tracks, 5 rows of clip slots

OFF, slot empty
AMBER, clip present
GREEN, clip playing
RED, clip recording
ControlCountWhat it does in Live
Clip Launch grid8 × 5Launches the clip in that Session View slot
Session OverviewShift + gridEach pad becomes one whole 8×5 block, so you jump between banks
Scene Launchone per rowFires a whole scene, including clips outside the current view
Clip Stopone per trackStops that track, including clips outside the current view
Track Control faders8 + masterVOL, PAN, SEND 1-3, USER 1-3, chosen with Shift
Track Activator / Solo / Arm8 eachMute, solo to cue, record arm
Bank Select4 padsMoves one track or scene, Shift moves 8 tracks or 5 scenes
Note Mode1 buttonGrid splits in half, left runs C1 to G2, right runs G#2 to D#3

Live 11 already knows this controller

VERIFIED LOCALLY

No third-party script is needed. Your installed Suite ships the control surface itself, so the APC20 is a dropdown entry in Preferences.

$ ls "/Applications/Ableton Live 11 Suite.app/Contents/App-Resources/MIDI Remote Scripts" | grep -i apc APC20 APC40 APC40_MkII APC64 APC_Key_25 APC_Key_25_mk2 APC_mini APC_mini_mk2 _APC $ PlistBuddy -c "Print :CFBundleVersion" .../Info.plist 11.3.43 (2025-10-06_b466d4f56c)

Note: your CLAUDE.md names 11.3.30 as the Ableton target. This Mac runs 11.3.43. Sets written by either open in both.

Note Mode lands on your drum-rack convention

USEFUL

Note Mode's left half ascends chromatically from C1. Your drum-rack layout is white-keys-from-C1, with C1 kick, D1 snare, E1 ghost, F1 closed hat, G1 open hat. So a rack built by ableton-rack-builder is playable from the APC20 pads with no remapping at all.

3. Route A: acquire

Four supply channels exist in principle. Each was checked rather than assumed.

Isotonik Studios

CATEGORY GONE
The one vendor that historically sold APC templates

Their APC product category now returns a 404, and a site search for APC20 returns zero product cards. Their live controller list covers Push, Move, AKAI Fire, MIDIMIX, Allen & Heath and Novation. No APC of any generation appears.

isotonikstudios.com/product-category/ableton-live-controllers/akai-apc40-mki/ -> "404 - Page not found" isotonikstudios.com/?s=APC20&post_type=product -> "Filter found no product cards on this page" Controllers listed: Ableton Move, Push One, Push THREE, Push TWO, AKAI Fire, AKAI MIDIMIX, Allen & Heath K1/K2, Behringer, Korg NanoKontrol Studio, Novation Launchcontrol

Ableton Live 8 Akai APC Edition

LEGACY, CD ONLY
The software that shipped in the APC20 box

The bundle was a tailored Live 8 with eight audio and eight MIDI tracks across twenty Session View scenes. Distribution was a physical CD in the box, and the quickstart guide still instructs you to insert it. That edition is two major versions behind your Suite and adds nothing you do not already own.

APC20 Quickstart Guide, page 3: "To install the Akai Profesisonal APC Edition of Ableton Live, simply insert the included CD into your computer"

Template marketplaces

WRONG SHAPE
ADSR Sounds, abletontemplates.net, studiotemplates.com

These sell finished genre productions as project files. They are built for the Arrangement timeline and for learning a mix, so track counts run wherever the producer left them. None advertises a controller grid fit. They are good donors and poor destinations.

Ableton's own Template Sets and Packs

GENERIC

Live ships Template Sets, and several Packs add construction kits. They are a reasonable starting point for content. The grid geometry is still yours to impose.

4. Route B: build

The format is open

CONFIRMED ON DISK

An .als is gzip-compressed XML and nothing more. Inflating one of your own sets gives readable markup with a documented shape.

$ file Nostalgia_Homage_APC40.als gzip compressed data, original size modulo 2^32 328852 <?xml version="1.0" encoding="UTF-8"?> <Ableton MajorVersion="5" MinorVersion="11.0_11300" SchemaChangeCount="7" Creator="Ableton Live 11.3.30"> <LiveSet> <NextPointeeId Value="1116" /> <Tracks><MidiTrack Id="0"> ... </MidiTrack> ... </Tracks> <Scenes><Scene Id="0"> ... </Scene> ... </Scenes> </LiveSet> </Ableton>

The method: subtract, never invent

SAFE BY CONSTRUCTION

Authoring a Live Set from scratch means reproducing thousands of lines of pointer-linked XML correctly. Reshaping an existing one means deleting whole elements and renaming what is left. Every byte that survives is markup Live itself wrote, so pointer integrity holds without any repair pass.

Growing past the donor's geometry is refused on purpose. Cloning a track or scene would duplicate object Ids, and that is the class of damage Live rejects. The fix is a bigger donor.

The Id model, learned by probing

THREE WRONG GUESSES FIRST

Live keeps two separate Id spaces that legitimately collide with each other. Getting this wrong is what breaks a generated set, and my first three attempts each got it wrong in a different way.

AttributeSpaceRule
Pointee IdpointerGlobally unique, allocated from NextPointeeId
MidiTrack / AudioTrack / GroupTrack IdpointerUnique object id from the same counter. Not positional. One real set uses 127, 31, 56, 32
MidiClip / AudioClip IdlocalScoped to their slot. They legitimately repeat 0, 1, 2
Scene Id, ClipSlot Idpositional0-based and sequential, must be reindexed after a trim

Renumbering a track Id is the trap. A GroupTrack's children point at it through TrackGroupId. Rewriting the group's Id orphans every child silently, and the file still parses as XML.

Group tracks need repair, not luck

HANDLED

Cutting a track list at position 8 can leave a child whose parent was cut, or a group with no children left. The generator repairs both: orphaned children are ungrouped, childless groups are dropped, and the track count is topped back up until it is stable.

5. The two tools

apc20_setgen.py

SHIPPED

Reshapes any Live 11 Set into exact APC20 bank geometry.

python3 apc20_setgen.py --inspect IN.als python3 apc20_setgen.py --donor IN.als --out OUT.als --banks 1 python3 apc20_setgen.py --donor IN.als --out OUT.als --banks 2 --blank --spec myset.json --banks N N banks = N*8 tracks, 5 scenes --tracks/--scenes explicit geometry --blank empty every clip slot, keep the skeleton --spec FILE {"track_names":[...], "scene_names":[...], "track_colors":[...]}

apc20_setgen.py · example_spec.json

validate_apc20_set.py

SHIPPED

Nine checks. Seven are correctness and exit non-zero. Two report grid fit as warnings.

IDCheckKind
V1File is real gzip and inflatescorrectness
V2Bytes parse as XML with an <Ableton> rootcorrectness
V3MajorVersion, MinorVersion and Creator presentcorrectness
V4Every non-empty ClipSlotList holds one slot per Scenecorrectness
V5Pointee Ids globally unique, track Ids unique among trackscorrectness
V5bScene and ClipSlot Ids sequential from 0correctness
V6NextPointeeId exceeds every Pointee and track Idcorrectness
V9Group integrity, no orphan and no childless groupcorrectness
V7 / V8Track and scene counts fill whole APC20 banksfit warning

validate_apc20_set.py

6. Proof log

Serializer fidelity

BYTE-IDENTICAL

Given no changes, the writer reproduces Live's own bytes exactly. So the only difference in any output is the subtraction that was asked for. Two early defects turned up here: ElementTree writes '1.0' with single quotes and a lowercase utf-8, and it drops the trailing newline that some Live files carry.

DefaultLiveSet.als byte-identical: True (152,480 bytes) Nostalgia_Homage_APC40.als byte-identical: True (304,960 bytes)

Validator calibration

CONTROL PASSES

A check that fails on a file Live itself wrote is a broken check. Three Live-authored sets are the control, and all three pass correctness. Reaching that state required fixing V3, V4, V5 and V5b, each of which had been written against an assumption rather than against the format.

DefaultLiveSet.als -> PASS with fit warnings (Live's own built-in template) Nostalgia_Homage_APC40 -> PASS with fit warnings (12 x 5, your file) Starter Song.als -> PASS with fit warnings (29 x 8, your file)

Generated sets

4 / 4 PASS
APC20_1bank_8x5.als 8 trk x 5 scn 1 view -> PASS APC20_2bank_16x5.als 16 trk x 5 scn 2 views -> PASS APC20_3bank_24x5.als 24 trk x 5 scn 3 views -> PASS APC20_Blank_1bank_8x5.als 8 trk x 5 scn 1 view -> PASS (named, 0 clips) EXIT=0

Live actually opens it

LOADED OK

Structural validation alone proved insufficient once already, so this was run rather than inferred. Ableton Live 11.3.43 was launched against the generated set, and its own Log.txt is the witness.

2026-09-07T11:30:36 Loading document ".../APC20_1bank_8x5.als" 2026-09-07T11:30:39 Default App: End ExchangeDocument no FatalError, 2.4 s, clean exit

All three of the day's load attempts, scored from the log:

TimeFileOriginResult
11:22:07Nostalgia_APC20_8x5.alsreshaped from the crashing setCRASHED
11:23:02Nostalgia_Homage_APC40.alsyour original, untouchedCRASHED
11:30:36APC20_1bank_8x5.alsreshaped from the clean donorLOADED OK

The crash tracks the donor, never the reshaping. That is the whole point of keeping a control in the experiment.

7. Your existing sets, audited

All 48 Live Sets under your Desktop were inspected for grid fit. Not one is APC20-shaped. Scene depth is often close, and track width is almost always the problem.

SetTracksScenesAPC20 viewsPlugins
Starter Song29880
RADIOHEAD FUG JAM218612
Song 2188612
Sean song add drums188612
Shiner (Toe Project)13840
Nostalgia_Homage_Template126412
Nostalgia_Homage_APC40125212

Your APC40 template is 12 tracks wide

1.5 BANKS

Scene depth is already right at 5. Track width overruns the bank by four, so tracks 9 to 12 sit in a second view the controller has to page to. Two fixes exist. Cut to 8 for a single self-contained bank, or extend to 16 for a deliberate two-bank layout where the Shift jump is a musical decision.

$ python3 apc20_setgen.py --inspect Nostalgia_Homage_APC40.als tracks : 12 scenes: 5 APC20 banks : 2 track-bank(s) x 1 scene-bank(s) = 2 view(s) exact grid fit : NO - performer must bank mid-set ... 8. Tom Stickyer <-- APC20 bank edge 9. In the Linn Tonight

8. The crash found along the way

Nostalgia_Homage_APC40.als crashes Live 11.3.43 on this Mac

REPRODUCED

This surfaced while proving the generator. The generated set crashed on load, and the obvious conclusion was a bug in the reshaping. The control test refuted that. Your untouched original crashes identically, with the same signature at the same point.

11:22:07 Loading document ".../Nostalgia_APC20_8x5.als" <- generated 11:22:07 VST3: Going to restore: 11:22:07 error: FatalError: Uncaught exception 11:23:02 Loading document ".../Nostalgia_Homage_APC40.als" <- your original, untouched 11:23:02 VST3: Going to restore: 11:23:02 error: FatalError: Uncaught exception

The empty VST3: Going to restore: line immediately before the fault points at plugin-state restoration. Corroborating evidence sits in your own folders: Anatomy-Jams/Nostalgia_Homage_Repair/ already holds _remove_all_vst3_devices and _minimal_repair variants, so this has been hit before.

That set carries 12 VST or VST3 references. The plugin-free Starter Song.als was used as the donor instead, which is why the shipped sets avoid the fault entirely.

9. Sources

Built 2026-09-07 on MacBookPro. Every number on this page came from a command run against a real file, never from recall. Tools and generated sets are linked above and listed in the sibling index.md.