m1dnight/galileo
Galileo
Album-first music rediscovery. A headless Rust server owns the library, database, and streaming; clients (desktop app or any browser) play the audio. Details in ARCHITECTURE.md.
Setup
Requires npm, cargo, ffmpeg, python3, and just.
just init
Desktop app
just desktop # run in development
just package # build the installable bundle into build/
The bundle is copied to build/ (.dmg on macOS).
Server (headless)
just serve # local: http://127.0.0.1:5720
just serve --bind 0.0.0.0:5720 --token SECRET # reachable on the LAN
Serves the web UI at / — any browser is a client. With a token, open
http://host:5720/?token=SECRET once; it's remembered.
Configuration (library paths, API keys) lives in settings.json next to the
database (~/Library/Application Support/com.christophe.galileo/ by default;
--db moves both, --settings path/to/settings.json overrides just the
config). Edit by hand or via the app's Settings dialog.
just build-server # standalone release binary with the UI embedded
UI development (browser)
just serve # terminal 1: API on :5720
npm run dev # terminal 2: UI on :1420, /api proxied
Beets sync + similarity analysis
just sync # same settings.json + database as the app
just sync --db X --settings Y # or point elsewhere
One-shot: syncs Beets, runs the embedding worker (the analysis block in
settings.json configures it), exits. Cron-friendly. See
settings.example.json for the full config shape.
Tests
cargo test --workspace
npm run check