Этот проект добавляет двустороннюю синхронизацию между trakt.tv и Plex Media Server. Для этого требуется учетная запись trakt.tv, но без премиум-класса Plex и VIP-подписок Trakt, в отличие от приложения Plex, предоставляемого Trakt.
Первоначально создан @Taxel, теперь поддерживается участниками.
Примечание. Ключи API PyTrakt не хранятся безопасно, поэтому, если вы не хотите, чтобы файл, содержащий их, находился на вашем жестком диске, вы не можете использовать этот проект.
Ищете способ внести свой вклад?
Известно, что скрипт работает с версиями Python 3.9-3.13.
Установка с помощью pipx.
pipx install PlexTraktSync
или, чтобы установить конкретную версию:
pipx install PlexTraktSync==0.15.2 --force
и обновить:
plextraktsync self-update
который просто вызывает pipx
с помощью:
pipx upgrade PlexTraktSync
запустить:
plextraktsync sync
ПРИМЕЧАНИЕ. При установке pipx
будут использоваться пути, специфичные для ОС, для конфигурации, журналов и кэша. Подробности см. в документации по платформенным каталогам или проверьте вывод команды info.
Вы можете настроить файл компоновки Docker следующим образом:
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
Вы можете использовать конкретную версию 0.25.16
:
image: ghcr.io/taxel/plextraktsync:0.25.16
или последняя версия 0.25.x:
image: ghcr.io/taxel/plextraktsync:0.25
Примечание. main
— это версия разработки, и отчеты об ошибках в версиях разработки не поддерживаются.
Чтобы запустить синхронизацию:
docker compose run --rm plextraktsync sync
Контейнер остановится после завершения синхронизации. Прочтите раздел «Настройка», чтобы запустить его автоматически через заданные промежутки времени.
Это установка версии для разработки, чтобы проверить, решит ли запрос на вытягивание какую-либо проблему.
См. руководство по установке кода из запроса на включение.
ПРИМЕЧАНИЕ. Этот метод установки не поддерживается. Это задокументировано исключительно на основе вклада пользователей.
.zip
с https://github.com/Taxel/PlexTraktSync/tags.setup.bat
, чтобы установить требования и создать дополнительные ярлыки и процедуры (требуется Windows 7sp1–11) .ПРИМЕЧАНИЕ. Этот метод установки не поддерживается. Это задокументировано исключительно на основе вклада пользователей.
Вариант 1 создания контейнера: создайте вручную Unraid-контейнер PlexTraktSync:
ghcr.io/taxel/plextraktsync:latest
(или любой другой тег, который вам нужен).-it
для интерактивного режима.plextraktsync
, чтобы начать процесс учетных данных, описанный выше.Вариант 2 создания контейнера: используйте плагин Unraid «Community Apps».
После установки (или если уже установлено):
Запланируйте (cron) запуск контейнера через заданные интервалы времени для обработки синхронизации.
После установки (или если уже установлено):
#!/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
ПРИМЕЧАНИЕ. Этот метод установки не поддерживается. Если вы используете этот метод установки, вы не получите поддержку.
Установка с GitHub считается режимом разработчика и описана в CONTRIBUTING.md.
Вам нужно будет создать приложение Trakt API, если у вас его еще нет:
urn:ietf:wg:oauth:2.0:oob
в качестве URL-адреса перенаправления. Запустите plextraktsync login
, скрипт запросит недостающие учетные данные.
Примечание. Чтобы настроить учетные данные в Docker-контейнере, обратитесь к разделу «Запуск Docker-контейнера».
При первом запуске вам будет предложено настроить доступ к Trakt и Plex.
Следуйте инструкциям, ваши учетные данные и ключи API будут сохранены в файлах .env
и .pytrakt.json
. URL-адрес и токен Plex хранятся в servers.yml
.
Если у вас включена двухфакторная аутентификация на Plex, введите код при появлении запроса. Если у вас не включен 2FA, просто оставьте поле пустым и нажмите Enter.
Cronjobs можно дополнительно использовать в Linux или macOS для запуска сценария через заданные промежутки времени.
Например, чтобы запускать этот скрипт в cronjob каждые два часа:
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
, чтобы найти исполняемый файл plextraktsync вашей системы и соответствующим образом обновить его.Вместо cron можно также использовать планировщик докеров, такой как Ofelia, для запуска сценария через заданные интервалы времени.
Пример создания докера с интервалом в 6 часов:
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
Чтобы отключить часть функциональности этого программного обеспечения, не ищите ничего, кроме config.yml
. При первом запуске скрипт создаст config.yml
на основе config.default.yml
. Если вы хотите настроить параметры перед первым запуском (например, вам не нужна полная синхронизация), вы можете скопировать и отредактировать config.yml
перед запуском скрипта. Здесь, в разделе синхронизации, вы можете отключить следующие вещи, установив для них значение true
в false
в текстовом редакторе:
Первое выполнение скрипта (в зависимости от размера вашей библиотеки PMS) займет много времени. После этого сведения о фильмах и списки Trakt кэшируются, поэтому во второй раз они должны работать намного быстрее. Однако это означает, что списки Trakt не обновляются динамически (что хорошо для таких списков, как «Номинанты премии Оскар 2018», но может быть не идеальным для списков, которые часто обновляются). Вот время выполнения на моем сервере Plex: первый запуск — 1228 секунд, второй запуск — 111 секунд.
Вы можете просмотреть ход синхронизации в файле plextraktsync.log
, который будет создан.
Вы можете использовать флаги --edit
или --locate
для команды config
, чтобы открыть файл конфигурации в редакторе или в браузере файлов.
По умолчанию обрабатываются все библиотеки. Вы можете отключить библиотеки по имени, изменив excluded-libraries
в config.yml
.
Вы также можете установить excluded-libraries
для каждого сервера в servers.yml
:
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
excluded-libraries :
- " Family Movies "
Кроме того, вы можете указать только библиотеки для обработки, в этом случае глобальные excluded-libraries
не будут использоваться для этого сервера.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
libraries :
- " Movies "
- " TV Shows "
окончательный список библиотек можно увидеть с помощью команды info:
$ plextraktsync --server=Example1 info
Enabled 2 libraries in Plex Server:
- 1: Movies
- 2: TV Shows
Если вы хотите указать свою конфигурацию для каждого сервера, вы можете сделать это внутри servers.yml
. В разделе config
сервера вы можете указать, как должен работать этот конкретный сервер.
servers :
Example1 :
token : ~
urls :
- http://localhost:32400
config :
sync :
plex_to_trakt :
collection : true
trakt_to_plex :
liked_lists : false
Использование sync
в конфигурации сервера переопределяет глобальную конфигурацию синхронизации в config.yml
.
Это также можно использовать для разных конфигураций между разными библиотеками. Чтобы иметь возможность сделать это, вы указываете необходимое количество серверов (скорее всего, равное количеству различных настроек конфигурации, которые вам нужны). Например:
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
Приведенная выше конфигурация позволит библиотеке «Фильмы» синхронизировать как рейтинги, так и статус просмотра, а библиотека «Телешоу» синхронизирует только рейтинги. Чтобы затем запустить синхронизацию, вам нужно указать --server Example1
или --server Example2
чтобы запустить синхронизацию для этого конкретного сервера.
Запуск команды синхронизации без --server
будет использовать сервер по умолчанию из .env
Если вы хотите запускать эти задания с помощью ofelia
, вы можете сделать это, запустив что-то подобное в своем 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 "
Если вы используете только один контейнер PlexTraktSync, вам необходимо убедиться, что два задания Ofelia не выполняются одновременно. Ofelia пропускает планирование запуска нового задания, если предыдущее задание все еще выполняется.
В зависимости от того, сколько времени потребуется для выполнения задания на вашем сервере, вам, возможно, придется разделить расписание двух заданий на несколько минут или несколько часов. Если у вас есть два разных контейнера PlexTraktSync в компоновке докера, вы можете запустить их одновременно.
Приведенная выше конфигурация означает, что задание выполняется каждые 6 часов попеременно на двух «серверах». Контейнер PlexTraktSync также имеет профиль создания Docker, называемый «расписание», что означает, что он не будет запускаться автоматически, когда вы запускаете, например, docker compose up
.
Уровень ведения журнала по умолчанию — INFO
. Его можно изменить на DEBUG, отредактировав переменную «debug» в config.yml
на true
.
По умолчанию журналы добавляются. Если вы хотите сохранить журнал только вашего последнего запуска, измените переменную «append» в config.yml
на false
.
Запустите plextraktsync --help
, чтобы просмотреть доступные команды. Запустите plextraktsync COMMAND --help
, чтобы просмотреть справку по 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
Вы можете внести недостающую документацию самостоятельно.
Субкоманда sync
поддерживает параметры --sync=shows
и --sync=movies
, поэтому вы можете синхронизировать только определенные типы библиотек. Или только список наблюдения: --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.
Вы можете использовать команду unmatched
для сканирования вашей библиотеки и отображения непревзойденных фильмов.
Поддержка непревзойденных шоу пока не реализована.
plextraktsync unmatched
Команда info может использоваться для печати версий пакетов, информации об учетной записи, расположения каталогов Cache, Config и 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']
Команда Inspect используется для получения информации об элементах Plex Media Server, что полезно при отладке проблем и сообщении о проблемах.
123
plextraktsync inspect 123
plextraktsync inspect "https://app.plex.tv/desktop/#!/server/53aff62c4bb6027c1ada814d417e83ccdf4d5045/details?key=/library/metadata/123"
Чтобы избежать проблем с различными оболочками, заключайте значение в двойные кавычки.
Вы можете использовать команду watch
для прослушивания событий с Plex Media Server и прокрутки воспроизведения.
Что такое скробблинг?
Скробблинг просто означает автоматическое отслеживание того, что вы смотрите. Вместо того, чтобы проверять веб-сайт с телефона, эта команда запускается в фоновом режиме и автоматически возвращается к Trakt, пока вы наслаждаетесь просмотром медиафайлов — Plex [email protected]
Чтобы ограничить скробблинг только вашим пользователем (рекомендуется), установите в config.yml
следующее:
watch :
username_filter : true
Чтобы запустить команду watch
:
plextraktsync watch
или
docker compose run --rm plextraktsync watch
или добавьте command: watch
, как создается файл docker, и docker compose up -d plextraktsync
чтобы запустить отсоединенный контейнер:
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
Создайте модуль systemd, чтобы он автоматически сканировался в фоновом режиме:
[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
Обратите внимание: в зависимости от метода установки вам может потребоваться настроить команду ExecStart следующим образом:
ExecStart =/path/to/plextraktsync/plextraktsync.sh watch
После этого вам необходимо будет включить услугу:
sudo systemctl daemon-reload
sudo systemctl start PlexTraktSync.service
sudo systemctl enable PlexTraktSync.service
Вы также можете запустить как пользовательскую службу systemd.
Это пошаговое руководство позволяет использовать разные серверы с одной и той же конфигурацией.
Предполагается, что plextraktsync
установлен вместе с pipx
для вашего пользователя.
# [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
Установите файл шаблона службы:
root
: /etc/xdg/systemd/user/[email protected]
для всех пользователей~/.config/systemd/user/[email protected]
только для вашего пользователяДалее вам нужно перезагрузить systemd:
root
: sudo systemctl daemon-reload
systemctl --user daemon-reload
Теперь создайте экземпляры на основе имен серверов из servers.yml
, в этом примере SERVER_NAME
.
systemctl --user start "plextraktsync@SERVER_NAME.service"
systemctl --user status "plextraktsync@SERVER_NAME.service"
для полных журналов вы можете использовать journalctl
(добавьте -f
, чтобы следить за журналами):
journalctl --user -u "plextraktsync@SERVER_NAME.service"
Если все работает, включите автоматический запуск при перезагрузке хоста.
systemctl --user enable "plextraktsync@SERVER_NAME.service"
Чтобы сеанс systemd --user запускался без необходимости входа в систему, вам необходимо включить systemd-linger:
loginctl enable-linger
Plex Movie
и Plex TV Series
по умолчанию улучшает совместимость сценариев (для сопоставления или для списка просмотра). Рекомендуется перейти на новый агент Plex TV Series.Сравните порядок эпизодов Plex с заказом Trakt. Если эпизоды расположены в другом порядке, это не должно быть проблемой, поскольку они идентифицируются по идентификаторам. Но если сезон или серия отсутствуют в Trakt (и tmdb), их невозможно синхронизировать. Вы можете исправить это, добавив недостающие эпизоды или отредактировав метаданные (например, отсутствующие идентификаторы tvdb или imdb) в tmdb или сообщив о проблеме с метаданными в Trakt (ответы). Любой может бесплатно зарегистрироваться и редактировать информацию на tmdb. Trakt будет обновляться на основе данных tmdb.
Обязательно используйте передовые методы организации агента Plex и файлов, как указано выше. Проверьте, не отсутствуют ли эпизоды в Trakt, как описано в предыдущем ответе, и проверьте, заполнены ли внешние идентификаторы в tmdb.
Папка сезона 0 должна содержать только серии, принадлежащие сезону 0, которые также называются специальными. Трейлеры, удаленные сцены, короткометражки, интервью... должны храниться в отдельной папке Extra (не в сезоне 0) согласно правилам Plex. Имейте в виду, что сезоны 0 на самом деле не являются официальными, поэтому источники данных (tmdb, imdb и tvdb) иногда не совпадают. Проверьте нулевой сезон шоу на trakt.tv, чтобы найти эти специальные эпизоды. Используйте tmdb в качестве источника Plex как можно чаще.
Самый простой способ — использовать контейнеры с собственной папкой конфигурации для каждого пользователя: Multi-User docker-compose.
Да, используя Docker, проверьте страницу «Обсуждения».
Посмотрите Обсуждения, возможно кто-то уже спрашивал и нашел ответ.