Skip to content

Repository files navigation

Orpheus

Synced lyrics + now-playing on your Even Realities G2 glasses.

Orpheus is an Even Hub WebView app that overlays a live now-playing card and word-by-word synced lyrics on the G2 lens (the 576×288 green HUD), with a phone console for control. It can read music from three places:

Source What it does Needs
Apple Music (built-in) Orpheus is the player — streams Apple Music via MusicKit JS in the WebView. A token relay (your own Apple Developer key).
Apple Music (native) Mirrors whatever the native Apple Music app is already playing — on your iPhone or your Mac — via the Syrinx helper. The Syrinx helper app (sideloaded). No relay.
Spotify Mirrors your Spotify now-playing via the Spotify Web API, remote-controls via Connect. Your own Spotify app client ID. No relay.

Lyrics for every source come from LRCLIB and are fetched directly by the phone — no account, no key.

Inspired by ArmasF31/HUD-Music-Integration-Even-Hub, which demonstrated the native-Apple-Music-over-localhost bridge. Orpheus is an independent, from-scratch implementation.

Screenshots

Now Playing Synced lyrics Split Mini

How it works

┌──────────────┐   HUD frames    ┌────────────┐
│  G2 glasses  │◀────────────────│            │
└──────────────┘                 │  Orpheus   │   lyrics    ┌──────────┐
┌──────────────┐   touch/ring    │  (WebView  │────────────▶│ LRCLIB   │
│ phone console│────────────────▶│  plugin)   │             └──────────┘
└──────────────┘                 └─────┬──────┘
                                       │ reads now-playing from ONE source:
        ┌──────────────────────────────┼───────────────────────────────┐
        ▼                              ▼                                ▼
  MusicKit JS                   Syrinx helper                     Spotify Web API
  (built-in Apple)          http://localhost:8766                (mirror + Connect)
   needs relay ──▶ worker/   iPhone or Mac, native Apple Music
  • The built-in Apple source needs a tiny Cloudflare Worker relay (worker/) to mint the Apple Music developer token. You deploy your own — there is no shared default.
  • The native Apple source needs Syrinx, a small helper that reads the system music player and serves it over http://localhost:8766.
  • The glasses HUD renderer and the phone UI are driven by one hook (src/orpheus/useOrpheus.ts); src/orpheus/controller.ts renders the lens.

Requirements

  • Even Realities G2 glasses + the Even phone app (Even Hub).
  • The Even Hub CLI (evenhub) for packing/QR — see the Even Realities developer docs.
  • Node 20+.
  • Per source: an Apple Developer account (built-in Apple) · a Mac/iPhone + Xcode (native/Syrinx) · a Spotify app client ID (Spotify).

Build & install

npm install

# pick your build variant:
npm run build          # built-in Apple Music (needs VITE_ORPHEUS_RELAY, see below)
npm run build:native   # native Apple Music via Syrinx  (VITE_ENABLE_NATIVE=1)
npm run build:spotify  # Spotify companion              (VITE_ENABLE_SPOTIFY=1)

# pack into an installable .ehpk (native shown; `npm run pack` for built-in Apple):
npm run pack:native    # → orpheus-native.ehpk  (uses app.native.json)

Sideload the .ehpk through the Even app, or run evenhub qr against a dev server for hot-reload testing. Try it in the desktop simulator with npm run dev + npm run simulator.

Before packing, edit the manifest (app.json / app.native.json): change package_id from com.junichi.* to your own namespace. For the native build, also whitelist your Mac — see Native config.

Syrinx — the native helper

syrinx/ is a small XcodeGen project with two targets that share one HTTP bridge:

  • Syrinx (iOS) — reads the iPhone's Apple Music (MPMusicPlayerController) and keeps itself alive in the background with a silent-audio session, so lyrics keep flowing when the phone is locked.
  • SyrinxMac (macOS, menubar) — reads the Mac's Music.app via AppleScript.
brew install xcodegen        # once
cd syrinx
xcodegen generate            # generates Syrinx.xcodeproj from project.yml
open Syrinx.xcodeproj

Pick the Syrinx (iOS) or SyrinxMac scheme, set your own signing team, and Run. Grant the Apple Music / Media permission on first launch. It serves GET /status plus transport POSTs on http://localhost:8766. (See syrinx/README — Syrinx.md for the API + brightness extras.)

Native config

The Even runtime's network permission is a strict allowlist, so the Mac you connect to must be listed. In app.native.json, replace the your-mac.local placeholder with your Mac's Bonjour name (System Settings → General → About → Name, lowercased, spaces → hyphens, +.local), and mirror it in src/orpheus/appleNative.ts (DEFAULT_MAC). The iPhone (localhost) target needs no edits. Once you connect to any host in the app, it's remembered — Bonjour names survive DHCP IP drift, so prefer .local over a raw IP.

Self-host the relay

Only the built-in Apple Music source needs this (the native and Spotify sources don't). worker/ is a Cloudflare Worker that mints the Apple Music developer token from your key.

cd worker
npm install
# set your secrets (from your Apple Developer MusicKit key):
npx wrangler secret put MUSICKIT_KEY      # contents of AuthKey_XXXXXXXXXX.p8
npx wrangler secret put MUSICKIT_KEY_ID   # 10-char Key ID
npx wrangler secret put MUSICKIT_TEAM_ID  # 10-char Team ID
# optional gate: npx wrangler secret put ORPHEUS_APP_KEY
npx wrangler deploy

Then build Orpheus pointing at it:

VITE_ORPHEUS_RELAY=https://your-relay.workers.dev npm run build
# if you set ORPHEUS_APP_KEY, also pass VITE_ORPHEUS_APP_KEY=<same value>

Repo layout

src/orpheus/    player logic, lyrics, glasses HUD renderer, the useOrpheus() hook
src/App.tsx     phone console UI
worker/         Cloudflare Worker relay (Apple Music token mint)  — self-host
syrinx/         iOS + macOS native helper (XcodeGen)              — sideload
app.json        Even Hub manifest, built-in Apple build
app.native.json Even Hub manifest, native build (localhost + Mac whitelist)

Credits

License

MIT.

About

Synced lyrics + now-playing on Even Realities G2 glasses — Apple Music (built-in & native) and Spotify.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages