livepilot 1.15.0-beta → 1.16.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/CHANGELOG.md +206 -3
- package/README.md +11 -11
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/atlas/device_atlas.json +91219 -7161
- package/mcp_server/atlas/enrichments/audio_effects/pitch_hack.yaml +61 -0
- package/mcp_server/atlas/enrichments/audio_effects/pitchloop89.yaml +111 -0
- package/mcp_server/atlas/enrichments/audio_effects/re_enveloper.yaml +51 -0
- package/mcp_server/atlas/enrichments/audio_effects/snipper.yaml +36 -0
- package/mcp_server/atlas/enrichments/audio_effects/spectral_blur.yaml +64 -0
- package/mcp_server/atlas/enrichments/instruments/bell_tower.yaml +37 -0
- package/mcp_server/atlas/enrichments/instruments/granulator_iii.yaml +124 -0
- package/mcp_server/atlas/enrichments/instruments/harmonic_drone_generator.yaml +83 -0
- package/mcp_server/atlas/enrichments/instruments/impulse.yaml +47 -0
- package/mcp_server/atlas/enrichments/instruments/sting_iftah.yaml +44 -0
- package/mcp_server/atlas/enrichments/midi_effects/expressive_chords.yaml +38 -0
- package/mcp_server/atlas/enrichments/midi_effects/filler.yaml +32 -0
- package/mcp_server/atlas/enrichments/midi_effects/microtuner.yaml +83 -0
- package/mcp_server/atlas/enrichments/midi_effects/patterns_iftah.yaml +38 -0
- package/mcp_server/atlas/enrichments/midi_effects/phase_pattern.yaml +51 -0
- package/mcp_server/atlas/enrichments/midi_effects/polyrhythm.yaml +46 -0
- package/mcp_server/atlas/enrichments/midi_effects/retrigger.yaml +40 -0
- package/mcp_server/atlas/enrichments/midi_effects/slice_shuffler.yaml +39 -0
- package/mcp_server/atlas/enrichments/midi_effects/sq_sequencer.yaml +39 -0
- package/mcp_server/atlas/enrichments/midi_effects/stages.yaml +38 -0
- package/mcp_server/atlas/enrichments/utility/arrangement_looper.yaml +31 -0
- package/mcp_server/atlas/enrichments/utility/cv_clock_in.yaml +25 -0
- package/mcp_server/atlas/enrichments/utility/cv_clock_out.yaml +25 -0
- package/mcp_server/atlas/enrichments/utility/cv_envelope_follower.yaml +38 -0
- package/mcp_server/atlas/enrichments/utility/cv_in.yaml +26 -0
- package/mcp_server/atlas/enrichments/utility/cv_instrument.yaml +34 -0
- package/mcp_server/atlas/enrichments/utility/cv_lfo.yaml +38 -0
- package/mcp_server/atlas/enrichments/utility/cv_shaper.yaml +35 -0
- package/mcp_server/atlas/enrichments/utility/cv_triggers.yaml +26 -0
- package/mcp_server/atlas/enrichments/utility/cv_utility.yaml +37 -0
- package/mcp_server/atlas/enrichments/utility/performer.yaml +36 -0
- package/mcp_server/atlas/enrichments/utility/prearranger.yaml +36 -0
- package/mcp_server/atlas/enrichments/utility/rotating_rhythm_generator.yaml +35 -0
- package/mcp_server/atlas/enrichments/utility/surround_panner.yaml +40 -0
- package/mcp_server/atlas/enrichments/utility/variations.yaml +40 -0
- package/mcp_server/atlas/enrichments/utility/vector_map.yaml +36 -0
- package/mcp_server/atlas/tools.py +30 -2
- package/mcp_server/runtime/remote_commands.py +3 -0
- package/mcp_server/sample_engine/tools.py +738 -60
- package/mcp_server/server.py +18 -6
- package/mcp_server/splice_client/client.py +583 -65
- package/mcp_server/splice_client/http_bridge.py +434 -0
- package/mcp_server/splice_client/models.py +278 -2
- package/mcp_server/splice_client/quota.py +229 -0
- package/mcp_server/tools/_analyzer_engine/__init__.py +4 -0
- package/mcp_server/tools/_analyzer_engine/sample.py +73 -0
- package/mcp_server/tools/analyzer.py +730 -29
- package/mcp_server/tools/browser.py +164 -13
- package/mcp_server/tools/devices.py +56 -11
- package/mcp_server/tools/mixing.py +64 -15
- package/mcp_server/tools/scales.py +18 -6
- package/mcp_server/tools/tracks.py +92 -4
- package/package.json +2 -2
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/_clip_helpers.py +86 -0
- package/remote_script/LivePilot/_drum_helpers.py +40 -0
- package/remote_script/LivePilot/_scale_helpers.py +87 -0
- package/remote_script/LivePilot/arrangement.py +44 -15
- package/remote_script/LivePilot/clips.py +182 -2
- package/remote_script/LivePilot/devices.py +82 -2
- package/remote_script/LivePilot/notes.py +17 -2
- package/remote_script/LivePilot/scales.py +31 -16
- package/remote_script/LivePilot/simpler_sample.py +105 -17
- package/server.json +3 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
id: cv_lfo
|
|
2
|
+
name: CV LFO
|
|
3
|
+
sonic_description: >
|
|
4
|
+
M4L LFO generator from CV Tools. Originally designed to send CV to
|
|
5
|
+
modular systems via a DC-coupled audio interface, but equally useful as
|
|
6
|
+
an extra LFO inside Live — route its output audio to modulate any Live
|
|
7
|
+
parameter via a return-track sidechain or internal MIDI mapping. When
|
|
8
|
+
you want more LFOs than a synth natively provides, CV LFO is the
|
|
9
|
+
answer.
|
|
10
|
+
category: modulation_source
|
|
11
|
+
character_tags: [lfo, modulation, cv, internal_modulation]
|
|
12
|
+
use_cases: [extra_lfo, modular_cv, parameter_modulation]
|
|
13
|
+
genre_affinity:
|
|
14
|
+
primary: [modular, experimental, deep_minimal]
|
|
15
|
+
secondary: [all]
|
|
16
|
+
complexity: beginner
|
|
17
|
+
introduced_in: "10.0"
|
|
18
|
+
pack: CV Tools
|
|
19
|
+
creator: Ableton
|
|
20
|
+
class_name: PluginDevice
|
|
21
|
+
requires_modular_hardware: false # useful even without modular
|
|
22
|
+
|
|
23
|
+
key_parameters:
|
|
24
|
+
- name: "Rate"
|
|
25
|
+
description: "LFO frequency — Hz or tempo-synced."
|
|
26
|
+
- name: "Waveform"
|
|
27
|
+
description: "Sine / Triangle / Saw / Square / Random / custom shape."
|
|
28
|
+
- name: "Depth"
|
|
29
|
+
description: "Output amplitude — controls modulation depth at the destination."
|
|
30
|
+
- name: "Offset"
|
|
31
|
+
description: "DC offset — pre-bias the modulation range."
|
|
32
|
+
signature_techniques:
|
|
33
|
+
- name: "Multi-LFO stack on a patch"
|
|
34
|
+
description: "Drop 3x CV LFO on a return track, each at different rates (0.07Hz, 0.23Hz, 1.11Hz), route outputs to filter/amp/pitch → organic drift that doesn't repeat."
|
|
35
|
+
aesthetic: [ambient, deep_minimal]
|
|
36
|
+
|
|
37
|
+
learn_more:
|
|
38
|
+
official: "https://www.ableton.com/en/packs/cv-tools/"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: cv_shaper
|
|
2
|
+
name: CV Shaper
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Create flexible CV shapes inside Live, then send to modular OR use
|
|
5
|
+
internally. Draw custom envelopes/LFOs on a graphical canvas. Useful
|
|
6
|
+
WITHOUT modular hardware as a free-form envelope/LFO source for any
|
|
7
|
+
Live parameter.
|
|
8
|
+
category: modulation_source
|
|
9
|
+
character_tags: [cv, custom_shape, envelope, lfo]
|
|
10
|
+
use_cases: [custom_envelope, bespoke_lfo, parameter_modulation]
|
|
11
|
+
genre_affinity:
|
|
12
|
+
primary: [modular, experimental, deep_minimal]
|
|
13
|
+
secondary: [all]
|
|
14
|
+
complexity: intermediate
|
|
15
|
+
introduced_in: "10.0"
|
|
16
|
+
pack: CV Tools
|
|
17
|
+
creator: Ableton
|
|
18
|
+
class_name: PluginDevice
|
|
19
|
+
requires_modular_hardware: false # useful internally too
|
|
20
|
+
|
|
21
|
+
key_parameters:
|
|
22
|
+
- name: "Shape Canvas"
|
|
23
|
+
description: "Draw the CV curve graphically."
|
|
24
|
+
- name: "Rate"
|
|
25
|
+
description: "Cycle time — tempo-sync or free."
|
|
26
|
+
- name: "Scale / Offset"
|
|
27
|
+
description: "Output amplitude and DC offset."
|
|
28
|
+
|
|
29
|
+
signature_techniques:
|
|
30
|
+
- name: "Bespoke ADSR for any parameter"
|
|
31
|
+
description: "Need a parameter envelope shape that's not on the device? Draw it in CV Shaper, route to the parameter. Unlimited curve flexibility."
|
|
32
|
+
aesthetic: [all]
|
|
33
|
+
|
|
34
|
+
learn_more:
|
|
35
|
+
official: "https://www.ableton.com/en/packs/cv-tools/"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
id: cv_triggers
|
|
2
|
+
name: CV Triggers
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Sends per-pad trigger CV to modular drum modules. Each of 8 pads
|
|
5
|
+
outputs its own gate. Map MIDI notes to pads, sequence modular drums
|
|
6
|
+
from Live's clip view.
|
|
7
|
+
category: cv_out
|
|
8
|
+
character_tags: [cv, modular, drum_trigger, gate_out]
|
|
9
|
+
use_cases: [modular_drums_from_live]
|
|
10
|
+
genre_affinity:
|
|
11
|
+
primary: [modular, experimental, hybrid_techno]
|
|
12
|
+
complexity: intermediate
|
|
13
|
+
introduced_in: "10.0"
|
|
14
|
+
pack: CV Tools
|
|
15
|
+
creator: Ableton
|
|
16
|
+
class_name: PluginDevice
|
|
17
|
+
requires_modular_hardware: true
|
|
18
|
+
|
|
19
|
+
key_parameters:
|
|
20
|
+
- name: "Pad Count"
|
|
21
|
+
description: "Up to 8 independent gate outputs."
|
|
22
|
+
- name: "Per-pad MIDI note assignment"
|
|
23
|
+
description: "Which note triggers which pad."
|
|
24
|
+
|
|
25
|
+
learn_more:
|
|
26
|
+
official: "https://www.ableton.com/en/packs/cv-tools/"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: cv_utility
|
|
2
|
+
name: CV Utility
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Process control voltages via automation curves. Scale, offset, invert,
|
|
5
|
+
quantize CV signals. Works standalone even without modular gear — use
|
|
6
|
+
to shape Live's internal automation before it hits the destination
|
|
7
|
+
parameter. Acts as a curve-shaper between a source LFO/envelope and
|
|
8
|
+
the modulated parameter.
|
|
9
|
+
category: cv_processor
|
|
10
|
+
character_tags: [cv_processing, scale, offset, invert, quantize]
|
|
11
|
+
use_cases: [curve_shaping, modulation_scaling, parameter_processing]
|
|
12
|
+
genre_affinity:
|
|
13
|
+
primary: [modular, experimental]
|
|
14
|
+
secondary: [all]
|
|
15
|
+
complexity: beginner
|
|
16
|
+
introduced_in: "10.0"
|
|
17
|
+
pack: CV Tools
|
|
18
|
+
creator: Ableton
|
|
19
|
+
class_name: PluginDevice
|
|
20
|
+
requires_modular_hardware: false
|
|
21
|
+
|
|
22
|
+
key_parameters:
|
|
23
|
+
- name: "Scale"
|
|
24
|
+
description: "Multiply incoming CV by a factor."
|
|
25
|
+
- name: "Offset"
|
|
26
|
+
description: "Add a DC offset."
|
|
27
|
+
- name: "Invert"
|
|
28
|
+
description: "Flip the signal polarity."
|
|
29
|
+
- name: "Quantize"
|
|
30
|
+
description: "Snap CV to discrete steps — useful for pitched CV."
|
|
31
|
+
signature_techniques:
|
|
32
|
+
- name: "Soften aggressive modulation"
|
|
33
|
+
description: "Put CV Utility between an LFO and a filter → scale down to 0.3 → same LFO, subtler effect."
|
|
34
|
+
aesthetic: [all]
|
|
35
|
+
|
|
36
|
+
learn_more:
|
|
37
|
+
official: "https://www.ableton.com/en/packs/cv-tools/"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: performer
|
|
2
|
+
name: Performer
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Macro-control device from Performance Pack (Iftah). Multiple faders,
|
|
5
|
+
crossfaders, buttons, dials — fully user-configurable to mirror any
|
|
6
|
+
hardware controller. Integrated Macro Editor for curve shaping. Studio
|
|
7
|
+
use: unify disparate parameter automation into a single interface. Live
|
|
8
|
+
use: build a one-controller performance surface for Live + external gear.
|
|
9
|
+
category: macro_controller
|
|
10
|
+
character_tags: [macro, performance, curve_shaped, unifier]
|
|
11
|
+
use_cases: [live_control, parameter_unification, curve_automation]
|
|
12
|
+
genre_affinity:
|
|
13
|
+
primary: [all]
|
|
14
|
+
complexity: intermediate
|
|
15
|
+
introduced_in: "11.0"
|
|
16
|
+
pack: Performance Pack
|
|
17
|
+
creator: Iftah
|
|
18
|
+
class_name: PluginDevice
|
|
19
|
+
|
|
20
|
+
key_parameters:
|
|
21
|
+
- name: "Control Layout"
|
|
22
|
+
description: "Add/remove/rename faders, buttons, crossfaders freely."
|
|
23
|
+
- name: "Macro Mappings"
|
|
24
|
+
description: "Each control maps to any Live parameter (including M4L devices and plugin parameters)."
|
|
25
|
+
- name: "Macro Editor Curve"
|
|
26
|
+
description: "Shape the response — exponential, S-curve, stepped — per macro."
|
|
27
|
+
signature_techniques:
|
|
28
|
+
- name: "One-knob chord-chain morph"
|
|
29
|
+
description: "Map one fader to filter cutoff, send level, reverb decay, sat drive simultaneously → turn = whole chord chain morphs."
|
|
30
|
+
aesthetic: [live_performance, studio_sketching]
|
|
31
|
+
- name: "Crossfader-style A/B"
|
|
32
|
+
description: "Build a crossfader that switches between two device states via inverse macro curves."
|
|
33
|
+
aesthetic: [performance]
|
|
34
|
+
|
|
35
|
+
learn_more:
|
|
36
|
+
official: "https://www.ableton.com/en/packs/performance-pack/"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: prearranger
|
|
2
|
+
name: Prearranger
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Structural pre-planning device from Performance Pack (Iftah). Define clip
|
|
5
|
+
locations in Arrangement View as empty slots, then perform live and Live
|
|
6
|
+
auto-fills them with the performance. Transforms live recording into a
|
|
7
|
+
compositional scaffold. Ideal for sketching long hypnotic structures
|
|
8
|
+
(deep minimal) or entire sets without mid-performance arrangement
|
|
9
|
+
decisions.
|
|
10
|
+
category: recording_helper
|
|
11
|
+
character_tags: [performance, scaffold, live_recording, structure]
|
|
12
|
+
use_cases: [long_form_sketch, hypnotic_structure, set_recording]
|
|
13
|
+
genre_affinity:
|
|
14
|
+
primary: [deep_minimal, live_performance, ambient]
|
|
15
|
+
secondary: [electronic_all]
|
|
16
|
+
complexity: intermediate
|
|
17
|
+
introduced_in: "11.0"
|
|
18
|
+
pack: Performance Pack
|
|
19
|
+
creator: Iftah
|
|
20
|
+
class_name: PluginDevice
|
|
21
|
+
|
|
22
|
+
key_parameters:
|
|
23
|
+
- name: "Slot Layout"
|
|
24
|
+
description: "Pre-place empty arrangement clips where you want recorded content to land."
|
|
25
|
+
- name: "Auto-fill Toggle"
|
|
26
|
+
description: "Enable Prearranger — live content records into the pre-placed slots."
|
|
27
|
+
signature_techniques:
|
|
28
|
+
- name: "Hypnotic 60-minute structure sketch"
|
|
29
|
+
description: "Place empty slots every 16 bars across a 60-minute arrangement → press record → improvise → each section lands in its slot."
|
|
30
|
+
aesthetic: [deep_minimal, ambient]
|
|
31
|
+
- name: "Set recording with predetermined structure"
|
|
32
|
+
description: "Build the arrangement scaffold based on your setlist → perform → recording is auto-organized."
|
|
33
|
+
aesthetic: [live_sets]
|
|
34
|
+
|
|
35
|
+
learn_more:
|
|
36
|
+
official: "https://www.ableton.com/en/packs/performance-pack/"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: rotating_rhythm_generator
|
|
2
|
+
name: Rotating Rhythm Generator
|
|
3
|
+
sonic_description: >
|
|
4
|
+
M4L polyrhythmic MIDI generator from CV Tools. Originally a modular
|
|
5
|
+
CV-triggers tool, but operates as a standalone MIDI generator inside
|
|
6
|
+
Live. Generates rotating polyrhythmic patterns across multiple tracks
|
|
7
|
+
or drum-rack pads. One of the most under-utilized M4L devices for
|
|
8
|
+
complex techno / IDM groove programming.
|
|
9
|
+
category: generator
|
|
10
|
+
character_tags: [polyrhythmic, rotating, generative, drum_programming]
|
|
11
|
+
use_cases: [polymetric_drums, techno_groove, idm_pattern]
|
|
12
|
+
genre_affinity:
|
|
13
|
+
primary: [techno, idm, deep_minimal]
|
|
14
|
+
secondary: [all_electronic]
|
|
15
|
+
complexity: intermediate
|
|
16
|
+
introduced_in: "10.0"
|
|
17
|
+
pack: CV Tools
|
|
18
|
+
creator: Ableton
|
|
19
|
+
class_name: PluginDevice
|
|
20
|
+
requires_modular_hardware: false
|
|
21
|
+
|
|
22
|
+
key_parameters:
|
|
23
|
+
- name: "Ring Size"
|
|
24
|
+
description: "Number of steps in the ring (e.g., 16, 12, 7)."
|
|
25
|
+
- name: "Pulse Count"
|
|
26
|
+
description: "Beats distributed around the ring. Classic Euclidean distribution."
|
|
27
|
+
- name: "Rotation"
|
|
28
|
+
description: "Shift the starting position of the pattern on the ring."
|
|
29
|
+
signature_techniques:
|
|
30
|
+
- name: "Multi-lane rotated Euclidean drums"
|
|
31
|
+
description: "Kick: ring 16 / pulses 4 / rotation 0. Snare: ring 16 / pulses 2 / rotation 8. Hat: ring 13 / pulses 7 / rotation 3. Asymmetric groove that sits together but never locks."
|
|
32
|
+
aesthetic: [techno, deep_minimal, idm]
|
|
33
|
+
|
|
34
|
+
learn_more:
|
|
35
|
+
official: "https://www.ableton.com/en/packs/cv-tools/"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: surround_panner
|
|
2
|
+
name: Surround Panner
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Multichannel spatial panner. 4/6/8-channel speaker setups, 8 presets.
|
|
5
|
+
Not Ambisonic — discrete-channel panning. Only relevant for multi-channel
|
|
6
|
+
output setups (installation, quad+ club, cinema). In stereo studio work,
|
|
7
|
+
offers minimal benefit.
|
|
8
|
+
category: spatial_fx
|
|
9
|
+
character_tags: [multichannel, spatial, quad, surround]
|
|
10
|
+
use_cases: [installation, quad_club, cinema, multichannel_studio]
|
|
11
|
+
genre_affinity:
|
|
12
|
+
primary: [ambient_installation, cinema]
|
|
13
|
+
secondary: [experimental]
|
|
14
|
+
complexity: intermediate
|
|
15
|
+
introduced_in: "11.0"
|
|
16
|
+
pack: Surround Panner
|
|
17
|
+
creator: Ableton
|
|
18
|
+
class_name: PluginDevice
|
|
19
|
+
requires_special_output: true # multichannel interface
|
|
20
|
+
|
|
21
|
+
key_parameters:
|
|
22
|
+
- name: "Channel Layout"
|
|
23
|
+
description: "4.0, 5.1, 7.1, 8.0 — select target format."
|
|
24
|
+
- name: "XY Pan"
|
|
25
|
+
description: "2D pan position."
|
|
26
|
+
- name: "Rotate"
|
|
27
|
+
description: "Auto-rotate the signal around the listening position."
|
|
28
|
+
- name: "Focus / Spread"
|
|
29
|
+
description: "Width of the source in the field."
|
|
30
|
+
|
|
31
|
+
signature_techniques:
|
|
32
|
+
- name: "Quad-club rotating hi-hat"
|
|
33
|
+
description: "Hi-hat bus → Surround Panner in quad → auto-Rotate at slow rate → hats circle the dance floor."
|
|
34
|
+
aesthetic: [live_techno]
|
|
35
|
+
|
|
36
|
+
gotchas:
|
|
37
|
+
- "Stereo monitoring shows only a downmix — impossible to audition properly without a multichannel setup"
|
|
38
|
+
|
|
39
|
+
learn_more:
|
|
40
|
+
official: "https://www.ableton.com/en/packs/surround-panner/"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: variations
|
|
2
|
+
name: Variations
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Snapshot management from Performance Pack (Iftah). Captures any device
|
|
5
|
+
chain state or clip state and morphs between snapshots, quantized to a
|
|
6
|
+
musical boundary. The studio weapon: save 5 variations of a chord stab's
|
|
7
|
+
effect chain, clip-trigger morphing between them = gradual evolution over
|
|
8
|
+
8-16 bars without 50 automation lanes. This is how you get the
|
|
9
|
+
'chord-is-different-every-time' Villalobos behavior programmatically.
|
|
10
|
+
category: state_management
|
|
11
|
+
character_tags: [snapshot, morph, quantized, state_recall]
|
|
12
|
+
use_cases: [chain_morph, live_recall, section_transition, effect_evolution]
|
|
13
|
+
genre_affinity:
|
|
14
|
+
primary: [deep_minimal, microhouse, electronic_live]
|
|
15
|
+
secondary: [all]
|
|
16
|
+
complexity: intermediate
|
|
17
|
+
introduced_in: "11.0"
|
|
18
|
+
pack: Performance Pack
|
|
19
|
+
creator: Iftah
|
|
20
|
+
class_name: PluginDevice
|
|
21
|
+
|
|
22
|
+
key_parameters:
|
|
23
|
+
- name: "Snapshot Slots"
|
|
24
|
+
description: "Store up to N states. Each slot captures every parameter's value."
|
|
25
|
+
- name: "Morph Time"
|
|
26
|
+
description: "How long the interpolation between snapshots takes."
|
|
27
|
+
- name: "Quantization"
|
|
28
|
+
description: "Snap morph to bar / beat / scene boundary."
|
|
29
|
+
- name: "Selective Inclusion"
|
|
30
|
+
description: "Mark which parameters participate in each snapshot — exclude the ones you don't want to morph."
|
|
31
|
+
signature_techniques:
|
|
32
|
+
- name: "Chord stab evolution"
|
|
33
|
+
description: "Save 5 effect-chain states on a chord stab (different reverbs, pitches, filters). Clip-trigger morph between them every 2 bars. Result: chord stab is subtly different every time it plays."
|
|
34
|
+
aesthetic: [deep_minimal, microhouse]
|
|
35
|
+
- name: "Live scene state recall"
|
|
36
|
+
description: "Bind scenes to Variation snapshots — firing a scene also morphs the whole device chain."
|
|
37
|
+
aesthetic: [electronic_live]
|
|
38
|
+
|
|
39
|
+
learn_more:
|
|
40
|
+
official: "https://www.ableton.com/en/packs/performance-pack/"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: vector_map
|
|
2
|
+
name: Vector Map
|
|
3
|
+
sonic_description: >
|
|
4
|
+
Particle-physics modulation router (Inspired by Nature, Dillon Bastan).
|
|
5
|
+
One particle drives multiple parameter destinations simultaneously. Unlike
|
|
6
|
+
an LFO (one source → one destination), Vector Map lets a single particle's
|
|
7
|
+
position control filter cutoff AND send level AND reverb decay at once —
|
|
8
|
+
coupled modulation that LFOs cannot produce. Essential for organic,
|
|
9
|
+
physically-coherent sound design.
|
|
10
|
+
category: modulation_source
|
|
11
|
+
character_tags: [particle_physics, coupled_modulation, multi_destination, generative]
|
|
12
|
+
use_cases: [coupled_modulation, non_trivial_modulation, physical_motion]
|
|
13
|
+
genre_affinity:
|
|
14
|
+
primary: [experimental, ambient, deep_minimal]
|
|
15
|
+
secondary: [idm, sound_design]
|
|
16
|
+
complexity: advanced
|
|
17
|
+
introduced_in: "11.0"
|
|
18
|
+
pack: Inspired by Nature
|
|
19
|
+
creator: Dillon Bastan
|
|
20
|
+
class_name: PluginDevice
|
|
21
|
+
|
|
22
|
+
key_parameters:
|
|
23
|
+
- name: "Particle Behavior"
|
|
24
|
+
description: "Gravity, friction, forces — defines how the particle moves."
|
|
25
|
+
- name: "Destination Mappings"
|
|
26
|
+
description: "Route the particle's X/Y/velocity to multiple Live parameters."
|
|
27
|
+
- name: "Depth per destination"
|
|
28
|
+
description: "How much the particle influences each destination."
|
|
29
|
+
|
|
30
|
+
signature_techniques:
|
|
31
|
+
- name: "Coupled filter + reverb motion"
|
|
32
|
+
description: "Particle X → filter cutoff, particle Y → reverb wet, particle velocity → dry/wet balance. Single physical motion drives a 3-parameter sonic change."
|
|
33
|
+
aesthetic: [ambient, experimental]
|
|
34
|
+
|
|
35
|
+
learn_more:
|
|
36
|
+
pack: "Inspired by Nature"
|
|
@@ -150,7 +150,11 @@ def atlas_compare(ctx: Context, device_a: str, device_b: str, role: str = "") ->
|
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
@mcp.tool()
|
|
153
|
-
def scan_full_library(
|
|
153
|
+
def scan_full_library(
|
|
154
|
+
ctx: Context,
|
|
155
|
+
force: bool = False,
|
|
156
|
+
max_per_category: int = 5000,
|
|
157
|
+
) -> dict:
|
|
154
158
|
"""Scan the full Ableton browser and rebuild the device atlas.
|
|
155
159
|
|
|
156
160
|
Walks every category (instruments, audio_effects, midi_effects, max_for_live,
|
|
@@ -158,6 +162,16 @@ def scan_full_library(ctx: Context, force: bool = False) -> dict:
|
|
|
158
162
|
Results are merged with curated enrichments and saved to device_atlas.json.
|
|
159
163
|
|
|
160
164
|
force: if True, rescan even if atlas already exists (default False)
|
|
165
|
+
max_per_category: ceiling per category (default 5000). The previous
|
|
166
|
+
hardcoded 1000 cap silently truncated large categories — for
|
|
167
|
+
example, the samples category alone has ~22,000 items per the
|
|
168
|
+
browser tree, so the reported count "1000 samples" was wrong by
|
|
169
|
+
a factor of 22 (BUG-2026-04-22 #12). Raise this if your library
|
|
170
|
+
is huge; lower it for fast smoke scans.
|
|
171
|
+
|
|
172
|
+
Returns a stats dict including `truncated_categories` listing any
|
|
173
|
+
category that hit the cap (so callers know the count is a lower
|
|
174
|
+
bound rather than the true total).
|
|
161
175
|
"""
|
|
162
176
|
from .scanner import normalize_scan_results
|
|
163
177
|
from .enrichments import load_enrichments, merge_enrichments
|
|
@@ -183,11 +197,23 @@ def scan_full_library(ctx: Context, force: bool = False) -> dict:
|
|
|
183
197
|
|
|
184
198
|
# Scan browser
|
|
185
199
|
ableton = _get_ableton(ctx)
|
|
186
|
-
raw = ableton.send_command("scan_browser_deep", {"max_per_category":
|
|
200
|
+
raw = ableton.send_command("scan_browser_deep", {"max_per_category": max_per_category})
|
|
187
201
|
|
|
188
202
|
# Normalize
|
|
189
203
|
devices = normalize_scan_results(raw)
|
|
190
204
|
|
|
205
|
+
# Detect truncation: per-category count == cap means we likely hit it.
|
|
206
|
+
truncated_categories = []
|
|
207
|
+
if isinstance(raw, dict):
|
|
208
|
+
per_cat = raw.get("counts") or raw.get("stats") or {}
|
|
209
|
+
if isinstance(per_cat, dict):
|
|
210
|
+
for cat, count in per_cat.items():
|
|
211
|
+
try:
|
|
212
|
+
if int(count) >= max_per_category:
|
|
213
|
+
truncated_categories.append(cat)
|
|
214
|
+
except (TypeError, ValueError):
|
|
215
|
+
continue
|
|
216
|
+
|
|
191
217
|
# Load and merge enrichments
|
|
192
218
|
enrichments = load_enrichments(enrichments_dir)
|
|
193
219
|
devices = merge_enrichments(devices, enrichments)
|
|
@@ -214,6 +240,8 @@ def scan_full_library(ctx: Context, force: bool = False) -> dict:
|
|
|
214
240
|
"live_version": live_version,
|
|
215
241
|
"scanned_at": time.strftime("%Y-%m-%dT%H:%M:%SZ"),
|
|
216
242
|
"stats": stats,
|
|
243
|
+
"max_per_category": max_per_category,
|
|
244
|
+
"truncated_categories": truncated_categories,
|
|
217
245
|
"devices": devices,
|
|
218
246
|
"packs": [],
|
|
219
247
|
}
|
|
@@ -48,6 +48,9 @@ REMOTE_COMMANDS: frozenset[str] = frozenset({
|
|
|
48
48
|
"insert_device", # 12.3+ native device insertion
|
|
49
49
|
"insert_rack_chain", # 12.3+ rack chain insertion
|
|
50
50
|
"set_drum_chain_note", # 12.3+ drum chain note assignment
|
|
51
|
+
"set_chain_name", # Rack chain rename (any rack type)
|
|
52
|
+
"fire_test_note", # Temp-clip MIDI trigger for verify_device_health
|
|
53
|
+
"cleanup_test_note", # Scratch-clip teardown paired with fire_test_note
|
|
51
54
|
# rack variations + macro CRUD (Live 11+)
|
|
52
55
|
"get_rack_variations", "store_rack_variation",
|
|
53
56
|
"recall_rack_variation", "delete_rack_variation",
|