nick42d / youtui

TUI and API for YouTube Music written in Rust
MIT License
46 stars 4 forks source link

dependency status build

About

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.

Features

Demo

asciicast

Installing youtui

Packaging status

Arch Linux

paru -S youtui

FreeBSD

pkg install youtui

Cargo

cargo install youtui

Running 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.

Commands

  1. To run the TUI application, execute youtui with no arguments.
  2. To use the API in command-line mode, execute youtui --help to see available commands.

    Browser Auth Setup Steps

  3. Open YouTube Music in your browser - ensure you are logged in.
  4. Open web developer tools (F12).
  5. Open Network tab and locate a POST request to music.youtube.com.
  6. Copy the 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): image Chrome example (Select manually and paste): image

    OAuth Setup Steps

  7. Setup the oauth token in the default configuration directory by running youtui setup-oauth and following the instructions.

    Other Setup

  8. If music downloads always return an error, you are able to supply a PO Token by saving it to the file po_token.txt into your local youtui config directory. For more information on PO Tokens and how to obtain them, see here.

Dependencies note

General

Limitations

Roadmap

Application

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.

Developer notes

See the wiki for additional information https://github.com/nick42d/youtui/wiki