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 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
- spectrum = spectral.get_spectrum()
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.1",
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",