- 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
Auto-hébergé · Open source · MIT
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.
Blue in Green
Miles Davis — Kind of Blue
Les clients Navidrome ne partagent pas leurs statistiques entre eux. Navidrome Stat observe le serveur à la place — un seul historique, tous les clients.
So What
DSub · 2m ago
Take Five
Symfonium · 14m ago
Goodbye Pork Pie Hat
Feishin · 31m ago
3 clients · 2 serveurs · mise à jour en direct
DSub, Symfonium, Feishin, lecteurs web — les écoutes de n’importe quel client Subsonic arrivent dans le même historique. Plusieurs serveurs Navidrome aussi.
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.
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.
Les pochettes passent par un cache authentifié à taille limitée — votre bibliothèque reste privée.
1 024 pochettes en cache · 128 Mo
Tout tient dans un fichier SQLite qui vous appartient. Export, import et suppression par utilisateur. Authentification par token optionnelle. Aucune télémétrie.
Neuf familles — Catppuccin, Nord, Dracula, Tokyo Night, Gruvbox, Solarized et plus — chacune avec ses variantes claire et sombre.
English, 简体中文, 繁體中文, 日本語, Deutsch, Français, Español.
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 :
Une page, toute votre année : totaux, séries, et les chansons qui vous ont accompagné.
Titres du top
Blue in Green
Données d’exemple — les vrais chiffres viennent de votre propre bibliothèque.
Pas de plugin client, pas de compte, pas de cloud. Un petit conteneur à côté de votre serveur de musique.
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à.
Pauses et coupures sont exclues. Un titre compte comme joué une fois le seuil d’écoute active franchi — 30 secondes par défaut.
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.
Copiez, collez, ouvrez le port 39421. Fixez le tag de version pour des mises à jour reproductibles.
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: 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.9.2 NAVIDROME_URL=https://navidrome.example.com
NAVIDROME_USER=example_user
NAVIDROME_PASS=change-me
STATS_API_TOKEN=use-a-long-random-value 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 configurationL’historique d’écoute vit dans un fichier SQLite dans votre propre volume.
Export JSON, import et suppression par utilisateur sont intégrés à la page de paramètres.
Définissez STATS_API_TOKEN et le tableau de bord comme les API exigent une connexion — les sessions utilisent un cookie HttpOnly.
Le conteneur ne parle qu’à un seul tiers : vos serveurs Navidrome.
Plusieurs instances interrogeant les mêmes serveurs compteraient les écoutes en double.
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.
Pour un accès distant, placez-le derrière votre reverse proxy HTTPS.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Un petit conteneur, un fichier SQLite, une boucle d’interrogation de 10 secondes. Un Raspberry Pi le fait tourner confortablement.