Skip to content

Slim the nightly: 1.5 GB downloads should be ~400 MB plus opt-in content #122

Description

@mhglover

Slim the nightly: 1.5 GB downloads should be ~400 MB plus opt-in content

The problem

The nightly downloads are huge. Every platform payload is ~1.5 GB, nightly
testers auto-download all of it every night (the nightly channel ships full
nupkgs, no deltas), and every install carries ~1.4 GB of media and binaries
that many users will never use. That's not respectful of users' bandwidth or
disk space — and it's about to break: GitHub caps release assets at 2 GiB,
the win full.nupkg is already at 1.57 GB, and career venue packs are still
being added.

How it could be instead

We ship a slim nightly application file (~350–400 MB — Electron, Python
runtime, audio addon, ffmpeg, soundfont, starter songs). During initial
launch, the app asks two questions:

  • "Do you want a simulated rig?" — yes starts downloading the amp/effect
    tones (per-platform VST pack) in the background. Users who fork audio
    through their own physical rig — the game silently monitoring their
    instrument — skip this and never carry a byte of it.
  • "Do you want to play career mode?" — yes starts downloading the
    starter venue (119 MB); higher-tier venues can download all at once or as
    the user starts to approach needing them, depending on how conservative we
    want to be. Users who don't play career carry zero venue bytes.

Either download can also be started later from Settings. Nightly updates
shrink to the slim app; the big content updates only when it actually
changes.

Where the 1.5 GB comes from

The payload grew 6× in two weeks, in two discrete jumps (win-x64 artifact):

Night Size Event
07-03 0.79 GB baseline
07-07 3.08 GB rig_builder joined the bundle: 644 MB of VST3s, each a fat mac+win+linux bundle — all three OS slices ship to every platform
07-14 4.83 GB club + arena venue packs committed into core (feedBack#961/#963): 678 MB of crowd MP4s, bundled on every platform

Composition per platform: 797 MB career venue packs (bar 119 / club 343 /
arena 335) + ~650 MB rig_builder VST3s + ~350–400 MB actual app. Each
artifact then carries the payload 2–3× (win: zip + full.nupkg + msi), so one
night's artifacts total ~12.5 GB.

The Docker nightly is unaffected — core's .dockerignore never ships
plugins/career/. (Side observation: the career plugin is therefore absent
from the Docker image entirely — intended?)

Most of the plumbing already exists

  • Venue packs are deferrable today. The career plugin already has
    POST /packs/{venue_id}/download with background progress, a pack URL
    field in venues.json (currently null), downloaded-override →
    bundled-fallback resolution, and graceful no-pack degradation (crowd
    manifest cleared, per-venue "Download venue pack" buttons). Needed: host
    the packs (release assets), set the URLs, stop bundling.
  • VST download needs a small amount of new code. VSTs load strictly from
    <plugin_dir>/vst today, but rig_builder already runtime-downloads NAM
    captures (tone3000, disk budget), so the download pattern exists
    in-plugin. Publish per-platform-sliced VST packs as release assets;
    download into a config-dir location and add it to the VST search path.
    Interim zero-code option: platform-slice the fat .vst3 bundles at build
    time (−430 MB/platform while still bundling).

Also worth doing

  • Artifact retention 7d → 2d in nightly.yml (−~60 GB standing storage —
    artifacts only ferry files to the publish job; testers use the release).
  • Stop committing venue packs to core git — the repo is ~1 GB
    server-side, every re-render re-adds its full weight to history forever,
    and the largest arena file is 89 MB against GitHub's 100 MB hard limit.
  • Optionally re-encode the crowd MP4s — 55–93 MB per loop is generous; a
    lower bitrate could roughly halve pack sizes.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions