---
title: Lightweight Music Server
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, music-streaming, subsonic, c++, gpl]
confidence: high
contested: false
sources:
  - 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](https://lms-demo.poupon.dev/) |
| **GitHub** | [https://github.com/epoupon/lms](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é)

```yaml
# 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)

```bash
# 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

- [Dépôt GitHub officiel](https://github.com/epoupon/lms)
- [Démo en ligne](https://lms-demo.poupon.dev/)
- [Wiki LMS](https://github.com/epoupon/lms/wiki) — tags, scanner, transcodage
- [Page selfh.st/apps](https://selfh.st/apps/?tag=Music+Streaming)
- Subsonic API : [subsonic.org/pages/api.jsp](http://www.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
