Este proyecto agrega una sincronización bidireccional entre trakt.tv y Plex Media Server. Requiere una cuenta trakt.tv pero no suscripciones Plex premium ni Trakt VIP, a diferencia de la aplicación Plex proporcionada por Trakt.
Creado originalmente por @Taxel, ahora mantenido por contribuyentes.
Nota: Las claves API de PyTrakt no se almacenan de forma segura, por lo que si no desea tener un archivo que las contenga en su disco duro, no puede utilizar este proyecto.
¿Busca una manera de contribuir?
Se sabe que el script funciona con las versiones de Python 3.9-3.13.
Instalación con pipx.
pipx install PlexTraktSync
o, para instalar una versión específica:
pipx install PlexTraktSync==0.15.2 --force
y para actualizar:
plextraktsync self-update
que simplemente llama pipx
con:
pipx upgrade PlexTraktSync
para ejecutar:
plextraktsync sync
NOTA: la instalación pipx
utilizará rutas específicas del sistema operativo para configuración, registros y caché; consulte la documentación de platformdirs para obtener más detalles o verifique la salida del comando info.
Puede configurar el archivo Docker Compose de esta manera:
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
Puedes usar la versión específica 0.25.16
:
image: ghcr.io/taxel/plextraktsync:0.25.16
o la última versión 0.25.x:
image: ghcr.io/taxel/plextraktsync:0.25
Nota: main
es la versión de desarrollo y no se admiten informes de errores en las versiones de desarrollo.
Para ejecutar la sincronización:
docker compose run --rm plextraktsync sync
El contenedor se detendrá una vez completada la sincronización. Lea la sección Configuración para ejecutarla automáticamente a intervalos establecidos.
Esto es para instalar la versión de desarrollo para probar si la solicitud de extracción solucionaría algún problema.
Consulte la guía de contribución sobre cómo instalar código desde una solicitud de extracción.
NOTA: Este método de instalación no es compatible. Está documentado únicamente por la contribución del usuario.
.zip
desde https://github.com/Taxel/PlexTraktSync/tagssetup.bat
para instalar los requisitos y crear rutinas y accesos directos opcionales (requiere Windows 7sp1 - 11) .NOTA: Este método de instalación no es compatible. Está documentado únicamente por la contribución del usuario.
Opción 1 para la creación de contenedores: cree un contenedor Unraid manual de PlexTraktSync:
ghcr.io/taxel/plextraktsync:latest
(o cualquier etiqueta que desee).-it
para el modo interactivo.plextraktsync
para iniciar el proceso de credencial descrito anteriormente.Opción 2 para la creación de contenedores: utilice el complemento Unraid "Aplicaciones comunitarias".
Una vez instalado (o si ya está instalado):
Programe (cron) el contenedor para que se inicie en intervalos determinados para procesar la sincronización.
Una vez instalado (o si ya está instalado):
#!/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
NOTA: Este método de instalación no es compatible. No recibirá soporte si utiliza este método de instalación.
La instalación desde GitHub se considera modo desarrollador y está documentada en CONTRIBUTING.md.
Deberá crear una aplicación Trakt API si aún no tiene una:
urn:ietf:wg:oauth:2.0:oob
como URL de redireccionamiento Ejecute plextraktsync login
, el script le pedirá las credenciales que faltan
Nota Para configurar las credenciales en el contenedor Docker, consulte la sección Ejecutar el contenedor Docker.
En la primera ejecución, se le pedirá que configure el acceso a Trakt y Plex.
Siga las instrucciones, sus credenciales y claves API se almacenarán en archivos .env
y .pytrakt.json
. La URL y el token de Plex se almacenan en servers.yml
.
Si tiene habilitada la autenticación de 2 factores en Plex, ingrese el código cuando se le solicite. Si no tiene 2FA habilitado, simplemente deje el mensaje en blanco y presione Entrar.
Los cronjobs se pueden utilizar opcionalmente en Linux o macOS para ejecutar el script a intervalos establecidos.
Por ejemplo, para ejecutar este script en un cronjob cada dos horas:
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
para localizar el archivo ejecutable pleextraktsync de su sistema y actualícelo en consecuencia.En lugar de cron, también se puede utilizar un programador acoplable como Ofelia para ejecutar el script a intervalos establecidos.
Un ejemplo de composición acoplable con un intervalo 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
Para deshabilitar partes de la funcionalidad de este software, no busque más que config.yml
. En la primera ejecución, el script creará config.yml
basado en config.default.yml
. Si desea personalizar la configuración antes de la primera ejecución (por ejemplo, no desea una sincronización completa), puede copiar y editar config.yml
antes de iniciar el script. Aquí, en la sección de sincronización, puedes desactivar las siguientes cosas configurándolas de true
a false
en un editor de texto:
La primera ejecución del script (dependiendo del tamaño de su biblioteca PMS) llevará mucho tiempo. Después de eso, los detalles de la película y las listas de Trakt se almacenan en caché, por lo que debería ejecutarse mucho más rápido la segunda vez. Sin embargo, esto significa que las listas de Trakt no se actualizan dinámicamente (lo cual está bien para listas como "Nominados al Premio de la Academia 2018", pero puede no ser ideal para listas que se actualizan con frecuencia). Estos son los tiempos de ejecución en mi servidor Plex: Primera ejecución: 1228 segundos, segunda ejecución: 111 segundos
Puede ver el progreso de la sincronización en el archivo plextraktsync.log
que se creará.
Puede usar --edit
o --locate
flags to config
comando para abrir el archivo de configuración en el editor o en el explorador de archivos.
De forma predeterminada, se procesan todas las bibliotecas. Puede deshabilitar las bibliotecas por nombre cambiando excluded-libraries
en config.yml
.
También puede configurar excluded-libraries
por servidor en servers.yml
:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
excluded-libraries :
- " Family Movies "
Además, puede enumerar solo las bibliotecas que se procesarán; en este caso, excluded-libraries
globales no se utilizarán para este servidor.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
- " TV Shows "
puedes ver la lista final de bibliotecas con el comando info:
$ plextraktsync --server=Example1 info
Enabled 2 libraries in Plex Server:
- 1: Movies
- 2: TV Shows
Si desea especificar su configuración por servidor, puede hacerlo dentro de servers.yml
. Dentro de la parte config
de la configuración del servidor, puede especificar cómo debería funcionar ese servidor específico.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
sync :
plex_to_trakt :
collection : true
trakt_to_plex :
liked_lists : false
El uso de sync
en la configuración de un servidor anula la configuración de sincronización global en config.yml
.
Esto también se puede utilizar para tener diferentes configuraciones entre diferentes bibliotecas. Para poder hacer esto, especifica la cantidad de servidores que necesita (muy probablemente igual a la cantidad de configuraciones diferentes que necesita). Por ejemplo:
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 configuración anterior haría que la biblioteca "Películas" sincronice tanto las calificaciones como el estado de visualización, mientras que la biblioteca "Programas de TV" solo sincroniza las calificaciones. Luego, para ejecutar la sincronización, debe especificar --server Example1
o --server Example2
para ejecutar la sincronización para ese servidor específico.
Al ejecutar el comando de sincronización sin --server
se utilizará el servidor predeterminado de .env
Si desea ejecutar estos trabajos usando ofelia
, puede hacerlo ejecutando algo similar a esto en su 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 está ejecutando solo un contenedor PlexTraktSync, debe asegurarse de que los dos trabajos de Ofelia no se ejecuten al mismo tiempo. Ofelia omite programar la ejecución de un nuevo trabajo si el trabajo anterior todavía está ejecutándose.
Dependiendo de cuánto tiempo tarde en ejecutarse el trabajo en su servidor, es posible que deba mantener la programación de los dos trabajos separados con unos minutos o unas horas. Si tiene dos contenedores PlexTraktSync diferentes en su ventana acoplable, puede ejecutarlos al mismo tiempo.
La configuración anterior significa que se ejecuta un trabajo cada 6 horas, alternando entre los dos "servidores". El contenedor PlexTraktSync también tiene un perfil de Docker Compose llamado "programación", lo que significa que no se ejecutará automáticamente cuando ejecute, por ejemplo, docker compose up
.
El nivel de registro predeterminado es INFO
. Esto se puede cambiar a DEBUG editando la variable "debug" en config.yml
a true
.
De forma predeterminada, los registros se agregarán; si desea mantener el registro solo de su última ejecución, edite la variable "agregar" en config.yml
a false
.
Ejecute plextraktsync --help
para ver los comandos disponibles. Ejecute plextraktsync COMMAND --help
para ver ayuda para 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
Puedes aportar tú mismo la documentación que te falte.
El subcomando sync
admite las opciones --sync=shows
y --sync=movies
, por lo que solo puede sincronizar tipos de biblioteca específicos. O solo lista de seguimiento: --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.
Puede utilizar un comando unmatched
para escanear su biblioteca y mostrar películas inigualables.
La compatibilidad con programas inigualables aún no está implementada.
plextraktsync unmatched
El comando info se puede utilizar para imprimir versiones de paquetes, información de cuenta, ubicaciones de directorios de caché, configuración y registros.
$ 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']
El comando Inspeccionar se utiliza para obtener información sobre los elementos de Plex Media Server, lo cual es útil para depurar problemas e informar problemas.
123
plextraktsync inspect 123
plextraktsync inspect "https://app.plex.tv/desktop/#!/server/53aff62c4bb6027c1ada814d417e83ccdf4d5045/details?key=/library/metadata/123"
Para evitar problemas con varios shells, ponga el valor entre comillas dobles.
Puede utilizar el comando watch
para escuchar eventos de Plex Media Server y reproducciones de scrobble.
¿Qué es el scrobbling?
Scrobbling simplemente significa rastrear automáticamente lo que estás viendo. En lugar de registrarse desde su teléfono en el sitio web, este comando se ejecuta en segundo plano y automáticamente regresa a Trakt mientras disfruta viendo sus medios : Plex [email protected]
Para restringir el scrobbling solo a su usuario (recomendado), configure lo siguiente en su config.yml
:
watch :
username_filter : true
Para ejecutar el comando watch
:
plextraktsync watch
o
docker compose run --rm plextraktsync watch
o agregue command: watch
el archivo de Docker Compose y docker compose up -d plextraktsync
para iniciar el contenedor separado:
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
Cree una unidad systemd para que realice scrobbling automáticamente en segundo plano:
[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
Tenga en cuenta que, dependiendo de su método de instalación, es posible que deba configurar su comando ExecStart de la siguiente manera:
ExecStart =/path/to/plextraktsync/plextraktsync.sh watch
A continuación deberá habilitar el servicio:
sudo systemctl daemon-reload
sudo systemctl start PlexTraktSync.service
sudo systemctl enable PlexTraktSync.service
También puede ejecutarlo como servicio de usuario systemd.
Este tutorial permite utilizar diferentes servidores con la misma configuración.
Esto supone plextraktsync
está instalado con pipx
para su usuario.
# [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
Instale el archivo de plantilla de servicio:
root
: /etc/xdg/systemd/user/[email protected]
para todos los usuarios~/.config/systemd/user/[email protected]
solo para su usuarioA continuación, necesitas recargar systemd:
root
: sudo systemctl daemon-reload
systemctl --user daemon-reload
Ahora cree instancias basadas en nombres de servidores de servers.yml
, en este ejemplo SERVER_NAME
.
systemctl --user start "plextraktsync@SERVER_NAME.service"
systemctl --user status "plextraktsync@SERVER_NAME.service"
para registros completos, puede usar journalctl
(agregue -f
para seguir los registros):
journalctl --user -u "plextraktsync@SERVER_NAME.service"
Si todo funciona, habilítelo para que se inicie automáticamente al reiniciar el host.
systemctl --user enable "plextraktsync@SERVER_NAME.service"
Para que la sesión systemd --user comience sin tener que iniciar sesión, debe habilitar systemd-linger:
loginctl enable-linger
Plex Movie
y Plex TV Series
mejora la compatibilidad de los scripts (para coincidencias o para listas de seguimiento). Se recomienda migrar al nuevo agente Plex TV Series.Verifique el pedido de episodios de Plex en comparación con el pedido de Trakt. Si los episodios están en un orden diferente, no debería ser un problema porque están identificados con identificadores. Pero si falta una temporada o un episodio en Trakt (y tmdb), no se puede sincronizar. Puede solucionarlo agregando los episodios que faltan o editando metadatos (por ejemplo, faltan identificadores de tvdb o imdb) en tmdb o informando un problema de metadatos en Trakt (respuestas). Es gratis para cualquiera registrarse y editar información en tmdb. Trakt se actualizará a partir de los datos de tmdb.
Asegúrese de utilizar buenas prácticas sobre el agente Plex y la organización de archivos como se indicó anteriormente. Verifique si no faltan episodios en Trakt como se explicó en la respuesta anterior, y verifique si los identificadores externos están completos en tmdb.
La carpeta de la temporada 0 solo debe contener episodios pertenecientes a la temporada 0, también denominados especiales. Los trailers, escenas eliminadas, reportajes, entrevistas,... deben almacenarse en una carpeta Extra separada (no en la temporada 0) de acuerdo con las reglas de Plex. Tenga en cuenta que las temporadas 0 no son realmente oficiales, por lo que las fuentes de datos (tmdb, imdb y tvdb) a veces no se corresponden. Consulte la temporada 0 de programas en trakt.tv para identificar esos episodios especiales. Utilice tmdb como fuente Plex tanto como pueda.
La forma más sencilla es utilizar contenedores con una carpeta de configuración personalizada para cada usuario: Multi-User docker-compose.
Sí, usando Docker, consulte la página de Discusiones.
Consulte Discusiones, tal vez alguien ya preguntó y encontró la respuesta.