Initial vault setup
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user