Skip to content

feat: opt-in per-platform VST pack (download + slicing + first-run prompt)#55

Merged
Jafz2001 merged 3 commits into
got-feedBack:mainfrom
mhglover:feat/opt-in-vst-packs
Jul 22, 2026
Merged

feat: opt-in per-platform VST pack (download + slicing + first-run prompt)#55
Jafz2001 merged 3 commits into
got-feedBack:mainfrom
mhglover:feat/opt-in-vst-packs

Conversation

@mhglover

@mhglover mhglover commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

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.
  • Loader search-path: _bundled_vst_plugins() now searches the bundled and downloaded roots (dedup; guarded when _config_dir isn't bound yet).
  • data/vst_packs.json: {mac,win,linux} manifest (placeholder hashes until the vst-<platform>-v1 releases are published).

UI

  • First-run "Use a simulated rig?" prompt (rbInit) offering the download with its size; "Not now" dismisses. One-shot completion poll.
  • Rig achievements (source plugin, competency only): 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

  • Python file:// end-to-end: stream → sha256 mismatch → nested extract → loader finds it → per-platform slice. First coverage of the rig download path.
  • JS seam: size format, gearhead-vs-from-tone decision, tone-download latch.

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

    • Added an optional Simulated Rig VST pack download for Mac, Windows, and Linux.
    • Added download status tracking with progress, completion, and error reporting.
    • Downloaded VST instruments are automatically available in rig-building workflows.
    • Added a first-use prompt with options to download the pack or dismiss it.
    • Added “Simulated Rig” achievement tracking.
  • Enhancements

    • Rig-saving achievements now distinguish between rigs using downloaded tones and custom gear.
    • Added clearer download size information and validation for downloaded packs.

mhglover and others added 2 commits July 20, 2026 23:52
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>
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6352bc34-faf1-4c85-bce3-29c5b79e7227

📥 Commits

Reviewing files that changed from the base of the PR and between bc8b347 and e69a351.

📒 Files selected for processing (5)
  • data/vst_packs.json
  • routes.py
  • screen.js
  • tests/rig_vst_prompt.test.js
  • tests/test_vst_pack_download.py

📝 Walkthrough

Walkthrough

The 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.

Changes

VST pack distribution and simulated rig flow

Layer / File(s) Summary
Backend pack delivery and discovery
data/vst_packs.json, routes.py, tests/test_vst_pack_download.py
Platform metadata, verified background downloads, safe extraction, status/download endpoints, downloaded-root plugin discovery, deduplication, and end-to-end download tests are added.
Frontend prompt and achievement integration
screen.js, tests/rig_vst_prompt.test.js
Startup now offers VST pack downloads, polls completion, persists dismissal and tone state, and updates simulated-rig and rig-save achievements with VM-based helper tests.

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
Loading

Possibly related PRs

Suggested reviewers: jafz2001

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.json

Traceback (most recent call last):
File "/usr/local/bin/checkov", line 2, in
from checkov.main import Checkov
ModuleNotFoundError: No module named 'checkov'


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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>
@mhglover

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Jafz2001
Jafz2001 marked this pull request as ready for review July 22, 2026 22:20
@Jafz2001
Jafz2001 merged commit 34c0682 into got-feedBack:main Jul 22, 2026
1 check was pending
@mhglover
mhglover deleted the feat/opt-in-vst-packs branch July 22, 2026 23:43
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.

2 participants