livepilot 1.26.0 → 1.26.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 +24 -0
- package/README.md +1 -1
- package/installer/codex.js +87 -9
- package/livepilot/.Codex-plugin/plugin.json +8 -0
- package/livepilot/.claude-plugin/plugin.json +8 -0
- package/livepilot/.mcp.json +8 -0
- package/livepilot/agents/livepilot-producer/AGENT.md +314 -0
- package/livepilot/commands/arrange.md +47 -0
- package/livepilot/commands/beat.md +81 -0
- package/livepilot/commands/evaluate.md +49 -0
- package/livepilot/commands/memory.md +22 -0
- package/livepilot/commands/mix.md +47 -0
- package/livepilot/commands/perform.md +42 -0
- package/livepilot/commands/session.md +13 -0
- package/livepilot/commands/sounddesign.md +58 -0
- package/livepilot/rubrics/default_preset_check.md +82 -0
- package/livepilot/rubrics/layer_accumulation.md +79 -0
- package/livepilot/rubrics/layer_precision.md +79 -0
- package/livepilot/rubrics/modulation_presence.md +63 -0
- package/livepilot/rubrics/sound_design_depth.md +40 -0
- package/livepilot/skills/livepilot-arrangement/SKILL.md +164 -0
- package/livepilot/skills/livepilot-composition-engine/SKILL.md +151 -0
- package/livepilot/skills/livepilot-composition-engine/references/form-patterns.md +97 -0
- package/livepilot/skills/livepilot-composition-engine/references/transition-archetypes.md +102 -0
- package/livepilot/skills/livepilot-core/SKILL.md +261 -0
- package/livepilot/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
- package/livepilot/skills/livepilot-core/references/affordances/_schema.md +160 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/auto-filter.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/chorus-ensemble.yaml +91 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/compressor.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/convolution-reverb.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/corpus.yaml +84 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/drift.yaml +105 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/echo.yaml +108 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/eq-eight.yaml +95 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/glue-compressor.yaml +88 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/granulator-iii.yaml +104 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/hybrid-reverb.yaml +83 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/operator.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/ping-pong-delay.yaml +104 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/poli.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/saturator.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/shifter.yaml +77 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/simpler.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/utility.yaml +95 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/vinyl-distortion.yaml +92 -0
- package/livepilot/skills/livepilot-core/references/affordances/devices/wavetable.yaml +98 -0
- package/livepilot/skills/livepilot-core/references/artist-vocabularies.md +389 -0
- package/livepilot/skills/livepilot-core/references/automation-atlas.md +272 -0
- package/livepilot/skills/livepilot-core/references/concepts/_schema.md +158 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/akufen.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/aphex-twin.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/arca-sophie.yaml +131 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/autechre.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/basic-channel.yaml +140 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/basinski.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/boards-of-canada.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/burial.yaml +127 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/com-truise-tycho.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/daft-punk.yaml +117 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/dj-premier-rza.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/gas.yaml +134 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/hawtin.yaml +127 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/isolee-luomo.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/j-dilla.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/jeff-mills.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/johannsson-richter.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/madlib.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/moodymann-theo-parrish.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/oneohtrix-point-never.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/photek-source-direct.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/rashad-spinn-traxman.yaml +122 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/robert-henke.yaml +113 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/shackleton.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/skream-mala.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/stars-of-the-lid.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/tim-hecker.yaml +122 -0
- package/livepilot/skills/livepilot-core/references/concepts/artists/villalobos.yaml +135 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/ambient.yaml +137 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/boom_bap.yaml +124 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/deep-minimal.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/deep_house.yaml +130 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/detroit_techno.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/disco.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/downtempo.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/drone.yaml +133 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/drum-and-bass.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dub-techno.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dub.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/dubstep.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/experimental.yaml +136 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/footwork.yaml +119 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/hip-hop.yaml +132 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/house.yaml +126 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/hyperpop.yaml +128 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/idm.yaml +134 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/lo_fi.yaml +129 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/microhouse.yaml +138 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/minimal-techno.yaml +116 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/modern-classical.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/soul.yaml +125 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/synthwave.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/techno.yaml +123 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/trap.yaml +120 -0
- package/livepilot/skills/livepilot-core/references/concepts/genres/uk-garage.yaml +121 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
- package/livepilot/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
- 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/genre-vocabularies.md +382 -0
- package/livepilot/skills/livepilot-core/references/m4l-devices.md +352 -0
- package/livepilot/skills/livepilot-core/references/memory-guide.md +178 -0
- package/livepilot/skills/livepilot-core/references/midi-recipes.md +402 -0
- package/livepilot/skills/livepilot-core/references/mixing-patterns.md +578 -0
- package/livepilot/skills/livepilot-core/references/overview.md +300 -0
- package/livepilot/skills/livepilot-core/references/pack-knowledge.md +319 -0
- 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-core/references/sound-design.md +393 -0
- package/livepilot/skills/livepilot-corpus-builder/SKILL.md +379 -0
- package/livepilot/skills/livepilot-creative-director/SKILL.md +455 -0
- package/livepilot/skills/livepilot-creative-director/references/anti-repetition-rules.md +214 -0
- package/livepilot/skills/livepilot-creative-director/references/creative-brief-template.md +222 -0
- package/livepilot/skills/livepilot-creative-director/references/hybrid-compilation.md +185 -0
- package/livepilot/skills/livepilot-creative-director/references/move-family-diversity-rule.md +258 -0
- package/livepilot/skills/livepilot-creative-director/references/phase-6-execution.md +409 -0
- package/livepilot/skills/livepilot-creative-director/references/the-four-move-rule.md +192 -0
- package/livepilot/skills/livepilot-devices/SKILL.md +213 -0
- package/livepilot/skills/livepilot-devices/references/load_browser_item-uri-grammar.md +82 -0
- package/livepilot/skills/livepilot-evaluation/SKILL.md +195 -0
- package/livepilot/skills/livepilot-evaluation/references/capability-modes.md +176 -0
- package/livepilot/skills/livepilot-evaluation/references/evaluation-contracts.md +121 -0
- package/livepilot/skills/livepilot-evaluation/references/memory-promotion.md +110 -0
- package/livepilot/skills/livepilot-mix-engine/SKILL.md +136 -0
- package/livepilot/skills/livepilot-mix-engine/references/mix-critics.md +143 -0
- package/livepilot/skills/livepilot-mix-engine/references/mix-moves.md +105 -0
- package/livepilot/skills/livepilot-mixing/SKILL.md +157 -0
- package/livepilot/skills/livepilot-notes/SKILL.md +130 -0
- package/livepilot/skills/livepilot-performance-engine/SKILL.md +122 -0
- package/livepilot/skills/livepilot-performance-engine/references/performance-safety.md +98 -0
- package/livepilot/skills/livepilot-release/SKILL.md +151 -0
- package/livepilot/skills/livepilot-sample-engine/SKILL.md +117 -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 +225 -0
- package/livepilot/skills/livepilot-sound-design-engine/references/patch-model.md +119 -0
- package/livepilot/skills/livepilot-sound-design-engine/references/sound-design-critics.md +118 -0
- package/livepilot/skills/livepilot-wonder/SKILL.md +143 -0
- package/m4l_device/LivePilot_Analyzer.amxd +0 -0
- package/m4l_device/LivePilot_Elektron.amxd +0 -0
- package/m4l_device/LivePilot_Elektron.maxpat +758 -0
- package/m4l_device/livepilot_bridge.js +1 -1
- package/m4l_device/livepilot_elektron_bridge.js +82 -0
- package/mcp_server/__init__.py +1 -1
- package/mcp_server/composer/develop/apply.py +1 -1
- package/mcp_server/composer/full/apply.py +32 -6
- package/mcp_server/m4l_bridge.py +5 -0
- package/mcp_server/runtime/execution_router.py +6 -0
- package/mcp_server/runtime/mcp_dispatch.py +18 -0
- package/mcp_server/runtime/remote_commands.py +2 -0
- package/mcp_server/server.py +11 -7
- package/package.json +20 -5
- package/remote_script/LivePilot/__init__.py +1 -1
- package/remote_script/LivePilot/server.py +63 -2
- package/requirements.txt +3 -3
- package/server.json +3 -3
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Mix Critics Reference
|
|
2
|
+
|
|
3
|
+
Each critic runs during `analyze_mix` or `get_mix_issues` and produces an issue object with `critic`, `severity` (0.0-1.0), `track_index`, and `evidence`.
|
|
4
|
+
|
|
5
|
+
## masking
|
|
6
|
+
|
|
7
|
+
Detects frequency collisions between tracks that occupy the same spectral range.
|
|
8
|
+
|
|
9
|
+
**Thresholds:**
|
|
10
|
+
- severity >= 0.7: Two tracks share > 60% spectral overlap in the same frequency band with both > -12 dB in that range
|
|
11
|
+
- severity >= 0.4: Partial overlap (30-60%) or one track is significantly quieter
|
|
12
|
+
- severity < 0.4: Minor overlap, likely intentional layering
|
|
13
|
+
|
|
14
|
+
**Evidence format:**
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"track_a": 0,
|
|
18
|
+
"track_b": 2,
|
|
19
|
+
"collision_band": "low_mid",
|
|
20
|
+
"frequency_range": [200, 500],
|
|
21
|
+
"overlap_percent": 72.5,
|
|
22
|
+
"a_level_db": -8.2,
|
|
23
|
+
"b_level_db": -10.1
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Typical fix:** eq_cut on the less important track in the collision band, or pan_spread to separate spatially.
|
|
28
|
+
|
|
29
|
+
## over_compressed
|
|
30
|
+
|
|
31
|
+
Detects tracks or the master bus with excessive compression, indicated by very low crest factor (peak-to-RMS ratio).
|
|
32
|
+
|
|
33
|
+
**Thresholds:**
|
|
34
|
+
- severity >= 0.7: Crest factor < 3 dB on a dynamic source (vocals, drums, full mix)
|
|
35
|
+
- severity >= 0.4: Crest factor 3-6 dB on sources that should be more dynamic
|
|
36
|
+
- severity < 0.4: Mild compression, may be intentional for genre
|
|
37
|
+
|
|
38
|
+
**Evidence format:**
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"track_index": 1,
|
|
42
|
+
"crest_factor_db": 2.4,
|
|
43
|
+
"rms_db": -12.3,
|
|
44
|
+
"peak_db": -9.9,
|
|
45
|
+
"compressor_device": "Compressor",
|
|
46
|
+
"compressor_ratio": 8.0,
|
|
47
|
+
"compressor_threshold_db": -20.0
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Typical fix:** Raise compressor threshold, reduce ratio, or increase attack time.
|
|
52
|
+
|
|
53
|
+
## flat_dynamics
|
|
54
|
+
|
|
55
|
+
Detects tracks or sections with insufficient volume variation, making the mix feel static across song sections.
|
|
56
|
+
|
|
57
|
+
**Thresholds:**
|
|
58
|
+
- severity >= 0.7: Volume variation < 2 dB across all sections
|
|
59
|
+
- severity >= 0.4: Volume variation 2-4 dB where genre expects more contrast
|
|
60
|
+
- severity < 0.4: Minimal variation but may suit the genre (EDM drops, ambient)
|
|
61
|
+
|
|
62
|
+
**Evidence format:**
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"track_index": 3,
|
|
66
|
+
"section_volumes_db": [-10.2, -10.5, -10.1, -10.4],
|
|
67
|
+
"volume_range_db": 0.4,
|
|
68
|
+
"expected_range_db": 6.0
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Typical fix:** Automation on track volume or device parameters between sections.
|
|
73
|
+
|
|
74
|
+
## low_headroom
|
|
75
|
+
|
|
76
|
+
Detects when the master bus peak is dangerously close to 0 dBFS, risking clipping.
|
|
77
|
+
|
|
78
|
+
**Thresholds:**
|
|
79
|
+
- severity >= 0.7: Master peak > -1 dBFS
|
|
80
|
+
- severity >= 0.4: Master peak between -3 and -1 dBFS
|
|
81
|
+
- severity < 0.4: Master peak between -6 and -3 dBFS (acceptable for mastered content)
|
|
82
|
+
|
|
83
|
+
**Evidence format:**
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"master_peak_db": -0.3,
|
|
87
|
+
"master_rms_db": -8.2,
|
|
88
|
+
"headroom_db": 0.3,
|
|
89
|
+
"clipping": false
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Typical fix:** gain_staging — reduce the loudest tracks by 1-3 dB, or apply a limiter on the master.
|
|
94
|
+
|
|
95
|
+
## stereo_width
|
|
96
|
+
|
|
97
|
+
Detects stereo problems: mono collapse (too narrow), excessive width (phase issues), or elements placed inappropriately in the stereo field.
|
|
98
|
+
|
|
99
|
+
**Thresholds:**
|
|
100
|
+
- severity >= 0.7: Correlation coefficient < 0.1 (phase issues) or > 0.95 (essentially mono)
|
|
101
|
+
- severity >= 0.4: Bass content with significant stereo width, or lead vocal panned away from center
|
|
102
|
+
- severity < 0.4: Minor width imbalance
|
|
103
|
+
|
|
104
|
+
**Evidence format:**
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"track_index": 5,
|
|
108
|
+
"correlation": 0.05,
|
|
109
|
+
"width_estimate": 0.95,
|
|
110
|
+
"issue_type": "phase_cancellation",
|
|
111
|
+
"frequency_range": [100, 300]
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Typical fix:** Narrow bass to mono below 150 Hz (Utility mid/side), widen or narrow specific elements with pan_spread.
|
|
116
|
+
|
|
117
|
+
## spectral_balance
|
|
118
|
+
|
|
119
|
+
Detects overall tonal balance skew across the full mix — too bright, too dark, or mid-heavy compared to reference targets.
|
|
120
|
+
|
|
121
|
+
**Thresholds:**
|
|
122
|
+
- severity >= 0.7: Any band deviates > 6 dB from genre target curve
|
|
123
|
+
- severity >= 0.4: Deviation 3-6 dB in one or more bands
|
|
124
|
+
- severity < 0.4: Minor skew, within normal range
|
|
125
|
+
|
|
126
|
+
**Evidence format:**
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"balance_type": "too_bright",
|
|
130
|
+
"band_deviations_db": {
|
|
131
|
+
"sub": -1.2,
|
|
132
|
+
"low": 0.5,
|
|
133
|
+
"low_mid": -0.8,
|
|
134
|
+
"mid": -2.1,
|
|
135
|
+
"high_mid": 4.2,
|
|
136
|
+
"high": 7.1,
|
|
137
|
+
"air": 5.8
|
|
138
|
+
},
|
|
139
|
+
"reference_curve": "electronic_modern"
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Typical fix:** eq_cut on the protruding bands, or eq_boost on deficient bands. Prefer cuts over boosts.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Mix Moves Reference
|
|
2
|
+
|
|
3
|
+
The move vocabulary used by `plan_mix_move`. Each move type has defined parameter ranges and constraints.
|
|
4
|
+
|
|
5
|
+
## gain_staging
|
|
6
|
+
|
|
7
|
+
Adjust track or bus volume to establish proper level hierarchy.
|
|
8
|
+
|
|
9
|
+
**Parameters:**
|
|
10
|
+
- `target_track`: track index (0-based)
|
|
11
|
+
- `target_value`: normalized volume 0.0-1.0 (0.85 = unity / 0 dB)
|
|
12
|
+
- `delta_db`: typical adjustment range -6 to +3 dB per move
|
|
13
|
+
|
|
14
|
+
**Constraints:**
|
|
15
|
+
- Never boost more than +3 dB in a single move
|
|
16
|
+
- Prefer cutting the louder track over boosting the quieter one
|
|
17
|
+
- Check master headroom after any gain change
|
|
18
|
+
- Group tracks (drums, synths, vocals) should be staged relative to each other first
|
|
19
|
+
|
|
20
|
+
**Tools:** `set_track_volume`, `set_master_volume`
|
|
21
|
+
|
|
22
|
+
## bus_compression
|
|
23
|
+
|
|
24
|
+
Apply or adjust glue compression on groups, return tracks, or master bus.
|
|
25
|
+
|
|
26
|
+
**Parameters:**
|
|
27
|
+
- `threshold_db`: -30 to 0 dB (start conservative at -15)
|
|
28
|
+
- `ratio`: 1.5:1 to 4:1 for glue, up to 8:1 for limiting
|
|
29
|
+
- `attack_ms`: 0.1 to 100 ms (10-30 ms for glue, <1 ms for limiting)
|
|
30
|
+
- `release_ms`: 50 to 500 ms (auto release preferred for master bus)
|
|
31
|
+
- `makeup_gain_db`: 0 to +6 dB
|
|
32
|
+
|
|
33
|
+
**Constraints:**
|
|
34
|
+
- Gain reduction should stay under 3-4 dB for glue compression
|
|
35
|
+
- Always capture before/after RMS to verify loudness is maintained
|
|
36
|
+
- On master bus, prefer ratio <= 2:1 and attack >= 10 ms
|
|
37
|
+
|
|
38
|
+
**Tools:** `set_device_parameter`, `find_and_load_device(track_index, "Compressor")`
|
|
39
|
+
|
|
40
|
+
## transient_shaping
|
|
41
|
+
|
|
42
|
+
Adjust attack and sustain characteristics to control punch and body.
|
|
43
|
+
|
|
44
|
+
**Parameters:**
|
|
45
|
+
- `attack`: -100% to +100% (negative softens, positive sharpens)
|
|
46
|
+
- `sustain`: -100% to +100% (negative tightens, positive lengthens)
|
|
47
|
+
|
|
48
|
+
**Constraints:**
|
|
49
|
+
- Apply to individual drum hits or drum bus, not full mix
|
|
50
|
+
- Check that transient shaping doesn't push peaks above headroom
|
|
51
|
+
- Often more effective than compression for punch problems
|
|
52
|
+
|
|
53
|
+
**Tools:** `set_device_parameter` on a transient shaper device
|
|
54
|
+
|
|
55
|
+
## eq_cut
|
|
56
|
+
|
|
57
|
+
Subtractive EQ to clear masking, remove resonances, or fix spectral balance.
|
|
58
|
+
|
|
59
|
+
**Parameters:**
|
|
60
|
+
- `frequency_hz`: 20 to 20000 Hz
|
|
61
|
+
- `gain_db`: -12 to 0 dB (never cut more than 12 dB in one move)
|
|
62
|
+
- `q`: 0.5 to 8.0 (narrow cuts 4-8 for resonances, wide cuts 0.5-2 for balance)
|
|
63
|
+
- `filter_type`: low_cut, high_cut, bell, notch
|
|
64
|
+
|
|
65
|
+
**Constraints:**
|
|
66
|
+
- Prefer EQ Eight for surgical work (8 bands available)
|
|
67
|
+
- For low cuts on non-bass tracks, use 18 or 24 dB/oct high-pass
|
|
68
|
+
- Cut on the less important track in a masking pair
|
|
69
|
+
- Verify after cut that the track still sounds full — over-cutting kills body
|
|
70
|
+
|
|
71
|
+
**Tools:** `set_device_parameter`, `find_and_load_device(track_index, "EQ Eight")`
|
|
72
|
+
|
|
73
|
+
## eq_boost
|
|
74
|
+
|
|
75
|
+
Additive EQ to bring out character frequencies. Use sparingly.
|
|
76
|
+
|
|
77
|
+
**Parameters:**
|
|
78
|
+
- `frequency_hz`: 20 to 20000 Hz
|
|
79
|
+
- `gain_db`: 0 to +4 dB (never boost more than 4 dB in one move)
|
|
80
|
+
- `q`: 0.5 to 4.0 (wide boosts sound more natural)
|
|
81
|
+
|
|
82
|
+
**Constraints:**
|
|
83
|
+
- Always try a cut on competing tracks before boosting
|
|
84
|
+
- Boosts above +4 dB usually indicate a source problem, not a mix problem
|
|
85
|
+
- Check master headroom after any boost — boosts add energy
|
|
86
|
+
- Wide Q (0.5-1.5) for tonal shaping, narrow Q (2-4) for emphasis
|
|
87
|
+
|
|
88
|
+
**Tools:** `set_device_parameter` on EQ device
|
|
89
|
+
|
|
90
|
+
## pan_spread
|
|
91
|
+
|
|
92
|
+
Stereo placement adjustments for width and separation.
|
|
93
|
+
|
|
94
|
+
**Parameters:**
|
|
95
|
+
- `pan`: -1.0 (full left) to 1.0 (full right), 0.0 = center
|
|
96
|
+
- `width`: 0.0 (mono) to 2.0 (extra wide) on Utility device
|
|
97
|
+
|
|
98
|
+
**Constraints:**
|
|
99
|
+
- Bass and kick stay centered (pan 0.0)
|
|
100
|
+
- Lead vocal stays centered or very slightly off-center (within -0.1 to 0.1)
|
|
101
|
+
- Stereo pairs (L/R guitars, synth layers) mirror symmetrically
|
|
102
|
+
- Check mono compatibility after spreading — call `check_translation` if available
|
|
103
|
+
- Never pan return tracks (reverb/delay should remain stereo)
|
|
104
|
+
|
|
105
|
+
**Tools:** `set_track_pan`, `set_device_parameter` on Utility for mid/side width
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-mixing
|
|
3
|
+
description: This skill should be used when the user asks to "mix", "balance levels", "set volume", "pan a track", "EQ", "compress", "sends", "routing", "master volume", "gain staging", "sidechain", or wants to perform mixing operations in Ableton Live.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mixing — Levels, Panning, Routing, and Analysis
|
|
7
|
+
|
|
8
|
+
Balance track levels, configure routing, apply mix effects, and analyze frequency content in Ableton Live.
|
|
9
|
+
|
|
10
|
+
## Read Before Write
|
|
11
|
+
|
|
12
|
+
Always understand the current state before changing anything:
|
|
13
|
+
|
|
14
|
+
1. `get_session_info` — see all tracks, their types, and current configuration
|
|
15
|
+
2. `get_track_info(track_index)` — detailed info on a single track: devices, clips, mixer state
|
|
16
|
+
3. `get_mix_snapshot` — one-call overview of all levels, panning, routing, mute/solo state across the entire session
|
|
17
|
+
4. `get_device_parameters(track_index, device_index)` — read current parameter values before tweaking
|
|
18
|
+
|
|
19
|
+
Never set levels blindly. Read the current state, make informed adjustments, then verify the result.
|
|
20
|
+
|
|
21
|
+
## Volume and Pan
|
|
22
|
+
|
|
23
|
+
- `set_track_volume(track_index, value)` — value is normalized 0.0 to 1.0 (not dB). 0.85 is roughly unity gain. 0.0 is silence, 1.0 is max.
|
|
24
|
+
- `set_track_pan(track_index, value)` — value is -1.0 (hard left) to 1.0 (hard right). 0.0 is center.
|
|
25
|
+
- `set_master_volume(value)` — master output level, same 0.0-1.0 range.
|
|
26
|
+
|
|
27
|
+
Gain staging principle: keep individual tracks at moderate levels (0.5-0.85) and use the master for final output. Avoid pushing tracks to 1.0 — it leaves no headroom for summing.
|
|
28
|
+
|
|
29
|
+
## Sends and Return Tracks
|
|
30
|
+
|
|
31
|
+
Sends route signal from any track to a return track for shared processing (reverb bus, delay bus, parallel compression).
|
|
32
|
+
|
|
33
|
+
- `set_track_send(track_index, send_index, value)` — set send level (0.0-1.0). Send index 0 = Send A, 1 = Send B, etc.
|
|
34
|
+
- `get_return_tracks` — list all return tracks with their names, devices, and routing
|
|
35
|
+
- `create_return_track` — add a new return track to the session
|
|
36
|
+
- `get_master_track` — inspect the master track configuration
|
|
37
|
+
|
|
38
|
+
Return track workflow:
|
|
39
|
+
1. `create_return_track` — creates a new return (automatically assigned next letter: A, B, C...)
|
|
40
|
+
2. Load an effect on the return track (e.g., Reverb with Dry/Wet at 100%)
|
|
41
|
+
3. `set_track_send(track_index, send_index, value)` on each track that needs the effect
|
|
42
|
+
4. Adjust send levels per track for different amounts of the shared effect
|
|
43
|
+
|
|
44
|
+
## Routing
|
|
45
|
+
|
|
46
|
+
- `get_track_routing(track_index)` — see current input/output routing for a track
|
|
47
|
+
- `set_track_routing(track_index, input_routing, output_routing)` — configure where audio comes from and goes to
|
|
48
|
+
|
|
49
|
+
Common routing patterns:
|
|
50
|
+
- **Resampling:** set input routing to "Resampling" on an audio track to capture the master output
|
|
51
|
+
- **Sidechain:** route a track's output to another track's sidechain input for ducking compression
|
|
52
|
+
- **Sub-groups:** route multiple tracks to a group track for bus processing
|
|
53
|
+
|
|
54
|
+
## Metering
|
|
55
|
+
|
|
56
|
+
- `get_track_meters(track_index)` — read real-time output level of a specific track (left/right channels)
|
|
57
|
+
- `get_master_meters` — read the master output level in real-time
|
|
58
|
+
|
|
59
|
+
Use metering to verify your level adjustments. After setting volumes, check meters to confirm nothing is clipping and the balance sounds right.
|
|
60
|
+
|
|
61
|
+
## Mix Snapshot
|
|
62
|
+
|
|
63
|
+
`get_mix_snapshot` returns a complete picture of the session mix in one call:
|
|
64
|
+
- All track volumes and pan positions
|
|
65
|
+
- Mute and solo states
|
|
66
|
+
- Send levels
|
|
67
|
+
- Routing configuration
|
|
68
|
+
- Return track setup
|
|
69
|
+
|
|
70
|
+
Use this as your starting point for any mixing task. It shows the full picture without needing to query each track individually.
|
|
71
|
+
|
|
72
|
+
## Automation
|
|
73
|
+
|
|
74
|
+
### Clip Automation
|
|
75
|
+
|
|
76
|
+
- `get_clip_automation(track_index, clip_index, parameter_name)` — read existing automation for a parameter
|
|
77
|
+
- `set_clip_automation(track_index, clip_index, parameter_name, points)` — write automation points as `[{time, value}, ...]`
|
|
78
|
+
- `clear_clip_automation(track_index, clip_index, parameter_name)` — remove automation before rewriting
|
|
79
|
+
|
|
80
|
+
### Intelligent Curves
|
|
81
|
+
|
|
82
|
+
- `generate_automation_curve(shape, start_value, end_value, num_points)` — generate automation points using 16 curve types: linear, exponential, logarithmic, sine, cosine, s_curve, ease_in, ease_out, bounce, random_walk, step, triangle, sawtooth, reverse_sawtooth, pulse, and smooth_random
|
|
83
|
+
- `apply_automation_shape(track_index, clip_index, parameter_name, shape, start_value, end_value)` — generate and apply a curve in one call
|
|
84
|
+
|
|
85
|
+
### Recipes
|
|
86
|
+
|
|
87
|
+
`apply_automation_recipe(track_index, clip_index, recipe_name)` — apply a pre-built automation pattern. Available recipes:
|
|
88
|
+
|
|
89
|
+
- `filter_sweep_up` — low-pass filter opens over time, classic build
|
|
90
|
+
- `filter_sweep_down` — filter closes, darkening effect
|
|
91
|
+
- `sidechain_pump` — rhythmic volume ducking on each beat
|
|
92
|
+
- `dub_throw` — delay feedback spikes on specific beats
|
|
93
|
+
- `tremolo` — rhythmic volume oscillation
|
|
94
|
+
- `autopan` — stereo movement back and forth
|
|
95
|
+
- `fade_in` / `fade_out` — gradual volume transitions
|
|
96
|
+
- `stutter` — rapid volume gates for glitch effects
|
|
97
|
+
- `vinyl_crackle` — subtle noise modulation
|
|
98
|
+
- `tape_wow` — pitch/speed micro-variations
|
|
99
|
+
- `bit_crush_sweep` — sample rate reduction over time
|
|
100
|
+
- `resonance_peak` — filter resonance spike for emphasis
|
|
101
|
+
- `stereo_width_grow` — mono to wide stereo expansion
|
|
102
|
+
- `grain_scatter` — granular parameter randomization
|
|
103
|
+
|
|
104
|
+
### Automation Feedback Loop
|
|
105
|
+
|
|
106
|
+
Follow this cycle for all automation work:
|
|
107
|
+
|
|
108
|
+
1. **Perceive:** `get_master_spectrum` + `get_track_meters` to understand current state
|
|
109
|
+
2. **Diagnose:** identify what needs to change based on spectral data
|
|
110
|
+
3. **Act:** `apply_automation_shape` or `apply_automation_recipe`
|
|
111
|
+
4. **Verify:** `get_master_spectrum` again to confirm the change worked
|
|
112
|
+
5. **Adjust:** if not right, `clear_clip_automation` and try different parameters
|
|
113
|
+
|
|
114
|
+
Never write automation without reading spectrum before and after.
|
|
115
|
+
|
|
116
|
+
## Spectrum Analysis (Requires M4L Bridge)
|
|
117
|
+
|
|
118
|
+
When the LivePilot Analyzer M4L device is on the master track:
|
|
119
|
+
|
|
120
|
+
- `get_master_spectrum` — 9-band frequency analysis: sub_low (20-60 Hz), sub (60-120 Hz), low (120-250 Hz), low_mid (250-500 Hz), mid (500-1k Hz), high_mid (1-2k Hz), high (2-4k Hz), presence (4-8k Hz), air (8-20k Hz)
|
|
121
|
+
- `get_master_rms` — true RMS and peak levels for loudness assessment
|
|
122
|
+
- `get_detected_key` — detect musical key from audio content
|
|
123
|
+
|
|
124
|
+
Use spectrum data to make informed EQ decisions. If the low_mid band is 6 dB hotter than everything else, there is mud to clean up. If the air band is absent, the mix may sound dull.
|
|
125
|
+
|
|
126
|
+
## Mix Engine — Critic-Driven Analysis
|
|
127
|
+
|
|
128
|
+
For deeper mix analysis beyond basic levels and spectrum:
|
|
129
|
+
|
|
130
|
+
- `analyze_mix` — full spectral mix analysis with per-track breakdown
|
|
131
|
+
- `get_mix_issues` — identify specific problems (masking, imbalance, phase)
|
|
132
|
+
- `plan_mix_move` — get a suggested action to fix a detected issue
|
|
133
|
+
- `evaluate_mix_move` — score a proposed change before applying it
|
|
134
|
+
- `get_masking_report` — detect frequency masking between tracks
|
|
135
|
+
- `get_mix_summary` — quick overall mix health status
|
|
136
|
+
|
|
137
|
+
Use the mix engine when the user wants a critical evaluation of their mix, not just level adjustments. Start with `get_mix_summary` for a quick overview, escalate to `analyze_mix` for full detail.
|
|
138
|
+
|
|
139
|
+
## Quick Mix Status
|
|
140
|
+
|
|
141
|
+
`get_mix_summary` from the mix engine provides an overall health score, top issues, and priority recommendations in a single call. Use it as a fast check before diving into detailed analysis.
|
|
142
|
+
|
|
143
|
+
## Escalation Ladder
|
|
144
|
+
|
|
145
|
+
Follow this progression — start fast, go deeper only when needed:
|
|
146
|
+
|
|
147
|
+
1. **Instant:** `get_master_spectrum` + `get_track_meters` — frequency balance + levels. Answers 80% of mix questions.
|
|
148
|
+
2. **Fast (1-5s):** `analyze_loudness` + `analyze_mix` — LUFS, true peak, and full mix analysis. For mastering prep.
|
|
149
|
+
3. **Slow (5-15s):** `compare_to_reference` + `analyze_spectrum_offline` — reference matching, offline spectral analysis. Ask the user first.
|
|
150
|
+
|
|
151
|
+
Never skip levels. Start at the lowest appropriate level and offer to go deeper.
|
|
152
|
+
|
|
153
|
+
## Reference
|
|
154
|
+
|
|
155
|
+
Supporting references live in the `livepilot-core` skill's `references/` directory:
|
|
156
|
+
- `livepilot-core/references/mixing-patterns.md` — gain staging, parallel compression, sidechain, EQ by instrument, bus processing, stereo width
|
|
157
|
+
- `livepilot-core/references/automation-atlas.md` — curve theory, genre-specific recipes, diagnostic filter, cross-track spectral mapping
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-notes
|
|
3
|
+
description: This skill should be used when the user asks to "write notes", "add a melody", "chord progression", "rhythm pattern", "MIDI notes", "transpose", "quantize", "Euclidean rhythm", "counterpoint", "scale", "key detection", "harmony", or wants to create, edit, or analyze MIDI content in Ableton Live.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MIDI Notes — Create, Edit, and Analyze
|
|
7
|
+
|
|
8
|
+
Write melodies, chords, rhythms, and generative patterns in Ableton Live clips. Every note operation follows the Live 12 API.
|
|
9
|
+
|
|
10
|
+
## Note API Cycle
|
|
11
|
+
|
|
12
|
+
Four operations form the core CRUD cycle for MIDI notes:
|
|
13
|
+
|
|
14
|
+
1. **Create:** `add_notes(track_index, clip_index, notes)` — write new notes into a clip
|
|
15
|
+
2. **Read:** `get_notes(track_index, clip_index)` — retrieve all notes with IDs, pitches, timings
|
|
16
|
+
3. **Update:** `modify_notes(track_index, clip_index, modifications)` — change existing notes by `note_id`
|
|
17
|
+
4. **Delete:** `remove_notes(track_index, clip_index, start_time, duration, pitch_start, pitch_end)` — clear a region, or `remove_notes_by_id(track_index, clip_index, note_ids)` — surgical deletion by ID
|
|
18
|
+
|
|
19
|
+
Always create a clip first with `create_clip(track_index, clip_index, length)` before adding notes to it.
|
|
20
|
+
|
|
21
|
+
## Note Format
|
|
22
|
+
|
|
23
|
+
When calling `add_notes`, each note requires:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"pitch": 60,
|
|
28
|
+
"start_time": 0.0,
|
|
29
|
+
"duration": 0.5,
|
|
30
|
+
"velocity": 100,
|
|
31
|
+
"mute": false
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When reading with `get_notes`, each note also returns Live 12 extended fields:
|
|
36
|
+
- `note_id` — unique identifier for modify/remove operations
|
|
37
|
+
- `probability` — 0.0 to 1.0, per-note trigger probability (Live 12 feature)
|
|
38
|
+
- `velocity_deviation` — -127.0 to 127.0, randomizes velocity on each trigger
|
|
39
|
+
- `release_velocity` — 0.0 to 127.0, note-off velocity
|
|
40
|
+
|
|
41
|
+
Use `modify_notes` with `note_id` to update any field on existing notes — pitch, velocity, timing, probability, mute state.
|
|
42
|
+
|
|
43
|
+
## Duplication and Transposition
|
|
44
|
+
|
|
45
|
+
- `duplicate_notes(track_index, clip_index, time_offset)` — copy all notes forward by `time_offset` beats. Use for pattern repetition: a 4-beat pattern duplicated at offset 4.0 creates an 8-beat loop.
|
|
46
|
+
- `transpose_notes(track_index, clip_index, semitones, start_time, duration)` — shift pitches in a region by semitones. Positive = up, negative = down.
|
|
47
|
+
- `transpose_smart(track_index, clip_index, semitones, key)` — transpose with scale awareness. Notes stay within the target key, avoiding chromatic collisions.
|
|
48
|
+
|
|
49
|
+
## Quantization
|
|
50
|
+
|
|
51
|
+
`quantize_clip(track_index, clip_index, grid, amount)` snaps note start times to a rhythmic grid.
|
|
52
|
+
|
|
53
|
+
Grid enum values:
|
|
54
|
+
- 0 = None (no quantize)
|
|
55
|
+
- 1 = 1/4 notes
|
|
56
|
+
- 2 = 1/8 notes
|
|
57
|
+
- 3 = 1/8 triplets
|
|
58
|
+
- 4 = 1/8 + triplets (combined grid)
|
|
59
|
+
- 5 = 1/16 notes
|
|
60
|
+
- 6 = 1/16 triplets
|
|
61
|
+
- 7 = 1/16 + triplets (combined grid)
|
|
62
|
+
- 8 = 1/32 notes
|
|
63
|
+
|
|
64
|
+
The `amount` parameter (0.0-1.0) controls how far notes move toward the grid. Use 1.0 for rigid quantize, 0.5-0.7 for humanized feel.
|
|
65
|
+
|
|
66
|
+
## Theory Integration
|
|
67
|
+
|
|
68
|
+
Run these checks before firing any clip with melodic content:
|
|
69
|
+
|
|
70
|
+
1. `identify_scale(track_index, clip_index)` — detect the scale from existing notes (Krumhansl-Schmuckler algorithm). Returns key, mode, and confidence.
|
|
71
|
+
2. `detect_theory_issues(track_index, clip_index, strict=true)` — check for out-of-key notes, parallel fifths, voice crossing, augmented/diminished accidents. The `strict` flag enables all checks.
|
|
72
|
+
3. Fix problems with `modify_notes` — adjust offending pitches before the user hears them.
|
|
73
|
+
|
|
74
|
+
The theory engine knows 7 standard modes. Exotic scales (Hijaz, Hungarian minor, whole tone) produce false "out of key" warnings. Cross-reference flagged pitches against the intended scale manually. Use `key="C hijaz"` for Hijaz/Phrygian Dominant keys.
|
|
75
|
+
|
|
76
|
+
## Harmony Analysis and Suggestions
|
|
77
|
+
|
|
78
|
+
- `analyze_harmony(track_index, clip_index)` — identify chords in a clip, returns chord names, qualities, root notes, and progression analysis
|
|
79
|
+
- `suggest_next_chord(track_index, clip_index, key)` — given the current harmonic context, suggest the next chord with voice leading and functional reasoning
|
|
80
|
+
- `harmonize_melody(track_index, clip_index, key, style)` — generate harmony notes for an existing melody. Returns a note array ready for `add_notes` on a separate track.
|
|
81
|
+
- `generate_countermelody(track_index, clip_index, key, species)` — generate a counterpoint line against existing notes. Species 1-5 follow classical counterpoint rules. Returns notes for `add_notes`.
|
|
82
|
+
|
|
83
|
+
Both `harmonize_melody` and `generate_countermelody` return note arrays — do not call them and discard the output. Place the results into a clip with `add_notes`.
|
|
84
|
+
|
|
85
|
+
## Generative Algorithms
|
|
86
|
+
|
|
87
|
+
### Euclidean Rhythms
|
|
88
|
+
|
|
89
|
+
`generate_euclidean_rhythm(pulses, steps, pitch, velocity, duration)` — distribute `pulses` as evenly as possible across `steps` using the Bjorklund algorithm. Returns a note array. The tool identifies named rhythms automatically (e.g., 3 pulses in 8 steps = "tresillo", 5 in 8 = "cinquillo").
|
|
90
|
+
|
|
91
|
+
`layer_euclidean_rhythms(layers)` — stack multiple Euclidean patterns for polyrhythmic textures. Each layer specifies pulses, steps, pitch, and velocity. Returns a combined note array spanning all layers, ready for a single `add_notes` call or split across tracks.
|
|
92
|
+
|
|
93
|
+
### Minimalist Techniques
|
|
94
|
+
|
|
95
|
+
`generate_tintinnabuli(melody_pitches, key, mode, position)` — implement Arvo Part's technique: a T-voice (triad arpeggio) against a M-voice (stepwise melody). Returns two-voice note data.
|
|
96
|
+
|
|
97
|
+
`generate_phase_shift(pattern, shift_amount, repetitions)` — implement Steve Reich's phasing: two identical patterns drifting apart over time. One voice holds steady while the other shifts by `shift_amount` per repetition.
|
|
98
|
+
|
|
99
|
+
`generate_additive_process(melody_pitches, iterations)` — implement Philip Glass's additive technique: melody expanded by adding one note per iteration, building complexity gradually.
|
|
100
|
+
|
|
101
|
+
All generative tools return note arrays. Place them in clips with `add_notes`.
|
|
102
|
+
|
|
103
|
+
## Neo-Riemannian Harmony
|
|
104
|
+
|
|
105
|
+
- `navigate_tonnetz(chord, transform)` — apply PRL (Parallel, Relative, Leading-tone) transforms to a chord. Returns the neighbor chord and its relationship.
|
|
106
|
+
- `find_voice_leading_path(start_chord, end_chord)` — find the shortest harmonic path between two chords through Tonnetz space. Returns intermediate chords.
|
|
107
|
+
- `classify_progression(chords)` — identify the neo-Riemannian transform pattern in a chord sequence (e.g., PRL cycle, hexatonic, octatonic).
|
|
108
|
+
- `suggest_chromatic_mediants(chord)` — return all chromatic mediant relations with film score usage notes. Useful for dramatic harmonic shifts.
|
|
109
|
+
|
|
110
|
+
## MIDI File I/O
|
|
111
|
+
|
|
112
|
+
- `export_clip_midi(track_index, clip_index, file_path)` — export a session clip's notes to a .mid file
|
|
113
|
+
- `import_midi_to_clip(track_index, clip_index, file_path)` — load a .mid file into a clip, replacing existing notes
|
|
114
|
+
- `analyze_midi_file(file_path)` — offline analysis of any .mid file (tempo, note count, structure). No Ableton connection needed.
|
|
115
|
+
- `extract_piano_roll(file_path)` — return a 2D velocity matrix (pitch x time) from a .mid file for visualization
|
|
116
|
+
|
|
117
|
+
## Pitch Audit — Mandatory Before Firing
|
|
118
|
+
|
|
119
|
+
Before playing any clip with melodic or harmonic content:
|
|
120
|
+
|
|
121
|
+
1. `identify_scale` on every melodic track — verify all tracks share the same tonal center
|
|
122
|
+
2. `analyze_harmony` on chordal tracks — verify chord quality (no accidental augmented/diminished)
|
|
123
|
+
3. `detect_theory_issues(strict=true)` — check all theory rules
|
|
124
|
+
4. Report a clear tuning summary to the user before proceeding
|
|
125
|
+
5. Fix wrong notes with `modify_notes` before firing
|
|
126
|
+
|
|
127
|
+
## Reference
|
|
128
|
+
|
|
129
|
+
Supporting references live in the `livepilot-core` skill's `references/` directory:
|
|
130
|
+
- `livepilot-core/references/midi-recipes.md` — drum patterns by genre, chord voicings, scale tables, hi-hat articulations, humanization, polymetric layering
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-performance-engine
|
|
3
|
+
description: This skill should be used when the user asks to "perform live", "what's safe to do during a show", "scene handoff", "energy flow", "performance mode", "safe moves", or wants live performance support with safety constraints.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Performance Engine — Safety-First Live Performance
|
|
7
|
+
|
|
8
|
+
The performance engine enforces a strict safety model for live performance. Every action is classified before execution. Destructive operations are blocked. Risky operations require user confirmation. Only safe operations execute freely.
|
|
9
|
+
|
|
10
|
+
## Safety Classification
|
|
11
|
+
|
|
12
|
+
Every performance action falls into one of four tiers.
|
|
13
|
+
|
|
14
|
+
### Safe — Execute Freely
|
|
15
|
+
|
|
16
|
+
These actions are non-destructive and audience-invisible if they fail. Execute without asking.
|
|
17
|
+
|
|
18
|
+
- `fire_scene` / `fire_clip` — launch scenes or clips (the core of live performance)
|
|
19
|
+
- `set_track_send` with small delta — nudge send levels (reverb/delay throws)
|
|
20
|
+
- `set_device_parameter` on mapped macros — macro knob adjustments
|
|
21
|
+
- `set_track_mute` / `set_track_solo` — mute/solo toggles
|
|
22
|
+
- `set_track_volume` with delta <= 3 dB — volume nudges
|
|
23
|
+
- `set_track_pan` with delta <= 0.2 — subtle pan shifts
|
|
24
|
+
- Filter sweeps via `set_device_parameter` on Auto Filter — smooth frequency movement
|
|
25
|
+
|
|
26
|
+
### Caution — Require User Confirmation
|
|
27
|
+
|
|
28
|
+
These actions are audible and may cause a noticeable glitch if wrong. Always ask before executing.
|
|
29
|
+
|
|
30
|
+
- `set_tempo` with delta <= 5 BPM — tempo nudge (can destabilize synced elements)
|
|
31
|
+
- `toggle_device` — enable/disable effects (may cause pops or silence)
|
|
32
|
+
- `set_track_pan` with delta > 0.2 — large pan moves are disorienting live
|
|
33
|
+
- `set_track_volume` with delta > 3 dB — large volume jumps
|
|
34
|
+
|
|
35
|
+
Present the action to the user: "I will [action]. This may [risk]. Confirm?"
|
|
36
|
+
|
|
37
|
+
### Blocked — Never Execute During Performance
|
|
38
|
+
|
|
39
|
+
These actions risk audible disasters, data loss, or session corruption during a live show.
|
|
40
|
+
|
|
41
|
+
- `delete_device` / `find_and_load_device` — device chain surgery causes audio interruption
|
|
42
|
+
- `create_arrangement_clip` / `create_clip` / `delete_clip` — clip creation/deletion
|
|
43
|
+
- `create_midi_track` / `create_audio_track` / `delete_track` — track structure changes
|
|
44
|
+
- `add_notes` / `modify_notes` / `remove_notes` — note editing while playing
|
|
45
|
+
- `set_clip_loop` / `set_clip_warp_mode` — clip property changes while playing
|
|
46
|
+
- `flatten_track` / `freeze_track` — CPU-intensive operations
|
|
47
|
+
- Any arrangement-view editing tools
|
|
48
|
+
|
|
49
|
+
If the user requests a blocked action during performance mode, explain why it is blocked and suggest a safe alternative: "That requires editing the device chain, which can cause audio dropouts during a live show. Instead, try [safe alternative]."
|
|
50
|
+
|
|
51
|
+
### Unknown — Treat as Blocked
|
|
52
|
+
|
|
53
|
+
Any action not explicitly classified above defaults to blocked. Do not experiment with unclassified actions during a live performance.
|
|
54
|
+
|
|
55
|
+
## Performance Loop
|
|
56
|
+
|
|
57
|
+
### Step 1 — Get State
|
|
58
|
+
|
|
59
|
+
Call `get_performance_state` to read the current session state:
|
|
60
|
+
- Playing status, current tempo, time signature
|
|
61
|
+
- Which scenes and clips are currently playing
|
|
62
|
+
- Track arm states, solo/mute states
|
|
63
|
+
- Current energy level estimate
|
|
64
|
+
|
|
65
|
+
### Step 2 — Get Safe Moves
|
|
66
|
+
|
|
67
|
+
Call `get_performance_safe_moves` to get a list of contextually appropriate safe actions based on the current state. The response is filtered by what makes musical sense right now — not just what is technically safe.
|
|
68
|
+
|
|
69
|
+
### Step 3 — Check Safety
|
|
70
|
+
|
|
71
|
+
Before executing any user request, call `check_safety(move_type)` to verify the classification. The response confirms: `safe`, `caution`, or `blocked` with an explanation.
|
|
72
|
+
|
|
73
|
+
### Step 4 — Execute Safe/Caution Only
|
|
74
|
+
|
|
75
|
+
- Safe: execute immediately
|
|
76
|
+
- Caution: present to user, wait for confirmation, then execute
|
|
77
|
+
- Blocked: refuse with explanation and alternative
|
|
78
|
+
|
|
79
|
+
### Step 5 — Scene Handoff
|
|
80
|
+
|
|
81
|
+
For transitioning between scenes (the primary live performance action), call `plan_scene_handoff(from_scene, to_scene)` to get a transition plan:
|
|
82
|
+
|
|
83
|
+
- Which clips change between the scenes
|
|
84
|
+
- Recommended launch timing (quantization)
|
|
85
|
+
- Volume/send adjustments to smooth the handoff
|
|
86
|
+
- Any tempo changes between scenes
|
|
87
|
+
|
|
88
|
+
Execute the handoff plan using safe actions only.
|
|
89
|
+
|
|
90
|
+
## Energy Flow
|
|
91
|
+
|
|
92
|
+
During a live set, track the energy trajectory:
|
|
93
|
+
|
|
94
|
+
1. `get_performance_state` includes an `energy_estimate` (0.0-1.0)
|
|
95
|
+
2. Use scene ordering to build energy arcs: low-energy scenes for intros/breakdowns, high-energy for drops/peaks
|
|
96
|
+
3. `plan_scene_handoff` accounts for energy delta — large energy jumps get transition suggestions
|
|
97
|
+
|
|
98
|
+
## Performance Mode Entry
|
|
99
|
+
|
|
100
|
+
When the user says "performance mode", "going live", or "starting the show":
|
|
101
|
+
|
|
102
|
+
1. Call `get_performance_state` to verify the session is ready
|
|
103
|
+
2. Confirm the safety model with the user: "Performance mode active. I will only execute safe actions freely and ask before caution-level moves. Destructive edits are blocked."
|
|
104
|
+
3. Switch to a response style optimized for speed: short confirmations, no lengthy explanations mid-performance
|
|
105
|
+
4. Prioritize scene launches and safe parameter nudges
|
|
106
|
+
|
|
107
|
+
## Performance Mode Exit
|
|
108
|
+
|
|
109
|
+
When the user says "done performing", "show's over", or "exit performance mode":
|
|
110
|
+
|
|
111
|
+
1. Confirm: "Performance mode ended. Full editing capabilities restored."
|
|
112
|
+
2. Resume normal operation with all tools available
|
|
113
|
+
|
|
114
|
+
## Emergency Actions
|
|
115
|
+
|
|
116
|
+
If something goes wrong during a live show:
|
|
117
|
+
|
|
118
|
+
- `stop_all_clips` — emergency silence (use only if requested)
|
|
119
|
+
- `set_master_volume(0.0)` — fade to silence
|
|
120
|
+
- `set_track_mute` on the problem track — isolate the issue
|
|
121
|
+
|
|
122
|
+
Never call `undo` during a live performance — it may revert a scene launch or clip state in unpredictable ways.
|