livepilot 1.0.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +409 -0
  4. package/bin/livepilot.js +390 -0
  5. package/installer/install.js +95 -0
  6. package/installer/paths.js +79 -0
  7. package/mcp_server/__init__.py +2 -0
  8. package/mcp_server/__main__.py +5 -0
  9. package/mcp_server/connection.py +210 -0
  10. package/mcp_server/memory/__init__.py +5 -0
  11. package/mcp_server/memory/technique_store.py +296 -0
  12. package/mcp_server/server.py +87 -0
  13. package/mcp_server/tools/__init__.py +1 -0
  14. package/mcp_server/tools/arrangement.py +407 -0
  15. package/mcp_server/tools/browser.py +86 -0
  16. package/mcp_server/tools/clips.py +218 -0
  17. package/mcp_server/tools/devices.py +256 -0
  18. package/mcp_server/tools/memory.py +198 -0
  19. package/mcp_server/tools/mixing.py +121 -0
  20. package/mcp_server/tools/notes.py +269 -0
  21. package/mcp_server/tools/scenes.py +89 -0
  22. package/mcp_server/tools/tracks.py +175 -0
  23. package/mcp_server/tools/transport.py +117 -0
  24. package/package.json +37 -0
  25. package/plugin/agents/livepilot-producer/AGENT.md +62 -0
  26. package/plugin/commands/beat.md +18 -0
  27. package/plugin/commands/memory.md +22 -0
  28. package/plugin/commands/mix.md +15 -0
  29. package/plugin/commands/session.md +13 -0
  30. package/plugin/commands/sounddesign.md +16 -0
  31. package/plugin/plugin.json +19 -0
  32. package/plugin/skills/livepilot-core/SKILL.md +208 -0
  33. package/plugin/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
  34. package/plugin/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
  35. package/plugin/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
  36. package/plugin/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
  37. package/plugin/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
  38. package/plugin/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
  39. package/plugin/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
  40. package/plugin/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
  41. package/plugin/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
  42. package/plugin/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
  43. package/plugin/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
  44. package/plugin/skills/livepilot-core/references/m4l-devices.md +352 -0
  45. package/plugin/skills/livepilot-core/references/memory-guide.md +107 -0
  46. package/plugin/skills/livepilot-core/references/midi-recipes.md +402 -0
  47. package/plugin/skills/livepilot-core/references/mixing-patterns.md +578 -0
  48. package/plugin/skills/livepilot-core/references/overview.md +209 -0
  49. package/plugin/skills/livepilot-core/references/sound-design.md +392 -0
  50. package/remote_script/LivePilot/__init__.py +42 -0
  51. package/remote_script/LivePilot/arrangement.py +693 -0
  52. package/remote_script/LivePilot/browser.py +424 -0
  53. package/remote_script/LivePilot/clips.py +211 -0
  54. package/remote_script/LivePilot/devices.py +596 -0
  55. package/remote_script/LivePilot/diagnostics.py +198 -0
  56. package/remote_script/LivePilot/mixing.py +194 -0
  57. package/remote_script/LivePilot/notes.py +339 -0
  58. package/remote_script/LivePilot/router.py +74 -0
  59. package/remote_script/LivePilot/scenes.py +99 -0
  60. package/remote_script/LivePilot/server.py +293 -0
  61. package/remote_script/LivePilot/tracks.py +268 -0
  62. package/remote_script/LivePilot/transport.py +151 -0
  63. package/remote_script/LivePilot/utils.py +123 -0
  64. package/requirements.txt +2 -0
@@ -0,0 +1,209 @@
1
+ # LivePilot Architecture & Tool Reference
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.
4
+
5
+ ## Architecture
6
+
7
+ ```
8
+ AI Client ──MCP──► FastMCP Server ──TCP/9878──► Remote Script (inside Ableton)
9
+ (validates) (executes on main thread)
10
+ ```
11
+
12
+ - **MCP Server** validates inputs (ranges, types) before sending
13
+ - **Remote Script** runs inside Ableton's Python environment, executes on the main thread via `schedule_message`
14
+ - **Protocol**: JSON over TCP, newline-delimited. Every command gets a response.
15
+ - **Thread safety**: All Live Object Model (LOM) access happens on Ableton's main thread
16
+
17
+ ## The 104 Tools — What Each One Does
18
+
19
+ ### Transport (12) — Playback, tempo, global state, diagnostics
20
+
21
+ | Tool | What it does | Key params |
22
+ |------|-------------|------------|
23
+ | `get_session_info` | Returns tempo, time sig, playing state, track count, scene count, song length | — |
24
+ | `set_tempo` | Changes BPM | `tempo` (20-999) |
25
+ | `set_time_signature` | Changes time signature | `numerator` (1-99), `denominator` (1,2,4,8,16) |
26
+ | `start_playback` | Starts from current position | — |
27
+ | `stop_playback` | Stops playback | — |
28
+ | `continue_playback` | Resumes from where it stopped | — |
29
+ | `toggle_metronome` | Toggles click on/off | — |
30
+ | `set_session_loop` | Sets loop region | `loop_start` (beats), `loop_length` (beats) |
31
+ | `undo` | Undoes last action | — |
32
+ | `redo` | Redoes last undone action | — |
33
+ | `get_recent_actions` | Returns log of recent commands sent to Ableton (newest first) | `limit` (1-50, default 20) |
34
+ | `get_session_diagnostics` | Analyzes session for issues: armed tracks, solo leftovers, unnamed tracks, empty clips | — |
35
+
36
+ ### Tracks (14) — Create, delete, configure, group tracks
37
+
38
+ | Tool | What it does | Key params |
39
+ |------|-------------|------------|
40
+ | `get_track_info` | Returns clips, devices, mixer state, group/fold info for one track | `track_index` (0-based) |
41
+ | `create_midi_track` | Creates a new MIDI track | `index` (-1=end), `name`, `color` (0-69) |
42
+ | `create_audio_track` | Creates a new audio track | `index` (-1=end), `name`, `color` (0-69) |
43
+ | `create_return_track` | Creates a new return track | — |
44
+ | `delete_track` | Deletes a track | `track_index` |
45
+ | `duplicate_track` | Duplicates track with all contents | `track_index` |
46
+ | `set_track_name` | Renames a track | `track_index`, `name` |
47
+ | `set_track_color` | Sets track color | `track_index`, `color_index` (0-69) |
48
+ | `set_track_mute` | Mutes/unmutes | `track_index`, `muted` (bool) |
49
+ | `set_track_solo` | Solos/unsolos | `track_index`, `soloed` (bool) |
50
+ | `set_track_arm` | Arms/disarms for recording | `track_index`, `armed` (bool) |
51
+ | `stop_track_clips` | Stops all playing clips on track | `track_index` |
52
+ | `set_group_fold` | Folds/unfolds a group track | `track_index`, `folded` (bool) |
53
+ | `set_track_input_monitoring` | Sets input monitoring state | `track_index`, `state` (0=In, 1=Auto, 2=Off) |
54
+
55
+ ### Clips (11) — Clip lifecycle, properties, warp
56
+
57
+ | Tool | What it does | Key params |
58
+ |------|-------------|------------|
59
+ | `get_clip_info` | Returns clip name, length, loop settings, playing state, is_midi/is_audio, warp info | `track_index`, `clip_index` |
60
+ | `create_clip` | Creates empty MIDI clip | `track_index`, `clip_index`, `length` (beats) |
61
+ | `delete_clip` | Removes a clip from its slot | `track_index`, `clip_index` |
62
+ | `duplicate_clip` | Copies clip to next slot | `track_index`, `clip_index` |
63
+ | `fire_clip` | Launches a clip | `track_index`, `clip_index` |
64
+ | `stop_clip` | Stops a playing clip | `track_index`, `clip_index` |
65
+ | `set_clip_name` | Renames a clip | `track_index`, `clip_index`, `name` |
66
+ | `set_clip_color` | Sets clip color | `track_index`, `clip_index`, `color_index` (0-69) |
67
+ | `set_clip_loop` | Configures loop region | `track_index`, `clip_index`, `loop_start`, `loop_end`, `looping` |
68
+ | `set_clip_launch` | Sets launch mode and quantization | `track_index`, `clip_index`, `launch_mode`, `quantization` |
69
+ | `set_clip_warp_mode` | Sets warp mode for audio clips | `track_index`, `clip_index`, `mode` (0=Beats,1=Tones,2=Texture,3=Re-Pitch,4=Complex,6=Complex Pro) |
70
+
71
+ ### Notes (8) — MIDI note manipulation (Live 12 API)
72
+
73
+ | Tool | What it does | Key params |
74
+ |------|-------------|------------|
75
+ | `add_notes` | Adds MIDI notes to a clip | `track_index`, `clip_index`, `notes` (array) |
76
+ | `get_notes` | Reads all notes in a region | `track_index`, `clip_index`, `start_time`, `length` |
77
+ | `remove_notes` | Removes notes in a region | `track_index`, `clip_index`, `start_time`, `pitch_start`, etc. |
78
+ | `remove_notes_by_id` | Removes specific notes by ID | `track_index`, `clip_index`, `note_ids` |
79
+ | `modify_notes` | Changes existing notes (pitch, time, velocity, probability) | `track_index`, `clip_index`, `modifications` |
80
+ | `duplicate_notes` | Copies notes in a region | `track_index`, `clip_index`, region params |
81
+ | `transpose_notes` | Shifts pitch of notes in a region | `track_index`, `clip_index`, `semitones`, region params |
82
+ | `quantize_clip` | Snaps notes to grid | `track_index`, `clip_index`, `grid` (int 0-8: 0=None,1=1/4,2=1/8,5=1/16,8=1/32), `amount` (0-1) |
83
+
84
+ **Note format** (for `add_notes`):
85
+ ```json
86
+ {"pitch": 60, "start_time": 0.0, "duration": 0.5, "velocity": 100, "mute": false}
87
+ ```
88
+
89
+ **Extended note fields** (returned by `get_notes`):
90
+ - `note_id` — unique identifier for modify/remove operations
91
+ - `probability` — 0.0-1.0, per-note trigger probability (Live 12)
92
+ - `velocity_deviation` — -127.0 to 127.0
93
+ - `release_velocity` — 0.0-127.0
94
+
95
+ ### Devices (12) — Instruments, effects, racks
96
+
97
+ | Tool | What it does | Key params |
98
+ |------|-------------|------------|
99
+ | `get_device_info` | Returns device name, class, active state, all parameters | `track_index`, `device_index` |
100
+ | `get_device_parameters` | Lists all parameters with values and ranges | `track_index`, `device_index` |
101
+ | `set_device_parameter` | Sets a single parameter | `track_index`, `device_index`, `parameter_index`, `value` |
102
+ | `batch_set_parameters` | Sets multiple parameters at once | `track_index`, `device_index`, `parameters` (array) |
103
+ | `toggle_device` | Enables/disables a device | `track_index`, `device_index` |
104
+ | `delete_device` | Removes a device from the chain | `track_index`, `device_index` |
105
+ | `load_device_by_uri` | Loads a device by browser URI | `track_index`, `uri` |
106
+ | `find_and_load_device` | Searches browser and loads first match | `track_index`, `name` |
107
+ | `get_rack_chains` | Lists chains in an Instrument/Effect Rack | `track_index`, `device_index` |
108
+ | `set_simpler_playback_mode` | Switches Simpler mode (Classic/One-Shot/Slice) | `track_index`, `device_index`, `playback_mode` (0/1/2), `slice_by`, `sensitivity` |
109
+ | `set_chain_volume` | Sets volume of a rack chain | `track_index`, `device_index`, `chain_index`, `volume` |
110
+ | `get_device_presets` | Lists presets for a device (audio effects, instruments, MIDI effects) | `device_name` |
111
+
112
+ ### Scenes (8) — Scene management
113
+
114
+ | Tool | What it does | Key params |
115
+ |------|-------------|------------|
116
+ | `get_scenes_info` | Lists all scenes with names, tempo, and color | — |
117
+ | `create_scene` | Creates a new scene | `index` (-1=end) |
118
+ | `delete_scene` | Deletes a scene | `scene_index` |
119
+ | `duplicate_scene` | Duplicates a scene | `scene_index` |
120
+ | `fire_scene` | Launches all clips in a scene | `scene_index` |
121
+ | `set_scene_name` | Renames a scene | `scene_index`, `name` |
122
+ | `set_scene_color` | Sets scene color | `scene_index`, `color_index` (0-69) |
123
+ | `set_scene_tempo` | Sets tempo that triggers when scene fires | `scene_index`, `tempo` (20-999 BPM) |
124
+
125
+ ### Mixing (8) — Levels, panning, routing
126
+
127
+ | Tool | What it does | Key params |
128
+ |------|-------------|------------|
129
+ | `set_track_volume` | Sets track volume | `track_index`, `volume` (0.0-1.0, where 0.85≈0dB) |
130
+ | `set_track_pan` | Sets stereo position | `track_index`, `pan` (-1.0 left to 1.0 right) |
131
+ | `set_track_send` | Sets send level to return track | `track_index`, `send_index`, `value` (0.0-1.0) |
132
+ | `get_return_tracks` | Lists all return tracks | — |
133
+ | `get_master_track` | Returns master track info | — |
134
+ | `set_master_volume` | Sets master output level | `volume` (0.0-1.0) |
135
+ | `get_track_routing` | Returns input/output routing config | `track_index` |
136
+ | `set_track_routing` | Configures input/output routing | `track_index`, routing params |
137
+
138
+ ### Browser (4) — Finding and loading presets/devices
139
+
140
+ | Tool | What it does | Key params |
141
+ |------|-------------|------------|
142
+ | `get_browser_tree` | Returns top-level browser categories | — |
143
+ | `get_browser_items` | Lists items in a browser path | `path` |
144
+ | `search_browser` | Searches the browser | `query` |
145
+ | `load_browser_item` | Loads a browser item onto a track — **`uri` MUST come from `search_browser` results, NEVER invented** | `track_index`, `uri` |
146
+
147
+ ### Arrangement (19) — Timeline, recording, cue points, arrangement notes
148
+
149
+ | Tool | What it does | Key params |
150
+ |------|-------------|------------|
151
+ | `get_arrangement_clips` | Lists clips in arrangement view | `track_index` |
152
+ | `create_arrangement_clip` | Duplicates session clip into arrangement at a beat position | `track_index`, `clip_slot_index`, `start_time`, `length` |
153
+ | `add_arrangement_notes` | Adds MIDI notes to an arrangement clip | `track_index`, `clip_index`, `notes` |
154
+ | `get_arrangement_notes` | Reads notes from an arrangement clip | `track_index`, `clip_index`, region params |
155
+ | `remove_arrangement_notes` | Removes notes in a region of an arrangement clip | `track_index`, `clip_index`, region params |
156
+ | `remove_arrangement_notes_by_id` | Removes specific notes by ID | `track_index`, `clip_index`, `note_ids` |
157
+ | `modify_arrangement_notes` | Modifies notes by ID (pitch, time, velocity, probability) | `track_index`, `clip_index`, `modifications` |
158
+ | `duplicate_arrangement_notes` | Copies notes by ID with optional time offset | `track_index`, `clip_index`, `note_ids`, `time_offset` |
159
+ | `transpose_arrangement_notes` | Transposes notes in an arrangement clip | `track_index`, `clip_index`, `semitones`, region params |
160
+ | `set_arrangement_clip_name` | Renames an arrangement clip | `track_index`, `clip_index`, `name` |
161
+ | `set_arrangement_automation` | Writes automation envelope to an arrangement clip | `track_index`, `clip_index`, `parameter_type`, `points` |
162
+ | `back_to_arranger` | Switches playback from session back to arrangement | — |
163
+ | `jump_to_time` | Moves playhead to a beat position | `beat_time` (beats) |
164
+ | `capture_midi` | Captures recently played MIDI | — |
165
+ | `start_recording` | Starts recording (session or arrangement) | `arrangement` (bool) |
166
+ | `stop_recording` | Stops all recording | — |
167
+ | `get_cue_points` | Lists all cue markers | — |
168
+ | `jump_to_cue` | Jumps to a cue point by index | `cue_index` |
169
+ | `toggle_cue_point` | Creates/removes cue point at current position | — |
170
+
171
+ ### Memory (8) — Technique library persistence
172
+
173
+ | Tool | What it does | Key params |
174
+ |------|-------------|------------|
175
+ | `memory_learn` | Saves a technique with stylistic qualities | `name`, `type`, `qualities`, `payload`, `tags` |
176
+ | `memory_recall` | Searches library by text and filters | `query`, `type`, `tags`, `limit` |
177
+ | `memory_get` | Fetches full technique including payload | `technique_id` |
178
+ | `memory_replay` | Returns technique with replay plan for agent | `technique_id`, `adapt` (bool) |
179
+ | `memory_list` | Browses library with filtering/sorting | `type`, `tags`, `sort_by`, `limit` |
180
+ | `memory_favorite` | Stars and/or rates a technique | `technique_id`, `favorite`, `rating` (0-5) |
181
+ | `memory_update` | Updates name, tags, or qualities | `technique_id`, `name`, `tags`, `qualities` |
182
+ | `memory_delete` | Removes technique (backs up first) | `technique_id` |
183
+
184
+ ## Units & Ranges Quick Reference
185
+
186
+ | Concept | Unit/Range | Notes |
187
+ |---------|-----------|-------|
188
+ | Tempo | 20-999 BPM | — |
189
+ | Volume | 0.0-1.0 | 0.85 ≈ 0dB, 0.0 = -inf |
190
+ | Pan | -1.0 to 1.0 | -1 = full left, 0 = center |
191
+ | Time/Position | Beats (float) | 1.0 = quarter note at any tempo |
192
+ | Clip length | Beats (float) | 4.0 = 1 bar at 4/4 |
193
+ | Pitch | 0-127 (MIDI) | 60 = C3 (middle C) |
194
+ | Velocity | 1-127 | 1 = softest, 127 = loudest |
195
+ | Probability | 0.0-1.0 | 1.0 = always triggers |
196
+ | Color index | 0-69 | Ableton's fixed palette |
197
+ | Track index | 0-based | Negative for return tracks (-1=A, -2=B), -1000 for master |
198
+ | Grid (quantize) | Integer enum (0-8) | 0=None, 1=1/4, 2=1/8, 3=1/8T, 4=1/8+T, 5=1/16, 6=1/16T, 7=1/16+T, 8=1/32 |
199
+ | Time signature | num/denom | denom must be power of 2 |
200
+
201
+ ## Common Patterns
202
+
203
+ **"Read before write"** — Always `get_session_info` or `get_track_info` before making changes.
204
+
205
+ **"Verify after write"** — Re-read state after mutations to confirm the change took effect.
206
+
207
+ **"Undo is your safety net"** — The `undo` tool reverts the last operation. Mention it to users.
208
+
209
+ **"One step at a time"** — Don't batch unrelated operations. Verify between steps.
@@ -0,0 +1,392 @@
1
+ # Sound Design — Instruments, Effects & Recipes
2
+
3
+ Ableton Live's stock instruments and effects with key parameters, typical values, and sound design starting points. Use these as launch pads — every sound should be shaped by context.
4
+
5
+ ## Stock Instruments
6
+
7
+ ### Analog (Subtractive Synth)
8
+ Two oscillators + noise → two filters → two amplifiers. Classic analog-modeled subtractive synthesis.
9
+
10
+ **Key parameters:**
11
+ - `Osc1 Shape` / `Osc2 Shape` — Saw, Square/Pulse, Sine, Noise
12
+ - `Osc1 Octave` / `Osc2 Octave` — -3 to +3
13
+ - `Osc2 Detune` — Fine detune for thickness (-1.0 to 1.0 semitones)
14
+ - `Filter1 Type` — LP12, LP24, BP, HP, Notch
15
+ - `Filter1 Freq` — Cutoff frequency (20 Hz - 20 kHz)
16
+ - `Filter1 Res` — Resonance (0 to 1.0)
17
+ - `Fil1 Env Amount` — Filter envelope depth
18
+ - `Amp1 Attack` / `Decay` / `Sustain` / `Release` — ADSR envelope
19
+ - `LFO1 Rate` / `Amount` — Modulation speed and depth
20
+
21
+ ### Wavetable (Wavetable Synth)
22
+ Two wavetable oscillators with continuous morphing, sub oscillator, and powerful modulation.
23
+
24
+ **Key parameters:**
25
+ - `Osc 1 Pos` — Wavetable position (0-1, morphs through waveforms)
26
+ - `Osc 1 Effect` — FM, Classic, Modern, formant effects on the wavetable
27
+ - `Sub Osc` — Sub oscillator (-2 to 0 octaves, sine/triangle)
28
+ - `Filter Type` — LP/HP/BP with various slopes
29
+ - `Filter Freq` — Cutoff
30
+ - `Filter Res` — Resonance
31
+ - `Mod Matrix` — Map any source (LFO, envelope, velocity, etc.) to any parameter
32
+ - `Unison Voices` — 1-8 voices for supersaw/thick sounds
33
+ - `Unison Amount` — Detune spread between voices
34
+
35
+ ### Operator (FM Synth)
36
+ Four oscillators (operators) that can modulate each other's frequency. 11 algorithms define the routing.
37
+
38
+ **Key parameters:**
39
+ - `Algorithm` — Routing topology (1-11). Algorithm 1 = all serial (most harmonics). Algorithm 11 = all parallel (additive).
40
+ - `Osc A-D Coarse` — Frequency ratio (0.5, 1, 2, 3... harmonic ratios)
41
+ - `Osc A-D Level` — Output level / modulation amount
42
+ - `Osc A-D Waveform` — Sine, Saw, Square, Triangle, Noise
43
+ - `Filter Freq` / `Res` — Global filter
44
+ - `LFO Rate` / `Amount` — Vibrato, tremolo
45
+ - `ADSR per operator` — Each operator has its own envelope
46
+
47
+ ### Drift (Analog-Modeled)
48
+ Simple, characterful analog synth with built-in instability and warmth.
49
+
50
+ **Key parameters:**
51
+ - `Shape` — Oscillator shape (continuous morph)
52
+ - `Drift` — Amount of analog-style instability
53
+ - `Filter` — Low-pass filter with resonance
54
+ - `Envelope` — Attack/Decay/Sustain/Release
55
+ - `Voice Mode` — Mono, Poly, Unison
56
+ - `Modulation` — Built-in LFO and envelope routing
57
+
58
+ ### Simpler (Sample Player)
59
+ One-shot or looped sample playback with filter, envelope, LFO, and warp modes.
60
+
61
+ **Key parameters:**
62
+ - `Mode` — Classic (one-shot), One-Shot, Slicing
63
+ - `Start` / `End` — Sample region
64
+ - `Loop` — On/off, loop start/length
65
+ - `Filter Type` / `Freq` / `Res` — Sample filtering
66
+ - `Amp Envelope` — ADSR for amplitude
67
+ - `Warp` — Time-stretch sample to tempo
68
+ - `Voices` — Polyphony count
69
+ - `Spread` — Stereo spread for polyphonic voices
70
+
71
+ ### Drum Rack
72
+ Container that maps samples/instruments to MIDI notes (pads). Each pad is a chain.
73
+
74
+ **Key concepts:**
75
+ - 128 pads (MIDI 0-127), typically using 36-51 (C1-D#2)
76
+ - **Choke groups**: Assign pads to same group — triggering one silences others (e.g., open/closed hi-hat)
77
+ - Each pad has its own chain: sample player + effects
78
+ - **Macro knobs**: 8 knobs that can control parameters across multiple chains
79
+ - Sends A/B per pad for internal effects routing
80
+
81
+ ### Other Instruments
82
+ - **Sampler** — Advanced multi-sample instrument with zones, layers, modulation matrix
83
+ - **Tension** — Physical modeling of strings (pluck, bow, hammer)
84
+ - **Collision** — Physical modeling of mallet instruments (bars, membranes, plates)
85
+ - **Electric** — Electric piano modeling (tine, reed, pickup, damper)
86
+ - **Meld** — MPE-capable synth with two engines and a mixer
87
+
88
+ ## Stock Audio Effects
89
+
90
+ ### Dynamics
91
+
92
+ **Compressor**
93
+ - `Threshold` — Level where compression starts (dB)
94
+ - `Ratio` — Compression ratio (1:1 to inf:1)
95
+ - `Attack` — How fast compression engages (0.01-300ms)
96
+ - `Release` — How fast compression releases (1-3000ms)
97
+ - `Knee` — Soft/hard knee transition
98
+ - `Makeup` / `Output Gain` — Compensate for gain reduction
99
+ - `Sidechain` — External input for ducking (key for pumping effects)
100
+ - **Modes**: Peak, RMS, Expand, OTT-style multiband (Compressor modes)
101
+
102
+ **Glue Compressor**
103
+ Bus-style compressor modeled on classic mix bus compressors.
104
+ - `Threshold`, `Ratio` (2, 4, 10), `Attack`, `Release`
105
+ - `Range` — Limits maximum compression
106
+ - `Dry/Wet` — Parallel compression in one device
107
+ - **Best for**: Drum bus, mix bus, gluing groups together
108
+
109
+ **Limiter**
110
+ - `Gain` — Input gain before limiting
111
+ - `Ceiling` — Maximum output level
112
+ - `Release` — Auto or manual
113
+ - **Use for**: Final output protection, loudness maximizing
114
+
115
+ **Gate**
116
+ - `Threshold` — Level below which audio is muted
117
+ - `Attack` / `Hold` / `Release` — Gate timing
118
+ - `Return` — Hysteresis (how far below threshold to close)
119
+ - **Use for**: Removing bleed, tightening drums, creative gating
120
+
121
+ **Multiband Dynamics**
122
+ Three frequency bands, each with its own compressor/expander.
123
+ - `Low` / `Mid` / `High` — Frequency crossover points
124
+ - Per-band: `Threshold Above/Below`, `Ratio`, `Attack`, `Release`
125
+ - **Use for**: Mastering, de-essing, frequency-specific dynamics
126
+
127
+ ### EQ & Filters
128
+
129
+ **EQ Eight**
130
+ 8-band parametric EQ — the workhorse.
131
+ - Per band: `Frequency`, `Gain` (dB), `Q` (bandwidth)
132
+ - Filter types: LP, HP, Bell, Notch, Low Shelf, High Shelf
133
+ - Various slopes: 12dB, 24dB, 48dB per octave
134
+ - `Oversampling` — Reduce aliasing at high frequencies
135
+
136
+ **Auto Filter**
137
+ Resonant filter with LFO, envelope follower, and sidechain.
138
+ - `Filter Type` — LP/HP/BP/Notch, various slopes
139
+ - `Frequency` — Cutoff
140
+ - `Resonance` — Q factor
141
+ - `LFO Amount` / `Rate` / `Shape` — Filter movement
142
+ - `Envelope Amount` / `Attack` / `Release` — Envelope follower
143
+ - **Use for**: Sweeps, wobbles, auto-wah, rhythmic filtering
144
+
145
+ **Channel EQ**
146
+ Simple 3-band EQ for quick tonal shaping.
147
+ - `Low`, `Mid`, `High` — Gain knobs
148
+ - `Mid Freq` — Sweepable mid frequency
149
+
150
+ ### Time-Based
151
+
152
+ **Reverb**
153
+ - `Decay Time` — Reverb tail length (0.2-60s)
154
+ - `Pre Delay` — Delay before reverb starts (0-500ms)
155
+ - `Room Size` — Early reflection size
156
+ - `Diffusion` — Density of reflections
157
+ - `High/Low Cut` — EQ the reverb tail
158
+ - `Dry/Wet` — Mix (100% wet on return tracks)
159
+ - `Freeze` — Infinite sustain of current reverb
160
+ - **Types**: Room (short, 0.5-1.5s), Hall (medium, 1.5-4s), Cathedral (long, 4-10s+)
161
+
162
+ **Delay**
163
+ - `Time Left/Right` — Delay time (sync or ms)
164
+ - `Feedback` — How much repeats (0-100%)
165
+ - `Filter` — LP/HP on feedback path
166
+ - `Dry/Wet` — Mix
167
+ - `Ping Pong` — Alternates between L/R
168
+ - **Common sync values**: 1/4, 1/8, 3/16 (dotted eighth), 1/4T (triplet)
169
+
170
+ **Echo** (combines delay + reverb + modulation)
171
+ - `Left/Right Time` — Delay times
172
+ - `Feedback` — Repeat amount
173
+ - `Reverb Level` — Built-in reverb
174
+ - `Modulation` — Chorus-like movement in delay
175
+ - `Ducking` — Delays get quieter when input is playing
176
+ - `Gate` — Rhythmic gating of the echo tail
177
+
178
+ ### Distortion & Saturation
179
+
180
+ **Saturator**
181
+ - `Drive` — Amount of saturation
182
+ - `Curve Type` — Analog Clip, Soft Sine, Medium Curve, Hard Curve, Sinoid Fold, Digital Clip
183
+ - `Output` — Compensate volume
184
+ - `Dry/Wet` — Parallel blend
185
+ - **Soft Sine**: Warm, subtle. **Sinoid Fold**: Aggressive harmonics. **Analog Clip**: Tape-like.
186
+
187
+ **Overdrive**
188
+ - `Drive` — Distortion amount
189
+ - `Tone` — Brightness
190
+ - `Dynamics` — Preserves or compresses dynamics
191
+ - **Use for**: Guitar-amp style warmth, bass grit
192
+
193
+ **Erosion**
194
+ - Adds digital artifacts: noise, sine wave modulation
195
+ - `Amount`, `Frequency`, `Width`
196
+ - **Use for**: Lo-fi, bitcrushed textures, digital degradation
197
+
198
+ **Redux**
199
+ - `Downsample` — Reduces sample rate (aliasing)
200
+ - `Bit Reduction` — Reduces bit depth (quantization noise)
201
+ - **Use for**: 8-bit sounds, lo-fi, retro textures
202
+
203
+ ### Modulation
204
+
205
+ **Chorus-Ensemble**
206
+ - `Rate 1/2` — LFO speeds
207
+ - `Amount 1/2` — Modulation depths
208
+ - `Feedback` — Flanging intensity
209
+ - `Dry/Wet` — Mix
210
+ - **Use for**: Thickening, stereo width, classic chorus
211
+
212
+ **Phaser-Flanger**
213
+ - `Rate` — LFO speed
214
+ - `Amount` — Modulation depth
215
+ - `Feedback` — Intensity/resonance
216
+ - **Phaser**: Sweeping notches. **Flanger**: Jet/whoosh effect.
217
+
218
+ **Frequency Shifter**
219
+ - `Frequency` — Shift amount in Hz (not semitones — inharmonic)
220
+ - `Drive` — Input gain
221
+ - `Dry/Wet` — Mix
222
+ - **Use for**: Metallic textures, detuned unease, ring-mod effects
223
+
224
+ ### Utility
225
+
226
+ **Utility**
227
+ Essential for mixing — should be on every track during mix.
228
+ - `Gain` — Volume trim (-inf to +35dB)
229
+ - `Width` — Stereo width (0=mono, 100=normal, 200=wide)
230
+ - `Bass Mono` — Make frequencies below X Hz mono
231
+ - `Bass Mono Freq` — Cutoff for mono bass (typically 120-200 Hz)
232
+ - `Mute` — Kill switch
233
+ - `Phase Invert L/R` — Flip phase
234
+ - `Channel Mode` — Left, Right, Both, Swap
235
+
236
+ ## Sound Design Recipes
237
+
238
+ These are starting points — load the instrument with `find_and_load_device`, then use `batch_set_parameters` to set values. Always `get_device_parameters` first to see exact parameter names.
239
+
240
+ ### Sub Bass (Analog)
241
+ Deep, clean low-end foundation.
242
+ ```
243
+ Oscillator 1: Sine wave
244
+ Oscillator 2: Off
245
+ Filter: LP24, cutoff ~200 Hz, no resonance
246
+ Amp Envelope: Attack 0ms, Decay 0ms, Sustain 100%, Release 100ms
247
+ Note range: C0-C2 (MIDI 24-48)
248
+ ```
249
+ - Mono mode (one voice)
250
+ - Velocity sensitivity low/off for consistent level
251
+
252
+ ### Reese Bass (Analog or Wavetable)
253
+ Thick, detuned, evolving bass for DnB/dubstep.
254
+ ```
255
+ Oscillator 1: Saw wave
256
+ Oscillator 2: Saw wave, detune +5-15 cents
257
+ Filter: LP24, cutoff ~500 Hz, resonance 20%
258
+ Filter Envelope: moderate amount, medium attack (50-200ms)
259
+ Unison: 2-4 voices, moderate spread
260
+ ```
261
+ - Automate filter cutoff for movement
262
+ - Layer with clean sub (separate track) for low-end clarity
263
+
264
+ ### Pad (Wavetable or Analog)
265
+ Warm, evolving background texture.
266
+ ```
267
+ Oscillator: Soft wavetable or saw + triangle
268
+ Unison: 4-8 voices, wide spread
269
+ Filter: LP, cutoff ~2 kHz, low resonance
270
+ Amp Envelope: Attack 200-800ms, Decay 0, Sustain 100%, Release 500-2000ms
271
+ LFO → Filter Cutoff: slow rate (0.1-0.5 Hz), subtle amount
272
+ ```
273
+ - Add Chorus-Ensemble for extra width
274
+ - Add Reverb (hall, 3-5s decay, 30-50% wet)
275
+ - Velocity → filter cutoff for expressiveness
276
+
277
+ ### Pluck (Analog or Wavetable)
278
+ Short, percussive melodic sound.
279
+ ```
280
+ Oscillator: Saw or square
281
+ Filter: LP24, cutoff ~1 kHz, moderate resonance (30-50%)
282
+ Filter Envelope: Amount high, Attack 0, Decay 100-300ms, Sustain 0%, Release 50ms
283
+ Amp Envelope: Attack 0, Decay 200-400ms, Sustain 0%, Release 100ms
284
+ ```
285
+ - Short decay = harp-like. Longer decay = guitar-like.
286
+ - Add short reverb (room, 0.5-1s) for space
287
+
288
+ ### Lead (Analog or Operator)
289
+ Cutting melodic line that sits on top of the mix.
290
+ ```
291
+ Oscillator: Square or saw
292
+ Filter: LP or BP, cutoff ~3 kHz, moderate resonance
293
+ Amp Envelope: Attack 5-20ms, Decay 200ms, Sustain 70%, Release 200ms
294
+ Portamento/Glide: On (50-100ms) for mono mode
295
+ ```
296
+ - Add Delay (1/8 or dotted 1/8, 30% feedback, 20% wet)
297
+ - Add subtle Reverb (plate, 1-2s)
298
+ - Use Saturator lightly for presence
299
+
300
+ ### Supersaw (Wavetable)
301
+ Classic trance/EDM lead/pad.
302
+ ```
303
+ Oscillator: Saw wavetable
304
+ Unison: 7-8 voices
305
+ Unison Amount: High (wide detune)
306
+ Filter: LP, cutoff ~5 kHz, low resonance
307
+ Amp Envelope: Attack 2ms, Sustain 100%, Release 300ms
308
+ ```
309
+ - Layer with sub sine one octave below
310
+ - Chorus or Ensemble for extra width
311
+ - Stereo Delay (1/8 L, dotted 1/8 R)
312
+
313
+ ### Texture / Ambient (Wavetable + Effects)
314
+ Evolving atmospheric sound.
315
+ ```
316
+ Oscillator: Complex wavetable, automate position slowly
317
+ Filter: BP, slowly sweeping frequency
318
+ Amp Envelope: Slow attack (500ms-2s), long release (3-5s)
319
+ LFO: Multiple slow LFOs mapped to position, filter, pitch (subtle)
320
+ ```
321
+ - Heavy Reverb (5-10s decay, high diffusion, 80-100% wet)
322
+ - Delay with high feedback (60-80%), filtered
323
+ - Frequency Shifter at very small values (+/- 1-5 Hz) for movement
324
+ - Grain Delay for granular textures
325
+
326
+ ### 808 Bass (Simpler or Drum Rack)
327
+ Pitched sub with distortion for trap/hip-hop.
328
+ ```
329
+ Sample: 808 kick or sine with fast pitch envelope
330
+ Amp Envelope: Attack 0, Decay 1-3s (long tail), Sustain 0%
331
+ Tuning: Tune to song key
332
+ ```
333
+ - Add Saturator (soft sine or analog clip) for upper harmonics
334
+ - Set Simpler to mono
335
+ - Duration determines how long the 808 rings
336
+
337
+ ## Device Chain Patterns
338
+
339
+ ### Standard Insert Chain (on a track)
340
+ ```
341
+ EQ Eight (surgical cuts) → Compressor → Saturator (subtle) → EQ Eight (tonal shaping) → Utility (final trim)
342
+ ```
343
+
344
+ ### Vocal Chain
345
+ ```
346
+ EQ Eight (HP at 80 Hz, cut mud at 300 Hz) → Compressor (4:1, medium attack) → De-esser (Multiband Dynamics, high band) → EQ Eight (presence boost at 3-5 kHz) → Reverb (20-30% wet, plate)
347
+ ```
348
+
349
+ ### Drum Bus Chain
350
+ ```
351
+ EQ Eight (HP at 30 Hz) → Glue Compressor (4:1, 10ms attack, 100ms release) → Saturator (subtle drive for warmth) → Utility (trim)
352
+ ```
353
+
354
+ ### Parallel Compression Setup
355
+ Using Audio Effect Rack:
356
+ - Chain A: Dry (no processing)
357
+ - Chain B: Compressor (heavy — 10:1, fast attack, fast release, low threshold) → balance chain volume
358
+
359
+ Or using Return track:
360
+ 1. `create_return_track` for parallel compression
361
+ 2. Add Compressor with extreme settings on the return
362
+ 3. Use `set_track_send` to feed signal to the return
363
+ 4. Blend return level to taste
364
+
365
+ ### Sidechain Ducking Setup
366
+ 1. Load Compressor on the track to be ducked (bass, pads)
367
+ 2. Enable Sidechain in Compressor
368
+ 3. Route kick track to sidechain input
369
+ 4. Settings: Ratio 4:1-inf:1, Attack 0.1ms, Release 50-200ms, Threshold low
370
+ 5. Adjust release to match tempo (longer for slower tempos)
371
+
372
+ ## Creative Effects Techniques
373
+
374
+ ### Reverb Freeze
375
+ Set Reverb's Freeze parameter to capture and infinitely sustain the current sound. Automate on/off for dramatic transitions.
376
+
377
+ ### Delay Feedback Washes
378
+ Automate Delay feedback above 100% briefly — the delay builds and self-oscillates. Pull back before it gets out of control. Great for transitions.
379
+
380
+ ### Beat Repeat (Stock Effect)
381
+ Repeats/stutters incoming audio rhythmically.
382
+ - `Grid` — Repeat size (1/4 to 1/32)
383
+ - `Chance` — Probability of repeating
384
+ - `Gate` — How long the repeat runs
385
+ - Great for glitch, fills, and transitions
386
+
387
+ ### Grain Delay
388
+ Granular delay that can pitch-shift and scatter audio.
389
+ - `Pitch` — Transpose the grains
390
+ - `Spray` — Randomize grain position
391
+ - `Frequency` — Grain rate
392
+ - Great for ambient textures and otherworldly effects
@@ -0,0 +1,42 @@
1
+ """
2
+ LivePilot - Ableton Live 12 AI Copilot Remote Script.
3
+
4
+ Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
5
+ when this script is selected in Preferences > Link, Tempo & MIDI.
6
+ """
7
+
8
+ from _Framework.ControlSurface import ControlSurface
9
+ from .server import LivePilotServer
10
+ from . import transport # noqa: F401 — registers transport handlers
11
+ from . import tracks # noqa: F401 — registers track handlers
12
+ from . import clips # noqa: F401 — registers clip handlers
13
+ from . import notes # noqa: F401 — registers note handlers
14
+ from . import devices # noqa: F401 — registers device handlers
15
+ from . import scenes # noqa: F401 — registers scene handlers
16
+ from . import mixing # noqa: F401 — registers mixing handlers
17
+ from . import browser # noqa: F401 — registers browser handlers
18
+ from . import arrangement # noqa: F401 — registers arrangement handlers
19
+ from . import diagnostics # noqa: F401 — registers diagnostics handler
20
+
21
+
22
+ def create_instance(c_instance):
23
+ """Factory function called by Ableton Live."""
24
+ return LivePilot(c_instance)
25
+
26
+
27
+ class LivePilot(ControlSurface):
28
+ """Main ControlSurface that starts the LivePilot TCP server."""
29
+
30
+ def __init__(self, c_instance):
31
+ ControlSurface.__init__(self, c_instance)
32
+ self._server = LivePilotServer(self)
33
+ self._server.start()
34
+ self.log_message("LivePilot v1.0.0 initialized")
35
+ self.show_message("LivePilot: Listening on port 9878")
36
+
37
+ def disconnect(self):
38
+ """Called by Ableton when the script is unloaded."""
39
+ if self._server:
40
+ self._server.stop()
41
+ self.log_message("LivePilot disconnected")
42
+ ControlSurface.disconnect(self)