百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
Y

youtui

> 编程语言
开源

YouTube Music 的 TUI 和 API 由 Rust 编写

195 stars0 点赞0 次浏览
访问官网GitHub

工具介绍

YouTube Music 的 TUI 和 API 由 Rust 编写

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

Installing youtui

Arch Linux

paru -S youtui

FreeBSD

pkg install youtui

Cargo

cargo install youtui --locked

Running youtui

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

  1. Open YouTube Music in your browser - ensure you are logged in.
  2. Open web developer tools (F12).
  3. Open Network tab and locate a POST request to music.youtube.com.
  4. 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):

Chrome example (Select manually and paste):

Configuration

  • Configuration is set in the config.toml file in the local youtui config directory (e.g ~/.config/youtui/ on Linux).
  • Please note, config.toml format is unstable and may change in future.
  • Example config.tomls have been provided in the youtui/config/ directory in the project.
  • The default option for searching music is to use browser authentication, To change this to oauth authentication, add auth_type = "OAuth".
  • The default option for downloading music is to use the inbuilt native downloader. This can be changed to yt-dlp by adding downloader_type = "YtDlp".
  • The command used to run yt-dlp can be supplied as yt_dlp_command = "command".
  • Configurable keybinds can be supplied as part of your config.toml (see examples for the syntax).

PO token information

  1. If music downloads always return an error with native downloader, 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.

OAuth Setup Steps (optional)

  1. Prerequisite: A Google Cloud Console account and project are required.
  2. Following the YouTube Data API docs, create a new OAuth client ID for the application type TVs and Limited Input devices.
  3. Run youtui setup-oauth with your Client ID and Client Secret and following the instructions. This will create a new oauth.json file in the default configuration directory.

Dependencies note

General

  • A font that can render FontAwesome symbols is required.
  • yt-dlp is an optional dependancy (see [Other Setup & Configuration])

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)
    • alsa-lib (Arch)

Limitations

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

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)
  • Release to AUR (target for 0.0.4)
  • Remove reliance on rust nightly (target for 0.0.4)
  • OAuth authentication including automatic refresh of tokens
  • Seeking
  • Configurable key bindings
  • Logging to a file
  • Dbus support for media keys
  • Display album cover
  • Gapless playback (blocked - requires symphonia AAC gapless support)
  • Mouse support
  • Offline cache
  • Streaming of buffered tracks
  • Display lyrics
  • Theming

API

  • Document public API
  • OAuth authentication
  • Implement endpoint continuations
  • Implement all endpoints
  • Automatically update User Agent using a library
  • i18n

Feature parity with ytmusicapi

Endpoint Implemented: Query Implemented: Continuations
GetArtist [x]*
GetAlbum [x]
GetArtistAlbums [x]
Search [x] [x]
GetSearchSuggestions [x]
GetHome Not Planned*
GetAlbumBrowseId [ ]
GetUser [x]
GetUserPlaylists [x]
GetUserVideos [x]
GetSong [ ]*
GetSongRelated Not Planned*
GetLyrics [x]
GetTasteProfile [x]
SetTasteProfile [x]
GetMoodCategories [x]
GetMoodPlaylists [x]
GetCharts Not Planned*
GetWatchPlaylist (tracks): GetWatchPlaylist [x] [x]
GetWatchPlaylist (lyrics_id): GetLyricsID [x]
GetLibraryPlaylists [x] [x]
GetLibrarySongs [x] [x]
GetLibraryAlbums [x] [x]
GetLibraryArtists [x] [x]
GetLibraryArtistSubscriptions [x] [x]
GetLibraryPodcasts [x] [x]
GetLibraryChannels [x] [x]
GetLikedSongs [ ] [ ]
GetSavedEpisodes [ ] [ ]
GetAccountInfo [ ]
GetHistory [x]
AddHistoryItem [x]
RemoveHistoryItem [x]
RateSong [x]
EditSongLibraryStatus [x]
RatePlaylist [x]
SubscribeArtist [x]
UnsubscribeArtists [x]
GetPlaylistTracks [x] [x]
GetPlaylistDetails [x]
CreatePlaylist [x]
EditPlaylist [x]
DeletePlaylist [x]
AddPlaylistItems [x]
RemovePlaylistItems [x]
GetChannel [*]
GetChannelEpisodes [*]
GetPodcast [*] [ ]
GetEpisode [*]
GetEpisodesPlaylist Not Planned*
Original: GetNewEpisodes [*]
GetLibraryUploadSongs [x] [x]
GetLibraryUploadArtists [x] [x]
GetLibraryUploadAlbums [x] [x]
GetLibraryUploadArtist [x] [x]
GetLibraryUploadAlbum [x]
UploadSong [x]
DeleteUploadEntity [x]

* GetArtist is partially implemented only

  • only returns albums and songs

* 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 GetHome and GetSongRelated 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

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Rust

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月18日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言