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 |
|
high | false |
|
🎵 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 musicauxlisten-port(défaut5082),listen-address(défaut0.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ésreplaygain: modetrack/album/nonerecommender-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
guestactivé 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
- Dépôt GitHub officiel
- Démo en ligne
- Wiki LMS — tags, scanner, transcodage
- Page selfh.st/apps
- Subsonic API : subsonic.org/pages/api.jsp
Pages Liées
- cat-music — Catégorie Music (20 apps)
- recettes-docker-compose — Templates Docker Compose
- app-navidrome — Alternative Subsonic en Go (stars)
- app-meelo — Autre serveur orienté collection
- securisation-home-lab — Reverse proxy + authentification