comfyui: pin the application version and bump to v0.33.1 for MiniMax Music3 - #179
Merged
Merged
Conversation
…Music3 The pinned COMFYUI_IMAGE digest only ever pinned the *runtime* (torch, CUDA, the boot entrypoint). ComfyUI itself lives on the `comfyui-app` volume, so the running application version was whatever was last checked out by hand — unpinned, undeclared, and unreproducible. Installing MiniMax Music3 needs a version bump (the nodes landed upstream in efd4e951a0), so fix the declaration gap first rather than hand-checkout a second time. * `COMFYUI_APP_REF` in services/comfyui/plugin.yaml declares the application version as a full commit SHA (v0.33.1 = 72865f4f), never a tag or branch. * scripts/comfyui/boot.sh replaces the inline compose command blob and reconciles the checkout to that ref on every start. If the volume has drifted it fetches and checks out; if it cannot, it refuses to boot rather than serve a version nobody declared. Steady-state boots are offline no-ops. * The Comfy-Org runtime pins (frontend, kitchen, aimdo, workflow-templates, embedded-docs) are read out of the pinned ref's own requirements.txt instead of being restated here, so app and deps cannot drift apart. They install to the user site, which outranks both /usr/local/lib and /usr/local/lib64 — ending the shadowing class that silently broke every fp8 load on 2026-08-07 — and are verified after install rather than assumed. Music3 itself: * scripts/comfyui/models.json gains a `minimax-music3` pack, URLs pinned to the Comfy-Org repack revision (not /resolve/main/). This replaces an untracked throwaway download script that lived on the volume. * scripts/comfyui/workflows/minimax-music3.json is the committed workflow, seeded by boot.sh into a repo-owned `user/default/workflows/ordo/` namespace. * services/song-gen/plugin.yaml declares both backends as data, with the ComfyUI version each needs; its VRAM floor rises to 24GB (Music3 is the larger one). The pack-capability vocabulary grows an `audio` member — it lives only in tests/test_dashboard_comfyui_packs.py, and a song model would otherwise have to lie about itself as "other". Validated live on the deployed stack: declared == running (image digest, app ref and `git rev-parse HEAD` all agree), /system_stats reports 0.33.1, an fp8 Flux render and a 30s Music3 track both completed through the gpu-gate, and the arbitration cycle held throughout (llamacpp evicted to llamacpp-cpu on grant, restored to the 5090 after the drain). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Installing MiniMax Music3 requires ComfyUI >= v0.33.1 (the nodes landed upstream in
efd4e951a0); the stack was on v0.30.2. But the bump surfaced a bigger problem worth fixing first.The pinned
COMFYUI_IMAGEdigest only ever pinned the runtime — torch, CUDA, the boot entrypoint. ComfyUI itself lives on thecomfyui-appnamed volume (moved there in #156 to escape the 9p pathology), so the image says nothing about which ComfyUI is actually running. The answer was "whatever was last checked out by hand on the volume": unpinned, undeclared, unreproducible. Hand-checking-out a second version would have repeated the workaround instead of fixing it.What changed
The application version is now declared and enforced
COMFYUI_APP_REFinservices/comfyui/plugin.yamldeclares it as a full commit SHA —72865f4f(v0.33.1). Never a tag or branch; tags are movable refs.scripts/comfyui/boot.shreplaces the 20-line inline composecommand:blob and runs as the container command (same pattern asscripts/llamacpp/run-llama-server.sh). On every start it reconciles the checkout to the declared ref. If the volume has drifted it fetches and checks out; if it cannot, it refuses to boot rather than serve a version nobody declared. Steady-state boots touch the network zero times.comfyui-frontend-package,comfy-kitchen,comfy-aimdo,comfyui-workflow-templates,comfyui-embedded-docs) are read out of the pinned ref's ownrequirements.txtrather than restated in our config — one source of truth, so the app and its runtime deps cannot drift apart. BumpingCOMFYUI_APP_REFautomatically carries the right deps./root/.local), which outranks both/usr/local/liband/usr/local/lib64onsys.path. That ends the shadowing class that silently broke every fp8/nvfp4 load on 2026-08-07, instead of playing whack-a-mole withrm -rfon whichever copy won. Versions are verified after install, not assumed.Music3
scripts/comfyui/models.jsongains aminimax-music3pack with URLs pinned to the Comfy-Org repack revision6444666e(not/resolve/main/, which is a moving ref). This replaces an untracked throwawaydl_music3.shthat lived on the volume.scripts/comfyui/workflows/minimax-music3.jsonis the committed workflow (API format, so it is both the UI starting point and what automation submits).boot.shseeds it into a repo-owneduser/default/workflows/ordo/namespace — operator-authored graphs in sibling dirs are never touched.services/song-gen/plugin.yamldeclares both backends as data, each with the ComfyUI version it needs. Its VRAM floor rises 20 → 24 GB (Music3 is the larger backend).Vocabulary
tests/test_dashboard_comfyui_packs.pygainsaudioto the pack-capability set. That set is the vocabulary — the dashboard passes the field through verbatim — and a song-generation pack would otherwise have to lie about itself asother.Validation (live, on the deployed stack)
sha256:4172d960…,COMFYUI_APP_REF, andgit rev-parse HEADall agree on72865f4f/system_stats→comfyui_version: 0.33.1, torch2.11.0+cu128, device RTX 5090comfy-kitchen0.2.31 quant runtime — the highest-risk dep in the bump)llamacpp-cpu→ RELEASED after 60s drain → llamacpp + llamacpp-embed restored to the 5090,/healthokComfyUI already at declared ref+runtime deps already reconciled— a clean no-op:443and:8443-8449bound, edge returns 302 (SSO)mainand unrelated (3 from an uncommitted localcatalog/models.yaml, 2 hermes-socket)Validation renders went through
comfyui-gaterather than holding an own lease and posting to:8188, which avoids the known bypass-alarm seam entirely.Rollback
Set
COMFYUI_APP_REFback todec5d9450a5290bcf63430409ea41018e67f41c3(v0.30.2), re-render, recreate. The reconciler downgrades the checkout and re-pins the runtime deps from the older ref'srequirements.txt. No manual cleanup.Cleanup
Orphaned
music3-app/music3-outvolumes from the throwaway container are removed.music3-outheld 52 real generated songs — checksum-verified intodata/comfyui-output/music3-2026-08-14/before deletion.🤖 Generated with Claude Code