Skip to content

m1dnight/galileo

m1dnight /

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