Ir al contenido

Autoalojado · Código abierto · MIT

Cada reproducción cuenta.

Navidrome Stat sondea la API getNowPlaying de tus servidores Navidrome y convierte tus escuchas en un panel autoalojado: tiempo de escucha, tendencias, rankings y un resumen anual. Tus datos nunca salen de tu máquina.

Escuchando ahora

Blue in Green

Miles Davis — Kind of Blue

1:05 5:37
Feishin · home-nas
Presentado en Product Hunt Licencia MIT Docker Hub — stepaniah/navidrome-statistic 18 paletas · 7 idiomas · cualquier cliente Subsonic

Todo lo que sabe tu historial de escucha

Los clientes de Navidrome no comparten estadísticas entre sí. Navidrome Stat observa el servidor en su lugar: un solo historial, todos los clientes.

Reproduciendo, en directo
  • B

    So What

    DSub · 2m ago

  • T

    Take Five

    Symfonium · 14m ago

  • G

    Goodbye Pork Pie Hat

    Feishin · 31m ago

3 clientes · 2 servidores · actualización en directo

Todos los clientes, un solo historial

DSub, Symfonium, Feishin, reproductores web: las reproducciones de cualquier cliente Subsonic llegan al mismo historial. También varios servidores Navidrome.

DSub Symfonium Feishin Navidrome Stat

Gráficos que llegan a fondo

Tendencias por hora y por día, mapa de calor día de la semana × hora, uso por cliente, tasas de transcodificación y rankings que abren páginas de detalle compartibles — con comparaciones por franja horaria y frente al periodo anterior.

Un resumen de tu año

Totales, rachas de escucha y tus mejores artistas, álbumes y canciones: tu propio Wrapped, con tus propios datos. Delimitado por año, servidor, usuario y zona horaria, y compartible por URL.

3,847
reproducciones
412
horas de escucha
21
días de racha

→ Resumen anual

Portadas proxy y en caché

Las portadas pasan por una caché autenticada y con límite de tamaño: tu biblioteca sigue siendo privada.

1 024 portadas en caché · 128 MB

Tus datos, tus reglas

Todo vive en un archivo SQLite que te pertenece. Exportación, importación y borrado por usuario. Autenticación por token opcional. Sin telemetría.

Exportación e importación JSONBorrado por usuarioToken de autenticación opcional

18 paletas, claras y oscuras

Nueve familias — Catppuccin, Nord, Dracula, Tokyo Night, Gruvbox, Solarized y más — cada una con sus variantes clara y oscura.

Siete idiomas

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

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

Elige el tema que quieras

Nueve familias de paletas, cada una en versión clara y oscura, recolorean cada pestaña al instante. Haz clic y mira cómo cambia el panel:

localhost:39421

Tu año en música

Una página, todo tu año: totales, rachas y las canciones que te acompañaron.

0
reproducciones
0
horas de escucha
0
artistas
0
días de racha

Canciones top

Blue in Green

214

Datos de ejemplo: las cifras reales vienen de tu propia biblioteca.

2025 · Biblioteca de ejemplo

Tu año en música

0

reproducciones

412
horas de escucha
486
artistas
21
días de racha

Canciones top

Datos de ejemplo: las cifras reales vienen de tu propia biblioteca.

Cómo funciona

Sin plugins de cliente, sin cuentas, sin nube. Un contenedor pequeño junto a tu servidor de música.

  1. 1

    Sondea getNowPlaying

    Cada 10 segundos (configurable), el colector pregunta a cada servidor Navidrome qué se está reproduciendo, mediante la API Subsonic que ya tienes.

  2. 2

    Sigue sesiones reales

    Pausas e interrupciones quedan excluidas. Una canción cuenta como reproducida cuando la escucha activa supera tu umbral: 30 segundos por defecto.

  3. 3

    Almacena y sirve

    Las reproducciones válidas se guardan en SQLite en tu disco y se muestran en un panel autosuficiente en el puerto 39421.

Cuando un servidor anuncia la extensión OpenSubsonic playbackReport, se usa automáticamente para un seguimiento más preciso de posición y duración. También puedes vigilar una lista de reproducción inteligente de Navidrome para importar tu historial previo a la instalación como reproducciones estimadas.

En marcha con un archivo compose

Copia, pega y abre el puerto 39421. Fija la etiqueta de versión para actualizaciones reproducibles.

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:

Con STATS_API_TOKEN definido, introdúcelo una vez en la pantalla de inicio de sesión: el navegador guarda una cookie de sesión HttpOnly, nunca el token.

Referencia completa de configuración

Privado por defecto

  • Los datos se quedan en local

    El historial de escucha vive en un archivo SQLite dentro de tu propio volumen.

  • Exporta o borra cuando quieras

    Exportación JSON, importación y borrado por usuario, integrados en la página de ajustes.

  • Autenticación opcional

    Define STATS_API_TOKEN y el panel y las API exigirán inicio de sesión; las sesiones usan una cookie HttpOnly.

  • Sin telemetría

    El contenedor solo habla con un tercero: tus servidores Navidrome.

Límites honestos

  • Una instancia por conjunto de fuentes

    Varias instancias sondeando los mismos servidores contarían las reproducciones por duplicado.

  • Datos de escucha sin cifrar

    El historial de escucha se guarda sin cifrar en SQLite. Las credenciales guardadas desde ajustes se cifran en reposo con un archivo de clave local: protege las copias de una mirada casual, no un equipo comprometido.

  • Sin TLS integrado

    Para acceso remoto, colócalo detrás de tu proxy inverso HTTPS.

Preguntas, respondidas

¿Qué clientes de música admite?

Cualquier cliente compatible con Subsonic: DSub, Symfonium, Feishin, play:Sub, substreamer, la interfaz web de Navidrome y más. Las estadísticas vienen del endpoint getNowPlaying del servidor, así que no hay que instalar nada en el cliente.

¿Puedo seguir varios servidores Navidrome?

Sí. Añade cada servidor en Ajustes → Conexiones; las reproducciones se etiquetan por origen y el panel puede filtrar por servidor o usuario.

Ya tengo meses de historial de escucha. ¿Puedo importarlo?

Sí. Apunta una conexión guardada a una lista de reproducción inteligente de Navidrome (un .nsp como «Reproducidos recientemente») y Navidrome Stat importará una reproducción estimada por canción a partir de su marca de tiempo de última reproducción. Las ejecuciones repetidas nunca duplican, se omiten las reproducciones ya cubiertas por el sondeo en vivo y solo se importa lo escuchado antes de la instalación.

¿Puedo compartir lo que veo?

Sí. Los filtros del panel, las páginas de detalle de artista y álbum y el alcance del resumen anual se conservan en la URL: al recargar mantienes tu vista y un enlace copiado abre la misma. Los nombres de las páginas de detalle de cliente se envían en peticiones POST y nunca aparecen en URL compartibles.

¿Cómo se cuenta exactamente una reproducción?

El tiempo de escucha activa acumulado debe superar PLAY_THRESHOLD_SEC (30 segundos por defecto). Las pausas e intervalos perdidos se excluyen, los puntos de control actualizan el mismo registro y las sesiones que terminan por debajo del umbral se guardan como intentos, no como reproducciones.

¿Cómo se cuentan los artistas en colaboración?

En Ajustes → Preferencias puedes elegir créditos de artista combinados o separados. El modo separado acredita a cada artista una vez por reproducción en rankings y detalles, mientras que el número de canciones, las reproducciones totales y el tiempo de escucha no cambian.

¿Funciona con Jellyfin o Airsonic?

Funciona con cualquier servidor que hable la API Subsonic, pero se desarrolla y prueba contra Navidrome. Las extensiones OpenSubsonic se usan cuando el servidor las ofrece.

¿En qué se diferencia de Last.fm o Maloja?

Last.fm registra los scrobbles en la nube de otro; Maloja es autoalojado pero sigue dependiendo de que los clientes envíen los scrobbles. Navidrome Stat no necesita nada del cliente: observa el propio flujo now-playing del servidor, así que cubre cualquier cliente Subsonic por defecto, y los datos se quedan en tu disco.

¿Dónde viven mis datos?

En un único archivo SQLite en tu disco, dentro del volumen /data del contenedor. Puedes exportarlo a JSON, importarlo en otro sitio o borrar el historial de un usuario, todo desde la página de ajustes.

¿Cuántos recursos consume?

Un contenedor pequeño, un archivo SQLite y un sondeo cada 10 segundos. Una Raspberry Pi lo lleva sin problemas.