Custom Plex Scanners

Testé sur PMS 0.9.6.9 et 0.9.7.7

edit 2013/07/14 le texte barré correspond à l'archive v1.2

edit 2013/07/24 v2.2 cf post #18

edit 2013/10/29 v2.3

edit 2015/06/28 v2.4

 

Problèmes initiaux

Films

Le nettoyage du nom des films est incomplet

Reportages

Obligation de numéroter les épisodes rangés dans Reportages/Arte/Divers (Arte) lors de l'utilisation du Plex Series Scanner car les épisodes non numérotés sont ignorés.
L'alternative d'utiliser le scanner le Plex Movie Scanner n'est pas viable car il ignore les épisodes numérotés, le Plex Video Files Scanner est trop simpliste.

Améliorations

  • Le 'Custom Plex Documentaries' Scanner numérote automatiquement les épisodes non numérotés.
  • Possibilité d'ignorer les répertoires qui contiennent un fichier .plexignore (Guillaume Boudreau) now in plex

Configuration idéale pour avoir les titres et synopsis en français

 

Dans Réglages->Agents

 

Puis dans Films->The Movie Database (ordre à respecter)

cocher Local Media Assets (Movies)

cocher The Movie Database

 

Puis dans The Movie Database->Réglages

cocher Prefer artwork based on section language

Country : France

 

Dans Films->Freebase (ordre à respecter)

cocher Local Media Assets (Movies)

cocher The Movie Database

cocher Freebase

 

Pour ma part, je n'ai pas coché :

ni MoviePosterDB

ni OpenSubtitles.org

ni Wikipedia

 

Dans Séries TV->TheTVDB (ordre à respecter)

cocher Local Media Assets (TV)

cocher TheTVDB
cocher Plex Theme Music

 

Pour ma part, je n'ai pas coché :

ni OpenSubtitles.org

 
Pour info, Local Media Assets permet d'utiliser les images jpg à la XBMC tel que
générées par Ember Media Manager (prendre la version beta) par ex. (mode Frodo)
 
Pour mémoire, si un fichier .nfo existe, l'imdb ID est utilisé pour retrouver les infos relatives à tel ou tel média.
 

Organisation de ma bibliothèque

Films

Asie

Action

Titre 1
...
Titre N

...
Comedie
...
Western
 
Autre

...

Francais

...

VOSTFR

...

...
VU

Asie
...
VOSTFR

Séries

Asie

Série 1

Season 1

1x01. Titre 1
...

...
Season N
 
...
Série N

...

 
...
VU

Asie
...

Reportages

Arte

Reportage 0 (Arte)

0x01. Titre 1
...

...
Reportage N (Arte)

...

Divers (Arte)

Titre 1
...
Titre N

 
...
VU

Arte
...

Organisation des mes sections

Films (Autre) => Custom Plex Movies Scanner + Freebase + Français

/path/to/Films/Autre

...
Films (VU)

/path/to/Films/VU

Reps (Arte) => Custom Plex Documentaries Scanner + Personal Media Shows + None

/path/to/Reportages/Arte

...
Reps (VU)

/path/to/Reportages/VU/Arte
/path/to/Reportages/VU/Divers
...

Series (Autre) => Custom Plex Series Scanner + TheTVDB + Français

/path/to/Series/Autre

...
Series (VU)

/path/to/Series/VU/Asie
/path/to/Series/VU/Autre
...

Contenu des archives

Scanners/Common/CustomStack.py

  • Modification de la fonction Scan()
  • Remplacement de VideoFiles.CleanName() par CustomVideoFiles.CleanName()
  • [v2.2] Ajout de SeriesScanner.episode_regexps

Scanners/Common/CustomUtils.py

  • Fonction Ignore() : Ignore folders containing .plexignore marker files

Scanners/Common/CustomVideoFiles.py

  • Variable source_dict :
    • Ajout de tv à la catégorie stv
    • Ajout de la catégorie vhs (vhs, vhsrip) 
  • Variable misc :
    • Ajout de lte, rip et fansub
  • Ajout de la variable french (french, truefrench, subfrench, frenchedit, fr, vf, vvf, vo, vostfr, vost)
  • Variable format :
    • Ajout de remux, h, 264, prores
  • Modification de la variable yearRx :
    • Ajout de _ en préfix possible
  • Modification de la fonction CleanName() :
    • Ajout du paramètre noYear (false par défaut)
    • Ajout de l'appel à la variable french
    • modif de sys.getfilesystemencoding() en try: & except ... UTF-8

Scanners/Movies/Custom Plex Movie Scanner.py

  • Remplacement de 'Plex Series Scanner' par 'Custom Plex Series Scanner'
  • Modification de la fonction Scan()
  • Ajout de l'appel à CustomUtils.Ignore()
  • Remplacement de VideoFiles.CleanName() par CustomVideoFiles.CleanName()
  • Remplacement de checkNfoFile() par MovieScanner.checkNfoFile()

Scanners/Movies/Custom Plex Video Files Scanner.py

  • Modification de la fonction Scan()
  • Ajout de l'appel à CustomUtils.Ignore()
  • Remplacement de VideoFiles.CleanName() par CustomVideoFiles.CleanName()
  • Ajout import os.path [v2.4]

Scanners/Music/Custom Plex Music Scanner.py

  • Modification de la fonction Scan()
  • Ajout de l'appel à CustomUtils.Ignore()

Scanners/Music/Custom Plex iTunes Scanner.py

  • Modification de la fonction Scan()
  • Ajout de l'appel à CustomUtils.Ignore()

Scanners/Photos/Custom Plex Photo Scanner.py

  • Modification de la fonction Scan()
  • Ajout de l'appel à CustomUtils.Ignore()

Scanners/Series/Custom Plex Series Scanner.py

  • Modification de la variable episode_regexps :
    • Ajout de (\.? +(?P.+)(\..+)?$)? à la fin de chaque regexp
    • Ce qui donne pour le 1ère regexp : S03E03, S03.03, S03_03, S03 03, S03E03 E04, S03E03 S03E04, S03E03 +04, S03E03-E04, S03E03-S03E04, S03E03-+04, S03E03 title, S03E03. title, ..., show S03E03, ..., show S03E03 title, ...
    • la 2ème : S03E03 title, S03E03. title, ..., show S03E03, ..., show S03E03 title, ...
    • la 3ème : 3x03, 3x03-04, 3x03-3x04, 03x03, 03x03-04, 03x03-3x04, 3x03 title, 3x03. title, ..., show 3x03, ..., show 3x03 title, ...
    • la dernière regexp est laissée tel quelle car je ne sais pas ou mettre le titre, avant ou après le numéro de l'épisode ?
    • Modif regexps [v2.4]
  • Modification de la fonction Scan()
    • Ajout de l'appel à CustomUtils.Ignore()
    • Remplacement de VideoFiles.CleanName() par CustomVideoFiles.CleanName()
    • Desactivation de whackRx, je ne sais plus pourquoi !

Scanners/Series/Custom Plex Documentaries Scanner.py

  • Idem Custom Plex Series Scanner.py +
  • Modification de la fonction Scan()
  • Suppression du code utilisant la 4ème regexp (SSEE) de la variable episode_regexps car elle reconnait les années tel que 1929 en saison 19 épisode 29 !
  • idem concernant la variable just_episode_regexs
  • Ajout de la numérotation automatiques des épisodes lorsqu'ils ne le sont pas

Emplacement selon système d'exploitation

  • Linux
    ~/Library/Application Support/Plex Media Server/Scanners
  • Synology
    /volume1/Plex/Library/Application Support/Plex Media Server/Scanners
  • Windows
    %LOCALAPPDATA%\Plex Media Server\Scanners

Archives

  • Scanners_v1.2.7z.txt (sans le patch root=None)
  • Scanners_v2.2.7z.txt (edit 2013/07/24 - avec le patch root=None & Stack)
  • Scanners_v2.3.7z.txt (edit 2013/10/29 - resync w/ official plex scanners)
  • Scanners_v2.4.7z.txt (edit 2015/06/28 - small fix + resync w/ official plex scanners)

Bouton droit->Enregistrer la cible du lien sous... pour télécharger (right click->Save target link as... to download)
Supprimer l'extension .txt pour désarchiver (Remove the .txt extension to open the archive)

Merci beaucoup pour ces scanners.



Juste une remarque cependant : Dans les series, un épisode nommé “Serie 01x01 Episode”

devient “Episode” dans Plex mais s’il est coupé en 2 parties (“Serie 01x01 Episode.cd1” et “Serie 01x01 Episode.cd2”) il est nommé “Serie 01x01 Episode” dans Plex.



(Testé et approuvé sur PMS 9.7.11)

Merci beaucoup pour ces scanners.

Juste une remarque cependant : Dans les series, un épisode nommé "Serie 01x01 Episode"
devient "Episode" dans Plex mais s'il est coupé en 2 parties ("Serie 01x01 Episode.cd1" et "Serie 01x01 Episode.cd2") il est nommé "Serie 01x01 Episode" dans Plex.

(Testé et approuvé sur PMS 9.7.11)

Bonjour,

dans le fichier Custom Plex Series Scanner.py, essaye de remplacer dans les différentes expressions rationnelles de la variable episode_regexps la partie

(\..+)?$)?

par

(\.[^.]+)?$)?

PS : les scanners fonctionnent toujours en 9.7.22

qq1 m'a signalé un pb dans le scanner de documentaires sur la dernière version de plex media server, ils auraient changé l'API de VideoFiles.Scan(), il faudrai remplacer toutes les occurences de :

VideoFiles.Scan(path, files, mediaList, subdirs)

par

VideoFiles.Scan(path, files, mediaList, subdirs, root=None)

dans le fichier Scanners/Series/Custom Plex Documentaries Scanner.py tout du moins,
d'autres fichiers sont peut-être impactés ?
je mettrais à jour le package dés que possible.

maj mineure... (edit 2013/07/14 - post initial maj)

Custom\ Plex\ Documentaries\ Scanner.py :

episode_regexps => SeriesScanner.episode_regexps at line 245

CustomVideoFiles.py :

misc += rip

french += fr, -= rip

ps : une seule archive pour unix/windows en 7z.

maj mineure...
 
Custom\ Plex\ Documentaries\ Scanner.py :
episode_regexps => SeriesScanner.episode_regexps at line 245
 
CustomVideoFiles.py :
misc += rip
french += fr, -= rip
 
ps : une seule archive pour unix/windows en 7z.

J'ai bien vu la différence à la ligne 245 pour les Documentaires mais je n'en vois aucune dans le CustomVideoFiles...

Aujourd’hui les scanners ont cessé de fonctionner. Je n’arrive pas à comprendre pourquoi parce qu’hier tout marchait bien. Je n’ai fait aucun changement dans mon installation et du jour au lendemain ça ne marche plus.

Impossible d’ajouter de nouveaux films, des films que je supprime sont toujours enregistré dans Plex. Pour les series, les nouveaux episodes ne sont pas ajoutés et un nouvelle series n’est pas ajoutée non plus.

Tout revient dans l’ordre dès lors que j’utilise le scanner de base de Plex…

C’est jour de relache pour le scanner?

pourquoi vous avez modifer les scanners moi la version 9.8.1 de plex marche nikel 

Donc après investigation et le log me disant que le scanner attendait 5 arguments et n’en obtenenant que 4 à la ligne 62 du Custom Plex Series Scanner, j’ai découvert ce qui suit:

Le scanner de Plex scanner a :

# Look for episodes.
def Scan(path, files, mediaList, subdirs, language=None, root=None):

Scan for video files.

VideoFiles.Scan(path, files, mediaList, subdirs, root)

alors que le Custom Scanner a:
def Scan(path, files, mediaList, subdirs):

Scan for video files.

VideoFiles.Scan(path, files, mediaList, subdirs)

J’ai donc remplacé les lignes du custom scanner avec celle du Plex normal et maintenant Plex scan joyeusement my librairie de series à nouveau. Je dois enquêter pour les films maintenant.

Edit: Comme je le suspectait les scanners ont été changés dans Plex (tous sauf celui d’(iTunes) alors jai changé les custom scanners pour ajouter l’élément ‘root’ où il fallait.

~~~~~~~~~~~~~~~~~~~~~~
 
So after investigating and the log telling me that the scanner was waiting for 5 arguments and getting only 4 on line 62 of the Custom Plex Series Scanners, I found the following:

Plex scanner has the following:
 
# Look for episodes.
def Scan(path, files, mediaList, subdirs, language=None, root=None):

Scan for video files.

VideoFiles.Scan(path, files, mediaList, subdirs, root)

while the custom scanner has:
def Scan(path, files, mediaList, subdirs):

Scan for video files.

VideoFiles.Scan(path, files, mediaList, subdirs)

So I added replaced the lines from the custom scanner with those of the regular one and now Plex happily scan my library again for the series. I have to investigate for the movies now.
 
Edit: As I suspected all the scanners have been changed in Plex (but the iTune scanner) so I changed the lines to add the “root” element.

Bonjour, Hi,

Je viens juste d'avoir la maj des scanners plex qui contient le nouveau paramètre root=None.

Le post initial a été maj en conséquence ainsi que les archives, Scanners_v2.1.7z en l'occurence.

J'ai supprimé le patch .plexignore de Guillaume Boudreau car il est maintenant intégré à plex.

Aussi, le fichier CustomUtils.py et les répertoires Music et Photos ont été supprimés car il ne sont plus nécessaires.

Just got the updated files w/ root=None, so, the initial post Scanners.7z (I call it v2.1 :-) has been updated...

I also get rid of the Guillaume Boudreau's .plexignore patch since it is now provided by the plex's Filter.py

so, file CustomUtils.py and folders Music and Photos were deleted since they are no more needed

Cordialement, Regards.

PS : merci/thanks Ismelda and wally007 pour votre contribution/for contributing.

J'ai bien vu la différence à la ligne 245 pour les Documentaires mais je n'en vois aucune dans le CustomVideoFiles...

Il s'agissait d'un bug dans Documentaries, curieusement, ça fonctionnait sans que le package soit spécifié !

pour autant, n'étant pas un pro de python, je ne saurais l'expliqué...

pourquoi vous avez modifer les scanners moi la version 9.8.1 de plex marche nikel 

lorsque vous aurez le message ci-dessous, il sera temps de mettre à jours vos scanners ;-)

Error in Python: Running scanner:
Traceback (most recent call last):
  File "/volume1/Plex/Library/Application Support/Plex Media Server/Scanners/Series/Custom Plex Series Scanner.py", line 62, in Scan
    VideoFiles.Scan(path, files, mediaList, subdirs)
TypeError: Scan() takes exactly 5 arguments (4 given)
 
PS : les Scanners existent dans 3 emplacements différents, sous synology par ex. :
 
/volume1/@appstore/Plex Media Server/Resources/Plug-ins/Scanners.bundle/Contents/Resources
=> Scanners de référence tel que livré par le bundle
/volume1/Plex/Library/Application Support/Plex Media Server/Plug-ins/Scanners.bundle/Contents/Resources
=> Scanners automatiquement maj par plex, initialement, copie des Scanners ci-dessus,
=> ce sont ceux utilisés lorsqu'il n'y a pas de Scanners utilisateur ci-dessous
/volume1/Plex/Library/Application Support/Plex Media Server/Scanners
=> Scanners utilisateur, pour éviter les collisions, j'ai préfixé les Scanners avec Custom

C'est jour de relache pour le scanner?

absolument ;-)

pas vu avant... et je n'ai pas été notifié sur le topic ! je vais vérifier on profile... au cas ou, les mp arrivent bien par email.

fin juin, qq1 m'avait signalé le pb en mp, mais n'ayant pas eu la maj avant hier, je ne pouvais pas mettre à jour les Scanners sans pouvoir vérifier leur bon fonctionnement, voila qui est chose faite, maintenant.

pour autant, votre modif

Merci pour la mise à jour.

Bonjour,
 
dans le fichier Custom Plex Series Scanner.py, essaye de remplacer dans les différentes expressions rationnelles de la variable episode_regexps la partie
(..+)?$)?
par
(.[^.]+)?$)?
 
PS : les scanners fonctionnent toujours en 9.7.22

Concernant les fichiers de serie avec plusieurs parties, je ne pense pas (et d’ailleurs ça ne marchait pas) que la problème vienne de la variable episode_regexps mais plutôt du CustomStack.py car c’est dans celui-ci que les fichiers multi-parties sont renommés. Et du coup prennent le nom entier des fichiers moins d’extension multi-partie.

Ne connaissant absolument pas Python, j’ai bien du mal à définir où exactement le nom du fichier est pris dans le code.

Merci beaucoup pour ces scanners.

Juste une remarque cependant : Dans les series, un épisode nommé "Serie 01x01 Episode"
devient "Episode" dans Plex mais s'il est coupé en 2 parties ("Serie 01x01 Episode.cd1" et "Serie 01x01 Episode.cd2") il est nommé "Serie 01x01 Episode" dans Plex.

(Testé et approuvé sur PMS 9.7.11)

Après réflexion, c'est tout à fait normal que les 2 épisodes soient assemblés en 1 seul, ce n'est un bug mais une feature, il fait de même pour les films...

je trouve ça plutôt pratique !?

Merci beaucoup pour ces scanners.

Juste une remarque cependant : Dans les series, un épisode nommé "Serie 01x01 Episode"
devient "Episode" dans Plex mais s'il est coupé en 2 parties ("Serie 01x01 Episode.cd1" et "Serie 01x01 Episode.cd2") il est nommé "Serie 01x01 Episode" dans Plex.

(Testé et approuvé sur PMS 9.7.11)

Après réflexion, c'est tout à fait normal que les 2 épisodes soient assemblés en 1 seul, ce n'est un bug mais une feature, il fait de même pour les films...

je trouve ça plutôt pratique !?

PS : la modif ci-dessous ne semble pas fonctionner, perte du titre => Episode # à la place ?!

dans le fichier Custom Plex Series Scanner.py, essaye de remplacer dans les différentes expressions rationnelles de la variable episode_regexps la partie

(\..+)?$)?

par

(\.[^.]+)?$)?

Non c’est pas ça, le problème est que l’on voit dans le titre le “1x01” sitôt qu’il s’agit d’un episode avec plusieurs parties
Exemple
2x01 TitreICI.cd1, 2x01 TitreICI.cd2, 2x01 TitreICI.cd3
donne :
2x01 TitreICI
alors que si l’episode n’a qu’une seule partie (2x01 TitreICI) on voit :
TitreICI
et c’est tout.

C’est donc le numéro de saison et de l’épisode que je cherche à retirer du titre de l’episode tout en gardant le reste bien sûr.

Non c'est pas ça, le problème est que l'on voit dans le titre le "1x01" sitôt qu'il s'agit d'un episode avec plusieurs parties
Exemple
2x01 TitreICI.cd1, 2x01 TitreICI.cd2, 2x01 TitreICI.cd3
donne :
2x01 TitreICI
alors que si l'episode n'a qu'une seule partie (2x01 TitreICI) on voit :
TitreICI
et c'est tout.

C'est donc le numéro de saison et de l'épisode que je cherche à retirer du titre de l'episode tout en gardant le reste bien sûr.

Bonjour,

en fait, le pb ne viens pas du Scanner, mais de Stack.py (CustomStack.py en fait), il faut ajouter au début du fichier :

import re

SeriesScanner = __import__('Custom Plex Series Scanner')
 
et remplacer :
 
                # Replace the name, which probably had the suffix.
                (name, year) = CustomVideoFiles.CleanName(root)
 
par :
                title = root
                for rx in SeriesScanner.episode_regexps:
                  match = re.search(rx, root, re.IGNORECASE)
                  if match and match.groupdict().has_key('title') and match.group('title'):
                    title = match.group('title')
                    break
 
                # Replace the name, which probably had the suffix.
                (name, year) = CustomVideoFiles.CleanName(title)
 

par ailleurs, dans Custom Plex Series Scanner.py, supprimer (\..+)? de toutes les expressions rationnelles du tableau episode_regexps.

ne marche pas en l'état, et je ne suis pas sur de son utilité, sinon, pour que ça fonctionne, ajouter ? après le + de .

voila ! ce qui donne l'archive v2.2 ;^)

Merci je vais tester ça rapidement ;)

Quant au CustomStack.py c'est ce que je disais dans mon post du 14 Juillet.

Merci pour la mise à jour.Concernant les fichiers de serie avec plusieurs parties, je ne pense pas (et d'ailleurs ça ne marchait pas) que la problème vienne de la variable episode_regexps mais plutôt du CustomStack.py car c'est dans celui-ci que les fichiers multi-parties sont renommés. Et du coup prennent le nom entier des fichiers moins d'extension multi-partie.

Ne connaissant absolument pas Python, j'ai bien du mal à définir où exactement le nom du fichier est pris dans le code.

Ca fonctionne parfaitement! Merci!!!