Files
wiki/Catalogue-Self-Hosted/apps/app-lightweight-music-server.md
2026-06-09 18:40:21 +02:00

6.3 KiB

title, created, updated, type, tags, confidence, contested, sources
title created updated type tags confidence contested sources
Lightweight Music Server 2026-06-07 2026-06-07 app
catalogue
music
music-streaming
subsonic
c++
gpl
high false
https://selfh.st/apps/?tag=Music+Streaming
https://github.com/epoupon/lms
https://lms-demo.poupon.dev/

🎵 Lightweight Music Server (LMS)

Serveur de streaming musical Subsonic-compatible écrit en C++ moderne, conçu pour les grosses bibliothèques FLAC avec scan rapide et API OpenSubsonic complète.

Métadonnée Valeur
Site web https://lms-demo.poupon.dev
GitHub https://github.com/epoupon/lms
License GPL-3.0
Langage C++ (98.6 %)
Étoiles ≈1 600 (80 sur selfh.st/apps)
Dernière MAJ 2026-06-06 (v3.77.0)
Catégorie cat-music

Description

Lightweight Music Server (LMS) est un serveur de streaming audio personnel écrit en C++ moderne, développé par epoupon. L'objectif affiché est de fournir une alternative Subsonic nativement compilée, légère en ressources et capable de gérer des bibliothèques de plusieurs centaines de milliers de pistes sans ployer : un Raspberry Pi 4 scanne environ 1 000 pistes/h (3 threads), un Core i5-13500 monte à 25 000 pistes/h (10 threads). LMS se distingue des autres serveurs Subsonic (Navidrome, Airsonic, Gonic) par sa gestion fine des tags multi-valués et son moteur de recommandation interne.

Le serveur implémente l'API Subsonic / OpenSubsonic complète, ce qui le rend compatible avec l'écosystème de clients existants : DSub, Substreamer, play:Sub, Sublime Music, Symfonium, Submariner, Ultrasonic, Feishin, Aonsoku. LMS propose en plus plusieurs extensions OpenSubsonic : paroles synchronisées embarquées/externes, jaquettes, étoiles sur 5 niveaux, jukebox, et « love » (feedback) bidirectionnel avec ListenBrainz.

Fonctionnalités clés : tags multi-valués (artists, mood, genre), relations d'artistes (compositeurs, chefs d'orchestre, mixeurs, producteurs, remixeurs), types de release (album, single, EP, compilation, live), support des groupes de release (remasters, rééditions), IDs MusicBrainz pour fusionner les versions dupliquées, support ReplayGain, transcodage à la volée pour la bande passante, playlists m3u/m3u8, podcasts, et radio en queue continue. Le moteur de recommandation combine une approche tag-based (genre + grouping) et une approche MusicNN (embeddings audio) pour proposer artistes et albums similaires.

Installation

Docker (recommandé)

# docker-compose.yml
services:
  lms:
    image: ghcr.io/epoupon/lms:latest
    container_name: lms
    ports:
      - "5082:5082"
    volumes:
      - ./lms-data:/var/lms:rw
      - /chemin/vers/musique:/music:ro
    restart: unless-stopped
    environment:
      - LMS_LOG_LEVEL=info

Démarrage : docker compose up -d, puis http://localhost:5082.

Installation manuelle (Debian/Ubuntu)

# Dépendances
sudo apt install -y ffmpeg libavformat-dev libavcodec-dev libavutil-dev \
  libpcre3 libpcre3-dev libstdc++6 libtag1-dev

# Build depuis les sources
git clone https://github.com/epoupon/lms.git
cd lms
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
sudo install -m 755 build/lms /usr/local/bin/lms
lms --config /etc/lms.conf

Configuration

Le fichier lms.conf accepte les directives principales :

  • music-dir : un ou plusieurs chemins vers les dossiers musicaux
  • listen-port (défaut 5082), listen-address (défaut 0.0.0.0)
  • scanner-thread-count : nombre de threads d'indexation (auto = moitié des CPU logiques)
  • transcoding : activez le transcodage à la volée pour les clients limités
  • replaygain : mode track / album / none
  • recommender-mode : tags (léger), audiocnn (embeddings MusicNN, gourmand)

Exclure des fichiers du scan : créez un fichier .lmsignore à la racine d'une bibliothèque (syntaxe type .gitignore, support de *, **, !, [abc]). L'authentification supporte les backends LDAP, PAM ou fichier local ; les utilisateurs ont droit à des permissions fines (lecteur, jukebox, admin). Activez ListenBrainz dans lms.conf pour le scrobble sortant et la synchronisation des « love ».

Alternatives

Open Source : app-navidrome (Go, le plus populaire), app-ampache (PHP/Subsonic), app-funkwhale (Python/ActivityPub), app-gonic (Go/Subsonic), app-airsonic-advanced (Java), app-aurral (Rust), app-koel (PHP/Vue), app-jellyfin (C#, gère aussi la musique), app-meelo (TypeScript, orienté collection).

Propriétaire (que cette app remplace) : Plex Pass Audio, Roon Server (≈700 € à vie), iTunes Match, Google Play Musique (disparu), Spotify (cloud). LMS vise explicitement les utilisateurs de Roon ou Plex qui veulent un moteur Subsonic ouvert et un transcodage propre pour de la FLAC 24 bits.

Sécurité

  • Exécutez LMS derrière un reverse proxy (Traefik, NPM, Caddy) avec TLS obligatoire.
  • Activez l'auth Subsonic par utilisateur + mot de passe (jamais guest activé en exposition publique).
  • Si l'instance est ouverte sur Internet : activez un WAF (Crowdsec), forcez des mots de passe forts, et idéalement, branchez un VPN (Tailscale/Wireguard) pour l'écoute mobile.
  • Les chemins musicaux doivent être montés en lecture seule dans le conteneur (/music:ro).
  • Mettez à jour régulièrement l'image GHCR pour bénéficier des correctifs de la libavformat/FFmpeg.
  • Sauvegardez ./lms-data (base SQLite interne + caches), pas la bibliothèque audio elle-même (sauvegardée séparément).

Ressources

Pages Liées