該專案在 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,請查看討論頁面。
查看討論,也許有人已經問過並找到了答案。