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.
Files changed (39) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +1 -1
  3. package/CHANGELOG.md +45 -0
  4. package/CODE_OF_CONDUCT.md +27 -0
  5. package/CONTRIBUTING.md +131 -0
  6. package/README.md +119 -395
  7. package/SECURITY.md +48 -0
  8. package/bin/livepilot.js +41 -1
  9. package/livepilot/.Codex-plugin/plugin.json +8 -0
  10. package/livepilot/.claude-plugin/plugin.json +1 -1
  11. package/livepilot/commands/beat.md +18 -6
  12. package/livepilot/commands/sounddesign.md +6 -5
  13. package/livepilot/skills/livepilot-core/SKILL.md +30 -7
  14. package/livepilot/skills/livepilot-core/references/overview.md +1 -1
  15. package/livepilot/skills/livepilot-release/SKILL.md +7 -4
  16. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  17. package/m4l_device/LivePilot_Analyzer.maxpat +378 -4
  18. package/m4l_device/livepilot_bridge.js +413 -184
  19. package/mcp_server/__init__.py +1 -1
  20. package/mcp_server/connection.py +35 -0
  21. package/mcp_server/m4l_bridge.py +55 -5
  22. package/mcp_server/server.py +16 -29
  23. package/mcp_server/tools/_perception_engine.py +26 -3
  24. package/mcp_server/tools/_theory_engine.py +36 -5
  25. package/mcp_server/tools/analyzer.py +62 -17
  26. package/mcp_server/tools/automation.py +4 -1
  27. package/mcp_server/tools/devices.py +199 -10
  28. package/mcp_server/tools/generative.py +4 -1
  29. package/mcp_server/tools/harmony.py +16 -3
  30. package/mcp_server/tools/notes.py +4 -1
  31. package/mcp_server/tools/perception.py +27 -1
  32. package/mcp_server/tools/scenes.py +4 -1
  33. package/mcp_server/tools/theory.py +15 -7
  34. package/package.json +1 -1
  35. package/remote_script/LivePilot/__init__.py +1 -1
  36. package/remote_script/LivePilot/arrangement.py +13 -116
  37. package/remote_script/LivePilot/diagnostics.py +81 -5
  38. package/remote_script/LivePilot/router.py +22 -0
  39. 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
- 178 tools. Device atlas. Spectral perception. Technique memory.
13
- Neo-Riemannian harmony. Euclidean rhythm. Species counterpoint.
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
- <br>
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
- | Domain | # | Scope |
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, monitoring, freeze, flatten |
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 | 15 | load by name or URI, get/set parameters, batch edit, racks, chains, presets, plugin params |
87
- | Scenes | 12 | create, delete, duplicate, fire, name, color, tempo, scene matrix, selective launch |
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
- ### PERCEPTION
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
- All 146 core tools work without it — the analyzer adds 32 more
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
- ### INTELLIGENCE
129
+ ### Intelligence
127
130
 
128
- <br>
131
+ <details>
132
+ <summary><strong>Theory — 7 tools</strong></summary>
129
133
 
130
- #### Theory — 7 tools
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
- <br>
155
+ </details>
152
156
 
153
- #### Harmony — 4 tools
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
- <br>
185
+ </details>
179
186
 
180
- #### Generative — 5 tools
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: above, below, or nearest. The T-voice gravitates toward
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
- <br>
218
+ </details>
214
219
 
215
- #### Automation — 8 tools
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. The AI doesn't write automation blind — it knows what
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
- <br>
260
+ </details>
254
261
 
255
- ### MEMORY + I/O
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
- <br>
283
+ </details>
279
284
 
280
- #### MIDI I/O — 4 tools
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
- ## Install
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
- All core tools work without it.
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
- (Drift, Meld, Wavetable) and Max for Live.
806
- Python 3.9+. Node.js 18+.
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
- [MIT](LICENSE) — Pilot Studio
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
- Sister projects: [TDPilot](https://github.com/dreamrec/TDPilot) (TouchDesigner) · [ComfyPilot](https://github.com/dreamrec/ComfyPilot) (ComfyUI)
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>