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
@@ -0,0 +1,140 @@
1
+ # Deep Sound Design — Techniques from the Masters
2
+
3
+ This is a reference for creative sound design thinking, not a recipe book. These are principles and techniques drawn from deep minimal, dub techno, and experimental electronic production. Use them as inspiration — adapt, combine, subvert.
4
+
5
+ ## Philosophy: Sound Design IS Composition
6
+
7
+ In minimal and experimental electronic music, sound design and composition are the same thing. A filter sweep IS the melody. A reverb tail IS the harmony. Modulation IS the arrangement. The producer's job is not to write notes — it's to sculpt evolving textures.
8
+
9
+ **Villalobos principle:** A single sound source, properly modulated, IS a complete piece. The trick is making one thing do the work of ten.
10
+
11
+ **Basic Channel principle:** Space is an instrument. Delay and reverb are not effects — they are the composition itself.
12
+
13
+ **Richie Hawtin principle:** Subtraction is more powerful than addition. Remove one thing and the remaining elements become louder without touching a fader.
14
+
15
+ ---
16
+
17
+ ## Technique Library
18
+
19
+ ### 1. Micro-Modulation (Making Things Breathe)
20
+
21
+ The difference between "sounds like a computer" and "sounds alive" is modulation that operates below conscious perception.
22
+
23
+ **Filter breathing:** Assign an LFO at 0.1-0.5 Hz to a lowpass filter cutoff with a depth of 5-15%. The filter opens and closes like breathing. The listener doesn't hear "filter modulation" — they feel "organic movement."
24
+
25
+ **Oscillator drift:** Detune oscillators by 1-3 cents with slow LFO modulation (0.05-0.2 Hz). This creates the warmth of analog — tiny pitch instabilities that prevent digital sterility.
26
+
27
+ **Amplitude micro-variation:** Automate track volume with perlin/brownian noise at very low depth (±1-3 dB). Every bar sounds slightly different even with identical notes.
28
+
29
+ **Key insight:** If the listener can consciously hear the modulation, it's too much. The best modulation is felt, not heard.
30
+
31
+ ### 2. Space as Composition (Dub Techniques)
32
+
33
+ In dub techno, reverb and delay are not decorations — they generate the harmonic and melodic content.
34
+
35
+ **The dub chord:** A short, dry chord stab fed into long delay (70-80% feedback) with a filter on the delay return. The delay tail becomes the pad. The filter on the return shapes the "melody" — slowly opening the filter on the delay return makes the chord brighten over time while the source stays dark.
36
+
37
+ **Reverb as harmony:** A single note hit fed into a reverb with 5-10s decay. The reverb tail becomes a drone that carries harmonic information. Modulating the reverb's pre-delay and diffusion creates the impression of harmonic movement.
38
+
39
+ **Delay throws:** Normally sends are set to a fixed level. A "throw" is a momentary spike — send level goes from 0 to 60-80% for half a beat, then back to 0. The element echoes into space and the echo fills the gap. Use this on snare, hats, vocal fragments. The throw IS the composition — it creates rhythmic space events.
40
+
41
+ **Feedback modulation:** Set delay feedback to 75-85% (near self-oscillation). Then modulate the delay time by ±5-10%. The pitch shifts create eerie, warped echoes — the signature Basic Channel sound.
42
+
43
+ ### 3. Creative Sidechain (Beyond Pump)
44
+
45
+ Sidechain compression is not just for the kick-bass pump. It's a modulation source.
46
+
47
+ **Sidechain reverb from drums:** Route the dry drum signal to trigger sidechain compression on the reverb return. When drums hit, the reverb ducks. When drums are silent, the reverb fills the space. This creates rhythmic breathing in the entire reverb field — the room "pulses" with the groove.
48
+
49
+ **Sidechain everything from a ghost kick:** Create a muted kick track (no audio output). Use it as a sidechain source for pads, textures, atmospheres. This creates rhythmic ducking on elements that have no rhythmic content — they pulse with a phantom groove.
50
+
51
+ **Sidechain filter instead of volume:** Instead of ducking volume, use an envelope follower (from the kick) to modulate a filter cutoff on the pad. When the kick hits, the pad filter closes. When the kick releases, the pad opens. Subtler than volume ducking — the pad "brightens" between kicks instead of getting quieter.
52
+
53
+ **Multiband sidechain:** Only duck the low frequencies of a pad from the kick. The high frequencies stay constant — shimmer remains while the sub clears for the kick. Use Multiband Dynamics or an EQ before the compressor.
54
+
55
+ ### 4. Textural Layering (Villalobos Method)
56
+
57
+ Villalobos builds textures by layering tiny, filtered, processed fragments — each one barely audible alone, together they create a living fabric.
58
+
59
+ **Grain technique:** Take a single percussion hit. Duplicate it 3-4 times. Process each copy differently — one through bit reduction, one through heavy reverb, one through a bandpass filter, one pitch-shifted. Pan them across the stereo field. Mix each at 15-25% of the original. The result: one "hit" that has depth, width, and organic irregularity.
60
+
61
+ **Noise sculpting:** White noise through a tight bandpass filter with slow LFO on the center frequency creates a "breathing" texture. Add this at -20dB under your main elements. It's the "air" in the room. Modulate the filter Q for moments of focus.
62
+
63
+ **Sample mangling:** Take a melodic sample. Time-stretch it to 200-400% length. This reveals the granular structure — artifacts become texture. Filter the result aggressively. Use what remains as an atmospheric layer.
64
+
65
+ ### 5. Frequency Domain Thinking
66
+
67
+ Don't think about tracks — think about frequency bands. Each band is a voice in the mix.
68
+
69
+ **Sub (20-60 Hz):** One element only. Kick or bass, never both at the same time. Sidechain or frequency split to ensure they alternate.
70
+
71
+ **Low (60-200 Hz):** Bass body and kick impact. Keep this mono. This is where groove lives.
72
+
73
+ **Low-mid (200-500 Hz):** The "warmth" zone but also the "mud" zone. Be selective — only one or two elements should occupy this space at any time.
74
+
75
+ **Mid (500-2kHz):** Where most melodic/harmonic content sits. Filter pads to stay below 2kHz for depth. Bright melodic elements (leads) sit above 1kHz.
76
+
77
+ **High-mid (2-6kHz):** Presence and attack. Hi-hats, percussion transients, vocal presence. This is what makes things "cut through."
78
+
79
+ **High/Air (6-20kHz):** Shimmer and sparkle. Reverb tails, noise textures, cymbal sustain. Subtle modulation here creates "life."
80
+
81
+ **The frequency dance:** At any given moment, each frequency band should have one primary element. When the chord opens its filter into the highs, pull the hi-hat back. When the bass drops, the kick shortens. This is mix engineering as composition.
82
+
83
+ ### 6. Organic Automation Shapes
84
+
85
+ Real producers don't draw straight lines or perfect curves. Their automation reflects human movement.
86
+
87
+ **Perlin noise:** Smooth, natural-looking randomness. Perfect for filter cutoff drift, send level breathing, oscillator detune. Sounds like "a hand on a knob."
88
+
89
+ **Brownian motion:** Random walk — each value is close to the previous one. Good for very slow parameter drift over 16-32 bars. Creates the feeling of gradual transformation.
90
+
91
+ **Exponential curves:** For build-ups and filter sweeps. Energy accumulates slowly at first, then accelerates. This is how tension works in music — the last 4 bars contain more change than the first 12.
92
+
93
+ **Asymmetric envelopes:** Fast attack, slow release on send throws. The element stabs into the reverb quickly, but the tail fades slowly. This is more musical than symmetric curves.
94
+
95
+ **Anti-quantize:** After drawing automation, add tiny random offsets (±0.05 beats) to the breakpoints. This prevents the automation from sounding "gridded."
96
+
97
+ ### 7. The WTF Moment
98
+
99
+ Every great minimal track has 2-3 moments where something unexpected happens — a sound that doesn't belong, a brief disruption that breaks the hypnosis just enough to deepen it.
100
+
101
+ **Techniques:**
102
+ - Reverse a percussion hit for 1 bar before a section change
103
+ - Pitch-shift the entire master bus by ±2 semitones for 2 beats
104
+ - Suddenly remove ALL reverb for 4 beats — the room "dries up"
105
+ - Send one element to 100% delay feedback for 1 beat, creating a momentary pitch spiral
106
+ - Drop the tempo by 0.5 BPM for 16 bars, then return — subconscious tension
107
+ - Insert 1 bar of silence (mute master) — the most powerful "effect"
108
+
109
+ **Rules:**
110
+ - Maximum 3 WTF moments per 8-minute track
111
+ - Never repeat the same trick
112
+ - The WTF moment should last 2-8 beats — any longer and it becomes a section, not a moment
113
+ - After the WTF, return to exactly where you were — the contrast is what makes it powerful
114
+
115
+ ### 8. Effects as Instruments
116
+
117
+ In experimental electronic music, effects chains ARE instruments.
118
+
119
+ **Self-oscillating filter:** Push a filter's resonance to the point where it starts ringing. Play notes by changing the cutoff frequency. The filter becomes a sine oscillator with natural overtones.
120
+
121
+ **Feedback loop instrument:** Route a track's output back to its own input through effects. Add a compressor to prevent runaway feedback. What you get is a living, evolving texture that responds to its own output. Add a gate to control when it speaks.
122
+
123
+ **Granular reverb:** Very short reverb (0.1-0.3s) with high diffusion on percussive sounds. The reverb doesn't add "space" — it smears the transient into a tonal cloud. The pitch of the cloud is determined by the reverb size.
124
+
125
+ **Convolution as synthesis:** Load a non-impulse-response file into a convolution reverb — a speech recording, a drum break, a synth pad. The "reverb" imprints the spectral character of that source onto whatever passes through it. A kick drum through a vocal convolution gains speech-like formants.
126
+
127
+ ---
128
+
129
+ ## Application Principles
130
+
131
+ When working on any track, think about these layers:
132
+
133
+ 1. **Foundation:** What is the one element that defines this track? Protect it.
134
+ 2. **Modulation:** What is moving? If nothing is moving, the track is dead.
135
+ 3. **Space:** Where are things in the stereo field? What reverb/delay creates the "room"?
136
+ 4. **Frequency balance:** At any moment, is every frequency band occupied by exactly one primary element?
137
+ 5. **Surprise:** Where are the 2-3 WTF moments that break the hypnosis?
138
+ 6. **Evolution:** Over 8 minutes, what changes? Not clip changes — parameter changes. The filter that opened 5% in the first minute is at 70% by minute 6.
139
+
140
+ **The test:** Mute any single track. If the track sounds empty, that element is doing too much. If the track sounds the same, that element isn't doing enough. Each element should be missed when removed but not dominant when present.
@@ -7,9 +7,23 @@ description: This skill should be used when the user asks to "load a device", "a
7
7
 
8
8
  Load instruments, effects, and plugins into Ableton Live tracks. Every device operation follows one discipline: search first, verify after.
9
9
 
10
- ## Browser Workflow — The Safe Path
10
+ ## Primary Workflow — Atlas-Driven
11
11
 
12
- Always use the two-step browser workflow for loading devices:
12
+ The device atlas contains 1,305 devices with sonic descriptions, recipes, and recommendations. Always start here:
13
+
14
+ 1. **Discover:** `atlas_search(query)` — find devices by name, sound character, or genre
15
+ 2. **Learn:** `atlas_device_info(device_id)` — full parameters, recipes, gotchas, pairings
16
+ 3. **Suggest:** `atlas_suggest(intent, genre)` — "I need a warm pad" → ranked device+recipe combos
17
+ 4. **Chain:** `atlas_chain_suggest(role, genre)` — full device chain for a track role (instrument + effects)
18
+ 5. **Load:** Use the URI from atlas results → `load_browser_item(uri)` or `find_and_load_device(name)`
19
+ 6. **Recipe:** Apply starter recipe params → `batch_set_parameters(params)` from the atlas entry
20
+ 7. **Verify:** `get_device_info(track_index, device_index)` — check health flags
21
+
22
+ If the atlas doesn't have a device (newly installed plugin, user sample), fall back to the browser workflow below.
23
+
24
+ ## Browser Workflow — The Fallback Path
25
+
26
+ Use the browser workflow when the atlas doesn't have what you need:
13
27
 
14
28
  1. **Search:** `search_browser(path, name_filter)` — returns a list of matching items with exact URIs
15
29
  2. **Inspect:** Read the results. Confirm the item name, type, and path match what you need
@@ -106,9 +120,30 @@ For Simpler devices that already have samples loaded:
106
120
  - `crop_simpler(track_index, device_index)` — trim sample to current start/end points
107
121
  - `reverse_simpler(track_index, device_index)` — reverse the loaded sample
108
122
  - `get_simpler_slices(track_index, device_index)` — retrieve auto-detected slice points (Slice mode)
109
- - `set_simpler_playback_mode(track_index, device_index, mode)` — switch between Classic, One-Shot, and Slice modes
123
+ - `set_simpler_playback_mode(track_index, device_index, playback_mode)` — switch modes: 0=Classic, 1=One-Shot, 2=Slice. Optional: `slice_by` (0=Transient, 1=Beat, 2=Region, 3=Manual), `sensitivity` (0.0-1.0, Transient only)
124
+ - `warp_simpler(track_index, device_index, beats)` — warp sample to fit N beats
125
+
126
+ ### Slice Workflow
127
+
128
+ For slice-based production, use `plan_slice_workflow`:
129
+ 1. `plan_slice_workflow(file_path=..., intent="rhythm")` — generates a complete workflow with Simpler setup, slice mapping, and MIDI notes
130
+ 2. Intents: `rhythm`, `hook`, `texture`, `percussion`, `melodic`
131
+ 3. The tool returns a step-by-step plan — execute each tool call in sequence
132
+
133
+ Manual slice workflow: load sample → `set_simpler_playback_mode(playback_mode=2)` → `get_simpler_slices` → program MIDI notes targeting slice indices (C3 = slice 0, C#3 = slice 1, etc.)
134
+
135
+ ### New Device Operations (12.3+)
136
+
137
+ - `insert_device(track_index, device_name)` — insert native device by name (10x faster than browser, 12.3+)
138
+ - `insert_rack_chain(track_index, device_index)` — add chain to Instrument/Audio/Drum Rack
139
+ - `set_drum_chain_note(track_index, device_index, chain_index, note)` — assign MIDI note to Drum Rack chain
140
+ - `move_device(track_index, device_index, new_index)` — reorder devices on a track
141
+
142
+ ### Plugin Deep Control
110
143
 
111
- Slice mode workflow: load sample, set playback mode to Slice, call `get_simpler_slices` to see slice points, then program MIDI notes targeting slice indices.
144
+ - `get_plugin_parameters(track_index, device_index)` all AU/VST plugin parameters
145
+ - `map_plugin_parameter(track_index, device_index, parameter_index)` — map for automation
146
+ - `get_plugin_presets(track_index, device_index)` — list plugin presets
112
147
 
113
148
  ## Effect Chain Best Practices
114
149
 
@@ -104,7 +104,7 @@ Call `get_capability_state` at the start of any evaluation session. The response
104
104
  {
105
105
  "mode": "normal",
106
106
  "analyzer_connected": true,
107
- "bridge_version": "1.9.18",
107
+ "bridge_version": "1.10.1",
108
108
  "spectral_cache_age_ms": 1200,
109
109
  "flucoma_available": false,
110
110
  "session_connected": true
@@ -28,38 +28,42 @@ Run this checklist EVERY time the user says "update everything", "push", "releas
28
28
 
29
29
  ## 2. Tool Count (must ALL match)
30
30
 
31
- Current: **293 tools across 39 domains**.
32
- Core (no M4L): **149**. Analyzer (M4L): **29**. Perception (offline): **4**. V2 engines: **86+**.
31
+ Current: **317 tools across 43 domains**.
32
+ Core (no M4L): **286**. Bridge (M4L): **30** (backed by 28 bridge commands).
33
33
 
34
34
  Verify: `grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print sum}'`
35
35
 
36
36
  Files that reference tool count:
37
- - [ ] `README.md` — header, PERCEPTION section ("207 core...30 analyzer"), Analyzer table header "(29)", Perception table header "(4)"
38
- - [ ] `package.json` → `"description"` (293 tools, 39 domains)
37
+ - [ ] `README.md` — header ("317 tools. 43 domains"), bridge section ("286 core...30 bridge")
38
+ - [ ] `package.json` → `"description"`
39
39
  - [ ] `server.json` → `"description"`
40
+ - [ ] `manifest.json` → `"description"`
40
41
  - [ ] `livepilot/.Codex-plugin/plugin.json` → `"description"` (primary Codex manifest)
41
42
  - [ ] `livepilot/.claude-plugin/plugin.json` → `"description"` (must match Codex plugin)
42
43
  - [ ] `.claude-plugin/marketplace.json` → `"description"`
43
- - [ ] `CLAUDE.md` → "293 tools across 39 domains"
44
- - [ ] `livepilot/skills/livepilot-core/SKILL.md` "293 tools across 39 domains", Analyzer (30), Perception (4)
45
- - [ ] `livepilot/skills/livepilot-core/references/overview.md` — "293 tools across 39 domains"
46
- - [ ] `docs/manual/index.md` — domain table: Analyzer (30), Perception (4)
47
- - [ ] `docs/manual/getting-started.md` — "207 core tools...30 analyzer"
44
+ - [ ] `CLAUDE.md` → "317 tools across 43 domains"
45
+ - [ ] `CONTRIBUTING.md` tool count in intro
46
+ - [ ] `livepilot/skills/livepilot-core/SKILL.md` — tool/domain count
47
+ - [ ] `livepilot/skills/livepilot-core/references/overview.md` — tool/domain count
48
+ - [ ] `docs/manual/index.md` — domain table with correct per-domain counts
49
+ - [ ] `docs/manual/getting-started.md` — "286 core tools...30 bridge"
48
50
  - [ ] `docs/manual/tool-reference.md` — all domains present with correct counts
49
- - [ ] `docs/TOOL_REFERENCE.md` — all domains present
50
- - [ ] `docs/M4L_BRIDGE.md` — "207 core tools...30 analyzer"
51
+ - [ ] `docs/manual/tool-catalog.md` — all tools present (CI-tested)
52
+ - [ ] `docs/manual/tool-catalog-generated.md` — regenerated from source
53
+ - [ ] `docs/TOOL_REFERENCE.md` — all domains present with correct counts
54
+ - [ ] `docs/M4L_BRIDGE.md` — "286 core tools...30 bridge"
51
55
  - [ ] `docs/social-banner.html`
52
- - [ ] `mcp_server/tools/analyzer.py` → module docstring
53
56
  - [ ] `tests/test_tools_contract.py` → expected total count
57
+ - [ ] `tests/test_skill_contracts.py` → catalog sync test passes
54
58
 
55
59
  **How to check:** `grep -rn "168\|139\|135\|127\|115\|107" --include="*.md" --include="*.json" --include="*.py" --include="*.html" . | grep -v node_modules | grep -v .git | grep -v __pycache__ | grep -v CHANGELOG`
56
60
 
57
61
  ## 3. Domain Count
58
62
 
59
- Current: **39 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints.
63
+ Current: **43 domains**: transport, tracks, clips, notes, devices, scenes, mixing, browser, arrangement, memory, analyzer, automation, theory, generative, harmony, midi_io, perception, agent_os, composition, motif, research, planner, project_brain, runtime, evaluation, mix_engine, sound_design, transition_engine, reference_engine, translation_engine, performance_engine, song_brain, preview_studio, hook_hunter, stuckness_detector, wonder_mode, session_continuity, creative_constraints, device_forge, sample_engine, atlas, composer, experiment, musical_intelligence.
60
64
 
61
- - [ ] All files that mention domain count say "39 domains"
62
- - [ ] Domain lists include ALL 39 (especially newer domains — they're the most often omitted)
65
+ - [ ] All files that mention domain count say "43 domains"
66
+ - [ ] Domain lists include ALL 43 (especially newer domains — they're the most often omitted)
63
67
 
64
68
  ## 4. npm Registry
65
69
 
@@ -89,9 +93,9 @@ Current: **39 domains**: transport, tracks, clips, notes, devices, scenes, mixin
89
93
 
90
94
  - [ ] `README.md` — features match current capabilities, "Coming" section is accurate
91
95
  - [ ] `docs/manual/getting-started.md` — install instructions current
92
- - [ ] `docs/manual/tool-reference.md` — all 39 domains listed, all 293 tools present
93
- - [ ] `docs/TOOL_REFERENCE.md` — all 39 domains present
94
- - [ ] `docs/M4L_BRIDGE.md` — architecture accurate, core tool count correct
96
+ - [ ] `docs/manual/tool-reference.md` — all 43 domains listed, all 317 tools present
97
+ - [ ] `docs/TOOL_REFERENCE.md` — all 43 domains present with correct counts
98
+ - [ ] `docs/M4L_BRIDGE.md` — architecture accurate, core/bridge counts correct
95
99
 
96
100
  ## 9. Derived Artifacts
97
101
 
@@ -122,5 +126,5 @@ Current: **39 domains**: transport, tracks, clips, notes, devices, scenes, mixin
122
126
  ## Quick Verify Command
123
127
 
124
128
  ```bash
125
- echo "=== Versions ===" && grep -h '"version"' package.json server.json livepilot/.Codex-plugin/plugin.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json | head -7 && grep __version__ mcp_server/__init__.py remote_script/LivePilot/__init__.py && echo "=== Tool count ===" && grep -rc "@mcp.tool" mcp_server/tools/ | grep -v ":0" | awk -F: '{sum+=$2} END{print "Total:", sum}' && echo "=== Tests ===" && python3 -m pytest tests/ -q 2>&1 | tail -1
129
+ echo "=== Versions ===" && grep -h '"version"' package.json server.json manifest.json livepilot/.Codex-plugin/plugin.json livepilot/.claude-plugin/plugin.json .claude-plugin/marketplace.json | head -8 && grep __version__ mcp_server/__init__.py remote_script/LivePilot/__init__.py && echo "=== Tool count ===" && grep -rc "@mcp.tool" mcp_server/ | grep -v ":0" | awk -F: '{sum+=$2} END{print "Total:", sum}' && echo "=== Tests ===" && python3 -m pytest tests/ -q 2>&1 | tail -1
126
130
  ```
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: livepilot-sample-engine
3
+ description: >
4
+ This skill should be used when the user asks to "sample", "chop",
5
+ "slice a loop", "find me a sample", "load a sample", "flip this",
6
+ "resample", "vocal chop", "found sound", "texture from", "turn this into",
7
+ "break", "one-shot", "load into Simpler", or when get_sample_opportunities
8
+ finds gaps in the song's sample usage.
9
+ ---
10
+
11
+ # Sample Engine — AI Sample Manipulation for Ableton Live
12
+
13
+ The Sample Engine is LivePilot's intelligence layer for sample discovery,
14
+ analysis, critique, and creative manipulation. It turns raw samples into
15
+ musical elements through 29 techniques drawn from Dilla, Burial, Amon Tobin,
16
+ Four Tet, and DJ Premier.
17
+
18
+ ## Philosophy: Surgeon vs Alchemist
19
+
20
+ Every sample workflow is guided by one of two philosophies:
21
+
22
+ - **Surgeon** — Precision. Match key, align tempo, carve frequencies, blend
23
+ seamlessly. The sample should sound like it was always part of the track.
24
+ - **Alchemist** — Transformation. Reverse, stretch, destroy, rebuild.
25
+ The original creator shouldn't recognize their sample.
26
+ - **Auto** (default) — Context decides. Building a clean layer? Surgeon.
27
+ Stuck and need surprise? Alchemist. The critics and intent determine which.
28
+
29
+ ## 6 MCP Tools
30
+
31
+ | Tool | Purpose |
32
+ |------|---------|
33
+ | `analyze_sample` | Build SampleProfile — material type, key, BPM, recommendations |
34
+ | `evaluate_sample_fit` | 6-critic battery — key, tempo, frequency, role, vibe, intent fit |
35
+ | `search_samples` | Search Splice library, Ableton browser, and local filesystem |
36
+ | `suggest_sample_technique` | Recommend techniques from the 29-recipe library |
37
+ | `plan_sample_workflow` | End-to-end plan: analyze + critique + technique + compiled steps |
38
+ | `get_sample_opportunities` | Analyze song for where samples could improve it |
39
+
40
+ ## Workflow Modes
41
+
42
+ ### Direct Request
43
+ User asks to do something specific with a sample:
44
+ ```
45
+ "Chop this vocal into a rhythm"
46
+ -> analyze_sample -> evaluate_sample_fit(intent="rhythm")
47
+ -> suggest_sample_technique -> execute
48
+ ```
49
+
50
+ ### Discovery Mode
51
+ User wants to find and use a sample:
52
+ ```
53
+ "Find me a dark vocal for this track"
54
+ -> search_samples(query="dark vocal") -> present candidates
55
+ -> user picks -> analyze -> critique -> plan -> execute
56
+ ```
57
+
58
+ ### Wonder Mode Integration
59
+ When stuck, Wonder Mode can suggest sample-based variants:
60
+ - 6 sample-domain semantic moves in the registry
61
+ - Compiled plans require agent to supply `file_path` from prior `search_samples` results
62
+ - Diagnosis detects: no_organic_texture, stale_drums, dense_but_static
63
+ - Note: Wonder does not yet auto-call `search_samples` — the agent must chain the calls
64
+
65
+ ## Golden Rules
66
+
67
+ 1. **Always analyze before loading** — `analyze_sample` tells you what
68
+ the material is before you commit to a technique
69
+ 2. **Always critique before executing** — `evaluate_sample_fit` catches
70
+ key clashes, tempo mismatches, and frequency masking before they happen
71
+ 3. **Respect the intent** — "rhythm" and "texture" need different approaches
72
+ even for the same sample
73
+ 4. **Start from the nearest technique** — don't improvise a workflow when
74
+ a proven recipe exists in the library
75
+ 5. **Present both plans** — surgeon and alchemist. Let the user choose.
76
+
77
+ ## Material Types
78
+
79
+ | Type | Detection | Best Simpler Mode | Best Warp Mode |
80
+ |------|-----------|-------------------|----------------|
81
+ | vocal | "vocal", "vox", "voice" in name | Slice (Region) | Complex Pro |
82
+ | drum_loop | "drum", "break", "beat" in name | Slice (Transient) | Beats |
83
+ | instrument_loop | "guitar", "piano", "synth" | Slice (Beat) | Complex Pro |
84
+ | one_shot | "kick", "snare", "clap", short | Classic | Complex |
85
+ | texture | "ambient", "pad", "drone" | Classic | Texture |
86
+ | foley | "foley", "field", "recording" | Classic | Texture |
87
+ | fx | "fx", "riser", "sweep" | Classic | Complex |
88
+ | full_mix | full mix, long duration | Slice (Beat) | Complex Pro |
89
+
90
+ ## 6 Sample Critics
91
+
92
+ Each scores 0.0-1.0 on one dimension of fitness:
93
+
94
+ 1. **Key Fit** — Circle-of-fifths distance from song key
95
+ 2. **Tempo Fit** — BPM match including half/double time
96
+ 3. **Frequency Fit** — Spectral overlap with existing mix
97
+ 4. **Role Fit** — Does this fill a missing role in the song?
98
+ 5. **Vibe Fit** — Taste graph alignment (if evidence exists)
99
+ 6. **Intent Fit** — Does the material serve the stated goal?
100
+
101
+ ## Reference Docs
102
+
103
+ - `references/sample-techniques.md` — Full 29-technique catalog
104
+ - `references/sample-critics.md` — Critic scoring details
105
+ - `references/sample-philosophy.md` — Surgeon vs Alchemist guide
@@ -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 |