Jellyfin n’a pas de rapport pour les problèmes qui s’accumulent dans une bibliothèque : le même film ajouté deux fois comme deux titres distincts, des films qu’il n’a jamais reconnus, des fichiers disparus, endommagés ou copiés à moitié. Library Doctor les trouve, montre ce que chacun coûte en espace disque et vous permet de les régler sans jamais supprimer un fichier.
Ce qu’il fait
- Doublons : le même film ou le même épisode (même série, même saison et même numéro d’épisode) dans des éléments séparés. Les films sont reconnus par leur identifiant TMDb ou IMDb ; les films sans aucun de ces identifiants sont reconnus par leur titre (sans tenir compte de la casse, des accents et de la ponctuation) et leur année, et ces groupes sont marqués by title and year — check, car deux films différents peuvent partager un titre et une année. Chaque groupe affiche les versions côte à côte — résolution, HDR, codec, débit et taille — la meilleure d’abord, ainsi que l’espace que vous récupéreriez en ne gardant que celle-ci. Deux actions : Group as versions conserve chaque fichier et les affiche comme des versions d’un même titre (le regroupement de versions natif de Jellyfin), et Quarantine écarte une version plus faible.
- Films sans correspondance : des films sans aucun identifiant de métadonnées, ce qui signifie en général un titre, une année ou une affiche erronés, et un film absent des collections et des recommandations. Chacun renvoie vers le film, où Identify de Jellyfin le corrige.
- Fichiers manquants, cassés ou tronqués : une vérification en arrière-plan de chaque fichier de film et d’épisode avec ffprobe et ffmpeg de jellyfin-ffmpeg. Elle signale les fichiers missing from disk, cannot be read (avec l’erreur), no real video track (seulement une image, par exemple un fichier d’octets aléatoires dont ffprobe devine une image), no duration (en-tête cassé), zero duration, ou truncated : les 3 dernières secondes de la vidéo sont décodées, et un fichier dont la fin ne peut pas être décodé est signalé comme un téléchargement ou une copie incomplets.
- Rapport d’espace : le total, puis l’espace par bibliothèque, par résolution (4K, 1080p, 720p, SD) et par codec vidéo, ainsi que les 20 fichiers les plus volumineux qu’aucun utilisateur n’a regardés.
- La quarantaine plutôt que la suppression : voir ci-dessous. Le plugin ne supprime jamais rien.
- En anglais et en roumain.
La quarantaine : rien n’est supprimé
Quand vous cliquez sur Quarantine sur une version (et que vous confirmez), le plugin déplace le fichier vidéo et les fichiers voisins qui partagent son nom — sous-titres, .nfo, images comme Movie.srt, Movie.en.srt, Movie.nfo, Movie-poster.jpg — dans un dossier nommé .medialab-de-sters (le nom signifie « à supprimer » en roumain) à la racine du dossier de bibliothèque qui les contient, en conservant leurs sous-dossiers. Comme le dossier se trouve à l’intérieur du même dossier de bibliothèque, il est normalement sur le même disque et le déplacement est instantané. Jellyfin rescanne ensuite la bibliothèque.
Le déplacement est enregistré avant que tout fichier ne soit touché. Si un fichier ne peut pas être déplacé (par exemple à cause des permissions), les fichiers déjà déplacés sont remis en place et aucune copie n’est laissée dans .medialab-de-sters ; si les remettre en place n’est pas possible non plus, l’entrée reste dans la liste de quarantaine pour que vous puissiez la restaurer.
La liste Quarantine affiche chaque titre déplacé avec son emplacement et sa taille d’origine. Restore remet les fichiers exactement à leur place et rescanne ; elle refuse, sans rien toucher, si un fichier est à la fois en quarantaine et de retour à son chemin d’origine. Le plugin n’écrase ni ne supprime jamais un fichier : quand vous êtes sûr, vous supprimez vous-même le dossier .medialab-de-sters du disque.
Les fichiers situés hors des dossiers de bibliothèque, et les fichiers déjà dans un dossier .medialab-de-sters, sont refusés. Group as versions ne déplace aucun fichier.
Prérequis
- Jellyfin Server 12.2 ou plus récent.
- Pour la vérification des fichiers : ffprobe et ffmpeg, fournis avec jellyfin-ffmpeg (le plugin utilise les chemins que Jellyfin utilise pour le transcodage).
- Pour la quarantaine : l’utilisateur Jellyfin a besoin d’un accès en écriture aux dossiers de bibliothèque (pour créer
.medialab-de-stersà la racine du dossier de bibliothèque et pour sortir des fichiers de leurs dossiers). Sous Docker, les volumes de médias ne doivent pas être montés en lecture seule. Sans accès en écriture, tous les rapports fonctionnent ; seule la quarantaine ne peut pas déplacer de fichiers.
Questions fréquentes
Peut-il supprimer mes films ? Non. Le plugin n’a aucune fonction de suppression. La quarantaine ne déplace des fichiers qu’à l’intérieur du même dossier de bibliothèque, et ils reviennent avec Restore.
Pourquoi le même film est-il listé deux fois dans Jellyfin ? En général, deux fichiers du même film se trouvent dans des dossiers différents, et Jellyfin fait alors deux éléments. Library Doctor les trouve par leur identifiant TMDb ou IMDb (ou par titre et année quand ils n’ont pas d’identifiant) et vous permet de les regrouper en versions ou de mettre la plus faible en quarantaine. Voir le guide.
Peut-il trouver chaque fichier endommagé ? Il trouve les fichiers manquants, illisibles, sans piste vidéo réelle ou sans durée, ainsi que les fichiers dont la fin ne peut pas être décodée. Un fichier coupé très près de sa fin (par exemple vers 98 %) peut encore contenir des images décodables dans ses dernières secondes et passer la vérification, et les dégâts au milieu d’un fichier ne sont pas recherchés.
Ce qu’il envoie, où
- Aucun contact externe hormis le client de licence. Aucune recherche de métadonnées en ligne : les doublons et les titres sans correspondance sont calculés à partir des identifiants (TMDb/IMDb…) que le serveur stocke déjà.
- Indirectement : après un déplacement en quarantaine ou une restauration, le plugin lance l’analyse habituelle de la bibliothèque, qui peut contacter les fournisseurs de métadonnées configurés sur le serveur (comportement du serveur, pas du plugin). « Group as versions » utilise la fonction native du serveur.
- La vérification des fichiers (uniquement à la demande) exécute le ffprobe du serveur sur chaque film/épisode, localement. Aucune analyse planifiée.
- Plus le client de licence, le même dans chaque plugin : voir Licence et confidentialité dans nos plugins.
Stocké localement :
- La quarantaine ne supprime rien : le fichier et ses compagnons (sous-titres, nfo, images) sont déplacés vers
<library root>/.medialab-de-sters/; la suppression définitive vous appartient. state/quarantine.json: titre, date, chemins d’origine et de quarantaine, taille.- Les résultats de la vérification des fichiers sont conservés uniquement en mémoire. Le plugin lit dans la bibliothèque si un utilisateur a regardé un titre (pour « largest unwatched »), sans le stocker.
Compatibilité des clients
- Page d’administration uniquement : Jellyfin Web / medialab Server ✅. Les fonctionnalités tournent sur le serveur, donc les clients (applications, téléviseurs) n’en voient que l’effet (titres déplacés ou regroupés).
- Tests : de bout en bout au niveau de l’API (16/16), vérification de fin de fichier sur 400/400 fichiers réels sans faux positif.
- Limites : le serveur a besoin d’un accès en écriture aux dossiers de bibliothèque pour la quarantaine ; un
.tstronqué ne peut pas être détecté (aucune durée stockée).
Légende : ✅ vérifié (test de bout en bout ou sur l’appareil) · 🟢 côté serveur, fonctionne avec tout client (par conception, aucun test par client) · ➖ sans objet · ❔ non testé.
Licence
Le plugin est open source (GPL-3.0). Les versions compilées prêtes à l’installation sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour incluses dans votre formule et le support : chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, et de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie inclut un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.
Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, et aussi dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte intégral de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, demandez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).
