Youtui - a simple TUI YouTube Music player written in Rust aiming to implement an Artist->Albums workflow for searching for music, and using discoverability principles for navigation. Inspired by https://github.com/ccgauche/ytermusic/ and cmus.
Ytmapi-rs - an asynchronous API for YouTube Music using Google's internal API, Tokio and Reqwest. Inspired by https://github.com/sigma67/ytmusicapi/.
This project is not supported or endorsed by Google.
paru -S youtui
pkg install youtui
cargo install youtui
The default option is to use browser authentication, oauth authentication is likely being phased out by Google. To change this to oauth authentication, a config.toml
file can be added to the local youtui config directory (e.g ~/.config/youtui/
on Linux), with the value auth_type = "OAuth"
. Please note however that config file format is currently unstable and could change in the future.
youtui
with no arguments.youtui --help
to see available commands.
music.youtube.com
.Cookie
into a text file named cookie.txt
into your local youtui config directory. Note you will need to create the directory if it does not exist.
Firefox example (Right click and Copy Value):
Chrome example (Select manually and paste):
youtui setup-oauth
and following the instructions.
po_token.txt
into your local youtui config directory. For more information on PO Tokens and how to obtain them, see here.libasound2-dev
(Debian / Ubuntu)alsa-lib-devel
(Fedora)-d
flag)Feature parity with ytmusicapi |
Endpoint | Implemented: Query | Implemented: Continuations |
---|---|---|---|
GetArtist | [x] | ||
GetAlbum | [x]* | ||
GetArtistAlbums | [x] | ||
Search | [x] | [ ] | |
GetSearchSuggestions | [x] | ||
GetHome | Not Planned* | ||
GetAlbumBrowseId | [ ] | ||
GetUser | [ ] | ||
GetUserPlaylists | [ ] | ||
GetSong | [ ]* | ||
GetSongRelated | [ ] | ||
GetLyrics | [x] | ||
GetTasteProfile | [x] | ||
SetTasteProfile | [x] | ||
GetMoodCategories | [x] | ||
GetMoodPlaylists | [x] | ||
GetCharts | Not Planned* | ||
GetWatchPlaylist | [x]* | [ ] | |
GetLibraryPlaylists | [x] | [x] | |
GetLibrarySongs | [x] | [x] | |
GetLibraryAlbums | [x] | [x] | |
GetLibraryArtists | [x] | [x] | |
GetLibrarySubscriptions | [x] | [x] | |
GetLibraryPodcasts | [ ] | [ ] | |
GetLibraryChannels | [ ] | [ ] | |
GetLikedSongs | [ ] | [ ] | |
GetSavedEpisodes | [ ] | [ ] | |
GetHistory | [x] | ||
AddHistoryItem | [x] | ||
RemoveHistoryItem | [x] | ||
RateSong | [x] | ||
EditSongLibraryStatus | [x] | ||
RatePlaylist | [x] | ||
SubscribeArtists | [ ] | ||
UnsubscribeArtists | [ ] | ||
GetPlaylist | [x] | [ ] | |
CreatePlaylist | [x] | ||
EditPlaylist | [x] | ||
DeletePlaylist | [x] | ||
AddPlaylistItems | [x] | ||
RemovePlaylistItems | [x] | ||
GetChannel | [*] | ||
GetChannelEpisodes | [*] | ||
GetPodcast | [*] | [ ] | |
GetEpisode | [*] | ||
GetEpisodesPlaylist | Not Planned* | ||
Original: GetNewEpisodes | [*] | ||
GetLibraryUploadSongs | [x] | [ ] | |
GetLibraryUploadArtists | [x] | [ ] | |
GetLibraryUploadAlbums | [x] | [ ] | |
GetLibraryUploadArtist | [x] | [ ] | |
GetLibraryUploadAlbum | [x] | ||
UploadAlbum | [ ] | ||
DeleteUploadEntity | [x] |
* GetWatchPlaylist is partially implemented only
* GetArtist is partially implemented only
* Only the tracking url from GetSong is implemented - as GetSongTrackingUrl. Any additional features for GetSong are not currently planned - recommend taking a look at rusty_ytdl
library for these features.
* Note, significantly dynamic pages, such as Get Home are not currently planned.
* GetEpisodesPlaylist is not implemented - it seems the only use case is to get the New Episodes playlist, which has been implemented instead as GetNewEpisodes.
See the wiki for additional information https://github.com/nick42d/youtui/wiki