livepilot 1.9.24 → 1.10.1

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 (185) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/AGENTS.md +3 -3
  3. package/CHANGELOG.md +223 -0
  4. package/CONTRIBUTING.md +2 -2
  5. package/LICENSE +62 -21
  6. package/README.md +291 -276
  7. package/bin/livepilot.js +87 -0
  8. package/installer/codex.js +147 -0
  9. package/livepilot/.Codex-plugin/plugin.json +2 -2
  10. package/livepilot/.claude-plugin/plugin.json +2 -2
  11. package/livepilot/skills/livepilot-arrangement/SKILL.md +18 -1
  12. package/livepilot/skills/livepilot-core/SKILL.md +22 -5
  13. package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
  14. package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
  15. package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
  16. package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
  17. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
  18. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
  19. package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
  20. package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
  21. package/livepilot/skills/livepilot-core/references/overview.md +13 -9
  22. package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
  23. package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
  24. package/livepilot/skills/livepilot-devices/SKILL.md +39 -4
  25. package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
  26. package/livepilot/skills/livepilot-release/SKILL.md +23 -19
  27. package/livepilot/skills/livepilot-sample-engine/SKILL.md +105 -0
  28. package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
  29. package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
  30. package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
  31. package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +45 -0
  32. package/livepilot/skills/livepilot-wonder/SKILL.md +17 -0
  33. package/livepilot.mcpb +0 -0
  34. package/m4l_device/livepilot_bridge.js +1 -1
  35. package/manifest.json +4 -4
  36. package/mcp_server/__init__.py +1 -1
  37. package/mcp_server/atlas/__init__.py +357 -0
  38. package/mcp_server/atlas/device_atlas.json +44067 -0
  39. package/mcp_server/atlas/enrichments/__init__.py +111 -0
  40. package/mcp_server/atlas/enrichments/audio_effects/auto_filter.yaml +162 -0
  41. package/mcp_server/atlas/enrichments/audio_effects/beat_repeat.yaml +183 -0
  42. package/mcp_server/atlas/enrichments/audio_effects/channel_eq.yaml +126 -0
  43. package/mcp_server/atlas/enrichments/audio_effects/chorus_ensemble.yaml +149 -0
  44. package/mcp_server/atlas/enrichments/audio_effects/color_limiter.yaml +109 -0
  45. package/mcp_server/atlas/enrichments/audio_effects/compressor.yaml +159 -0
  46. package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb.yaml +143 -0
  47. package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb_pro.yaml +178 -0
  48. package/mcp_server/atlas/enrichments/audio_effects/delay.yaml +151 -0
  49. package/mcp_server/atlas/enrichments/audio_effects/drum_buss.yaml +142 -0
  50. package/mcp_server/atlas/enrichments/audio_effects/dynamic_tube.yaml +147 -0
  51. package/mcp_server/atlas/enrichments/audio_effects/echo.yaml +167 -0
  52. package/mcp_server/atlas/enrichments/audio_effects/eq_eight.yaml +148 -0
  53. package/mcp_server/atlas/enrichments/audio_effects/eq_three.yaml +121 -0
  54. package/mcp_server/atlas/enrichments/audio_effects/erosion.yaml +103 -0
  55. package/mcp_server/atlas/enrichments/audio_effects/filter_delay.yaml +173 -0
  56. package/mcp_server/atlas/enrichments/audio_effects/gate.yaml +130 -0
  57. package/mcp_server/atlas/enrichments/audio_effects/gated_delay.yaml +133 -0
  58. package/mcp_server/atlas/enrichments/audio_effects/glue_compressor.yaml +142 -0
  59. package/mcp_server/atlas/enrichments/audio_effects/grain_delay.yaml +141 -0
  60. package/mcp_server/atlas/enrichments/audio_effects/hybrid_reverb.yaml +160 -0
  61. package/mcp_server/atlas/enrichments/audio_effects/limiter.yaml +97 -0
  62. package/mcp_server/atlas/enrichments/audio_effects/multiband_dynamics.yaml +174 -0
  63. package/mcp_server/atlas/enrichments/audio_effects/overdrive.yaml +119 -0
  64. package/mcp_server/atlas/enrichments/audio_effects/pedal.yaml +145 -0
  65. package/mcp_server/atlas/enrichments/audio_effects/phaser_flanger.yaml +161 -0
  66. package/mcp_server/atlas/enrichments/audio_effects/redux.yaml +114 -0
  67. package/mcp_server/atlas/enrichments/audio_effects/reverb.yaml +190 -0
  68. package/mcp_server/atlas/enrichments/audio_effects/roar.yaml +159 -0
  69. package/mcp_server/atlas/enrichments/audio_effects/saturator.yaml +146 -0
  70. package/mcp_server/atlas/enrichments/audio_effects/shifter.yaml +154 -0
  71. package/mcp_server/atlas/enrichments/audio_effects/spectral_resonator.yaml +141 -0
  72. package/mcp_server/atlas/enrichments/audio_effects/spectral_time.yaml +164 -0
  73. package/mcp_server/atlas/enrichments/audio_effects/vector_delay.yaml +140 -0
  74. package/mcp_server/atlas/enrichments/audio_effects/vinyl_distortion.yaml +141 -0
  75. package/mcp_server/atlas/enrichments/instruments/analog.yaml +222 -0
  76. package/mcp_server/atlas/enrichments/instruments/bass.yaml +202 -0
  77. package/mcp_server/atlas/enrichments/instruments/collision.yaml +150 -0
  78. package/mcp_server/atlas/enrichments/instruments/drift.yaml +167 -0
  79. package/mcp_server/atlas/enrichments/instruments/electric.yaml +137 -0
  80. package/mcp_server/atlas/enrichments/instruments/emit.yaml +163 -0
  81. package/mcp_server/atlas/enrichments/instruments/meld.yaml +164 -0
  82. package/mcp_server/atlas/enrichments/instruments/operator.yaml +197 -0
  83. package/mcp_server/atlas/enrichments/instruments/poli.yaml +192 -0
  84. package/mcp_server/atlas/enrichments/instruments/sampler.yaml +218 -0
  85. package/mcp_server/atlas/enrichments/instruments/simpler.yaml +217 -0
  86. package/mcp_server/atlas/enrichments/instruments/tension.yaml +156 -0
  87. package/mcp_server/atlas/enrichments/instruments/tree_tone.yaml +162 -0
  88. package/mcp_server/atlas/enrichments/instruments/vector_fm.yaml +165 -0
  89. package/mcp_server/atlas/enrichments/instruments/vector_grain.yaml +166 -0
  90. package/mcp_server/atlas/enrichments/instruments/wavetable.yaml +162 -0
  91. package/mcp_server/atlas/enrichments/midi_effects/arpeggiator.yaml +156 -0
  92. package/mcp_server/atlas/enrichments/midi_effects/bouncy_notes.yaml +93 -0
  93. package/mcp_server/atlas/enrichments/midi_effects/chord.yaml +147 -0
  94. package/mcp_server/atlas/enrichments/midi_effects/melodic_steps.yaml +97 -0
  95. package/mcp_server/atlas/enrichments/midi_effects/note_echo.yaml +108 -0
  96. package/mcp_server/atlas/enrichments/midi_effects/note_length.yaml +97 -0
  97. package/mcp_server/atlas/enrichments/midi_effects/pitch.yaml +76 -0
  98. package/mcp_server/atlas/enrichments/midi_effects/random.yaml +117 -0
  99. package/mcp_server/atlas/enrichments/midi_effects/rhythmic_steps.yaml +103 -0
  100. package/mcp_server/atlas/enrichments/midi_effects/scale.yaml +83 -0
  101. package/mcp_server/atlas/enrichments/midi_effects/step_arp.yaml +112 -0
  102. package/mcp_server/atlas/enrichments/midi_effects/velocity.yaml +119 -0
  103. package/mcp_server/atlas/enrichments/utility/amp.yaml +159 -0
  104. package/mcp_server/atlas/enrichments/utility/cabinet.yaml +109 -0
  105. package/mcp_server/atlas/enrichments/utility/corpus.yaml +150 -0
  106. package/mcp_server/atlas/enrichments/utility/resonators.yaml +131 -0
  107. package/mcp_server/atlas/enrichments/utility/spectrum.yaml +63 -0
  108. package/mcp_server/atlas/enrichments/utility/tuner.yaml +51 -0
  109. package/mcp_server/atlas/enrichments/utility/utility.yaml +136 -0
  110. package/mcp_server/atlas/enrichments/utility/vocoder.yaml +160 -0
  111. package/mcp_server/atlas/scanner.py +236 -0
  112. package/mcp_server/atlas/tools.py +224 -0
  113. package/mcp_server/composer/__init__.py +1 -0
  114. package/mcp_server/composer/engine.py +532 -0
  115. package/mcp_server/composer/layer_planner.py +427 -0
  116. package/mcp_server/composer/prompt_parser.py +329 -0
  117. package/mcp_server/composer/sample_resolver.py +153 -0
  118. package/mcp_server/composer/tools.py +211 -0
  119. package/mcp_server/connection.py +53 -8
  120. package/mcp_server/corpus/__init__.py +377 -0
  121. package/mcp_server/device_forge/__init__.py +1 -0
  122. package/mcp_server/device_forge/builder.py +377 -0
  123. package/mcp_server/device_forge/models.py +142 -0
  124. package/mcp_server/device_forge/templates.py +483 -0
  125. package/mcp_server/device_forge/tools.py +162 -0
  126. package/mcp_server/m4l_bridge.py +1 -0
  127. package/mcp_server/memory/taste_accessors.py +47 -0
  128. package/mcp_server/preview_studio/engine.py +9 -2
  129. package/mcp_server/preview_studio/tools.py +78 -35
  130. package/mcp_server/project_brain/tools.py +34 -0
  131. package/mcp_server/runtime/capability_probe.py +21 -2
  132. package/mcp_server/runtime/execution_router.py +184 -38
  133. package/mcp_server/runtime/live_version.py +102 -0
  134. package/mcp_server/runtime/mcp_dispatch.py +46 -0
  135. package/mcp_server/runtime/remote_commands.py +13 -5
  136. package/mcp_server/runtime/tools.py +66 -29
  137. package/mcp_server/sample_engine/__init__.py +1 -0
  138. package/mcp_server/sample_engine/analyzer.py +216 -0
  139. package/mcp_server/sample_engine/critics.py +390 -0
  140. package/mcp_server/sample_engine/models.py +193 -0
  141. package/mcp_server/sample_engine/moves.py +127 -0
  142. package/mcp_server/sample_engine/planner.py +186 -0
  143. package/mcp_server/sample_engine/slice_workflow.py +190 -0
  144. package/mcp_server/sample_engine/sources.py +540 -0
  145. package/mcp_server/sample_engine/techniques.py +908 -0
  146. package/mcp_server/sample_engine/tools.py +545 -0
  147. package/mcp_server/semantic_moves/__init__.py +3 -0
  148. package/mcp_server/semantic_moves/device_creation_moves.py +237 -0
  149. package/mcp_server/semantic_moves/mix_moves.py +8 -8
  150. package/mcp_server/semantic_moves/models.py +7 -7
  151. package/mcp_server/semantic_moves/performance_moves.py +4 -4
  152. package/mcp_server/semantic_moves/sample_compilers.py +377 -0
  153. package/mcp_server/semantic_moves/sound_design_moves.py +4 -4
  154. package/mcp_server/semantic_moves/tools.py +63 -10
  155. package/mcp_server/semantic_moves/transition_moves.py +4 -4
  156. package/mcp_server/server.py +71 -1
  157. package/mcp_server/session_continuity/tracker.py +4 -1
  158. package/mcp_server/sound_design/critics.py +89 -1
  159. package/mcp_server/splice_client/__init__.py +1 -0
  160. package/mcp_server/splice_client/client.py +347 -0
  161. package/mcp_server/splice_client/models.py +96 -0
  162. package/mcp_server/splice_client/protos/__init__.py +1 -0
  163. package/mcp_server/splice_client/protos/app_pb2.py +319 -0
  164. package/mcp_server/splice_client/protos/app_pb2.pyi +1153 -0
  165. package/mcp_server/splice_client/protos/app_pb2_grpc.py +1946 -0
  166. package/mcp_server/tools/_conductor.py +16 -0
  167. package/mcp_server/tools/_planner_engine.py +24 -0
  168. package/mcp_server/tools/analyzer.py +2 -0
  169. package/mcp_server/tools/arrangement.py +69 -0
  170. package/mcp_server/tools/automation.py +15 -2
  171. package/mcp_server/tools/devices.py +117 -6
  172. package/mcp_server/tools/notes.py +37 -4
  173. package/mcp_server/tools/planner.py +3 -0
  174. package/mcp_server/wonder_mode/diagnosis.py +5 -0
  175. package/mcp_server/wonder_mode/engine.py +144 -14
  176. package/mcp_server/wonder_mode/tools.py +33 -1
  177. package/package.json +14 -4
  178. package/remote_script/LivePilot/__init__.py +8 -1
  179. package/remote_script/LivePilot/arrangement.py +114 -0
  180. package/remote_script/LivePilot/browser.py +56 -1
  181. package/remote_script/LivePilot/devices.py +246 -6
  182. package/remote_script/LivePilot/mixing.py +8 -3
  183. package/remote_script/LivePilot/server.py +5 -1
  184. package/remote_script/LivePilot/transport.py +3 -0
  185. package/remote_script/LivePilot/version_detect.py +78 -0
package/bin/livepilot.js CHANGED
@@ -211,6 +211,45 @@ function checkStatus() {
211
211
  });
212
212
  }
213
213
 
214
+ function probeAnalyzer(venvPy) {
215
+ const probeCode = `
216
+ import asyncio
217
+ import json
218
+ import sys
219
+ from types import SimpleNamespace
220
+
221
+ sys.path.insert(0, ${JSON.stringify(ROOT)})
222
+
223
+ from mcp_server.server import lifespan, _master_has_livepilot_analyzer
224
+ from mcp_server.runtime.capability_probe import probe_capabilities
225
+
226
+ async def main():
227
+ async with lifespan(None) as ctx:
228
+ loaded = _master_has_livepilot_analyzer(ctx["ableton"])
229
+ report = probe_capabilities(
230
+ ableton=ctx["ableton"],
231
+ ctx=SimpleNamespace(lifespan_context=ctx),
232
+ )
233
+ print(json.dumps({
234
+ "loaded_on_master": loaded,
235
+ "m4l_bridge": report["m4l_bridge"],
236
+ "tier": report["tier"]["active"],
237
+ }))
238
+
239
+ asyncio.run(main())
240
+ `;
241
+
242
+ const out = execFileSync(venvPy, ["-c", probeCode], {
243
+ cwd: ROOT,
244
+ encoding: "utf-8",
245
+ timeout: 15000,
246
+ stdio: ["pipe", "pipe", "pipe"],
247
+ }).trim();
248
+
249
+ const lines = out.split(/\r?\n/).filter(Boolean);
250
+ return JSON.parse(lines[lines.length - 1]);
251
+ }
252
+
214
253
  // ---------------------------------------------------------------------------
215
254
  // Doctor — comprehensive diagnostic
216
255
  // ---------------------------------------------------------------------------
@@ -312,6 +351,37 @@ async function doctor() {
312
351
  ok = false;
313
352
  }
314
353
 
354
+ // 9. Analyzer / bridge capability
355
+ if (connected && fs.existsSync(venvPy)) {
356
+ const HOST = process.env.LIVE_MCP_HOST || "127.0.0.1";
357
+ const PORT = parseInt(process.env.LIVE_MCP_PORT || "9878", 10);
358
+ const otherClient = findOtherLiveClient(HOST, PORT);
359
+
360
+ if (otherClient) {
361
+ console.log(" Analyzer: skipped (another LivePilot client is connected: %s)", otherClient);
362
+ } else {
363
+ try {
364
+ const analyzer = probeAnalyzer(venvPy);
365
+ if (analyzer.loaded_on_master) {
366
+ console.log(
367
+ " Analyzer: %s",
368
+ analyzer.m4l_bridge.status === "ok"
369
+ ? "loaded on master and bridge is active"
370
+ : `loaded on master but bridge unavailable (${analyzer.m4l_bridge.detail})`,
371
+ );
372
+ if (analyzer.m4l_bridge.status !== "ok") {
373
+ ok = false;
374
+ }
375
+ } else {
376
+ console.log(" Analyzer: not detected on master track (optional)");
377
+ }
378
+ } catch (err) {
379
+ console.log(" Analyzer: could not probe (%s)", err.message || String(err));
380
+ ok = false;
381
+ }
382
+ }
383
+ }
384
+
315
385
  // Summary
316
386
  console.log("");
317
387
  console.log("─".repeat(50));
@@ -580,6 +650,7 @@ async function setup() {
580
650
  console.log(" 3. Set Control Surface to 'LivePilot'");
581
651
  console.log(" 4. Start making music with AI!");
582
652
  console.log("");
653
+ console.log(" Codex App: npx livepilot --install-codex-plugin");
583
654
  console.log(" Claude Code: claude mcp add LivePilot -- npx livepilot");
584
655
  console.log(" Claude Desktop: Already configured if using Desktop Extension");
585
656
  } else {
@@ -613,6 +684,8 @@ async function main() {
613
684
  console.log(" --setup Full setup wizard (install + configure + test)");
614
685
  console.log(" --install Install Remote Script into Ableton Live");
615
686
  console.log(" --uninstall Remove Remote Script from Ableton Live");
687
+ console.log(" --install-codex-plugin Install the bundled Codex plugin locally");
688
+ console.log(" --uninstall-codex-plugin Remove the locally installed Codex plugin");
616
689
  console.log(" --status Check if Ableton Live is reachable");
617
690
  console.log(" --doctor Run diagnostics (Python, deps, connection)");
618
691
  console.log(" --version Show version");
@@ -639,6 +712,20 @@ async function main() {
639
712
  return;
640
713
  }
641
714
 
715
+ // --install-codex-plugin
716
+ if (flag === "--install-codex-plugin") {
717
+ const { installCodexPlugin } = require(path.join(ROOT, "installer", "codex.js"));
718
+ installCodexPlugin();
719
+ return;
720
+ }
721
+
722
+ // --uninstall-codex-plugin
723
+ if (flag === "--uninstall-codex-plugin") {
724
+ const { uninstallCodexPlugin } = require(path.join(ROOT, "installer", "codex.js"));
725
+ uninstallCodexPlugin();
726
+ return;
727
+ }
728
+
642
729
  // --status
643
730
  if (flag === "--status") {
644
731
  const reachable = await checkStatus();
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ const fs = require("fs");
4
+ const os = require("os");
5
+ const path = require("path");
6
+
7
+ const ROOT = path.resolve(__dirname, "..");
8
+ const SOURCE_DIR = path.join(ROOT, "livepilot");
9
+ const SOURCE_MANIFEST = path.join(SOURCE_DIR, ".Codex-plugin", "plugin.json");
10
+ const DEFAULT_PLUGIN_DIR = path.join(os.homedir(), "plugins", "livepilot");
11
+ const DEFAULT_MARKETPLACE_PATH = path.join(os.homedir(), ".agents", "plugins", "marketplace.json");
12
+
13
+ const SKIP = new Set(["__pycache__", ".DS_Store"]);
14
+
15
+ function copyDirSync(src, dest) {
16
+ fs.mkdirSync(dest, { recursive: true });
17
+ const entries = fs.readdirSync(src, { withFileTypes: true });
18
+ for (const entry of entries) {
19
+ if (SKIP.has(entry.name)) continue;
20
+ const srcPath = path.join(src, entry.name);
21
+ const destPath = path.join(dest, entry.name);
22
+ if (entry.isDirectory()) {
23
+ copyDirSync(srcPath, destPath);
24
+ } else {
25
+ fs.copyFileSync(srcPath, destPath);
26
+ }
27
+ }
28
+ }
29
+
30
+ function targetPluginDir() {
31
+ return process.env.LIVEPILOT_CODEX_PLUGIN_PATH || DEFAULT_PLUGIN_DIR;
32
+ }
33
+
34
+ function marketplacePath() {
35
+ return process.env.LIVEPILOT_CODEX_MARKETPLACE_PATH || DEFAULT_MARKETPLACE_PATH;
36
+ }
37
+
38
+ function loadManifest() {
39
+ if (!fs.existsSync(SOURCE_MANIFEST)) {
40
+ throw new Error(`Codex plugin manifest not found at ${SOURCE_MANIFEST}`);
41
+ }
42
+ return JSON.parse(fs.readFileSync(SOURCE_MANIFEST, "utf-8"));
43
+ }
44
+
45
+ function ensureMarketplace(pluginName) {
46
+ const file = marketplacePath();
47
+ let marketplace = {
48
+ name: "local-plugins",
49
+ interface: { displayName: "Local Plugins" },
50
+ plugins: [],
51
+ };
52
+
53
+ if (fs.existsSync(file)) {
54
+ const raw = JSON.parse(fs.readFileSync(file, "utf-8"));
55
+ marketplace = {
56
+ name: raw.name || marketplace.name,
57
+ interface: raw.interface || marketplace.interface,
58
+ plugins: Array.isArray(raw.plugins) ? raw.plugins : [],
59
+ };
60
+ }
61
+
62
+ const entry = {
63
+ name: pluginName,
64
+ source: {
65
+ source: "local",
66
+ path: `./plugins/${pluginName}`,
67
+ },
68
+ policy: {
69
+ installation: "AVAILABLE",
70
+ authentication: "ON_INSTALL",
71
+ },
72
+ category: "Integration",
73
+ };
74
+
75
+ const idx = marketplace.plugins.findIndex((plugin) => plugin && plugin.name === pluginName);
76
+ if (idx >= 0) {
77
+ marketplace.plugins[idx] = entry;
78
+ } else {
79
+ marketplace.plugins.push(entry);
80
+ }
81
+
82
+ fs.mkdirSync(path.dirname(file), { recursive: true });
83
+ fs.writeFileSync(file, JSON.stringify(marketplace, null, 2) + "\n");
84
+ return file;
85
+ }
86
+
87
+ function removeMarketplaceEntry(pluginName) {
88
+ const file = marketplacePath();
89
+ if (!fs.existsSync(file)) {
90
+ return null;
91
+ }
92
+
93
+ const raw = JSON.parse(fs.readFileSync(file, "utf-8"));
94
+ const marketplace = {
95
+ name: raw.name || "local-plugins",
96
+ interface: raw.interface || { displayName: "Local Plugins" },
97
+ plugins: Array.isArray(raw.plugins) ? raw.plugins.filter((plugin) => plugin && plugin.name !== pluginName) : [],
98
+ };
99
+ fs.writeFileSync(file, JSON.stringify(marketplace, null, 2) + "\n");
100
+ return file;
101
+ }
102
+
103
+ function installCodexPlugin() {
104
+ const manifest = loadManifest();
105
+ const pluginName = manifest.name || "livepilot";
106
+ const destDir = targetPluginDir();
107
+ const marketFile = ensureMarketplace(pluginName);
108
+
109
+ console.log("Installing LivePilot Codex plugin...");
110
+ console.log(" Source: %s", SOURCE_DIR);
111
+ console.log(" Target: %s", destDir);
112
+ console.log(" Marketplace: %s", marketFile);
113
+ console.log("");
114
+
115
+ fs.mkdirSync(path.dirname(destDir), { recursive: true });
116
+ fs.rmSync(destDir, { recursive: true, force: true });
117
+ copyDirSync(SOURCE_DIR, destDir);
118
+
119
+ console.log("Done! Next steps:");
120
+ console.log(" 1. Open or refresh Codex");
121
+ console.log(" 2. Check that LivePilot appears in Local Plugins");
122
+ console.log(" 3. Start a new thread or reload tools if Codex was already open");
123
+ }
124
+
125
+ function uninstallCodexPlugin() {
126
+ const manifest = loadManifest();
127
+ const pluginName = manifest.name || "livepilot";
128
+ const destDir = targetPluginDir();
129
+ const marketFile = removeMarketplaceEntry(pluginName);
130
+
131
+ if (fs.existsSync(destDir)) {
132
+ console.log("Removing Codex plugin: %s", destDir);
133
+ fs.rmSync(destDir, { recursive: true, force: true });
134
+ } else {
135
+ console.log("Codex plugin not found at %s", destDir);
136
+ }
137
+
138
+ if (marketFile) {
139
+ console.log("Updated marketplace: %s", marketFile);
140
+ }
141
+ console.log("Restart or refresh Codex to remove the plugin from the UI.");
142
+ }
143
+
144
+ module.exports = {
145
+ installCodexPlugin,
146
+ uninstallCodexPlugin,
147
+ };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.9.24",
4
- "description": "Agentic production system for Ableton Live 12 — 293 tools, 39 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
3
+ "version": "1.10.1",
4
+ "description": "Agentic production system for Ableton Live 12 — 317 tools, 43 domains, device atlas, sample intelligence, auto-composition, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
5
5
  "author": {
6
6
  "name": "Pilot Studio"
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "livepilot",
3
- "version": "1.9.24",
4
- "description": "Agentic production system for Ableton Live 12 — 293 tools, 39 domains, device atlas, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
3
+ "version": "1.10.1",
4
+ "description": "Agentic production system for Ableton Live 12 — 317 tools, 43 domains, device atlas, sample intelligence, auto-composition, spectral perception, technique memory, neo-Riemannian harmony, Euclidean rhythm, species counterpoint, MIDI I/O",
5
5
  "author": {
6
6
  "name": "Pilot Studio"
7
7
  }
@@ -47,8 +47,10 @@ Build linear song structures on the timeline.
47
47
 
48
48
  ### Creating Arrangement Clips
49
49
 
50
- - `create_arrangement_clip(track_index, start_time, length)` — place a new clip on the timeline at a specific beat position
50
+ - `create_arrangement_clip(track_index, clip_slot_index, start_time, length)` — duplicate a session clip into Arrangement View at a specific beat position
51
+ - `create_native_arrangement_clip(track_index, start_time, length)` — create arrangement clip with full automation envelope (12.1.10+)
51
52
  - `set_arrangement_clip_name(track_index, clip_index, name)` — name arrangement clips for clarity
53
+ - `force_arrangement()` — force all tracks to play from arrangement (not session clips)
52
54
 
53
55
  ### Arrangement Notes
54
56
 
@@ -122,6 +124,21 @@ When building arrangements, use these as starting templates:
122
124
 
123
125
  Adapt these to the user's needs. Use `plan_arrangement` from the planner domain for algorithmic structure suggestions, and `transform_section` to create variations of existing sections.
124
126
 
127
+ ## Section-Aware Sample Roles
128
+
129
+ `plan_arrangement` returns `sample_hints` per section — suggested roles for sample-based elements:
130
+
131
+ | Section | Default Hints |
132
+ |---------|--------------|
133
+ | Intro | `texture_bed`, `fill_one_shot` |
134
+ | Verse | `texture_bed`, `fill_one_shot` |
135
+ | Build | `transition_fx`, `texture_bed` |
136
+ | Chorus/Drop | `hook_sample`, `break_layer`, `fill_one_shot` |
137
+ | Bridge/Breakdown | `texture_bed`, `transition_fx` |
138
+ | Outro | `texture_bed`, `fill_one_shot` |
139
+
140
+ Use `plan_sample_workflow(section_type=..., desired_role=...)` to generate concrete sample plans for each role. Use `plan_slice_workflow(intent=..., target_section=...)` for slice-based patterns.
141
+
125
142
  ## Composition Engine
126
143
 
127
144
  For deeper compositional analysis beyond basic arrangement:
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: livepilot-core
3
- description: Core discipline for LivePilot — agentic production system for Ableton Live 12. 293 tools across 39 domains. This skill should be used whenever working with Ableton Live through MCP tools. Provides golden rules, tool speed tiers, error handling protocol, and pointers to domain and engine skills.
3
+ description: Core discipline for LivePilot — agentic production system for Ableton Live 12. 317 tools across 43 domains. This skill should be used whenever working with Ableton Live through MCP tools. Provides golden rules, tool speed tiers, error handling protocol, and pointers to domain and engine skills.
4
4
  ---
5
5
 
6
6
  # LivePilot Core — Ableton Live 12
7
7
 
8
- Agentic production system for Ableton Live 12. 293 tools across 39 domains, three layers:
8
+ Agentic production system for Ableton Live 12. 317 tools across 43 domains, three layers:
9
9
 
10
- - **Device Atlas** — 280+ instruments, 139 drum kits, 350+ impulse responses. Consult `references/device-atlas/` before loading any device. Never guess a device name.
10
+ - **Device Atlas** — 1305 devices indexed (81 enriched with sonic intelligence, 683 drum kits). Consult `atlas_search` or `atlas_suggest` before loading any device. Never guess a device name.
11
11
  - **M4L Analyzer** — Real-time audio analysis on the master bus (8-band spectrum, RMS/peak, key detection). Optional — all core tools work without it.
12
12
  - **Technique Memory** — Persistent storage for production decisions. Consult `memory_recall` before creative tasks to understand user taste.
13
13
 
@@ -39,7 +39,7 @@ Agentic production system for Ableton Live 12. 293 tools across 39 domains, thre
39
39
  ## Tool Speed Tiers
40
40
 
41
41
  ### Instant (<1s) — Use freely
42
- All 293 tools plus M4L perception tools.
42
+ All 317 tools plus M4L perception tools.
43
43
 
44
44
  ### Fast (1-5s) — Use freely
45
45
  `analyze_loudness` · `analyze_mix` · `analyze_sound_design`
@@ -82,6 +82,23 @@ Three modes:
82
82
  - Prefer Wonder when the user's request is emotionally-shaped, not parametric
83
83
  - Load `livepilot-wonder` skill for full workflow guidance
84
84
 
85
+ ## Creative Sound Design Knowledge
86
+
87
+ Before setting device parameters, consult the knowledge corpus for informed creative choices. Read the relevant file BEFORE making changes:
88
+
89
+ | User says | Read this file |
90
+ |-----------|---------------|
91
+ | "make it breathe" / "organic" / "alive" / "warm" / "cold" / "anxious" / "nostalgic" | `references/device-knowledge/creative-thinking.md` — emotional-to-technical mapping, physical world modeling |
92
+ | "what effect chain for [genre]" / "dub techno" / "trap" / "SOPHIE" / "Arca" / "ambient" | `references/device-knowledge/chains-genre.md` — complete chains per genre |
93
+ | "how to use Wavetable/Drift/Analog/Operator/Meld" | `references/device-knowledge/instruments-synths.md` — parameter-level recipes |
94
+ | "distortion" / "saturation" / "Roar" / "Saturator" / "Redux" | `references/device-knowledge/effects-distortion.md` — every curve type, creative applications |
95
+ | "reverb" / "delay" / "echo" / "space" / "dub" | `references/device-knowledge/effects-space.md` — dub recipes, shimmer chains |
96
+ | "spectral" / "Resonators" / "Corpus" / "Vocoder" / "weird" / "experimental" | `references/device-knowledge/effects-spectral.md` — drum-to-melody, cross-synthesis |
97
+ | "automate" / "evolve" / "arc" / "movement" / "filter sweep" | `references/device-knowledge/automation-as-music.md` — shapes, macro gestures, density mapping |
98
+ | "sound design" / "make it interesting" / "more complex" | `references/sound-design-deep.md` — master techniques from Villalobos, SOPHIE, Basic Channel |
99
+
100
+ **Rule:** Never set effect parameters from memory alone when the corpus has specific guidance. Read the file first, then apply the technique.
101
+
85
102
  ## Domain Skills
86
103
 
87
104
  For domain-specific workflows, load the appropriate skill:
@@ -111,7 +128,7 @@ Deep production knowledge in `references/`:
111
128
 
112
129
  | File | Content |
113
130
  |------|---------|
114
- | `references/overview.md` | All 293 tools with params and ranges |
131
+ | `references/overview.md` | All 317 tools with params and ranges |
115
132
  | `references/device-atlas/` | 280+ device corpus with URIs and presets |
116
133
  | `references/midi-recipes.md` | Drum patterns, chord voicings, humanization |
117
134
  | `references/sound-design.md` | Synth recipes, device chain patterns |
@@ -0,0 +1,34 @@
1
+ # Ableton Live 12 Device Knowledge Corpus
2
+
3
+ Comprehensive reference for every built-in instrument and effect in Ableton Live 12. Written for an AI production assistant — parameter-level understanding, creative applications, and techniques from experimental electronic music producers.
4
+
5
+ ## How to Use This Corpus
6
+
7
+ This is not a manual. It's a **creative knowledge base**. When the user asks to "design a sound" or "make it more interesting," consult these references to find specific parameters and techniques that achieve the goal. Don't just reach for obvious parameters — think about how SOPHIE, Arca, Villalobos, Aphex Twin, or Basic Channel would approach the same problem.
8
+
9
+ ## Files
10
+
11
+ ### Instruments
12
+ - `instruments-synths.md` — Wavetable, Drift, Analog, Operator, Meld (synthesis engines)
13
+ - `instruments-physical.md` — Collision, Tension, Electric (physical modeling)
14
+ - `instruments-samplers.md` — Simpler, Sampler, Drum Rack, Drum Sampler
15
+
16
+ ### Effects — Processing
17
+ - `effects-dynamics.md` — Compressor, Glue Compressor, Multiband Dynamics, Limiter, Gate, Color Limiter
18
+ - `effects-eq-filter.md` — EQ Eight, EQ Three, Auto Filter, Channel EQ
19
+ - `effects-distortion.md` — Saturator, Roar, Overdrive, Pedal, Amp, Cabinet, Erosion, Redux, Vinyl Distortion, Dynamic Tube, Drum Buss
20
+
21
+ ### Effects — Space & Time
22
+ - `effects-reverb.md` — Reverb, Convolution Reverb, Hybrid Reverb
23
+ - `effects-delay.md` — Delay, Echo, Grain Delay
24
+ - `effects-modulation.md` — Chorus-Ensemble, Phaser-Flanger, Frequency Shifter, Shifter, Auto Pan-Tremolo
25
+
26
+ ### Effects — Spectral & Experimental
27
+ - `effects-spectral.md` — Spectral Resonator, Spectral Time, Spectral Blur, Resonators, Corpus, Vocoder
28
+
29
+ ### Creative Chains
30
+ - `chains-genre.md` — Effect chain blueprints by genre (dub techno, trap, SOPHIE-style, ambient, experimental)
31
+ - `chains-technique.md` — Technique-specific chains (parallel processing, creative sidechain, feedback loops, resampling workflows)
32
+
33
+ ### Artist Techniques
34
+ - `artist-techniques.md` — How specific artists use Ableton's built-in devices (researched from interviews, tutorials, and analysis)
@@ -0,0 +1,204 @@
1
+ # Automation as Music — The Art of Parameter Performance
2
+
3
+ The greatest electronic musicians don't play notes — they play parameters. A filter cutoff automated over 64 bars IS the melody. A reverb send thrown open for one beat IS the harmony. The difference between a demo and a masterpiece is often not the sounds — it's the automation.
4
+
5
+ ## The Fundamental Principle
6
+
7
+ **A static parameter is a dead parameter.** In acoustic music, every note is different — the player's breath, touch, and emotion create micro-variations. In electronic music, those variations must be created deliberately through automation. Every important parameter should move, even if only by 2-3%.
8
+
9
+ ---
10
+
11
+ ## Part 1: Automation Shapes and What They Mean Musically
12
+
13
+ ### Linear Ramps
14
+ A straight line from value A to value B. The simplest shape. Use for:
15
+ - **Build-ups:** Filter cutoff rising linearly over 16-32 bars before a drop
16
+ - **Fade outs:** Volume decreasing to zero over 8-16 bars
17
+ - **Limitation:** Linear ramps feel mechanical. Always prefer curves for musical expression.
18
+
19
+ ### Exponential Curves
20
+ Slow start, accelerating change. Mimics how tension works in music — the last 4 bars contain more change than the first 12. Use for:
21
+ - **Dramatic filter sweeps** — the ear perceives exponential change as "building"
22
+ - **Reverb tail growth** — send level increasing exponentially creates "swelling space"
23
+ - **Key insight:** Human perception of loudness is logarithmic, so exponential volume changes feel linear. Linear volume fades feel like they get quiet too fast at first.
24
+
25
+ ### S-Curves
26
+ Slow start, fast middle, slow end. The most natural shape for transitions. Use for:
27
+ - **Crossfades between elements** — one fades out as another fades in
28
+ - **Filter sweeps that "settle"** — opens quickly in the middle, then gently arrives at target
29
+ - **The Villalobos transition:** S-curve on multiple parameters simultaneously over 32 bars
30
+
31
+ ### Perlin Noise
32
+ Smooth, organic randomness. Each value is related to the previous one (no sudden jumps) but the path is unpredictable. Use for:
33
+ - **Filter cutoff drift** — sounds like a hand slowly exploring a knob
34
+ - **Send level breathing** — reverb/delay amount fluctuates organically
35
+ - **Oscillator detune wandering** — pitch instability that feels analog
36
+ - **Key insight:** Perlin noise at 0.05-0.2 Hz is below conscious perception. The listener feels "alive" without knowing why.
37
+
38
+ ### Brownian Motion
39
+ Random walk — each step is small but the cumulative drift can be large. More unpredictable than Perlin. Use for:
40
+ - **Very slow parameter evolution** over minutes — the sound "wanders" like weather
41
+ - **Stereo field drifting** — pan automation that meanders rather than oscillates
42
+ - **Combined with manual override:** Set Brownian as a baseline, then make manual adjustments on top
43
+
44
+ ### Step Automation
45
+ Discrete jumps between values. The opposite of smooth. Use for:
46
+ - **Rhythmic gating** — volume steps creating on/off patterns (trance gate effect)
47
+ - **Filter steps** — different cutoff per beat for rhythmic timbral changes
48
+ - **The glitch technique:** Very fast steps (32nd or 64th note rate) on multiple parameters simultaneously = controlled chaos
49
+
50
+ ### Sawtooth / Triangle Automation
51
+ Repeating rise-and-fall patterns. Use for:
52
+ - **Pseudo-LFO on parameters that don't have built-in modulation** — draw a triangle on track volume for tremolo
53
+ - **Rising sawtooth on filter** — creates repetitive filter sweeps that reset every bar (trance/acid)
54
+ - **Asymmetric saw:** Fast rise, slow fall = different musical effect than slow rise, fast fall
55
+
56
+ ---
57
+
58
+ ## Part 2: What to Automate (Beyond the Obvious)
59
+
60
+ Most producers only automate volume, pan, and filter cutoff. The masters automate everything.
61
+
62
+ ### Send Levels (The Dub Producer's Instrument)
63
+ - **Reverb send throws** — 0→70% for half a beat, then back to 0. The element stabs into the reverb space and the tail fills the gap. King Tubby, Lee "Scratch" Perry, and Basic Channel all treat the send knob as a performance instrument.
64
+ - **Delay send rhythmic patterns** — automate the send in a rhythmic pattern (not on every beat, but on specific accents). This creates a call-and-response between the dry and wet signals.
65
+ - **Cross-send modulation** — automate Send A (reverb) going UP while Send B (delay) goes DOWN over 16 bars, then reverse. The spatial character morphs from "room" to "echo" and back.
66
+
67
+ ### Filter Resonance (Not Just Cutoff)
68
+ - **Resonance alone** without moving cutoff — creates a subtle "emphasis" that brightens and thins the sound at the current cutoff point. Automate 15-40% range.
69
+ - **Resonance spikes** — brief 0→80% resonance for 1 beat creates a "ring" or "ping" at the filter frequency. Musical accent.
70
+ - **Counter-motion:** Cutoff goes down while resonance goes up — the sound gets darker but the filter "screams" more. Creates tension.
71
+
72
+ ### Distortion Parameters
73
+ - **Saturator Drive automated with the beat** — drive increases on beats 2 and 4 = the mix gets grittier on the snare hits. Pull back on beats 1 and 3 for the kick to stay clean.
74
+ - **Roar stage mix** — in Parallel mode, automate the balance between stages. Stage 1 (clean tube) dominant in verses, Stage 2 (aggressive) dominant in choruses.
75
+ - **Erosion Amount as texture evolution** — slowly increase Erosion over a 64-bar section. The sound gradually degrades from pristine to lo-fi. The listener doesn't notice the transition — they just feel the vibe shift.
76
+
77
+ ### Reverb Internal Parameters
78
+ - **Decay Time automation** — short decay (1s) during busy sections for clarity, long decay (5-8s) during breakdowns for depth. The room "breathes" with the arrangement.
79
+ - **Reverb Freeze** — automate on/off. Freeze captures the current reverb tail as a drone. Use at section transitions: Freeze ON for 4 bars during breakdown, OFF when the beat returns.
80
+ - **Diffusion** — low diffusion during rhythmic sections (you hear distinct echoes), high diffusion during ambient sections (smooth wash). The reverb character matches the musical energy.
81
+ - **Pre-delay** — increase pre-delay during loud sections (separates reverb from source for clarity), decrease during quiet sections (source and reverb merge into one).
82
+
83
+ ### Delay Internal Parameters
84
+ - **Feedback modulation** — push to 85% for 2 beats then pull to 50%. Creates a momentary feedback spiral that self-limits. The Dub Siren technique.
85
+ - **Delay Time (in Repitch mode)** — changing delay time pitches the echoes. Automate a slow sweep (±10% over 8 bars) for warped, wow-and-flutter echoes. Basic Channel signature.
86
+ - **Filter inside the delay** — automate the delay's internal filter cutoff. Each echo gets progressively darker (or brighter). Creates a natural "fading into distance" effect.
87
+ - **Mod Freq + Dly < Mod** — automate the modulation amount. During sparse sections, increase modulation for wobbly, organic echoes. During dense sections, reduce for cleaner timing.
88
+
89
+ ### Synthesis Parameters You Might Not Think to Automate
90
+ - **Wavetable Position** — LFO is obvious, but manually drawn automation tells a specific timbral story. Draw the position to follow the emotional arc: brighter wavetable positions during peaks, darker during valleys.
91
+ - **FM Amount (Operator)** — automate the modulator level. Low during pads, spike during stabs, medium during leads. The harmonic complexity follows the musical tension.
92
+ - **Oscillator feedback** — in Operator, automate feedback 10-40% range. Creates a sound that morphs from pure (low feedback) to gritty (high feedback) over time.
93
+ - **Drift amount** — in Drift synth, automate the Drift parameter itself. Low Drift during precise sections, high Drift during loose, organic sections.
94
+ - **Unison Amount** (Wavetable) — automate 0→50% over a build-up. The sound literally "widens and thickens" as the section grows. Return to 0 for a sudden "focused" impact.
95
+
96
+ ### Rack Chain Volumes
97
+ - **Audio Effect Rack with multiple chains** — automate the chain selector or individual chain volumes to morph between completely different effect configurations. Chain 1: clean reverb. Chain 2: distorted delay. Chain 3: granular destruction. Crossfade between them = the sound evolves through processing states.
98
+ - **Instrument Rack layers** — automate the chain volumes of a layered synth. Start with only the sub layer audible, gradually bring in the mid layer, then the bright layer. The sound "unfolds" from bottom to top.
99
+
100
+ ---
101
+
102
+ ## Part 3: Multi-Parameter Automation (The Macro Gesture)
103
+
104
+ The most powerful automation isn't on single parameters — it's on coordinated groups that create a single musical gesture.
105
+
106
+ ### The "Open Up" Gesture
107
+ Simultaneously automate over 8-16 bars:
108
+ - Filter cutoff: 30% → 65%
109
+ - Filter resonance: 15% → 30%
110
+ - Reverb send: 25% → 45%
111
+ - Stereo width (or pan spread): narrow → wide
112
+ - **Musical meaning:** The sound "opens up" — goes from closed/intimate to wide/expansive. Use at the transition from verse to chorus, from build to drop.
113
+
114
+ ### The "Submerge" Gesture
115
+ Simultaneously automate over 16-32 bars:
116
+ - Filter cutoff: 65% → 25%
117
+ - Reverb decay: 3s → 8s
118
+ - Delay feedback: 40% → 70%
119
+ - Volume: 0dB → -6dB
120
+ - Erosion amount: 0% → 15%
121
+ - **Musical meaning:** The sound "submerges" — sinks into depth and distance. Use at the transition into a breakdown or outro.
122
+
123
+ ### The "WTF" Gesture (2-4 beats only)
124
+ Simultaneously snap:
125
+ - Reverb send: 0% → 100% (everything washes out)
126
+ - Delay feedback: 50% → 95% (echoes spiral)
127
+ - Filter cutoff: current → fully open
128
+ - Then ALL snap back to normal after 2-4 beats
129
+ - **Musical meaning:** A moment of chaos that instantly resolves. The listener's brain says "what was THAT?" and re-engages attention.
130
+
131
+ ### The "Human Hand" Technique
132
+ Record automation live (via mouse or MIDI controller) instead of drawing it. The tiny timing imperfections and non-mathematical curves create a fundamentally different feel than drawn automation. Then edit the recording — smooth the extreme mistakes but keep the organic character.
133
+
134
+ This is how Villalobos works live: filter sweeps are performed, not drawn. The audience feels the human gesture even when they can't see the performer.
135
+
136
+ ---
137
+
138
+ ## Part 4: Automation Density by Section
139
+
140
+ Different parts of a track need different automation density:
141
+
142
+ ### Intro (sparse automation)
143
+ - 1-2 parameters moving slowly (filter, reverb send)
144
+ - Very slow rates (0.05-0.1 Hz effective rate)
145
+ - Purpose: establish mood, create anticipation
146
+
147
+ ### Build-Up (increasing density)
148
+ - 3-5 parameters, all moving in the same "opening" direction
149
+ - Exponential curves — change accelerates
150
+ - Purpose: create tension and forward momentum
151
+
152
+ ### Peak/Drop (maximum density)
153
+ - 5-8 parameters all active
154
+ - Mix of slow sweeps and rhythmic modulation
155
+ - Send throws, filter accents, distortion spikes
156
+ - Purpose: maximum energy and interest
157
+
158
+ ### Breakdown (sudden reduction)
159
+ - Drop to 1-2 parameters
160
+ - Very slow, gentle movement
161
+ - Purpose: contrast, breathing room, emotional reset
162
+
163
+ ### Outro (mirror of intro)
164
+ - Gradually reduce automation density
165
+ - Parameters return to starting values (or close)
166
+ - The final automation move should be the filter closing to its lowest point
167
+ - Purpose: the sound "returns to where it started" — cyclical, complete
168
+
169
+ ---
170
+
171
+ ## Part 5: Learning from the Masters
172
+
173
+ ### Villalobos: Filter as Melody
174
+ Ricardo Villalobos automates a single lowpass filter on a pad for 8+ minutes. The filter IS the melody — it opens to reveal harmonics, closes to create tension, breathes with the groove. He never draws automation — he performs it live, which gives each performance unique character. The filter rarely moves by more than 5-10% at a time, but over 8 minutes it covers the full range.
175
+
176
+ ### Basic Channel: Space as Composition
177
+ Mark Ernestus and Moritz von Oswald automate delay send levels, delay feedback, and reverb sends as their primary compositional tool. A chord stab enters the delay at 70% feedback — the echoes build up, creating a harmonic cloud. Then the feedback drops to 40% — the cloud thins and the next stab enters. The delay IS the arrangement.
178
+
179
+ ### Aphex Twin: Parameter Density
180
+ Richard D. James automates dozens of parameters simultaneously at very high speed (32nd note and faster). Filter cutoffs, oscillator frequencies, effect parameters all changing independently at different rates create the "impossible complexity" that defines his sound. The key: each parameter has its own automation rate, and the rates are intentionally non-related (no multiples). This creates ever-evolving patterns that never exactly repeat.
181
+
182
+ ### SOPHIE: Extreme Parameter Snapshots
183
+ SOPHIE's technique was to set up a sound, then rapidly switch between extreme parameter configurations — like snapshots. Filter fully open → fully closed in one beat. Distortion zero → maximum in one step. No smooth transitions — pure contrast. This creates the "hyperplastic" character: sounds that feel like they're being molded by an invisible force.
184
+
185
+ ### Boards of Canada: Decay as Atmosphere
186
+ Marcus Eoin and Michael Sandison automate parameters to simulate degradation: filter slowly closing over minutes (tape getting worn), Vinyl Distortion amount slowly increasing (record deteriorating), subtle pitch detune growing (tape machine dying). The music doesn't just play — it deteriorates, creating the nostalgic feeling of listening to something from the past.
187
+
188
+ ### Amon Tobin: Micro-Edit as Expression
189
+ Amon Tobin automates at the sample level — chopping, reordering, and processing tiny fragments of audio with rapidly changing effects. Each 16th note might have a different filter setting, different reverb amount, different distortion level. The automation IS the rhythm.
190
+
191
+ ---
192
+
193
+ ## Part 6: Wonder Mode Automation Intelligence
194
+
195
+ When Wonder Mode generates variants, the automation layer is what separates "a clip arrangement" from "a musical journey." Every Wonder variant should include:
196
+
197
+ 1. **Filter arc** — at minimum, one element's filter should evolve over the full track length
198
+ 2. **Space arc** — reverb/delay sends should breathe with the arrangement density
199
+ 3. **Micro-modulation** — every sustained sound should have sub-perceptual LFO on at least one parameter
200
+ 4. **2-3 macro gestures** — coordinated multi-parameter moves at section transitions
201
+ 5. **1-2 WTF moments** — brief parameter disruptions that break and re-establish the hypnosis
202
+ 6. **Temporal density mapping** — automation density should follow the arrangement energy (sparse in intro/outro, dense at peaks)
203
+
204
+ The automation is not optional garnish — it is the primary vehicle for musical expression in electronic music. A perfectly arranged track with no automation is a skeleton. The automation is the flesh, the breath, and the soul.