Aller au contenu

Auto-hébergé · Open source · MIT

Chaque écoute, comptée.

Navidrome Stat interroge l’API getNowPlaying de vos serveurs Navidrome et transforme vos écoutes en un tableau de bord auto-hébergé — temps d’écoute, tendances, classements et rétrospective annuelle. Vos données ne quittent jamais votre machine.

En écoute

Blue in Green

Miles Davis — Kind of Blue

1:05 5:37
Feishin · home-nas
Présenté sur Product Hunt Licence MIT Docker Hub — stepaniah/navidrome-statistic 18 palettes · 7 langues · tout client Subsonic

Tout ce que votre historique d’écoute sait

Les clients Navidrome ne partagent pas leurs statistiques entre eux. Navidrome Stat observe le serveur à la place — un seul historique, tous les clients.

En écoute, en direct
  • B

    So What

    DSub · 2m ago

  • T

    Take Five

    Symfonium · 14m ago

  • G

    Goodbye Pork Pie Hat

    Feishin · 31m ago

3 clients · 2 serveurs · mise à jour en direct

Tous les clients, un seul historique

DSub, Symfonium, Feishin, lecteurs web — les écoutes de n’importe quel client Subsonic arrivent dans le même historique. Plusieurs serveurs Navidrome aussi.

DSub Symfonium Feishin Navidrome Stat

Des graphiques qui vont loin

Tendances horaires et quotidiennes, carte de chaleur jour×heure, usage par client, taux de transcodage, et classements qui s’ouvrent sur des pages de détail partageables — avec comparaisons par moment de la journée et par période.

Une rétrospective annuelle

Totaux, séries d’écoute, et vos meilleurs artistes, albums et titres — votre propre Wrapped, sur vos propres données. Portée par année, serveur, utilisateur et fuseau horaire, et partageable par URL.

3,847
écoutes
412
heures d’écoute
21
jours de série

→ Rétrospective

Pochettes relayées et mises en cache

Les pochettes passent par un cache authentifié à taille limitée — votre bibliothèque reste privée.

1 024 pochettes en cache · 128 Mo

Vos données, vos règles

Tout tient dans un fichier SQLite qui vous appartient. Export, import et suppression par utilisateur. Authentification par token optionnelle. Aucune télémétrie.

Export & import JSONSuppression par utilisateurAuth token optionnelle

18 palettes, claires & sombres

Neuf familles — Catppuccin, Nord, Dracula, Tokyo Night, Gruvbox, Solarized et plus — chacune avec ses variantes claire et sombre.

Sept langues

English, 简体中文, 繁體中文, 日本語, Deutsch, Français, Español.

English简体中文繁體中文日本語DeutschFrançaisEspañol

Choisissez votre thème

Neuf familles de palettes, chacune déclinée en clair et en sombre, recolorent chaque onglet instantanément. Cliquez pour voir le tableau de bord se relooker :

localhost:39421

Votre année en musique

Une page, toute votre année : totaux, séries, et les chansons qui vous ont accompagné.

0
écoutes
0
heures d’écoute
0
artistes
0
jours de série

Titres du top

Blue in Green

214

Données d’exemple — les vrais chiffres viennent de votre propre bibliothèque.

2025 · Bibliothèque d’exemple

Votre année en musique

0

écoutes

412
heures d’écoute
486
artistes
21
jours de série

Titres du top

Données d’exemple — les vrais chiffres viennent de votre propre bibliothèque.

Comment ça marche

Pas de plugin client, pas de compte, pas de cloud. Un petit conteneur à côté de votre serveur de musique.

  1. 1

    Interroge getNowPlaying

    Toutes les 10 secondes (configurable), le collecteur demande à chaque serveur Navidrome ce qui est en lecture — via l’API Subsonic que vous utilisez déjà.

  2. 2

    Suit les vraies sessions

    Pauses et coupures sont exclues. Un titre compte comme joué une fois le seuil d’écoute active franchi — 30 secondes par défaut.

  3. 3

    Stocke et sert

    Les écoutes qualifiées atterrissent dans SQLite sur votre disque et s’affichent dans un tableau de bord autonome sur le port 39421.

Quand un serveur annonce l’extension OpenSubsonic playbackReport, elle est utilisée automatiquement pour un suivi plus précis de la position et de la durée. Vous pouvez aussi surveiller une playlist intelligente Navidrome pour importer votre historique d’avant installation en écoutes estimées.

Opérationnel en un fichier compose

Copiez, collez, ouvrez le port 39421. Fixez le tag de version pour des mises à jour reproductibles.

compose.yaml
services:
  navidrome-stat:
    image: stepaniah/navidrome-statistic:v0.9.2
    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:

Avec STATS_API_TOKEN défini, saisissez-le une fois sur l’écran de connexion — le navigateur garde un cookie de session HttpOnly, jamais le token.

Référence complète de configuration

Privé par défaut

  • Les données restent locales

    L’historique d’écoute vit dans un fichier SQLite dans votre propre volume.

  • Export ou suppression à tout moment

    Export JSON, import et suppression par utilisateur sont intégrés à la page de paramètres.

  • Authentification optionnelle

    Définissez STATS_API_TOKEN et le tableau de bord comme les API exigent une connexion — les sessions utilisent un cookie HttpOnly.

  • Aucune télémétrie

    Le conteneur ne parle qu’à un seul tiers : vos serveurs Navidrome.

Limites honnêtes

  • Une instance par ensemble de sources

    Plusieurs instances interrogeant les mêmes serveurs compteraient les écoutes en double.

  • Données d’écoute en clair

    L’historique d’écoute est stocké en clair dans SQLite. Les identifiants enregistrés via les paramètres sont chiffrés au repos avec un fichier de clé local — une protection contre l’inspection fortuite des sauvegardes, pas contre un hôte compromis.

  • Pas de TLS intégré

    Pour un accès distant, placez-le derrière votre reverse proxy HTTPS.

Questions, réponses

Quels clients musicaux sont pris en charge ?

Tout client compatible Subsonic — DSub, Symfonium, Feishin, play:Sub, substreamer, l’interface web Navidrome, etc. Les statistiques viennent du point de terminaison getNowPlaying du serveur : rien à installer côté client.

Puis-je suivre plusieurs serveurs Navidrome ?

Oui. Ajoutez chaque serveur dans Paramètres → Connexions ; les écoutes sont marquées par source et le tableau de bord peut filtrer par serveur ou par utilisateur.

J’ai déjà des mois d’historique d’écoute. Puis-je l’importer ?

Oui. Orientez une connexion enregistrée vers une playlist intelligente Navidrome (un .nsp tel que « Récemment joués ») et Navidrome Stat importera une écoute estimée par titre à partir de son horodatage de dernière lecture. Les relances ne comptent jamais en double, les écoutes déjà couvertes par l’interrogation en direct sont ignorées, et seules les écoutes antérieures à l’installation sont importées.

Puis-je partager ce que je vois ?

Oui. Les filtres du tableau de bord, les pages de détail artiste et album et la portée de la rétrospective annuelle persistent dans l’URL — recharger la page garde votre vue, et un lien copié ouvre la même. Les noms des pages de détail client sont envoyés en POST et n’apparaissent jamais dans les URL partageables.

Comment une écoute est-elle comptée exactement ?

Le temps d’écoute active cumulé doit dépasser PLAY_THRESHOLD_SEC (30 secondes par défaut). Les pauses et intervalles manquants sont exclus, les points de contrôle mettent à jour le même enregistrement, et les sessions terminées sous le seuil sont conservées comme tentatives — pas comme des écoutes.

Comment les artistes en collaboration sont-ils comptés ?

Dans Paramètres → Préférences, choisissez des crédits d’artiste combinés ou séparés. Le mode séparé crédite chaque artiste une fois par écoute dans les classements et les pages de détail, tandis que le nombre de titres, les écoutes totales et le temps d’écoute restent inchangés.

Ça marche avec Jellyfin ou Airsonic ?

Cela fonctionne avec tout serveur parlant l’API Subsonic, mais le développement et les tests se font contre Navidrome. Les extensions OpenSubsonic sont utilisées quand un serveur les propose.

Quelle différence avec Last.fm ou Maloja ?

Last.fm enregistre les scrobbles dans le cloud de quelqu’un d’autre ; Maloja est auto-hébergé mais dépend toujours des clients qui soumettent les scrobbles. Navidrome Stat n’a besoin d’aucun support client — il observe le flux now-playing du serveur lui-même, donc tout client Subsonic est couvert par défaut, et les données restent sur votre disque.

Où sont mes données ?

Dans un unique fichier SQLite sur votre disque, dans le volume /data du conteneur. Vous pouvez l’exporter en JSON, l’importer ailleurs, ou supprimer l’historique d’un utilisateur — tout depuis la page de paramètres.

C’est lourd en ressources ?

Un petit conteneur, un fichier SQLite, une boucle d’interrogation de 10 secondes. Un Raspberry Pi le fait tourner confortablement.