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.
- package/.claude-plugin/marketplace.json +3 -3
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +223 -0
- package/CONTRIBUTING.md +2 -2
- package/LICENSE +62 -21
- package/README.md +291 -276
- package/bin/livepilot.js +87 -0
- package/installer/codex.js +147 -0
- package/livepilot/.Codex-plugin/plugin.json +2 -2
- package/livepilot/.claude-plugin/plugin.json +2 -2
- package/livepilot/skills/livepilot-arrangement/SKILL.md +18 -1
- package/livepilot/skills/livepilot-core/SKILL.md +22 -5
- package/livepilot/skills/livepilot-core/references/device-knowledge/00-index.md +34 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/automation-as-music.md +204 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/chains-genre.md +173 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/creative-thinking.md +211 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-distortion.md +188 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-space.md +162 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/effects-spectral.md +229 -0
- package/livepilot/skills/livepilot-core/references/device-knowledge/instruments-synths.md +243 -0
- package/livepilot/skills/livepilot-core/references/overview.md +13 -9
- package/livepilot/skills/livepilot-core/references/sample-manipulation.md +724 -0
- package/livepilot/skills/livepilot-core/references/sound-design-deep.md +140 -0
- package/livepilot/skills/livepilot-devices/SKILL.md +39 -4
- package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +1 -1
- package/livepilot/skills/livepilot-release/SKILL.md +23 -19
- package/livepilot/skills/livepilot-sample-engine/SKILL.md +105 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-critics.md +87 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-philosophy.md +51 -0
- package/livepilot/skills/livepilot-sample-engine/references/sample-techniques.md +131 -0
- package/livepilot/skills/livepilot-sound-design-engine/SKILL.md +45 -0
- package/livepilot/skills/livepilot-wonder/SKILL.md +17 -0
- package/livepilot.mcpb +0 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/manifest.json +4 -4
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/atlas/__init__.py +357 -0
- package/mcp_server/atlas/device_atlas.json +44067 -0
- package/mcp_server/atlas/enrichments/__init__.py +111 -0
- package/mcp_server/atlas/enrichments/audio_effects/auto_filter.yaml +162 -0
- package/mcp_server/atlas/enrichments/audio_effects/beat_repeat.yaml +183 -0
- package/mcp_server/atlas/enrichments/audio_effects/channel_eq.yaml +126 -0
- package/mcp_server/atlas/enrichments/audio_effects/chorus_ensemble.yaml +149 -0
- package/mcp_server/atlas/enrichments/audio_effects/color_limiter.yaml +109 -0
- package/mcp_server/atlas/enrichments/audio_effects/compressor.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb.yaml +143 -0
- package/mcp_server/atlas/enrichments/audio_effects/convolution_reverb_pro.yaml +178 -0
- package/mcp_server/atlas/enrichments/audio_effects/delay.yaml +151 -0
- package/mcp_server/atlas/enrichments/audio_effects/drum_buss.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/dynamic_tube.yaml +147 -0
- package/mcp_server/atlas/enrichments/audio_effects/echo.yaml +167 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_eight.yaml +148 -0
- package/mcp_server/atlas/enrichments/audio_effects/eq_three.yaml +121 -0
- package/mcp_server/atlas/enrichments/audio_effects/erosion.yaml +103 -0
- package/mcp_server/atlas/enrichments/audio_effects/filter_delay.yaml +173 -0
- package/mcp_server/atlas/enrichments/audio_effects/gate.yaml +130 -0
- package/mcp_server/atlas/enrichments/audio_effects/gated_delay.yaml +133 -0
- package/mcp_server/atlas/enrichments/audio_effects/glue_compressor.yaml +142 -0
- package/mcp_server/atlas/enrichments/audio_effects/grain_delay.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/hybrid_reverb.yaml +160 -0
- package/mcp_server/atlas/enrichments/audio_effects/limiter.yaml +97 -0
- package/mcp_server/atlas/enrichments/audio_effects/multiband_dynamics.yaml +174 -0
- package/mcp_server/atlas/enrichments/audio_effects/overdrive.yaml +119 -0
- package/mcp_server/atlas/enrichments/audio_effects/pedal.yaml +145 -0
- package/mcp_server/atlas/enrichments/audio_effects/phaser_flanger.yaml +161 -0
- package/mcp_server/atlas/enrichments/audio_effects/redux.yaml +114 -0
- package/mcp_server/atlas/enrichments/audio_effects/reverb.yaml +190 -0
- package/mcp_server/atlas/enrichments/audio_effects/roar.yaml +159 -0
- package/mcp_server/atlas/enrichments/audio_effects/saturator.yaml +146 -0
- package/mcp_server/atlas/enrichments/audio_effects/shifter.yaml +154 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_resonator.yaml +141 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_time.yaml +164 -0
- package/mcp_server/atlas/enrichments/audio_effects/vector_delay.yaml +140 -0
- package/mcp_server/atlas/enrichments/audio_effects/vinyl_distortion.yaml +141 -0
- package/mcp_server/atlas/enrichments/instruments/analog.yaml +222 -0
- package/mcp_server/atlas/enrichments/instruments/bass.yaml +202 -0
- package/mcp_server/atlas/enrichments/instruments/collision.yaml +150 -0
- package/mcp_server/atlas/enrichments/instruments/drift.yaml +167 -0
- package/mcp_server/atlas/enrichments/instruments/electric.yaml +137 -0
- package/mcp_server/atlas/enrichments/instruments/emit.yaml +163 -0
- package/mcp_server/atlas/enrichments/instruments/meld.yaml +164 -0
- package/mcp_server/atlas/enrichments/instruments/operator.yaml +197 -0
- package/mcp_server/atlas/enrichments/instruments/poli.yaml +192 -0
- package/mcp_server/atlas/enrichments/instruments/sampler.yaml +218 -0
- package/mcp_server/atlas/enrichments/instruments/simpler.yaml +217 -0
- package/mcp_server/atlas/enrichments/instruments/tension.yaml +156 -0
- package/mcp_server/atlas/enrichments/instruments/tree_tone.yaml +162 -0
- package/mcp_server/atlas/enrichments/instruments/vector_fm.yaml +165 -0
- package/mcp_server/atlas/enrichments/instruments/vector_grain.yaml +166 -0
- package/mcp_server/atlas/enrichments/instruments/wavetable.yaml +162 -0
- package/mcp_server/atlas/enrichments/midi_effects/arpeggiator.yaml +156 -0
- package/mcp_server/atlas/enrichments/midi_effects/bouncy_notes.yaml +93 -0
- package/mcp_server/atlas/enrichments/midi_effects/chord.yaml +147 -0
- package/mcp_server/atlas/enrichments/midi_effects/melodic_steps.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_echo.yaml +108 -0
- package/mcp_server/atlas/enrichments/midi_effects/note_length.yaml +97 -0
- package/mcp_server/atlas/enrichments/midi_effects/pitch.yaml +76 -0
- package/mcp_server/atlas/enrichments/midi_effects/random.yaml +117 -0
- package/mcp_server/atlas/enrichments/midi_effects/rhythmic_steps.yaml +103 -0
- package/mcp_server/atlas/enrichments/midi_effects/scale.yaml +83 -0
- package/mcp_server/atlas/enrichments/midi_effects/step_arp.yaml +112 -0
- package/mcp_server/atlas/enrichments/midi_effects/velocity.yaml +119 -0
- package/mcp_server/atlas/enrichments/utility/amp.yaml +159 -0
- package/mcp_server/atlas/enrichments/utility/cabinet.yaml +109 -0
- package/mcp_server/atlas/enrichments/utility/corpus.yaml +150 -0
- package/mcp_server/atlas/enrichments/utility/resonators.yaml +131 -0
- package/mcp_server/atlas/enrichments/utility/spectrum.yaml +63 -0
- package/mcp_server/atlas/enrichments/utility/tuner.yaml +51 -0
- package/mcp_server/atlas/enrichments/utility/utility.yaml +136 -0
- package/mcp_server/atlas/enrichments/utility/vocoder.yaml +160 -0
- package/mcp_server/atlas/scanner.py +236 -0
- package/mcp_server/atlas/tools.py +224 -0
- package/mcp_server/composer/__init__.py +1 -0
- package/mcp_server/composer/engine.py +532 -0
- package/mcp_server/composer/layer_planner.py +427 -0
- package/mcp_server/composer/prompt_parser.py +329 -0
- package/mcp_server/composer/sample_resolver.py +153 -0
- package/mcp_server/composer/tools.py +211 -0
- package/mcp_server/connection.py +53 -8
- package/mcp_server/corpus/__init__.py +377 -0
- package/mcp_server/device_forge/__init__.py +1 -0
- package/mcp_server/device_forge/builder.py +377 -0
- package/mcp_server/device_forge/models.py +142 -0
- package/mcp_server/device_forge/templates.py +483 -0
- package/mcp_server/device_forge/tools.py +162 -0
- package/mcp_server/m4l_bridge.py +1 -0
- package/mcp_server/memory/taste_accessors.py +47 -0
- package/mcp_server/preview_studio/engine.py +9 -2
- package/mcp_server/preview_studio/tools.py +78 -35
- package/mcp_server/project_brain/tools.py +34 -0
- package/mcp_server/runtime/capability_probe.py +21 -2
- package/mcp_server/runtime/execution_router.py +184 -38
- package/mcp_server/runtime/live_version.py +102 -0
- package/mcp_server/runtime/mcp_dispatch.py +46 -0
- package/mcp_server/runtime/remote_commands.py +13 -5
- package/mcp_server/runtime/tools.py +66 -29
- package/mcp_server/sample_engine/__init__.py +1 -0
- package/mcp_server/sample_engine/analyzer.py +216 -0
- package/mcp_server/sample_engine/critics.py +390 -0
- package/mcp_server/sample_engine/models.py +193 -0
- package/mcp_server/sample_engine/moves.py +127 -0
- package/mcp_server/sample_engine/planner.py +186 -0
- package/mcp_server/sample_engine/slice_workflow.py +190 -0
- package/mcp_server/sample_engine/sources.py +540 -0
- package/mcp_server/sample_engine/techniques.py +908 -0
- package/mcp_server/sample_engine/tools.py +545 -0
- package/mcp_server/semantic_moves/__init__.py +3 -0
- package/mcp_server/semantic_moves/device_creation_moves.py +237 -0
- package/mcp_server/semantic_moves/mix_moves.py +8 -8
- package/mcp_server/semantic_moves/models.py +7 -7
- package/mcp_server/semantic_moves/performance_moves.py +4 -4
- package/mcp_server/semantic_moves/sample_compilers.py +377 -0
- package/mcp_server/semantic_moves/sound_design_moves.py +4 -4
- package/mcp_server/semantic_moves/tools.py +63 -10
- package/mcp_server/semantic_moves/transition_moves.py +4 -4
- package/mcp_server/server.py +71 -1
- package/mcp_server/session_continuity/tracker.py +4 -1
- package/mcp_server/sound_design/critics.py +89 -1
- package/mcp_server/splice_client/__init__.py +1 -0
- package/mcp_server/splice_client/client.py +347 -0
- package/mcp_server/splice_client/models.py +96 -0
- package/mcp_server/splice_client/protos/__init__.py +1 -0
- package/mcp_server/splice_client/protos/app_pb2.py +319 -0
- package/mcp_server/splice_client/protos/app_pb2.pyi +1153 -0
- package/mcp_server/splice_client/protos/app_pb2_grpc.py +1946 -0
- package/mcp_server/tools/_conductor.py +16 -0
- package/mcp_server/tools/_planner_engine.py +24 -0
- package/mcp_server/tools/analyzer.py +2 -0
- package/mcp_server/tools/arrangement.py +69 -0
- package/mcp_server/tools/automation.py +15 -2
- package/mcp_server/tools/devices.py +117 -6
- package/mcp_server/tools/notes.py +37 -4
- package/mcp_server/tools/planner.py +3 -0
- package/mcp_server/wonder_mode/diagnosis.py +5 -0
- package/mcp_server/wonder_mode/engine.py +144 -14
- package/mcp_server/wonder_mode/tools.py +33 -1
- package/package.json +14 -4
- package/remote_script/LivePilot/__init__.py +8 -1
- package/remote_script/LivePilot/arrangement.py +114 -0
- package/remote_script/LivePilot/browser.py +56 -1
- package/remote_script/LivePilot/devices.py +246 -6
- package/remote_script/LivePilot/mixing.py +8 -3
- package/remote_script/LivePilot/server.py +5 -1
- package/remote_script/LivePilot/transport.py +3 -0
- package/remote_script/LivePilot/version_detect.py +78 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"""Device-creation-domain semantic moves — generate custom M4L devices.
|
|
2
|
+
|
|
3
|
+
These moves create new instruments and effects on the fly using the
|
|
4
|
+
Device Forge. Each move specifies a gen~ template and parameters.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .models import SemanticMove
|
|
8
|
+
from .registry import register
|
|
9
|
+
|
|
10
|
+
CREATE_CHAOS_MODULATOR = SemanticMove(
|
|
11
|
+
move_id="create_chaos_modulator",
|
|
12
|
+
family="device_creation",
|
|
13
|
+
intent="Generate a Lorenz attractor M4L device for chaotic modulation — "
|
|
14
|
+
"smooth but unpredictable parameter movement",
|
|
15
|
+
targets={"novelty": 0.8, "motion": 0.6, "surprise": 0.7},
|
|
16
|
+
protect={"clarity": 0.5},
|
|
17
|
+
risk_level="medium",
|
|
18
|
+
plan_template=[
|
|
19
|
+
{
|
|
20
|
+
"tool": "generate_m4l_effect",
|
|
21
|
+
"params": {
|
|
22
|
+
"name": "Wonder Chaos Mod",
|
|
23
|
+
"device_type": "audio_effect",
|
|
24
|
+
"description": "Lorenz attractor chaotic modulation source",
|
|
25
|
+
},
|
|
26
|
+
"description": "Generate chaos modulator M4L device",
|
|
27
|
+
"backend": "mcp_tool",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"tool": "find_and_load_device",
|
|
31
|
+
"params": {"query": "Wonder Chaos Mod"},
|
|
32
|
+
"description": "Load generated device onto target track",
|
|
33
|
+
"backend": "remote_command",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
verification_plan=[
|
|
37
|
+
{"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
|
|
38
|
+
],
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
CREATE_FEEDBACK_RESONATOR = SemanticMove(
|
|
42
|
+
move_id="create_feedback_resonator",
|
|
43
|
+
family="device_creation",
|
|
44
|
+
intent="Generate a tuned comb resonator M4L device — feeds harmonic resonance "
|
|
45
|
+
"at a specific frequency into the signal",
|
|
46
|
+
targets={"depth": 0.6, "texture": 0.5, "novelty": 0.4},
|
|
47
|
+
protect={"clarity": 0.6, "punch": 0.5},
|
|
48
|
+
risk_level="low",
|
|
49
|
+
plan_template=[
|
|
50
|
+
{
|
|
51
|
+
"tool": "generate_m4l_effect",
|
|
52
|
+
"params": {
|
|
53
|
+
"name": "Wonder Resonator",
|
|
54
|
+
"device_type": "audio_effect",
|
|
55
|
+
"description": "Tuned comb filter resonator",
|
|
56
|
+
},
|
|
57
|
+
"description": "Generate resonator M4L device",
|
|
58
|
+
"backend": "mcp_tool",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"tool": "find_and_load_device",
|
|
62
|
+
"params": {"query": "Wonder Resonator"},
|
|
63
|
+
"description": "Load resonator onto target track",
|
|
64
|
+
"backend": "remote_command",
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
verification_plan=[
|
|
68
|
+
{"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
|
|
69
|
+
],
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
CREATE_WAVEFOLDER_EFFECT = SemanticMove(
|
|
73
|
+
move_id="create_wavefolder_effect",
|
|
74
|
+
family="device_creation",
|
|
75
|
+
intent="Generate a Buchla-style wavefolder M4L effect — rich harmonic series "
|
|
76
|
+
"from waveform folding, great for adding edge and complexity",
|
|
77
|
+
targets={"edge": 0.6, "novelty": 0.5, "energy": 0.4},
|
|
78
|
+
protect={"warmth": 0.5},
|
|
79
|
+
risk_level="medium",
|
|
80
|
+
plan_template=[
|
|
81
|
+
{
|
|
82
|
+
"tool": "generate_m4l_effect",
|
|
83
|
+
"params": {
|
|
84
|
+
"name": "Wonder Wavefolder",
|
|
85
|
+
"device_type": "audio_effect",
|
|
86
|
+
"description": "Buchla-style harmonic wavefolder",
|
|
87
|
+
},
|
|
88
|
+
"description": "Generate wavefolder M4L device",
|
|
89
|
+
"backend": "mcp_tool",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"tool": "find_and_load_device",
|
|
93
|
+
"params": {"query": "Wonder Wavefolder"},
|
|
94
|
+
"description": "Load wavefolder onto target track",
|
|
95
|
+
"backend": "remote_command",
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
verification_plan=[
|
|
99
|
+
{"tool": "get_track_meters", "check": "track producing audio with harmonic content", "backend": "remote_command"},
|
|
100
|
+
],
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
CREATE_BITCRUSHER_EFFECT = SemanticMove(
|
|
104
|
+
move_id="create_bitcrusher_effect",
|
|
105
|
+
family="device_creation",
|
|
106
|
+
intent="Generate a bitcrusher M4L effect — sample-rate and bit-depth reduction "
|
|
107
|
+
"from subtle aliasing to full digital destruction",
|
|
108
|
+
targets={"edge": 0.5, "novelty": 0.4, "texture": 0.4},
|
|
109
|
+
protect={"clarity": 0.4},
|
|
110
|
+
risk_level="low",
|
|
111
|
+
plan_template=[
|
|
112
|
+
{
|
|
113
|
+
"tool": "generate_m4l_effect",
|
|
114
|
+
"params": {
|
|
115
|
+
"name": "Wonder Bitcrusher",
|
|
116
|
+
"device_type": "audio_effect",
|
|
117
|
+
"description": "Sample-rate and bit-depth crusher",
|
|
118
|
+
},
|
|
119
|
+
"description": "Generate bitcrusher M4L device",
|
|
120
|
+
"backend": "mcp_tool",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"tool": "find_and_load_device",
|
|
124
|
+
"params": {"query": "Wonder Bitcrusher"},
|
|
125
|
+
"description": "Load bitcrusher onto target track",
|
|
126
|
+
"backend": "remote_command",
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
verification_plan=[
|
|
130
|
+
{"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
|
|
131
|
+
],
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
CREATE_KARPLUS_STRING = SemanticMove(
|
|
135
|
+
move_id="create_karplus_string",
|
|
136
|
+
family="device_creation",
|
|
137
|
+
intent="Generate a Karplus-Strong string synth M4L instrument — plucked string "
|
|
138
|
+
"physical model with excitation input",
|
|
139
|
+
targets={"novelty": 0.5, "texture": 0.6, "depth": 0.4},
|
|
140
|
+
protect={"clarity": 0.6},
|
|
141
|
+
risk_level="low",
|
|
142
|
+
plan_template=[
|
|
143
|
+
{
|
|
144
|
+
"tool": "generate_m4l_effect",
|
|
145
|
+
"params": {
|
|
146
|
+
"name": "Wonder String",
|
|
147
|
+
"device_type": "audio_effect",
|
|
148
|
+
"description": "Karplus-Strong plucked string physical model",
|
|
149
|
+
},
|
|
150
|
+
"description": "Generate string synth M4L device",
|
|
151
|
+
"backend": "mcp_tool",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"tool": "find_and_load_device",
|
|
155
|
+
"params": {"query": "Wonder String"},
|
|
156
|
+
"description": "Load string synth onto target track",
|
|
157
|
+
"backend": "remote_command",
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
verification_plan=[
|
|
161
|
+
{"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
|
|
162
|
+
],
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
CREATE_STOCHASTIC_TEXTURE = SemanticMove(
|
|
166
|
+
move_id="create_stochastic_texture",
|
|
167
|
+
family="device_creation",
|
|
168
|
+
intent="Generate a stochastic resonance M4L effect — noise + threshold + feedback "
|
|
169
|
+
"creates granular textures and organic movement",
|
|
170
|
+
targets={"texture": 0.7, "novelty": 0.6, "motion": 0.5},
|
|
171
|
+
protect={"clarity": 0.4},
|
|
172
|
+
risk_level="medium",
|
|
173
|
+
plan_template=[
|
|
174
|
+
{
|
|
175
|
+
"tool": "generate_m4l_effect",
|
|
176
|
+
"params": {
|
|
177
|
+
"name": "Wonder Stochastic",
|
|
178
|
+
"device_type": "audio_effect",
|
|
179
|
+
"description": "Stochastic resonance texture generator",
|
|
180
|
+
},
|
|
181
|
+
"description": "Generate stochastic texture M4L device",
|
|
182
|
+
"backend": "mcp_tool",
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"tool": "find_and_load_device",
|
|
186
|
+
"params": {"query": "Wonder Stochastic"},
|
|
187
|
+
"description": "Load stochastic texture device onto target track",
|
|
188
|
+
"backend": "remote_command",
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
verification_plan=[
|
|
192
|
+
{"tool": "get_track_meters", "check": "track producing audio", "backend": "remote_command"},
|
|
193
|
+
],
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
CREATE_FDN_REVERB = SemanticMove(
|
|
197
|
+
move_id="create_fdn_reverb",
|
|
198
|
+
family="device_creation",
|
|
199
|
+
intent="Generate a feedback delay network M4L effect — dense, diffuse reverb "
|
|
200
|
+
"with Hadamard-like cross-coupling. Tune delay times for harmonic reverb.",
|
|
201
|
+
targets={"depth": 0.7, "width": 0.5, "novelty": 0.4},
|
|
202
|
+
protect={"punch": 0.5, "clarity": 0.5},
|
|
203
|
+
risk_level="low",
|
|
204
|
+
plan_template=[
|
|
205
|
+
{
|
|
206
|
+
"tool": "generate_m4l_effect",
|
|
207
|
+
"params": {
|
|
208
|
+
"name": "Wonder FDN Verb",
|
|
209
|
+
"device_type": "audio_effect",
|
|
210
|
+
"description": "Feedback delay network reverb",
|
|
211
|
+
},
|
|
212
|
+
"description": "Generate FDN reverb M4L device",
|
|
213
|
+
"backend": "mcp_tool",
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"tool": "find_and_load_device",
|
|
217
|
+
"params": {"query": "Wonder FDN Verb"},
|
|
218
|
+
"description": "Load FDN reverb onto target track",
|
|
219
|
+
"backend": "remote_command",
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
verification_plan=[
|
|
223
|
+
{"tool": "get_track_meters", "check": "track producing audio with reverb tail", "backend": "remote_command"},
|
|
224
|
+
],
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# Register all device creation moves
|
|
228
|
+
for _move in [
|
|
229
|
+
CREATE_CHAOS_MODULATOR,
|
|
230
|
+
CREATE_FEEDBACK_RESONATOR,
|
|
231
|
+
CREATE_WAVEFOLDER_EFFECT,
|
|
232
|
+
CREATE_BITCRUSHER_EFFECT,
|
|
233
|
+
CREATE_KARPLUS_STRING,
|
|
234
|
+
CREATE_STOCHASTIC_TEXTURE,
|
|
235
|
+
CREATE_FDN_REVERB,
|
|
236
|
+
]:
|
|
237
|
+
register(_move)
|
|
@@ -10,7 +10,7 @@ TIGHTEN_LOW_END = SemanticMove(
|
|
|
10
10
|
targets={"weight": 0.4, "punch": 0.3, "clarity": 0.3},
|
|
11
11
|
protect={"warmth": 0.6},
|
|
12
12
|
risk_level="low",
|
|
13
|
-
|
|
13
|
+
plan_template=[
|
|
14
14
|
{"tool": "get_master_spectrum", "params": {}, "description": "Check current sub/low balance", "backend": "mcp_tool"},
|
|
15
15
|
{"tool": "set_device_parameter", "params": {"description": "High-pass sub bass around 30-40 Hz"}, "description": "HP filter sub rumble", "backend": "remote_command"},
|
|
16
16
|
{"tool": "set_track_volume", "params": {"description": "Reduce sub bass volume 5-10% if sub > 50%"}, "description": "Reduce sub volume", "backend": "remote_command"},
|
|
@@ -29,7 +29,7 @@ WIDEN_STEREO = SemanticMove(
|
|
|
29
29
|
targets={"width": 0.5, "clarity": 0.3, "depth": 0.2},
|
|
30
30
|
protect={"cohesion": 0.7},
|
|
31
31
|
risk_level="low",
|
|
32
|
-
|
|
32
|
+
plan_template=[
|
|
33
33
|
{"tool": "analyze_mix", "params": {}, "description": "Check current stereo state", "backend": "mcp_tool"},
|
|
34
34
|
{"tool": "set_track_pan", "params": {"description": "Pan harmonic elements wider: +/-25-40%"}, "description": "Pan harmonics wider", "backend": "remote_command"},
|
|
35
35
|
{"tool": "set_track_pan", "params": {"description": "Pan percussion subtly: +/-10-20%"}, "description": "Pan perc subtly", "backend": "remote_command"},
|
|
@@ -48,7 +48,7 @@ MAKE_PUNCHIER = SemanticMove(
|
|
|
48
48
|
targets={"punch": 0.5, "energy": 0.3, "contrast": 0.2},
|
|
49
49
|
protect={"clarity": 0.7, "warmth": 0.5},
|
|
50
50
|
risk_level="low",
|
|
51
|
-
|
|
51
|
+
plan_template=[
|
|
52
52
|
{"tool": "get_track_meters", "params": {"include_stereo": True}, "description": "Read current levels", "backend": "remote_command"},
|
|
53
53
|
{"tool": "set_track_volume", "params": {"description": "Push drum track +5-8%"}, "description": "Push drum level", "backend": "remote_command"},
|
|
54
54
|
{"tool": "set_track_volume", "params": {"description": "Pull pad/texture -5-10%"}, "description": "Pull back pads", "backend": "remote_command"},
|
|
@@ -67,7 +67,7 @@ DARKEN_MIX = SemanticMove(
|
|
|
67
67
|
targets={"warmth": 0.5, "depth": 0.3, "width": 0.2},
|
|
68
68
|
protect={"width": 0.7, "clarity": 0.5},
|
|
69
69
|
risk_level="low",
|
|
70
|
-
|
|
70
|
+
plan_template=[
|
|
71
71
|
{"tool": "get_master_spectrum", "params": {}, "description": "Check current tonal balance", "backend": "mcp_tool"},
|
|
72
72
|
{"tool": "set_device_parameter", "params": {"description": "Lower EQ/Auto Filter high shelf -2-4dB on bright tracks"}, "description": "Roll off highs", "backend": "remote_command"},
|
|
73
73
|
{"tool": "set_track_send", "params": {"description": "Increase reverb send on darkened elements for depth compensation"}, "description": "Compensate depth", "backend": "remote_command"},
|
|
@@ -85,7 +85,7 @@ REDUCE_REPETITION = SemanticMove(
|
|
|
85
85
|
targets={"motion": 0.4, "novelty": 0.3, "contrast": 0.3},
|
|
86
86
|
protect={"cohesion": 0.6},
|
|
87
87
|
risk_level="medium",
|
|
88
|
-
|
|
88
|
+
plan_template=[
|
|
89
89
|
{"tool": "apply_automation_shape", "params": {"curve_type": "perlin", "description": "Perlin noise on filter cutoff"}, "description": "Add organic filter drift", "backend": "mcp_tool"},
|
|
90
90
|
{"tool": "apply_automation_shape", "params": {"curve_type": "perlin", "description": "Perlin noise on send levels"}, "description": "Add depth movement", "backend": "mcp_tool"},
|
|
91
91
|
{"tool": "set_device_parameter", "params": {"description": "Increase Beat Repeat variation or chance"}, "description": "Add rhythmic variation", "backend": "remote_command"},
|
|
@@ -103,7 +103,7 @@ MAKE_KICK_BASS_LOCK = SemanticMove(
|
|
|
103
103
|
targets={"weight": 0.4, "punch": 0.3, "groove": 0.3},
|
|
104
104
|
protect={"warmth": 0.6, "cohesion": 0.7},
|
|
105
105
|
risk_level="low",
|
|
106
|
-
|
|
106
|
+
plan_template=[
|
|
107
107
|
{"tool": "get_device_parameters", "params": {"description": "Read bass EQ/filter state"}, "description": "Inspect bass chain", "backend": "remote_command"},
|
|
108
108
|
{"tool": "set_device_parameter", "params": {"description": "High-pass bass at 40-60 Hz to clear space for kick sub"}, "description": "HP bass for kick clearance", "backend": "remote_command"},
|
|
109
109
|
{"tool": "set_device_parameter", "params": {"description": "Sidechain compressor or volume duck on bass from kick"}, "description": "Duck bass on kick hits", "backend": "remote_command"},
|
|
@@ -121,7 +121,7 @@ CREATE_BUILDUP_TENSION = SemanticMove(
|
|
|
121
121
|
targets={"tension": 0.5, "energy": 0.3, "contrast": 0.2},
|
|
122
122
|
protect={"clarity": 0.6},
|
|
123
123
|
risk_level="medium",
|
|
124
|
-
|
|
124
|
+
plan_template=[
|
|
125
125
|
{"tool": "apply_gesture_template", "params": {"template_name": "tension_ratchet"}, "description": "Apply staged tension ratchet", "backend": "mcp_tool"},
|
|
126
126
|
{"tool": "apply_automation_shape", "params": {"curve_type": "exponential", "description": "Rising HP filter over 4-8 bars"}, "description": "HP filter rise", "backend": "mcp_tool"},
|
|
127
127
|
{"tool": "set_track_send", "params": {"description": "Increase reverb send for wash effect"}, "description": "Add reverb wash", "backend": "remote_command"},
|
|
@@ -139,7 +139,7 @@ SMOOTH_SCENE_HANDOFF = SemanticMove(
|
|
|
139
139
|
targets={"cohesion": 0.5, "motion": 0.3, "contrast": 0.2},
|
|
140
140
|
protect={"clarity": 0.7},
|
|
141
141
|
risk_level="low",
|
|
142
|
-
|
|
142
|
+
plan_template=[
|
|
143
143
|
{"tool": "apply_gesture_template", "params": {"template_name": "pre_arrival_vacuum"}, "description": "Pull energy back before transition", "backend": "mcp_tool"},
|
|
144
144
|
{"tool": "apply_gesture_template", "params": {"template_name": "re_entry_spotlight"}, "description": "Spotlight returning elements", "backend": "mcp_tool"},
|
|
145
145
|
],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""SemanticMove — high-level musical intent that compiles to tool sequences.
|
|
2
2
|
|
|
3
3
|
A semantic move expresses WHAT to achieve musically, not HOW to achieve it
|
|
4
|
-
parametrically. Each move has a
|
|
5
|
-
|
|
4
|
+
parametrically. Each move has a plan_template (static metadata for discovery)
|
|
5
|
+
and is compiled at runtime through compiler.compile() for executable plans.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
@@ -15,13 +15,13 @@ class SemanticMove:
|
|
|
15
15
|
"""A musical action expressed as intent, not parameters."""
|
|
16
16
|
|
|
17
17
|
move_id: str
|
|
18
|
-
family: str # mix, arrangement, transition, sound_design, performance
|
|
18
|
+
family: str # mix, arrangement, transition, sound_design, performance, sample
|
|
19
19
|
intent: str # human-readable description of the musical goal
|
|
20
20
|
targets: dict = field(default_factory=dict) # dimension -> weight
|
|
21
21
|
protect: dict = field(default_factory=dict) # dimension -> threshold
|
|
22
22
|
risk_level: str = "low" # low, medium, high
|
|
23
23
|
required_capabilities: list = field(default_factory=list)
|
|
24
|
-
|
|
24
|
+
plan_template: list = field(default_factory=list) # [{tool, params, description}] — static metadata, NOT runtime truth
|
|
25
25
|
verification_plan: list = field(default_factory=list) # [{tool, check}]
|
|
26
26
|
confidence: float = 0.7
|
|
27
27
|
|
|
@@ -34,13 +34,13 @@ class SemanticMove:
|
|
|
34
34
|
"protect": self.protect,
|
|
35
35
|
"risk_level": self.risk_level,
|
|
36
36
|
"required_capabilities": self.required_capabilities,
|
|
37
|
-
"
|
|
37
|
+
"plan_template_steps": len(self.plan_template),
|
|
38
38
|
"confidence": self.confidence,
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
def to_full_dict(self) -> dict:
|
|
42
|
-
"""Full representation including
|
|
42
|
+
"""Full representation including plan template and verification plans."""
|
|
43
43
|
d = self.to_dict()
|
|
44
|
-
d["
|
|
44
|
+
d["plan_template"] = self.plan_template
|
|
45
45
|
d["verification_plan"] = self.verification_plan
|
|
46
46
|
return d
|
|
@@ -15,7 +15,7 @@ RECOVER_ENERGY = SemanticMove(
|
|
|
15
15
|
protect={"clarity": 0.7},
|
|
16
16
|
risk_level="low",
|
|
17
17
|
required_capabilities=["session"],
|
|
18
|
-
|
|
18
|
+
plan_template=[
|
|
19
19
|
{"tool": "set_track_volume", "params": {"description": "Gradually restore drum volume"}, "description": "Bring drums back", "backend": "remote_command"},
|
|
20
20
|
{"tool": "set_track_volume", "params": {"description": "Restore bass volume"}, "description": "Bring bass back", "backend": "remote_command"},
|
|
21
21
|
{"tool": "set_track_send", "params": {"description": "Reduce reverb send to tighten mix"}, "description": "Tighten reverb", "backend": "remote_command"},
|
|
@@ -33,7 +33,7 @@ DECOMPRESS_TENSION = SemanticMove(
|
|
|
33
33
|
protect={"cohesion": 0.6},
|
|
34
34
|
risk_level="low",
|
|
35
35
|
required_capabilities=["session"],
|
|
36
|
-
|
|
36
|
+
plan_template=[
|
|
37
37
|
{"tool": "set_track_volume", "params": {"description": "Pull back high-energy elements 15-20%"}, "description": "Pull energy down", "backend": "remote_command"},
|
|
38
38
|
{"tool": "set_track_send", "params": {"description": "Increase reverb for spaciousness"}, "description": "Open space", "backend": "remote_command"},
|
|
39
39
|
],
|
|
@@ -50,7 +50,7 @@ SAFE_SPOTLIGHT = SemanticMove(
|
|
|
50
50
|
protect={"cohesion": 0.7, "energy": 0.5},
|
|
51
51
|
risk_level="low",
|
|
52
52
|
required_capabilities=["session"],
|
|
53
|
-
|
|
53
|
+
plan_template=[
|
|
54
54
|
{"tool": "set_track_volume", "params": {"description": "Pull non-spotlight tracks to 30-40%"}, "description": "Pull background", "backend": "remote_command"},
|
|
55
55
|
{"tool": "set_track_volume", "params": {"description": "Push spotlight track to 80-85%"}, "description": "Push spotlight", "backend": "remote_command"},
|
|
56
56
|
],
|
|
@@ -67,7 +67,7 @@ EMERGENCY_SIMPLIFY = SemanticMove(
|
|
|
67
67
|
protect={"energy": 0.3},
|
|
68
68
|
risk_level="low",
|
|
69
69
|
required_capabilities=["session"],
|
|
70
|
-
|
|
70
|
+
plan_template=[
|
|
71
71
|
{"tool": "set_track_volume", "params": {"description": "Pull all non-rhythm tracks to 10-15%"}, "description": "Strip to essentials", "backend": "remote_command"},
|
|
72
72
|
{"tool": "set_track_volume", "params": {"description": "Keep drums at current level"}, "description": "Maintain rhythm", "backend": "remote_command"},
|
|
73
73
|
],
|