一个 Rust 开发者绕过 Spotify 限流,给 Linux 和「从没开过终端的老爸」做了个播放器

有人用 Rust 写了个 Spotify 命令行播放器,还给他爸做了个图形界面

今天 Hacker News 上有个挺有烟火气的 Show HN。一位叫 LargeModGames 的开发者发了 Spotatui:一个用 Rust 写的 Spotify 命令行播放器,外加一个 GUI 版本。35 个点赞,不算爆,但评论区里那句「我为什么做这个」的回答值得看两眼。

他入坑 Linux 大概一年,想用 spotify-tui 发现它坏了,于是边学 Rust 边修;几个月前他爸也想用,可他爸这辈子没开过终端,他就干脆做了个图形界面出来。这个动机跟那些冲着「颠覆音乐行业」去的 PR 稿完全是两回事。

项目的核心卖点写在标题里:没有 web API 速率限制。这里面的故事比表面更有意思。第三方 Spotify 客户端通常依赖你在 Spotify 开发者后台建的一个 app,靠那个共享 quota 调 web API,结果就是经常被限流,而且 Spotify 一直在慢慢废弃一堆接口。之前的通用解法是借用 ncspot 的共享 client id,后来也被限流了。作者说,他是在反复踩同一个坑之后换了思路:干脆不走这套公开 API,让后端直接挂在 librespot(他自己的 fork)上,从官方客户端内部走的那条接口拿数据——元数据、歌单、用户曲库、设备列表、歌词、音频分析;搜索则走 Pathfinder,也就是 Spotify 内部那个 GraphQL API。

这样一来,每个用户用自己的登录会话,跟官方客户端一样,没有共享配额,自然就没有 web API 限流了。代价写得很坦白:这个内部 API 没文档,Spotify 哪天改一下就可能全崩,作者的意思是「坏了我就立刻修」。自己啃未文档化 API 的活儿,在第三方播放器圈子里算是常规操作,只是通常没人把它做得这么完整。

他顺带塞了不少播放源进去:YouTube、Navidrome/Subsonic、带约 3 万电台的互联网广播、本地文件、Qobuz 的无损,还有 macOS 上远程控 Apple Music 的模块。也就是说,Spotatui 已经不只是一个 Spotify 壳子,更像一个把各种源接在一起的统一播放前端。技术栈方面,Rust 写核心,终端 UI 用 ratatui,GUI 用 Tauri 2,两个前端共享同一套播放逻辑、登录和 Spotify 代码,核心只开一个让本机访问的 localhost web server 给 GUI 用。首次启动就打开浏览器让你用 Spotify 账号登录,而且明确写了 premium 是必须的——这一步做完,配置就算完成了。

GUI 目前还比 TUI 落后一点,只支持 Spotify,作者说全功能对齐马上来,再往后对齐官方客户端。他把 GUI 做得几乎跟官方客户端长得一样,理由很实在:这样他自己和用户都更容易发现还缺哪些功能。另外还支持 Lua 脚本,有个可选的 Web companion,以及一个面向 AI 编码 agent 的功能——如果你有 ChatGPT Codex 或 Claude Code,可以开 MCP 工具,让 AI 通过说话直接当你的私人 DJ。后面这条算是挺合这个时间点的细节。

放到现在「各家都在收紧 API、第三方开发者越来越难挤进订阅生态」的语境里看,这算是一个挺典型的反制案例:官方不给入口,自己研究内部协议也要把产品做出来。Spotify 不文档化这套内部 API,意味着它随时能掐断这条路,这也是整件事最大的不稳定因素,也是它最诚实的部分。对想试的人来说,直接从 GitHub 拿 release 就行,代码、release 和官网链接都挂在帖子里。

我的看法是,这项目的上限取决于作者能不能跟 Spotify 的内部变动长期耗下去——第三方播放器真正稀缺的从来不只是功能,而是愿不愿意一直守着坑修下去的那种耐心。