yt-collate
A Terminal User Interface music player for YouTube Music, developed for Linux (likely compatible with Mac; untested yet, don't have Mac).
Originally planned to only focus on gathering/arranging tracks in playlists (hence name), Collate has become a full-fledged music client rivaling the ease-of-use of GUI clients while requiring only a fraction of their resources usage.
Built with Textual, ytmusicapi, mpv, and yt-dlp. Keybinds are a mix of Vim binds and general binds for efficient keyboard-only navigation. Collate is inspired by youtube-music-cli and yazi; check them out!
Home page, with personalized recommendations once authenticated
Prerequisites
- Python 3.12+
- mpv
- yt-dlp (nightly build) (Certain non-music videos will not play on stable build. Can run
yt-dlp --update-to nightly) - Deno or Node or QuickJS (A JS runtime is needed for yt-dlp to reliably fetch)
Install / Run / Update
pipx install yt-collate
If pipx installs to a location on your PATH (usually ~/.local/bin), run with:
yt-collate
When a new version is released, run:
pipx upgrade yt-collate
Features
- Clean, minimalistic, fullscreen TUI client for YouTube Music
- Authentication to access your Library and personalized recommendations
- Includes YouTube Music Home, Explore, Search, and Trending pages
- Smooth playback experience, with a simple dynamic queue
- Download songs/playlists to local / Automatic audio retrieval from local
- Vast set of intuitive keybinds (e.g.
nfor next track,dto download, etc.) - Easy management of Library (e.g.
oto create playlist,xto delete song/playlist, etc.) - "Marking" playlists to easily add to collection from anywhere
- YouTube Music subscribers benefit from enhanced audio bitrate (both streams and downloads)
- Discord Rich Presence integration
- Extremeley fast, lightweight, and responsive
Library playlist, with a local filter (/) and download notification
Distinct Touches
- Has Vim's "unnamed register" for
x(cut),y(yank), andp(put/paste) for songs 0-9keys jump around current track, imitating YouTube's playback keybinds- Audio bitrate indicator, originally added to verify enhanced premium bitrate
- Local filter
/can jump to line numbers, allowing fast gotos - Search screen accepts YouTube URLs, useful if you prefer exploring YouTube on a browser (me)
- Option to hide "Episodes for Later" in Library, I'm sure many find this annoying (me)
- No concept of "unshuffle",
sreshuffles queue everytime; I have no use "unshuffling" my queue
Usage
Collate uses browser headers to authenticate since OAuth 2.0 currently fails. See here on how to create your auth headers file (any POST request should work; ignore the "Using the headers in your project" section). Do this from a private/incognito window so your cookie might last a few years. Supply this file in Settings.
Collage is designed for efficient keyboard navigation, but mouse is supported as well.
Press ? in-app to view list of all keybinds.
Config
Data lives under ~/.config/yt-collate/. Downloads appear in ~/Music/yt-collate.
Development
Contributions are welcome! As a start, consider adding your favorite genre to GENRES in src/services/random_song.py
uv sync --group dev # install dev packages
uv run pytest # for testing
uv run ruff check . # for linting/formatting
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 yt_collate-0.0.2.tar.gz.
File metadata
- Download URL: yt_collate-0.0.2.tar.gz
- Upload date:
- Size: 82.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7319030536d4f5c02d9f3d940d0d10ce87b510e1a0ec8a0111d073334001c40b
|
|
| MD5 |
be8d1face293ddb2c1cd50a34cdf052b
|
|
| BLAKE2b-256 |
d3df93dda2696931ca53bd5ddb33894acf6b815ddda6faa263b3440278bc9398
|
File details
Details for the file yt_collate-0.0.2-py3-none-any.whl.
File metadata
- Download URL: yt_collate-0.0.2-py3-none-any.whl
- Upload date:
- Size: 74.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58b61cb8b344460ca48f27d2b78efd6c55d684ceb0d65206d2913b048caf133f
|
|
| MD5 |
17d4e8dc244ab0010348a9e3b7418667
|
|
| BLAKE2b-256 |
8c82d5d72f5086ddc8f75585021391cb62085eb559ab552492761664e187b99a
|