- B
So What
DSub · 2m ago
- T
Take Five
Symfonium · 14m ago
- G
Goodbye Pork Pie Hat
Feishin · 31m ago
3 个客户端 · 2 台服务器 · 实时更新
自托管 · 开源 · MIT
Navidrome Stat 轮询 Navidrome 服务器的 getNowPlaying 接口,把所有 Subsonic 客户端的播放汇聚成一块自托管仪表盘——收听时长、趋势、榜单和年度回顾。数据从不离开你的机器。
Blue in Green
Miles Davis — Kind of Blue
Navidrome 的各个客户端彼此不共享统计。Navidrome Stat 改为在服务器端观测——所有客户端,同一条历史。
So What
DSub · 2m ago
Take Five
Symfonium · 14m ago
Goodbye Pork Pie Hat
Feishin · 31m ago
3 个客户端 · 2 台服务器 · 实时更新
DSub、Symfonium、Feishin、网页播放器——任何 Subsonic 客户端的播放都汇入同一条历史,多台 Navidrome 服务器也不例外。
按小时与按天的趋势、星期×小时热力图、客户端占比、转码率,以及艺术家、专辑、曲目榜单。
年度总量、连续收听天数,以及你的年度艺术家、专辑与曲目——属于你自己的 Wrapped,基于你自己的数据。
专辑封面经过带鉴权的、容量受限的缓存——你的音乐库保持私密。
已缓存 1,024 张封面 · 128 MB
一切都在一个属于你的 SQLite 文件里。按用户导出、导入与删除,可选 token 认证,零遥测。
Catppuccin、Nord、Dracula、Tokyo Night、Gruvbox、Solarized——即时切换。
简体中文、繁體中文、English、日本語、Deutsch——更多语言已在路线图上。
十套内置主题,整个仪表盘即时换色。点一个试试:
一页看尽一整年:总量、连续天数,和陪你走过这一年的歌。
年度曲目
Blue in Green
示例数据——真实数字来自你自己的曲库。
无需客户端插件、无需注册、不上云。一个轻量容器,守在你的音乐服务器旁边。
每 10 秒(可配置)通过 Subsonic API 向每台 Navidrome 服务器询问正在播放的内容——接口本来就在。
暂停与中断不计入。累计有效收听超过阈值(默认 30 秒)才算一次播放。
有效播放写入你磁盘上的 SQLite,在 39421 端口的自包含仪表盘中呈现。
当服务器支持 OpenSubsonic playbackReport 扩展时会自动采用,让进度与时长统计更精确。
复制、粘贴,打开 39421 端口。建议锁定版本号,保证更新可复现。
services:
navidrome-stat:
image: stepaniah/navidrome-statistic:v0.8.1
container_name: navidrome-stat
user: "1000:1000"
ports:
- "39421:39421"
volumes:
- navidrome-stat-data:/data
environment:
NAVIDROME_URL: ${NAVIDROME_URL}
NAVIDROME_USER: ${NAVIDROME_USER}
NAVIDROME_PASS: ${NAVIDROME_PASS}
STATS_API_TOKEN: ${STATS_API_TOKEN}
DATABASE_URL: /data/navidrome_stats.db
restart: unless-stopped
volumes:
navidrome-stat-data: docker run -d --name navidrome-stat \
-p 39421:39421 \
-e NAVIDROME_URL=https://navidrome.example.com \
-e NAVIDROME_USER=you \
-e NAVIDROME_PASS=change-me \
-e STATS_API_TOKEN=$(openssl rand -hex 24) \
-v navidrome-stat-data:/data \
stepaniah/navidrome-statistic:v0.8.1 NAVIDROME_URL=https://navidrome.example.com
NAVIDROME_USER=example_user
NAVIDROME_PASS=change-me
STATS_API_TOKEN=use-a-long-random-value 配置 STATS_API_TOKEN 后,首次访问在登录页输入一次即可——浏览器只保存 HttpOnly 会话 Cookie,而非 token 本身。
完整配置参考收听历史只存在于你自己数据卷里的一个 SQLite 文件。
设置页内置按用户的 JSON 导出、导入与删除。
配置 STATS_API_TOKEN 后仪表盘与 API 均需登录——会话使用 HttpOnly Cookie。
容器唯一的外呼对象就是你的 Navidrome 服务器。
多个实例轮询同一批服务器会导致播放被重复计数。
数据库与设置页保存的凭据均为明文——请像对待机密一样保护数据卷。
远程访问请置于你的 HTTPS 反向代理之后。
任何兼容 Subsonic 的客户端——DSub、Symfonium、Feishin、play:Sub、substreamer、Navidrome 网页端等。统计数据来自服务器端的 getNowPlaying 接口,客户端无需安装任何东西。
可以。在 设置 → 连接 中逐一添加;播放按来源标记,仪表盘可按服务器筛选。
累计有效收听时长需超过 PLAY_THRESHOLD_SEC(默认 30 秒)。暂停与失联时段不计入;检查点更新同一条记录;未达阈值就结束的会话会单独保存为播放尝试,不计为播放。
任何讲 Subsonic API 的服务器都可以,但项目只针对 Navidrome 开发与测试。服务器支持的 OpenSubsonic 扩展会被自动采用。
Last.fm 把 scrobble 存在别人的云端;Maloja 虽然自托管,但仍依赖客户端主动提交收听记录。Navidrome Stat 完全不需要客户端配合——它直接观测服务器自己的 now-playing 数据流,任何 Subsonic 客户端默认被覆盖,数据也只留在你的磁盘上。
在你自己磁盘上容器 /data 卷中的一个 SQLite 文件里。你可以在设置页将其导出为 JSON、导入到别处,或删除某个用户的收听历史。
一个轻量容器、一个 SQLite 文件、10 秒一次的轮询——树莓派也能轻松跑。