|
| 1 | +--- |
| 2 | +name: ableton |
| 3 | +description: Control Ableton Live through the AbletonMCP tools. Use when the user wants to build tracks, patches, clips, drums, automation, or generative music in Ableton, or asks to change any device, mixer, or transport setting in their Live set. Triggers on "Ableton", "Live set", "make a patch", "build a track", "add a synth", "write a clip", "sidechain", "automate", or any request to change how something sounds in their DAW. |
| 4 | +--- |
| 5 | + |
| 6 | +# Controlling Ableton Live |
| 7 | + |
| 8 | +You are driving a real Live set that a musician cares about. Everything you do |
| 9 | +lands immediately in their project. Act accordingly. |
| 10 | + |
| 11 | +## The rule that governs everything: you cannot hear |
| 12 | + |
| 13 | +You have no audio input. You can set a filter to 0.37 and confirm the value |
| 14 | +took, but you have no idea what came out of the speakers. |
| 15 | + |
| 16 | +So never tell the user something sounds good, warm, punchy, or lush. You don't |
| 17 | +know. Describe what you built and what you verified, then let them judge. |
| 18 | + |
| 19 | +Where you're genuinely useful is the tedious, mechanical work: 200 automation |
| 20 | +breakpoints, coprime loop lengths, phase offsets across six parameters, |
| 21 | +session scaffolding. Where you're useless is taste. Don't pretend otherwise. |
| 22 | + |
| 23 | +## Verify everything. Status codes lie. |
| 24 | + |
| 25 | +A `success` response does not mean the change happened. Always read the value |
| 26 | +back. |
| 27 | + |
| 28 | +This is not paranoia. Several commands return success while doing nothing, or |
| 29 | +while doing something different from what was asked. Read back after every |
| 30 | +change that matters: |
| 31 | + |
| 32 | +```python |
| 33 | +# set it |
| 34 | +cmd("set_device_parameter", {"track_index": 0, "device_index": 1, |
| 35 | + "parameter_index": 5, "value": 0.42}) |
| 36 | +# then PROVE it |
| 37 | +ps = cmd("get_device_parameters", {"track_index": 0, "device_index": 1}) |
| 38 | +``` |
| 39 | + |
| 40 | +If a read-back disagrees with what you asked for, say so plainly rather than |
| 41 | +reporting success. |
| 42 | + |
| 43 | +## Read the device before you set it |
| 44 | + |
| 45 | +Never guess parameter names, indices, or ranges. Every device differs, and |
| 46 | +similar devices differ in surprising ways. |
| 47 | + |
| 48 | +Call `get_device_parameters` first. It returns `name`, `value`, `min`, `max`, |
| 49 | +and `value_string`. That last field is the text Live prints on the knob |
| 50 | +("Off", "1/16", "440 Hz"), and it's the only way to know what a bare float |
| 51 | +like `Transpose Mode = 0.0` actually means. |
| 52 | + |
| 53 | +Ranges are not always 0 to 1. `Gate` on the Arpeggiator runs 1 to 200. |
| 54 | +`Transpose` on Drift runs -48 to 48. `Depth` on the M4L LFO runs 0 to 100. |
| 55 | +Read first. |
| 56 | + |
| 57 | +## Dropdowns are unreachable. Ask the user to click. |
| 58 | + |
| 59 | +Live doesn't expose routing choices as automatable parameters. If it's a |
| 60 | +dropdown or a Map button in the UI, the API cannot set it. Known cases: |
| 61 | + |
| 62 | +The Max for Live LFO's Map button. Every other knob on it (Rate, Depth, |
| 63 | +Jitter, Smooth, Phase, Shape) is yours, but the target isn't. Whenever you use a |
| 64 | +Max for Live LFO to modulate a parameter, you MUST stop and ask the user to |
| 65 | +click Map and pick the target. Do not proceed as if it is done, and do not |
| 66 | +pretend a workaround makes it unnecessary. Set every knob on the LFO first, then |
| 67 | +say exactly which knob to Map onto (device and parameter name). The click is |
| 68 | +once per LFO; after it, you own the rest. |
| 69 | + |
| 70 | +A Compressor's sidechain Audio From source. You can set `S/C On`, threshold, |
| 71 | +ratio, attack, release, and the whole sidechain EQ. You cannot pick the source |
| 72 | +track. |
| 73 | + |
| 74 | +Drift's modulation matrix source and destination selectors. The amounts |
| 75 | +(`Mod Matrix Amt 1`, `LP Mod Amt 1`) are settable; the routing is not. |
| 76 | + |
| 77 | +Grouping tracks (Cmd+G). The Live API cannot group existing tracks: it only |
| 78 | +reads group membership, never creates a group. Do not promise grouping. When |
| 79 | +the goal is a shared effect across tracks, which is the usual reason to group, |
| 80 | +make a return track instead: create_return_track, load the effect on it, then |
| 81 | +raise each source track's send. That is fully scriptable and is the right home |
| 82 | +for a send effect like a shared echo or reverb. Only a real group needs the user |
| 83 | +to select the tracks and press Cmd+G. |
| 84 | + |
| 85 | +Don't fake your way around these. Set everything you can, then tell the user |
| 86 | +exactly which control to click, naming the device and the parameter. |
| 87 | + |
| 88 | +## Free-running modulation of an arbitrary parameter needs the Map click |
| 89 | + |
| 90 | +There is no combination of tools that is free-running AND aims at any parameter |
| 91 | +AND needs no click. Be honest about which you are giving up: |
| 92 | + |
| 93 | +A native device LFO (Auto Filter's LFO to cutoff, Auto Pan) is free-running and |
| 94 | +fully scriptable, but only reaches its own fixed target. Reach for these first |
| 95 | +when the target is one they cover, because they need no click. |
| 96 | + |
| 97 | +`add_shaped_automation` draws a waveform onto any parameter, but it is clip |
| 98 | +automation: it repeats every loop and is phase-locked to the bar. It is not |
| 99 | +free-running. A long or coprime clip length hides the repetition but does not |
| 100 | +remove it. Use it when a loop-locked, editable curve is acceptable. |
| 101 | + |
| 102 | +The Max for Live LFO is the only way to get free-running modulation of an |
| 103 | +arbitrary parameter, and it requires the one Map click. If the user wants that |
| 104 | +combination, ask for the click. Never imply `add_shaped_automation` is |
| 105 | +equivalent to a real LFO; it loops, a real LFO does not. |
| 106 | + |
| 107 | +## Parameter names that will bite you |
| 108 | + |
| 109 | +These commands silently defaulted on a wrong argument name in older versions, |
| 110 | +and the names are not what you'd guess: |
| 111 | + |
| 112 | +`set_track_volume` wants `volume`, not `value`. |
| 113 | +`set_track_pan` wants `pan`, not `value`. |
| 114 | +`set_send_level` wants `level`, not `value`. |
| 115 | +`load_browser_item` wants `item_uri`, not `uri`. |
| 116 | +`load_browser_item_to_return` wants `return_index`, not `return_track_index`. |
| 117 | +`set_clip_automation` wants `parameter_name` and `envelope_data`, not indices |
| 118 | +and points. |
| 119 | + |
| 120 | +The MCP tool layer uses the correct names. If you're calling the socket |
| 121 | +directly, check the handler signature first. |
| 122 | + |
| 123 | +## Note probability: use the right command |
| 124 | + |
| 125 | +`add_notes_to_clip` uses Live's legacy 5-tuple API and cannot carry |
| 126 | +probability. It will silently drop it. |
| 127 | + |
| 128 | +For anything generative, use `add_notes_with_probability`. Each note takes |
| 129 | +`pitch`, `start_time`, `duration`, `velocity`, `mute`, plus optional |
| 130 | +`probability` (0 to 1) and `velocity_deviation`. It returns |
| 131 | +`verified_first_note` so you can prove probability actually landed. |
| 132 | + |
| 133 | +Weight probability rather than randomising it flat. Structural notes (bass |
| 134 | +roots, the downbeat kick) belong at 0.9 to 1.0 so the music keeps its skeleton. |
| 135 | +Decorative notes (hats, melody, arp tones) sit at 0.3 to 0.7 so the texture |
| 136 | +shifts. Uniform random probability everywhere reads as broken, not generative. |
| 137 | + |
| 138 | +## Reaching inside racks |
| 139 | + |
| 140 | +`get_device_parameters` on a drum rack or instrument rack returns only the |
| 141 | +rack's own macros, which are usually unassigned and useless. The devices |
| 142 | +inside are invisible to it. |
| 143 | + |
| 144 | +Use `get_rack_chains` to list the chains, then `get_chain_device_parameters` |
| 145 | +and `set_chain_device_parameter` with `chain_index` and `chain_device_index` |
| 146 | +to reach the actual device. That's how you set a single drum pad's decay. |
| 147 | + |
| 148 | +Note that MIDI note length does nothing on a drum rack. Drum racks are one-shot |
| 149 | +triggers. If a drum hit is too long, the fix is the pad's decay envelope inside |
| 150 | +the rack, never the note duration in the clip. |
| 151 | + |
| 152 | +## Clip automation targets by name. Be specific. |
| 153 | + |
| 154 | +`set_clip_automation` matches a parameter name across devices on the track. |
| 155 | +Names collide constantly: `Frequency` exists on Auto Filter, Erosion, Reverb, |
| 156 | +and Grain Delay simultaneously. |
| 157 | + |
| 158 | +Always pass `device_index` to scope it. Without it, an ambiguous name will |
| 159 | +raise (good) or, in older versions, silently automate the wrong device (bad). |
| 160 | + |
| 161 | +Verify with `get_clip_automation`, which samples the envelope and returns the |
| 162 | +real curve plus `is_flat`. If `is_flat` is true, your automation didn't land. |
| 163 | + |
| 164 | +## Generative patches: what actually works |
| 165 | + |
| 166 | +Coprime loop lengths are the strongest tool you have. Clips at 3, 5, 7, 11, |
| 167 | +13, and 17 bars won't realign for over a million bars. Same clips, endlessly |
| 168 | +shifting relationship, no automation needed. |
| 169 | + |
| 170 | +Unsynced LFOs drift against the grid. Set `LFO T Mode` to free (not synced) |
| 171 | +and a very slow `LFO Freq`. On the M4L LFO, `Jitter` makes the period itself |
| 172 | +wander, so it never repeats even against itself. A synced LFO is just a loop. |
| 173 | + |
| 174 | +Drawn automation is the opposite of generative. It repeats identically every |
| 175 | +pass. Reach for LFOs and probability instead when the goal is "never the same |
| 176 | +twice." |
| 177 | + |
| 178 | +Live's `Random` MIDI effect has `Chance` at 0 by default, so it does nothing |
| 179 | +until you raise it. Pair it with the `Scale` device to keep scattered pitches |
| 180 | +in key. Set Scale's `Map 0` through `Map 11` explicitly rather than using |
| 181 | +`Use Current Scale`, which depends on the song scale and will surprise you. |
| 182 | + |
| 183 | +## Sound design facts worth knowing |
| 184 | + |
| 185 | +Note length is inaudible when sustain is near zero. Every note decays to |
| 186 | +silence immediately, so a 4 beat note and a half beat note sound identical. |
| 187 | +If the user asks for varied note lengths, raise sustain first or nothing |
| 188 | +changes. |
| 189 | + |
| 190 | +A pure tone plus high resonance plus a long release is a bell, by definition. |
| 191 | +If the user says something sounds like a bell and doesn't want that, remove the |
| 192 | +pitch (use noise) or the resonance. You can't fix it by tweaking the release. |
| 193 | + |
| 194 | +Big and staccato are opposites. Length and reverb make things big; both destroy |
| 195 | +staccato. Don't try to deliver both from the same parameters. |
| 196 | + |
| 197 | +Reverb is usually the reason something isn't staccato, not note length. Check |
| 198 | +both the track's own reverb and its return sends. |
| 199 | + |
| 200 | +Timing is what makes something sound digital. Notes on exact grid positions |
| 201 | +read as machine-made no matter how much you vary velocity. Offset each note by |
| 202 | +a small random amount, biased late (players drag behind the beat far more often |
| 203 | +than they rush), and it reads as human. |
| 204 | + |
| 205 | +An arpeggiator discards incoming note timing and emits at its own fixed rate. |
| 206 | +Editing clip note lengths on an arp track does nothing. Automate `Gate` if you |
| 207 | +want note length to vary. |
| 208 | + |
| 209 | +## Safety |
| 210 | + |
| 211 | +Ask before destructive work. Deleting tracks, clearing a set, or overwriting |
| 212 | +clips the user built by hand deserves a confirmation. |
| 213 | + |
| 214 | +Live won't delete the last remaining track. Create the new one first, then |
| 215 | +delete the old. |
| 216 | + |
| 217 | +There's no command for a new Live set. That's File, New Live Set, by hand. |
| 218 | + |
| 219 | +Prefer working in Session view for anything that loops or phases. Arrangement |
| 220 | +view is a fixed timeline, and launching a scene restarts every clip, which |
| 221 | +resets any phasing you set up. |
0 commit comments