이 프로젝트는 trakt.tv와 Plex Media Server 간의 양방향 동기화를 추가합니다. Trakt에서 제공하는 Plex 앱과 달리 trakt.tv 계정이 필요하지만 Plex 프리미엄 및 Trakt VIP 구독이 필요하지 않습니다.
원래는 @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
설치는 구성, 로그, 캐시에 대한 OS 특정 경로를 사용합니다. 자세한 내용은 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 앱이 없는 경우 Trakt API 앱을 만들어야 합니다.
urn:ietf:wg:oauth:2.0:oob
입력하세요. plextraktsync login
실행하면 스크립트에서 누락된 자격 증명을 요청합니다.
참고 Docker 컨테이너에서 자격 증명을 설정하려면 Docker 컨테이너 실행 섹션을 참조하세요.
처음 실행하면 Trakt 및 Plex 액세스를 설정하라는 메시지가 표시됩니다.
지침을 따르면 자격 증명과 API 키가 .env
및 .pytrakt.json
파일에 저장됩니다. Plex URL과 토큰은 servers.yml
에 저장됩니다.
Plex에서 2단계 인증을 활성화한 경우 메시지가 표시되면 코드를 입력하세요. 2FA를 활성화하지 않은 경우 프롬프트를 비워두고 Enter 키를 누르세요.
Cronjob은 Linux 또는 macOS에서 선택적으로 사용하여 설정된 간격으로 스크립트를 실행할 수 있습니다.
예를 들어 cronjob에서 2시간마다 이 스크립트를 실행하려면 다음을 수행하세요.
$ crontab -e
0 */2 * * * $HOME/.local/bin/plextraktsync sync
which plextraktsync
명령을 사용하여 시스템의 plextraktsync 실행 파일을 찾고 그에 따라 업데이트하십시오.cron 대신 Ofelia와 같은 도커 스케줄러를 사용하여 설정된 간격으로 스크립트를 실행할 수도 있습니다.
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 Academy Award Nominees"와 같은 목록에는 적합하지만 자주 업데이트되는 목록에는 적합하지 않을 수 있습니다. 내 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
의 전역 sync-config가 재정의됩니다.
이는 또한 서로 다른 라이브러리 간에 서로 다른 구성을 갖는 데 사용될 수도 있습니다. 이를 수행하려면 필요한 서버 수를 지정해야 합니다(필요한 다양한 구성 설정 수와 거의 동일할 가능성이 높음). 예를 들어:
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
위 구성을 사용하면 "영화" 라이브러리는 등급과 시청 상태를 모두 동기화하고 "TV 쇼" 라이브러리는 등급만 동기화하도록 합니다. 그런 다음 동기화를 실행하려면 --server Example1
또는 --server Example2
지정하여 해당 특정 서버에 대한 동기화를 실행해야 합니다.
--server
없이 sync 명령을 실행하면 .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
실행하세요. COMMAND
에 대한 도움말을 보려면 plextraktsync COMMAND --help
실행하세요.
$ 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"
다양한 쉘과 관련된 문제를 방지하려면 값을 큰따옴표로 묶으십시오.
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 compose up -d plextraktsync
분리된 컨테이너를 시작합니다.
version : " 2 "
services :
plextraktsync :
image : ghcr.io/taxel/plextraktsync
volumes :
- ./config:/app/config
command : watch
백그라운드에서 자동으로 스크롤되도록 시스템 단위를 만듭니다.
[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
시스템 사용자 서비스로 실행할 수도 있습니다.
이 연습을 통해 동일한 구성으로 다른 서버를 사용할 수 있습니다.
이는 사용자를 위해 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 에이전트로 마이그레이션하는 것이 좋습니다.Trakt 주문과 비교하여 Plex 에피소드 주문을 확인하세요. 에피소드의 순서가 다르더라도 ID로 식별되므로 문제가 되지 않습니다. 하지만 Trakt(및 tmdb)에 시즌이나 에피소드가 누락된 경우 동기화할 수 없습니다. 누락된 에피소드를 추가하거나 tmdb에서 메타데이터(예: 누락된 tvdb 또는 imdb ID)를 편집하거나 Trakt(답변)에서 메타데이터 문제를 보고하여 문제를 해결할 수 있습니다. tmdb에 가입하고 정보를 편집하는 것은 누구나 무료입니다. Trakt는 tmdb 데이터에서 업데이트됩니다.
위에서 설명한 대로 Plex 에이전트 및 파일 구성에 대한 모범 사례를 사용하십시오. 이전 답변에서 설명한 대로 Trakt에서 에피소드가 누락되지 않았는지 확인하고, tmdb에 외부 ID가 채워져 있는지 확인하세요.
시즌 0 폴더에는 시즌 0에 속하는 에피소드(스페셜이라고도 함)만 포함되어야 합니다. 예고편, 삭제된 장면, 특집, 인터뷰 등은 Plex 규칙에 따라 별도의 Extra 폴더(시즌 0이 아님)에 저장해야 합니다. 시즌 0은 실제로 공식적인 것이 아니므로 데이터 소스(tmdb, imdb 및 tvdb)가 때때로 일치하지 않는다는 점을 명심하세요. 특별 에피소드를 확인하려면 trakt.tv에서 프로그램의 시즌 0을 확인하세요. 가능한 한 tmdb를 Plex 소스로 사용하세요.
가장 쉬운 방법은 각 사용자에 대한 사용자 정의 구성 폴더가 있는 컨테이너(다중 사용자 docker-compose)를 사용하는 것입니다.
예, docker를 사용하고 있습니다. 토론 페이지를 확인하세요.
토론을 확인하세요. 누군가가 이미 질문하고 답변을 찾았을 수도 있습니다.