Sing along or play along. Synced karaoke lyrics for YouTube β plus one-click guitar tabs on Ultimate Guitar. No more searching, no more switching tabs. Just the video, the lyrics, and the tabs in one floating panel.
πΊ Support this project Β· π Report an issue
Built for karaoke and guitarists:
Plus:
ββ§L / Ctrl+Shift+L| Browser | Status | Install |
|---|---|---|
| Safari (macOS) | β Full | Xcode build |
| Chrome | β Full | Load unpacked |
| Edge | β Works | Like Chrome |
git clone https://github.com/kl-patrickstar/youtube-lyrics-extension.git
cd youtube-lyrics-extension
chrome://extensionsSafari doesnβt allow loading a folder directly. You have to generate an Xcode project and build it yourself.
git clone https://github.com/kl-patrickstar/youtube-lyrics-extension.git
cd youtube-lyrics-extension
Apple ships a converter that turns any WebExtension folder into a ready-to-build Xcode project:
xcrun safari-web-extension-converter . \
--project-location ~/Desktop/YouTubeLyrics \
--app-name "YouTube Lyrics" \
--bundle-identifier "com.yourname.youtubelyrics" \
--macos-only \
--no-open
Replace com.yourname.youtubelyrics with your own unique identifier.
open ~/Desktop/YouTubeLyrics/YouTube\ Lyrics.xcodeproj
Or double-click the .xcodeproj file in Finder.
In Xcode:
βR to build and runβ,)ββ§L or click the π΅ iconTip: Safari caches Web Extensions aggressively. After code changes:
- Disable the extension in Safari
- Quit Safari completely (
βQ)- In Xcode:
Product β Clean Build Folder(β§βK)- Rebuild with
βR- Restart Safari β re-enable the extension
youtube-lyrics-extension/
βββ manifest.json # Manifest V3
βββ background.js # Service worker (storage, fetch proxy, commands)
βββ content.js # Orchestrator (refresh, resolve, render)
βββ state.js # Global state
βββ bridge.js # Storage + fetch messaging
βββ api.js # LRCLIB, lyrics.ovh, iTunes
βββ lyrics.js # LRC parser, song info heuristics
βββ youtube.js # DOM helpers (video ID, metadata, chapters)
βββ sync.js # Sync engine (requestVideoFrameCallback)
βββ template.js # Shadow DOM template + CSS
βββ ui.js # UI logic (panel, settings, drag, popover)
βββ popup.html # Toolbar popup markup
βββ popup.js # Toolbar popup logic
βββ icon.svg # Vector icon
βββ icons/ # Icon set (16β512 px)
βββ README.md
ft.)requestVideoFrameCallback for 30β60 fps timing accuracyAll free, no API keys required:
| API | Purpose |
|---|---|
| LRCLIB | Synced lyrics (LRC format) |
| lyrics.ovh | Plain-text fallback |
| iTunes Search | Album artwork + Apple Music links |
chrome.storage.localIssues and pull requests are welcome. Open an issue on GitHub for bugs or feature ideas.
This extension is built and maintained in my free time. If it made your karaoke nights better or you just want to say thanks, feel free to show some love:
Thank you, I would appreciate it!
MIT β free to use, including commercially.
Note on lyrics: Lyrics are provided by third-party APIs. Commercial use of lyrics requires proper licensing (e.g. Musixmatch, LyricFind). The extension itself is open source.