TGViewer
V2EX V2EX @pushv2ex · 548 subscribers
Post #236766 4
[分享创造] [开源] 给特斯拉车机做了个 Spotify 同步歌词网站,可自部署

想法来自用了很久的 Lyricify ,但它一直没有浏览器端。开车的时候 Spotify 没歌词实在难受,所以自己开发了一个浏览器端的,在车机浏览器里就能用(用 Tesla 实测)。

完全开源,支持自己部署;嫌麻烦的话也可以直接用我部署好的。

● 在线版: https://drivelyrics.com
● 源码( AGPL-3.0 ): https://github.com/jiaton/drivelyrics

能干啥

● 歌词跟着 Spotify 播放进度逐行滚动
● 歌词源:中文歌(或开了翻译时)优先网易云,英文歌优先 LRCLIB ,也可以在设置里手动指定;翻译可开可关(右上角 ⚙ 设置)
● 歌词错了点右上角「歌词不对?」,从候选里手动选,纠正结果所有用户共享
● 车机登录不用打字,用已登录的手机扫码就能登上,cookie 长期有效,直到手动退出

折腾过的点

● 中文歌匹配:Spotify 给的歌名经常是繁体,歌词库里是简体。现在用 OpenCC 把繁简统一后打分,结合标题、歌手、时长,并且排除翻唱、伴奏、Live 版
● 车机性能:为了照顾车机的 GPU 和性能,歌词每换一行只做一次 CSS transform ,不跑逐帧动画
● 轮询:每个用户一个轮询器,只有页面开着才去调用 Spotify ,然后用 SSE 推给浏览器;页面关闭一分钟后停止
● 技术栈:后端 FastAPI + SQLModel + SQLite ,前端 Vite + React ,纯 CSS 没用 UI 框架
● 隐私:Google 登录只拿邮箱和名字; Spotify 的密钥和令牌在数据库里加密存储

使用门槛

需要 Spotify Premium,而且每个人要建一个自己的 Spotify 开发者应用(网站上有引导,两分钟搞定)。

这是 Spotify 2026 年的新规:开发者模式的应用最多给 5 个人用,所有者还必须是 Premium ,所以没法用一个公共应用服务所有人。

自部署

docker compose up -d --build 就能跑,需要一个 HTTPS 域名和一个 Google OAuth 客户端,README 里有完整步骤。

开源版默认只用 LRCLIB 当歌词源。源码里没放网易云接口服务,需要的话自己接一个兼容的就行,很简单。

----------------------

思路来自 Lyricify ,感谢 Lyricify ,也推荐大家用它的客户端!

欢迎回帖,欢迎 Issue 和 PR~
More from @pushv2ex
  1. Oct 12, 2026[推广] 做定制订单工具时,选规格和排版为什么分开做 一笔定制订单选了大尺寸,是不是直接把小尺寸的图放大就够了?如果每张照片和每段名字都不一样,这种处理很容易留下新的排版问题。 我…
  2. Oct 12, 2026[杭州] 杭州买房求大佬指点 目前滨江工作,将来未知,父母想让我买套房 看了建发云之城,规划和内部挺好,但是不知道这个饼未来吃不吃得消 如果是总价 300w 上下二手房,哪里还有合…
  3. Oct 12, 2026[分享创造] 做了一个原生的 macOS Vaultwarden 客户端:基于 MyGo ,主窗口零 WebView,支持 Touch ID 与系统级 AutoFill 自建 Va…
  4. Oct 12, 2026[分享创造] 用 Claude Opus 5.5 做了个动效视频工具,哪里不满意只改哪里,不用整条重新生成 大家好,分享一下我做的一个小工具 Tellcut 。 用 AI 做视频,…
  5. Oct 12, 2026[分享创造] 因为带孩子去医院,医生开的药,家里其实有,所以我开发了一个记录就诊和家庭药箱的 App 我一开始的初衷是为了节省重复开药的钱,通过在 App 使用关键词检索就能知道家…
  6. Oct 12, 2026[推广] 做了个 EffectCraft 独立资料站:整理下载、入门教程和 AE 兼容限制 最近关注到开源动效软件 EffectCraft ,查资料时发现,“能做什么”和“现在还不…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →