nick42d/youtui · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
关于
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 的支持或认可。
功能
- 快速轻松地显示整个艺术家的唱片目录
- 缓冲即将播放的歌曲
- 搜索建议
- 排序和过滤
演示
安装 youtui
Arch Linux
paru -S youtui
FreeBSD
pkg install youtui
Cargo
cargo install youtui --locked
运行 youtui
命令
- 要运行 TUI 应用程序,请不带参数执行
youtui。 - 要在命令行模式下使用 API,请执行
youtui --help以查看可用命令。
浏览器身份验证设置步骤
- 在浏览器中打开 YouTube Music - 确保您已登录。
- 打开 Web 开发者工具 (F12)。
- 打开 Network 选项卡并定位到
music.youtube.com的 POST 请求。 - 将
Cookie复制到名为cookie.txt的文本文件中,并放入您的本地 youtui 配置目录。请注意,如果该目录不存在,您需要创建它。 Firefox 示例(右键点击并选择 Copy Value):Chrome 示例(手动选择并粘贴):
配置
- 配置设置在本地 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 令牌信息
- 如果音乐下载在使用原生下载器时始终返回错误,您可以通过将 PO Token 保存到本地 youtui 配置目录中的
po_token.txt文件来提供 PO Token。有关 PO Token 及其获取方式的更多信息,请参阅 此处。
OAuth 设置步骤(可选)
- 前提条件:需要一个 Google Cloud Console 账户和项目。
- 按照 YouTube Data API 文档,为应用程序类型
TVs and Limited Input devices创建一个新的OAuth client ID。 - 使用您的 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