跳至主要內容

自託管 · 開源 · MIT

每一次播放,都算數。

Navidrome Stat 輪詢 Navidrome 伺服器的 getNowPlaying 介面,把所有 Subsonic 用戶端的播放匯聚成一塊自託管儀表板——收聽時數、趨勢、排行榜和年度回顧。資料從不離開你的機器。

正在收聽

Blue in Green

Miles Davis — Kind of Blue

1:05 5:37
Feishin · home-nas
Product Hunt 首发 MIT 授權 Docker Hub — stepaniah/navidrome-statistic 10 組主題 · 5 種語言 · 任意 Subsonic 用戶端

你的收聽歷史,值得被完整呈現

Navidrome 的各個用戶端彼此不共享統計。Navidrome Stat 改為在伺服器端觀測——所有用戶端,同一條歷史。

即時正在播放
  • B

    So What

    DSub · 2m ago

  • T

    Take Five

    Symfonium · 14m ago

  • G

    Goodbye Pork Pie Hat

    Feishin · 31m ago

所有用戶端,同一條歷史

DSub、Symfonium、Feishin、網頁播放器——任何 Subsonic 用戶端的播放都匯入同一條歷史,多台 Navidrome 伺服器也不例外。

DSub Symfonium Feishin Navidrome Stat

足夠深的圖表

按小時與按天的趨勢、星期×小時熱力圖、用戶端佔比、轉碼率,以及藝術家、專輯、曲目排行榜。

年度回顧

年度總量、連續收聽天數,以及你的年度藝術家、專輯與曲目——屬於你自己的 Wrapped,基於你自己的資料。

3,847 412 h 21 d → 年度回顧

封面代理與快取

專輯封面經過帶驗證的、容量受限的快取——你的音樂庫保持私密。

資料由你做主

一切都在一個屬於你的 SQLite 檔案裡。按使用者匯出、匯入與刪除,可選 token 驗證,零遙測。

JSON 匯出與匯入按使用者刪除可選 token 驗證

十組主題

Catppuccin、Nord、Dracula、Tokyo Night、Gruvbox、Solarized——即時切換。

五種語言

简体中文、繁體中文、English、日本語、Deutsch——更多語言已在路線圖上。

English简体中文繁體中文日本語Deutsch

主題隨你挑

十組內建主題,整個儀表板即時換色。點一個試試:

localhost:39421

你的年度音樂報告

一頁看盡一整年:總量、連續天數,和陪你走過這一年的歌。

0
次播放
0
小時收聽
0
位藝術家
0
天連續收聽

年度曲目

Blue in Green

214

範例資料——真實數字來自你自己的音樂庫。

2025 · 範例音樂庫

你的年度音樂報告

0

次播放

412
小時收聽
486
位藝術家
21
天連續收聽

年度曲目

範例資料——真實數字來自你自己的音樂庫。

工作原理

無需用戶端外掛、無需註冊、不上雲。一個輕量容器,守在你的音樂伺服器旁邊。

  1. 1

    輪詢 getNowPlaying

    每 10 秒(可設定)透過 Subsonic API 向每台 Navidrome 伺服器詢問正在播放的內容——介面本來就在。

  2. 2

    追蹤真實工作階段

    暫停與中斷不計入。累計有效收聽超過門檻(預設 30 秒)才算一次播放。

  3. 3

    儲存並呈現

    有效播放寫入你磁碟上的 SQLite,在 39421 連接埠的自包含儀表板中呈現。

當伺服器支援 OpenSubsonic playbackReport 擴充時會自動採用,讓進度與時長統計更精確。

一個 compose 檔即可啟動

複製、貼上,開啟 39421 連接埠。建議鎖定版本號,確保更新可重現。

compose.yaml
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:

設定 STATS_API_TOKEN 後,首次存取在登入頁輸入一次即可——瀏覽器只保存 HttpOnly 會話 Cookie,而非 token 本身。

完整設定參考

預設私密

  • 資料留在本機

    收聽歷史只存在於你自己資料卷裡的一個 SQLite 檔案。

  • 隨時匯出或刪除

    設定頁內建按使用者的 JSON 匯出、匯入與刪除。

  • 可選驗證

    設定 STATS_API_TOKEN 後儀表板與 API 均需登入——工作階段使用 HttpOnly Cookie。

  • 零遙測

    容器唯一的外呼對象就是你的 Navidrome 伺服器。

誠實的局限

  • 一組資料源只跑一個執行個體

    多個實例輪詢同一批伺服器會導致播放被重複計數。

  • SQLite 明文儲存

    資料庫與設定頁保存的憑證均為明文——請像對待機密一樣保護資料卷。

  • 不內建 TLS

    遠端存取請置於你的 HTTPS 反向代理之後。

常見問題

支援哪些播放用戶端?

任何相容 Subsonic 的用戶端——DSub、Symfonium、Feishin、play:Sub、substreamer、Navidrome 網頁端等。統計資料來自伺服器端的 getNowPlaying 介面,用戶端無需安裝任何東西。

可以追蹤多台 Navidrome 伺服器嗎?

可以。在 設定 → 連線 中逐一新增;播放按來源標記,儀表板可按伺服器篩選。

一次播放是如何判定的?

累計有效收聽時長需超過 PLAY_THRESHOLD_SEC(預設 30 秒)。暫停與失聯時段不計入;檢查點更新同一條記錄;未達門檻就結束的工作階段會單獨保存為播放嘗試,不計為播放。

支援 Jellyfin 或 Airsonic 嗎?

任何講 Subsonic API 的伺服器都可以,但專案只針對 Navidrome 開發與測試。伺服器支援的 OpenSubsonic 擴充會被自動採用。

和 Last.fm 或 Maloja 有什麼不同?

Last.fm 把 scrobble 存在別人的雲端;Maloja 雖然自託管,但仍依賴用戶端主動提交收聽記錄。Navidrome Stat 完全不需要用戶端配合——它直接觀測伺服器自己的 now-playing 資料流,任何 Subsonic 用戶端預設被涵蓋,資料也只留在你的磁碟上。

我的資料存在哪裡?

在你自己磁碟上容器 /data 卷中的一個 SQLite 檔案裡。你可以在設定頁將其匯出為 JSON、匯入到別處,或刪除某個使用者的收聽歷史。

它佔用資源多嗎?

一個輕量容器、一個 SQLite 檔案、10 秒一次的輪詢——樹莓派也能輕鬆跑。