livepilot 1.6.1 → 1.6.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 +5 -0
- package/mcp_server/tools/automation.py +58 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.6.2 — Automation Params Fix (March 2026)
|
|
4
|
+
|
|
5
|
+
- Fix: expose all curve-specific params in `generate_automation_curve` and `apply_automation_shape` MCP tools — `values` (steps), `hits`/`steps` (euclidean), `seed`/`drift`/`volatility` (organic), `damping`/`stiffness` (spring), `control1`/`control2` (bezier), `easing_type`, `narrowing` (stochastic)
|
|
6
|
+
- Fix: `analyze_for_automation` spectral getter used wrong method (`.get_spectrum()` → `.get("spectrum")`)
|
|
7
|
+
|
|
3
8
|
## 1.6.1 — Hotfix (March 2026)
|
|
4
9
|
|
|
5
10
|
- Fix: `clip_automation.py` imported `register` from `utils` instead of `router`, causing Remote Script to fail to load in Ableton (LivePilot disappeared from Control Surface list)
|
|
@@ -137,6 +137,26 @@ def apply_automation_shape(
|
|
|
137
137
|
factor: float = 3.0,
|
|
138
138
|
invert: bool = False,
|
|
139
139
|
time_offset: float = 0.0,
|
|
140
|
+
# Steps params
|
|
141
|
+
values: Optional[list[float]] = None,
|
|
142
|
+
# Euclidean params
|
|
143
|
+
hits: int = 5,
|
|
144
|
+
steps: int = 16,
|
|
145
|
+
# Organic params
|
|
146
|
+
seed: float = 0.0,
|
|
147
|
+
drift: float = 0.0,
|
|
148
|
+
volatility: float = 0.1,
|
|
149
|
+
damping: float = 0.15,
|
|
150
|
+
stiffness: float = 8.0,
|
|
151
|
+
# Bezier params
|
|
152
|
+
control1: float = 0.0,
|
|
153
|
+
control2: float = 1.0,
|
|
154
|
+
control1_time: float = 0.33,
|
|
155
|
+
control2_time: float = 0.66,
|
|
156
|
+
# Easing params
|
|
157
|
+
easing_type: str = "ease_out",
|
|
158
|
+
# Stochastic params
|
|
159
|
+
narrowing: float = 0.5,
|
|
140
160
|
) -> dict:
|
|
141
161
|
"""Generate and apply an automation curve to a session clip.
|
|
142
162
|
|
|
@@ -177,6 +197,14 @@ def apply_automation_shape(
|
|
|
177
197
|
low=low, high=high,
|
|
178
198
|
factor=factor,
|
|
179
199
|
invert=invert,
|
|
200
|
+
values=values or [],
|
|
201
|
+
hits=hits, steps=steps,
|
|
202
|
+
seed=seed, drift=drift, volatility=volatility,
|
|
203
|
+
damping=damping, stiffness=stiffness,
|
|
204
|
+
control1=control1, control2=control2,
|
|
205
|
+
control1_time=control1_time, control2_time=control2_time,
|
|
206
|
+
easing_type=easing_type,
|
|
207
|
+
narrowing=narrowing,
|
|
180
208
|
)
|
|
181
209
|
|
|
182
210
|
# Apply time offset
|
|
@@ -293,6 +321,26 @@ def generate_automation_curve(
|
|
|
293
321
|
high: float = 1.0,
|
|
294
322
|
factor: float = 3.0,
|
|
295
323
|
invert: bool = False,
|
|
324
|
+
# Steps params
|
|
325
|
+
values: Optional[list[float]] = None,
|
|
326
|
+
# Euclidean params
|
|
327
|
+
hits: int = 5,
|
|
328
|
+
steps: int = 16,
|
|
329
|
+
# Organic params
|
|
330
|
+
seed: float = 0.0,
|
|
331
|
+
drift: float = 0.0,
|
|
332
|
+
volatility: float = 0.1,
|
|
333
|
+
damping: float = 0.15,
|
|
334
|
+
stiffness: float = 8.0,
|
|
335
|
+
# Bezier params
|
|
336
|
+
control1: float = 0.0,
|
|
337
|
+
control2: float = 1.0,
|
|
338
|
+
control1_time: float = 0.33,
|
|
339
|
+
control2_time: float = 0.66,
|
|
340
|
+
# Easing params
|
|
341
|
+
easing_type: str = "ease_out",
|
|
342
|
+
# Stochastic params
|
|
343
|
+
narrowing: float = 0.5,
|
|
296
344
|
) -> dict:
|
|
297
345
|
"""Generate automation curve points WITHOUT writing them.
|
|
298
346
|
|
|
@@ -312,6 +360,14 @@ def generate_automation_curve(
|
|
|
312
360
|
low=low, high=high,
|
|
313
361
|
factor=factor,
|
|
314
362
|
invert=invert,
|
|
363
|
+
values=values or [],
|
|
364
|
+
hits=hits, steps=steps,
|
|
365
|
+
seed=seed, drift=drift, volatility=volatility,
|
|
366
|
+
damping=damping, stiffness=stiffness,
|
|
367
|
+
control1=control1, control2=control2,
|
|
368
|
+
control1_time=control1_time, control2_time=control2_time,
|
|
369
|
+
easing_type=easing_type,
|
|
370
|
+
narrowing=narrowing,
|
|
315
371
|
)
|
|
316
372
|
return {
|
|
317
373
|
"curve_type": curve_type,
|
|
@@ -349,7 +405,8 @@ def analyze_for_automation(
|
|
|
349
405
|
spectral = ctx.lifespan_context.get("spectral")
|
|
350
406
|
spectrum = {}
|
|
351
407
|
if spectral and spectral.is_connected:
|
|
352
|
-
|
|
408
|
+
data = spectral.get("spectrum")
|
|
409
|
+
spectrum = data["value"] if data else {}
|
|
353
410
|
|
|
354
411
|
# Get meter level
|
|
355
412
|
meters = ableton.send_command("get_track_meters", {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "livepilot",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"mcpName": "io.github.dreamrec/livepilot",
|
|
5
5
|
"description": "AI copilot for Ableton Live 12 — 135 tools, device atlas (280+ devices), real-time audio analysis, automation intelligence, and technique memory",
|
|
6
6
|
"author": "Pilot Studio",
|