Skip to content

feat(studio-server,cli): VST sidecar host and carve API - #2920

Closed
vanceingalls wants to merge 1 commit into
vst-0-test-utilsfrom
vst-1-sidecar
Closed

feat(studio-server,cli): VST sidecar host and carve API#2920
vanceingalls wants to merge 1 commit into
vst-0-test-utilsfrom
vst-1-sidecar

Conversation

@vanceingalls

Copy link
Copy Markdown
Collaborator

Stack 2/5 — replaces #2602#2605. Base: #2919.

The studio-server side of the voiceover spectral-carve pipeline.

  • vstSidecar.ts spawns and supervises the hyperframes-vst host, resolving it from the published PyPI package (uvx, or an explicit HYPERFRAMES_VST_HOST override). A shared-secret token is required on the WebSocket so a local port can't be driven by another process on the box.
  • vstCarve.ts + POST /vst/carve run voiceover analysis and return carve bands.
  • The CLI re-exports the sidecar via @hyperframes/studio-server/vst-sidecar so preview can stop it on shutdown; the Vite dev adapter threads the auth token to the browser.

Why this replaces the old stack

The host is not vendored into the monorepo. #2602 added packages/vst-host/ (27 files, ~2,600 lines of Python), #2603 edited it, and #2604 deleted it again to point at PyPI — so it never reached main but cost ~2,600 added and ~2,600 deleted lines of review surface. Here it never exists.

Deletions in this PR: 1 line.

🤖 Generated with Claude Code

Adds the studio-server side of the voiceover spectral-carve pipeline:

- vstSidecar.ts spawns and supervises the hyperframes-vst host process,
  resolving it from the published PyPI package (uvx, or an explicit
  HYPERFRAMES_VST_HOST override), and requires a shared-secret token on the
  WebSocket so a local port can't be driven by another process on the box.
- vstCarve.ts + POST /vst/carve run voiceover analysis and return carve bands.
- The CLI re-exports the sidecar through @hyperframes/studio-server/vst-sidecar
  so preview can stop the process on shutdown, and the Vite dev adapter threads
  the auth token through to the browser.

The host itself is not vendored: it is an external Python package with its own
release cadence, so depending on the published build keeps plugin-host
upgrades out of this repo's release train.

Copy link
Copy Markdown
Collaborator Author

@vanceingalls

Copy link
Copy Markdown
Collaborator Author

Superseded by the Web Audio implementation.

The sidecar approach is replaced by running Web Audio graphs on both ends: the studio previews in a live AudioContext, and the engine renders the same graphs in an OfflineAudioContext inside the headless browser it already drives. One implementation per effect, so preview matching render is a property of the architecture rather than a tolerance to police — which is what made the four effects that diverged under JUCE (compressor, limiter, chorus, phaser) stop being a problem.

That also retires the reasons this was cancelled in the first place: no spawned sidecar process, no external GPL repo, no uv tool install for users, and no plugin-missing failure mode in the render path.

Measurements behind the decision: https://claude.ai/code/artifact/219fd332-0542-4bcf-a4b7-7b7202e63fde

Branch left intact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant