feat: opt-in per-platform VST pack (download + slicing + first-run prompt)#55
Conversation
The fat VST3 bundles (~650 MB) are no longer shipped in the desktop build;
they download on demand, sliced to the current platform, from a versioned
release. Mirrors career's pack pipeline (stream -> sha256 verify -> extract ->
install), but the tree is nested and lands in a WRITABLE config-dir root
(_config_dir/nam_rig_builder/vst) because the bundled plugin dir is read-only
in packaged builds. The VST loader now searches both roots.
- POST /download_vst_pack + GET /vst_pack_status (platform-selected, 409 while
running, size for the download-consent disclosure).
- data/vst_packs.json: {mac,win,linux} pack manifest (placeholder hashes until
the vst-<platform>-v1 releases are published).
- _bundled_vst_plugins() searches bundled + downloaded roots (dedup); guarded
when _config_dir isn't bound yet.
- Test: file:// end-to-end (stream -> sha256 mismatch -> nested extract ->
loader finds it -> per-platform slice). First coverage of the download path.
Part of the nightly-slimming effort (feedBack-desktop#122).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Wire the opt-in VST pack into the UI:
- First-run prompt in rbInit(): if the simulated-rig VSTs aren't installed and
a pack is published, offer the download with its size ("Download (~210 MB)")
via an rbBanner in #rb-root; "Not now" dismisses (localStorage). Polls
GET /vst_pack_status to a one-shot completion (mirrors rbOauthPoll).
- Rig achievements (rig_builder is a source plugin; competency only, documented
pending-queue contract): rig_simulated (downloaded the pack), rig_from_tone
(built a rig after downloading a tone), rig_gearhead (built a rig with own
gear, no tones). Latches the tone-download flag in rbAutoDownloadSong.
- Design-intent comment: achievements reward real musician learning.
- window.__rbTest seam + JS tests (format, gearhead-vs-from-tone, latch).
Completes the opt-in VST work (feedBack-desktop#122).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThe PR adds platform-specific opt-in VST pack downloads with SHA-256 verification, safe extraction, status APIs, downloaded-plugin discovery, a first-run simulated-rig prompt, and achievement tracking. Backend and frontend behavior are covered by new pytest and VM-based JavaScript tests. ChangesVST pack distribution and simulated rig flow
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant screen.js
participant routes.py
participant VSTPackArchive
participant PluginDiscovery
User->>screen.js: load simulated rig
screen.js->>routes.py: request VST pack status
routes.py-->>screen.js: return availability and state
User->>screen.js: choose Download
screen.js->>routes.py: start VST pack download
routes.py->>VSTPackArchive: stream, verify, and extract archive
screen.js->>routes.py: poll download status
routes.py-->>screen.js: return completion state
screen.js->>PluginDiscovery: load downloaded VST plugins
Possibly related PRs
Suggested reviewers: ✨ Finishing Touches🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 Checkov (3.3.8)data/vst_packs.jsonTraceback (most recent call last): Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
vst_packs.json ships 0-byte placeholders until the vst-<platform>-v1 releases exist. Gate has_pack (and the download endpoint) on a real, publish-stamped size so the first-run prompt doesn't offer a download that can only fail. Caught by a runtime smoke against the placeholder manifest. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
Draft — part of the nightly-slimming effort (feedBack-desktop#122). Companion to the core slicing PR (feedBack#1025) and the desktop bundle-strip PR.
The fat VST3 bundles (~650 MB) stop shipping in the desktop build; they download on demand, sliced to the current platform.
Backend
POST /download_vst_pack+GET /vst_pack_status— platform-selected, 409 while running, size for the download-consent disclosure. Mirrors career's pack pipeline (stream → sha256 verify → extract → install) but the tree is nested and lands in a writable config-dir root (_config_dir/nam_rig_builder/vst) because the bundled plugin dir is read-only in packaged builds._bundled_vst_plugins()now searches the bundled and downloaded roots (dedup; guarded when_config_dirisn't bound yet).data/vst_packs.json:{mac,win,linux}manifest (placeholder hashes until thevst-<platform>-v1releases are published).UI
rbInit) offering the download with its size; "Not now" dismisses. One-shot completion poll.rig_simulated(downloaded the pack),rig_from_tone(built a rig after downloading a tone),rig_gearhead(built a rig with own gear, no tones). Design-intent comment: reward real musician learning.Tests
Note
3 unrelated pre-existing test failures in this repo (watcher/manifest path-preservation) are not touched by this PR.
Summary by CodeRabbit
New Features
Enhancements