Ce projet ajoute une synchronisation bidirectionnelle entre trakt.tv et Plex Media Server. Il nécessite un compte trakt.tv mais pas de premium Plex ni d'abonnement Trakt VIP, contrairement à l'application Plex fournie par Trakt.
Créé à l'origine par @Taxel, maintenant maintenu par des contributeurs.
Remarque : Les clés API PyTrakt ne sont pas stockées de manière sécurisée, donc si vous ne souhaitez pas avoir de fichier contenant celles-ci sur votre disque dur, vous ne pouvez pas utiliser ce projet.
Vous cherchez un moyen de contribuer ?
Le script est connu pour fonctionner avec les versions Python 3.9-3.13.
Installation avec pipx.
pipx install PlexTraktSync
ou, pour installer une version spécifique :
pipx install PlexTraktSync==0.15.2 --force
et pour mettre à niveau :
plextraktsync self-update
qui appelle simplement pipx
avec :
pipx upgrade PlexTraktSync
exécuter:
plextraktsync sync
REMARQUE : l'installation pipx
utilisera des chemins spécifiques au système d'exploitation pour la configuration, les journaux et le cache, consultez la documentation platformdirs pour plus de détails ou vérifiez la sortie de la commande info.
Vous pouvez configurer le fichier Docker Compose comme ceci :
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
command : sync
container_name : plextraktsync
restart : on-failure:2
volumes :
- ./config:/app/config
environment :
- PUID=1000
- PGID=1000
- TZ=Europe/Tallinn
Vous pouvez utiliser la version spécifique 0.25.16
:
image: ghcr.io/taxel/plextraktsync:0.25.16
ou dernière version 0.25.x :
image: ghcr.io/taxel/plextraktsync:0.25
Remarque : main
est la version de développement et le rapport de bogues par rapport aux versions de développement n'est pas pris en charge.
Pour exécuter la synchronisation :
docker compose run --rm plextraktsync sync
Le conteneur s'arrêtera une fois la synchronisation terminée. Lisez la section Configuration pour l’exécuter automatiquement à des intervalles définis.
Il s'agit d'installer la version de développement pour tester si la demande d'extraction résoudrait un problème.
Voir le guide de contribution sur la façon d'installer le code à partir d'une demande d'extraction.
REMARQUE : Cette méthode d'installation n'est pas prise en charge. Il est documenté uniquement par la contribution des utilisateurs.
.zip
depuis https://github.com/Taxel/PlexTraktSync/tagssetup.bat
pour installer la configuration requise et créer des raccourcis et des routines facultatifs (nécessite Windows 7sp1 - 11) .REMARQUE : Cette méthode d'installation n'est pas prise en charge. Il est documenté uniquement par la contribution des utilisateurs.
Option 1 pour la création de conteneur : créez un conteneur Unraid manuel de PlexTraktSync :
ghcr.io/taxel/plextraktsync:latest
(ou la balise de votre choix).-it
pour le mode interactif.plextraktsync
pour démarrer le processus d'identification décrit ci-dessus.Option 2 pour la création de conteneurs : utilisez le plugin Unraid "Community Apps".
Une fois installé (ou si déjà installé) :
Planifiez (cron) le conteneur pour qu'il démarre à des intervalles donnés pour traiter la synchronisation
Une fois installé (ou si déjà installé) :
#!/bin/bash
# Check if the container is running
if [ "$(docker ps -q -f name=PlexTraktSync)" ]; then
echo "PlexTraktSync container is already running."
else
echo "PlexTraktSync container is not running. Starting it now..."
docker start PlexTraktSync
fi
# Run the sync command inside the container
docker exec PlexTraktSync plextraktsync sync
REMARQUE : Cette méthode d'installation n'est pas prise en charge. Vous n'obtiendrez pas d'assistance si vous utilisez cette méthode d'installation.
L'installation à partir de GitHub est considérée comme le mode développeur et est documentée dans CONTRIBUTING.md.
Vous devrez créer une application API Trakt si vous n’en avez pas déjà une :
urn:ietf:wg:oauth:2.0:oob
comme URL de redirection Exécutez plextraktsync login
, le script demandera les informations d'identification manquantes
Remarque Pour configurer les informations d'identification dans le conteneur Docker, reportez-vous à la section Exécuter le conteneur Docker.
Lors de la première exécution, il vous sera demandé de configurer l'accès Trakt et Plex.
Suivez les instructions, vos informations d'identification et clés API seront stockées dans les fichiers .env
et .pytrakt.json
. L'URL et le jeton Plex sont stockés dans servers.yml
.
Si l'authentification à 2 facteurs est activée sur Plex, saisissez le code lorsque vous y êtes invité. Si 2FA n'est pas activé, laissez simplement l'invite vide et appuyez sur Entrée.
Les cronjobs peuvent éventuellement être utilisés sous Linux ou macOS pour exécuter le script à des intervalles définis.
Par exemple, pour exécuter ce script dans une tâche cron toutes les deux heures :
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
pour localiser le fichier exécutable plextraktsync de votre système et mettez-le à jour en conséquence.Au lieu de cron, un planificateur Docker comme Ofelia peut également être utilisé pour exécuter le script à des intervalles définis.
Un exemple de composition de docker avec un intervalle de 6 h :
version : " 2 "
services :
scheduler :
image : mcuadros/ofelia:latest
container_name : scheduler
depends_on :
- plextraktsync
command : daemon --docker
volumes :
- /var/run/docker.sock:/var/run/docker.sock:ro
labels :
ofelia.job-run.plextraktsync.schedule : " @every 6h "
ofelia.job-run.plextraktsync.container : " plextraktsync "
plextraktsync :
image : ghcr.io/taxel/plextraktsync:latest
container_name : plextraktsync
command : sync
volumes :
- ./config:/app/config
Pour désactiver certaines parties des fonctionnalités de ce logiciel, ne cherchez pas plus loin que config.yml
. Lors de la première exécution, le script créera config.yml
basé sur config.default.yml
. Si vous souhaitez personnaliser les paramètres avant la première exécution (par exemple, vous ne souhaitez pas de synchronisation complète), vous pouvez copier et modifier config.yml
avant de lancer le script. Ici, dans la section de synchronisation, vous pouvez désactiver les éléments suivants en les définissant de true
à false
dans un éditeur de texte :
La première exécution du script prendra (en fonction de la taille de votre bibliothèque PMS) beaucoup de temps. Après cela, les détails du film et les listes Trakt sont mis en cache, le fonctionnement devrait donc être beaucoup plus rapide la deuxième fois. Cela signifie cependant que les listes Trakt ne sont pas mises à jour de manière dynamique (ce qui convient aux listes telles que « Nominés aux Oscars 2018 », mais n'est peut-être pas idéal pour les listes qui sont souvent mises à jour). Voici les temps d'exécution sur mon serveur Plex : Première exécution – 1228 secondes, deuxième exécution – 111 secondes
Vous pouvez visualiser la progression de la synchronisation dans le fichier plextraktsync.log
qui sera créé.
Vous pouvez utiliser les indicateurs --edit
ou --locate
pour config
la commande pour ouvrir le fichier de configuration dans l'éditeur ou dans le navigateur de fichiers.
Par défaut, toutes les bibliothèques sont traitées. Vous pouvez désactiver les bibliothèques par nom en modifiant excluded-libraries
dans config.yml
.
Vous pouvez également définir excluded-libraries
par serveur dans servers.yml
:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
excluded-libraries :
- " Family Movies "
De plus, vous pouvez lister uniquement les bibliothèques à traiter. Dans ce cas, excluded-libraries
globales ne seront pas utilisées pour ce serveur.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
- " TV Shows "
vous pouvez voir la liste finale des bibliothèques avec la commande info :
$ plextraktsync --server=Example1 info
Enabled 2 libraries in Plex Server:
- 1: Movies
- 2: TV Shows
Si vous souhaitez spécifier votre configuration par serveur, vous pouvez le faire servers.yml
. Dans la partie config
de la configuration du serveur, vous pouvez spécifier comment ce serveur spécifique doit fonctionner.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
sync :
plex_to_trakt :
collection : true
trakt_to_plex :
liked_lists : false
L'utilisation sync
dans une configuration de serveur remplace la configuration de synchronisation globale dans config.yml
.
Cela peut également être utilisé pour avoir différentes configurations entre différentes bibliothèques. Pour pouvoir faire cela, vous spécifiez le nombre de serveurs dont vous avez besoin (très probablement égal au nombre de configurations différentes dont vous avez besoin). Par exemple:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
sync :
plex_to_trakt :
ratings : true
watched_status : true
trakt_to_plex :
ratings : true
watched_status : true
Example2 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " TV Shows "
sync :
plex_to_trakt :
ratings : true
watched_status : false
trakt_to_plex :
ratings : true
watched_status : false
La configuration ci-dessus ferait en sorte que la bibliothèque « Films » synchronise à la fois les classements et le statut regardé, tandis que la bibliothèque « Émissions de télévision » synchronise uniquement les classements. Pour ensuite exécuter la synchronisation, vous devez spécifier --server Example1
ou --server Example2
pour exécuter la synchronisation pour ce serveur spécifique.
L'exécution de la commande sync sans --server
utilisera le serveur par défaut de .env
Si vous souhaitez exécuter ces tâches en utilisant ofelia
, vous pouvez le faire en exécutant quelque chose de similaire à ceci dans votre docker-compose.yml
:
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
command : sync
container_name : plextraktsync
profiles : ["schedule"]
volumes :
- /configs/mediarr/plextraktsync:/app/config
environment :
- PUID=1000
- PGID=1000
depends_on :
- plex
scheduler :
image : mcuadros/ofelia:latest
container_name : scheduler
command : daemon --docker
restart : unless-stopped
volumes :
- /var/run/docker.sock:/var/run/docker.sock:ro
labels :
ofelia.job-run.plextraktsync.schedule : " 0 6,18 * * * "
ofelia.job-run.plextraktsync.container : " plextraktsync "
ofelia.job-run.plextraktsync.command : " --server 'Example1' sync "
ofelia.job-run.plextraktsync2.schedule : " 0 12,0 * * * "
ofelia.job-run.plextraktsync2.container : " plextraktsync "
ofelia.job-run.plextraktsync2.command : " --server 'Example2' sync "
Si vous n'exécutez qu'un seul conteneur PlexTraktSync, vous devez vous assurer que les deux tâches Ofelia ne s'exécutent pas en même temps. Ofelia ignore la planification d'une nouvelle exécution de tâche si la tâche précédente est toujours en cours d'exécution.
En fonction du temps nécessaire à l'exécution du travail sur votre serveur, vous devrez peut-être séparer la planification des deux travaux de quelques minutes ou de quelques heures. Si vous avez deux conteneurs PlexTraktSync différents dans votre composition Docker, vous pouvez les exécuter en même temps.
La configuration ci-dessus signifie qu'un travail s'exécute toutes les 6 heures, en alternance entre les deux "serveurs". Le conteneur PlexTraktSync possède également un profil de composition Docker appelé "schedule", ce qui signifie qu'il ne s'exécutera pas automatiquement lorsque vous exécutez par exemple docker compose up
.
Le niveau de journalisation par défaut est INFO
. Cela peut être modifié en DEBUG en modifiant la variable "debug" dans config.yml
en true
.
Par défaut, les journaux seront ajoutés, si vous souhaitez conserver le journal de votre dernière exécution uniquement, modifiez la variable "append" dans config.yml
en false
.
Exécutez plextraktsync --help
pour voir les commandes disponibles. Exécutez plextraktsync COMMAND --help
pour voir l'aide pour COMMAND
.
$ plextraktsync --help
Usage: plextraktsync [OPTIONS] COMMAND [ARGS]...
Plex-Trakt-Sync is a two-way-sync between trakt.tv and Plex Media Server
Options:
--version Print version and exit
--no-cache Disable cache in for Trakt HTTP requests
--no-progressbar Disable progressbar
--batch-delay INTEGER Time in seconds between each collection batch submit
to Trakt [default: 5]
--server NAME Plex Server name from servers.yml
--help Show this message and exit.
Commands:
bug-report Create a pre-populated GitHub issue with information...
cache Manage and analyze Requests Cache.
clear-collections Clear Movies and Shows collections in Trakt
config Print user config for debugging and bug reports.
download Downloads movie or subtitles to a local directory
imdb-import Import IMDB ratings from CSV file.
info Print application and environment version info
inspect Inspect details of an object
login Log in to Plex and Trakt if needed
plex-login Log in to Plex Account to obtain Access Token.
self-update Update PlexTraktSync to the latest version using pipx
sync Perform sync between Plex and Trakt
trakt-login Log in to Trakt Account to obtain Access Token.
unmatched List media that has no match in Trakt or Plex
watch Listen to events from Plex
watched-shows Print a table of watched shows
Vous pouvez contribuer vous-même les documents manquants.
La sous-commande sync
prend en charge les options --sync=shows
et --sync=movies
, vous pouvez donc synchroniser uniquement des types de bibliothèques spécifiques. Ou uniquement la liste de surveillance : --sync=watchlist
.
➔ plextraktsync sync --help
Usage: plextraktsync sync [OPTIONS]
Perform sync between Plex and Trakt
Options:
--sync [all|movies|shows|watchlist]
Specify what to sync [default: all]
--help Show this message and exit.
Vous pouvez utiliser une commande unmatched
pour analyser votre bibliothèque et afficher des films sans correspondance.
La prise en charge des émissions inégalées n'est pas encore implémentée.
plextraktsync unmatched
La commande info peut être utilisée pour imprimer les versions des packages, les informations sur le compte, les emplacements des répertoires Cache, Config et Logs.
$ plextraktsync info
PlexTraktSync Version: 0.16.0
Python Version: 3.10.0 (default, Oct 6 2021, 01:11:32) [Clang 13.0.0 (clang-1300.0.29.3)]
Plex API Version: 4.7.2
Trakt API Version: 3.2.1
Cache Dir: /Users/glen/Library/Caches/PlexTraktSync
Config Dir: /Users/glen/Library/Application Support/PlexTraktSync
Log Dir: /Users/glen/Library/Logs/PlexTraktSync
Plex username: nobody
Trakt username: nobody
Plex Server version: 1.24.3.5033-757abe6b4, updated at: 2021-02-21 17:00:00
Server has 2 libraries: ['Movies', 'TV Shows']
La commande Inspect est utilisée pour obtenir des informations sur les éléments de Plex Media Server, ce qui est utile lors du débogage des problèmes et du signalement des problèmes.
123
plextraktsync inspect 123
plextraktsync inspect "https://app.plex.tv/desktop/#!/server/53aff62c4bb6027c1ada814d417e83ccdf4d5045/details?key=/library/metadata/123"
Pour éviter des problèmes avec différents shells, mettez la valeur entre guillemets doubles.
Vous pouvez utiliser la commande watch
pour écouter les événements de Plex Media Server et les lectures scrobble.
Qu'est-ce que le scrobble ?
Scrobbler signifie simplement suivre automatiquement ce que vous regardez. Au lieu de vous connecter depuis votre téléphone au site Web, cette commande s'exécute en arrière-plan et revient automatiquement à Trakt pendant que vous regardez vos médias - Plex [email protected]
Pour restreindre le srobbling à votre utilisateur uniquement (recommandé), définissez ce qui suit dans votre config.yml
:
watch :
username_filter : true
Pour exécuter la commande watch
:
plextraktsync watch
ou
docker compose run --rm plextraktsync watch
ou ajoutez command: watch
to docker compose file, et docker compose up -d plextraktsync
pour démarrer le conteneur détaché :
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
Créez une unité systemd pour qu'elle scrobble automatiquement en arrière-plan :
[Unit]
Description =PlexTraktSync watch daemon
After =network-online.target
[Service]
ExecStart =plextraktsync watch
Restart =on-failure
RestartSec =10
User =user
Group =user
[Install]
WantedBy =multi-user.target
Notez qu'en fonction de votre méthode d'installation, vous devrez peut-être définir votre commande ExecStart comme suit :
ExecStart =/path/to/plextraktsync/plextraktsync.sh watch
Ensuite, vous devrez activer le service :
sudo systemctl daemon-reload
sudo systemctl start PlexTraktSync.service
sudo systemctl enable PlexTraktSync.service
Vous pouvez également exécuter en tant que service utilisateur systemd.
Cette procédure pas à pas permet d'utiliser différents serveurs avec la même configuration.
Cela suppose que plextraktsync
est installé avec pipx
pour votre utilisateur.
# [email protected]
[Unit]
Description =PlexTraktSync watch daemon
After =network-online.target
[Service]
ExecSearchPath =%h/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart =plextraktsync watch -- server =%i
Restart =on-failure
RestartSec =10
[Install]
WantedBy =default.target
Installez le fichier de modèle de service :
root
: /etc/xdg/systemd/user/[email protected]
pour tous les utilisateurs~/.config/systemd/user/[email protected]
pour votre utilisateur uniquementEnsuite, vous devez recharger systemd :
root
: sudo systemctl daemon-reload
systemctl --user daemon-reload
Créez maintenant des instances basées sur les noms de serveur de servers.yml
, dans cet exemple SERVER_NAME
.
systemctl --user start "plextraktsync@SERVER_NAME.service"
systemctl --user status "plextraktsync@SERVER_NAME.service"
pour des journaux complets, vous pouvez utiliser journalctl
(ajouter -f
pour suivre les journaux) :
journalctl --user -u "plextraktsync@SERVER_NAME.service"
Si tout fonctionne, activez-le pour le démarrage automatique au redémarrage de l'hôte
systemctl --user enable "plextraktsync@SERVER_NAME.service"
Pour que la session systemd --user démarre sans avoir à vous connecter, vous devez activer systemd-linger :
loginctl enable-linger
Plex Movie
et Plex TV Series
par défaut améliore la compatibilité des scripts (pour la correspondance ou pour la liste de surveillance). Il est recommandé de migrer vers le nouvel agent Plex TV Series.Vérifiez la commande de vos épisodes Plex par rapport à la commande Trakt. Si les épisodes sont dans un ordre différent, cela ne devrait pas poser de problème car ils sont identifiés par des identifiants. Mais si une saison ou un épisode manque sur Trakt (et tmdb) il ne peut pas être synchronisé. Vous pouvez le corriger en ajoutant les épisodes manquants ou en modifiant les métadonnées (par exemple, les identifiants tvdb ou imdb manquants) sur tmdb ou en signalant un problème de métadonnées sur Trakt (réponses). L'inscription et la modification des informations sur tmdb sont gratuites pour tous. Trakt sera mis à jour à partir des données tmdb.
Assurez-vous d'utiliser les bonnes pratiques concernant l'agent Plex et l'organisation des fichiers, comme indiqué ci-dessus. Vérifiez si les épisodes ne manquent pas sur Trakt comme expliqué dans la réponse précédente, et vérifiez si les identifiants externes sont renseignés sur tmdb.
Le dossier Saison 0 ne doit contenir que des épisodes appartenant à la saison 0, également appelés spéciaux. Les bandes-annonces, scènes supprimées, featurettes, interviews,... doivent être stockées dans un dossier Extra séparé (pas dans la saison 0) selon les règles de Plex. Gardez à l'esprit que les saisons 0 ne sont pas vraiment officielles donc les sources de données (tmdb, imdb et tvdb) ne correspondent parfois pas. Vérifiez la saison 0 des émissions sur trakt.tv pour identifier ces épisodes spéciaux. Utilisez tmdb comme source Plex autant que vous le pouvez.
Le moyen le plus simple consiste à utiliser des conteneurs avec un dossier de configuration personnalisé pour chaque utilisateur : Docker-compose multi-utilisateur.
Oui, en utilisant Docker, consultez la page Discussions.
Vérifiez les discussions, peut-être que quelqu'un a déjà posé la question et trouvé la réponse.