Textual TUI displaying synced lyrics for the currently playing song (LRCLIB + Genius)
Project description
genius-tui
Synced lyrics for whatever is playing, in your terminal.
Detects the currently playing song system-wide on macOS, fetches time-synchronized lyrics from LRCLIB (free, no API key), and falls back to scraping plain lyrics from Genius when no synced version exists. Synced lines highlight and auto-scroll in time with playback.
Note: Genius itself only has plain-text lyrics (no timestamps), which is why LRCLIB is the primary source for true sync.
Install & run
uvx genius-tui # run without installing
# or
pip install genius-tui && genius-tui
# or, from a checkout
uv run genius-tui
Now-playing backends
Tried in order; the first one that works is remembered:
media-control— system-wide, works on macOS 15.4+ (brew install media-control)nowplaying-cli— system-wide, older macOS (brew install nowplaying-cli)- Spotify via AppleScript (no install needed)
- Apple Music via AppleScript (no install needed)
So with Spotify or Apple Music it works out of the box; install
media-control for other players (browser, VLC, etc.). The first
AppleScript call may trigger a macOS Automation permission prompt for your
terminal.
Keys
| Key | Action |
|---|---|
q |
Quit |
r |
Refetch lyrics |
+/- |
Nudge sync offset ±0.5 s |
f |
Toggle auto-follow (free scrolling) |
h |
Toggle footer |
l |
Toggle lyrics-only mode |
o |
Open the song's Genius page in a browser |
Behavior notes
- Synced (LRCLIB): current line is highlighted and centered.
- Plain (LRCLIB/Genius): position is estimated from track progress, so scrolling is approximate.
- Header shows position, lyrics source, and detection backend; a non-zero
sync offset appears top-right (e.g.
delay +1.5s).
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file genius_tui-0.1.3.tar.gz.
File metadata
- Download URL: genius_tui-0.1.3.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
abc388e6d862529584cf4411ca4b1b1b00ee45d3b0fd1589766d9f0fa8fb18e6
|
|
| MD5 |
9fa66c364de82b4141a49a5f3507111d
|
|
| BLAKE2b-256 |
e3b3fa4add39e757225545fb07e0898e8d1601823ef512147aa57426633cdac4
|
File details
Details for the file genius_tui-0.1.3-py3-none-any.whl.
File metadata
- Download URL: genius_tui-0.1.3-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.31 {"installer":{"name":"uv","version":"0.11.31","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a017b389195fc82bbd59b7731d291563ac5d802a99d07282f803f55bec0ffcbd
|
|
| MD5 |
d08303bd4a6d2015d458e530c521557f
|
|
| BLAKE2b-256 |
c0438c3989d6a31f667dfcf18aa723684169aea5e4bd032d08ef0a065dba4c01
|