该项目在 trakt.tv 和 Plex 媒体服务器之间添加了双向同步。它需要 trakt.tv 帐户,但不需要 Plex 高级版,也不需要 Trakt VIP 订阅,这与 Trakt 提供的 Plex 应用程序不同。
最初由@Taxel 创建,现在由贡献者维护。
注意:PyTrakt API 密钥未安全存储,因此如果您不希望硬盘上有包含这些密钥的文件,则无法使用此项目。
正在寻找贡献方式?
已知该脚本适用于 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
install 将使用操作系统特定路径进行配置、日志、缓存,有关详细信息,请参阅 platformdirs 文档或检查 info 命令的输出。
您可以像这样设置 docker compose 文件:
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
版本setup.bat
以安装要求并创建可选的快捷方式和例程(需要 Windows 7sp1 - 11) 。注意:不支持此安装方法。它仅由用户贡献记录。
创建容器的选项 1:创建 PlexTraktSync 的手动 Unraid 容器:
ghcr.io/taxel/plextraktsync:latest
(或您想要的任何标签)。-it
进行交互模式。plextraktsync
以启动上述凭据过程。创建容器的选项 2:利用“社区应用程序”Unraid 插件。
安装后(或者如果已经安装):
安排 (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
文件中。 Plex URL 和令牌存储在servers.yml
中。
如果您在 Plex 上启用了两因素身份验证,请在出现提示时输入代码。如果您没有启用 2FA,只需将提示留空并按 Enter 键即可。
可以选择在 Linux 或 macOS 上使用 Cronjobs 以设定的时间间隔运行脚本。
例如,要每两个小时在 cronjob 中运行此脚本:
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
命令查找系统的 plextraktsync 可执行文件并进行相应更新。除了 cron 之外,还可以使用像 Ofelia 这样的 Docker 调度程序来按设定的时间间隔运行脚本。
间隔为 6 小时的 docker compose 示例:
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.default.yml
创建config.yml
。如果您想在首次运行之前自定义设置(例如,您不需要完全同步),您可以在启动脚本之前复制并编辑config.yml
。在这里,在同步部分,您可以通过在文本编辑器中将以下内容从true
设置为false
来禁用它们:
脚本的第一次执行将(取决于您的 PMS 库大小)需要很长时间。之后,电影详细信息和 Trakt 列表都会被缓存,因此第二次运行应该会快得多。然而,这确实意味着 Trakt 列表不会动态更新(这对于“2018 年奥斯卡奖提名者”等列表来说很好,但对于经常更新的列表可能并不理想)。以下是我的 Plex 服务器上的执行时间:第一次运行 - 1228 秒,第二次运行 - 111 秒
您可以在将创建的plextraktsync.log
文件中查看同步进度。
您可以使用--edit
或--locate
标志来config
命令以在编辑器或文件浏览器中打开配置文件。
默认情况下,所有库都会被处理。您可以通过更改config.yml
中的excluded-libraries
来按名称禁用库。
您还可以在servers.yml
中设置每个服务器的excluded-libraries
:
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 会跳过安排新作业运行。
根据作业在服务器上运行所需的时间,您可能必须将两个作业的计划间隔几分钟或几个小时。如果您的 docker compose 中有两个不同的 PlexTraktSync 容器,则可以同时运行它们。
上面的配置意味着作业每 6 小时运行一次,在两个“服务器”之间交替运行。 PlexTraktSync 容器还有一个名为“schedule”的 docker compose 配置文件,这意味着当您运行例如docker compose up
时,它不会自动运行。
默认情况下,日志记录级别为INFO
。通过将config.yml
中的“debug”变量编辑为true
可以将其更改为 DEBUG 。
默认情况下,日志将追加,如果您希望仅维护上次运行的日志,请将config.yml
中的“append”变量编辑为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 命令可用于打印包版本、帐户信息、缓存、配置和日志目录的位置
$ 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"
为了避免各种 shell 出现问题,请将值放在双引号中。
您可以使用watch
命令来监听来自 Plex Media Server 的事件并进行 scrobble 播放。
什么是乱写?
抄写只是意味着自动跟踪您正在观看的内容。此命令无需通过手机登录网站,而是在后台运行,并在您欣赏媒体时自动返回 Trakt - Plex [email protected]
要仅限制您的用户进行记录(推荐),请在config.yml
中设置以下内容:
watch :
username_filter : true
运行watch
命令:
plextraktsync watch
或者
docker compose run --rm plextraktsync watch
或添加command: watch
到 docker compose 文件,然后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 用户服务运行。
本演练允许使用具有相同配置的不同服务器。
这假设您的用户已随pipx
安装了plextraktsync
。
# [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 排序的比较。如果剧集的顺序不同,那应该不是问题,因为它们是用 id 来标识的。但如果 Trakt(和 tmdb)上缺少一季或一集,则无法同步。您可以通过添加缺失的剧集或编辑 tmdb 上的元数据(例如缺失的 tvdb 或 imdb id)来修复它,或在 Trakt 上报告元数据问题(答案)。任何人都可以免费在 tmdb 注册并编辑信息。 Trakt 将从 tmdb 数据更新。
确保您使用如上所述的有关 Plex 代理和文件组织的良好实践。检查 Trakt 上是否没有丢失剧集(如之前的答案中所述),并检查 tmdb 上是否填充了外部 ID。
第 0 季文件夹必须仅包含属于第 0 季的剧集,也称为 Specials。根据 Plex 规则,预告片、删除的场景、特写镜头、采访……必须存储在单独的 Extra 文件夹中(不是第 0 季)。请记住,第 0 季并不是真正的官方数据源,因此数据源(tmdb、imdb 和 tvdb)有时不对应。查看 trakt.tv 上的节目第 0 季以识别那些特别剧集。尽可能使用 tmdb 作为 Plex 源。
最简单的方法是为每个用户使用带有自定义配置文件夹的容器:多用户 docker-compose。
是的,使用 docker,请查看讨论页面。
查看讨论,也许有人已经问过并找到了答案。