Files
wiki/Catalogue-Self-Hosted/apps/app-metadata-remote.md
T
2026-06-09 18:40:21 +02:00

120 lines
7.1 KiB
Markdown

---
title: Metadata Remote
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, metadata, tag-editor, python, musicbrainz, headless]
confidence: medium
contested: false
sources:
- https://selfh.st/apps/?tag=music
- https://github.com/wow-signal-dev/metadata-remote
---
# 🏷️ Metadata Remote
> Éditeur de **métadonnées audio web** ultra-léger, conçu pour serveurs headless : « Docker + navigateur + zéro setup ». Édite les tags ID3/Vorbis/FLAC en place, avec suggestions MusicBrainz et opérations en masse.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://github.com/wow-signal-dev/metadata-remote |
| **GitHub** | https://github.com/wow-signal-dev/metadata-remote |
| **License** | AGPL-3.0 |
| **Langage** | Python (Flask) + Mutagen |
| **Étoiles** | 18 ⭐ |
| **Dernière MAJ** | 2025 (v1.2.0) |
| **Catégorie** | [[cat-music]] |
## Description
Metadata Remote (mdrm) résout une frustration spécifique : **comment éditer les tags ID3 d'un fichier audio sur un serveur headless** ? Avant lui, les options étaient : passer par `id3v2`/`vorbiscomment` en CLI via SSH (verbeux, pas user-friendly), rapatrier le fichier en local pour l'éditer avec **Mp3tag** ou **MusicBrainz Picard** (lent, casse le workflow), ou monter une usine à gaz type **beets** avec base SQLite, pipeline d'import, configuration verbeuse.
mdrm fait *juste une chose* et le fait bien : un conteneur Docker, un port `:8338`, une UI web qui liste récursivement votre dossier musique, et vous éditez les tags champ par champ (titre, artiste, album, n° de piste, année, genre, commentaire, paroles…) avec **support de tous les formats courants** : MP3, FLAC, OGG, OPUS, M4A, M4B, WMA, WAV, WavPack. Le tout sans base de données, sans import — **les fichiers sont édités en place** (mutagen écrit dans le fichier lui-même).
Fonctionnalités clés : **suggestions intelligentes** qui analysent le nom de fichier, la structure de dossiers, les fichiers voisins, ET interrogent **MusicBrainz** pour proposer des complétions avec score de confiance ; **opérations en masse** (appliquer un même changement à tout un dossier/album) ; **historique undo/redo jusqu'à 1000 opérations** ; **playback in-browser** (streaming HTTP depuis le conteneur pour vérifier le résultat) ; **gestion de cover art** (upload, preview, suppression, application en masse) ; **renommage de fichiers/dossiers** sans quitter l'UI ; **édition de paroles long-form** avec éditeur auto-apparaissant au-delà de 100 caractères. Image Docker compacte (~82 Mo) grâce à Mutagen optimisé.
Différenciation : **Mp3tag** est excellent mais desktop Windows uniquement. **MusicBrainz Picard** est lourd (install complète, dépendances GUI), pas idéal en headless. **beets** est puissant mais demande un investissement initial important (base, import, config, courbe d'apprentissage raide). mdrm cible le **sweet spot** « j'ai juste besoin de corriger 200 tags sans me prendre la tête ».
## Installation
### Docker Compose (recommandé)
```yaml
# docker-compose.yml
services:
metadata-remote:
image: ghcr.io/wow-signal-dev/metadata-remote:latest
container_name: metadata-remote
restart: unless-stopped
ports:
- "8338:8338"
environment:
- TZ=Europe/Paris
- MUSIC_DIR=/music
- ALLOW_RENAME=true # autoriser renommage fichiers/dossiers
- ALLOW_DELETE=true # autoriser suppression fields
volumes:
- /data/music/library:/music # dossier musique partagé avec navidrome/jellyfin
# supports x86_64, ARM64, ARMv7
```
### Installation manuelle
```bash
git clone https://github.com/wow-signal-dev/metadata-remote
cd metadata-remote
pip install -r requirements.txt
# éditer config : MUSIC_DIR, port
python app.py
# UI sur :8338
```
## Configuration
- **Dossier musique** : un seul volume monté, l'app scanne récursivement. Adapter le `MUSIC_DIR` env.
- **Formats** : MP3, FLAC, OGG, OPUS, M4A, M4B, WMA, WAV, WavPack (auto-détection).
- **Suggestions MusicBrainz** : appels à l'API publique musicbrainz.org (rate-limited, 1 req/s par IP). Désactivable si besoin via env.
- **Inférence locale** : analyse de patterns de nom de fichier (`01 - Artist - Title.mp3` → split auto). Stratégies spécialisées pour classique, compiles, live.
- **Undo/Redo** : limité à 1000 ops, persisté en mémoire du process (redémarrer le conteneur vide l'historique).
- **Cover art** : upload direct, ré-encodage JPEG auto, réparation auto des images corrompues.
- **Lecture in-browser** : stream HTTP depuis le conteneur, pas de transcodage (le navigateur décode nativement).
## Alternatives
### Open Source
- **beets** — la référence « tagger + organisateur » en CLI, plus puissant mais courbe d'apprentissage raide et base de données obligatoire.
- **MusicBrainz Picard** — cross-platform, excellent pour les albums entiers via empreinte acoustique (PUID), mais GUI desktop lourd, pas headless-friendly.
- **Mp3tag** — Windows only, gratuit, excellent pour les opérations manuelles.
- **EasyTAG** — GTK, plus ancien, moins maintenu.
- **Kid3** — KDE, multi-format, peut être headless via CLI.
- **Quod Libet** — player + éditeur, Python/GTK.
### Propriétaires (ce que Metadata Remote remplace)
- **Mp3tag** (Windows store) — gratuit mais fermé (version beta donation-ware).
- **Yate** (Mac) — tagger audio, fermé.
- **TagScanner** (Windows) — fermé.
- **TuneFab / TuneMobie** — boîtes à outils iTunes/Apple Music, fermées, **et opaques sur les DRM**.
## Sécurité
- **Pas d'auth par défaut** : le conteneur expose `:8338` sans login. **Ne pas exposer sur Internet** sans reverse-proxy authentifié ([[app-traefik]] + basic auth ou [[app-authentik]]).
- **Volume monté** : si l'app est compromise, l'attaquant a **accès en lecture/écriture à toute la bibliothèque musicale** (incluant la capacité de renommer/supprimer). Monter en **read-only** par défaut, basculer en RW uniquement le temps d'une session d'édition.
- **ALLOW_RENAME / ALLOW_DELETE** : à `false` en prod pour éviter les renommages destructifs, `true` uniquement pour les sessions d'édition actives.
- **AGPL-3.0** : obligation de publier les modifications si l'UI est servie en réseau (cas d'un hébergement mutualisé).
- **API MusicBrainz** : pas de credential, mais l'IP de l'instance mdrm apparaît dans les logs MusicBrainz. Pas critique.
- **Historique undo** : sensible car contient l'état avant/après des modifications — en mémoire seulement, pas de fuite disque.
## Ressources
- Repository : https://github.com/wow-signal-dev/metadata-remote
- Mutagen (lib Python) : https://mutagen.readthedocs.io/
- MusicBrainz : https://musicbrainz.org/
- Beets (alternative) : https://beets.io/
## Pages Liées
- [[cat-music]] — catégorie parente
- [[app-funkwhale]] — serveur cible naturel (mdrm range dans le même dossier)
- [[app-jellyfin]] — alternative serveur
- [[app-lidarr]] — peut re-tagger via metadata profile (alternative)
- [[app-traefik]] — reverse proxy + auth
- [[app-authentik]] — SSO
- [[recettes-docker-compose]] — templates
- [[securisation-home-lab]] — bonnes pratiques