10 KiB
PlexWasher c'est quoi ?
Un utilitaire développé par Akiya ayant pour but de supprimer les films et séries après un certains laps de temps de non visionnage sur Plex. L'idée est de ne pas stocker inutilement des fichiers qui ne sont pas regardés et ainsi gagner de l'espace de stockage.
L'utilitaire utilise l'API de Tautulli, Radar et Sonarr un outil permettant de monitorer un serveur Plex, pour récupérer les informations de visionnage.
Les fonctions disponibles/pas disponibles actuellement
- Suppression des films
- Via Radarr pour les films téléchargés par ce biais
- Via le système de fichier pour les autres
- Suppression des séries
- Via Sonarr pour les séries téléchargés par ce biais
- Via le système de fichier pour les autres
- Choix du nombre de mois avant suppression pour un fichier jamais consulté
- Choix du nombre de mois avant suppression depuis le dernier visionnage d'un fichier
- Possibilité de faire une whitelist pour que certains fichiers soient ignorés par l'utilitaire et jamais supprimés
- Possibilité de visionner la liste des fichiers que l'utilitaire a détecté comme étant dans les critères de suppression
- Choix du serveur Tautulli, Radarr et Sonarr
Configurer l'environnement pour utiliser l'utilitaire
L'utilitaire a été développé avec la version 3.10 de Python. Il sera exécuter depuis un container docker. Cette façon de faire offre plusieurs avantages :
- La version de Python reste fixe, aucune MAJ ne peut venir "casser" le fonctionnement du programme
- Le container docker peut-être créé et supprimé à la volée le temps de l'utilisation seulement
- Le container n'ayant accès en lecture/écriture qu'au dossier relatif à sa propre configuration et au lieu de stockage des films et séries, il ne peut pas aller supprimer des fichiers ailleurs. Ceci protège ainsi le système d'un bug pouvant causer des suppressions non souhaitées.
Récupérer l'utilitaire du repo git
Afin de récupérer facilement l'utilitaire, lancer la commande suivante :
git clone https://git.antoinesanchez.fr/Akiya/PlexWasher.git=
NB : Cette commande est à renseigner seulement la première fois. A l'avenir pour récupérer une éventuelle MAJ de l'utilitaire il faudra simplement réaliser la commande suivante :
git pull
Installation de l'utilitaire via un container docker
L'utilitaire est livré de manière à pouvoir build une image docker en utilisant la commande suivante (❗Le "." est important à la fin de la commande) :
sudo docker build -t plexwasher:latest .
Paramétrage
La configuration se réalise dans le fichier config.ini.
Configuration des serveurs Tautulli, Radarr et Sonarr
Compléter les champs comme suit :
[TAUTULLI]
SERVER_URL = https://tautulli.exemple.com
API_KEY = apikeytautilli
[RADARR]
SERVER_URL = https://radarr.exemple.com
API_KEY = apikeyradarr
[SONARR]
SERVER_URL = https://sonarr.exemple.com
API_KEY = apikeysonarr
La clef API du serveur Tautulli se trouve dans Settings / Web Interface. Dérouler la page jusqu'à trouver la section API.
Le champ Enable API doit être coché. Si une clef API n'a encore jamais été généré, cliquer sur Generate. Il est ensuite possible d'afficher la clef API en cliquant sur l'œil puis de copier la clef, c'est cette dernière qu'il faut renseigner dans le champ API_KEY ci-dessus.
Pour Radarr et Sonarr la clef API se trouve ici dans Settings/General.
Application des filtres
L'application des filtres à lieu dans la section suivante :
[MEDIA_FILTER]
; Section_id de la librairie film à nettoyer
film_section_ids = [1,2]
; nb de mois avant suppression pour un film jamais regardé
deadline_never_watched = 12
; nb de mois avant suppression depuis le dernier visionage
deadline_last_watched = 12
files_to_ignore = [
"/share/data/Plex/Films/Inglourious Basterds - 2009/Inglourious Basterds - 2009.mkv",
"/share/data/Plex/Films/N'oublie jamais - 2004/The Notebook - 2004.mkv",
"/share/data/Plex/Films/Nuit D'Ivresse -1986.mkv"
]
- Le champ
film_section_idscorrespond au choix de la librairie dans Tautulli. Dans mon cas, la 1 correspond à la librairie des films et 2 celle des séries. - Le champ
deadline_never_watchedcorrespond au nombre de mois avant suppression pour un fichier jamais consulté. Ceci permet de donner un délais de X mois pour qu'un fichier ajouté récemment ne soit pas comptabilisé comme bêtement jamais visionné et supprimé. - Le champ
deadline_laste_watchedcorrespond au nombre de mois avant suppression depuis le dernier visionnage d'un fichier. - Le champ
files_to_ignorecorrespond à la whitelist, c'est à dire aux fichiers qui ne seront pas impactés par l'utilitaires. Il faut renseigner ici les fichiers que l'on souhaite voir conserver. La syntaxe à respecter pour ce champ est celle décrite ci-dessus. A savoir, le chemin complet du fichier entre guillemet, suivi d'une virgule sauf dans le cas du dernier fichier.
Utilisation de l'utilitaire
Les fichiers config.ini (s'il n'existe pas, copier coller config.exemple.ini en le renommant config.ini) et to_delete.txt seront utiles dans cette section.
La configuration de l'utilitaire est à réaliser dans le fichier config.ini en suivant les explications dans la section Paramétrage.
L'utilitaire fonctionne en deux temps. C'est à dire qu'il faut d'abords lui demander d'acquérir la liste des fichiers à supprimer. Il rempli alors le fichier to_delete.txt. Ce fichier est consultable et contient la liste de tout ce qui va être supprimé. Il est possible à ce stade de l'éditer pour supprimer ou ajouter un fichier à supprimer. Une fois le fichier contrôlé, il faut enfin demander à l'utilitaire de passer à la phase de suppression.
Obtenir la liste des fichiers à supprimer
Pour obtenir la liste des fichiers à supprimer, il faut exécuter le programme plexwasher.py de la manière suivante :
docker run --name plexwasher -v $(pwd)/to_delete.txt:/app/plexwasher/to_delete.txt -v $(pwd)/config.ini:/app/plexwasher/config.ini -v /home/antoine-a/plex:/share/CACHEDEV1_DATA/Plex --rm plexwasher /app/plexwasher/plexwasher.py -g
NB :
- Dans mon cas, cette commande est à lancer sur Serveur1 depuis le dossier "/home/antoine-a/data/appdata/PlexWasher/input"
- -v permet de mapper les fichier to_delete.txt, config.ini et le lecteur réseau "plex" dans laquelle se trouve les films et séries.
- -rm permet de supprimer le container docker après l'exécution du script python
/app/plexwasher/plexwasher.py -gpermet d'exécuter la commande "get" du script afin d'alimenter le fichier to_delete.txt
Après quelques instants (plus ou moins long en fonction du nombre de fichier qui doivent être supprimés) la tâche est accomplie. Le fichier to_delete.txt est complété. Il est possible à ce stade d'éditer ce fichier pour retirer des fichiers à supprimer ou en ajouter (en veillant à respecter la syntaxe).
Lancer la suppression des fichiers
Pour lancer la suppression des fichiers, il faut exécuter le programme plexwasher.py de la manière suivante :
docker run --name plexwasher -v $(pwd)/to_delete.txt:/app/plexwasher/to_delete.txt -v $(pwd)/config.ini:/app/plexwasher/config.ini -v /home/antoine-a/plex:/share/CACHEDEV1_DATA/Plex --rm plexwasher /app/plexwasher/plexwasher.py -d -v
`
NB :
- Dans mon cas, cette commande est à lancer sur Serveur1 depuis le dossier "/home/antoine-a/data/appdata/PlexWasher/input"
- -v permet de mapper les fichier to_delete.txt, config.ini et le lecteur réseau "plex" dans laquelle se trouve les films et séries.
- -rm permet de supprimer le container docker après l'exécution du script python
plexwasher /app/plexwasher/plexwasher.py -d -vpermet d'exécuter la commande "delete" du script afin de supprimer les fichiers qui sont dans to_delete.txt et non protégés dans la whitelist (dans config.ini) ; le "-v" permet lui d'obtenir tous les logs du script.
Après quelques instants (plus ou moins long en fonction du nombre de fichier qui doivent être supprimés) la tâche est accomplie et les fichiers sont supprimés.
Comportement de Plex, Radarr, Sonarr, Overseerr et Tautulli
Plex détecte de lui même la suppression des fichiers et les retire de la bibliothèque. Tautulli est plus lent mais finit par le détecter également (serveur configuré sur un scan par heure). Un redémarrage de Tautulli permet d'accélerer le processus. Enfin Sonarr et Radarr, si le fichier a été téléchargé par eux, sont utilisés directement utilisés pour la suppression des éléments en question. De fait ils sont à jour. Reste Overseerr dont les demandes ne sont pas actualisés, la bonne pratique étant de supprimer les demandes au fil de l'eau dès lors qu'elles passent disponibles.
PlexWasher
A simple command line to remove media from plex
Description
This tool will query a Tautulli server to get the path of all files for a media that was not not been watched for a given period. The list will then be written to a file in case the user want to double check before deleting all the listed files.
This tool supports:
- selection of period a media is not beeing watched before deleting it.
- whitelist of files to prevent the deletion of a media even if the not watched period is exeeded.
Getting Started
Dependencies
- python3.10 or newer
Installing
- Download the source code
git clone https://git.antoinesanchez.fr/Akiya/PlexWasher.git # or download the ZIP from https://git.antoinesanchez.fr/Akiya/PlexWasher/archive/main.zip and extract it
- Rename 'config.exemple.ini' to 'config.ini' and modify it to set the correct informations
Executing program
- CMD description:
usage: plexwasher.py [-h] [-v] [-g] [-d] [-o OUTPUT]
options:
-h, --help show this help message and exit
-v, --verbose Print lots of debugging statements
-g, --get Get the list of files to delete and stores the list in a file
-d, --delete Read a file listing unwanted files, delete the unwanted files and its parent folders if empty.
-o OUTPUT, --output OUTPUT
Change the default output file.
- Exemple:
./plexwasher.py --get
License
This project is licensed under the Apache-2.0 License - see the LICENSE file for details