livepilot 1.26.0 → 1.26.2

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 (191) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +1 -1
  3. package/installer/codex.js +87 -9
  4. package/livepilot/.Codex-plugin/plugin.json +8 -0
  5. package/livepilot/.claude-plugin/plugin.json +8 -0
  6. package/livepilot/.mcp.json +8 -0
  7. package/livepilot/agents/livepilot-producer/AGENT.md +314 -0
  8. package/livepilot/commands/arrange.md +47 -0
  9. package/livepilot/commands/beat.md +81 -0
  10. package/livepilot/commands/evaluate.md +51 -0
  11. package/livepilot/commands/memory.md +22 -0
  12. package/livepilot/commands/mix.md +47 -0
  13. package/livepilot/commands/perform.md +42 -0
  14. package/livepilot/commands/session.md +13 -0
  15. package/livepilot/commands/sounddesign.md +58 -0
  16. package/livepilot/rubrics/default_preset_check.md +82 -0
  17. package/livepilot/rubrics/layer_accumulation.md +79 -0
  18. package/livepilot/rubrics/layer_precision.md +79 -0
  19. package/livepilot/rubrics/modulation_presence.md +63 -0
  20. package/livepilot/rubrics/sound_design_depth.md +40 -0
  21. package/livepilot/skills/livepilot-arrangement/SKILL.md +164 -0
  22. package/livepilot/skills/livepilot-composition-engine/SKILL.md +151 -0
  23. package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
  24. package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
  25. package/livepilot/skills/livepilot-core/SKILL.md +261 -0
  26. package/livepilot/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
  27. package/livepilot/skills/livepilot-core/references/affordances/_schema.md +160 -0
  28. package/livepilot/skills/livepilot-core/references/affordances/devices/auto-filter.yaml +133 -0
  29. package/livepilot/skills/livepilot-core/references/affordances/devices/chorus-ensemble.yaml +91 -0
  30. package/livepilot/skills/livepilot-core/references/affordances/devices/compressor.yaml +98 -0
  31. package/livepilot/skills/livepilot-core/references/affordances/devices/convolution-reverb.yaml +113 -0
  32. package/livepilot/skills/livepilot-core/references/affordances/devices/corpus.yaml +84 -0
  33. package/livepilot/skills/livepilot-core/references/affordances/devices/drift.yaml +105 -0
  34. package/livepilot/skills/livepilot-core/references/affordances/devices/echo.yaml +108 -0
  35. package/livepilot/skills/livepilot-core/references/affordances/devices/eq-eight.yaml +95 -0
  36. package/livepilot/skills/livepilot-core/references/affordances/devices/glue-compressor.yaml +88 -0
  37. package/livepilot/skills/livepilot-core/references/affordances/devices/granulator-iii.yaml +104 -0
  38. package/livepilot/skills/livepilot-core/references/affordances/devices/hybrid-reverb.yaml +83 -0
  39. package/livepilot/skills/livepilot-core/references/affordances/devices/operator.yaml +98 -0
  40. package/livepilot/skills/livepilot-core/references/affordances/devices/ping-pong-delay.yaml +104 -0
  41. package/livepilot/skills/livepilot-core/references/affordances/devices/poli.yaml +98 -0
  42. package/livepilot/skills/livepilot-core/references/affordances/devices/saturator.yaml +98 -0
  43. package/livepilot/skills/livepilot-core/references/affordances/devices/shifter.yaml +77 -0
  44. package/livepilot/skills/livepilot-core/references/affordances/devices/simpler.yaml +113 -0
  45. package/livepilot/skills/livepilot-core/references/affordances/devices/utility.yaml +95 -0
  46. package/livepilot/skills/livepilot-core/references/affordances/devices/vinyl-distortion.yaml +92 -0
  47. package/livepilot/skills/livepilot-core/references/affordances/devices/wavetable.yaml +98 -0
  48. package/livepilot/skills/livepilot-core/references/artist-vocabularies.md +389 -0
  49. package/livepilot/skills/livepilot-core/references/automation-atlas.md +272 -0
  50. package/livepilot/skills/livepilot-core/references/concepts/_schema.md +158 -0
  51. package/livepilot/skills/livepilot-core/references/concepts/artists/akufen.yaml +116 -0
  52. package/livepilot/skills/livepilot-core/references/concepts/artists/aphex-twin.yaml +133 -0
  53. package/livepilot/skills/livepilot-core/references/concepts/artists/arca-sophie.yaml +131 -0
  54. package/livepilot/skills/livepilot-core/references/concepts/artists/autechre.yaml +130 -0
  55. package/livepilot/skills/livepilot-core/references/concepts/artists/basic-channel.yaml +140 -0
  56. package/livepilot/skills/livepilot-core/references/concepts/artists/basinski.yaml +126 -0
  57. package/livepilot/skills/livepilot-core/references/concepts/artists/boards-of-canada.yaml +124 -0
  58. package/livepilot/skills/livepilot-core/references/concepts/artists/burial.yaml +127 -0
  59. package/livepilot/skills/livepilot-core/references/concepts/artists/com-truise-tycho.yaml +121 -0
  60. package/livepilot/skills/livepilot-core/references/concepts/artists/daft-punk.yaml +117 -0
  61. package/livepilot/skills/livepilot-core/references/concepts/artists/dj-premier-rza.yaml +119 -0
  62. package/livepilot/skills/livepilot-core/references/concepts/artists/gas.yaml +134 -0
  63. package/livepilot/skills/livepilot-core/references/concepts/artists/hawtin.yaml +127 -0
  64. package/livepilot/skills/livepilot-core/references/concepts/artists/isolee-luomo.yaml +130 -0
  65. package/livepilot/skills/livepilot-core/references/concepts/artists/j-dilla.yaml +133 -0
  66. package/livepilot/skills/livepilot-core/references/concepts/artists/jeff-mills.yaml +120 -0
  67. package/livepilot/skills/livepilot-core/references/concepts/artists/johannsson-richter.yaml +132 -0
  68. package/livepilot/skills/livepilot-core/references/concepts/artists/madlib.yaml +124 -0
  69. package/livepilot/skills/livepilot-core/references/concepts/artists/moodymann-theo-parrish.yaml +121 -0
  70. package/livepilot/skills/livepilot-core/references/concepts/artists/oneohtrix-point-never.yaml +126 -0
  71. package/livepilot/skills/livepilot-core/references/concepts/artists/photek-source-direct.yaml +120 -0
  72. package/livepilot/skills/livepilot-core/references/concepts/artists/rashad-spinn-traxman.yaml +122 -0
  73. package/livepilot/skills/livepilot-core/references/concepts/artists/robert-henke.yaml +113 -0
  74. package/livepilot/skills/livepilot-core/references/concepts/artists/shackleton.yaml +124 -0
  75. package/livepilot/skills/livepilot-core/references/concepts/artists/skream-mala.yaml +119 -0
  76. package/livepilot/skills/livepilot-core/references/concepts/artists/stars-of-the-lid.yaml +119 -0
  77. package/livepilot/skills/livepilot-core/references/concepts/artists/tim-hecker.yaml +122 -0
  78. package/livepilot/skills/livepilot-core/references/concepts/artists/villalobos.yaml +135 -0
  79. package/livepilot/skills/livepilot-core/references/concepts/genres/ambient.yaml +137 -0
  80. package/livepilot/skills/livepilot-core/references/concepts/genres/boom_bap.yaml +124 -0
  81. package/livepilot/skills/livepilot-core/references/concepts/genres/deep-minimal.yaml +130 -0
  82. package/livepilot/skills/livepilot-core/references/concepts/genres/deep_house.yaml +130 -0
  83. package/livepilot/skills/livepilot-core/references/concepts/genres/detroit_techno.yaml +116 -0
  84. package/livepilot/skills/livepilot-core/references/concepts/genres/disco.yaml +123 -0
  85. package/livepilot/skills/livepilot-core/references/concepts/genres/downtempo.yaml +129 -0
  86. package/livepilot/skills/livepilot-core/references/concepts/genres/drone.yaml +133 -0
  87. package/livepilot/skills/livepilot-core/references/concepts/genres/drum-and-bass.yaml +119 -0
  88. package/livepilot/skills/livepilot-core/references/concepts/genres/dub-techno.yaml +132 -0
  89. package/livepilot/skills/livepilot-core/references/concepts/genres/dub.yaml +129 -0
  90. package/livepilot/skills/livepilot-core/references/concepts/genres/dubstep.yaml +120 -0
  91. package/livepilot/skills/livepilot-core/references/concepts/genres/experimental.yaml +136 -0
  92. package/livepilot/skills/livepilot-core/references/concepts/genres/footwork.yaml +119 -0
  93. package/livepilot/skills/livepilot-core/references/concepts/genres/hip-hop.yaml +132 -0
  94. package/livepilot/skills/livepilot-core/references/concepts/genres/house.yaml +126 -0
  95. package/livepilot/skills/livepilot-core/references/concepts/genres/hyperpop.yaml +128 -0
  96. package/livepilot/skills/livepilot-core/references/concepts/genres/idm.yaml +134 -0
  97. package/livepilot/skills/livepilot-core/references/concepts/genres/lo_fi.yaml +129 -0
  98. package/livepilot/skills/livepilot-core/references/concepts/genres/microhouse.yaml +138 -0
  99. package/livepilot/skills/livepilot-core/references/concepts/genres/minimal-techno.yaml +116 -0
  100. package/livepilot/skills/livepilot-core/references/concepts/genres/modern-classical.yaml +123 -0
  101. package/livepilot/skills/livepilot-core/references/concepts/genres/soul.yaml +125 -0
  102. package/livepilot/skills/livepilot-core/references/concepts/genres/synthwave.yaml +123 -0
  103. package/livepilot/skills/livepilot-core/references/concepts/genres/techno.yaml +123 -0
  104. package/livepilot/skills/livepilot-core/references/concepts/genres/trap.yaml +120 -0
  105. package/livepilot/skills/livepilot-core/references/concepts/genres/uk-garage.yaml +121 -0
  106. package/livepilot/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
  107. package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
  108. package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
  109. package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
  110. package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
  111. package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
  112. package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
  113. package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
  114. package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
  115. package/livepilot/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
  116. package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
  117. package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
  118. package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
  119. package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
  120. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
  121. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
  122. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
  123. package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
  124. package/livepilot/skills/livepilot-core/references/genre-vocabularies.md +382 -0
  125. package/livepilot/skills/livepilot-core/references/m4l-devices.md +352 -0
  126. package/livepilot/skills/livepilot-core/references/memory-guide.md +178 -0
  127. package/livepilot/skills/livepilot-core/references/midi-recipes.md +402 -0
  128. package/livepilot/skills/livepilot-core/references/mixing-patterns.md +578 -0
  129. package/livepilot/skills/livepilot-core/references/overview.md +300 -0
  130. package/livepilot/skills/livepilot-core/references/pack-knowledge.md +319 -0
  131. package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
  132. package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
  133. package/livepilot/skills/livepilot-core/references/sound-design.md +393 -0
  134. package/livepilot/skills/livepilot-corpus-builder/SKILL.md +379 -0
  135. package/livepilot/skills/livepilot-creative-director/SKILL.md +462 -0
  136. package/livepilot/skills/livepilot-creative-director/references/anti-repetition-rules.md +214 -0
  137. package/livepilot/skills/livepilot-creative-director/references/creative-brief-template.md +222 -0
  138. package/livepilot/skills/livepilot-creative-director/references/hybrid-compilation.md +185 -0
  139. package/livepilot/skills/livepilot-creative-director/references/move-family-diversity-rule.md +258 -0
  140. package/livepilot/skills/livepilot-creative-director/references/phase-6-execution.md +409 -0
  141. package/livepilot/skills/livepilot-creative-director/references/the-four-move-rule.md +192 -0
  142. package/livepilot/skills/livepilot-devices/SKILL.md +213 -0
  143. package/livepilot/skills/livepilot-devices/references/load_browser_item-uri-grammar.md +82 -0
  144. package/livepilot/skills/livepilot-evaluation/SKILL.md +195 -0
  145. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +176 -0
  146. package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
  147. package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
  148. package/livepilot/skills/livepilot-mix-engine/SKILL.md +144 -0
  149. package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
  150. package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
  151. package/livepilot/skills/livepilot-mixing/SKILL.md +164 -0
  152. package/livepilot/skills/livepilot-notes/SKILL.md +130 -0
  153. package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
  154. package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
  155. package/livepilot/skills/livepilot-release/SKILL.md +151 -0
  156. package/livepilot/skills/livepilot-sample-engine/SKILL.md +117 -0
  157. package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
  158. package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
  159. package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
  160. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +247 -0
  161. package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
  162. package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
  163. package/livepilot/skills/livepilot-wonder/SKILL.md +143 -0
  164. package/m4l_device/LivePilot_Analyzer.amxd +0 -0
  165. package/m4l_device/LivePilot_Elektron.amxd +0 -0
  166. package/m4l_device/LivePilot_Elektron.maxpat +758 -0
  167. package/m4l_device/livepilot_bridge.js +1 -1
  168. package/m4l_device/livepilot_elektron_bridge.js +82 -0
  169. package/mcp_server/__init__.py +1 -1
  170. package/mcp_server/composer/develop/apply.py +1 -1
  171. package/mcp_server/composer/full/apply.py +32 -6
  172. package/mcp_server/composer/full/brief_builder.py +9 -0
  173. package/mcp_server/evaluation/feature_extractors.py +152 -8
  174. package/mcp_server/m4l_bridge.py +5 -0
  175. package/mcp_server/mix_engine/state_builder.py +19 -2
  176. package/mcp_server/mix_engine/tools.py +22 -0
  177. package/mcp_server/runtime/execution_router.py +6 -0
  178. package/mcp_server/runtime/mcp_dispatch.py +18 -0
  179. package/mcp_server/runtime/remote_commands.py +2 -0
  180. package/mcp_server/server.py +11 -7
  181. package/mcp_server/sound_design/tools.py +33 -0
  182. package/mcp_server/tools/_agent_os_engine/evaluation.py +7 -44
  183. package/mcp_server/tools/_agent_os_engine/models.py +2 -1
  184. package/mcp_server/tools/_conductor.py +5 -2
  185. package/mcp_server/tools/_evaluation_contracts.py +1 -1
  186. package/mcp_server/tools/_snapshot_normalizer.py +32 -3
  187. package/package.json +20 -5
  188. package/remote_script/LivePilot/__init__.py +1 -1
  189. package/remote_script/LivePilot/server.py +63 -2
  190. package/requirements.txt +3 -3
  191. package/server.json +3 -3
@@ -0,0 +1,87 @@
1
+ # Sample Critics — Scoring Reference
2
+
3
+ ## Key Fit Critic
4
+
5
+ Uses circle-of-fifths distance between sample key and song key.
6
+
7
+ | Distance | Score | Relationship | Action |
8
+ |----------|-------|-------------|--------|
9
+ | 0 fifths | 1.0 | Same key | Load directly |
10
+ | 1 fifth | 0.85 | Relative major/minor, dominant/subdominant | Layer with care |
11
+ | 2 fifths | 0.7 | Closely related | Works for most intents |
12
+ | 3 fifths | 0.55 | Moderately distant | Transpose or use as texture |
13
+ | 4 fifths | 0.4 | Distant | Heavy filtering needed |
14
+ | 5+ fifths | 0.25-0.3 | Chromatic clash | Intentional tension only |
15
+ | Unknown | 0.0 | Key not detected | Verify by ear |
16
+
17
+ **Weight adjustment:** For "texture" intent, key_fit weight drops 50% (pitch matters less).
18
+
19
+ ## Tempo Fit Critic
20
+
21
+ Compares sample BPM against session tempo including half/double time relationships.
22
+
23
+ | Deviation | Score | Action |
24
+ |-----------|-------|--------|
25
+ | <1% | 1.0 | Exact match, no warping |
26
+ | <2% | 0.95 | Near-exact, minimal warp |
27
+ | <5% | 0.8 | Light warp, quality preserved |
28
+ | <10% | 0.6 | Moderate warp, choose mode carefully |
29
+ | <15% | 0.4 | Significant — use Texture mode for ambient |
30
+ | >15% | 0.2 | Extreme — texture use only |
31
+ | Half time | 0.9 | Set warp to half-time |
32
+ | Double time | 0.9 | Set warp to double-time |
33
+ | Unknown | 0.0 | Estimate from onsets or verify |
34
+
35
+ ## Frequency Fit Critic
36
+
37
+ Requires M4L bridge spectral data. Without it, returns neutral 0.5.
38
+
39
+ | Situation | Score | Action |
40
+ |-----------|-------|--------|
41
+ | Fills empty frequency gap | 1.0 | Perfect complement |
42
+ | Partial overlap, manageable | 0.7 | Suggest EQ carving |
43
+ | Heavy masking | 0.3 | Aggressive filtering or texture use |
44
+ | Full spectrum into dense mix | 0.1 | Transformation source only |
45
+
46
+ ## Role Fit Critic
47
+
48
+ Cross-references material_type against existing track names/roles.
49
+
50
+ | Situation | Score | Action |
51
+ |-----------|-------|--------|
52
+ | Fills missing role | 1.0 | "No percussion texture — this fills the gap" |
53
+ | Complements existing | 0.7 | "Adds variety to palette" |
54
+ | Redundant | 0.3 | "Already 3 synth layers — use as texture" |
55
+
56
+ ## Vibe Fit Critic
57
+
58
+ Uses TasteGraph when evidence exists (>0 entries). Otherwise neutral 0.5.
59
+
60
+ Compares brightness, density, complexity of sample against user's taste profile.
61
+
62
+ ## Intent Fit Critic
63
+
64
+ Compatibility matrix — how well the material serves the stated intent:
65
+
66
+ | Material \ Intent | rhythm | texture | layer | melody | vocal | atmosphere | transform |
67
+ |-------------------|--------|---------|-------|--------|-------|------------|-----------|
68
+ | vocal | 0.6 | 0.6 | 0.8 | 0.9 | 1.0 | 0.5 | 0.9 |
69
+ | drum_loop | 1.0 | 0.5 | 0.6 | 0.2 | — | 0.3 | 0.9 |
70
+ | instrument_loop | 0.5 | 0.6 | 1.0 | 1.0 | 0.3 | 0.5 | 0.9 |
71
+ | one_shot | 0.9 | 0.4 | 0.3 | 0.5 | — | 0.3 | 0.8 |
72
+ | texture | 0.2 | 1.0 | 0.7 | 0.3 | 0.2 | 1.0 | 0.8 |
73
+ | foley | 0.5 | 0.8 | 0.4 | — | — | 0.9 | 0.8 |
74
+ | fx | 0.3 | 0.7 | 0.3 | — | — | 0.8 | 0.7 |
75
+
76
+ ## Composite Score
77
+
78
+ Default weights:
79
+ ```
80
+ overall = key_fit(0.20) + tempo_fit(0.20) + frequency_fit(0.20)
81
+ + role_fit(0.15) + vibe_fit(0.10) + intent_fit(0.15)
82
+ ```
83
+
84
+ Weights shift by intent:
85
+ - **texture/atmosphere:** key_fit 0.10, tempo_fit 0.10, frequency_fit 0.25
86
+ - **rhythm:** tempo_fit 0.25, key_fit 0.10
87
+ - **melody:** key_fit 0.30, intent_fit 0.20
@@ -0,0 +1,51 @@
1
+ # Surgeon vs Alchemist — The Dual Philosophy
2
+
3
+ ## When to be a Surgeon
4
+
5
+ The sample should serve the song without drawing attention to itself.
6
+
7
+ - **Building a clean layer** — matching key, tempo, frequency
8
+ - **Adding percussion variety** — break layering under existing drums
9
+ - **Key-matched melodic layers** — transpose and blend
10
+ - **Chord stab extraction** — isolate and retrigger cleanly
11
+ - **User says:** "blend", "layer", "match", "fit", "complement"
12
+
13
+ **Surgeon priorities:** Key accuracy > tempo precision > frequency carving > volume balance
14
+
15
+ ## When to be an Alchemist
16
+
17
+ The sample is raw material for transformation. The result should surprise.
18
+
19
+ - **Stuck on a boring section** — inject chaos via destruction
20
+ - **Need organic texture** — reverse, stretch, scatter
21
+ - **Vocal as instrument** — chop syllables into rhythm
22
+ - **One-sample challenge** — constraint breeds creativity
23
+ - **User says:** "flip", "destroy", "mangle", "transform", "surprise me"
24
+
25
+ **Alchemist priorities:** Novelty > texture > emotion > originality
26
+
27
+ ## Auto Mode Decision Tree
28
+
29
+ ```
30
+ User said "blend/layer/match/fit"? -> Surgeon
31
+ User said "flip/destroy/mangle/weird"? -> Alchemist
32
+ Wonder Mode (stuck rescue)? -> Alchemist
33
+ Intent is "texture" or "atmosphere"? -> Alchemist
34
+ Intent is "layer" or "melody"? -> Surgeon
35
+ Intent is "rhythm"? -> Both available, lean Surgeon for drums, Alchemist for vocals
36
+ Intent is "transform" or "challenge"? -> Alchemist
37
+ No clear signal? -> Present both, let user choose
38
+ ```
39
+
40
+ ## The Masters
41
+
42
+ | Producer | Philosophy | Signature |
43
+ |----------|-----------|-----------|
44
+ | J Dilla | Both | Surgical chop points, alchemical timing/swing |
45
+ | Burial | Alchemist | Ghostly vocal fragments, vinyl crackle as instrument |
46
+ | Amon Tobin | Alchemist | 80+ samples per track, serial destruction |
47
+ | Four Tet | Alchemist | Found-sound countermelody, collage composition |
48
+ | DJ Premier | Surgeon | Perfect stab isolation, rhythmic precision |
49
+ | Madlib | Alchemist | Blind crate digging, cross-genre flipping |
50
+ | RZA | Both | Cinematic soul sampling with dialogue and detuning |
51
+ | Bon Iver | Surgeon | Pitch-shifted vocal stacks, harmonic layering |
@@ -0,0 +1,131 @@
1
+ # Sample Technique Catalog — 29 Recipes
2
+
3
+ ## Category 1: Rhythmic Sampling
4
+
5
+ ### slice_and_sequence (Surgeon)
6
+ Classic MPC workflow: load loop, slice on transients, sequence with MIDI.
7
+ **Material:** drum_loop, full_mix | **Steps:** load -> slice -> get slices -> create clip -> add notes
8
+
9
+ ### vocal_chop_rhythm (Alchemist)
10
+ Chop vocal into syllable-length slices, trigger as staccato rhythm. Burial-inspired.
11
+ **Material:** vocal | **Steps:** load -> slice by region -> MIDI staccato -> Auto Filter
12
+
13
+ ### micro_chop (Alchemist)
14
+ 1/32 slices, varied velocity, slight timing offsets. J Dilla micro-timing.
15
+ **Material:** any loop | **Steps:** load -> manual slice -> dense 1/32 MIDI
16
+
17
+ ### stab_isolation (Surgeon)
18
+ Isolate single chord stab, crop, retrigger rhythmically. DJ Premier style.
19
+ **Material:** full_mix, instrument_loop | **Steps:** load -> classic mode -> crop -> MIDI
20
+
21
+ ### euclidean_slice_trigger (Alchemist)
22
+ Map Simpler slices to Euclidean rhythm for polyrhythmic texture.
23
+ **Material:** drum_loop, vocal, instrument_loop | **Steps:** load -> slice -> Euclidean pattern
24
+
25
+ ## Category 2: Textural Transformation
26
+
27
+ ### extreme_stretch (Alchemist)
28
+ Paulstretch-style: Texture warp at 10-50x, reverb wash. Stars of the Lid territory.
29
+ **Material:** any | **Steps:** load -> warp 64 beats -> Reverb 60-80% wet
30
+
31
+ ### drum_to_pad (Alchemist)
32
+ Reverse + extreme stretch + reverb = drum hit becomes ambient pad.
33
+ **Material:** drum_loop, one_shot | **Steps:** load -> reverse -> stretch -> Reverb
34
+
35
+ ### reverse_layer (Alchemist)
36
+ Reversed sample as pre-echo swell or ghostly texture.
37
+ **Material:** vocal, instrument_loop, one_shot | **Steps:** load -> reverse -> Delay
38
+
39
+ ### granular_scatter (Alchemist)
40
+ Grain Delay as granular engine — scatter grains for cloud textures. Amon Tobin.
41
+ **Material:** vocal, instrument_loop, texture | **Steps:** load -> Grain Delay -> Reverb
42
+
43
+ ### spectral_freeze (Alchemist)
44
+ Crop to tiny region (50-200ms), extreme stretch = spectral freeze drone.
45
+ **Material:** vocal, instrument_loop, full_mix | **Steps:** load -> crop -> stretch 64 beats
46
+
47
+ ### tail_harvest (Alchemist)
48
+ Resample only the reverb/delay tail as independent texture.
49
+ **Material:** any | **Steps:** load -> Reverb 100% wet -> level for subtle layer
50
+
51
+ ## Category 3: Melodic/Harmonic
52
+
53
+ ### key_matched_layer (Surgeon)
54
+ Transpose to song key, EQ carve, blend behind existing elements.
55
+ **Material:** instrument_loop | **Steps:** load -> transpose -> EQ -> volume -6 to -10dB
56
+
57
+ ### vocal_harmony_stack (Surgeon)
58
+ Pitch-shifted vocal layers — Bon Iver Prismizer approach.
59
+ **Material:** vocal | **Steps:** load -> duplicate -> transpose +3/+5/+7 -> blend
60
+
61
+ ### counterpoint_from_chops (Alchemist)
62
+ Create countermelody from rearranged melodic fragments. Four Tet.
63
+ **Material:** instrument_loop, vocal, full_mix | **Steps:** load -> slice by beat -> program melody
64
+
65
+ ### chord_stab_extraction (Surgeon)
66
+ Isolate chord from full mix, crop, retrigger. Classic house/disco.
67
+ **Material:** full_mix, instrument_loop | **Steps:** load -> slice -> crop -> rhythmic pattern
68
+
69
+ ## Category 4: Drum Enhancement
70
+
71
+ ### break_layering (Surgeon)
72
+ Layer drum break under programmed drums. High-pass to avoid kick clash.
73
+ **Material:** drum_loop | **Steps:** load -> warp 16 beats -> EQ HP 200-400Hz -> volume -10 to -15dB
74
+
75
+ ### ghost_note_texture (Alchemist)
76
+ Heavy filter + low volume = barely audible ghost-note layer.
77
+ **Material:** drum_loop | **Steps:** load -> Auto Filter BP 1-4kHz -> volume -18 to -24dB
78
+
79
+ ### transient_replacement (Surgeon)
80
+ Layer one-shot transient over existing drums for punch.
81
+ **Material:** one_shot | **Steps:** load -> classic mode -> MIDI on kick/snare hits
82
+
83
+ ### shuffle_extract (Alchemist)
84
+ Extract groove timing from loop via slice positions, apply to MIDI.
85
+ **Material:** drum_loop | **Steps:** load -> slice by transient -> read positions
86
+
87
+ ## Category 5: Vocal Processing
88
+
89
+ ### syllable_instrument (Alchemist)
90
+ Each syllable = playable note. Vocal becomes a melodic instrument.
91
+ **Material:** vocal | **Steps:** load -> slice by region -> program melody across slices
92
+
93
+ ### formant_shift_character (Alchemist)
94
+ Shift formants for alien/robotic character. Transpose +/-12st.
95
+ **Material:** vocal | **Steps:** load -> transpose -> Corpus for resonant body
96
+
97
+ ### vocal_freeze_drone (Alchemist)
98
+ Sustain one vowel as ambient pad. Crop tiny region, extreme stretch.
99
+ **Material:** vocal | **Steps:** load -> crop 100-300ms -> stretch 64 beats -> Chorus -> Reverb
100
+
101
+ ### phone_recording_texture (Alchemist)
102
+ Burial signature: pitch down, lo-pass, ghost-level volume.
103
+ **Material:** vocal, foley | **Steps:** load -> pitch -5 to -12 -> LP 800Hz -> volume -20 to -30dB
104
+
105
+ ## Category 6: Resampling Chains
106
+
107
+ ### serial_resample (Alchemist)
108
+ Multi-pass destruction: Saturator + Grain Delay + Reverb, freeze, flatten, repeat.
109
+ **Material:** any | **Steps:** load -> Saturator -> Grain Delay -> Reverb -> freeze -> flatten
110
+
111
+ ### parallel_resample (Alchemist)
112
+ Duplicate, process one copy destructively, blend wet/dry.
113
+ **Material:** any | **Steps:** load -> duplicate -> process duplicate -> blend -6 to -12dB
114
+
115
+ ### freeze_flatten_rechop (Alchemist)
116
+ Freeze processed material, flatten to audio, re-slice the result. Recursive.
117
+ **Material:** any | **Steps:** freeze -> flatten -> re-load into Simpler -> slice again
118
+
119
+ ## Category 7: Creative Constraints
120
+
121
+ ### one_sample_challenge (Alchemist)
122
+ Build entire beat from one sample: kick, snare, hat, bass, pad all from slices.
123
+ **Material:** any | **Steps:** load -> slice -> program full beat across slice pitches
124
+
125
+ ### found_sound_only (Alchemist)
126
+ Non-musical field recordings as sole source material. Musique concrete.
127
+ **Material:** foley | **Steps:** load -> slice -> EQ to isolate musical frequencies
128
+
129
+ ### reverse_engineering (Both)
130
+ Recreate a reference track's texture by sampling and transforming similar elements.
131
+ **Material:** full_mix | **Steps:** load -> slice by beat -> analyze structure
@@ -0,0 +1,247 @@
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
+ ## Analyzer Character Is the Main Signal
11
+
12
+ For broad quality requests, this skill is the primary route. "More punch", "warmer", "darker", "brighter", "less flat", "more alive", "more texture", and "more character" should become source/device/parameter decisions before they become volume moves.
13
+
14
+ When the analyzer is available, read character, not just level:
15
+
16
+ - `get_master_spectrum` for the 9-band contour
17
+ - `get_spectral_shape` for centroid, flatness, crest, rolloff, and brightness/noise shape
18
+ - `get_mel_spectrum` when EQ or source choice needs perceptual detail
19
+ - `get_onsets` for transient/envelope decisions
20
+ - `get_novelty` for movement/staticness decisions
21
+ - `get_momentary_loudness` only for safety/headroom/loudness context
22
+
23
+ Translate those measurements into musical moves:
24
+
25
+ - Bright/harsh character → filter contour, softer source, de-harshing, saturation tone; do not merely lower volume.
26
+ - Dark/dull character → oscillator/filter opening, excitation, air-band source, tasteful saturation; do not merely raise volume.
27
+ - Static/low novelty → modulation, envelope drift, LFO, generative device, granular/vector source.
28
+ - Weak punch → envelope/transient shaping, source layering, attack/release work; volume push is last.
29
+ - Flat/noisy spectrum → source substitution, subtractive filtering, simpler spectral role.
30
+ - Weak weight → instrument/register/source decision before master or track gain.
31
+
32
+ ## Atlas-first reflex (v1.23.x+, MANDATORY before any creative move)
33
+
34
+ Before producing ANY creative response, query the user's atlas overlays. The corpus contains 337 entries across 3 namespaces, plus 3,917 parameter-level JSON sidecars — far richer than anything inferable from training data alone.
35
+
36
+ **Query order:**
37
+
38
+ 1. **`extension_atlas_search(namespace="packs", query=<intent>)`** — pack identity, signature workflows, hidden gems, anti-patterns, notable presets with macro deep-data, demo projects
39
+ 2. **`extension_atlas_search(namespace="packs", query=<intent>, entity_type="cross_pack_workflow")`** — multi-pack signature recipes (15 entries: dub-techno spectral drone bed, BoC decayed pad, Mica Levi orchestral dread, etc.)
40
+ 3. **`extension_atlas_search(namespace="m4l-devices", query=<sonic descriptor>)`** — M4L instrument/effect/midi-effect device catalog (155 entries)
41
+ 4. **`atlas_search(...)`** — bundled atlas (Core Library, fallback)
42
+
43
+ **Multi-grain traversal:**
44
+
45
+ When an aesthetic-level query lands a pack-level result, AUTO-DRILL: pack → its `notable_presets` → those preset macro states → load via `load_browser_item`. Don't stop at "I found a relevant pack" — drill to the actual preset/parameter level the user can immediately use.
46
+
47
+ ```python
48
+ # Example — agent received "design a BoC pad — sublime, decayed, harmonic warmth"
49
+ hit = extension_atlas_search(namespace="packs", query="BoC sublime decayed pad harmonic warmth")
50
+ # → boc_decayed_pad cross-pack-workflow + inspired_by_nature pack
51
+
52
+ workflow = extension_atlas_get("packs", "boc_decayed_pad")
53
+ # → reveals signal flow + which notable_presets to start from
54
+
55
+ drone_lab = extension_atlas_get("packs", "drone_lab")
56
+ # → notable_presets reveals Razor Wire Drone with macros Filter Control=108, Movement=53...
57
+
58
+ # Now propose the patch with concrete preset names + macro starting values, not vague descriptions
59
+ ```
60
+
61
+ **When the user mentions a producer or pack by name:**
62
+
63
+ - "BoC sublime pad" → atlas hit: `boc_decayed_pad` cross-pack-workflow + `inspired_by_nature` pack
64
+ - "Henke spectral chain" → atlas hit: `pitchloop89` + `granulator_iii` + 2 Henke cross-pack workflows
65
+ - "Mica Levi orchestral dread" → atlas hit: `mica_levi_orchestral_dread` workflow + the orchestral suite packs
66
+ - "Drone Lab" → atlas hit: `drone_lab` pack + 4 Drone Lab demo_project entries
67
+
68
+ The atlas knows the user's installed library at parameter depth. **Producer-anchor queries land specific moves, not vague descriptions.**
69
+
70
+ **Anti-pattern surfacing:**
71
+
72
+ Every pack entry has an `anti_patterns` body field listing "don't reach for this when X." Surface the relevant anti-pattern when proposing a move so the user knows the move's domain. (E.g. "Drone Lab is sustain-only — don't use for percussive content.")
73
+
74
+ **For deliberately rule-breaking creative requests** ("eclectic", "ignore the limits", "weird combo", "mix incompatible aesthetics"): enter **Eclectic Mode** inside this sound-design loop. Anti-patterns become prompt tension rather than guardrails: keep hard safety and protected-user constraints, then pair one normally-avoided source or processor with one identity-preserving anchor. Do not route to a private or missing skill.
75
+
76
+ ## The Sound Design Critic Loop
77
+
78
+ ### Step 1 — Build Patch Model
79
+
80
+ 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`.
81
+
82
+ Read the response carefully:
83
+ - `blocks`: ordered list of processing blocks with types and parameter names
84
+ - `controllable_params`: parameters you can modify via `set_device_parameter`
85
+ - `opaque_blocks`: third-party plugins where parameters may not map cleanly
86
+ - `modulation_sources`: detected LFOs, envelopes, and macro mappings
87
+ - `signal_flow`: how blocks connect (serial, parallel, or rack chains)
88
+
89
+ See `references/patch-model.md` for the full PatchModel structure and native device block map.
90
+
91
+ ### Step 2 — Analyze
92
+
93
+ 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`.
94
+
95
+ Five critics run during analysis. See `references/sound-design-critics.md` for thresholds:
96
+
97
+ - **static_timbre** — sound does not evolve over time, no movement
98
+ - **no_modulation_sources** — no LFOs, envelopes, or automation detected
99
+ - **modulation_flatness** — modulation exists but ranges are too narrow to hear
100
+ - **missing_filter** — raw oscillator output with no spectral shaping
101
+ - **spectral_imbalance** — too much energy in one frequency region, or gaps
102
+
103
+ ### Step 3 — Plan
104
+
105
+ Pick the highest-severity issue. Call `plan_sound_design_move(track_index)` with the issue. The planner returns a single intervention:
106
+
107
+ - `move_type`: one of the move vocabulary entries
108
+ - `target_device`: device index on the track
109
+ - `target_parameter`: parameter name or index
110
+ - `target_value`: the new value
111
+ - `rationale`: why this move addresses the issue
112
+
113
+ Move vocabulary:
114
+ - **modulation_injection** — add or increase LFO/envelope depth on a parameter
115
+ - **filter_shaping** — adjust cutoff, resonance, or filter type
116
+ - **parameter_automation** — create clip automation for time-varying timbral change
117
+ - **oscillator_tuning** — adjust pitch, detune, waveform, or unison settings
118
+
119
+ ### Step 4 — Capture Before
120
+
121
+ 1. Call `get_device_parameters(track_index, device_index)` — save current parameter state
122
+ 2. Call `get_master_spectrum` plus the relevant character streams above — save spectral snapshot (if analyzer available)
123
+
124
+ ### Step 5 — Execute
125
+
126
+ Apply the planned move using the appropriate tool:
127
+
128
+ - `set_device_parameter` for direct parameter changes (filter cutoff, LFO rate, oscillator shape)
129
+ - `toggle_device` for enabling/disabling processing blocks
130
+ - `batch_set_parameters` when the move requires coordinated changes (e.g., LFO depth + rate together)
131
+ - `set_clip_automation` for parameter automation moves
132
+ - `find_and_load_device` when the fix requires adding a new device (e.g., adding an Auto Filter)
133
+
134
+ Execute one move at a time. Verify before continuing.
135
+
136
+ ### Step 6 — Capture After
137
+
138
+ Repeat the same measurements:
139
+
140
+ 1. Call `get_device_parameters(track_index, device_index)` — confirm the change took effect
141
+ 2. Call `get_master_spectrum` plus the same character streams used before — save post-change spectral snapshot
142
+
143
+ ### Step 7 — Evaluate
144
+
145
+ Call `evaluate_move(goal_vector, before_snapshot, after_snapshot)` where `goal_vector` is the compiled goal from Step 1 and snapshots contain `{spectrum: {...}, rms: float, peak: float}`. Read:
146
+
147
+ - `keep_change` (bool): whether the change improved the sound
148
+ - `score` (0.0-1.0): quality improvement magnitude
149
+ - `timbral_delta`: what changed spectrally
150
+ - `explanation`: human-readable summary
151
+
152
+ ### Step 8 — Keep or Undo
153
+
154
+ If `keep_change` is `false`, call `undo()`. Explain what was tried and why it did not improve the sound.
155
+
156
+ If `keep_change` is `true`, report the improvement. If score > 0.7, consider calling `memory_learn(name="...", type="device_chain", qualities={"summary": "..."}, payload={...})` to save the technique.
157
+
158
+ ### Step 9 — Repeat
159
+
160
+ Return to Step 2 only when the user asked for a deep refinement pass. In normal mode, stop after one meaningful character-improving move and summarize what changed plus the next optional direction. Avoid long loops of small parameter nudges.
161
+
162
+ ## Working with Opaque Plugins
163
+
164
+ Third-party AU/VST plugins may report as `opaque` in the PatchModel:
165
+
166
+ 1. Check `get_plugin_parameters(track_index, device_index)` — some plugins expose parameters through the host
167
+ 2. If `parameter_count <= 1`, the plugin is dead or unresponsive. Call `delete_device` and suggest a native alternative
168
+ 3. If parameters are available but unnamed (Parameter 1, Parameter 2...), try `map_plugin_parameter` to identify them by ear
169
+ 4. Report opaque status to the user — sound design critics cannot fully analyze what they cannot inspect
170
+
171
+ ## Quick Sound Design Checks
172
+
173
+ - **"What's wrong with this sound?"** — Call `get_sound_design_issues(track_index)` for a diagnostic without executing fixes
174
+ - **"Show me the patch"** — Call `get_patch_model(track_index)` then `walk_device_tree(track_index)` for full device chain visibility
175
+ - **"What can I automate?"** — Read the `controllable_params` list from the PatchModel response
176
+
177
+ ## Native Device Strengths
178
+
179
+ When adding processing blocks, prefer native Ableton devices for controllability:
180
+
181
+ - **Wavetable** — complex oscillator section with built-in modulation matrix
182
+ - **Operator** — FM synthesis with per-operator envelopes and LFO
183
+ - **Analog** — subtractive with two filters and two LFOs
184
+ - **Auto Filter** — standalone filter with envelope follower and LFO
185
+ - **Corpus** — resonant body modeling for physical character
186
+ - **Erosion** — high-frequency noise and distortion artifacts
187
+ - **Saturator** — waveshaping with multiple curve types
188
+
189
+ Always `search_browser` before loading — never guess device names.
190
+
191
+ ## M4L Instruments in the Library — When the Standard Synths Are the Wrong Aesthetic
192
+
193
+ Wavetable / Operator / Analog cover most subtractive and FM work, but several installed packs ship M4L instruments that produce sounds those three architecturally cannot. Reach for them when the standard list is the wrong starting point:
194
+
195
+ - **Granulator III** (Live Suite + Max for Live) — granular synthesis as a first-class instrument. Loop / Cloud / Classic modes, MPE per-note grain control, built-in audio capture. Use when the source needs to *be* a sample but evolve as a sustained voice.
196
+ - **Harmonic Drone Generator** (Drone Lab pack) — 8-voice M4L drone synth by Expert Math. Just intonation, Pythagorean, Pelog, equal temperament. Use when the patch is a sustained tonal bed and standard equal-tempered subtractive sounds wrong (microtonal beating is the point).
197
+ - **Bouncy Notes** (Inspired by Nature, Dillon Bastan) — gravity-based MIDI sequencer. Drop a ball, it bounces on a piano roll producing asymmetric never-repeating note cascades. Use as a generative source instead of writing notes by hand.
198
+ - **Tree Tone** (Inspired by Nature) — fractal-plant-growth resonator. Each branch is a tunable resonator (frequency / decay / amplitude). Use when you want resonance/body that evolves under itself, instead of static Corpus.
199
+ - **Vector FM / Vector Grain / Vector Map** (Inspired by Nature) — particle-physics modulation systems. Vector Map can route one particle to multiple parameters at once — useful when the patch needs *coupled* modulation that LFOs cannot produce.
200
+ - **PitchLoop89** (Live Suite) — Henke pitch-shift delay (Publison DHM 89 emulation). Use as the spatial/pitched-echo block on any sustained voice when standard delay + Auto Pan is too rigid.
201
+
202
+ These do not replace the modulation_injection / filter_shaping / parameter_automation move vocabulary. They change what "the source" can be — which is upstream of the critic loop.
203
+
204
+ ## Deep Sound Design Reference
205
+
206
+ Consult `references/sound-design-deep.md` for advanced techniques when working on creative requests. Key principles:
207
+
208
+ ### Making Sounds Breathe
209
+ Every static sound can become alive with modulation below conscious perception:
210
+ - **Filter breathing:** LFO at 0.1-0.5 Hz on filter cutoff, 5-15% depth
211
+ - **Oscillator drift:** ±1-3 cent detune with very slow LFO (0.05-0.2 Hz)
212
+ - **Amplitude micro-variation:** Perlin/brownian noise on volume, ±1-3 dB
213
+ - **Rule:** If the listener can hear the modulation, it's too much. The best modulation is felt, not heard.
214
+
215
+ ### Space as Composition
216
+ Reverb and delay are not decorations — in dub/minimal they ARE the composition:
217
+ - **Dub chord:** Short stab → long delay (70-80% feedback) + filter on the delay return
218
+ - **Delay throws:** Momentary send spikes (0→70% for half a beat) — the echo IS the event
219
+ - **Sidechain reverb:** Dry drums trigger sidechain compression on reverb returns — the room pulses
220
+ - **Feedback modulation:** Delay feedback at 75-85% + modulate delay time ±5-10% for warped echoes
221
+
222
+ ### Creative Sidechain (Beyond Pump)
223
+ Sidechain compression is a modulation source, not just a mix tool:
224
+ - **Sidechain filter:** Envelope follower from kick modulates pad filter cutoff — pad brightens between kicks
225
+ - **Ghost sidechain:** Muted kick as sidechain source for textures — phantom groove on non-rhythmic elements
226
+ - **Multiband sidechain:** Only duck sub frequencies from pad — shimmer stays, sub clears for kick
227
+
228
+ ### Effects as Instruments
229
+ - **Self-oscillating filter:** Push resonance until it rings, play notes by changing cutoff
230
+ - **Feedback loops:** Route output back to input through effects + compressor to control
231
+ - **Convolution as synthesis:** Load non-IR files (speech, drum break) into convolution reverb — imprints spectral character
232
+ - **Granular reverb:** Very short reverb (0.1-0.3s) high diffusion on percussion — smears transient into tonal cloud
233
+
234
+ ### The Frequency Dance
235
+ At any moment, each frequency band should have one primary element. When one opens up, another pulls back:
236
+ - Chord filter opens into highs → pull hi-hat back
237
+ - Bass drops → kick shortens
238
+ - Reverb tail fills → dry elements duck
239
+ This is mix engineering as composition.
240
+
241
+ ### When to Apply These
242
+ - User says "make it breathe" or "it sounds static" → micro-modulation
243
+ - User says "more space" or "deeper" → dub techniques (delay throws, reverb composition)
244
+ - User says "more groove" or "make it pump" → creative sidechain
245
+ - User says "more texture" or "more complex" → textural layering
246
+ - User says "surprise me" or "WTF moment" → brief textural disruption (2-8 beats max)
247
+ - User says "warmer" or "more analog" → oscillator drift + subtle saturation + filter breathing
@@ -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