ITADN
nick42d/youtui
nick42d/youtui · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

dependency status build

关于

Youtui - 一个用 Rust 编写的简单 TUI YouTube Music 播放器,旨在实现 Artist->Albums 工作流以搜索音乐,并采用可发现性原则进行导航。灵感来自 https://github.com/ccgauche/ytermusic/ 和 cmus。

Ytmapi-rs - 一个使用 Google 内部 API、Tokio 和 Reqwest 的 YouTube Music 异步 API。灵感来自 https://github.com/sigma67/ytmusicapi/。

本项目未获得 Google 的支持或认可。

功能

  • 快速轻松地显示整个艺术家的唱片目录
  • 缓冲即将播放的歌曲
  • 搜索建议
  • 排序和过滤

演示

asciicast

安装 youtui

Packaging status

Arch Linux

paru -S youtui

FreeBSD

pkg install youtui

Cargo

cargo install youtui --locked

运行 youtui

命令

  1. 要运行 TUI 应用程序,请不带参数执行 youtui
  2. 要在命令行模式下使用 API,请执行 youtui --help 以查看可用命令。

浏览器身份验证设置步骤

  1. 在浏览器中打开 YouTube Music - 确保您已登录。
  2. 打开 Web 开发者工具 (F12)。
  3. 打开 Network 选项卡并定位到 music.youtube.com 的 POST 请求。
  4. Cookie 复制到名为 cookie.txt 的文本文件中,并放入您的本地 youtui 配置目录。请注意,如果该目录不存在,您需要创建它。 Firefox 示例(右键点击并选择 Copy Value): image Chrome 示例(手动选择并粘贴): image

配置

  • 配置设置在本地 youtui 配置目录中的 config.toml 文件中(例如在 Linux 上为 ~/.config/youtui/)。
  • 请注意config.toml 格式不稳定,未来可能会更改。
  • 项目中 youtui/config/ 目录内已提供 config.toml 示例。
  • 搜索音乐的默认选项是使用浏览器身份验证,若要将其更改为 oauth 身份验证,请添加 auth_type = "OAuth"
  • 下载音乐的默认选项是使用内置的原生下载器。这可以通过添加 yt-dlp 来更改为 downloader_type = "YtDlp"
  • 用于运行 yt-dlp 的命令可以作为 yt_dlp_command = "command" 提供。
  • 可配置的关键绑定可以作为您的 config.toml 的一部分提供(请参阅示例以了解语法)。

PO 令牌信息

  1. 如果音乐下载在使用原生下载器时始终返回错误,您可以通过将 PO Token 保存到本地 youtui 配置目录中的 po_token.txt 文件来提供 PO Token。有关 PO Token 及其获取方式的更多信息,请参阅 此处

OAuth 设置步骤(可选)

  1. 前提条件:需要一个 Google Cloud Console 账户和项目。
  2. 按照 YouTube Data API 文档,为应用程序类型 TVs and Limited Input devices 创建一个新的 OAuth client ID
  3. 使用您的 Client ID 和 Client Secret 运行 youtui setup-oauth 并按照说明操作。这将在默认配置目录中创建一个新的 oauth.json 文件。

依赖项说明

通用

  • 需要能够渲染 FontAwesome 符号的字体。
  • yt-dlp 是一个可选依赖项(参见 [其他设置与配置])

Linux 特定

  • Youtui 使用 Rodio 库进行播放,该库依赖 Cpal https://github.com/rustaudio/cpal 以支持 ALSA。cpal 的 readme 中提到需要 ALSA 开发文件,可以在以下软件包中找到:
    • libasound2-dev (Debian / Ubuntu)
    • alsa-lib-devel (Fedora)
    • alsa-lib (Arch)

局限性

  • 该项目正处于积极开发阶段,接口可能会随时更改。该项目将使用语义化版本控制来指示接口何时稳定。

路线图

应用

  • Windows 支持(目标版本 0.0.1)
  • 配置文件夹支持(目标版本 0.0.1)
  • 实现改进的下载速度
  • 过滤(目标版本 0.0.3)
  • 发布到 AUR(目标版本 0.0.4)
  • 移除对 rust nightly 的依赖(目标版本 0.0.4)
  • OAuth 认证,包括自动刷新令牌
  • 定位
  • 可配置按键绑定
  • 日志记录到文件
  • Dbus 支持媒体键
  • 显示专辑封面
  • 无缝播放(受阻 - 需要 symphonia AAC 无缝支持)
  • 鼠标支持
  • 离线缓存
  • 缓冲轨道的流式传输
  • 显示歌词
  • 主题

API

  • 文档化公共 API
  • OAuth 认证
  • 实现端点续传
  • 实现所有端点
  • 使用库自动更新 User Agent
  • i18n

ytmusicapi 的功能对等

端点已实现:查询已实现:续传
GetArtist[x]*
GetAlbum[x]
GetArtistAlbums[x]
Search[x][x]
GetSearchSuggestions[x]
GetHome未计划*
GetAlbumBrowseId[ ]
GetUser[x]
GetUserPlaylists[x]
GetUserVideos[x]
GetSong[ ]*
GetSongRelated未计划*
GetLyrics[x]
GetTasteProfile[x]
SetTasteProfile[x]
GetMoodCategories[x]
GetMoodPlaylists[x]
GetCharts未计划*
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未计划*
Original: GetNewEpisodes[*]
GetLibraryUploadSongs[x][x]
GetLibraryUploadArtists[x][x]
GetLibraryUploadAlbums[x][x]
GetLibraryUploadArtist[x][x]
GetLibraryUploadAlbum[x]
UploadSong[x]
DeleteUploadEntity[x]

* GetArtist 仅部分实现

  • 仅返回专辑和歌曲

* 仅实现了来自 GetSong 的跟踪 URL - 作为 GetSongTrackingUrl。目前不计划为 GetSong 添加任何额外功能 - 建议查看 rusty_ytdl 库以获取这些功能。

* 注意,高度动态的页面,例如 GetHome 和 GetSongRelated,目前不计划实现。

* GetEpisodesPlaylist 未实现 - 其唯一的使用场景似乎是获取新剧集播放列表,该功能已改为实现为 GetNewEpisodes。

开发者说明

请参阅 wiki 以获取更多信息 https://github.com/nick42d/youtui/wiki