4 releases
0.0.4 | Jan 22, 2024 |
---|---|
0.0.3 | Dec 13, 2023 |
0.0.2 | Dec 4, 2023 |
0.0.1 | Dec 3, 2023 |
0.0.1-1 |
|
#84 in Audio
1MB
12K
SLoC
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
- Quickly and easily display entire artist's discography
- Buffer upcoming songs
- Search suggestions
- Sorting and filtering
Demo
How to install and run
- The easiest way to install is using crates.io by running
cargo +nightly install youtui
. (Nightly Rust is required to allow async methods in API trait, and this is expected to stabilise shortly.) - Give the application an authorisation header:
- Open YouTube Music in your browser - ensure you are logged in.
- Open web developer tools (F12).
- Open Network tab and locate a POST request to
music.youtube.com
. - Copy the
Cookie
into a text file namedcookie.txt
into your local youtui config directory (e.g ~/.config/youtui/ on Linux). Note you will need to create the directory if it does not exist.
- To run the TUI application, execute
youtui
with no arguments. - To use the API in command-line mode, execute
youtui --help
to see available commands.
Cookie extraction examples
Firefox example (Right click and Copy Value): Chrome example (Select manually and paste):
Dependencies note
General
- A font that can render FontAwesome symbols is required.
Linux specific
- Youtui uses the Rodio library for playback which relies on Cpal https://github.com/rustaudio/cpal for ALSA support. The cpal readme mentions the that the ALSA development files are required which can be found in the following packages:
libasound2-dev
(Debian / Ubuntu)alsa-lib-devel
(Fedora)
- The Reqwest library requires ssl which can be found in the following packages:
libssl-dev
(Ubuntu)openssl-devel
(Fedora)
Limitations
- Github version number and tags are only relevant for the binary component of the application. For the latest release version of ytmapi-rs, please refer to crates.io.
- This project is under heavy development, and interfaces could change at any time. The project will use semantic versioning to indicate when interfaces have stabilised.
- The Rodio library used for playback does not currently support seeking or checking progress although there are PRs in progress for both. Progress updates are currently emulated with a ticker and may be slightly out, and seeking is not yet implemented.
Roadmap
Application
- Windows support (target for 0.0.1)
- Configuration folder support (target for 0.0.1)
- Implement improved download speed
- Filtering (target for 0.0.3)
- Logging to a file (target for 0.0.5)
- Release to AUR (target for 0.0.4)
- Remove reliance on rust nightly (target for 0.0.4)
- Dbus support for media keys
- Seeking
- Mouse support
- Offline cache
- Streaming of buffered tracks
- OAuth authentication including automatic refresh of tokens
- Display lyrics and album cover (pixel art)
- Theming
- Configurable key bindings
API
- Document public API
- Automatically update User Agent using a library
- Implement endpoint continuations
- Implement all endpoints
- OAuth authentication
- i18n
Endpoint | Implemented |
---|---|
GetArtist | [x] |
GetAlbum | [x] |
GetArtistAlbums | [x] |
Search | [ ]* |
GetSearchSuggestions | [x] |
GetHome | [ ] |
GetAlbumBrowseId | [ ] |
GetUser | [ ] |
GetUserPlaylists | [ ] |
GetSong | [ ] |
GetSongRelated | [ ] |
GetLyrics | [x] |
GetTasteProfile | [ ] |
SetTasteProfile | [ ] |
GetMoodCategories | [ ] |
GetMoodPlaylists | [ ] |
GetCharts | [ ] |
GetWatchPlaylist | [ ]* |
GetLibraryPlaylists | [ ]* |
GetLibrarySongs | [ ] |
GetLibraryAlbums | [ ] |
GetLibraryArtists | [ ]* |
GetLibrarySubscriptions | [ ] |
GetLikedSongs | [ ] |
GetHistory | [ ] |
AddHistoryItem | [ ] |
RemoveHistoryItem | [ ] |
RateSong | [ ] |
EditSongLibraryStatus | [ ] |
RatePlaylist | [ ] |
SubscribeArtists | [ ] |
UnsubscribeArtists | [ ] |
GetPlaylist | [ ] |
CreatePlaylist | [ ] |
EditPlaylist | [ ] |
DeletePlaylist | [ ] |
AddPlaylistItems | [ ] |
RemovePlaylistItems | [ ] |
GetLibraryUploadSongs | [ ] |
GetLibraryUploadArtists | [ ] |
GetLibraryUploadAlbums | [ ] |
GetLibraryUploadArtist | [ ] |
GetLibraryUploadAlbum | [ ] |
UploadAlbum | [ ] |
DeleteUploadEntity | [ ] |
* search is partially implemented only
- does not implement continuations - only first x results returned.
* get watch playlist is partially implemented only
- only returns playlist and lyrics ids
- does not implement continuations - only first x results returned.
* get library playlist & artists are partially implemented only
- does not implement continuations - only first x results returned.
Additional information
See the wiki for additional information https://github.com/nick42d/youtui/wiki
Dependencies
~47–88MB
~1.5M SLoC