livepilot 1.26.0 → 1.26.2
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 +41 -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 +51 -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 +462 -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 +144 -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 +164 -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 +247 -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/composer/full/brief_builder.py +9 -0
- package/mcp_server/evaluation/feature_extractors.py +152 -8
- package/mcp_server/m4l_bridge.py +5 -0
- package/mcp_server/mix_engine/state_builder.py +19 -2
- package/mcp_server/mix_engine/tools.py +22 -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/mcp_server/sound_design/tools.py +33 -0
- package/mcp_server/tools/_agent_os_engine/evaluation.py +7 -44
- package/mcp_server/tools/_agent_os_engine/models.py +2 -1
- package/mcp_server/tools/_conductor.py +5 -2
- package/mcp_server/tools/_evaluation_contracts.py +1 -1
- package/mcp_server/tools/_snapshot_normalizer.py +32 -3
- 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,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: livepilot-mix-engine
|
|
3
|
+
description: This skill should be used when the user asks to "analyze my mix", "find mix issues", "fix masking", "check frequency clashes", "improve dynamics", "check stereo width", "check headroom", or wants critic-driven mix analysis and evaluation. Provides the mix critic loop for iterative mix improvement.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Mix Engine — Critic-Driven Mix Improvement
|
|
7
|
+
|
|
8
|
+
The mix engine runs an iterative critic loop: analyze, plan, execute, measure, evaluate, keep or undo. Every mix change is measured before and after. Nothing stays unless it scores better than the original.
|
|
9
|
+
|
|
10
|
+
## Character-First Default
|
|
11
|
+
|
|
12
|
+
Do not treat the full loop as the default for vague requests like "make it better", "more character", "more alive", "punchier", "warmer", or "more interesting". Those are usually sound-design or creative-direction requests. Start from analyzer character (`sonic_character`, `get_spectral_shape`, `get_novelty`, `get_onsets`, `get_mel_spectrum`) and prefer source, instrument, device-chain, envelope, filter, saturation, modulation, and transient-shape decisions before generic level changes.
|
|
13
|
+
|
|
14
|
+
Use `set_track_volume`, `set_track_pan`, and broad send-level balancing only when the user explicitly asks for balance/level/pan/send work, or when analyzer evidence shows a safety/translation problem such as clipping, headroom collapse, mono collapse, or a severe masking issue. Producers can adjust simple loudness by ear quickly; LivePilot's value is in hearing spectral character and choosing a smarter musical intervention.
|
|
15
|
+
|
|
16
|
+
For normal work, cap mix-engine action to one high-value move plus a short verdict. Enter the repeated full loop only for explicit requests like "deep mix pass", "mastering prep", "fix all mix issues", or an exact target such as LUFS/headroom/mono compatibility.
|
|
17
|
+
|
|
18
|
+
## The Mix Critic Loop
|
|
19
|
+
|
|
20
|
+
Follow these steps in order. Do not skip the evaluation step.
|
|
21
|
+
|
|
22
|
+
### Step 1 — Analyze
|
|
23
|
+
|
|
24
|
+
Call `analyze_mix` or `get_mix_issues` to build a MixState and run all critics against the current session. The response contains an `issues` array, each with a `critic`, `severity`, `track_index`, and `evidence` dict.
|
|
25
|
+
|
|
26
|
+
If the M4L analyzer bridge is absent, critics fall back to role-based heuristics only (track names, device chains, volume/pan positions). Inform the user that spectral analysis is unavailable and recommendations are less precise.
|
|
27
|
+
|
|
28
|
+
For detailed frequency collision data, call `get_masking_report`. For a quick status overview without the full critic pass, call `get_mix_summary`.
|
|
29
|
+
|
|
30
|
+
### Step 2 — Plan
|
|
31
|
+
|
|
32
|
+
Pick the highest-severity issue from the `issues` array. Call `plan_mix_move` with the issue data. The planner returns the smallest intervention that addresses the problem — a single parameter change, not a chain of edits.
|
|
33
|
+
|
|
34
|
+
Read the `move` object: it contains `move_type`, `target_track`, `target_device`, `target_parameter`, `target_value`, and `rationale`. Consult the move vocabulary in `references/mix-moves.md` for parameter ranges.
|
|
35
|
+
|
|
36
|
+
### Step 3 — Capture Before
|
|
37
|
+
|
|
38
|
+
Take a measurement snapshot before executing anything:
|
|
39
|
+
|
|
40
|
+
1. Call `get_master_spectrum` — save the 9-band spectral data (sub_low → air)
|
|
41
|
+
2. Call `get_master_rms` — save the RMS and peak values
|
|
42
|
+
|
|
43
|
+
Optionally call `get_mix_snapshot` if you need per-track volume/pan/send state for the evaluation.
|
|
44
|
+
|
|
45
|
+
### Step 4 — Execute
|
|
46
|
+
|
|
47
|
+
Execute the planned move. Use the appropriate tool for the move type:
|
|
48
|
+
|
|
49
|
+
- `set_device_parameter` for EQ cuts/boosts, compressor thresholds, saturation drives
|
|
50
|
+
- `set_track_volume` for gain staging
|
|
51
|
+
- `set_track_pan` for stereo placement
|
|
52
|
+
- `set_track_send` for bus routing levels
|
|
53
|
+
- `toggle_device` for bypassing/enabling processors
|
|
54
|
+
- `batch_set_parameters` when the move requires multiple related parameter changes on the same device
|
|
55
|
+
|
|
56
|
+
Execute exactly one move. Do not chain multiple interventions before measuring.
|
|
57
|
+
|
|
58
|
+
### Step 5 — Capture After
|
|
59
|
+
|
|
60
|
+
Repeat the same measurements from Step 3:
|
|
61
|
+
|
|
62
|
+
1. Call `get_master_spectrum` — save the post-change spectral data
|
|
63
|
+
2. Call `get_master_rms` — save the post-change RMS and peak values
|
|
64
|
+
|
|
65
|
+
### Step 6 — Evaluate
|
|
66
|
+
|
|
67
|
+
Call `evaluate_mix_move` with the before and after snapshots:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
evaluate_mix_move(
|
|
71
|
+
before_snapshot: { spectrum: [...], rms: float, peak: float },
|
|
72
|
+
after_snapshot: { spectrum: [...], rms: float, peak: float },
|
|
73
|
+
targets: { ... }, # what the move aimed to improve
|
|
74
|
+
protect: { ... } # what must not get worse
|
|
75
|
+
)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Read the response: `keep_change` (bool), `score` (0.0-1.0), `improvements` (list), `regressions` (list), `explanation` (string).
|
|
79
|
+
|
|
80
|
+
### Step 7 — Keep or Undo
|
|
81
|
+
|
|
82
|
+
If `keep_change` is `false`, call `undo()` immediately. Tell the user what was tried and why it was reverted, citing the `regressions` list.
|
|
83
|
+
|
|
84
|
+
If `keep_change` is `true`, report the improvement to the user with the score and explanation.
|
|
85
|
+
|
|
86
|
+
### Step 8 — Learn (Optional)
|
|
87
|
+
|
|
88
|
+
If the move scored above 0.7 and the user confirms satisfaction, call `memory_learn(name="...", type="mix_template", qualities={"summary": "..."}, payload={...})` to save the technique for future recall.
|
|
89
|
+
|
|
90
|
+
### Step 9 — Repeat
|
|
91
|
+
|
|
92
|
+
Return to Step 1 and re-analyze only when the user requested a deep/full mix pass. Otherwise stop after the first measured high-value intervention and report the remaining optional issues as suggestions. Avoid spending a turn on small volume-balancing loops unless they are the requested task.
|
|
93
|
+
|
|
94
|
+
## Quick Mix Checks
|
|
95
|
+
|
|
96
|
+
Not every request needs the full loop:
|
|
97
|
+
|
|
98
|
+
- **"How's my mix?"** — Call `get_mix_summary` for a one-shot status report with no changes
|
|
99
|
+
- **"What's clashing?"** — Call `get_masking_report` for detailed per-pair frequency collision data
|
|
100
|
+
- **"What are the issues?"** — Call `get_mix_issues` for the critic list without executing any fixes
|
|
101
|
+
|
|
102
|
+
## Critic Types
|
|
103
|
+
|
|
104
|
+
Six critics run during analysis. See `references/mix-critics.md` for thresholds and evidence format:
|
|
105
|
+
|
|
106
|
+
- **masking** — frequency collisions between overlapping tracks
|
|
107
|
+
- **over_compressed** — excessive compression reducing dynamic range
|
|
108
|
+
- **flat_dynamics** — insufficient volume variation across sections
|
|
109
|
+
- **low_headroom** — master peak too close to 0 dBFS
|
|
110
|
+
- **stereo_width** — mono collapse or excessive width on specific elements
|
|
111
|
+
- **spectral_balance** — overall tonal balance skew (too bright, too dark, mid-heavy)
|
|
112
|
+
|
|
113
|
+
## Move Vocabulary
|
|
114
|
+
|
|
115
|
+
The planner draws from six move types. See `references/mix-moves.md` for parameter ranges:
|
|
116
|
+
|
|
117
|
+
- **gain_staging** — volume adjustments to establish proper level hierarchy
|
|
118
|
+
- **bus_compression** — glue compression on groups or master
|
|
119
|
+
- **transient_shaping** — attack/sustain manipulation for punch or smoothness
|
|
120
|
+
- **eq_cut** — subtractive EQ to clear masking or remove resonances
|
|
121
|
+
- **eq_boost** — additive EQ to bring out character (use sparingly)
|
|
122
|
+
- **pan_spread** — stereo placement adjustments for width and separation
|
|
123
|
+
|
|
124
|
+
## Analyzer Dependency
|
|
125
|
+
|
|
126
|
+
The mix engine works in two modes:
|
|
127
|
+
|
|
128
|
+
- **Full mode** (M4L analyzer connected): spectral data, RMS, key detection available. Critics use measured evidence.
|
|
129
|
+
- **Heuristic mode** (no analyzer): critics infer from track names, device chains, and parameter positions. Always inform the user: "Spectral analysis unavailable — recommendations are based on track structure and device settings only."
|
|
130
|
+
|
|
131
|
+
Call `get_capability_state` to check which mode is active before starting the loop.
|
|
132
|
+
|
|
133
|
+
## Extended Perception Toolkit
|
|
134
|
+
|
|
135
|
+
Beyond `get_master_spectrum` / `get_master_rms` / `get_detected_key`, the analyzer domain exposes six more measurements that give finer evidence than the 9-band spectrum alone. Use them when the standard snapshot is too coarse for the move you are evaluating:
|
|
136
|
+
|
|
137
|
+
- **`get_spectral_shape`** — centroid, spread, skewness, kurtosis, rolloff, flatness, crest. Use for *tonal balance* judgments ("is this bright?", "is the energy concentrated or spread?") that 9 discrete bands cannot describe.
|
|
138
|
+
- **`get_mel_spectrum`** — perceptual mel-band energies. Use when an EQ move needs to be evaluated against how the change is *heard*, not against linear-frequency bin energies.
|
|
139
|
+
- **`get_chroma`** — 12-bin pitch-class energy. Use to detect harmonic clashes or to confirm a key without trusting `get_detected_key` alone.
|
|
140
|
+
- **`get_onsets`** — transient detection. Use for groove / rhythm evaluations where you need to know *when* hits land, not just how loud the average is.
|
|
141
|
+
- **`get_novelty`** — spectral change score with boundary flag. Use to confirm an arrangement boundary actually creates a perceived event, or to detect static sections that need disruption.
|
|
142
|
+
- **`get_momentary_loudness`** — momentary LUFS + true-peak dBTP. Use during mastering moves where peak/RMS is insufficient and EBU R128 is the gauge.
|
|
143
|
+
|
|
144
|
+
All six are bridge-dependent — they return helpful errors if the analyzer is not on master. They do not replace the before/after snapshot pattern; they enrich what "snapshot" means when the move warrants it.
|
|
@@ -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,164 @@
|
|
|
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
|
+
## Default Value Filter
|
|
11
|
+
|
|
12
|
+
For broad musical requests, do not spend the turn on manual-feeling volume balancing. Levels, pan, and sends are useful when the user asks for them, when clipping/headroom/translation is objectively unsafe, or when a routing architecture is part of the style. Otherwise, treat meters as context and use analyzer character to make higher-value choices: source selection, filter/envelope shape, saturation, modulation, transient design, or a better device/preset.
|
|
13
|
+
|
|
14
|
+
When a request says "more punch", "more warmth", "more character", "less flat", "more alive", or similar, route through sound-design/creative-director first and use mix tools only as safety checks.
|
|
15
|
+
|
|
16
|
+
## Read Before Write
|
|
17
|
+
|
|
18
|
+
Always understand the current state before changing anything:
|
|
19
|
+
|
|
20
|
+
1. `get_session_info` — see all tracks, their types, and current configuration
|
|
21
|
+
2. `get_track_info(track_index)` — detailed info on a single track: devices, clips, mixer state
|
|
22
|
+
3. `get_mix_snapshot` — one-call overview of all levels, panning, routing, mute/solo state across the entire session
|
|
23
|
+
4. `get_device_parameters(track_index, device_index)` — read current parameter values before tweaking
|
|
24
|
+
|
|
25
|
+
Never set levels blindly. Read the current state, make informed adjustments, then verify the result.
|
|
26
|
+
|
|
27
|
+
## Volume and Pan
|
|
28
|
+
|
|
29
|
+
- `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.
|
|
30
|
+
- `set_track_pan(track_index, value)` — value is -1.0 (hard left) to 1.0 (hard right). 0.0 is center.
|
|
31
|
+
- `set_master_volume(value)` — master output level, same 0.0-1.0 range.
|
|
32
|
+
|
|
33
|
+
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.
|
|
34
|
+
|
|
35
|
+
## Sends and Return Tracks
|
|
36
|
+
|
|
37
|
+
Sends route signal from any track to a return track for shared processing (reverb bus, delay bus, parallel compression).
|
|
38
|
+
|
|
39
|
+
- `set_track_send(track_index, send_index, value)` — set send level (0.0-1.0). Send index 0 = Send A, 1 = Send B, etc.
|
|
40
|
+
- `get_return_tracks` — list all return tracks with their names, devices, and routing
|
|
41
|
+
- `create_return_track` — add a new return track to the session
|
|
42
|
+
- `get_master_track` — inspect the master track configuration
|
|
43
|
+
|
|
44
|
+
Return track workflow:
|
|
45
|
+
1. `create_return_track` — creates a new return (automatically assigned next letter: A, B, C...)
|
|
46
|
+
2. Load an effect on the return track (e.g., Reverb with Dry/Wet at 100%)
|
|
47
|
+
3. `set_track_send(track_index, send_index, value)` on each track that needs the effect
|
|
48
|
+
4. Adjust send levels per track for different amounts of the shared effect
|
|
49
|
+
|
|
50
|
+
## Routing
|
|
51
|
+
|
|
52
|
+
- `get_track_routing(track_index)` — see current input/output routing for a track
|
|
53
|
+
- `set_track_routing(track_index, input_routing, output_routing)` — configure where audio comes from and goes to
|
|
54
|
+
|
|
55
|
+
Common routing patterns:
|
|
56
|
+
- **Resampling:** set input routing to "Resampling" on an audio track to capture the master output
|
|
57
|
+
- **Sidechain:** route a track's output to another track's sidechain input for ducking compression
|
|
58
|
+
- **Sub-groups:** route multiple tracks to a group track for bus processing
|
|
59
|
+
|
|
60
|
+
## Metering
|
|
61
|
+
|
|
62
|
+
- `get_track_meters(track_index)` — read real-time output level of a specific track (left/right channels)
|
|
63
|
+
- `get_master_meters` — read the master output level in real-time
|
|
64
|
+
|
|
65
|
+
Use metering to verify your level adjustments. After setting volumes, check meters to confirm nothing is clipping and the balance sounds right.
|
|
66
|
+
|
|
67
|
+
## Mix Snapshot
|
|
68
|
+
|
|
69
|
+
`get_mix_snapshot` returns a complete picture of the session mix in one call:
|
|
70
|
+
- All track volumes and pan positions
|
|
71
|
+
- Mute and solo states
|
|
72
|
+
- Send levels
|
|
73
|
+
- Routing configuration
|
|
74
|
+
- Return track setup
|
|
75
|
+
|
|
76
|
+
Use this as your starting point for any mixing task. It shows the full picture without needing to query each track individually.
|
|
77
|
+
|
|
78
|
+
## Automation
|
|
79
|
+
|
|
80
|
+
### Clip Automation
|
|
81
|
+
|
|
82
|
+
- `get_clip_automation(track_index, clip_index, parameter_name)` — read existing automation for a parameter
|
|
83
|
+
- `set_clip_automation(track_index, clip_index, parameter_name, points)` — write automation points as `[{time, value}, ...]`
|
|
84
|
+
- `clear_clip_automation(track_index, clip_index, parameter_name)` — remove automation before rewriting
|
|
85
|
+
|
|
86
|
+
### Intelligent Curves
|
|
87
|
+
|
|
88
|
+
- `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
|
|
89
|
+
- `apply_automation_shape(track_index, clip_index, parameter_name, shape, start_value, end_value)` — generate and apply a curve in one call
|
|
90
|
+
|
|
91
|
+
### Recipes
|
|
92
|
+
|
|
93
|
+
`apply_automation_recipe(track_index, clip_index, recipe_name)` — apply a pre-built automation pattern. Available recipes:
|
|
94
|
+
|
|
95
|
+
- `filter_sweep_up` — low-pass filter opens over time, classic build
|
|
96
|
+
- `filter_sweep_down` — filter closes, darkening effect
|
|
97
|
+
- `sidechain_pump` — rhythmic volume ducking on each beat
|
|
98
|
+
- `dub_throw` — delay feedback spikes on specific beats
|
|
99
|
+
- `tremolo` — rhythmic volume oscillation
|
|
100
|
+
- `autopan` — stereo movement back and forth
|
|
101
|
+
- `fade_in` / `fade_out` — gradual volume transitions
|
|
102
|
+
- `stutter` — rapid volume gates for glitch effects
|
|
103
|
+
- `vinyl_crackle` — subtle noise modulation
|
|
104
|
+
- `tape_wow` — pitch/speed micro-variations
|
|
105
|
+
- `bit_crush_sweep` — sample rate reduction over time
|
|
106
|
+
- `resonance_peak` — filter resonance spike for emphasis
|
|
107
|
+
- `stereo_width_grow` — mono to wide stereo expansion
|
|
108
|
+
- `grain_scatter` — granular parameter randomization
|
|
109
|
+
|
|
110
|
+
### Automation Feedback Loop
|
|
111
|
+
|
|
112
|
+
Follow this cycle for all automation work:
|
|
113
|
+
|
|
114
|
+
1. **Perceive:** `get_master_spectrum` + `get_track_meters` to understand current state
|
|
115
|
+
2. **Diagnose:** identify what needs to change based on spectral data
|
|
116
|
+
3. **Act:** `apply_automation_shape` or `apply_automation_recipe`
|
|
117
|
+
4. **Verify:** `get_master_spectrum` again to confirm the change worked
|
|
118
|
+
5. **Adjust:** if not right, `clear_clip_automation` and try different parameters
|
|
119
|
+
|
|
120
|
+
Never write automation without reading spectrum before and after.
|
|
121
|
+
|
|
122
|
+
## Spectrum Analysis (Requires M4L Bridge)
|
|
123
|
+
|
|
124
|
+
When the LivePilot Analyzer M4L device is on the master track:
|
|
125
|
+
|
|
126
|
+
- `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)
|
|
127
|
+
- `get_master_rms` — true RMS and peak levels for loudness assessment
|
|
128
|
+
- `get_detected_key` — detect musical key from audio content
|
|
129
|
+
|
|
130
|
+
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. When FluCoMa streams are active, prefer `get_spectral_shape`, `get_mel_spectrum`, `get_onsets`, and `get_novelty` for character decisions; those descriptors tell you whether the sound is bright/dark, flat/peaked, static/moving, or transient/soft in a way simple level meters cannot.
|
|
131
|
+
|
|
132
|
+
## Mix Engine — Critic-Driven Analysis
|
|
133
|
+
|
|
134
|
+
For deeper mix analysis beyond basic levels and spectrum:
|
|
135
|
+
|
|
136
|
+
- `analyze_mix` — full spectral mix analysis with per-track breakdown
|
|
137
|
+
- `get_mix_issues` — identify specific problems (masking, imbalance, phase)
|
|
138
|
+
- `plan_mix_move` — get a suggested action to fix a detected issue
|
|
139
|
+
- `evaluate_mix_move` — score a proposed change before applying it
|
|
140
|
+
- `get_masking_report` — detect frequency masking between tracks
|
|
141
|
+
- `get_mix_summary` — quick overall mix health status
|
|
142
|
+
|
|
143
|
+
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.
|
|
144
|
+
|
|
145
|
+
## Quick Mix Status
|
|
146
|
+
|
|
147
|
+
`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.
|
|
148
|
+
|
|
149
|
+
## Escalation Ladder
|
|
150
|
+
|
|
151
|
+
Follow this progression — start fast, go deeper only when needed:
|
|
152
|
+
|
|
153
|
+
1. **Instant:** `get_master_spectrum` + `get_track_meters` — frequency balance + safety context.
|
|
154
|
+
2. **Fast character:** `get_spectral_shape` + `get_novelty` + `get_onsets` when available — decide whether the next move belongs to sound design, arrangement, or mix.
|
|
155
|
+
3. **Fast mix (1-5s):** `analyze_loudness` + `analyze_mix` — LUFS, true peak, and full mix analysis. For mastering prep or explicit mix critique.
|
|
156
|
+
4. **Slow (5-15s):** `compare_to_reference` + `analyze_spectrum_offline` — reference matching, offline spectral analysis. Ask the user first.
|
|
157
|
+
|
|
158
|
+
Never skip safety context. Do not let safety context become a long volume-tweaking session unless the user asked for that.
|
|
159
|
+
|
|
160
|
+
## Reference
|
|
161
|
+
|
|
162
|
+
Supporting references live in the `livepilot-core` skill's `references/` directory:
|
|
163
|
+
- `livepilot-core/references/mixing-patterns.md` — gain staging, parallel compression, sidechain, EQ by instrument, bus processing, stereo width
|
|
164
|
+
- `livepilot-core/references/automation-atlas.md` — curve theory, genre-specific recipes, diagnostic filter, cross-track spectral mapping
|