A full-featured YouTube Music TUI client for the terminal
Project description
ytm-player
A full-featured YouTube Music player for the terminal. Browse your library, search, queue tracks, and control playback — all from a TUI with vim-style keybindings. Runs on Linux, macOS, and Windows.
Available on PyPI, AUR, NixOS, and Gentoo — actively maintained with cross-platform support.
Features
- Vim-style keybindings — j/k movement, multi-key sequences (
g sfor search,g lfor library), count prefixes (5j) - Synced lyrics — live-highlighted with LRCLIB fallback for tracks YouTube doesn't have, with title sanitization for better LRCLIB matches
- mpv backend — gapless audio, stream prefetching, broad codec support
- Cross-platform native integrations — MPRIS (Linux), Now Playing (macOS), media keys (Windows)
- Theming — 18+ Textual themes plus per-app color overrides in
theme.toml - Spotify import — pull playlists in via API or scraper fallback
- CLI + IPC — control a running TUI from another terminal (
ytm play,ytm pause, etc.) - Free-tier support — works without YouTube Music Premium
- Session resume — last-playing track + queue restored on launch
- Local cache — LRU audio cache for offline-like replay of previously heard tracks
- Discord + Last.fm — Rich Presence and scrobbling
Requirements
- Python 3.10+
- mpv (audio playback backend, must be installed system-wide)
- A YouTube Music account (free or Premium)
Install
# PyPI (Linux / macOS / Windows)
pip install ytm-player
# Arch / CachyOS / Manjaro (AUR)
yay -S ytm-player-git
For NixOS, Gentoo, Windows-specific mpv DLL setup, source builds, and optional extras (Discord, Last.fm, Spotify import, etc.), see docs/installation.md.
Quickstart
ytm setup # one-time auth (auto-detects browser cookies)
ytm # launch the TUI
Windows: replace ytm with py -m ytm_player.
Documentation
| Topic | Link |
|---|---|
| Per-platform install + optional extras | docs/installation.md |
config.toml + theme.toml reference |
docs/configuration.md |
| Full keyboard + mouse keybindings | docs/keybindings.md |
All ytm CLI subcommands |
docs/cli-reference.md |
| Spotify playlist import | docs/spotify-import.md |
| Troubleshooting (mpv / auth / MPRIS / macOS / cache) | docs/troubleshooting.md |
| File layout + stack | docs/architecture.md |
| Contributing | CONTRIBUTING.md |
| Security policy | SECURITY.md |
Contributors
Thanks to @dmnmsc, @Villoh, @valkyrieglasc, @dsafxP, @Thayrov, @glywil, @Kineforce, @CarterSnich, @Tohbuu, @nitsujri, @uhs-robert, @moschi, and @firedev for bug reports, fixes, packaging, and platform support.
Changelog
See CHANGELOG.md for the full release history.
Project details
Release history Release notifications | RSS feed
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 ytm_player-1.9.0.tar.gz.
File metadata
- Download URL: ytm_player-1.9.0.tar.gz
- Upload date:
- Size: 570.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45bf5d094f8d333af01213c3a25e03e3fb9a8e0ff9ccaf3d5de9c99f21322d80
|
|
| MD5 |
aeddb7a4222f98faf23607ac85de6ff9
|
|
| BLAKE2b-256 |
4e0d9be30e37cbd039c5730823c8e9d3c3a3d60c9a729d229aafa80434c0f22d
|
Provenance
The following attestation bundles were made for ytm_player-1.9.0.tar.gz:
Publisher:
publish.yml on peternaame-boop/ytm-player
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ytm_player-1.9.0.tar.gz -
Subject digest:
45bf5d094f8d333af01213c3a25e03e3fb9a8e0ff9ccaf3d5de9c99f21322d80 - Sigstore transparency entry: 1408112080
- Sigstore integration time:
-
Permalink:
peternaame-boop/ytm-player@4db15b45ad5e3b47e494846a3fb1e871172577bf -
Branch / Tag:
refs/tags/v1.9.0 - Owner: https://github.com/peternaame-boop
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4db15b45ad5e3b47e494846a3fb1e871172577bf -
Trigger Event:
push
-
Statement type:
File details
Details for the file ytm_player-1.9.0-py3-none-any.whl.
File metadata
- Download URL: ytm_player-1.9.0-py3-none-any.whl
- Upload date:
- Size: 225.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89127708a78547e853a54b341ca2a3a9fef0e8eaf0bdcb7964861b3412782e1a
|
|
| MD5 |
fae109e8987c67be2221421d5452bfae
|
|
| BLAKE2b-256 |
05ff32501b6b8cbbd7e82278bd4a4159d5e79e84aef64546adb69967251fdf09
|
Provenance
The following attestation bundles were made for ytm_player-1.9.0-py3-none-any.whl:
Publisher:
publish.yml on peternaame-boop/ytm-player
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ytm_player-1.9.0-py3-none-any.whl -
Subject digest:
89127708a78547e853a54b341ca2a3a9fef0e8eaf0bdcb7964861b3412782e1a - Sigstore transparency entry: 1408112153
- Sigstore integration time:
-
Permalink:
peternaame-boop/ytm-player@4db15b45ad5e3b47e494846a3fb1e871172577bf -
Branch / Tag:
refs/tags/v1.9.0 - Owner: https://github.com/peternaame-boop
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4db15b45ad5e3b47e494846a3fb1e871172577bf -
Trigger Event:
push
-
Statement type: