Implémenté au lot 2d :
internal/catalog/naming(noms et dossiers),internal/catalog/nfo(fichiers NFO) etinternal/catalog(jobcatalog.identify).
ProtoFlix identifie d'abord une œuvre sans réseau, à partir des noms de fichiers, des dossiers et des NFO posés à côté. Les fournisseurs externes (ADR 0016) ne viendront qu'ensuite, pour compléter ou corriger.
1. Quand l'identification a lieu
Après chaque scan terminé, un job catalog.identify par source traite les fichiers nouveaux (identify_state = pending) :
linked: le fichier est rattaché à une version d'une édition d'une œuvre ;extra: bande-annonce, échantillon ou bonus. Le fichier reste hors du catalogue (les bandes-annonces locales seront rattachées plus tard,data-model.md) ;unrecognized: rien d'exploitable, par exemple un épisode sans numéro. La musique a ses propres règles, étiquettes d'abord puis cheminArtiste/Album (année)/CD2/01 - Titre.flac(ADR 0025).
Un fichier déjà rattaché ne l'est plus jamais automatiquement. Il garde son œuvre quand il est déplacé, renommé ou que son contenu change. Corriger un rattachement relèvera de l'administration (correction manuelle, à venir).
2. Films
| Exemple | Résultat |
|---|---|
Dune (2021)/Dune (2021) - 2160p.mkv | Dune, 2021 |
Dune.Part.Two.2024.MULTi.2160p.WEB-DL.x265-GRP.mkv | Dune Part Two, 2024 |
1917 (2019).mkv | 1917, 2019 |
Blade Runner (1982) {edition-Final Cut}.mkv | Blade Runner, 1982, édition « Final Cut » |
Aliens.1986.Directors.Cut.1080p.mkv | Aliens, 1986, édition « Director's Cut » |
Amélie (2001)/movie.mkv | Amélie, 2001 (le dossier l'emporte sur un nom générique) |
Règles :
- En nom de type « release », les points et les soulignés séparent les mots. Le titre s'arrête au premier marqueur technique : définition, source, codec, langue, groupe.
- L'année retenue est la dernière année précédée d'un titre (
2001 A Space Odyssey 1968donne 1968). - Un dossier de la forme « Titre (Année) » l'emporte, sauf si le fichier donne une autre année.
- Éditions reconnues :
{edition-…}(convention Plex), Director's Cut, Extended et Version longue, Ultimate, Final Cut, Theatrical et Version cinéma, Special Edition, Unrated. - Regroupement : même titre normalisé (casse, accents et ponctuation ignorés) et même année dans la bibliothèque. Un identifiant TMDB, IMDb ou TVDB venu d'un NFO l'emporte sur le titre.
- Versions et copies : chaque fichier est une version de son édition. Un fichier identique (même taille et même empreinte rapide) à un fichier déjà présent dans l'édition en devient une copie : même version, pour la redondance.
3. Séries
| Exemple | Résultat |
|---|---|
The Expanse (2015)/Season 02/The Expanse - S02E03 - Static.mkv | The Expanse (2015) › Saison 2 › épisode 3 « Static » |
Kaamelott/Livre 1/Kaamelott.1x03.mkv | Kaamelott › Saison 1 › épisode 3 |
Friends/S01/Friends.S01E01E02.mkv | Friends › Saison 1 › épisode 1 (fichier double) |
Doctor Who (2005)/Specials/Doctor.Who.S00E01.mkv | Doctor Who › Épisodes spéciaux › épisode 1 |
Règles :
- Les numéros viennent du nom du fichier :
S01E02,s1e2,1x02. Un fichier sans numéro estunrecognized. - Le dossier de la série est celui au-dessus du dossier de saison (
Season,Saison,Livre,S01,Specials…). Sinon, c'est le dossier qui porte le nom du préfixe du fichier, et à défaut le dossier du fichier. - Les saisons et les épisodes sans titre s'appellent « Saison N » et « Épisode N ».
Limites actuelles :
- un fichier multi-épisode n'est rattaché qu'au premier épisode ;
- les épisodes datés (émissions quotidiennes) ne sont pas reconnus ;
- « The Office » et « The Office (2005) » font deux séries si les dossiers diffèrent.
4. Vidéos personnelles
Une œuvre par fichier, nommée d'après le fichier : Vacances_Bretagne.mp4 donne « Vacances Bretagne ». Aucune recherche externe.
5. Fichiers NFO
Les fichiers lus sont <nom du fichier>.nfo, puis movie.nfo pour un film, tvshow.nfo dans le dossier de la série, et <nom du fichier>.nfo pour un épisode. Le format est celui de Kodi, Jellyfin, Emby, tinyMediaManager, Radarr et Sonarr.
On en retient :
- le titre, le titre original et le titre de tri ;
- l'année (ou
premiered,aired) et le synopsis ; - la classification et les genres ;
- les identifiants
uniqueid,tmdbid,imdbidettvdbid.
Un NFO qui ne contient qu'un lien IMDb ou TMDB donne l'identifiant.
Sécurité : un NFO est une entrée hostile.
- Il est lu par la racine confinée de la source, comme les vidéos.
- Sa taille est limitée à 1 Mio, et les entités XML externes ne sont pas résolues.
- Les valeurs sont nettoyées (caractères de contrôle, UTF-8 invalide) et tronquées.
6. Métadonnées et arbitrage
Chaque champ est conservé avec sa source (metadata_values). Pour chaque champ, la valeur affichée est :
- la valeur verrouillée, s'il y en a une ;
- sinon celle de la source la plus fiable : manuel, puis NFO, puis fournisseur, puis nom de fichier ;
- à fiabilité égale, la plus récente.
match_state vaut :
unmatchedquand tout vient du nom de fichier ;autodès qu'un NFO ou un identifiant est présent ;manualpour une correction d'administrateur. Une correction manuelle n'est jamais écrasée.
7. Classifications d'âge
Les certifications des NFO sont ramenées aux paliers 0 (tous publics), 10, 12, 16 et 18 :
| Certification | Palier |
|---|---|
| FR Tous publics, U, G, TV-Y, TV-G | 0 |
| FR -10, PG, TV-PG, FSK 6 | 10 |
| FR -12, PG-13, FSK 12 | 12 |
| FR -16, R, TV-14, FSK 16 | 16 |
| FR -18, NC-17, TV-MA, FSK 18 | 18 |
Entre deux paliers, on arrondit à l'âge supérieur, sauf PG-13 qui est rattaché à -12, comme le font les distributeurs français. Une œuvre sans classification connue est masquée sous une limite d'âge (authn-authz.md §2). La classification d'une série vaut pour ses saisons et ses épisodes.
8. Fichiers de sous-titres
Un fichier .srt, .ass, .ssa ou .vtt est une piste du film dont il porte le nom, sans tenir compte de la casse, dans le même dossier ou dans un sous-dossier Subs, Subtitles, Sous-titres ou ST.
Exemple pour Film.mkv | Résultat |
|---|---|
Film.srt | Sans langue |
Film.fr.srt, Film.fra.srt, Film.VFF.srt, Film.french.srt | Français |
Film.fr-CA.srt | Français |
Film.en.forced.srt | Anglais, forcés |
Film.en.sdh.vtt (ou .hi, .cc) | Anglais, pour malentendants |
Film.fr.commentaire.srt | Français, intitulé « commentaire » |
Film 2.srt, French.srt | Ignorés : le nom doit être celui du film, suivi d'un point |
Règles :
- Vu sans scan : le dossier est lu quand on ouvre une fiche ou qu'on lance la lecture. Rien n'est conservé en base. Une session déjà ouverte garde la liste de son démarrage.
- Dossier partagé :
Film.2.srtrevient àFilm.2.mkvsi ce fichier existe, pas àFilm.mkv. - Limites : 16 Mio par fichier, 32 fichiers par film. Les liens symboliques ne sortent jamais de la source.
- Lecture : conversion en WebVTT dans le serveur, sans FFmpeg. UTF-8, UTF-16 avec marque, sinon Windows-1252. Position et style ASS sont perdus (
subtitle_style_lost). - Fiche : si le partage est lent, la fiche s'affiche sans ces pistes après 1 s ; la lecture regarde de nouveau.
Noms de téléchargement français
Cas couverts par naming/corpus_test.go, pris dans de vraies bibliothèques :
- Balises : FRENCH, TRUEFRENCH, SUBFRENCH, VFF, VFQ, VF2, VOSTFR, HDLight, 4KLight et autres. Certains mots sont aussi des mots de titres (
french,web,final,internal…) : ils ne coupent le nom qu'en fin de nom ou devant une autre balise. The French Connection reste entier, Intouchables.FRENCH devient Intouchables. - Filigranes de sites :
www.Torrent9.ph - Titre,Wawacity.press_Titre, et-Wawacity.quelquechoseen fin de nom. - Noms encodés comme une adresse :
Madame+Web+%282024%29. - Saisons :
Partie N,Part N,Livre N,Épisodes spéciaux,Hors saison. Les dossiers de saison complète (The.Mandalorian.S01.MULTi…) donnent le nom de la série. - Sans saison, seulement dans le dossier d'une série :
Kaamelott - Episode 7,Chernobyl.Part.1,One Piece - 1071(saison du dossier, sinon 1).
Choix de la fiche TMDB : sans décision nette, l'administrateur tranche. Un candidat passe sans lui s'il est loin devant, s'il est le seul à porter exactement ce nom, ou s'il est au moins deux fois plus connu que son homonyme.
Source : docs/media/naming.md, dans le dépôt de ProtoFlix.