Skip to content

Yudaotor/lyrimuse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

188 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lyrimuse icon

Lyrimuse

Real-time, word-synced lyrics for Apple Music, right on your Mac desktop.

Language / 语言: English | 简体中文

Platform Swift No Apple Developer account needed License: GPL v3

Lyrimuse sits quietly in your menu bar and shows a floating lyrics window that follows whatever's playing in Apple Music — word by word, in sync, always on top, across every Space. Think of the "desktop lyrics" experience from NetEase Cloud Music or QQ Music, but native to macOS.

Classic desktop lyrics overlay
Classic floating overlay

Dynamic-Island-style lyrics
Dynamic-Island-style capsule (no physical notch required)

Features

Lyrics that just work

  • Word-by-word synced highlighting, following playback in real time
  • Five lyrics sources checked automatically — NetEase Cloud Music, QQ Music, Kugou, Musixmatch, and LRCLIB — always picks the best match, no manual searching required
  • Romanization and translation, shown alongside the original lyrics — translation language is configurable when the Musixmatch source has a community translation available
  • A full Lyrics Manager window — browse, hand-edit, delete, or re-search lyrics for any track, with per-track timing offset if the sync ever drifts
  • Works fully offline in local mode — no network round-trip needed to show lyrics that are already cached

Show it your way

  • Two floating styles: a classic desktop overlay, or a Dynamic-Island-style capsule docked at the top of the screen — turn on either, both, or neither
  • Menu bar text mode — read the current line directly from the status bar instead of a floating window
  • Playback controls (play/pause, next, previous) built right into the overlay
  • Fully customizable look: font (or follow the system), size, text/background/shadow colors with savable custom themes, overlay width, position lock
  • Hide during screenshots, recordings, or screen shares — stays visible to you, invisible to everyone else
  • Auto-hide when paused so it never sits on your desktop doing nothing

Just a good Mac citizen

  • Simplified Chinese and English UI, switches instantly, no restart needed
  • Global keyboard shortcuts for every action, all left unbound by default so you decide
  • Menu-bar only by design — doesn't clutter your Dock (optionally toggle Dock visibility if you want it there)

Optional extras

Everything below is opt-in and off by default — turn on only what you want, right from Settings:

  • Scrobble to ListenBrainz and/or Last.fm (one click to connect your Last.fm account, no manual token juggling)
  • Bridge your iPhone's plays (via Last.fm) into the same listening history as your Mac
  • A shareable public "now playing" page — live playback, history, a guestbook, reactions, a visitor counter, a Top-10-artists leaderboard, a vinyl-record visual, light/dark themes, and rich link previews when shared in chat apps. See the Web Features Guide for a full walkthrough with screenshots.
  • A weekly listening digest, delivered as a push notification (Bark, DingTalk, WeCom, Discord, Feishu, or ServerChan)

Every extra above lives under Settings → Add-on Features, and each account card has its own step-by-step setup guide built right in — where to grab an API key or token, how to connect an account, how to get a webhook URL for whichever push platform you pick. The web page is the one that gets a dedicated guide instead of an in-app popover, but it's not a hard requirement either: configuring ListenBrainz alone already lets the page show live playback and history, no Cloudflare Worker needed. Deploying one on top adds the guestbook, reactions, visitor counter, Top-10-artists leaderboard, and lower-latency updates — see the guide if you want those.

Getting Started

Lyrimuse ships ad-hoc signed — same as it's always been — so there's no Apple Developer account involved either way you get it. That also means Gatekeeper will flag it as "from an unidentified developer" the first time you open it, regardless of which option below you pick. That's expected, not a bug — see the one-time fix under Option A.

Option A: Download a pre-built release

  1. Grab the latest Lyrimuse-*-macos.zip from the Releases page (a matching .sha256 file is attached too, if you want to verify the download), unzip it, and drag Lyrimuse.app into /Applications.

  2. On first launch, macOS will refuse to open it — "Lyrimuse can't be opened because Apple cannot check it for malicious software" or "is from an unidentified developer." Clear it once, with whichever of these you're more comfortable with:

    • Recommended — Terminal (always works):
      xattr -dr com.apple.quarantine /Applications/Lyrimuse.app
      Then open the app normally. You only need to do this once per download.
    • Right-click → Open: In Finder, right-click (or Control-click) Lyrimuse.app and choose Open, then confirm Open again in the dialog. Doesn't work on every macOS version for every kind of warning — fall back to the Terminal command above if it doesn't clear.
    • System Settings → Privacy & Security: Try opening the app once (it'll be blocked), then open System Settings → Privacy & Security, scroll to the bottom, and click Open Anyway next to the Lyrimuse warning. Confirm once more if prompted.

    Only run these against a build you actually trust — the one from this repo's own Releases page, or one you built yourself.

Option B: Build from source

One-time prerequisites (skip anything you already have):

xcode-select --install   # Xcode Command Line Tools, for Swift — skip if `swift --version` already works
brew install go          # any Go ≥ 1.21 — build.sh switches to 1.24.4 automatically via GOTOOLCHAIN

Then build.sh builds both the app and its background collector in one shot:

git clone https://github.com/Yudaotor/lyrimuse.git
cd lyrimuse/lyrimuse
./build.sh

After either option

Open Lyrimuse from /Applications — the first-run wizard walks you through the two things it actually needs: Automation access to Music.app (so it can read what's currently playing) and enabling its background collector service (so lyrics/artwork keep resolving even when the window's closed). Complete both and lyrics will appear right away (see lyrimuse/README.md for more build options).

You don't need to configure anything else to get lyrics — every optional extra above is configured later, entirely from Settings.

Project Layout

This repo is the app:

  • lyrimuse/ — the app itself (Swift, SwiftUI + AppKit)
  • lyrimuse-collector/ — the background engine that resolves lyrics/artwork and feeds them to the app (Go); built and bundled into the app automatically

The optional web experience lives in two sibling repos, so you can fork either without touching the app:

Repo Role
Yudaotor/nowplaying The shareable "now playing" web page itself, plus a fork-ready template
Yudaotor/nowplaying-workers The Cloudflare Worker relay + live README badge behind it, with a complete from-scratch setup guide
this repo (app + collector)  ──push──▶  nowplaying-workers (relay)  ◀──read──  nowplaying (web page)

Credits

Design and technical inspiration for the Dynamic-Island-style lyrics window came from boring.notch, NotchDrop, and DynamicNotchKit. The desktop-lyrics concept itself owes a debt to LyricsX.

About

Real-time, word-synced desktop lyrics for Apple Music & QQ Music on macOS — floating overlay, Dynamic Island style, or menu bar.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages