DuoMusic.

DOUBLEMUSIC · EL SERVIDOR DE DUOMUSIC

Tu biblioteca.
Tu servidor.

DoubleMusic es el servidor de DuoMusic. Indexa una carpeta de tu equipo, lee sus etiquetas y sirve el audio a tus clientes móviles. Cuentas, favoritos y playlists viven en tu servidor.

  • Docker, DEB y RPM
  • x86-64 y ARM64
  • Núcleo en Rust con SQLite
  • Biblioteca local sin Internet

FUNCIONALIDADES

Todo lo que hace por tu música.

La biblioteca local es el centro del servidor. Catálogo, portadas y búsqueda usan tus archivos y funcionan sin acceso a Internet una vez instalado.

01 / BIBLIOTECA

Tu carpeta, indexada.

Lee título, artista, artista del álbum, álbum, año, disco y pista. Si faltan etiquetas usa el nombre del archivo y la estructura Artista/Álbum. Reconoce MP3, FLAC, M4A, AAC, OGG, Opus, WAV, AIFF, WMA, APE, ALAC, M4B y WavPack. Reanaliza cada cinco minutos y reutiliza los metadatos de lo que no cambia.

02 / PORTADAS Y LETRAS

Con tus propios archivos.

Portadas cover, folder o front (jpg o png), o la imagen incrustada en la pista. Letras .ttml, .lrc o .txt junto al audio y con el mismo nombre; LRC y texto se entregan como TTML. Listas .m3u y .m3u8 con rutas relativas.

03 / REPRODUCCIÓN

Original o convertido.

Transmite el archivo original con saltos exactos por rangos de bytes. También convierte en el servidor a AAC (320, 192 o 128 kbps) o a MP3, y reutiliza las copias desde la caché. Para móviles ofrece fMP4 con índice sidx.

04 / CUENTAS

Cada persona, su biblioteca.

Cuentas independientes con sesiones revocables. Favoritos, playlists personales, álbumes guardados y artistas seguidos se guardan por usuario. Al cambiar una contraseña se revocan sus sesiones.

05 / CONNECT

Reproduce aquí, controla allí.

Controla la reproducción de un dispositivo desde otro, con colas sincronizadas. Admite edición remota de la cola, aleatorio, repetición, volumen y silencio cuando el cliente lo anuncia.

06 / CONEXIONES EXTERNAS

Opcionales y desactivadas.

Un módulo implementa la API /module/v1 (catálogo, búsqueda, pistas, audio, imágenes y letras) sin tocar el núcleo. Las configuras tú y las activas con external.enabled. DoubleMusic sigue gestionando cuentas, permisos, favoritos y playlists.

DESCARGAS

Descarga DoubleMusic.

Versión 1.4.1. Imágenes Docker y paquetes nativos para x86-64 y ARM64. Cada versión incluye sumas SHA-256 para verificar lo que descargas.

Verificar con SHA256SUMSTodas las versiones

INSTALACIÓN

Elige cómo instalarlo.

Necesitas una carpeta con tu música y un dominio con HTTPS que apunte al servidor. Para probar en tu red local sirve http://IP_DEL_SERVIDOR:3000 si la app permite HTTP. Los paquetes nativos son para distribuciones con glibc (no Alpine) y systemd.

01

Con Docker (recomendado)

Clona el repositorio y crea la carpeta de música. Edita .env: MUSIC_DIR es la carpeta de tu música y PUBLIC_URL el origen al que se conectan tus apps, por ejemplo https://musica.tudominio.es, sin /api/v1.

git clone https://github.com/mateodd1/DoubleMusic.git
cd DoubleMusic
cp .env.example .env
mkdir -p music

Arranca con la imagen ya compilada:

docker compose -f compose.release.yml pull
docker compose -f compose.release.yml up -d

Crea tu cuenta. La contraseña se escribe en tu terminal y no queda en el historial:

read -r -s -p 'Contraseña: ' MUSIC_PASSWORD; printf '\n'
printf '%s\n' "$MUSIC_PASSWORD" | docker compose -f compose.release.yml exec -T doublemusic node cli.js add admin --admin --password-stdin
unset MUSIC_PASSWORD

¿El servidor no tiene acceso al registro? Carga el archivo descargado y verifica antes su suma:

sha256sum --check SHA256SUMS --ignore-missing
docker load -i doublemusic_*_linux_amd64.docker.tar.gz
DOUBLEMUSIC_IMAGE=doublemusic:1.4.1 docker compose -f compose.release.yml up -d --pull never
02

Debian y Ubuntu

Instala el paquete con apt, que resuelve FFmpeg y las dependencias. En máquinas ARM64 usa arm64 en lugar de amd64.

sha256sum --check SHA256SUMS --ignore-missing
sudo apt install ./doublemusic_*_amd64.deb

El servicio se crea, pero no arranca solo: configúralo y crea una cuenta antes. Edita /etc/doublemusic/doublemusic.env y pon en PUBLIC_URL el origen de tus clientes, sin /api/v1. Tu música va en /srv/doublemusic/music o en la carpeta que indiques en MUSIC_DIR; el servicio no puede leer /home, así que usa /srv o /mnt. Escucha en 127.0.0.1:3000: pon delante un proxy HTTPS o usa HOST=0.0.0.0 si quieres exponerlo en tu red.

read -r -s -p 'Contraseña: ' MUSIC_PASSWORD; printf '\n'
printf '%s\n' "$MUSIC_PASSWORD" | sudo -u doublemusic doublemusic-user add admin --admin --password-stdin
unset MUSIC_PASSWORD
sudo systemctl enable --now doublemusic.service
sudo systemctl status doublemusic.service
03

Fedora y compatibles (RPM)

Instala el paquete con dnf. Necesita FFmpeg (en Fedora, ffmpeg-free); otras distribuciones RPM requieren un proveedor compatible y sus repositorios activos. En ARM64 usa aarch64. Después, configura y arranca el servicio como en Debian y Ubuntu.

sha256sum --check SHA256SUMS --ignore-missing
sudo dnf install ./doublemusic-*.x86_64.rpm
04

Desde el código fuente

Si prefieres compilar tú mismo, usa el docker-compose.yml del repositorio, que construye la imagen en tu máquina:

docker compose up -d --build
05

Conecta tus apps

En la app escribe la misma URL que PUBLIC_URL e inicia sesión con esa cuenta. Tu proxy HTTPS debe reenviar todas las rutas al servicio, también las conexiones WebSocket de Connect.

La música se monta en solo lectura. En Docker, el volumen library-data guarda cuentas, bibliotecas personales, índice y caché; en los paquetes, /var/lib/doublemusic.

CONFIGURACIÓN

Ajusta tu instancia.

Variables del archivo .env (Docker) o de /etc/doublemusic/doublemusic.env (paquetes, donde además existen HOST y DATA_DIR). Los cambios se aplican al reiniciar el servicio.

01

Variables

VariablePor defectoPara qué sirve
SOURCES_FILEvacíoJSON de fuentes. Sin él, solo se carga la biblioteca local.
MUSIC_DIR./musicCarpeta de música del equipo, montada en solo lectura.
PORT3000Puerto que se publica en el equipo.
BIND_ADDRESS0.0.0.0Dirección del equipo donde se publica el puerto.
PUBLIC_URLhttp://localhost:3000Origen público, sin rutas. Genera las URLs de portadas y audio.
SCAN_INTERVAL_SECONDS300Intervalo del escaneo. Con 0 se desactiva el periódico.
CACHE_MAX_MB2048Límite aproximado de la caché de audio convertido.
TRUST_PROXYfalseAcepta el protocolo reenviado por un proxy de confianza al fijar cookies.
SECURE_COOKIESfalseExige HTTPS para la cookie de sesión.
ALLOWED_ORIGINSPUBLIC_URLOrígenes permitidos para controladores web de Connect, separados por comas.
02

Activar o desactivar funciones

En el JSON indicado por SOURCES_FILE eliges si se usa la biblioteca local, las conexiones externas o ambas. Desactivar la biblioteca evita el escaneo; desactivar las externas impide cargar sus credenciales o consultarlas. Tus archivos, cuentas y bibliotecas personales se conservan.

library.enabledexternal.enabledResultado
truefalseBiblioteca local. Es la configuración por defecto.
truetrueBiblioteca local con conexiones externas opcionales.
falsetrueSolo las conexiones externas que hayas configurado.
falsefalseCuentas y API disponibles, con el catálogo vacío.
{
  "version": 1,
  "library": { "enabled": true },
  "external": { "enabled": false }
}

Con Docker, móntalo creando compose.config.yml y aplícalo con docker compose -f compose.release.yml -f compose.config.yml up -d --force-recreate doublemusic. En los paquetes, edita /etc/doublemusic/settings.json. La guía de módulos explica el contrato de las conexiones externas.

services:
  doublemusic:
    environment:
      SOURCES_FILE: /config/settings.json
    volumes:
      - ./settings.json:/config/settings.json:ro
03

Cuentas, actualizaciones y copias

Las cuentas se gestionan desde la terminal del servidor. add y passwd reciben la contraseña por entrada estándar, como al crearla.

docker compose -f compose.release.yml exec doublemusic node cli.js list
docker compose -f compose.release.yml exec doublemusic node cli.js revoke usuario
docker compose -f compose.release.yml exec -T doublemusic node cli.js passwd usuario --password-stdin
docker compose -f compose.release.yml exec doublemusic node cli.js del usuario
docker compose -f compose.release.yml logs --tail=100 doublemusic
sudo -u doublemusic doublemusic-user list
sudo -u doublemusic doublemusic-user revoke usuario
sudo -u doublemusic doublemusic-user passwd usuario --password-stdin
sudo -u doublemusic doublemusic-user del usuario
sudo -u doublemusic doublemusic-server --healthcheck
sudo journalctl -u doublemusic.service -n 100 --no-pager

Actualizar. Con Docker, cambia la etiqueta de la imagen (DOUBLEMUSIC_IMAGE), descárgala y recrea el servicio con los mismos volúmenes. Con paquetes, instala el nuevo: se conservan la configuración, las cuentas, las sesiones y las bibliotecas personales.

Copias. Para una copia coherente, detén el servicio y copia el volumen library-data (Docker) o /var/lib/doublemusic (paquetes). Tu carpeta de música se respalda aparte. Quitar o purgar el paquete conserva la música y los datos.

ANTES DE INSTALARLO

Preguntas del servidor.

¿Qué música puedo poner?

La tuya o la que tengas permiso para usar. El proyecto no incluye canciones comerciales ni conectores de plataformas. Lee el alcance de uso.

¿Para qué arquitecturas hay descargas?

Para x86-64 y ARM64 (aarch64), tanto en imágenes Docker como en paquetes DEB y RPM.

¿Necesita Internet?

La biblioteca local funciona sin acceso a Internet después de instalarla. Las conexiones externas son opcionales y están desactivadas por defecto.

¿Dónde se guardan mis datos?

Las cuentas, la biblioteca personal, el índice y la caché están en el volumen library-data (Docker) o en /var/lib/doublemusic (paquetes). Tus archivos no se modifican: la carpeta de música se monta en solo lectura.

¿Cómo se conectan las apps?

La app necesita la URL del servidor, la misma que PUBLIC_URL y sin /api/v1. Después inicias sesión con tu cuenta. El servidor implementa el contrato v1 de DuoMusic.

¿Puedo ejecutarlo sin Docker?

Sí: hay paquetes nativos DEB y RPM. También puedes ejecutarlo desde el código fuente con Rust 1.98, Node.js 22.13 o superior y FFmpeg; los pasos están en el README completo.

Documentación técnica

Guía de instalación en Linux, API del cliente, protocolo de Connect, módulos y arquitectura, todo en el repositorio.

Instalación en Linux · API para clientes · Connect · Módulos · Arquitectura · Alcance de uso · README completo