20 个重大版本发布

0.25.0 2021 年 8 月 24 日
0.24.0 2021 年 4 月 26 日
0.23.0 2021 年 1 月 6 日
0.22.0 2020 年 10 月 5 日
0.10.0 2019 年 11 月 30 日

#1902命令行工具

Download history 69/week @ 2024-01-04 55/week @ 2024-01-11 53/week @ 2024-01-18 66/week @ 2024-01-25 72/week @ 2024-02-01 67/week @ 2024-02-08 80/week @ 2024-02-15 93/week @ 2024-02-22 72/week @ 2024-02-29 98/week @ 2024-03-07 86/week @ 2024-03-14 73/week @ 2024-03-21 77/week @ 2024-03-28 61/week @ 2024-04-04 64/week @ 2024-04-11 83/week @ 2024-04-18

每月 293 次下载

MIT/Apache

585KB
11K SLoC

Spotify TUI

Continuous Integration Crates.io

All Contributors

Follow Alexander Keliris (Rigellute)

用 Rust 编写的 Spotify 终端客户端。

Demo

上面的演示中使用的是 Rigel 主题

安装

二进制可执行文件是 spt

Homebrew

适用于 macOS 和 Linux

brew install spotify-tui

要更新,运行

brew upgrade spotify-tui

Snap

对于已安装 Snap 的系统,运行

snap install spt

将自动为您安装稳定版本。

如果您想安装夜间构建版本,运行

snap install spt --edge

AUR

对于使用 Arch Linux 的用户,您可以在 AUR 此处 找到该软件包。如果您使用 AUR 辅助程序,可以直接从中安装,例如(在 yay 的情况下),运行

yay -S spotify-tui

Nix

作为 spotify-tui 软件包提供。要安装,运行

nix-env -iA nixpkgs.spotify-tui

其中 nixpkgs 是您配置中的频道名称。要获得更最新的安装,请使用不稳定频道。还可以将软件包添加到 environment.systemPackages(对于 NixOS),或当使用 home-manager 时,添加到 home.packages

Void Linux

可在官方仓库中找到。要安装,运行

sudo xbps-install -Su spotify-tui

Fedora/CentOS

可在 Copr 仓库中找到。要安装,运行

sudo dnf copr enable atim/spotify-tui -y && sudo dnf install spotify-tui

Cargo

如果您的架构不支持在 发布页面 上找到的预构建二进制文件,请使用此选项。

首先,安装 Rust(使用推荐的 rustup 安装方法),然后

cargo install spotify-tui

此方法将从源代码构建二进制文件。

要更新,再次运行相同的命令。

Linux 注意事项

在Linux上进行编译时,需要安装libssl的开发包。有关基本安装说明,请参阅安装OpenSSL。为了定位依赖项,编译还需要安装pkg-config

如果你正在使用Windows Subsystem for Linux,则需要安装其他依赖项

Windows 10

Scoop 安装程序

首先,确保scoop安装程序在你的Windows机器上,有关说明请访问scoop.sh

然后打开powershell并运行以下两个命令

scoop bucket add scoop-bucket https://github.com/Rigellute/scoop-bucket
scoop install spotify-tui

之后程序将以: sptspt.exe 的形式可用

手动

  1. 下载适用于您操作系统的最新二进制文件
  2. cd 到你刚刚下载的文件并解压
  3. cdspotify-tui 并使用 ./spt 运行

连接到 Spotify 的 API

spotify-tui 需要连接到Spotify的API,以便通过名称查找音乐,播放曲目等。

首次运行应用程序时,将显示如何设置此功能的说明。

但它们又来了

  1. 前往Spotify仪表板
  2. 点击 创建应用
    • 现在你可以看到你的 客户端ID客户端密钥
  3. 现在点击 编辑设置
  4. https://127.0.0.1:8888/callback 添加到重定向URI
  5. 向下滚动并点击 保存
  6. 你现在可以认证Spotify了!
  7. 回到终端
  8. 运行 spt
  9. 输入你的 客户端ID
  10. 输入你的 客户端密钥
  11. 按Enter确认默认端口(8888)或输入自定义端口
  12. 你将被重定向到一个官方的Spotify网页,要求你给予权限。
  13. 接受权限后,你将被重定向到localhost。如果一切顺利,重定向URL将被自动解析,现在你已经完成了。如果由于某种原因本地Web服务器失败,你将被重定向到一个空白网页,可能会说“连接拒绝”,因为没有服务器正在运行。无论如何,复制URL并将其粘贴到终端中的提示符。

现在你就可以使用spotify-tui了 🎉

您可以在${HOME}/.config/spotify-tui/client.yml中随时编辑配置。(对于snap ${HOME}/snap/spt/current/.config/spotify-tui/client.yml

用法

二进制文件名为 spt

不使用参数运行 spt 将显示UI。按 ? 显示帮助菜单,显示当前实现的关键事件及其操作。还有一个CLI可以执行UI的大部分操作。使用 spt --help 了解更多。

这里有一些示例来让你兴奋。

spt --completions zsh # Prints shell completions for zsh to stdout (bash, power-shell and more are supported)

spt play --name "Your Playlist" --playlist --random # Plays a random song from "Your Playlist"
spt play --name "A cool song" --track # Plays 'A cool song'

spt playback --like --shuffle # Likes the current song and toggles shuffle mode
spt playback --toggle # Plays/pauses the current playback

spt list --liked --limit 50 # See your liked songs (50 is the max limit)

# Looks for 'An even cooler song' and gives you the '{name} from {album}' of up to 30 matches
spt search "An even cooler song" --tracks --format "%t from %b" --limit 30

配置

配置文件位于 ${HOME}/.config/spotify-tui/config.yml,对于 snap ${HOME}/snap/spt/current/.config/spotify-tui/config.yml(不要与处理 Spotify 身份验证的 client.yml 混淆)

以下是一个示例 config.yml 文件

# Sample config file

# The theme colours can be an rgb string of the form "255, 255, 255" or a string that references the colours from your terminal theme: Reset, Black, Red, Green, Yellow, Blue, Magenta, Cyan, Gray, DarkGray, LightRed, LightGreen, LightYellow, LightBlue, LightMagenta, LightCyan, White.
theme:
  active: Cyan # current playing song in list
  banner: LightCyan # the "spotify-tui" banner on launch
  error_border: Red # error dialog border
  error_text: LightRed # error message text (e.g. "Spotify API reported error 404")
  hint: Yellow # hint text in errors
  hovered: Magenta # hovered pane border
  inactive: Gray # borders of inactive panes
  playbar_background: Black # background of progress bar
  playbar_progress: LightCyan # filled-in part of the progress bar
  playbar_progress_text: Cyan # song length and time played/left indicator in the progress bar
  playbar_text: White # artist name in player pane
  selected: LightCyan # a) selected pane border, b) hovered item in list, & c) track title in player
  text: "255, 255, 255" # text in panes
  header: White # header text in panes (e.g. 'Title', 'Artist', etc.)

behavior:
  seek_milliseconds: 5000
  volume_increment: 10
  # The lower the number the higher the "frames per second". You can decrease this number so that the audio visualisation is smoother but this can be expensive!
  tick_rate_milliseconds: 250
  # Enable text emphasis (typically italic/bold text styling). Disabling this might be important if the terminal config is otherwise restricted and rendering text escapes interferes with the UI.
  enable_text_emphasis: true
  # Controls whether to show a loading indicator in the top right of the UI whenever communicating with Spotify API
  show_loading_indicator: true
  # Disables the responsive layout that makes the search bar smaller on bigger
  # screens and enforces a wide search bar
  enforce_wide_search_bar: false
  # Determines the text icon to display next to "liked" Spotify items, such as
  # liked songs and albums, or followed artists. Can be any length string.
  # These icons require a patched nerd font.
  liked_icon: 
  shuffle_icon: 🔀
  repeat_track_icon: 🔂
  repeat_context_icon: 🔁
  playing_icon: 
  paused_icon: 

keybindings:
  # Key stroke can be used if it only uses two keys:
  # ctrl-q works,
  # ctrl-alt-q doesn't.
  back: "ctrl-q"

  jump_to_album: "a"

  # Shift modifiers use a capital letter (also applies with other modifier keys
  # like ctrl-A)
  jump_to_artist_album: "A"

  manage_devices: "d"
  decrease_volume: "-"
  increase_volume: "+"
  toggle_playback: " "
  seek_backwards: "<"
  seek_forwards: ">"
  next_track: "n"
  previous_track: "p"
  copy_song_url: "c"
  copy_album_url: "C"
  help: "?"
  shuffle: "ctrl-s"
  repeat: "r"
  search: "/"
  audio_analysis: "v"
  jump_to_context: "o"
  basic_view: "B"
  add_item_to_queue: "z"

限制

此应用使用 Spotify 的 Web API,它本身不处理流媒体。因此,您需要打开官方 Spotify 客户端或使用更轻量级的替代品,例如 spotifyd

如果您想播放曲目,Spotify 要求您拥有 Premium 账户。

spotifyd 一起使用

按照 spotifyd 文档进行设置。

之后就没有太多的事情了。

  1. 启动 spotifyd 守护进程。
  2. 启动 spt
  3. d 进入设备选择菜单,spotifyd "设备" 应该在那里 - 如果不在,请检查 这些文档

使用的库

开发

  1. 安装 OpenSSL
  2. 安装 Rust
  3. 安装 xorg-dev(用于剪贴板支持)
  4. 克隆或分叉此存储库并将其 cd 到其中
  5. 然后执行 cargo run

Windows Linux 子系统

您可能会遇到链接错误。如果是这样,您可能需要安装剪贴板包所需的一些附加依赖项

sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev

贡献者

感谢这些可爱的人(emoji key


Alexander Keliris

💻 📖 🎨 📝 🤔 🚇 🚧 📦 👀

Mickael Marques

💵

Grzegorz Koperwas

📖

Austin Gassert

💻

Calen Robinette

💻

M*C*O

🚇

Andrew Chin

💻

Sam Naser

💻

Micha

💻

neriglissar

💻

Timon

💻

echoSayonara

💻

D-Nice

📖 🚇

Grzegorz Pawlik

💻

Lennart Bernhardt

💻

Arnaud Lefebvre

💻

tem1029

💻

Peter K. Moss

💻

Geoff Shannon

💻

Zachary Mayhew

💻

jfaltis

💻

Marcel Schramm

📖

Fangyi Zhou

💻

Max

💻

Sven van der Vlist

💻

jacobchrismarsh

💻

Nils Rauch

💻

Nick Stockton

💻 🐛 🚧 💬 📖

Stuart Hinson

💻

Sam Calvert

💻 📖

Jeroen Wijenbergh

📖

Kimberley Cook

📖

Audrey Baxter

💻

Norman

📖

Peter Maatman

💻

AlexandreS

💻

Finn Vos

💻

Carlos Hernandez

📦

Pedro Alves

💻

jtagcat

📖

Benjamin Kitor

💻

Aleš Najmann

📖 📦

Jeremy Stucki

💻

(´⌣`ʃƪ)

💻

Artem Polishchuk

📦

Chris Sosnin

💻

Ben Buhse

📖

Sean Li

💻

TimotheeGerber

💻 📖

Ferdinand Ratajczak

💻

Sheel Choksi

💻

Michael Hellwig

📖

Oliver Daniel

💻

Drew Fisher

💻

ncoder-1

📖

Macguire Rintoul

📖

Ricardo Holguin

💻

Keisuke Toyota

💻

Craig Astill

💻

Onielfa

💻

usrme

📖

Sergey A.

💻

Hideyuki Okada

💻

kepae

💻 📖

Érico Nogueira Rolim

💻

Alexander Meinhardt Scheurer

💻

Ondřej Kinšt

💻

Kryan90

📖

n-ivanov

💻

bi1yeu

💻 📖

May

💻

Bruno A. Muciño

💻

Finn Hediger

💻

dp304

💻

Marco Micera

📖

Marco Ieni

🚇

Artúr Kovács

💻

Antony Kellermann

💻

Rasmus Pedersen

💻

noir-Z

📖

David Bailey

📖

sheepwall

💻

Hwatwasthat

💻

Jesse

💻

Sang

📖

Yuuki Takahashi

📖

Alejandro Angulo

💻

Anton Kostin

📖

Justin Sexton

💻

Jiati Le

📖

Matthew Cobbing

💻

本项目遵循all-contributors规范。欢迎任何形式的贡献!

路线图

目标是最终实现几乎所有的Spotify功能。

尚未实施的高级要求

  • 向播放列表添加歌曲
  • 能够在每个视图中滚动结果页面

此表显示了Spotify API所能实现的所有功能,哪些已经实现,以及哪些是必需的。

API方法 是否已实现? 说明 必需?
track 根据曲目ID、URI或URL返回单个曲目
tracks 根据曲目ID、URI或URL列表返回曲目列表
artist 根据艺术家ID、URI或URL返回单个艺术家
artists 根据艺术家ID、URI或URL列表返回艺术家列表
artist_albums 获取关于艺术家专辑的Spotify目录信息
artist_top_tracks 获取关于艺术家按国家排名前10的曲目Spotify目录信息。
artist_related_artists 获取与指定艺术家类似的艺术家的Spotify目录信息。相似性基于Spotify社区收听历史分析。
album 根据专辑ID、URI或URL返回单个专辑
albums 根据专辑ID、URI或URL列表返回专辑列表
search_album 根据查询搜索专辑
search_artist 根据查询搜索艺术家
search_track 根据查询搜索歌曲
search_playlist 根据查询搜索播放列表
album_track 获取关于专辑歌曲的Spotify目录信息
user 获取Spotify用户的基礎個人資訊
playlist 获取Spotify播放列表的详细信息
current_user_playlists 获取当前用户播放列表,无需获取其个人资料
user_playlists 获取用户的播放列表
user_playlist 获取用户的播放列表
user_playlist_tracks 获取用户拥有的播放列表中的歌曲的详细信息
user_playlist_create 为用户创建播放列表
user_playlist_change_detail 更改播放列表的名称和/或公开/私密状态
user_playlist_unfollow 取消关注(删除)用户的播放列表
user_playlist_add_track 将歌曲添加到播放列表
user_playlist_replace_track 替换播放列表中的所有歌曲
user_playlist_recorder_tracks 重新排序播放列表中的歌曲
user_playlist_remove_all_occurrences_of_track 从指定的播放列表中删除给定歌曲的所有出现
user_playlist_remove_specific_occurrenes_of_track 从指定的播放列表中删除给定歌曲的所有出现
user_playlist_follow_playlist 将当前认证用户添加为播放列表的粉丝。
user_playlist_check_follow 检查给定用户是否正在关注指定的播放列表
me 获取当前用户的详细个人资料信息。
current_user me 同义
current_user_playing_track 获取当前用户正在播放的歌曲的信息。
current_user_saved_albums 获取当前授权用户“您的音乐”库中保存的专辑列表
current_user_saved_tracks 获取用户的保存歌曲或“喜欢的歌曲”
current_user_followed_artists 获取当前授权用户关注的艺术家列表
current_user_saved_tracks_delete 从当前用户的“您的音乐”库中删除一首或多首歌曲。
current_user_saved_tracks_contain 检查一首或多首歌曲是否已保存到当前Spotify用户的“您的音乐”库中。
current_user_saved_tracks_add 将一首或多首歌曲保存到当前用户的“您的音乐”库中。
current_user_top_artists 获取当前用户的最爱艺术家
current_user_top_tracks 获取当前用户的最爱歌曲
current_user_recently_played 获取当前用户最近播放的歌曲
current_user_saved_albums_add 将一首或多首专辑添加到当前用户的“您的音乐”库中。
current_user_saved_albums_delete 从当前用户的“您的音乐”库中删除一首或多首专辑。
user_follow_artists 关注一位或多位艺术家
user_unfollow_artists 取消关注一位或多位艺术家
user_follow_users 关注一位或多位用户
user_unfollow_users 取消关注一位或多位用户
featured_playlists 获取Spotify特色播放列表的列表
new_releases 获取Spotify特色的新专辑发布列表
categories 获取用于标记Spotify中项的类别列表
recommendations 根据种子获取推荐
audio_features 获取歌曲的音频特征
audios_features 获取多首歌曲的音频特征
audio_analysis 获取歌曲的音频分析
device 获取用户的可用设备
current_playback 获取用户当前播放信息
current_playing 获取用户当前播放的歌曲
transfer_playback 传输用户的播放
start_playback 开始/恢复用户的播放
pause_playback 暂停用户的播放
next_track 跳过用户的播放到下一首曲目
previous_track 跳过用户的播放到上一首曲目
seek_track 在当前播放曲目中定位到指定位置
repeat 设置用户播放的重复模式
volume 设置用户播放的音量
shuffle 切换用户播放的随机播放模式

依赖项

~20–35MB
~509K SLoC