livepilot 1.9.9 → 1.9.11
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +45 -0
- package/CODE_OF_CONDUCT.md +27 -0
- package/CONTRIBUTING.md +131 -0
- package/README.md +119 -395
- package/SECURITY.md +48 -0
- package/bin/livepilot.js +41 -1
- package/livepilot/.Codex-plugin/plugin.json +8 -0
- package/livepilot/.claude-plugin/plugin.json +1 -1
- package/livepilot/commands/beat.md +18 -6
- package/livepilot/commands/sounddesign.md +6 -5
- package/livepilot/skills/livepilot-core/SKILL.md +30 -7
- package/livepilot/skills/livepilot-core/references/overview.md +1 -1
- package/livepilot/skills/livepilot-release/SKILL.md +7 -4
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/LivePilot_Analyzer.maxpat +378 -4
- package/m4l_device/livepilot_bridge.js +413 -184
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/connection.py +35 -0
- package/mcp_server/m4l_bridge.py +55 -5
- package/mcp_server/server.py +16 -29
- package/mcp_server/tools/_perception_engine.py +26 -3
- package/mcp_server/tools/_theory_engine.py +36 -5
- package/mcp_server/tools/analyzer.py +62 -17
- package/mcp_server/tools/automation.py +4 -1
- package/mcp_server/tools/devices.py +199 -10
- package/mcp_server/tools/generative.py +4 -1
- package/mcp_server/tools/harmony.py +16 -3
- package/mcp_server/tools/notes.py +4 -1
- package/mcp_server/tools/perception.py +27 -1
- package/mcp_server/tools/scenes.py +4 -1
- package/mcp_server/tools/theory.py +15 -7
- package/package.json +1 -1
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/arrangement.py +13 -116
- package/remote_script/LivePilot/diagnostics.py +81 -5
- package/remote_script/LivePilot/router.py +22 -0
- package/remote_script/LivePilot/server.py +25 -13
package/README.md
CHANGED
|
@@ -1,21 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
An agentic production system for Ableton Live 12.
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/banner-dark.svg">
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="docs/assets/banner-light.svg">
|
|
5
|
+
<img alt="LivePilot" src="docs/assets/banner-light.svg" width="600">
|
|
6
|
+
</picture>
|
|
7
|
+
</p>
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/dreamrec/LivePilot/actions"><img src="https://img.shields.io/github/actions/workflow/status/dreamrec/LivePilot/ci.yml?style=flat-square&label=CI" alt="CI"></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/livepilot"><img src="https://img.shields.io/npm/v/livepilot?style=flat-square&color=blue" alt="npm version"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/livepilot"><img src="https://img.shields.io/npm/dm/livepilot?style=flat-square" alt="npm downloads"></a>
|
|
13
|
+
<a href="https://github.com/dreamrec/LivePilot/blob/main/LICENSE"><img src="https://img.shields.io/github/license/dreamrec/LivePilot?style=flat-square" alt="License"></a>
|
|
14
|
+
<a href="https://github.com/dreamrec/LivePilot/releases"><img src="https://img.shields.io/github/v/release/dreamrec/LivePilot?style=flat-square&label=release" alt="Latest Release"></a>
|
|
15
|
+
</p>
|
|
14
16
|
|
|
17
|
+
<p align="center">
|
|
18
|
+
An agentic production system for Ableton Live 12.<br>
|
|
19
|
+
178 tools. Device atlas. Spectral perception. Technique memory.
|
|
20
|
+
</p>
|
|
15
21
|
|
|
16
22
|
<br>
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
> [!NOTE]
|
|
25
|
+
> LivePilot works with **any MCP client** — Claude Code, Claude Desktop, Cursor, VS Code, Windsurf.
|
|
26
|
+
> All tools execute on Ableton's main thread through the official Live Object Model API.
|
|
27
|
+
> Everything is reversible with undo.
|
|
28
|
+
|
|
29
|
+
<br>
|
|
19
30
|
|
|
20
31
|
## Architecture
|
|
21
32
|
|
|
@@ -50,17 +61,16 @@ Neo-Riemannian harmony. Euclidean rhythm. Species counterpoint.
|
|
|
50
61
|
└─────────────────────────────────────────────────────────────┘
|
|
51
62
|
```
|
|
52
63
|
|
|
53
|
-
The atlas gives the AI knowledge of every device in Ableton's library —
|
|
64
|
+
The **atlas** gives the AI knowledge of every device in Ableton's library —
|
|
54
65
|
real names, real URIs, real parameters.
|
|
55
66
|
|
|
56
|
-
The analyzer gives it ears — spectral data from the master bus
|
|
67
|
+
The **analyzer** gives it ears — spectral data from the master bus
|
|
57
68
|
via a Max for Live device.
|
|
58
69
|
|
|
59
|
-
The memory gives it history — a searchable library of production decisions
|
|
70
|
+
The **memory** gives it history — a searchable library of production decisions
|
|
60
71
|
that persists across sessions.
|
|
61
72
|
|
|
62
|
-
All three feed into 178 deterministic tools that execute on Ableton's main thread
|
|
63
|
-
through the official Live Object Model API. Everything is reversible with undo.
|
|
73
|
+
All three feed into 178 deterministic tools that execute on Ableton's main thread.
|
|
64
74
|
|
|
65
75
|
<br>
|
|
66
76
|
|
|
@@ -68,37 +78,33 @@ through the official Live Object Model API. Everything is reversible with undo.
|
|
|
68
78
|
|
|
69
79
|
## Tools
|
|
70
80
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
### CORE
|
|
74
|
-
|
|
75
|
-
The foundation. Session control, MIDI, device management, mixing.
|
|
76
|
-
Every tool maps directly to an LOM call — no abstraction, no guessing.
|
|
81
|
+
178 tools across 17 domains. Highlights below — [full catalog here](docs/manual/tool-catalog.md).
|
|
77
82
|
|
|
78
83
|
<br>
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
### Core
|
|
86
|
+
|
|
87
|
+
| Domain | # | What it covers |
|
|
88
|
+
|--------|:-:|----------------|
|
|
82
89
|
| Transport | 12 | playback, tempo, time sig, loop, metronome, undo/redo, cue points, diagnostics |
|
|
83
|
-
| Tracks | 17 | create MIDI/audio/return, delete, duplicate, arm, mute, solo, color,
|
|
90
|
+
| Tracks | 17 | create MIDI/audio/return, delete, duplicate, arm, mute, solo, color, freeze, flatten |
|
|
84
91
|
| Clips | 11 | create, delete, duplicate, fire, stop, loop, launch mode, warp mode, quantize |
|
|
85
92
|
| Notes | 8 | add/get/remove/modify MIDI notes, transpose, duplicate, per-note probability |
|
|
86
|
-
| Devices |
|
|
87
|
-
| Scenes | 12 | create, delete, duplicate, fire, name, color, tempo, scene matrix
|
|
93
|
+
| Devices | 12 | load by name or URI, get/set parameters, batch edit, racks, chains, presets |
|
|
94
|
+
| Scenes | 12 | create, delete, duplicate, fire, name, color, tempo, scene matrix |
|
|
88
95
|
| Browser | 4 | search library, browse tree, load items, filter by category |
|
|
89
96
|
| Mixing | 11 | volume, pan, sends, routing, meters, return tracks, master, full mix snapshot |
|
|
97
|
+
| Arrangement | 19 | timeline clips, arrangement notes, arrangement automation, recording, cue points |
|
|
90
98
|
|
|
91
99
|
<br>
|
|
92
100
|
|
|
93
|
-
###
|
|
101
|
+
### Perception — 32 tools `[M4L]`
|
|
94
102
|
|
|
95
103
|
The M4L Analyzer sits on the master track. UDP 9880 carries spectral data
|
|
96
104
|
from Max to the server. OSC 9881 sends commands back.
|
|
97
105
|
|
|
98
|
-
|
|
99
|
-
and closes the feedback loop.
|
|
100
|
-
|
|
101
|
-
<br>
|
|
106
|
+
> [!TIP]
|
|
107
|
+
> All 146 core tools work without the analyzer — it adds 32 more and closes the feedback loop.
|
|
102
108
|
|
|
103
109
|
```
|
|
104
110
|
SPECTRAL ─────── 8-band frequency decomposition (sub → air)
|
|
@@ -116,18 +122,16 @@ SIMPLER ──────── replace / load samples
|
|
|
116
122
|
|
|
117
123
|
WARP ─────────── get / add / move / remove markers
|
|
118
124
|
tempo manipulation at the sample level
|
|
119
|
-
|
|
120
|
-
PREVIEW ──────── scrub at beat position
|
|
121
|
-
stop scrub
|
|
122
125
|
```
|
|
123
126
|
|
|
124
127
|
<br>
|
|
125
128
|
|
|
126
|
-
###
|
|
129
|
+
### Intelligence
|
|
127
130
|
|
|
128
|
-
<
|
|
131
|
+
<details>
|
|
132
|
+
<summary><strong>Theory — 7 tools</strong></summary>
|
|
129
133
|
|
|
130
|
-
|
|
134
|
+
<br>
|
|
131
135
|
|
|
132
136
|
Krumhansl-Schmuckler key detection with 7 mode profiles:
|
|
133
137
|
major, minor, dorian, phrygian, lydian, mixolydian, locrian.
|
|
@@ -148,9 +152,12 @@ identify_scale harmonize_melody generate_countermelody
|
|
|
148
152
|
transpose_smart
|
|
149
153
|
```
|
|
150
154
|
|
|
151
|
-
|
|
155
|
+
</details>
|
|
152
156
|
|
|
153
|
-
|
|
157
|
+
<details>
|
|
158
|
+
<summary><strong>Harmony — 4 tools</strong></summary>
|
|
159
|
+
|
|
160
|
+
<br>
|
|
154
161
|
|
|
155
162
|
Neo-Riemannian PRL transforms on the Tonnetz.
|
|
156
163
|
|
|
@@ -175,9 +182,12 @@ navigate_tonnetz find_voice_leading_path
|
|
|
175
182
|
classify_progression suggest_chromatic_mediants
|
|
176
183
|
```
|
|
177
184
|
|
|
178
|
-
|
|
185
|
+
</details>
|
|
179
186
|
|
|
180
|
-
|
|
187
|
+
<details>
|
|
188
|
+
<summary><strong>Generative — 5 tools</strong></summary>
|
|
189
|
+
|
|
190
|
+
<br>
|
|
181
191
|
|
|
182
192
|
**Euclidean Rhythm** — Bjorklund distributes N pulses across M steps.
|
|
183
193
|
Bresenham's line algorithm applied to rhythm.
|
|
@@ -191,17 +201,12 @@ E(7,16) = Brazilian necklace ×·×·×××·×·×·×××·
|
|
|
191
201
|
Layer multiple patterns at different pitches for polyrhythmic textures.
|
|
192
202
|
|
|
193
203
|
**Tintinnabuli** (Arvo Pärt) — for each melody note, find the nearest tone
|
|
194
|
-
of a specified triad
|
|
195
|
-
the triad while the M-voice moves stepwise. Two voices, one rule, infinite music.
|
|
204
|
+
of a specified triad. Two voices, one rule, infinite music.
|
|
196
205
|
|
|
197
206
|
**Phase Shifting** (Steve Reich) — identical voices with accumulating timing drift.
|
|
198
|
-
Voice 0 plays straight. Each subsequent voice shifts by N beats per repetition.
|
|
199
207
|
They start in unison, gradually separate, and eventually realign.
|
|
200
208
|
|
|
201
209
|
**Additive Process** (Philip Glass) — melody unfolds note by note.
|
|
202
|
-
Forward: 1, then 1-2, then 1-2-3.
|
|
203
|
-
Backward: full melody, then remove from front.
|
|
204
|
-
Both: forward then backward.
|
|
205
210
|
The structure *is* the composition.
|
|
206
211
|
|
|
207
212
|
```
|
|
@@ -210,9 +215,12 @@ generate_tintinnabuli generate_phase_shift
|
|
|
210
215
|
generate_additive_process
|
|
211
216
|
```
|
|
212
217
|
|
|
213
|
-
|
|
218
|
+
</details>
|
|
214
219
|
|
|
215
|
-
|
|
220
|
+
<details>
|
|
221
|
+
<summary><strong>Automation — 8 tools</strong></summary>
|
|
222
|
+
|
|
223
|
+
<br>
|
|
216
224
|
|
|
217
225
|
16 curve types in 4 categories:
|
|
218
226
|
|
|
@@ -241,8 +249,7 @@ washout vinyl_crackle stereo_narrow
|
|
|
241
249
|
|
|
242
250
|
Perception-action loop: `analyze_for_automation` reads the spectrum
|
|
243
251
|
and device chain, suggests what to automate, and maps each suggestion
|
|
244
|
-
to a recipe.
|
|
245
|
-
to automate based on what it hears.
|
|
252
|
+
to a recipe.
|
|
246
253
|
|
|
247
254
|
```
|
|
248
255
|
get_clip_automation set_clip_automation clear_clip_automation
|
|
@@ -250,14 +257,13 @@ apply_automation_shape apply_automation_recipe get_automation_recipes
|
|
|
250
257
|
generate_automation_curve analyze_for_automation
|
|
251
258
|
```
|
|
252
259
|
|
|
253
|
-
|
|
260
|
+
</details>
|
|
254
261
|
|
|
255
|
-
|
|
262
|
+
<details>
|
|
263
|
+
<summary><strong>Memory — 8 tools</strong></summary>
|
|
256
264
|
|
|
257
265
|
<br>
|
|
258
266
|
|
|
259
|
-
#### Memory — 8 tools
|
|
260
|
-
|
|
261
267
|
Persistent technique library across sessions.
|
|
262
268
|
|
|
263
269
|
Five types: `beat_pattern` · `device_chain` · `mix_template` · `preference` · `browser_pin`
|
|
@@ -268,16 +274,18 @@ Each stores:
|
|
|
268
274
|
- **Payload** — raw MIDI, device params, tempo, URIs
|
|
269
275
|
|
|
270
276
|
Recall by text query matching mood, genre, texture — not just names.
|
|
271
|
-
Favorite, rate, replay.
|
|
272
277
|
|
|
273
278
|
```
|
|
274
279
|
memory_learn memory_recall memory_list memory_get
|
|
275
280
|
memory_update memory_delete memory_favorite memory_replay
|
|
276
281
|
```
|
|
277
282
|
|
|
278
|
-
|
|
283
|
+
</details>
|
|
279
284
|
|
|
280
|
-
|
|
285
|
+
<details>
|
|
286
|
+
<summary><strong>MIDI I/O — 4 tools</strong></summary>
|
|
287
|
+
|
|
288
|
+
<br>
|
|
281
289
|
|
|
282
290
|
Export session clips to standard .mid files.
|
|
283
291
|
Import .mid into session clips — auto-creates the clip, tempo-aware timing.
|
|
@@ -288,21 +296,39 @@ pitch range, velocity stats, density curve, key estimate.
|
|
|
288
296
|
Piano roll extraction: 2D velocity matrix at configurable resolution
|
|
289
297
|
(default 1/32 note).
|
|
290
298
|
|
|
291
|
-
Dependencies lazy-loaded — graceful error if missing.
|
|
292
|
-
|
|
293
299
|
```
|
|
294
300
|
export_clip_midi import_midi_to_clip
|
|
295
301
|
analyze_midi_file extract_piano_roll
|
|
296
302
|
```
|
|
297
303
|
|
|
304
|
+
</details>
|
|
305
|
+
|
|
306
|
+
<details>
|
|
307
|
+
<summary><strong>Perception — 4 tools</strong></summary>
|
|
308
|
+
|
|
298
309
|
<br>
|
|
299
310
|
|
|
300
|
-
|
|
311
|
+
Offline audio analysis — no M4L required.
|
|
301
312
|
|
|
302
|
-
|
|
313
|
+
```
|
|
314
|
+
analyze_loudness Integrated LUFS, true peak, LRA, streaming compliance
|
|
315
|
+
analyze_spectrum_offline Spectral centroid, rolloff, flatness, 5-band balance
|
|
316
|
+
compare_to_reference Mix vs reference: loudness + spectral delta
|
|
317
|
+
read_audio_metadata Format, duration, sample rate, tags
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
</details>
|
|
303
321
|
|
|
304
322
|
<br>
|
|
305
323
|
|
|
324
|
+
> **[View all 178 tools →](docs/manual/tool-catalog.md)**
|
|
325
|
+
|
|
326
|
+
<br>
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Install
|
|
331
|
+
|
|
306
332
|
### 1. Remote Script
|
|
307
333
|
|
|
308
334
|
```bash
|
|
@@ -311,8 +337,6 @@ npx livepilot --install
|
|
|
311
337
|
|
|
312
338
|
Restart Ableton → Preferences → Link, Tempo & MIDI → Control Surface → **LivePilot**
|
|
313
339
|
|
|
314
|
-
<br>
|
|
315
|
-
|
|
316
340
|
### 2. MCP Client
|
|
317
341
|
|
|
318
342
|
<details open>
|
|
@@ -419,8 +443,6 @@ Windsurf — `~/.codeium/windsurf/mcp_config.json`:
|
|
|
419
443
|
|
|
420
444
|
</details>
|
|
421
445
|
|
|
422
|
-
<br>
|
|
423
|
-
|
|
424
446
|
### 3. M4L Analyzer (optional)
|
|
425
447
|
|
|
426
448
|
Drag `LivePilot_Analyzer.amxd` onto the master track.
|
|
@@ -428,9 +450,8 @@ Drag `LivePilot_Analyzer.amxd` onto the master track.
|
|
|
428
450
|
Unlocks 32 additional tools: spectral analysis, key detection,
|
|
429
451
|
sample manipulation, deep device introspection, plugin parameter mapping.
|
|
430
452
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
<br>
|
|
453
|
+
> [!IMPORTANT]
|
|
454
|
+
> All core tools work without the analyzer. It adds perception, not dependency.
|
|
434
455
|
|
|
435
456
|
### 4. Verify
|
|
436
457
|
|
|
@@ -448,8 +469,6 @@ npx livepilot --status
|
|
|
448
469
|
claude plugin add github:dreamrec/LivePilot/plugin
|
|
449
470
|
```
|
|
450
471
|
|
|
451
|
-
<br>
|
|
452
|
-
|
|
453
472
|
| Command | What |
|
|
454
473
|
|---------|------|
|
|
455
474
|
| `/session` | Full session overview with diagnostics |
|
|
@@ -458,13 +477,9 @@ claude plugin add github:dreamrec/LivePilot/plugin
|
|
|
458
477
|
| `/sounddesign` | Sound design workflow |
|
|
459
478
|
| `/memory` | Technique library management |
|
|
460
479
|
|
|
461
|
-
<br>
|
|
462
|
-
|
|
463
480
|
**Producer Agent** — autonomous multi-step production.
|
|
464
481
|
Consults memory for style context, searches the atlas for instruments,
|
|
465
482
|
creates tracks, programs MIDI, chains effects, reads the spectrum to verify.
|
|
466
|
-
Ships with a reference corpus (drum patterns, chord voicings,
|
|
467
|
-
sound design recipes, mixing templates).
|
|
468
483
|
|
|
469
484
|
**Core Skill** — operational discipline connecting all three layers.
|
|
470
485
|
Consult atlas before loading. Read analyzer after mixing.
|
|
@@ -474,318 +489,6 @@ Check memory before creative decisions. Verify every mutation.
|
|
|
474
489
|
|
|
475
490
|
---
|
|
476
491
|
|
|
477
|
-
## Full Tool List
|
|
478
|
-
|
|
479
|
-
178 tools across 17 domains.
|
|
480
|
-
|
|
481
|
-
<br>
|
|
482
|
-
|
|
483
|
-
### Transport (12)
|
|
484
|
-
|
|
485
|
-
| Tool | Description |
|
|
486
|
-
|------|-------------|
|
|
487
|
-
| `get_session_info` | Session state: tempo, tracks, scenes, transport |
|
|
488
|
-
| `set_tempo` | Set tempo (20-999 BPM) |
|
|
489
|
-
| `set_time_signature` | Set time signature |
|
|
490
|
-
| `start_playback` | Start from beginning |
|
|
491
|
-
| `stop_playback` | Stop |
|
|
492
|
-
| `continue_playback` | Resume from current position |
|
|
493
|
-
| `toggle_metronome` | Enable/disable click |
|
|
494
|
-
| `set_session_loop` | Set loop start, length, on/off |
|
|
495
|
-
| `undo` | Undo last action |
|
|
496
|
-
| `redo` | Redo |
|
|
497
|
-
| `get_recent_actions` | Recent undo history |
|
|
498
|
-
| `get_session_diagnostics` | Analyze session for issues |
|
|
499
|
-
|
|
500
|
-
<br>
|
|
501
|
-
|
|
502
|
-
### Tracks (17)
|
|
503
|
-
|
|
504
|
-
| Tool | Description |
|
|
505
|
-
|------|-------------|
|
|
506
|
-
| `get_track_info` | Track details: clips, devices, mixer |
|
|
507
|
-
| `create_midi_track` | New MIDI track |
|
|
508
|
-
| `create_audio_track` | New audio track |
|
|
509
|
-
| `create_return_track` | New return track |
|
|
510
|
-
| `delete_track` | Delete a track |
|
|
511
|
-
| `duplicate_track` | Copy track with all content |
|
|
512
|
-
| `set_track_name` | Rename |
|
|
513
|
-
| `set_track_color` | Set color (0-69) |
|
|
514
|
-
| `set_track_mute` | Mute on/off |
|
|
515
|
-
| `set_track_solo` | Solo on/off |
|
|
516
|
-
| `set_track_arm` | Arm for recording |
|
|
517
|
-
| `stop_track_clips` | Stop all clips on track |
|
|
518
|
-
| `set_group_fold` | Fold/unfold group track |
|
|
519
|
-
| `set_track_input_monitoring` | Set monitoring mode |
|
|
520
|
-
| `freeze_track` | Freeze track (render devices to audio) |
|
|
521
|
-
| `flatten_track` | Flatten frozen track (commit audio permanently) |
|
|
522
|
-
| `get_freeze_status` | Check if track is frozen |
|
|
523
|
-
|
|
524
|
-
<br>
|
|
525
|
-
|
|
526
|
-
### Clips (11)
|
|
527
|
-
|
|
528
|
-
| Tool | Description |
|
|
529
|
-
|------|-------------|
|
|
530
|
-
| `get_clip_info` | Clip details: length, loop, launch |
|
|
531
|
-
| `create_clip` | New empty MIDI clip |
|
|
532
|
-
| `delete_clip` | Delete a clip |
|
|
533
|
-
| `duplicate_clip` | Copy to another slot |
|
|
534
|
-
| `fire_clip` | Launch a clip |
|
|
535
|
-
| `stop_clip` | Stop a clip |
|
|
536
|
-
| `set_clip_name` | Rename |
|
|
537
|
-
| `set_clip_color` | Set color |
|
|
538
|
-
| `set_clip_loop` | Loop start, end, on/off |
|
|
539
|
-
| `set_clip_launch` | Launch mode and quantization |
|
|
540
|
-
| `set_clip_warp_mode` | Set warp algorithm |
|
|
541
|
-
|
|
542
|
-
<br>
|
|
543
|
-
|
|
544
|
-
### Notes (8)
|
|
545
|
-
|
|
546
|
-
| Tool | Description |
|
|
547
|
-
|------|-------------|
|
|
548
|
-
| `add_notes` | Add MIDI notes with velocity, probability |
|
|
549
|
-
| `get_notes` | Read notes from a region |
|
|
550
|
-
| `remove_notes` | Remove notes in a region |
|
|
551
|
-
| `remove_notes_by_id` | Remove specific notes by ID |
|
|
552
|
-
| `modify_notes` | Change pitch, time, velocity, probability |
|
|
553
|
-
| `duplicate_notes` | Copy notes to new position |
|
|
554
|
-
| `transpose_notes` | Shift pitch by semitones |
|
|
555
|
-
| `quantize_clip` | Quantize to grid |
|
|
556
|
-
|
|
557
|
-
<br>
|
|
558
|
-
|
|
559
|
-
### Devices (12)
|
|
560
|
-
|
|
561
|
-
| Tool | Description |
|
|
562
|
-
|------|-------------|
|
|
563
|
-
| `get_device_info` | Device name, class, parameters |
|
|
564
|
-
| `get_device_parameters` | All params with names, values, ranges |
|
|
565
|
-
| `set_device_parameter` | Set param by name or index |
|
|
566
|
-
| `batch_set_parameters` | Set multiple params in one call |
|
|
567
|
-
| `toggle_device` | Enable/disable |
|
|
568
|
-
| `delete_device` | Remove from chain |
|
|
569
|
-
| `load_device_by_uri` | Load by browser URI |
|
|
570
|
-
| `find_and_load_device` | Search and load by name |
|
|
571
|
-
| `get_rack_chains` | Get chains in a rack |
|
|
572
|
-
| `set_simpler_playback_mode` | Classic/1-shot/slice |
|
|
573
|
-
| `set_chain_volume` | Set chain volume in rack |
|
|
574
|
-
| `get_device_presets` | List available presets |
|
|
575
|
-
|
|
576
|
-
<br>
|
|
577
|
-
|
|
578
|
-
### Scenes (12)
|
|
579
|
-
|
|
580
|
-
| Tool | Description |
|
|
581
|
-
|------|-------------|
|
|
582
|
-
| `get_scenes_info` | All scenes: name, tempo, color |
|
|
583
|
-
| `create_scene` | New scene |
|
|
584
|
-
| `delete_scene` | Delete a scene |
|
|
585
|
-
| `duplicate_scene` | Copy scene with all clips |
|
|
586
|
-
| `fire_scene` | Launch all clips in scene |
|
|
587
|
-
| `set_scene_name` | Rename |
|
|
588
|
-
| `set_scene_color` | Set color |
|
|
589
|
-
| `set_scene_tempo` | Per-scene tempo |
|
|
590
|
-
| `get_scene_matrix` | Full clip grid: every track × every scene with states |
|
|
591
|
-
| `fire_scene_clips` | Fire scene with optional track filter |
|
|
592
|
-
| `stop_all_clips` | Stop all playing clips (panic) |
|
|
593
|
-
| `get_playing_clips` | All currently playing/triggered clips |
|
|
594
|
-
|
|
595
|
-
<br>
|
|
596
|
-
|
|
597
|
-
### Mixing (11)
|
|
598
|
-
|
|
599
|
-
| Tool | Description |
|
|
600
|
-
|------|-------------|
|
|
601
|
-
| `set_track_volume` | Volume (0.0-1.0) |
|
|
602
|
-
| `set_track_pan` | Pan (-1.0 to 1.0) |
|
|
603
|
-
| `set_track_send` | Send level (0.0-1.0) |
|
|
604
|
-
| `get_return_tracks` | Return track info |
|
|
605
|
-
| `get_master_track` | Master track info |
|
|
606
|
-
| `set_master_volume` | Master volume |
|
|
607
|
-
| `get_track_routing` | Input/output routing |
|
|
608
|
-
| `set_track_routing` | Set routing by display name |
|
|
609
|
-
| `get_track_meters` | Live meter levels |
|
|
610
|
-
| `get_master_meters` | Master meter levels |
|
|
611
|
-
| `get_mix_snapshot` | Full mix state in one call |
|
|
612
|
-
|
|
613
|
-
<br>
|
|
614
|
-
|
|
615
|
-
### Browser (4)
|
|
616
|
-
|
|
617
|
-
| Tool | Description |
|
|
618
|
-
|------|-------------|
|
|
619
|
-
| `get_browser_tree` | Browse category tree |
|
|
620
|
-
| `get_browser_items` | List items in a category |
|
|
621
|
-
| `search_browser` | Search by name with filters |
|
|
622
|
-
| `load_browser_item` | Load item by URI |
|
|
623
|
-
|
|
624
|
-
<br>
|
|
625
|
-
|
|
626
|
-
### Arrangement (19)
|
|
627
|
-
|
|
628
|
-
| Tool | Description |
|
|
629
|
-
|------|-------------|
|
|
630
|
-
| `get_arrangement_clips` | List arrangement clips |
|
|
631
|
-
| `create_arrangement_clip` | New clip at timeline position |
|
|
632
|
-
| `add_arrangement_notes` | Add MIDI notes to arrangement clip |
|
|
633
|
-
| `get_arrangement_notes` | Read arrangement notes |
|
|
634
|
-
| `remove_arrangement_notes` | Remove notes in region |
|
|
635
|
-
| `remove_arrangement_notes_by_id` | Remove by ID |
|
|
636
|
-
| `modify_arrangement_notes` | Modify arrangement notes |
|
|
637
|
-
| `duplicate_arrangement_notes` | Copy notes |
|
|
638
|
-
| `transpose_arrangement_notes` | Shift pitch |
|
|
639
|
-
| `set_arrangement_clip_name` | Rename arrangement clip |
|
|
640
|
-
| `set_arrangement_automation` | Write arrangement automation |
|
|
641
|
-
| `back_to_arranger` | Switch to arrangement view |
|
|
642
|
-
| `jump_to_time` | Seek to beat position |
|
|
643
|
-
| `capture_midi` | Capture played MIDI |
|
|
644
|
-
| `start_recording` | Start recording |
|
|
645
|
-
| `stop_recording` | Stop recording |
|
|
646
|
-
| `get_cue_points` | List cue points |
|
|
647
|
-
| `jump_to_cue` | Jump to cue point |
|
|
648
|
-
| `toggle_cue_point` | Add/remove cue point |
|
|
649
|
-
|
|
650
|
-
<br>
|
|
651
|
-
|
|
652
|
-
### Automation (8)
|
|
653
|
-
|
|
654
|
-
| Tool | Description |
|
|
655
|
-
|------|-------------|
|
|
656
|
-
| `get_clip_automation` | List envelopes on a clip |
|
|
657
|
-
| `set_clip_automation` | Write automation points |
|
|
658
|
-
| `clear_clip_automation` | Clear envelopes |
|
|
659
|
-
| `apply_automation_shape` | Generate + write curve in one call |
|
|
660
|
-
| `apply_automation_recipe` | Apply named recipe |
|
|
661
|
-
| `get_automation_recipes` | List all 15 recipes |
|
|
662
|
-
| `generate_automation_curve` | Preview curve without writing |
|
|
663
|
-
| `analyze_for_automation` | Spectral analysis + suggestions |
|
|
664
|
-
|
|
665
|
-
<br>
|
|
666
|
-
|
|
667
|
-
### Memory (8)
|
|
668
|
-
|
|
669
|
-
| Tool | Description |
|
|
670
|
-
|------|-------------|
|
|
671
|
-
| `memory_learn` | Save a technique |
|
|
672
|
-
| `memory_recall` | Search by text/mood/genre |
|
|
673
|
-
| `memory_list` | Browse library |
|
|
674
|
-
| `memory_get` | Get full technique with payload |
|
|
675
|
-
| `memory_update` | Update a technique |
|
|
676
|
-
| `memory_delete` | Delete a technique |
|
|
677
|
-
| `memory_favorite` | Toggle favorite |
|
|
678
|
-
| `memory_replay` | Replay saved technique |
|
|
679
|
-
|
|
680
|
-
<br>
|
|
681
|
-
|
|
682
|
-
### Analyzer (29) `[M4L]`
|
|
683
|
-
|
|
684
|
-
| Tool | Description |
|
|
685
|
-
|------|-------------|
|
|
686
|
-
| `get_master_spectrum` | 8-band frequency analysis |
|
|
687
|
-
| `get_master_rms` | RMS and peak levels |
|
|
688
|
-
| `get_detected_key` | Krumhansl-Schmuckler key detection |
|
|
689
|
-
| `get_hidden_parameters` | All params including hidden ones |
|
|
690
|
-
| `get_automation_state` | Automation state per parameter |
|
|
691
|
-
| `walk_device_tree` | Recursive device chain tree (6 levels) |
|
|
692
|
-
| `get_display_values` | Human-readable param values |
|
|
693
|
-
| `get_clip_file_path` | Audio file path on disk |
|
|
694
|
-
| `replace_simpler_sample` | Load audio into Simpler |
|
|
695
|
-
| `load_sample_to_simpler` | Bootstrap Simpler + load sample |
|
|
696
|
-
| `get_simpler_slices` | Slice point positions |
|
|
697
|
-
| `crop_simpler` | Crop to active region |
|
|
698
|
-
| `reverse_simpler` | Reverse sample |
|
|
699
|
-
| `warp_simpler` | Time-stretch to N beats |
|
|
700
|
-
| `get_warp_markers` | Get all warp markers |
|
|
701
|
-
| `add_warp_marker` | Add warp marker |
|
|
702
|
-
| `move_warp_marker` | Move warp marker |
|
|
703
|
-
| `remove_warp_marker` | Remove warp marker |
|
|
704
|
-
| `scrub_clip` | Preview at beat position |
|
|
705
|
-
| `stop_scrub` | Stop preview |
|
|
706
|
-
| `get_spectral_shape` | 7 spectral descriptors via FluCoMa |
|
|
707
|
-
| `get_mel_spectrum` | 40-band mel spectrum |
|
|
708
|
-
| `get_chroma` | 12 pitch class energies |
|
|
709
|
-
| `get_onsets` | Real-time onset detection |
|
|
710
|
-
| `get_novelty` | Spectral novelty for section boundaries |
|
|
711
|
-
| `get_momentary_loudness` | EBU R128 momentary LUFS + peak |
|
|
712
|
-
| `check_flucoma` | Verify FluCoMa installation |
|
|
713
|
-
| `capture_audio` | Record master output to WAV |
|
|
714
|
-
| `capture_stop` | Cancel in-progress capture |
|
|
715
|
-
|
|
716
|
-
### Devices — Plugin Deep Control (3) `[M4L]`
|
|
717
|
-
|
|
718
|
-
| Tool | Description |
|
|
719
|
-
|------|-------------|
|
|
720
|
-
| `get_plugin_parameters` | All VST/AU params including unconfigured |
|
|
721
|
-
| `map_plugin_parameter` | Add param to Ableton's Configure list |
|
|
722
|
-
| `get_plugin_presets` | List plugin's internal presets/banks |
|
|
723
|
-
|
|
724
|
-
<br>
|
|
725
|
-
|
|
726
|
-
### Perception (4)
|
|
727
|
-
|
|
728
|
-
| Tool | Description |
|
|
729
|
-
|------|-------------|
|
|
730
|
-
| `analyze_loudness` | Integrated LUFS, true peak, LRA, streaming compliance |
|
|
731
|
-
| `analyze_spectrum_offline` | Spectral centroid, rolloff, flatness, 5-band balance |
|
|
732
|
-
| `compare_to_reference` | Mix vs reference: loudness + spectral delta |
|
|
733
|
-
| `read_audio_metadata` | Format, duration, sample rate, tags |
|
|
734
|
-
|
|
735
|
-
<br>
|
|
736
|
-
|
|
737
|
-
### Theory (7)
|
|
738
|
-
|
|
739
|
-
| Tool | Description |
|
|
740
|
-
|------|-------------|
|
|
741
|
-
| `analyze_harmony` | Chord-by-chord Roman numeral analysis |
|
|
742
|
-
| `suggest_next_chord` | Theory-valid continuations with style presets |
|
|
743
|
-
| `detect_theory_issues` | Parallel 5ths, out-of-key, voice crossing |
|
|
744
|
-
| `identify_scale` | Key/mode detection with confidence ranking |
|
|
745
|
-
| `harmonize_melody` | 2 or 4-voice SATB harmonization |
|
|
746
|
-
| `generate_countermelody` | Species counterpoint (1st/2nd) |
|
|
747
|
-
| `transpose_smart` | Diatonic or chromatic transposition |
|
|
748
|
-
|
|
749
|
-
<br>
|
|
750
|
-
|
|
751
|
-
### Generative (5)
|
|
752
|
-
|
|
753
|
-
| Tool | Description |
|
|
754
|
-
|------|-------------|
|
|
755
|
-
| `generate_euclidean_rhythm` | Bjorklund algorithm, identifies named rhythms |
|
|
756
|
-
| `layer_euclidean_rhythms` | Stack patterns for polyrhythmic textures |
|
|
757
|
-
| `generate_tintinnabuli` | Arvo Pärt — triad voice from melody |
|
|
758
|
-
| `generate_phase_shift` | Steve Reich — drifting canon |
|
|
759
|
-
| `generate_additive_process` | Philip Glass — expanding/contracting melody |
|
|
760
|
-
|
|
761
|
-
<br>
|
|
762
|
-
|
|
763
|
-
### Harmony (4)
|
|
764
|
-
|
|
765
|
-
| Tool | Description |
|
|
766
|
-
|------|-------------|
|
|
767
|
-
| `navigate_tonnetz` | PRL neighbors at depth N |
|
|
768
|
-
| `find_voice_leading_path` | Shortest path between two chords |
|
|
769
|
-
| `classify_progression` | Identify neo-Riemannian pattern |
|
|
770
|
-
| `suggest_chromatic_mediants` | All chromatic mediant relations |
|
|
771
|
-
|
|
772
|
-
<br>
|
|
773
|
-
|
|
774
|
-
### MIDI I/O (4)
|
|
775
|
-
|
|
776
|
-
| Tool | Description |
|
|
777
|
-
|------|-------------|
|
|
778
|
-
| `export_clip_midi` | Export clip to .mid file |
|
|
779
|
-
| `import_midi_to_clip` | Import .mid into session clip |
|
|
780
|
-
| `analyze_midi_file` | Offline MIDI analysis |
|
|
781
|
-
| `extract_piano_roll` | 2D velocity matrix extraction |
|
|
782
|
-
|
|
783
|
-
<br>
|
|
784
|
-
|
|
785
|
-
---
|
|
786
|
-
|
|
787
|
-
---
|
|
788
|
-
|
|
789
492
|
## CLI
|
|
790
493
|
|
|
791
494
|
```bash
|
|
@@ -799,14 +502,19 @@ npx livepilot --version # Show version
|
|
|
799
502
|
|
|
800
503
|
<br>
|
|
801
504
|
|
|
505
|
+
---
|
|
506
|
+
|
|
802
507
|
## Compatibility
|
|
803
508
|
|
|
804
|
-
Live 12 all editions. Suite required for stock instruments
|
|
805
|
-
|
|
806
|
-
|
|
509
|
+
- **Ableton Live 12** — all editions. Suite required for Max for Live and stock instruments (Drift, Meld, Wavetable).
|
|
510
|
+
- **Python** 3.9+
|
|
511
|
+
- **Node.js** 18+
|
|
512
|
+
- **macOS / Windows**
|
|
807
513
|
|
|
808
514
|
<br>
|
|
809
515
|
|
|
516
|
+
---
|
|
517
|
+
|
|
810
518
|
## Development
|
|
811
519
|
|
|
812
520
|
```bash
|
|
@@ -816,10 +524,26 @@ python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
|
|
|
816
524
|
.venv/bin/pytest tests/ -v
|
|
817
525
|
```
|
|
818
526
|
|
|
527
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for architecture details, code guidelines, and how to add tools.
|
|
528
|
+
|
|
819
529
|
<br>
|
|
820
530
|
|
|
821
531
|
---
|
|
822
532
|
|
|
823
|
-
|
|
533
|
+
## Community
|
|
534
|
+
|
|
535
|
+
- [Discussions](https://github.com/dreamrec/LivePilot/discussions) — questions, ideas, show & tell
|
|
536
|
+
- [Bug reports](https://github.com/dreamrec/LivePilot/issues/new?template=bug_report.yml)
|
|
537
|
+
- [Feature requests](https://github.com/dreamrec/LivePilot/issues/new?template=feature_request.yml)
|
|
538
|
+
- [Contributing guide](CONTRIBUTING.md)
|
|
539
|
+
- [Security policy](SECURITY.md)
|
|
540
|
+
|
|
541
|
+
<br>
|
|
542
|
+
|
|
543
|
+
---
|
|
824
544
|
|
|
825
|
-
|
|
545
|
+
<p align="center">
|
|
546
|
+
<a href="LICENSE">MIT</a> — Pilot Studio
|
|
547
|
+
<br><br>
|
|
548
|
+
Sister projects: <a href="https://github.com/dreamrec/TDPilot">TDPilot</a> (TouchDesigner) · <a href="https://github.com/dreamrec/ComfyPilot">ComfyPilot</a> (ComfyUI)
|
|
549
|
+
</p>
|