Noureddine RAMDI / LyricsX: extending LRC lyrics with word-level timing and multi-language support on macOS

Created Mon, 04 May 2026 10:16:50 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

ddddxxx/LyricsX

LyricsX sets itself apart by evolving the decades-old LRC lyrics format into something more precise and versatile without breaking compatibility. As a native macOS app, it automatically fetches synchronized lyrics for your music and displays them in a customizable desktop overlay or menubar widget. But the real technical highlight is the LRCX format it uses — extending standard LRC with word-level time tags and multi-language translation fields. This pragmatic approach balances modern needs with legacy support, solving a problem many media apps face.

What LyricsX does and how it’s built

At its core, LyricsX is a native macOS application written in Swift. It hooks into multiple popular music players on macOS by leveraging AppleScript and IPC mechanisms to detect the currently playing track and control playback. When music plays, LyricsX automatically searches for matching lyrics from a variety of online sources.

The app then downloads and renders these lyrics synchronized with the music. Users can choose to display lyrics in a floating desktop window or in the menubar, with customization options for fonts, colors, transparency, and positioning. This makes it flexible for different workflows, whether you want a minimal menubar display or a full desktop overlay.

The app supports macOS 10.11 and later, distributing via Homebrew, Mac App Store, or direct downloads. This wide availability combined with native Swift code ensures good performance and responsiveness.

Under the hood, the app uses a custom lyrics format called LRCX, which extends the classic LRC format. LRC has long been the de facto standard for synchronized lyrics, using timestamped lines. LRCX adds word-level time tags within each line and supports multiple languages and translations, yet it remains fully backward compatible with existing LRC parsers.

The LRCX format and architecture strengths

The LRCX format is the standout technical innovation here. Standard LRC files only tag timestamps at the line level, which can make karaoke-style highlighting or precise synchronization tricky. LRCX introduces word-level time tags enclosed in angle brackets, allowing each word to be individually timed. This enables smoother lyric highlighting and better sync with fast-paced songs.

Moreover, LRCX supports multi-language fields, meaning you can embed translated lyrics alongside the original text in the same file. This is a real practical win for apps targeting global audiences or bilingual users.

Importantly, the format maintains backward compatibility by formatting the file so that older LRC parsers can still read the basic synchronized lyrics without error. This avoids fragmenting the ecosystem or forcing everyone to upgrade their tools.

From the code perspective, the LyricsX app has to parse this extended format efficiently and render lyrics with precise timing. It also implements offset adjustments, drag-and-drop import/export of lyrics, and integrates smoothly with macOS player APIs.

The integration with multiple music players is handled via AppleScript and IPC. LyricsX detects active players, queries current track metadata, and listens for playback events. This cross-player capability is key for users who might switch between iTunes, Spotify, or other supported apps.

The app’s UI is built with Swift, using native macOS frameworks for performance and user experience consistency. The lyrics overlay and menubar widgets are designed to be lightweight and customizable, avoiding unnecessary resource use.

Tradeoffs include that the app is macOS-specific, so it won’t help users on other platforms. Also, the LRCX format, while backward compatible, is still a niche standard requiring adoption to realize its full benefits. Yet, the pragmatic design makes it easier to incrementally improve lyrics synchronization without breaking existing tools.

Here is a snippet illustrating how word-level timing looks in LRCX syntax:

[00:12.00]<00:12.00>Hello <00:12.50>world <00:13.00>this <00:13.50>is <00:14.00>LyricsX

Each word has its own timestamp, allowing fine-grained sync.

Installation and getting started

LyricsX is easy to install on macOS via several methods. From the README:

$ brew install --cask lyricsx

Alternatively, users can download it from the Mac App Store or grab manual builds from the releases page. The app requires macOS 10.11 or later.

Once installed, launching LyricsX alongside your music player will enable automatic lyric fetching and display. The app will auto-launch or quit with the player, keeping things in sync.

Users can adjust lyric offsets to fix sync issues, and import/export lyrics in LRCX format via drag-and-drop.

Verdict

LyricsX is a solid, practical tool for macOS users who want better synchronized lyrics while listening to music. Its core technical strength is the LRCX format, which offers a meaningful improvement over classic LRC without alienating existing tools.

The app’s native Swift implementation and integration with multiple players make it responsive and convenient. The customization options for lyric display cater to different user preferences.

However, it’s macOS-only, so not suitable for cross-platform needs. Also, LRCX adoption outside LyricsX is limited, so exporting lyrics may have limited compatibility.

For developers and power users interested in media apps or file format evolution, LyricsX offers an instructive example of extending legacy standards pragmatically. For everyday users on macOS, it provides a refined lyric experience that’s worth trying if lyrics matter to you.

Overall, LyricsX balances innovation and compatibility, delivering precise lyric sync in a clean native app.


→ GitHub Repo: ddddxxx/LyricsX ⭐ 5,162 · Swift