本文へスキップ

セルフホスト · オープンソース · MIT

すべての再生を、逃さず記録。

Navidrome Stat は Navidrome サーバーの getNowPlaying API をポーリングし、すべての Subsonic クライアントの再生を 1 つのセルフホスト ダッシュボードにまとめます。リスニング時間、トレンド、ランキング、年間まとめ。データがマシンの外に出ることはありません。

再生中

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 はサーバー側で観測します——すべてのクライアント、1 つの履歴。

リアルタイム再生状況
  • B

    So What

    DSub · 2m ago

  • T

    Take Five

    Symfonium · 14m ago

  • G

    Goodbye Pork Pie Hat

    Feishin · 31m ago

3 クライアント · 2 サーバー · ライブ更新

どのクライアントでも、1 つの履歴

DSub、Symfonium、Feishin、Web プレーヤー——Subsonic 対応クライアントからの再生はすべて同じ履歴に記録されます。複数の Navidrome サーバーも同様。

DSub Symfonium Feishin Navidrome Stat

深くまで掘り下げるチャート

時間別・日別トレンド、曜日×時間帯ヒートマップ、クライアント別内訳、トランスコード率、アーティスト・アルバム・曲のランキング。

年間まとめ

年間合計、連続リスニング日数、あなたのベストアーティスト・アルバム・曲——自分のデータによる、自分だけの Wrapped。

3,847
回の再生
412
時間リスニング
21
日連続リスニング

→ 年間まとめ

カバーアートのプロキシとキャッシュ

アルバムアートは認証付き・容量制限付きのキャッシュを経由します——ライブラリは非公開のまま。

1,024 枚のカバーをキャッシュ · 128 MB

データはあなたのもの

すべてはあなたが所有する 1 つの SQLite ファイルに。ユーザーごとのエクスポート、インポート、削除。任意のトークン認証。テレメトリーなし。

JSON エクスポート/インポートユーザー単位の削除任意のトークン認証

10 のテーマ

Catppuccin、Nord、Dracula、Tokyo Night、Gruvbox、Solarized——ワンクリックで切替。

5 つの言語

简体中文、繁體中文、English、日本語、Deutsch——さらに追加予定。

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

テーマは好きなものを

10 の内蔵テーマでダッシュボード全体が即座に切り替わります。クリックして試してみてください:

localhost:39421

あなたの1年の音楽

1 ページに 1 年分:合計、連続日数、そして一年を伴った曲たち。

0
回の再生
0
時間リスニング
0
人のアーティスト
0
日連続リスニング

年間トップ曲

Blue in Green

214

サンプルデータ——実際の数字はあなた自身のライブラリから。

2025 · サンプルライブラリ

あなたの1年の音楽

0

回の再生

412
時間リスニング
486
人のアーティスト
21
日連続リスニング

年間トップ曲

サンプルデータ——実際の数字はあなた自身のライブラリから。

仕組み

クライアント插件もアカウント登録もクラウドも不要。小さなコンテナが 1 つ、音楽サーバーのそばで動くだけ。

  1. 1

    getNowPlaying をポーリング

    10 秒ごと(設定可能)に Subsonic API 経由で各 Navidrome サーバーの再生状況を確認——インターフェースはすでにあります。

  2. 2

    実際のセッションを追跡

    一時停止や途切れはカウントされません。有効なリスニング時間がしきい値(既定 30 秒)を超えて初めて 1 回の再生として記録されます。

  3. 3

    保存して表示

    条件を満たした再生はディスク上の SQLite に書き込まれ、ポート 39421 の自己完結ダッシュボードで表示されます。

サーバーが OpenSubsonic の playbackReport 拡張に対応している場合は自動的に使用され、位置と長さの追跡がより正確になります。

compose ファイル 1 つで起動

コピーして貼り付け、ポート 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 を設定した場合、初回アクセス時にログイン画面で 1 度入力するだけ——ブラウザが保持するのは token ではなく HttpOnly セッション Cookie です。

設定の完全なリファレンス

デフォルトでプライベート

  • データはローカルに

    リスニング履歴は自分のボリューム内の 1 つの SQLite ファイルにのみ存在します。

  • いつでもエクスポート/削除

    設定ページにユーザー単位の JSON エクスポート、インポート、削除を内蔵。

  • 任意の認証

    STATS_API_TOKEN を設定するとダッシュボードと API にログインが必要になります——セッションは HttpOnly Cookie を使用。

  • テレメトリーなし

    コンテナが外部と通信する相手は、あなたの Navidrome サーバーだけです。

正直な制限

  • データソース一組につき 1 インスタンス

    同じサーバー群を複数インスタンスでポーリングすると、再生が重複カウントされます。

  • SQLite は平文

    データベースと設定ページに保存された認証情報は暗号化されていません——機密情報と同様にボリュームを保護してください。

  • TLS は内蔵なし

    リモートからアクセスする場合は、HTTPS リバースプロキシの背後に置いてください。

よくある質問

どの音楽クライアントに対応していますか?

Subsonic 互換のクライアントなら何でも——DSub、Symfonium、Feishin、play:Sub、substreamer、Navidrome の Web UI など。統計はサーバーの getNowPlaying エンドポイントから取得するため、クライアント側には何もインストール不要です。

複数の Navidrome サーバーを追跡できますか?

はい。設定 → 接続 で各サーバーを追加します。再生はソースごとに記録され、ダッシュボードでサーバー別に絞り込めます。

再生はどのように判定されますか?

有効なリスニング時間の累計が PLAY_THRESHOLD_SEC(既定 30 秒)を超える必要があります。一時停止と欠落区間は除外され、チェックポイントは同じレコードを更新します。しきい値に達しないまま終わったセッションは再生ではなく試行として保存されます。

Jellyfin や Airsonic でも使えますか?

Subsonic API を話すサーバーなら動作しますが、開発とテストは Navidrome 基準で行っています。サーバーが対応していれば OpenSubsonic 拡張も自動的に使用します。

Last.fm や Maloja とは何が違いますか?

Last.fm は scrobble を他人のクラウドに記録します。Maloja はセルフホストですが、クライアントが scrobble を送信する前提です。Navidrome Stat はクライアントの協力を一切必要とせず、サーバー自身の now-playing フィードを観測するため、すべての Subsonic クライアントが既定で対象になり、データも自分のディスクに留まります。

データはどこに保存されますか?

自分のディスク上、コンテナの /data ボリューム内の 1 つの SQLite ファイルです。設定ページから JSON としてエクスポート、別の場所へのインポート、ユーザーごとの履歴削除ができます。

リソース消費はどのくらい?

小さなコンテナ 1 つ、SQLite ファイル 1 つ、10 秒間隔のポーリング。Raspberry Pi でも快適に動きます。