this is the macOS control center and localhost stack for running the gary model backends directly on Apple Silicon.
it pairs with gary4juce
and now ships as a signed Swift app target, also called gary4local, that
handles service lifecycle, logs, setup flows, model downloads, and update
checks from a normal desktop app instead of a pile of terminal tabs.
if you want the Windows version, that's here: gary-localhost-installer.
v0.1.11 is the mac release paired with
gary4juce v4.0.4-mac.
the main thing in this one is that you can now train an ACE-Step LoRA directly
inside gary4local, done in MLX.
the smaller follow-up fix in the same release is carey parity around
genre_ratio during training. on the mac path we now pre-encode the relevant
tracks twice so the per-epoch genre-vs-caption behavior matches the windows
flow and the dice button logic lines up with what the UI says it's doing.
older Sparkle release notes live under
docs/updates/gary4local/release-notes/.
gary4local/the active macOS Swift app target and Xcode project.ace-lego/the Carey / ACE-Step localhost backend, plus the wrapper flow used by the mac app.audiocraft-mlx/the MLX path used for local Audiocraft / MusicGen continuation work.melodyflow/the MelodyFlow localhost backend.sa3/the Stable Audio 3 localhost backend and mac training flow.stable-audio-tools/the vendored Stable Audio runtime pieces still used on this stack.foundation/the localfoundation-1runtime path.control-center/an older Swift package prototype plus manifest and packaging docs that are still useful as reference material.
- a signed + notarized Apple Silicon macOS app with Sparkle-based in-app updates.
- a local control center that can start, stop, restart, rebuild, and monitor the backend services without dropping straight into shell scripts.
- carey on the mac path, including the regular and XL
ace-step-v15-{base,sft,turbo}model family flow. foundation-1on the MLX path, including model download flow, prompt randomization support, text generation, and audio2audio.- MelodyFlow with backend switching between
mps,mlx_native_torch_codec, andmlx_native_mlx_codec. - Stable Audio 3 on Apple Silicon, including local LoRA training, prompt-pool
building, continuation, adapter registration, and the related UI inside
gary4local.
the main localhost endpoints in the production manifest are:
audiocraft-mlx:http://127.0.0.1:8000melodyflow:http://127.0.0.1:8002carey:http://127.0.0.1:8003sa3:http://127.0.0.1:8006foundation-1:http://127.0.0.1:8015
- development runs directly from this repo.
- release builds stage the runtime trees into the app bundle under
Contents/Resources/runtime/. - mutable runtime data stays outside the app bundle.
- app support, venvs, models, and caches live under
~/Library/Application Support/GaryLocalhost/. - logs live under
~/Library/Logs/GaryLocalhost/. - the production service manifest lives at
control-center/manifest/services.production.jsonand gets staged into the app resources at build time.
- i am still not especially happy with ACE-Step training and generation speed
on the MLX path. most of the testing here has been on a MacBook Air with
32 GBof unified memory, so some of this may just be "don't expect miracles from the air." - some runtime failures, especially Carey-side failures, still explain themselves better in logs than they do in the UI.
- the SA3 auth and token flow is better than it was, but it still has enough weirdness that i don't consider that part "done."
this repo now uses Sparkle 2.
the production flow is:
- GitHub Releases hosts the notarized
gary4localDMG. - GitHub Pages hosts the stable Sparkle appcast.
- a new mac release becomes visible to installed apps when the stable appcast is updated.
maintainer docs for that live in:
rebuild all Python environments from a fresh clone:
./scripts/rebuild_venvs.shbuild an ad hoc Apple Silicon DMG for trusted handoff testing:
./scripts/build_gary4local_adhoc_dmg.shbuild the signed + notarized release DMG:
./scripts/build_gary4local_release_dmg.shthese repos are where some of the MLX and localhost-specific work gets proven out before smaller runtime slices get promoted back into this one: