Este projeto adiciona uma sincronização bidirecional entre trakt.tv e Plex Media Server. Requer uma conta trakt.tv, mas nenhuma assinatura Plex premium e nenhuma assinatura Trakt VIP, ao contrário do aplicativo Plex fornecido pela Trakt.
Originalmente criado por @Taxel, agora mantido por colaboradores.
Nota: As chaves da API PyTrakt não são armazenadas de forma segura, portanto, se você não quiser ter um arquivo contendo essas chaves em seu disco rígido, não poderá usar este projeto.
Procurando uma maneira de contribuir?
O script é conhecido por funcionar com versões Python 3.9-3.13.
Instalação com pipx.
pipx install PlexTraktSync
ou, para instalar uma versão específica:
pipx install PlexTraktSync==0.15.2 --force
e para atualizar:
plextraktsync self-update
que apenas chama pipx
com:
pipx upgrade PlexTraktSync
para executar:
plextraktsync sync
NOTA: a instalação pipx
usará caminhos específicos do sistema operacional para Config, Logs, Cache, consulte a documentação do platformdirs para obter detalhes ou verifique a saída do comando info.
Você pode configurar o arquivo docker compose assim:
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
Você pode usar a versão específica 0.25.16
:
image: ghcr.io/taxel/plextraktsync:0.25.16
ou versão 0.25.x mais recente:
image: ghcr.io/taxel/plextraktsync:0.25
Nota: main
é a versão de desenvolvimento e não há suporte para relatórios de bugs em versões de desenvolvimento.
Para executar a sincronização:
docker compose run --rm plextraktsync sync
O contêiner irá parar após a conclusão da sincronização. Leia a seção Configuração para executá-lo automaticamente em intervalos definidos.
Isto é para instalar a versão de desenvolvimento para testar se a solicitação pull resolveria algum problema.
Consulte o guia de contribuição sobre como instalar o código da solicitação pull.
NOTA: Este método de instalação não é compatível. É documentado apenas pela contribuição do usuário.
.zip
mais recente em https://github.com/Taxel/PlexTraktSync/tagssetup.bat
para instalar requisitos e criar atalhos e rotinas opcionais (requer Windows 7sp1 - 11) .NOTA: Este método de instalação não é compatível. É documentado apenas pela contribuição do usuário.
Opção 1 para criação de contêiner: Crie um contêiner Unraid manual do PlexTraktSync:
ghcr.io/taxel/plextraktsync:latest
(ou qualquer tag que você desejar).-it
para o modo interativo.plextraktsync
para iniciar o processo de credencial descrito acima.Opção 2 para criação de contêiner: Utilize o plug-in Unraid "Aplicativos comunitários".
Depois de instalado (ou se já estiver instalado):
Programe (cron) o contêiner para iniciar em determinados intervalos para processar a sincronização
Depois de instalado (ou se já estiver 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 instalação não é compatível. Você não receberá suporte se usar este método de instalação.
A instalação do GitHub é considerada modo de desenvolvedor e está documentada em CONTRIBUTING.md.
Você precisará criar um aplicativo Trakt API se ainda não tiver um:
urn:ietf:wg:oauth:2.0:oob
como o URL de redirecionamento Execute plextraktsync login
, o script solicitará credenciais ausentes
Nota Para configurar as credenciais no Docker Container, consulte a seção Executar o Docker Container
Na primeira execução, você será solicitado a configurar o acesso ao Trakt e Plex.
Siga as instruções, suas credenciais e chaves API serão armazenadas nos arquivos .env
e .pytrakt.json
. O URL e o token do Plex são armazenados em servers.yml
.
Se você tiver a autenticação de 2 fatores habilitada no Plex, insira o código quando solicitado. Se você não tiver o 2FA ativado, deixe o prompt em branco e pressione Enter.
Cronjobs podem ser usados opcionalmente no Linux ou macOS para executar o script em intervalos definidos.
Por exemplo, para executar este script em um cronjob a cada duas horas:
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
para localizar o arquivo executável plextraktsync do seu sistema e atualizá-lo adequadamente.Em vez do cron, um agendador docker como o Ofelia também pode ser usado para executar o script em intervalos definidos.
Um exemplo docker compose com intervalo de 6h:
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 desabilitar partes da funcionalidade deste software, basta procurar config.yml
. Na primeira execução, o script criará config.yml
com base em config.default.yml
. Se quiser personalizar as configurações antes da primeira execução (por exemplo, não quiser sincronização completa), você pode copiar e editar config.yml
antes de iniciar o script. Aqui, na seção de sincronização, você pode desabilitar os seguintes itens, definindo-os de true
para false
em um editor de texto:
A primeira execução do script (dependendo do tamanho da sua biblioteca PMS) levará muito tempo. Depois disso, os detalhes do filme e as listas do Trakt são armazenados em cache, portanto, ele deve ser executado muito mais rápido na segunda vez. Isso significa, no entanto, que as listas do Trakt não são atualizadas dinamicamente (o que é bom para listas como "Indicados ao Oscar de 2018", mas pode não ser ideal para listas que são atualizadas com frequência). Aqui estão os tempos de execução no meu servidor Plex: Primeira execução – 1228 segundos, segunda execução – 111 segundos
Você pode visualizar o progresso da sincronização no arquivo plextraktsync.log
que será criado.
Você pode usar os sinalizadores --edit
ou --locate
para o comando config
para abrir o arquivo de configuração no editor ou no navegador de arquivos.
Por padrão, todas as bibliotecas são processadas. Você pode desabilitar bibliotecas por nome alterando excluded-libraries
em config.yml
.
Você também pode definir excluded-libraries
por servidor em servers.yml
:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
excluded-libraries :
- " Family Movies "
Além disso, você pode listar apenas bibliotecas a serem processadas; nesse caso, excluded-libraries
globais não serão usadas para este servidor.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
- " TV Shows "
você pode ver a lista final de bibliotecas com o comando info:
$ plextraktsync --server=Example1 info
Enabled 2 libraries in Plex Server:
- 1: Movies
- 2: TV Shows
Se você quiser especificar sua configuração por servidor, poderá fazê-lo dentro de servers.yml
. Na parte de config
da configuração do servidor você pode especificar como esse servidor específico deve funcionar.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
sync :
plex_to_trakt :
collection : true
trakt_to_plex :
liked_lists : false
Usar sync
em uma configuração de servidor substitui a sincronização global em config.yml
.
Isso também pode ser usado para ter configurações diferentes entre bibliotecas diferentes. Para poder fazer isso, você especifica o número de servidores necessários (provavelmente igual ao número de configurações diferentes necessárias). Por exemplo:
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
A configuração acima faria com que a biblioteca "Filmes" sincronizasse as classificações e o status assistido, enquanto a biblioteca "Programas de TV" sincronizasse apenas as classificações. Para executar a sincronização, você precisa especificar --server Example1
ou --server Example2
para executar a sincronização para esse servidor específico.
Executar o comando de sincronização sem --server
usará o servidor padrão de .env
Se quiser executar esses trabalhos usando ofelia
, você pode fazer isso executando algo semelhante a isto em seu 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 "
Se você estiver executando apenas um contêiner PlexTraktSync, precisará garantir que os dois trabalhos Ofelia não sejam executados ao mesmo tempo. Ofelia ignora o agendamento de uma nova execução de trabalho se o trabalho anterior ainda estiver em execução.
Dependendo de quanto tempo leva para o trabalho ser executado em seu servidor, talvez seja necessário manter a programação dos dois trabalhos separados por alguns minutos ou algumas horas. Se você tiver dois contêineres PlexTraktSync diferentes em seu docker compose, poderá executá-los ao mesmo tempo.
A configuração acima significa que um job é executado a cada 6 horas, alternando entre os dois “servidores”. O contêiner PlexTraktSync também possui um perfil docker compose chamado "schedule", o que significa que ele não será executado automaticamente quando você executar, por exemplo, docker compose up
.
O nível de criação de log por padrão é INFO
. Isso pode ser alterado para DEBUG editando a variável "debug" em config.yml
para true
.
Por padrão, os logs serão anexados, se você deseja manter o log apenas da sua última execução, edite a variável "append" em config.yml
para false
.
Execute plextraktsync --help
para ver os comandos disponíveis. Execute plextraktsync COMMAND --help
para ver ajuda 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
Você pode contribuir com a documentação que falta.
O subcomando sync
suporta as opções --sync=shows
e --sync=movies
, para que você possa sincronizar apenas tipos de biblioteca específicos. Ou apenas watchlist: --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.
Você pode usar um comando unmatched
para digitalizar sua biblioteca e exibir filmes incomparáveis.
O suporte para programas incomparáveis ainda não foi implementado.
plextraktsync unmatched
O comando info pode ser usado para imprimir versões de pacotes, informações de contas, localizações de diretórios de Cache, Config e 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']
O comando Inspecionar é usado para obter informações sobre itens do Plex Media Server, o que é útil ao depurar problemas e relatar problemas.
123
plextraktsync inspect 123
plextraktsync inspect "https://app.plex.tv/desktop/#!/server/53aff62c4bb6027c1ada814d417e83ccdf4d5045/details?key=/library/metadata/123"
Para evitar problemas com vários shells, coloque o valor entre aspas duplas.
Você pode usar o comando watch
para ouvir eventos do Plex Media Server e reproduções de scrobble.
O que é scrobble?
Scrobbling significa simplesmente rastrear automaticamente o que você está assistindo. Em vez de fazer check-in do telefone do site, este comando é executado em segundo plano e volta automaticamente para o Trakt enquanto você assiste sua mídia - Plex [email protected]
Para restringir o scrobbling apenas ao seu usuário (recomendado), defina o seguinte em seu config.yml
:
watch :
username_filter : true
Para executar o comando watch
:
plextraktsync watch
ou
docker compose run --rm plextraktsync watch
ou adicione command: watch
to docker compose file e docker compose up -d plextraktsync
para iniciar o contêiner desanexado:
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
Crie uma unidade systemd para que ela funcione automaticamente em 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
Observe que, dependendo do seu método de instalação, pode ser necessário definir o comando ExecStart da seguinte maneira:
ExecStart =/path/to/plextraktsync/plextraktsync.sh watch
Depois disso, você precisará ativar o serviço:
sudo systemctl daemon-reload
sudo systemctl start PlexTraktSync.service
sudo systemctl enable PlexTraktSync.service
Você também pode executar como serviço de usuário do systemd.
Este passo a passo permite usar diferentes servidores com a mesma configuração.
Isso pressupõe que plextraktsync
esteja instalado com pipx
para o seu usuário.
# [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 o arquivo de modelo de serviço:
root
: /etc/xdg/systemd/user/[email protected]
para todos os usuários~/.config/systemd/user/[email protected]
apenas para seu usuárioEm seguida, você precisa recarregar o systemd:
root
: sudo systemctl daemon-reload
systemctl --user daemon-reload
Agora crie instâncias baseadas em nomes de servidores de servers.yml
, neste exemplo SERVER_NAME
.
systemctl --user start "plextraktsync@SERVER_NAME.service"
systemctl --user status "plextraktsync@SERVER_NAME.service"
para logs completos, você pode usar journalctl
(adicione -f
para seguir os logs):
journalctl --user -u "plextraktsync@SERVER_NAME.service"
Se tudo funcionar, habilite-o para inicialização automática na reinicialização do host
systemctl --user enable "plextraktsync@SERVER_NAME.service"
Para que a sessão systemd --user seja iniciada sem a necessidade de fazer login, você precisa habilitar o systemd-linger:
loginctl enable-linger
Plex Movie
e Plex TV Series
melhora a compatibilidade do script (para correspondência ou para lista de observação). Recomenda-se migrar para o novo agente Plex TV Series.Verifique a ordem dos episódios do Plex em comparação com a ordem do Trakt. Se os episódios estiverem em uma ordem diferente, não deverá haver problema, pois eles são identificados com ids. Mas se uma temporada ou episódio estiver faltando no Trakt (e no tmdb), ele não poderá ser sincronizado. Você pode corrigi-lo adicionando os episódios ausentes ou editando metadados (por exemplo, tvdb ou imdb ids ausentes) no tmdb ou relatando um problema de metadados no Trakt (respostas). É gratuito para qualquer pessoa se inscrever e editar informações no tmdb. O Trakt será atualizado a partir dos dados do tmdb.
Certifique-se de usar boas práticas sobre o agente Plex e organização de arquivos conforme declarado acima. Verifique se os episódios não estão faltando no Trakt conforme explicado na resposta anterior e verifique se os IDs externos estão preenchidos no tmdb.
A pasta da temporada 0 deve conter apenas episódios pertencentes à temporada 0, também chamados de especiais. Trailers, cenas excluídas, featurettes, entrevistas,... devem ser armazenados em uma pasta Extra separada (não na temporada 0) de acordo com as regras do Plex. Tenha em mente que as temporadas 0 não são realmente oficiais, então as fontes de dados (tmdb, imdb e tvdb) às vezes não correspondem. Verifique a temporada 0 dos programas no trakt.tv para identificar esses episódios especiais. Use tmdb como fonte Plex tanto quanto possível.
A maneira mais fácil é usar contêineres com pasta de configuração personalizada para cada usuário: Multiusuário docker-compose.
Sim, usando o docker, verifique a página de discussões.
Verifique as discussões, talvez alguém já tenha perguntado e encontrado a resposta.