livepilot 1.9.16 → 1.9.18

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 (54) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +2 -2
  3. package/CHANGELOG.md +52 -1
  4. package/README.md +2 -2
  5. package/livepilot/.Codex-plugin/plugin.json +2 -2
  6. package/livepilot/.claude-plugin/plugin.json +2 -2
  7. package/livepilot/agents/livepilot-producer/AGENT.md +15 -1
  8. package/livepilot/commands/arrange.md +19 -0
  9. package/livepilot/commands/evaluate.md +39 -0
  10. package/livepilot/commands/mix.md +9 -4
  11. package/livepilot/commands/perform.md +30 -0
  12. package/livepilot/commands/sounddesign.md +9 -4
  13. package/livepilot/skills/livepilot-arrangement/SKILL.md +137 -0
  14. package/livepilot/skills/livepilot-composition-engine/SKILL.md +107 -0
  15. package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
  16. package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
  17. package/livepilot/skills/livepilot-core/SKILL.md +69 -449
  18. package/livepilot/skills/livepilot-core/references/overview.md +2 -2
  19. package/livepilot/skills/livepilot-devices/SKILL.md +134 -0
  20. package/livepilot/skills/livepilot-evaluation/SKILL.md +152 -0
  21. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +118 -0
  22. package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
  23. package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
  24. package/livepilot/skills/livepilot-mix-engine/SKILL.md +123 -0
  25. package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
  26. package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
  27. package/livepilot/skills/livepilot-mixing/SKILL.md +155 -0
  28. package/livepilot/skills/livepilot-notes/SKILL.md +129 -0
  29. package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
  30. package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
  31. package/livepilot/skills/livepilot-release/SKILL.md +10 -10
  32. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +123 -0
  33. package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
  34. package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
  35. package/m4l_device/livepilot_bridge.js +1 -1
  36. package/mcp_server/__init__.py +1 -1
  37. package/mcp_server/connection.py +29 -22
  38. package/mcp_server/evaluation/tools.py +1 -1
  39. package/mcp_server/m4l_bridge.py +7 -4
  40. package/mcp_server/mix_engine/tools.py +1 -1
  41. package/mcp_server/performance_engine/tools.py +1 -1
  42. package/mcp_server/reference_engine/tools.py +1 -1
  43. package/mcp_server/sound_design/tools.py +1 -1
  44. package/mcp_server/tools/analyzer.py +4 -3
  45. package/mcp_server/tools/tracks.py +3 -3
  46. package/mcp_server/translation_engine/tools.py +1 -1
  47. package/package.json +2 -2
  48. package/remote_script/LivePilot/__init__.py +1 -1
  49. package/remote_script/LivePilot/arrangement.py +9 -2
  50. package/remote_script/LivePilot/browser.py +1 -0
  51. package/remote_script/LivePilot/clip_automation.py +6 -0
  52. package/remote_script/LivePilot/clips.py +2 -0
  53. package/remote_script/LivePilot/devices.py +1 -0
  54. package/remote_script/LivePilot/utils.py +2 -2
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: livepilot-performance-engine
3
+ description: This skill should be used when the user asks to "perform live", "what's safe to do during a show", "scene handoff", "energy flow", "performance mode", "safe moves", or wants live performance support with safety constraints.
4
+ ---
5
+
6
+ # Performance Engine — Safety-First Live Performance
7
+
8
+ The performance engine enforces a strict safety model for live performance. Every action is classified before execution. Destructive operations are blocked. Risky operations require user confirmation. Only safe operations execute freely.
9
+
10
+ ## Safety Classification
11
+
12
+ Every performance action falls into one of four tiers.
13
+
14
+ ### Safe — Execute Freely
15
+
16
+ These actions are non-destructive and audience-invisible if they fail. Execute without asking.
17
+
18
+ - `fire_scene` / `fire_clip` — launch scenes or clips (the core of live performance)
19
+ - `set_track_send` with small delta — nudge send levels (reverb/delay throws)
20
+ - `set_device_parameter` on mapped macros — macro knob adjustments
21
+ - `set_track_mute` / `set_track_solo` — mute/solo toggles
22
+ - `set_track_volume` with delta <= 3 dB — volume nudges
23
+ - `set_track_pan` with delta <= 0.2 — subtle pan shifts
24
+ - Filter sweeps via `set_device_parameter` on Auto Filter — smooth frequency movement
25
+
26
+ ### Caution — Require User Confirmation
27
+
28
+ These actions are audible and may cause a noticeable glitch if wrong. Always ask before executing.
29
+
30
+ - `set_tempo` with delta <= 5 BPM — tempo nudge (can destabilize synced elements)
31
+ - `toggle_device` — enable/disable effects (may cause pops or silence)
32
+ - `set_track_pan` with delta > 0.2 — large pan moves are disorienting live
33
+ - `set_track_volume` with delta > 3 dB — large volume jumps
34
+
35
+ Present the action to the user: "I will [action]. This may [risk]. Confirm?"
36
+
37
+ ### Blocked — Never Execute During Performance
38
+
39
+ These actions risk audible disasters, data loss, or session corruption during a live show.
40
+
41
+ - `delete_device` / `find_and_load_device` — device chain surgery causes audio interruption
42
+ - `create_arrangement_clip` / `create_clip` / `delete_clip` — clip creation/deletion
43
+ - `create_midi_track` / `create_audio_track` / `delete_track` — track structure changes
44
+ - `add_notes` / `modify_notes` / `remove_notes` — note editing while playing
45
+ - `set_clip_loop` / `set_clip_warp_mode` — clip property changes while playing
46
+ - `flatten_track` / `freeze_track` — CPU-intensive operations
47
+ - Any arrangement-view editing tools
48
+
49
+ If the user requests a blocked action during performance mode, explain why it is blocked and suggest a safe alternative: "That requires editing the device chain, which can cause audio dropouts during a live show. Instead, try [safe alternative]."
50
+
51
+ ### Unknown — Treat as Blocked
52
+
53
+ Any action not explicitly classified above defaults to blocked. Do not experiment with unclassified actions during a live performance.
54
+
55
+ ## Performance Loop
56
+
57
+ ### Step 1 — Get State
58
+
59
+ Call `get_performance_state` to read the current session state:
60
+ - Playing status, current tempo, time signature
61
+ - Which scenes and clips are currently playing
62
+ - Track arm states, solo/mute states
63
+ - Current energy level estimate
64
+
65
+ ### Step 2 — Get Safe Moves
66
+
67
+ Call `get_performance_safe_moves` to get a list of contextually appropriate safe actions based on the current state. The response is filtered by what makes musical sense right now — not just what is technically safe.
68
+
69
+ ### Step 3 — Check Safety
70
+
71
+ Before executing any user request, call `check_safety(move_type)` to verify the classification. The response confirms: `safe`, `caution`, or `blocked` with an explanation.
72
+
73
+ ### Step 4 — Execute Safe/Caution Only
74
+
75
+ - Safe: execute immediately
76
+ - Caution: present to user, wait for confirmation, then execute
77
+ - Blocked: refuse with explanation and alternative
78
+
79
+ ### Step 5 — Scene Handoff
80
+
81
+ For transitioning between scenes (the primary live performance action), call `plan_scene_handoff(from_scene, to_scene)` to get a transition plan:
82
+
83
+ - Which clips change between the scenes
84
+ - Recommended launch timing (quantization)
85
+ - Volume/send adjustments to smooth the handoff
86
+ - Any tempo changes between scenes
87
+
88
+ Execute the handoff plan using safe actions only.
89
+
90
+ ## Energy Flow
91
+
92
+ During a live set, track the energy trajectory:
93
+
94
+ 1. `get_performance_state` includes an `energy_estimate` (0.0-1.0)
95
+ 2. Use scene ordering to build energy arcs: low-energy scenes for intros/breakdowns, high-energy for drops/peaks
96
+ 3. `plan_scene_handoff` accounts for energy delta — large energy jumps get transition suggestions
97
+
98
+ ## Performance Mode Entry
99
+
100
+ When the user says "performance mode", "going live", or "starting the show":
101
+
102
+ 1. Call `get_performance_state` to verify the session is ready
103
+ 2. Confirm the safety model with the user: "Performance mode active. I will only execute safe actions freely and ask before caution-level moves. Destructive edits are blocked."
104
+ 3. Switch to a response style optimized for speed: short confirmations, no lengthy explanations mid-performance
105
+ 4. Prioritize scene launches and safe parameter nudges
106
+
107
+ ## Performance Mode Exit
108
+
109
+ When the user says "done performing", "show's over", or "exit performance mode":
110
+
111
+ 1. Confirm: "Performance mode ended. Full editing capabilities restored."
112
+ 2. Resume normal operation with all tools available
113
+
114
+ ## Emergency Actions
115
+
116
+ If something goes wrong during a live show:
117
+
118
+ - `stop_all_clips` — emergency silence (use only if requested)
119
+ - `set_master_volume(0.0)` — fade to silence
120
+ - `set_track_mute` on the problem track — isolate the issue
121
+
122
+ Never call `undo` during a live performance — it may revert a scene launch or clip state in unpredictable ways.
@@ -0,0 +1,98 @@
1
+ # Performance Safety Reference
2
+
3
+ Complete classification of every LivePilot action for live performance contexts.
4
+
5
+ ## Safe Actions (No Confirmation Needed)
6
+
7
+ | Action | Tool | Notes |
8
+ |--------|------|-------|
9
+ | Launch scene | `fire_scene` | Core performance action |
10
+ | Launch clip | `fire_clip` | Individual clip triggering |
11
+ | Stop clip | `stop_clip` | Individual clip stop |
12
+ | Stop track clips | `stop_track_clips` | Clear a track |
13
+ | Volume nudge (small) | `set_track_volume` | Delta <= 3 dB only |
14
+ | Send nudge | `set_track_send` | Small adjustments to reverb/delay throws |
15
+ | Macro nudge | `set_device_parameter` | On mapped macro controls only |
16
+ | Filter sweep | `set_device_parameter` | On Auto Filter frequency parameter |
17
+ | Mute toggle | `set_track_mute` | Non-destructive, reversible |
18
+ | Solo toggle | `set_track_solo` | Non-destructive, reversible |
19
+ | Pan nudge (small) | `set_track_pan` | Delta <= 0.2 only |
20
+ | Master volume | `set_master_volume` | For overall level control |
21
+ | Continue playback | `continue_playback` | Resume from pause |
22
+ | Jump to cue | `jump_to_cue` | Navigate arrangement cue points |
23
+ | Get state | `get_performance_state` | Read-only, always safe |
24
+ | Get playing clips | `get_playing_clips` | Read-only |
25
+ | Get scene matrix | `get_scene_matrix` | Read-only |
26
+ | Any get_* tool | various | All read-only tools are safe |
27
+
28
+ ## Caution Actions (Require Confirmation)
29
+
30
+ | Action | Tool | Risk |
31
+ |--------|------|------|
32
+ | Tempo nudge | `set_tempo` | May destabilize warped audio, synced plugins |
33
+ | Device toggle | `toggle_device` | May cause audio pop, click, or silence |
34
+ | Large pan move | `set_track_pan` | Disorienting for audience if sudden |
35
+ | Large volume jump | `set_track_volume` | Jarring if delta > 3 dB |
36
+ | Fire scene clips | `fire_scene_clips` | Selective scene launch, less predictable |
37
+ | Set scene tempo | `set_scene_tempo` | Changes tempo on next scene fire |
38
+
39
+ ### Confirmation Protocol
40
+
41
+ Present as: "[Action description]. Risk: [what could go wrong]. Confirm?"
42
+
43
+ Keep confirmations short during performance. One line maximum.
44
+
45
+ ## Blocked Actions (Never During Performance)
46
+
47
+ ### Device Chain Surgery
48
+ - `find_and_load_device` — loading causes audio thread hiccup
49
+ - `delete_device` — removing active device causes dropout
50
+ - `load_device_by_uri` — same as find_and_load
51
+ - `load_browser_item` — browser loading is unpredictable latency
52
+
53
+ ### Track Structure
54
+ - `create_midi_track` / `create_audio_track` / `create_return_track` — track creation pauses audio engine momentarily
55
+ - `delete_track` — data loss, audio interruption
56
+ - `duplicate_track` — CPU spike
57
+ - `set_track_routing` — routing changes can cause feedback or silence
58
+
59
+ ### Clip Editing
60
+ - `create_clip` / `delete_clip` / `duplicate_clip` — structural changes while playing
61
+ - `set_clip_loop` / `set_clip_warp_mode` / `quantize_clip` — property changes on playing clips
62
+ - `add_notes` / `modify_notes` / `remove_notes` — note editing mid-playback
63
+
64
+ ### Arrangement Editing
65
+ - All `*_arrangement_*` tools — arrangement view editing during performance
66
+ - `set_arrangement_automation` — automation lane changes
67
+
68
+ ### Heavy Operations
69
+ - `freeze_track` / `flatten_track` — CPU-intensive, blocks audio thread
70
+ - `start_recording` — may cause unexpected monitoring behavior
71
+ - `capture_audio` / `capture_midi` — resource-intensive
72
+
73
+ ### Data Operations
74
+ - `undo` / `redo` — unpredictable state reversion during live playback
75
+ - `memory_learn` / `memory_delete` — non-urgent, save for after the show
76
+ - `import_midi_to_clip` — file I/O during performance
77
+
78
+ ## Emergency Procedures
79
+
80
+ ### Audio Problem
81
+ 1. `set_track_mute(track_index, true)` on the problem track
82
+ 2. If problem persists: `set_master_volume(0.0)` for fade to silence
83
+ 3. Last resort: `stop_all_clips` for emergency silence
84
+
85
+ ### Feedback Loop
86
+ 1. `set_track_mute` on the suspected track immediately
87
+ 2. `set_track_send` to zero on all sends for that track
88
+ 3. Gradually unmute after identifying the routing issue
89
+
90
+ ### Wrong Scene Launched
91
+ 1. Immediately `fire_scene` on the correct scene
92
+ 2. Or `stop_all_clips` and restart from the correct point
93
+ 3. Do not use `undo` — it may revert more than intended
94
+
95
+ ### CPU Spike
96
+ 1. `set_track_mute` on the most CPU-heavy tracks (check `get_session_info` for device counts)
97
+ 2. `toggle_device` to bypass heavy effects (with caution confirmation skipped in emergency)
98
+ 3. If critical: `stop_all_clips` and restart with fewer active tracks
@@ -28,21 +28,21 @@ Run this checklist EVERY time the user says "update everything", "push", "releas
28
28
 
29
29
  ## 2. Tool Count (must ALL match)
30
30
 
31
- Current: **236 tools across 32 domains**.
31
+ Current: **236 tools across 31 domains**.
32
32
  Core (no M4L): **149**. Analyzer (M4L): **29**. Perception (offline): **4**.
33
33
 
34
34
  Verify: `grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print sum}'`
35
35
 
36
36
  Files that reference tool count:
37
37
  - [ ] `README.md` — header, PERCEPTION section ("207 core...29 analyzer"), Analyzer table header "(29)", Perception table header "(4)"
38
- - [ ] `package.json` → `"description"` (236 tools, 32 domains)
38
+ - [ ] `package.json` → `"description"` (236 tools, 31 domains)
39
39
  - [ ] `server.json` → `"description"`
40
40
  - [ ] `livepilot/.Codex-plugin/plugin.json` → `"description"` (primary Codex manifest)
41
41
  - [ ] `livepilot/.claude-plugin/plugin.json` → `"description"` (must match Codex plugin)
42
42
  - [ ] `.claude-plugin/marketplace.json` → `"description"`
43
- - [ ] `CLAUDE.md` → "236 tools across 32 domains"
44
- - [ ] `livepilot/skills/livepilot-core/SKILL.md` — "236 tools across 32 domains", Analyzer (29), Perception (4)
45
- - [ ] `livepilot/skills/livepilot-core/references/overview.md` — "236 tools across 32 domains"
43
+ - [ ] `CLAUDE.md` → "236 tools across 31 domains"
44
+ - [ ] `livepilot/skills/livepilot-core/SKILL.md` — "236 tools across 31 domains", Analyzer (29), Perception (4)
45
+ - [ ] `livepilot/skills/livepilot-core/references/overview.md` — "236 tools across 31 domains"
46
46
  - [ ] `docs/manual/index.md` — domain table: Analyzer (29), Perception (4)
47
47
  - [ ] `docs/manual/getting-started.md` — "207 core tools...29 analyzer"
48
48
  - [ ] `docs/manual/tool-reference.md` — all domains present with correct counts
@@ -56,10 +56,10 @@ Files that reference tool count:
56
56
 
57
57
  ## 3. Domain Count
58
58
 
59
- Current: **32 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, research, planner, project_brain, runtime, evaluation, memory_fabric, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine.
59
+ Current: **31 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine.
60
60
 
61
- - [ ] All files that mention domain count say "32 domains"
62
- - [ ] Domain lists include ALL 32 (especially newer domains — they're the most often omitted)
61
+ - [ ] All files that mention domain count say "31 domains"
62
+ - [ ] Domain lists include ALL 31 (especially newer domains — they're the most often omitted)
63
63
 
64
64
  ## 4. npm Registry
65
65
 
@@ -89,8 +89,8 @@ Current: **32 domains**: transport, tracks, clips, notes, devices, scenes, mixin
89
89
 
90
90
  - [ ] `README.md` — features match current capabilities, "Coming" section is accurate
91
91
  - [ ] `docs/manual/getting-started.md` — install instructions current
92
- - [ ] `docs/manual/tool-reference.md` — all 32 domains listed, all 236 tools present
93
- - [ ] `docs/TOOL_REFERENCE.md` — all 32 domains present
92
+ - [ ] `docs/manual/tool-reference.md` — all 31 domains listed, all 236 tools present
93
+ - [ ] `docs/TOOL_REFERENCE.md` — all 31 domains present
94
94
  - [ ] `docs/M4L_BRIDGE.md` — architecture accurate, core tool count correct
95
95
 
96
96
  ## 9. Derived Artifacts
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: livepilot-sound-design-engine
3
+ description: This skill should be used when the user asks to "design a sound", "analyze a patch", "fix a static sound", "add modulation", "check my timbre", "improve a synth patch", or wants critic-driven sound design feedback and iterative patch refinement.
4
+ ---
5
+
6
+ # Sound Design Engine — Critic-Driven Patch Refinement
7
+
8
+ The sound design engine analyzes synth patches, identifies timbral weaknesses, and iteratively refines them through a measured critic loop. Every change is evaluated against the before state.
9
+
10
+ ## The Sound Design Critic Loop
11
+
12
+ ### Step 1 — Build Patch Model
13
+
14
+ Call `get_patch_model(track_index)` to build a PatchModel for the target track. The PatchModel maps every device on the track into typed blocks (oscillator, filter, envelope, lfo, saturation, spatial, effect) and classifies each as `controllable` or `opaque`.
15
+
16
+ Read the response carefully:
17
+ - `blocks`: ordered list of processing blocks with types and parameter names
18
+ - `controllable_params`: parameters you can modify via `set_device_parameter`
19
+ - `opaque_blocks`: third-party plugins where parameters may not map cleanly
20
+ - `modulation_sources`: detected LFOs, envelopes, and macro mappings
21
+ - `signal_flow`: how blocks connect (serial, parallel, or rack chains)
22
+
23
+ See `references/patch-model.md` for the full PatchModel structure and native device block map.
24
+
25
+ ### Step 2 — Analyze
26
+
27
+ Call `analyze_sound_design(track_index)` to run all sound design critics against the patch. The response contains an `issues` array with `critic`, `severity`, `block`, and `evidence`.
28
+
29
+ Five critics run during analysis. See `references/sound-design-critics.md` for thresholds:
30
+
31
+ - **static_timbre** — sound does not evolve over time, no movement
32
+ - **no_modulation_sources** — no LFOs, envelopes, or automation detected
33
+ - **modulation_flatness** — modulation exists but ranges are too narrow to hear
34
+ - **missing_filter** — raw oscillator output with no spectral shaping
35
+ - **spectral_imbalance** — too much energy in one frequency region, or gaps
36
+
37
+ ### Step 3 — Plan
38
+
39
+ Pick the highest-severity issue. Call `plan_sound_design_move(track_index)` with the issue. The planner returns a single intervention:
40
+
41
+ - `move_type`: one of the move vocabulary entries
42
+ - `target_device`: device index on the track
43
+ - `target_parameter`: parameter name or index
44
+ - `target_value`: the new value
45
+ - `rationale`: why this move addresses the issue
46
+
47
+ Move vocabulary:
48
+ - **modulation_injection** — add or increase LFO/envelope depth on a parameter
49
+ - **filter_shaping** — adjust cutoff, resonance, or filter type
50
+ - **parameter_automation** — create clip automation for time-varying timbral change
51
+ - **oscillator_tuning** — adjust pitch, detune, waveform, or unison settings
52
+
53
+ ### Step 4 — Capture Before
54
+
55
+ 1. Call `get_device_parameters(track_index, device_index)` — save current parameter state
56
+ 2. Call `get_master_spectrum` — save spectral snapshot (if analyzer available)
57
+
58
+ ### Step 5 — Execute
59
+
60
+ Apply the planned move using the appropriate tool:
61
+
62
+ - `set_device_parameter` for direct parameter changes (filter cutoff, LFO rate, oscillator shape)
63
+ - `toggle_device` for enabling/disabling processing blocks
64
+ - `batch_set_parameters` when the move requires coordinated changes (e.g., LFO depth + rate together)
65
+ - `set_clip_automation` for parameter automation moves
66
+ - `find_and_load_device` when the fix requires adding a new device (e.g., adding an Auto Filter)
67
+
68
+ Execute one move at a time. Verify before continuing.
69
+
70
+ ### Step 6 — Capture After
71
+
72
+ Repeat the same measurements:
73
+
74
+ 1. Call `get_device_parameters(track_index, device_index)` — confirm the change took effect
75
+ 2. Call `get_master_spectrum` — save post-change spectral snapshot
76
+
77
+ ### Step 7 — Evaluate
78
+
79
+ Call `evaluate_move(engine="sound_design")` with the before and after snapshots. Read:
80
+
81
+ - `keep_change` (bool): whether the change improved the sound
82
+ - `score` (0.0-1.0): quality improvement magnitude
83
+ - `timbral_delta`: what changed spectrally
84
+ - `explanation`: human-readable summary
85
+
86
+ ### Step 8 — Keep or Undo
87
+
88
+ If `keep_change` is `false`, call `undo()`. Explain what was tried and why it did not improve the sound.
89
+
90
+ If `keep_change` is `true`, report the improvement. If score > 0.7, consider calling `memory_learn(type="sound_design")` to save the technique.
91
+
92
+ ### Step 9 — Repeat
93
+
94
+ Return to Step 2. Re-analyze after each kept change. The critic list updates as issues are resolved. Continue until the user is satisfied or no high-severity issues remain.
95
+
96
+ ## Working with Opaque Plugins
97
+
98
+ Third-party AU/VST plugins may report as `opaque` in the PatchModel:
99
+
100
+ 1. Check `get_plugin_parameters(track_index, device_index)` — some plugins expose parameters through the host
101
+ 2. If `parameter_count <= 1`, the plugin is dead or unresponsive. Call `delete_device` and suggest a native alternative
102
+ 3. If parameters are available but unnamed (Parameter 1, Parameter 2...), try `map_plugin_parameter` to identify them by ear
103
+ 4. Report opaque status to the user — sound design critics cannot fully analyze what they cannot inspect
104
+
105
+ ## Quick Sound Design Checks
106
+
107
+ - **"What's wrong with this sound?"** — Call `get_sound_design_issues(track_index)` for a diagnostic without executing fixes
108
+ - **"Show me the patch"** — Call `get_patch_model(track_index)` then `walk_device_tree(track_index)` for full device chain visibility
109
+ - **"What can I automate?"** — Read the `controllable_params` list from the PatchModel response
110
+
111
+ ## Native Device Strengths
112
+
113
+ When adding processing blocks, prefer native Ableton devices for controllability:
114
+
115
+ - **Wavetable** — complex oscillator section with built-in modulation matrix
116
+ - **Operator** — FM synthesis with per-operator envelopes and LFO
117
+ - **Analog** — subtractive with two filters and two LFOs
118
+ - **Auto Filter** — standalone filter with envelope follower and LFO
119
+ - **Corpus** — resonant body modeling for physical character
120
+ - **Erosion** — high-frequency noise and distortion artifacts
121
+ - **Saturator** — waveshaping with multiple curve types
122
+
123
+ Always `search_browser` before loading — never guess device names.
@@ -0,0 +1,119 @@
1
+ # Patch Model Reference
2
+
3
+ The PatchModel is returned by `get_patch_model(track_index)` and represents the complete signal processing structure of a track's device chain.
4
+
5
+ ## PatchModel Structure
6
+
7
+ ```json
8
+ {
9
+ "track_index": 0,
10
+ "track_name": "Lead Synth",
11
+ "blocks": [
12
+ {
13
+ "device_index": 0,
14
+ "device_name": "Wavetable",
15
+ "block_type": "oscillator",
16
+ "controllable": true,
17
+ "parameters": ["Osc 1 Pos", "Osc 1 Gain", "Sub Gain", ...],
18
+ "sub_blocks": [
19
+ { "block_type": "filter", "parameters": ["Filter Freq", "Filter Res", ...] },
20
+ { "block_type": "lfo", "parameters": ["LFO 1 Rate", "LFO 1 Amount", ...] },
21
+ { "block_type": "envelope", "parameters": ["Amp Attack", "Amp Decay", ...] }
22
+ ]
23
+ },
24
+ {
25
+ "device_index": 1,
26
+ "device_name": "Auto Filter",
27
+ "block_type": "filter",
28
+ "controllable": true,
29
+ "parameters": ["Frequency", "Resonance", "Env. Modulation", ...]
30
+ }
31
+ ],
32
+ "controllable_params": [...],
33
+ "opaque_blocks": [],
34
+ "modulation_sources": [
35
+ { "type": "lfo", "device_index": 0, "rate": "0.5 Hz", "targets": ["Filter Freq"] }
36
+ ],
37
+ "signal_flow": "serial"
38
+ }
39
+ ```
40
+
41
+ ## Block Types
42
+
43
+ ### oscillator
44
+ Sound source generators. Found in synth instruments (Wavetable, Operator, Analog, Drift, Simpler, Sampler).
45
+
46
+ Key parameters: waveform/position, pitch/tune/detune, unison voices/spread, sub oscillator level, FM amount/ratio.
47
+
48
+ ### filter
49
+ Spectral shaping. Found as sub-blocks inside instruments or as standalone devices (Auto Filter, EQ Eight).
50
+
51
+ Key parameters: cutoff frequency, resonance, filter type (LP/HP/BP/Notch), slope (12/24 dB), envelope modulation amount, drive.
52
+
53
+ ### envelope
54
+ Time-shaping contour generators. Usually ADSR controlling amplitude or filter cutoff.
55
+
56
+ Key parameters: attack, decay, sustain, release. Some instruments offer additional envelopes with arbitrary targets.
57
+
58
+ ### lfo
59
+ Low-frequency oscillators for cyclic modulation.
60
+
61
+ Key parameters: rate (Hz or synced), waveform (sine, triangle, square, saw, random), amount/depth, target parameter, phase, offset.
62
+
63
+ ### saturation
64
+ Waveshaping, distortion, and harmonic generation.
65
+
66
+ Devices: Saturator, Overdrive, Pedal, Amp, Erosion, Dynamic Tube. Key parameters: drive, tone, type/curve, dry/wet.
67
+
68
+ ### spatial
69
+ Stereo field and space processing.
70
+
71
+ Devices: Reverb, Delay, Chorus, Phaser, Flanger, Echo, Hybrid Reverb. Key parameters: decay/time, pre-delay, size, damping, dry/wet, feedback.
72
+
73
+ ### effect
74
+ Catch-all for utility and dynamics processing.
75
+
76
+ Devices: Compressor, Glue Compressor, Limiter, Gate, Utility, Tuner, Spectrum. Key parameters vary by device.
77
+
78
+ ## Controllable vs Opaque
79
+
80
+ - **Controllable**: native Ableton devices and well-behaved plugins where `get_device_parameters` returns named, ranged parameters. All LivePilot set/get parameter tools work reliably.
81
+ - **Opaque**: third-party AU/VST plugins where parameter inspection fails or returns generic names (Parameter 1, Parameter 2). The sound design engine can detect the block exists but cannot reason about individual parameters.
82
+
83
+ Check `parameter_count` on opaque blocks. If <= 1, the plugin failed to load — delete it and replace with a native alternative.
84
+
85
+ ## Native Device Block Map
86
+
87
+ Quick reference for which block types each native device provides:
88
+
89
+ | Device | Primary Block | Sub-blocks |
90
+ |--------|--------------|------------|
91
+ | Wavetable | oscillator | filter, lfo, envelope |
92
+ | Operator | oscillator | filter, lfo, envelope |
93
+ | Analog | oscillator | filter, lfo, envelope |
94
+ | Drift | oscillator | filter, lfo, envelope |
95
+ | Simpler | oscillator | filter, lfo, envelope |
96
+ | Sampler | oscillator | filter, lfo, envelope |
97
+ | Auto Filter | filter | lfo, envelope |
98
+ | EQ Eight | filter | — |
99
+ | Compressor | effect | envelope (sidechain) |
100
+ | Glue Compressor | effect | — |
101
+ | Saturator | saturation | — |
102
+ | Overdrive | saturation | — |
103
+ | Pedal | saturation | — |
104
+ | Reverb | spatial | — |
105
+ | Delay | spatial | filter |
106
+ | Echo | spatial | filter, lfo |
107
+ | Chorus-Ensemble | spatial | — |
108
+ | Phaser-Flanger | spatial | lfo |
109
+ | Hybrid Reverb | spatial | — |
110
+ | Corpus | spatial | — |
111
+ | Utility | effect | — |
112
+
113
+ ## Rack Detection
114
+
115
+ If a track contains an Instrument Rack or Audio Effect Rack, the PatchModel reports:
116
+
117
+ - `signal_flow`: "parallel" (rack chains run in parallel)
118
+ - Each chain appears as a nested block list
119
+ - Use `get_rack_chains(track_index, device_index)` for per-chain detail
@@ -0,0 +1,118 @@
1
+ # Sound Design Critics Reference
2
+
3
+ Each critic runs during `analyze_sound_design(track_index)` and produces an issue object with `critic`, `severity` (0.0-1.0), `block`, and `evidence`.
4
+
5
+ ## static_timbre
6
+
7
+ Detects sounds that do not evolve over time. A static timbre lacks movement, making it sound flat and lifeless in a mix.
8
+
9
+ **Thresholds:**
10
+ - severity >= 0.7: No detectable spectral change over a 4-bar window. Crest factor of spectral flux < 0.5 dB
11
+ - severity >= 0.4: Minimal change (spectral flux < 1.5 dB). Some subtle movement present
12
+ - severity < 0.4: Adequate movement detected, likely intentional sustain character
13
+
14
+ **Evidence format:**
15
+ ```json
16
+ {
17
+ "spectral_flux_db": 0.3,
18
+ "analysis_window_bars": 4,
19
+ "brightest_moment_db": -8.2,
20
+ "dullest_moment_db": -8.5
21
+ }
22
+ ```
23
+
24
+ **Typical fix:** modulation_injection — add LFO to filter cutoff (rate 0.1-2 Hz, depth 20-40%).
25
+
26
+ ## no_modulation_sources
27
+
28
+ Detects patches with zero modulation sources: no LFOs, no envelopes beyond amp/filter ADSR, no automation, no macro mappings.
29
+
30
+ **Thresholds:**
31
+ - severity >= 0.7: Zero modulation sources on a melodic/pad/lead instrument
32
+ - severity >= 0.4: No modulation on a bass or rhythmic element (some genres keep bass static intentionally)
33
+ - severity < 0.4: Drum hits and one-shots (modulation not expected)
34
+
35
+ **Evidence format:**
36
+ ```json
37
+ {
38
+ "lfo_count": 0,
39
+ "envelope_count": 1,
40
+ "automation_lanes": 0,
41
+ "macro_mappings": 0,
42
+ "instrument_type": "pad"
43
+ }
44
+ ```
45
+
46
+ **Typical fix:** modulation_injection — enable device LFO if available, or add Auto Filter with LFO. For pads, map LFO to filter cutoff and/or oscillator pitch (subtle detune).
47
+
48
+ ## modulation_flatness
49
+
50
+ Detects modulation sources that exist but operate with such narrow ranges they produce no audible effect.
51
+
52
+ **Thresholds:**
53
+ - severity >= 0.7: Modulation depth < 5% of parameter range on all targets
54
+ - severity >= 0.4: Modulation depth 5-15% — present but barely perceptible
55
+ - severity < 0.4: Depth > 15%, audible modulation
56
+
57
+ **Evidence format:**
58
+ ```json
59
+ {
60
+ "modulation_source": "LFO 1",
61
+ "target_parameter": "Filter Cutoff",
62
+ "depth_percent": 3.2,
63
+ "parameter_range": [20, 20000],
64
+ "effective_range": [850, 920]
65
+ }
66
+ ```
67
+
68
+ **Typical fix:** Increase modulation depth to 20-40% for filter targets, 5-15% for pitch targets, 10-30% for amplitude targets.
69
+
70
+ ## missing_filter
71
+
72
+ Detects raw oscillator output with no filter or spectral shaping in the signal path. Unfiltered signals often sound harsh and sit poorly in a mix.
73
+
74
+ **Thresholds:**
75
+ - severity >= 0.7: No filter device in the signal chain, and the source is a harmonically rich waveform (saw, square, FM)
76
+ - severity >= 0.4: Filter present but fully open (cutoff at maximum, no resonance)
77
+ - severity < 0.4: Filter active and shaping the spectrum
78
+
79
+ **Evidence format:**
80
+ ```json
81
+ {
82
+ "has_filter": false,
83
+ "source_waveform": "sawtooth",
84
+ "harmonic_content": "rich",
85
+ "device_chain": ["Wavetable"]
86
+ }
87
+ ```
88
+
89
+ **Typical fix:** filter_shaping — add Auto Filter (low-pass, cutoff around 2-5 kHz, resonance 20-40%) or enable the instrument's built-in filter.
90
+
91
+ ## spectral_imbalance
92
+
93
+ Detects patches with too much energy concentrated in one frequency region, or significant spectral gaps.
94
+
95
+ **Thresholds:**
96
+ - severity >= 0.7: Single band > 12 dB above the mean, or a gap > 12 dB below
97
+ - severity >= 0.4: Imbalance 6-12 dB in one or more regions
98
+ - severity < 0.4: Balanced spectrum appropriate for the instrument role
99
+
100
+ **Evidence format:**
101
+ ```json
102
+ {
103
+ "peak_band": "high_mid",
104
+ "peak_deviation_db": 14.2,
105
+ "gap_band": "low_mid",
106
+ "gap_deviation_db": -8.5,
107
+ "band_levels_db": {
108
+ "sub": -22.0,
109
+ "low": -14.5,
110
+ "low_mid": -20.1,
111
+ "mid": -11.6,
112
+ "high_mid": -2.4,
113
+ "high": -8.9
114
+ }
115
+ }
116
+ ```
117
+
118
+ **Typical fix:** filter_shaping to tame the peak (EQ cut or filter sweep), or oscillator_tuning to fill the gap (add sub oscillator, adjust waveform).
@@ -84,7 +84,7 @@ function anything() {
84
84
  function dispatch(cmd, args) {
85
85
  switch(cmd) {
86
86
  case "ping":
87
- send_response({"ok": true, "version": "1.9.16"});
87
+ send_response({"ok": true, "version": "1.9.18"});
88
88
  break;
89
89
  case "get_params":
90
90
  cmd_get_params(args);
@@ -1,2 +1,2 @@
1
1
  """LivePilot MCP Server — bridges MCP protocol to Ableton Live."""
2
- __version__ = "1.9.16"
2
+ __version__ = "1.9.18"