Skip to content

Releases: ramonsesma/live-studio

v1.2.2 — fix stale counts on landing page + READMEs

Choose a tag to compare

@ramonsesma ramonsesma released this 09 Jul 02:38

Fixes stale hero-stat numbers on the GitHub Pages landing page and both READMEs (were 2 releases behind). No functional changes.

Full Changelog: v1.2.1...v1.2.2

Full Changelog: v1.2.1...v1.2.2

v1.2.1 — custom icons + 3 new rich panels + tools audit

Choose a tag to compare

@ramonsesma ramonsesma released this 09 Jul 01:53

Follow-up polish for v1.2.0's new-module batch.

Icons: the 12 modules added in v1.2.0 were falling back to the sidebar's generic
glyph — they had an emoji in the registry but no entry in the hand-drawn icon set.
Added a proper line icon + tint color for each, matching the rest of the modules.

Audit: read all 34 new tools end to end. Every one mutates the real Live Set or
processes the clip's real audio — nothing demo or stubbed.

3 new rich panels for the modules where the autoform genuinely fell short:

  • Strip Silence — visual RMS silence map before trim/split
  • Transient Tools — real onset markers on a timeline, live sensitivity slider
  • Linked Clips — group manager (list/sync/unlink), replacing hand-typed refs

144 modules · 414 tools · 119 rich panels · 90 quick actions · 325/325 tests.

v1.2.0 — 12 new modules, 34 new real tools (Tiers 1-3)

Choose a tag to compare

@github-actions github-actions released this 08 Jul 20:20

New modules (12)

Module What it really does
Strip Silence Maps a clip's real silence from its measured RMS envelope; trims lead/tail or splits per sound region.
Transient Tools Real onset detection as tools: list transients, slice per hit, or grid-quantize audio without Live's Warp engine (segment shift + crossfade rebuild).
Clip Audio Editor Millisecond-precision region edits (trim/silence/gain/fades) rendered to a fresh file — original untouched.
Audio Convert Real linear resampling to any rate + peak-safe RMS normalize to a target loudness.
Extreme Stretch Our own seeded granular freeze engine: 2-200× stretch, zero pitch shift, deterministic per seed.
Reverse Verb The classic reverse-reverb swell built from your clip's audio (reverse → Schroeder reverb → flip back).
Disintegrate Feeds a clip through a degrade chain N times (lofi/saturate/smear/darken) with optional milestone files — tape-generation decay.
MIDI Retime Half-time / double-time / any-factor rescale of a clip's real note timing, undoable.
Linked Clips Master/slave clip groups (persisted): edit one, propagate its notes to all linked clips in one call.
Drum Extract Splits a Drum Rack's active pads (notes that really occur) onto separate new tracks.
Cue Sheet Turns your real cue points into a mixtape .cue/.txt, written to storage.
Image → MIDI Any image becomes scale-mapped notes — the new rich panel (#116) decodes it right in the webview.

Extended modules (+7 tools)

clips__reset_clip (probe-and-reset loop/mute/pitch/gain — honest about what the SDK lets us set), clips__batch_rename (tokens + auto-versioning), saferandom__list_synth_sections + randomize_sections (semantic osc/filter/env/lfo/fx/mix randomization, seeded, quantized params skipped), miditransform__transpose_indexed (odd/even/every-Nth), sessionbridge__flatten_scene, fxchain__add_device_to_all, stemexport__export_sections (per-section renders with real embedded RIFF INFO metadata + optional RMS normalize). Plus a tail parameter for the drum-synth clap.

New totals: 144 modules · 414 tools · 116 rich panels · 90 quick actions — all translated to Spanish too.

Verification

325/325 smoke tests (27 new end-to-end checks — the DSP tools are tested against a real WAV fixture on disk: measured silence lands within 60 ms of truth, resampling is verified by re-decoding the output file, stretch determinism by seed, cue-sheet timestamps byte-checked). Browser-verified: the Image→MIDI panel wrote 70 real notes from its demo grid onto a new track, read back through an independent module.

v1.1.3 — Fix false 'error' log lines on startup

Choose a tag to compare

@github-actions github-actions released this 08 Jul 15:07

Fixed: 6 false "error" lines on every successful launch

Testers reported seeing errors in Live's Extension Host log on every launch:

```
error: [live-studio]: [LiveStudio] context action registered: AudioTrack
error: [live-studio]: [LiveStudio] context action registered: MidiTrack
error: [live-studio]: [LiveStudio] context action registered: ClipSlot
error: [live-studio]: [LiveStudio] context action registered: AudioClip
error: [live-studio]: [LiveStudio] context action registered: MidiClip
error: [live-studio]: [LiveStudio] context action registered: Scene
```

Nothing was broken. Live tags any console.error() call as error: in its log — and these were purely informational success messages ("this context menu registered fine") that had been logged with the wrong console method. Switched them (plus the "Ready" and "Server on http://..." lines) to console.log(). The two remaining console.error() calls in the codebase are genuine failure paths and were left untouched.

Verified no other misuse exists elsewhere in the codebase, and that the smoke suite has no dependency on this log text.

Verification

299/299 smoke tests, full pipeline (typecheck, build, test) run 3× for stability.

v1.1.2 — Fake-tool audit: 4 made real, 2 deleted

Choose a tag to compare

@github-actions github-actions released this 08 Jul 14:37

Tester-reported fake tools, hunted down for real

Testers found tools that still pretended to work. This release's audit didn't rely on pattern-matching: it executed every tool against a fresh mock Set and diffed a deep state fingerprint before/after — any action tool returning success without actually changing anything (and without an honest advisory flag) was read and judged by hand.

Made real (4)

  • midigate__generate_gate_pattern — used to return a Math.random() note count without writing a single note. Now writes an actual MIDI gate-pattern clip: deterministic euclidean spread by density, swing on offbeats, accents on downbeats. Undoable via Edit History.
  • midigate__set_gate_pattern — used to create an empty junk track. Now writes your binary pattern (1/x on, 0/./- off) as real notes in a real clip. The Trance Gate panel now genuinely writes what you draw.
  • organizer__group_scenes — was analysis dressed as an action. Now classifies scenes AND (opt-in apply_names) renames them in place with a [Section] prefix — real scene.name writes, idempotent.
  • clips__auto_tag_clips — claimed autoTagged:true while writing nothing. Now honest analyze-by-default, with opt-in write_names that appends #tags to each clip's real name (Live has no separate tag field — the description says so).

Deleted (2) — nothing real was possible behind the claim

  • midigate__gate_to_audio — created an empty audio track claiming rendered:true. Real audio gating needs the in-Live render pipeline; use the pattern clip to sidechain a Gate device instead.
  • temposync__sync_tracks_to_tempo — set the global tempo (duplicating set_tempo) then fabricated per-track "synced" results. The SDK has no per-track sync operation, so the tool is gone.

Tool count is now an honest 380 (was 382), refreshed across the app, docs, landing page and catalog.

Verification

299/299 smoke tests (7 new regression checks: real note write-back verified by an independent module, no-RNG determinism, deleted tools absent, real renames), run 3×. The dynamic audit was re-run after the fixes and comes back clean — every remaining flag was individually reviewed as a justified false positive. Browser-verified end to end: the Trance Gate panel applied a pattern and notation__get_clip_notes read the 8 real notes back from the clip — before this fix it would have read 0.

v1.1.1 — Tool description translations + GitHub Pages landing

Choose a tag to compare

@github-actions github-actions released this 05 Jul 02:55

Full Spanish translation of the toolset

All 132 module descriptions and 382 tool descriptions now have Spanish translations, shown in the autoform, command palette and panel headers when the UI is in Spanish (public/desc-i18n.js). The English text the AI copilot's LLM prompt reads (find_tools/run_tool) stays untouched — this is a display-only layer, same one-dictionary pattern as the shell's own i18n, so there's still exactly one codebase and zero duplicated files. Coverage is verified exact (132/132, 382/382, no orphan keys) by a dedicated smoke test.

Honesty check: 0 demo tools, confirmed

Re-ran the demo/real classifier against the live code and fixed a false-positive: two tools (notes__add_note, setlist__create_setlist) mint a unique id with Math.random() before a genuine saveJson() disk write, and the classifier didn't recognize storage calls as "real work." Fixed the classifier itself so this can't recur. Confirmed: 0 of 382 tools are demo-badged.

Real GitHub Pages landing site

docs/index.html is now a proper landing page (not just the auto-generated catalog): the actual cover artwork as the hero visual, a color palette sampled directly from the artwork's pixels (gold/violet/coral, not guessed), and 12 custom hand-drawn SVG icons matching the extension's own icon language — no generic emoji. Bilingual EN/ES toggle, same pattern as the extension. The searchable catalog moved to docs/catalog.html and now expands all modules by default, so "browse the tools" actually shows tools instead of a wall of collapsed accordions.

Verification

292/292 smoke tests, run repeatedly for stability. Landing page verified in a real browser in both languages — hero, features, copilot section, screenshots, catalog — no console errors.

v1.1.0 — Lazy panels, EN/ES i18n, Gemini & NVIDIA copilot

Choose a tag to compare

@github-actions github-actions released this 02 Jul 17:38

Lazy panel loading (for real this time)

A previous release's comment claimed panels loaded lazily, but index.html was still eagerly loading all 115 panel <script> tags (~672 KB parsed before the UI could even render). Now each panel's script is fetched on first visit to its module and cached — a 404 (module has no rich panel) falls back to the autoform with no manifest needed. Verified in a real browser: zero /panels/*.js requests at boot, exactly one the instant you open a module.

Bilingual UI (EN/ES)

The shell now auto-detects the system language, with a manual EN/ES toggle in the sidebar footer (persisted). This is one shared codebase, not two trees — a single string dictionary (public/i18n.js) that shell.js's fixed chrome (nav, dashboard, copilot, command palette) reads through t(key, vars). No duplicated HTML/JS. As a side effect, this fixed a few strings that were previously hardcoded Spanish inside otherwise-English UI (the command palette's meta line, "acciones ejecutadas", the tool/acción tag) — they now correctly switch with the rest of the interface.

AI Copilot: Gemini and NVIDIA NIM

Added as new providers alongside OpenRouter, OpenAI and OpenCode Zen — both via their real OpenAI-compatible /chat/completions endpoints (verified against current docs via Context7, not assumed):

  • Gemini: https://generativelanguage.googleapis.com/v1beta/openai
  • NVIDIA NIM: https://integrate.api.nvidia.com/v1

No new client class was needed — both fit the existing OpenAI-compatible client. Endpoint resolution was extracted into resolveProviderConfig() so it's smoke-tested for every provider without a real network call.

Docs

README.md/README.es.md: the "For developers" section now documents npm run new:module and npm run gen:catalog (previously missing); rich-panel docs no longer tell you to edit index.html; provider lists updated; new feature bullets for i18n and lazy loading.

Verification

286/286 smoke tests (up from 280: no-preload check, missing-panel 404, three provider-endpoint checks). Verified in a real browser: language toggle flips the whole UI and persists across reloads; network tab confirms the lazy-loading behavior end to end.

v1.0.6 — Dashboard, live updates & copilot plan mode

Choose a tag to compare

@ramonsesma ramonsesma released this 02 Jul 05:05

Live updates (SSE)

The extension now pushes real-time updates to the UI. A server-side poller diffs a cheap fingerprint of the Set every 1.5s (only while the webview is listening — a closed webview costs Live nothing) and broadcasts song events over /api/events. Panels subscribe with one line (helpers.onSongChanged); already wired: Dashboard, Mix Console (drag-safe — never interrupts a fader move), Project Health and Bulk Track Manager (never clears an in-progress selection).

Dashboard

Opening Live Studio now lands on a home view instead of the first module: BPM, key, track/clip/scene/cue counts, a live track table, your last project snapshots, and one-click chips for favorites, recents and suggested starting points. It refreshes itself as the Set changes.

Favorites, recents & work profiles

  • Pin any module with the star that appears on hover — pinned modules get their own sidebar section.
  • The last 5 modules you used show under "Recent".
  • A work-profile selector filters the module list: All / Mixing / Sound design / Performance — the 40+ generative synths no longer crowd the sidebar while you mix.
  • Everything persists server-side (survives webview reloads and Live restarts).

Copilot plan mode

A "Plan first" toggle in the AI Copilot: the model explores the toolset read-only (it cannot execute anything) and returns a step-by-step plan rendered as a reviewable card — exact tool, args and reason per step. You apply it with one click; each step runs through the normal tool path so it's undoable via Edit History. Tools the model hallucinated are flagged and skipped, never executed. Also fixed: the copilot's system prompt claimed "242 tools / 57 modules" — counts are now computed from the real registry (382 / 132).

For developers

  • npm run gen:catalog — generates a static, searchable catalog of all 132 modules / 382 tools / 115 rich panels (docs/index.html) straight from the real registry, with demo/advisory badges. Ready to publish with GitHub Pages (Settings → Pages → main /docs).
  • npm run new:module -- <id> "<Label>" [icon] ["desc"] — scaffolds a complete module (tools.ts, rich panel with live refresh, registry registration, panel script tag, smoke-test entries) in one command; the suite stays green with zero manual edits.

Honesty

Removed the false "VU" claims from the READMEs and the Mix Console module description — the SDK exposes no live metering, and we don't pretend otherwise.

Verification

280/280 smoke tests (up from 271: overview endpoint, prefs persistence roundtrip, SSE hello + real change-detection event, plan parsing). All new UI verified in a real browser against the real server: live tempo/fader refresh without manual reload, profile filtering, favorite pinning persisted across processes, and a real plan apply (2 ok / 1 unknown skipped).

v1.0.5 — Rich panel audit + UI cleanup

Choose a tag to compare

@ramonsesma ramonsesma released this 02 Jul 03:59

Rich panel audit

Second full audit of the 132-module rich-panel coverage. Findings closed in full:

Fixed (desynced from backend):

  • takes — removed fake rating/selected fields no longer returned by the backend; added a real "Arm for recording" action; advisory results (select-best-takes, comp-from-takes) now show their advisory:true note honestly instead of implying a finished result.
  • genarranger — added missing structure selector (intro-verse-chorus / verse-chorus-bridge / ambient-flow); replaced the advisory-only "apply energy curve" action with a real "drop cue points on timeline" call.
  • clipgraph — legend now matches the real edge types returned by the backend (same-track / same-color); graph nodes are clickable to seed the arrangement-suggestion call.
  • mixconsole — fixed a real pan-slider range bug (was -1..1, backend expects 0..1); header no longer claims VU metering it doesn't do; sends are now live sliders wired to set_send.

Deepened:

  • drummap — pad click now opens an inline note editor calling the real set_drum_mapping tool; preset loading is honestly labeled advisory (no API to load .adg files).
  • stepseq — added density/variation controls with a randomize action, per-step velocity editing, and a "load from clip" sync against real clip notes.
  • notation — added transpose actions (-12/-1/+1/+12 semitones), undoable via Edit History.

11 new rich panels for previously panel-less modules: templates, mixscene, tempotap, notes, sandbox, delaycalc, setlist, fxpresets, groove, colorizer, vocal — bringing rich-panel coverage from 104 to 115 of 132 modules.

Also: setlist__list_setlists now returns each setlist's real song list, not just a count.

UI

  • Removed the "Live Studio · GPL v3" credit line from the sidebar footer (and its now-dead CSS).

Verification

271/271 automated smoke tests pass. All new/changed panels additionally verified against a live server in a real browser session (not just the test suite).

v1.0.4 — honest tool audit, real undo/redo, Device Remote/Stem Export/Mix Coach, discoverability fix

Choose a tag to compare

@ramonsesma ramonsesma released this 26 Jun 02:47

This release now includes everything accumulated on top of the original v1.0.4 tag — same version number, updated build.

Honesty pass (round 1): ~85 tool instances across ~40 modules that used to silently fake success now either call the real Ableton SDK (track mute/solo/arm, cue points, drum-chain note mapping, real note/clip edits, real device inserts) or return an honest advisory explaining what the SDK genuinely can't do. Retired the broken snapshots module (superseded by Project Snapshot).

Honesty pass (round 2 — post-release audit): fixed 6 more residual fakes: setlist now persists to disk instead of echoing args back; tempotap.tap_reset actually clears its tap history instead of returning a hardcoded count; mixassistant.reference_match reads/writes real fader values instead of returning empty objects; genarranger.generate_arrangement now actually respects style/sections/energy_curve (and apply_arrangement uses that real plan instead of its own separate mismatched template); organizer dropped a no-op folder-creation placeholder and now persists session templates so they're really appliable.

Gray zone → real pipeline: eq__suggest_eq / mixassistant__suggest_eq and eq__get_sidechain_suggestions used to return the same fixed advice regardless of track content. They now render the track and analyze its real spectrum (sub-rumble, boxiness, harshness, air), and the sidechain release time is synced to the Set's real tempo with a real low-end overlap check driving the ratio.

Discoverability fix: found that MasterRegistry.addTool() (the mechanism wiring Bridge-backed tools like the masking matrix, autogain, snapshot save/restore, stem export and mix coach into the copilot) was exposing the wrong, unnamespaced tool name to find_tools/GET /api/tools — the handler worked fine if called directly by name, which is why it slipped through, but the AI copilot could never discover these 13 tools on its own. Fixed, with a regression test.

Real undo/redo: Edit History now supports genuine redo (not "undo of the undo") via self-toggling restore closures. The panel is a two-column undo/redo timeline you can jump into.

New modules: Device Remote (control any device incl. Max for Live, with snapshots and real-time parameter sweeps), Stem Export (batch WAV export with automatic naming), Mix Coach (health + masking + gain-staging fused into one prioritized next-steps list).

Deepened: Project Snapshot restore is now undoable and syncs missing cue points back in, plus a diff-vs-live-state comparison. Resonance's masking matrix moved from panel-only JS into a real backend tool the AI copilot can call directly. Template wizard now extracts/applies real device chains, plus one-click genre starter kits.

132 modules · 382 tools · 83 quick actions · 104 rich panels · 271/271 smoke tests passing, stable across repeated runs.