iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
Apple Music, Spotify 등에서 사용할 수 있는 무료 오픈소스 데스크톱 가사 프로그램, 활발히 유지되는 LyricsX 대안
Free, open-source desktop lyrics for Apple Music, Spotify, QQ Music, NetEase, Kugou and browser web players. Actively maintained LyricsX alternative.
미디어Swift · GoGitHub @Yudaotor온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Word-synced desktop lyrics on macOS for Apple Music, Spotify, QQ Music, NetEase Cloud Music, Kugou — and YouTube Music / Spotify Web in any browser. Actively maintained open-source LyricsX alternative. Floating overlay, Dynamic Island, menu bar or lyrics window; translation, romanization, Last.fm stats. | macOS 桌面歌词:逐字同步 · 翻译 · 粤拼 · LyricsX 替代
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Real-time, word-synced lyrics on your Mac desktop — plus a Last.fm listening profile and on-device translation — for Apple Music, QQ Music, NetEase Cloud Music, Kugou Music, Spotify, or YouTube Music / Spotify Web playing in your browser. Language / 语言 / 語言: English | 简体中文 | 繁體中文README 전문 보기 ↗
Desktop lyrics, reimagined for the Mac.
Language / 语言 / 語言: English | 简体中文 | 繁體中文
https://github.com/user-attachments/assets/88b951ee-4ecf-4985-b1cb-eee6afdd5510
Lyrimuse is an open-source desktop lyrics app for macOS. It lives in the menu bar and highlights lyrics word by word as the song plays: floating always on top of your windows, in the menu bar, in a Dynamic-Island-style capsule under the notch, on the Touch Bar, or in a full lyrics window. It works with eleven players, including Apple Music, Spotify, Amazon Music and the YouTube Music app Kaset, plus web players in your browser, and picks the best match from fourteen lyrics sources, with translation and romanization when you want them. It also keeps a Last.fm listening profile and scrobbles your plays.
Coming from LyricsX? It hasn't had a new release since April 2022. Lyrimuse covers what it did, keeps getting updates, and adds support for Chinese-language players, KKBOX, Amazon Music, Kaset, reAMP and web players. For the details, see the fact-checked comparison with LyricsX and Lyric Fever.
Install with Homebrew, on Apple Silicon or Intel. It also clears the first-launch Gatekeeper warning for you. Prefer to download it yourself? Grab the latest release and see Getting Started.
brew tap yudaotor/lyrimuse
brew trust --cask yudaotor/lyrimuse/lyrimuse # one-time: Homebrew asks you to trust non-official taps
brew install --cask lyrimuse
Where every feature lives in Settings, and whether it is on or off after you install: see the feature list.
lyrimuse:// link you can call from Shortcuts, Raycast or Alfred, and from Shortcuts a link can hand back the song that's playing (URL Scheme).All of these are off until you turn them on in Settings:
ListenBrainz, Web Push and Push Alerts are under Labs in the Settings sidebar, and Discord has its own entry near the top. Each card comes with its own setup steps: where to get an API key or token, how to connect an account, how to get a webhook URL for your push service. The web page is the only one with a separate guide, and you don't need all of it. With just ListenBrainz set up, the page already shows live playback and history, no Cloudflare Worker needed. Deploy one if you also want the guestbook, reactions, visitor counter, top-10 board and faster updates; the guide covers that.
Releases are signed with the project's own certificate, not an Apple Developer ID, so none of the options below involve an Apple Developer account. The catch is that the first time you open the app, Gatekeeper says it's "from an unidentified developer". Homebrew (Option A) clears that for you. With the other options it's expected, not a bug, and Option B shows how to get past it once.
Running an AI agent that can use the terminal on your Mac (Claude Code, Codex CLI, Gemini CLI, …)? Paste the block below into it as-is, and it will do everything in Options A/B for you. The instructions only let it install this one app. It won't use sudo or touch system-wide security settings:
Please install Lyrimuse — an open-source macOS menu-bar lyrics app
(https://github.com/Yudaotor/lyrimuse) — on this Mac, following these rules exactly:
1. Preferred path (if `brew` exists):
brew tap yudaotor/lyrimuse
brew trust --cask yudaotor/lyrimuse/lyrimuse
brew install --cask lyrimuse
If this Homebrew doesn't know the `trust` subcommand, skip that line — older
versions don't need it.
2. If Homebrew is not installed, do NOT install Homebrew. Instead: check the CPU
with `uname -m`, download the latest release asset from
https://github.com/Yudaotor/lyrimuse/releases — `Lyrimuse-v<version>-macos.zip`
for arm64, `Lyrimuse-v<version>-macos-intel.zip` for x86_64 — verify it against
its `.sha256` file (`shasum -c`), unzip, move `Lyrimuse.app` into
/Applications, then clear the Gatekeeper quarantine flag on that one app only:
xattr -dr com.apple.quarantine /Applications/Lyrimuse.app
3. Safety rails: no `sudo` anywhere (nothing here needs it); never run
`spctl --master-disable` or otherwise weaken Gatekeeper system-wide; never
remove the quarantine flag from anything except /Applications/Lyrimuse.app.
4. Do not build from source unless I explicitly ask.
5. Launch it (`open -a Lyrimuse`) and verify it is running (`pgrep -x Lyrimuse`
prints a PID).
6. A first-run wizard will appear — that part is mine to click through. Tell me
it will ask me to pick a music player, to grant Automation access to
Music.app and/or Spotify (only if I pick them), and to enable the background
lyrics engine — then hand control back to me.
Finally, report what you did and anything that failed.
brew tap yudaotor/lyrimuse
brew trust --cask yudaotor/lyrimuse/lyrimuse # one-time: Homebrew asks you to trust non-official taps
brew install --cask lyrimuse
This clears the one-time Gatekeeper quarantine automatically as part of installing, so there's no follow-up step. Open Lyrimuse from /Applications (or Spotlight) right after brew install finishes. brew upgrade --cask lyrimuse picks up new releases the same way.
Grab it from the Releases page. Check which Mac you have first ( → About This Mac → "Chip": Apple M… is Apple Silicon, Intel Core… is Intel):
| Your Mac | Download |
|---|---|
| Apple Silicon (M1 and later) | Lyrimuse-*-macos.dmg or .zip |
| Intel | Lyrimuse-*-macos-intel.dmg or .zip |
With the dmg, double-click to mount and drag Lyrimuse.app onto the Applications shortcut next to it; with the zip, unzip and drag Lyrimuse.app into /Applications. Both formats install exactly the same app, and the zip comes with a .sha256 if you want to verify the download (shasum -c Lyrimuse-*.zip.sha256 from the same folder).
The only difference between the two downloads is architecture: the one without a suffix is Apple Silicon only, while -intel carries both Intel and Apple Silicon code. -intel does run on Apple Silicon, but there's no reason to use it there: it's twice the size, and macOS 27 and later will warn that the app "needs to be updated" because it contains Intel code (Apple is removing Rosetta in macOS 28; nothing is actually wrong with the app).
Both architectures get in-app auto-updates. The feed lists two entries for the same version, one per architecture: Apple Silicon is served the unsuffixed build, Intel is served the -intel one, and Sparkle picks per machine on its own. (v1.4.0 and earlier served Apple Silicon only; Intel users had to come back here by hand.)
On first launch, macOS will refuse to open it, with "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:
xattr -dr com.apple.quarantine /Applications/Lyrimuse.app
Then open the app normally. You only need to do this once per download.Lyrimuse.app and choose Open, then confirm Open again in the dialog. It doesn't work on every macOS version for every kind of warning, so if the warning stays, use the Terminal command above.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 lyrics engine (the background process named lyrimuse-engine) in one shot:
git clone https://github.com/Yudaotor/lyrimuse.git
cd lyrimuse/lyrimuse
./build.sh # this machine's architecture
./build.sh --universal # arm64 + x86_64 (the compatibility build shipped for Intel)
build.sh ends by listing the architectures of every binary in the bundle and flags anything that doesn't match the target, whether a slice is missing or there's an extra one. Don't assemble release assets by hand: ./package.sh builds each architecture once and produces a zip + sha256 + dmg for each, refusing to package if the architectures are wrong.
QQ Music / NetEase Cloud Music / Kugou Music / Soda Music / KKBOX / Amazon Music / LX Music / Spotify / Kaset / auto-detect support additionally needs ungive/media-control. build.sh installs it via Homebrew automatically if it's missing, so this isn't a step you need to do yourself either.
Open Lyrimuse from /Applications. The first-run wizard walks you through picking a player (Apple Music, QQ Music, NetEase Cloud Music, Kugou Music, Soda Music, KKBOX, Amazon Music, Spotify, Kaset, reAMP, LX Music, or auto-detect), granting Automation access if you picked Apple Music, Spotify or Kaset (the others need no permission to read basic track information), and enabling its lyrics engine (so lyrics/artwork keep resolving even when the window's closed). Complete the wizard and lyrics will appear right away (see lyrimuse/README.md for more build options).
That's all you need for lyrics. The optional extras can be set up later from Settings, whenever you want them.
Turn on the desktop overlay in Settings. It stays above every window, on every Space. Drag it wherever you like, or pin it to the top center or just above the Dock. If the lyrics have word timing, each word fills in as it's sung. You can hide it from screenshots, recordings and screen shares, and have it disappear while the music is paused. It works the same way with QQ Music, NetEase Cloud Music, Kugou Music, Soda Music, KKBOX, Amazon Music, LX Music, Spotify, Kaset and web players.
Yes. Turn on menu bar text mode and the current line appears in the menu bar, for Spotify or any other supported player. Long lines scroll instead of being cut off, and a second row can show the next line, the translation or the romanization. You don't need to connect a Spotify account. Lyrimuse asks once for Automation access to Spotify, which gives it the exact playback position and makes the playback buttons work. If you say no, the lyrics still show, but the timing comes from macOS's MediaRemote and can be about a second off.
Yes, as long as the lyrics have word timing. NetEase Cloud Music, QQ Music, Kugou, Soda Music, Musixmatch, AMLL and Apple Music often do, and those lines fill in word by word. Lyrics with only line timing light up a whole line at once. The player doesn't limit where lyrics come from, either: a song playing in Soda Music can end up with QQ Music's word-by-word lyrics if those score best.
No. Releases are signed with the project's own certificate instead of an Apple Developer ID, so neither you nor the project needs one. It's also why there's a one-time Gatekeeper step, described in Getting Started above.
No. Install it with Homebrew (Option A above) or download it from the Releases page (Option B). Either way, updates come through the app after that.
Yes. It's open source under GPL-3.0. There's no paid version, no in-app purchase and no account to sign up for. Last.fm and the other services are up to you. If it's useful to you and you'd like to support it, you can sponsor it on GitHub or buy the author a coffee with Alipay or WeChat Pay.
Yes. When something like a browser video holds macOS's Now Playing, the system's media keys go to it; Lyrimuse then presses play/pause, previous and next in QQ Music's or NetEase Cloud Music's own menu bar, or on Soda Music's play bar, instead, leaving the player in the background. This needs Accessibility access (Settings → Players); without it, those buttons open that page. Seeking isn't available in this state. On macOS 27 the permission lives in System Settings → Privacy & Security → Device Control and Data Access; earlier releases call it Accessibility.
All of those, plus Kugou Music, Soda Music, KKBOX, Amazon Music, Kaset (a YouTube Music app), the Winamp-style player reAMP and the open-source LX Music, so eleven players in all. Or let it auto-detect whatever macOS shows as Now Playing. Apple Music, Spotify and Kaset ask for Automation access (Spotify and Kaset use it for exact timing and the playback buttons). The other eight need no permission to read basic track information through macOS's MediaRemote; shuffle, repeat and like buttons for QQ Music, NetEase Cloud Music, Kugou Music, Soda Music and Amazon Music, and reAMP's shuffle and repeat, need Accessibility access. With KKBOX, Amazon Music or LX Music, the lyrics that app already saved for the song are considered too, and none of them is ever contacted.
Yes. Both are read through macOS's MediaRemote, so there's nothing to grant, and their lyrics show in the overlay, the menu bar, the capsule and the Lyrics Window like any other player's. If KKBOX or Amazon Music already saved lyrics for the song, those are considered too and get extra weight. Lyrimuse never signs in to either service or sends them anything. The other sources are still searched, so if one of them has something better, like word-by-word timing, that one wins.
Yes. LX Music is read through macOS's MediaRemote, so there's nothing to grant. When you play a song in LX Music, the lyrics it saved for that song (word by word when the platform has them) are considered too and get extra weight, and the next songs in the list you're playing get their lyrics ready ahead of time. Lyrimuse only reads LX Music's data on your Mac and never sends it anything.
Yes, with Kaset, a native, open-source YouTube Music app for the Mac. Kaset is read with Automation access, which gives exact timing and working playback buttons, and YouTube Music's own lyrics are among the candidates. YouTube Music in the browser works too, see below.
Like karaoke on your desktop. The current line floats over your windows, each word fills in as it's sung when the lyrics have word timing, and the translation or romanization can sit alongside. You can change the font, size, text, background and shadow colors, and width, and let the text color follow the album art. The same lyrics can also go in the menu bar, in a Dynamic-Island-style capsule under the notch, or in a full Apple-Music-style lyrics window, in any combination.
Yes. On a screen without a notch, like an older MacBook or an external display, the capsule sits at the top center, as tall as the menu bar. You choose which screen it goes on in Settings.
Yes, for any song it has already found lyrics for, since those are cached on your Mac. The first lookup for a song needs a connection, and so does online translation.
To find lyrics, it has to ask the lyric sources about the song that's playing: NetEase, QQ, Kugou, Kuwo, Migu, Musixmatch, LRCLIB, LyricFind, Deezer, AMLL, Soda Music, VIBE, Genie, and Apple Music if you connected it. Cover art comes from the iTunes Search API. Translation happens on your Mac by default, and lyric text only goes to an online translator (Google's web translation, then MyMemory) as a fallback. Your listening history, cached lyrics and settings stay in files on your Mac unless you connect Last.fm, ListenBrainz or the optional web relay. The full list is under License and Copyright below.
Yes. Romanization is decided line by line, so a song that mixes languages only gets readings where they belong. Translation comes from the lyric source's community translation when there is one, otherwise from on-device or online machine translation once you turn on System Fallback Translation (off by default), into any of 17 languages.
macOS 14 Sonoma or later (Sequoia, Tahoe and newer), on Apple Silicon or Intel. Translating on your Mac needs macOS 15 Sequoia or later; on macOS 14 only the online translators are available.
Yes, with a separate universal build (see Option B above). Auto-updates work on Intel too, since v1.5.0, so new versions show up just like they do on Apple Silicon.
Yes. Pair your browser once in Settings and YouTube Music or Spotify Web works like any other player. The lyrics follow the page's own progress bar instead of guessing, and a one-click test tells you before you commit whether your browser can be controlled.
Yes, that's the other half of the app. Connect Last.fm in one click from Settings and every play from Apple Music (or any other supported player) gets scrobbled, with a live "now playing" status. Plays are saved on your Mac first, so the ones from before you connected aren't lost: once connected, click Backfill to send those from the last two weeks or so. You pick when a play counts (50%, 75%, 90% or the whole song), can leave some players out, and can send to ListenBrainz at the same time.
It doesn't just take the first source that answers. Every result from every source is scored the same way: how well the title, artist, album and length match, plus things like whether it has word timing. The highest score wins. You can look at that decision for any song, with every candidate's score and the reason the winner won. If a better match turns up later, Lyrimuse can switch to it by itself, but lyrics you picked by hand are locked and never replaced. Manual search shows the same scores and labels, so a wrong version is easy to spot before you pick it.
If the timing's off, shift it for that song; the offset is remembered. If it's the wrong lyrics or the wrong version, open manual search. You'll see every result from every source with its score, and whatever you pick is locked, so automatic matching won't swap it out. You can also edit any song's lyrics by hand in Lyrics Manager.
They already are. Every song with lyrics gets a .lrc file with line timing, plus .tr.lrc for the translation and .roma.lrc for the romanization when those exist. Word-by-word timing is saved separately as .yrc, in NetEase's YRC format, which most other players can't read. The files are in ~/.config/lyrimuse/lyrics/, and you can move the folder in Settings.
LyricsX's last release was v1.6.3, in April 2022. It runs on macOS 10.11 and later and works with Apple Music, Spotify and a few older players. Lyric Fever focuses on Spotify and Apple Music and needs macOS 15. Lyrimuse needs macOS 14 and adds QQ Music, NetEase Cloud Music, Kugou, Soda Music, KKBOX, Amazon Music, Kaset, reAMP and LX Music, players in your browser, per-line pinyin / Cantonese Jyutping / Japanese and Korean romanization, and Last.fm / ListenBrainz scrobbling with your own listening stats. The side-by-side table is on the comparison page.
~/.config/lyrimuse/) for your own viewing. It does not host, relay or redistribute lyrics or artwork, and the cache can be deleted at any time from Lyrics Manager or by removing that folder.If lyrics don't show up, open Lyrics Sources in Settings and click Test to see which source can't be reached. If that doesn't sort it out, use Export Diagnostics and attach the file to an issue; it already includes the full self-check of the background service.
The same check, run from Terminal:
/Applications/Lyrimuse.app/Contents/Resources/lyrimuse-engine healthcheck
/Applications/Lyrimuse.app/Contents/Resources/lyrimuse-engine healthcheck -local-only # no network
/Applications/Lyrimuse.app/Contents/Resources/lyrimuse-engine healthcheck -json
Dragging Lyrimuse.app to the Trash is not enough. The lyrics engine (process name lyrimuse-engine) is
registered with launchd as a KeepAlive job, so its LaunchAgent stays behind and
launchd keeps trying to start a binary that is no longer there.
lyrimuse/scripts/uninstall.sh # report only — shows what is installed
lyrimuse/scripts/uninstall.sh --services # unregister both launchd jobs, keep your data
lyrimuse/scripts/uninstall.sh --purge # also delete config, caches, logs and settings
Running it with no arguments changes nothing; it just tells you what is on your
system. --purge lists everything it is about to delete, warns you how many exported
lyrics files are among them, and requires you to type yes.
--services leaves your settings alone. --purge also removes them
(defaults delete me.yudaotor.lyrimuse), because leaving them behind puts a
reinstall into a dead end: the LaunchAgent is gone, so the lyrics engine is not
installed, but the app still thinks onboarding is done — so the wizard that would
install it never appears, and the desktop just sits at "searching for lyrics".
This repo is the app:
lyrimuse/ — the app itself (Swift, SwiftUI + AppKit)lyrimuse-engine/ — the background engine that resolves lyrics/artwork and feeds them to the app (Go); built and bundled into the app automaticallyThe 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 + engine) ──push──▶ nowplaying-workers (relay) ◀──read── nowplaying (web page)
Thanks to LyricsX, which showed what desktop lyrics on the Mac could be.
License texts are in THIRD_PARTY_LICENSES.
Only do this for a build you actually trust: the one from this repo's Releases page, or one you built yourself.