GlassLyrics
Native Apple Music
Pair a phone
Install GlassLyrics Bridge on the iPhone, tap Pair/Configure Server, enter this server's address and the six-digit code below. The code is good for ten minutes and works once.
Apple Music (Web fallback)
What Apple still needs from you
MusicKit on the Web cannot be activated without an Apple Developer Program membership. Nothing here is faked: until these exist, the section stays inert.
- Join the Apple Developer Program (paid membership).
- Certificates, Identifiers & Profiles → Identifiers → Media IDs → register one with MusicKit enabled.
- Create a private key against that Media ID and download the .p8 file. Note its Key ID.
- Copy your 10-character Team ID from Membership details.
- Put the .p8 on this server, readable only by the service account, and fill in APPLE_MUSIC_TEAM_ID, APPLE_MUSIC_KEY_ID and APPLE_MUSIC_PRIVATE_KEY_FILE in /opt/glasslyrics/.env, then restart the service.
This path only ever sees playback that MusicKit starts in this page. To follow the separate native Music app, pair the GlassLyrics Bridge iOS app in the Native Apple Music section above — it reads the Music app's own playhead through SystemMusicPlayer and takes precedence here whenever it is reporting.
Find a song
No synchronized lyrics available for this track. The glasses will show this message instead of faking a sync. Paste an LRC file below if you have one.
Steps the untimed lyrics by hand, on the glasses or from here. No timestamps are invented and this is not synchronized playback.
Positive advances the lyrics (use it when lines appear late).
Language Learning Mode
Set up a translation provider
Translation happens on the server. No key is ever sent to this page, to the
glasses, or to the iPhone app. Set one of these in
/opt/glasslyrics/.env and restart the service.
Retrieval probes
Occasionally hides the furigana on a word this song has already shown you once, and lets one press ask for it back. Knowing the word means pressing nothing, so a song you know plays exactly as it does now. Japanese only.
Your data
Everything recorded stays in this server's SQLite file. It is never sent anywhere, and no audio is captured. Each row is a word, a time, which aids were on screen, whether you asked to see the reading, and how long you took.
Download everythingGlasses controls
Off makes every input from the display inert — D-pad, taps, swipes, next/previous line, timing nudges — so handling the phone or the frames cannot move the lyrics by accident. Nothing else changes: lyrics still advance on their own, Apple Music syncing and predictive timing keep running, and these controls keep working.
Glasses appearance
Cosmetic only. Changes reach the glasses on their next poll — no restart, and the loaded lyrics are untouched.
Paste LRC manually
Pairing code
Enter this on the glasses with the D-pad. Valid for 10 minutes.
Advanced & diagnostics
Lyric synchronization
Bad synchronization has five different causes and they need five different fixes. This panel puts the evidence for each side by side rather than guessing between them: where the timings came from, whether they were provided or estimated, whether the lyric record is even the same recording as the track being played, what correction is being applied, and what the native clock has been doing.
Playback interruptions & recoveries
Observed entries were watched happening while the bridge app was executing. Recovered entries were worked out afterwards, from the disagreement between the estimate and the position the phone came back with — those say what the evidence supports and no more. No public API reports which notification, announcement or app interrupted Apple Music, so none is ever named.
Translation quality & Premium
Native bridge & predictive mode
Recent resynchronizations
Queue snapshot
Observed upcoming entries
Recent queue events
While the bridge app is running it can read a bounded window of the Music
app’s own queue. If iOS then suspends it and the current track’s
estimate runs out, GlassLyrics may move on to an entry it was actually
told about — shown as QUEUE-PREDICTED, never as live.
Nothing here is ever invented: every entry was read from
SystemMusicPlayer on the phone, and the first real reading that
disagrees throws the whole chain away.
Predictive mode estimates the playhead while iOS has the bridge app suspended. It cannot see a pause, a seek, a skip or a track change made during that time — the numbers below are how far off the estimate turned out to be each time the phone came back.
Lyrics providers
Which sources were asked for the loaded track, in which order, and what
each one said. Provider keys live in /opt/glasslyrics/.env on the
server and never reach this page.
Fallback chain
Re-anchor an estimated line
These timings were estimated, not provided. Play to the moment a line actually starts, type its number, and everything after it moves with it. Provider timings are never edited this way — use the timing offset above for those.
Sources
Apple Music diagnostics
Add ?appleDiag=1 to this page's URL to mint the developer token
without its optional origin claim, then try Connect Apple Music
again. Diagnostic only — it does not change the server default.
Edit a translated line
Corrections are stored against this track and layered over the generated text — regenerating never overwrites one.
Glasses view: /glasses · lyrics from lrclib.net