livepilot 1.4.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.4.4",
4
- "description": "AI copilot for Ableton Live 12 — 104 MCP tools for music production, sound design, and mixing",
3
+ "version": "1.5.0",
4
+ "description": "AI copilot for Ableton Live 12 — 127 tools, device atlas (280+ devices), real-time audio analysis, and technique memory",
5
5
  "author": "Pilot Studio",
6
6
  "skills": [
7
7
  "skills/livepilot-core"
@@ -1,11 +1,17 @@
1
1
  ---
2
2
  name: livepilot-core
3
- description: Core discipline for controlling Ableton Live 12 through LivePilot's 104 MCP tools. Use whenever working with Ableton Live through MCP tools.
3
+ description: Core discipline for controlling Ableton Live 12 through LivePilot's 127 MCP tools, device atlas (280+ devices), M4L analyzer (spectrum/RMS/key detection), and technique memory. Use whenever working with Ableton Live through MCP tools.
4
4
  ---
5
5
 
6
6
  # LivePilot Core — Ableton Live 12 AI Copilot
7
7
 
8
- LivePilot gives you 104 MCP tools to control Ableton Live 12 in real-time: transport, tracks, clips, MIDI notes, devices, scenes, mixing, browser, arrangement, and technique memory.
8
+ LivePilot is an agentic production system for Ableton Live 12. It combines 127 MCP tools with three layers of intelligence:
9
+
10
+ - **Device Atlas** — A structured knowledge corpus of 280+ instruments, 139 drum kits, and 350+ impulse responses. Consult the atlas before loading any device. It contains real browser URIs, preset names, and sonic descriptions. Never guess a device name — look it up.
11
+ - **M4L Analyzer** — Real-time audio analysis on the master bus (8-band spectrum, RMS/peak, key detection). Use it to verify mixing decisions, detect frequency problems, and find the key before writing harmonic content.
12
+ - **Technique Memory** — Persistent storage for production decisions. Consult `memory_recall` before creative tasks to understand the user's taste. Save techniques when the user likes something. The memory shapes future decisions without constraining them.
13
+
14
+ These layers sit on top of 127 deterministic tools across 11 domains: transport, tracks, clips, MIDI notes, devices, scenes, mixing, browser, arrangement, technique memory, and real-time DSP analysis.
9
15
 
10
16
  ## Golden Rules
11
17
 
@@ -58,7 +64,7 @@ LivePilot gives you 104 MCP tools to control Ableton Live 12 in real-time: trans
58
64
  - MIDI track with no instrument loaded
59
65
  - Notes programmed but clip not fired
60
66
 
61
- ## Tool Domains (104 total)
67
+ ## Tool Domains (127 total)
62
68
 
63
69
  ### Transport (12)
64
70
  `get_session_info` · `set_tempo` · `set_time_signature` · `start_playback` · `stop_playback` · `continue_playback` · `toggle_metronome` · `set_session_loop` · `undo` · `redo` · `get_recent_actions` · `get_session_diagnostics`
@@ -78,8 +84,8 @@ LivePilot gives you 104 MCP tools to control Ableton Live 12 in real-time: trans
78
84
  ### Scenes (8)
79
85
  `get_scenes_info` · `create_scene` · `delete_scene` · `duplicate_scene` · `fire_scene` · `set_scene_name` · `set_scene_color` · `set_scene_tempo`
80
86
 
81
- ### Mixing (8)
82
- `set_track_volume` · `set_track_pan` · `set_track_send` · `get_return_tracks` · `get_master_track` · `set_master_volume` · `get_track_routing` · `set_track_routing`
87
+ ### Mixing (11)
88
+ `set_track_volume` · `set_track_pan` · `set_track_send` · `get_return_tracks` · `get_master_track` · `set_master_volume` · `get_track_routing` · `set_track_routing` · `get_track_meters` · `get_master_meters` · `get_mix_snapshot`
83
89
 
84
90
  ### Browser (4)
85
91
  `get_browser_tree` · `get_browser_items` · `search_browser` · `load_browser_item`
@@ -90,6 +96,9 @@ LivePilot gives you 104 MCP tools to control Ableton Live 12 in real-time: trans
90
96
  ### Memory (8)
91
97
  `memory_learn` · `memory_recall` · `memory_get` · `memory_replay` · `memory_list` · `memory_favorite` · `memory_update` · `memory_delete`
92
98
 
99
+ ### Analyzer (20) — requires LivePilot Analyzer M4L device on master track
100
+ `get_master_spectrum` · `get_master_rms` · `get_detected_key` · `get_hidden_parameters` · `get_automation_state` · `walk_device_tree` · `get_clip_file_path` · `replace_simpler_sample` · `load_sample_to_simpler` · `get_simpler_slices` · `crop_simpler` · `reverse_simpler` · `warp_simpler` · `get_warp_markers` · `add_warp_marker` · `move_warp_marker` · `remove_warp_marker` · `scrub_clip` · `stop_scrub` · `get_display_values`
101
+
93
102
  ## Workflow: Building a Beat
94
103
 
95
104
  1. `get_session_info` — check current state
@@ -120,11 +129,43 @@ LivePilot gives you 104 MCP tools to control Ableton Live 12 in real-time: trans
120
129
  ## Workflow: Mixing
121
130
 
122
131
  1. `get_session_info` — see all tracks and current levels
123
- 2. `set_track_volume` / `set_track_pan` set levels and stereo position
124
- 3. `set_track_send` route to return tracks for shared effects
125
- 4. `get_return_tracks` — check return track setup
126
- 5. `set_master_volume` — final output level
127
- 6. `set_track_routing` — configure input/output routing
132
+ 2. `get_mix_snapshot` one-call overview of all levels, panning, routing, mute/solo
133
+ 3. `set_track_volume` / `set_track_pan` set levels and stereo position
134
+ 4. `set_track_send` — route to return tracks for shared effects
135
+ 5. `get_return_tracks` — check return track setup
136
+ 6. `set_master_volume` — final output level
137
+ 7. `set_track_routing` — configure input/output routing
138
+ 8. `get_track_meters` / `get_master_meters` — check real-time output levels
139
+
140
+ ### With LivePilot Analyzer (M4L device on master):
141
+ 9. `get_master_spectrum` — check frequency balance across 8 bands (sub → air)
142
+ 10. `get_master_rms` — true RMS and peak levels
143
+ 11. `get_detected_key` — detect musical key before writing harmonies/bass
144
+ 12. `get_hidden_parameters` — see ALL device params including hidden ones
145
+ 13. `get_automation_state` — check which params have automation before overwriting
146
+ 14. `walk_device_tree` — inspect nested racks and drum pads
147
+ 15. `get_display_values` — human-readable parameter values ("440 Hz", "-6 dB")
148
+
149
+ ## Workflow: Sample Chopping
150
+
151
+ 1. Resample your beat to an audio track (set input to Resampling, arm, record)
152
+ 2. `get_clip_file_path` — get the audio file path of the recorded clip
153
+ 3. Load Simpler on a new MIDI track (with any sample pre-loaded)
154
+ 4. `replace_simpler_sample` — load the resampled audio into Simpler
155
+ 5. `set_simpler_playback_mode` — set to Slice mode
156
+ 6. `get_simpler_slices` — see all auto-detected slice points
157
+ 7. Program MIDI patterns targeting slice indices
158
+ 8. Use `reverse_simpler` / `crop_simpler` / `warp_simpler` for transformations
159
+ 9. `get_master_spectrum` — verify the result through the analyzer
160
+
161
+ ## Workflow: Time Manipulation
162
+
163
+ 1. `get_warp_markers` — see current timing map of an audio clip
164
+ 2. `add_warp_marker` — pin key beats (downbeats, snare hits)
165
+ 3. `move_warp_marker` — stretch/compress specific segments for tempo effects
166
+ 4. `scrub_clip` / `stop_scrub` — preview specific positions
167
+ 5. `get_master_spectrum` — verify the result sounds right
168
+ 6. `remove_warp_marker` — clean up if needed
128
169
 
129
170
  ## Live 12 Note API
130
171
 
@@ -199,7 +240,7 @@ Deep production knowledge lives in `references/`. Consult these when making crea
199
240
 
200
241
  | File | What's inside | When to consult |
201
242
  |------|--------------|-----------------|
202
- | `references/overview.md` | All 104 tools mapped with params, units, ranges | Quick lookup for any tool |
243
+ | `references/overview.md` | All 127 tools mapped with params, units, ranges | Quick lookup for any tool |
203
244
  | `references/midi-recipes.md` | Drum patterns by genre, chord voicings, scales, hi-hat techniques, humanization, polymetrics | Programming MIDI notes, building beats |
204
245
  | `references/sound-design.md` | Stock instruments/effects, parameter recipes for bass/pad/lead/pluck, device chain patterns | Loading and configuring devices |
205
246
  | `references/mixing-patterns.md` | Gain staging, parallel compression, sidechain, EQ by instrument, bus processing, stereo width | Setting volumes, panning, adding effects |
@@ -1,20 +1,38 @@
1
- # LivePilot Architecture & Tool Reference
1
+ # LivePilot v1.5.0 — Architecture & Tool Reference
2
2
 
3
- LivePilot is an MCP server that controls Ableton Live 12 in real-time through 104 tools across 10 domains. This document maps every tool to what it actually does in Ableton, so you know exactly which tool to reach for.
3
+ LivePilot is an agentic production system for Ableton Live 12. It combines 127 MCP tools with a device knowledge corpus, real-time audio analysis, and persistent technique memory.
4
4
 
5
5
  ## Architecture
6
6
 
7
7
  ```
8
- Claude Code ──MCP──► FastMCP Server ──TCP/9878──► Remote Script (inside Ableton)
8
+ AI Client ──MCP──► FastMCP Server ──TCP/9878──► Remote Script (inside Ableton)
9
9
  (validates) (executes on main thread)
10
+
11
+ ├── Device Atlas (280+ devices, 139 kits, 350+ IRs)
12
+ ├── M4L Analyzer ──UDP/OSC──► LivePilot_Analyzer.amxd
13
+ └── Technique Memory (~/.livepilot/memory/)
10
14
  ```
11
15
 
12
16
  - **MCP Server** validates inputs (ranges, types) before sending
13
17
  - **Remote Script** runs inside Ableton's Python environment, executes on the main thread via `schedule_message`
18
+ - **Device Atlas** provides structured knowledge of Ableton's device library — real names, real URIs, sonic descriptions
19
+ - **M4L Analyzer** reads the master bus in real-time: 8-band spectrum, RMS/peak, pitch tracking, Krumhansl-Schmuckler key detection
20
+ - **Technique Memory** persists production decisions across sessions as typed, searchable, replayable data structures
14
21
  - **Protocol**: JSON over TCP, newline-delimited. Every command gets a response.
15
22
  - **Thread safety**: All Live Object Model (LOM) access happens on Ableton's main thread
16
23
 
17
- ## The 104 Tools — What Each One Does
24
+ ## The Agentic Difference
25
+
26
+ A flat tool list lets the AI press buttons. LivePilot's three layers give it context:
27
+
28
+ 1. **Before loading a device** — the agent consults the atlas to find a real preset, not a hallucinated name
29
+ 2. **Before writing harmonic content** — the agent reads the detected key from the analyzer
30
+ 3. **Before making creative decisions** — the agent checks technique memory for the user's style preferences
31
+ 4. **After every mixing move** — the agent reads the spectrum to verify the result
32
+
33
+ This turns "set EQ band 3 to -4 dB" into "cut 400 Hz by 4 dB, then read the spectrum to confirm the mud is actually reduced."
34
+
35
+ ## The 127 Tools — What Each One Does
18
36
 
19
37
  ### Transport (12) — Playback, tempo, global state, diagnostics
20
38
 
@@ -122,7 +140,7 @@ Claude Code ──MCP──► FastMCP Server ──TCP/9878──► Remote
122
140
  | `set_scene_color` | Sets scene color | `scene_index`, `color_index` (0-69) |
123
141
  | `set_scene_tempo` | Sets tempo that triggers when scene fires | `scene_index`, `tempo` (20-999 BPM) |
124
142
 
125
- ### Mixing (8) — Levels, panning, routing
143
+ ### Mixing (11) — Levels, panning, routing, metering
126
144
 
127
145
  | Tool | What it does | Key params |
128
146
  |------|-------------|------------|
@@ -134,6 +152,9 @@ Claude Code ──MCP──► FastMCP Server ──TCP/9878──► Remote
134
152
  | `set_master_volume` | Sets master output level | `volume` (0.0-1.0) |
135
153
  | `get_track_routing` | Returns input/output routing config | `track_index` |
136
154
  | `set_track_routing` | Configures input/output routing | `track_index`, routing params |
155
+ | `get_track_meters` | Returns real-time output levels for a track | `track_index` |
156
+ | `get_master_meters` | Returns real-time output levels for the master | — |
157
+ | `get_mix_snapshot` | Returns all levels, panning, routing, mute/solo state for entire session | — |
137
158
 
138
159
  ### Browser (4) — Finding and loading presets/devices
139
160
 
@@ -181,6 +202,31 @@ Claude Code ──MCP──► FastMCP Server ──TCP/9878──► Remote
181
202
  | `memory_update` | Updates name, tags, or qualities | `technique_id`, `name`, `tags`, `qualities` |
182
203
  | `memory_delete` | Removes technique (backs up first) | `technique_id` |
183
204
 
205
+ ### Analyzer (20) — Real-time DSP analysis (requires LivePilot Analyzer M4L device on master track)
206
+
207
+ | Tool | What it does | Key params |
208
+ |------|-------------|------------|
209
+ | `get_master_spectrum` | 8-band spectral analysis of master output | — |
210
+ | `get_master_rms` | True RMS and peak amplitude levels | — |
211
+ | `get_detected_key` | Detects musical key (Krumhansl-Schmuckler) | — |
212
+ | `get_hidden_parameters` | All device parameters including hidden ones | `track_index`, `device_index` |
213
+ | `get_automation_state` | Parameters with active automation | `track_index`, `device_index` |
214
+ | `walk_device_tree` | Recursive device tree (racks, drum pads, 6 levels) | `track_index`, `device_index` |
215
+ | `get_clip_file_path` | Audio file path on disk | `track_index`, `clip_index` |
216
+ | `replace_simpler_sample` | Replace sample in Simpler | `track_index`, `device_index`, `file_path` |
217
+ | `load_sample_to_simpler` | Bootstrap Simpler and load sample (full workflow) | `track_index`, `file_path` |
218
+ | `get_simpler_slices` | Slice points from Simpler | `track_index`, `device_index` |
219
+ | `crop_simpler` | Crop sample to active region | `track_index`, `device_index` |
220
+ | `reverse_simpler` | Reverse sample | `track_index`, `device_index` |
221
+ | `warp_simpler` | Warp sample to N beats | `track_index`, `device_index`, `beats` |
222
+ | `get_warp_markers` | All warp markers (beat_time + sample_time) | `track_index`, `clip_index` |
223
+ | `add_warp_marker` | Add warp marker | `track_index`, `clip_index`, `beat_time` |
224
+ | `move_warp_marker` | Move warp marker | `track_index`, `clip_index`, `old_beat`, `new_beat` |
225
+ | `remove_warp_marker` | Remove warp marker | `track_index`, `clip_index`, `beat_time` |
226
+ | `scrub_clip` | Preview audio at position | `track_index`, `clip_index`, `beat_time` |
227
+ | `stop_scrub` | Stop preview | `track_index`, `clip_index` |
228
+ | `get_display_values` | Human-readable parameter values ("440 Hz", "-6 dB") | `track_index`, `device_index` |
229
+
184
230
  ## Units & Ranges Quick Reference
185
231
 
186
232
  | Concept | Unit/Range | Notes |
@@ -31,7 +31,7 @@ class LivePilot(ControlSurface):
31
31
  ControlSurface.__init__(self, c_instance)
32
32
  self._server = LivePilotServer(self)
33
33
  self._server.start()
34
- self.log_message("LivePilot v1.0.0 initialized")
34
+ self.log_message("LivePilot v1.5.0 initialized")
35
35
  self.show_message("LivePilot: Listening on port 9878")
36
36
 
37
37
  def disconnect(self):
@@ -1,5 +1,5 @@
1
1
  """
2
- LivePilot - Mixing domain handlers (8 commands).
2
+ LivePilot - Mixing domain handlers (11 commands).
3
3
  """
4
4
 
5
5
  from .router import register
@@ -114,6 +114,95 @@ def get_track_routing(song, params):
114
114
  return result
115
115
 
116
116
 
117
+ @register("get_track_meters")
118
+ def get_track_meters(song, params):
119
+ """Read output meter levels for one or all tracks.
120
+
121
+ Returns peak level (0.0-1.0) for each track. When track_index is
122
+ provided, returns a single track. Otherwise returns all tracks.
123
+
124
+ The 'level' value is the hold-peak of max(L, R). It's cheap to read.
125
+ The 'left'/'right' values add GUI load — only included when
126
+ include_stereo=True.
127
+ """
128
+ include_stereo = bool(params.get("include_stereo", False))
129
+ track_index = params.get("track_index")
130
+
131
+ def read_meters(track, idx):
132
+ entry = {
133
+ "index": idx,
134
+ "name": track.name,
135
+ "level": track.output_meter_level,
136
+ }
137
+ if include_stereo:
138
+ entry["left"] = track.output_meter_left
139
+ entry["right"] = track.output_meter_right
140
+ return entry
141
+
142
+ if track_index is not None:
143
+ track = get_track(song, int(track_index))
144
+ return {"tracks": [read_meters(track, int(track_index))]}
145
+
146
+ tracks = []
147
+ for i, track in enumerate(song.tracks):
148
+ tracks.append(read_meters(track, i))
149
+ return {"tracks": tracks}
150
+
151
+
152
+ @register("get_master_meters")
153
+ def get_master_meters(song, params):
154
+ """Read output meter levels for the master track."""
155
+ master = song.master_track
156
+ result = {
157
+ "level": master.output_meter_level,
158
+ "left": master.output_meter_left,
159
+ "right": master.output_meter_right,
160
+ }
161
+ return result
162
+
163
+
164
+ @register("get_mix_snapshot")
165
+ def get_mix_snapshot(song, params):
166
+ """Get a complete snapshot of the mix: all track levels, volumes, pans,
167
+ mute/solo states, and master meters. One call to assess the full mix."""
168
+ tracks = []
169
+ for i, track in enumerate(song.tracks):
170
+ tracks.append({
171
+ "index": i,
172
+ "name": track.name,
173
+ "meter_level": track.output_meter_level,
174
+ "volume": track.mixer_device.volume.value,
175
+ "pan": track.mixer_device.panning.value,
176
+ "mute": track.mute,
177
+ "solo": track.solo,
178
+ "has_audio_output": track.has_audio_output,
179
+ })
180
+ returns = []
181
+ for i, track in enumerate(song.return_tracks):
182
+ returns.append({
183
+ "index": i,
184
+ "name": track.name,
185
+ "meter_level": track.output_meter_level,
186
+ "volume": track.mixer_device.volume.value,
187
+ "pan": track.mixer_device.panning.value,
188
+ "mute": track.mute,
189
+ "solo": track.solo,
190
+ })
191
+ master = song.master_track
192
+ return {
193
+ "tracks": tracks,
194
+ "return_tracks": returns,
195
+ "master": {
196
+ "level": master.output_meter_level,
197
+ "left": master.output_meter_left,
198
+ "right": master.output_meter_right,
199
+ "volume": master.mixer_device.volume.value,
200
+ },
201
+ "is_playing": song.is_playing,
202
+ "tempo": song.tempo,
203
+ }
204
+
205
+
117
206
  @register("set_track_routing")
118
207
  def set_track_routing(song, params):
119
208
  """Set input/output routing for a track by display name."""
package/.mcp.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "livepilot": {
4
- "command": "node",
5
- "args": ["bin/livepilot.js"],
6
- "cwd": "/Users/visansilviugeorge/Desktop/LivePilot"
7
- }
8
- }
9
- }
package/plugin/.mcp.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "LivePilot": {
4
- "command": "npx",
5
- "args": ["livepilot"]
6
- }
7
- }
8
- }