{"id":42006403,"url":"https://github.com/cenodude/CrossWatch","last_synced_at":"2026-02-05T01:01:00.119Z","repository":{"id":314265696,"uuid":"1045768564","full_name":"cenodude/CrossWatch","owner":"cenodude","description":"Synchronize your data across Plex, Jellyfin, Emby, SIMKL, Trakt,  AniList, TMDb, MDBlist, and more. Keep your movies and shows in sync, no matter where you watch.","archived":false,"fork":false,"pushed_at":"2026-02-01T15:09:06.000Z","size":24417,"stargazers_count":452,"open_issues_count":5,"forks_count":11,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-02-01T23:49:56.595Z","etag":null,"topics":["anilist","emby","jellyfin","mdblist","media-sync","media-synchronisation","plex","plex-media-server","simkl","tautulli","tmdb","trakt","watcher","webhook"],"latest_commit_sha":null,"homepage":"https://wiki.crosswatch.app","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cenodude.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"cenodude"}},"created_at":"2025-08-27T17:26:22.000Z","updated_at":"2026-02-01T23:24:11.000Z","dependencies_parsed_at":"2025-09-11T14:15:25.110Z","dependency_job_id":"cacc4002-edee-4ff1-bbf9-d937ef6288d0","html_url":"https://github.com/cenodude/CrossWatch","commit_stats":null,"previous_names":["cenodude/crosswatch"],"tags_count":85,"template":false,"template_full_name":null,"purl":"pkg:github/cenodude/CrossWatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenodude%2FCrossWatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenodude%2FCrossWatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenodude%2FCrossWatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenodude%2FCrossWatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cenodude","download_url":"https://codeload.github.com/cenodude/CrossWatch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cenodude%2FCrossWatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29105268,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T00:52:08.035Z","status":"ssl_error","status_checked_at":"2026-02-05T00:52:07.703Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anilist","emby","jellyfin","mdblist","media-sync","media-synchronisation","plex","plex-media-server","simkl","tautulli","tmdb","trakt","watcher","webhook"],"created_at":"2026-01-26T02:00:37.113Z","updated_at":"2026-02-05T01:01:00.112Z","avatar_url":"https://github.com/cenodude.png","language":"Python","funding_links":["https://buymeacoffee.com/cenodude","https://www.buymeacoffee.com/cenodude"],"categories":["Python","others"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003cimg src=\".gitbook/assets/CrossWatch.png\" alt=\"CrossWatch\" width=\"480\"\u003e\u003c/div\u003e\n\n\u003c!-- Screenshots row  --\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"images/screenshot1.jpg\"\u003e\n    \u003cimg src=\".gitbook/assets/screenshot1.jpg\" alt=\"CrossWatch - Screenshot 1\" width=\"180\" style=\"border-radius:10px; margin:6px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"images/screenshot2.jpg\"\u003e\n    \u003cimg src=\".gitbook/assets/screenshot2.jpg\" alt=\"CrossWatch - Screenshot 2\" width=\"180\" style=\"border-radius:10px; margin:6px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"images/screenshot3.jpg\"\u003e\n    \u003cimg src=\".gitbook/assets/screenshot3.jpg\" alt=\"CrossWatch - Screenshot 3\" width=\"180\" style=\"border-radius:10px; margin:6px;\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"images/screenshot4.jpg\"\u003e\n    \u003cimg src=\".gitbook/assets/screenshot4.jpg\" alt=\"CrossWatch - Screenshot 4\" width=\"180\" style=\"border-radius:10px; margin:6px;\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\" style=\"font-size:14px;\"\u003e\n  \u003cb\u003e⭐ Star this repository to get updates\u003c/b\u003e\n\u003c/p\u003e\n\u003cimg width=\"1566\" height=\"631\" alt=\"providers1 (1)\" src=\"https://github.com/user-attachments/assets/fa833ac6-ff96-440d-bfc0-5f749120af8c\" /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/cenodude/CrossWatch/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/cenodude/CrossWatch?display_name=release\u0026amp;sort=semver\u0026amp;logo=github\u0026amp;label=Latest%20Release\u0026amp;style=for-the-badge\" alt=\"Latest Release\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/cenodude/CrossWatch/pkgs/container/crosswatch\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/dynamic/json?url=https://ghcr-badge.elias.eu.org/api/cenodude/CrossWatch/crosswatch\u0026amp;query=%24.downloadCount\u0026amp;style=for-the-badge\u0026amp;logo=github\u0026amp;label=GHCR%20Pulls\" alt=\"GHCR Pulls\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://wiki.crosswatch.app/getting-started/first-time-setup\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Quick%20Start-Must%20read!-d93c4a?style=for-the-badge\u0026amp;logo=gitbook\" alt=\"Must-read: Quick Start\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://hub.docker.com/r/cenodude/crosswatch\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/pulls/cenodude/crosswatch?style=for-the-badge\u0026amp;logo=docker\u0026amp;label=Docker%20Pulls\" alt=\"Docker Pulls\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/cenodude/crosswatch\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/image-size/cenodude/crosswatch/latest?style=for-the-badge\u0026amp;logo=docker\u0026amp;label=Image%20Size\" alt=\"Image Size\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/cenodude/crosswatch/tags\"\u003e\n    \u003cimg src=\"https://img.shields.io/docker/v/cenodude/crosswatch?sort=semver\u0026amp;style=for-the-badge\u0026amp;logo=docker\u0026amp;label=Docker%20Version\" alt=\"Docker Version\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\n  \u003ca href=\"https://www.crosswatch.app/\" style=\"margin: 0 6px;\"\u003e\n    \u003cimg alt=\"Website\" src=\"https://img.shields.io/badge/Website-crosswatch.app-B026FF?style=for-the-badge\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://wiki.crosswatch.app/\" style=\"margin: 0 6px;\"\u003e\n    \u003cimg alt=\"Wiki\" src=\"https://img.shields.io/badge/Wiki-wiki.crosswatch.app-B026FF?style=for-the-badge\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\n**CrossWatch/CW** is a synchronization engine that keeps your **Plex, Jellyfin, Emby, SIMKL, Trakt, AniList, TMDb, MDBList and Tautulli** in sync. It runs locally with a web UI where you link accounts, define sync pairs, run them manually or on a schedule, and review stats and history. CW also includes its own tracker to keep your data safe with snapshots.\n\nSupported: **Movies** and **TV shows / episodes / Seasons**\\\nSupported: **Plex, Emby, Jellyfin, MDBList, Tautulli, AniList, Trakt, SIMKL, TMDb and CW internal tracker**\\\n\n\u003e **Not supported (yet): Multi-users / Multi-servers per instance**  \n\u003e CrossWatch currently supports **one user and one server per instance**.  \n\u003e Need multiple users/servers? Run **multiple containers** (one per user/server).\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e Important: Multi-user / multi-server support is in progress.\u003c/b\u003e\u003cbr\u003e\n  Track progress here: \u003ca href=\"https://github.com/cenodude/CrossWatch/issues/73\"\u003eIssue #73\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003cimg\n  align=\"right\"\n  src=\"https://github.com/user-attachments/assets/f219a392-839f-4ced-a263-1c745fbdf999\"\n  alt=\"CrossWatch mobile\"\n  width=\"170\"\n  style=\"max-width:170px; height:auto; margin:0 0 12px 16px;\"\n/\u003e\n\n### CW in a nutshell:\n* **One brain for all your media syncs** A single place to configure everything.\n* **Multi media-server** and **multi tracker** support, in just one tool.\n* **Mobile-friendly overview** that prioritizes only the essentials\n* **Flexible sync directions** Between media server and trackers.\n* **Simple and advanced scheduling** From standard to more detailed pair schedules\n* **Internal CW Tracker** Keeps snapshots/backups from your media servers and trackers.\n* **Unified Watchlist across providers** View all watchlist items in one place.\n* **Fallback GUID** Revives old items from  your Plex library.\n* **Watcher** (Plex/Emby/Jellyfin to Trakt/SIMKL/MDBList) subscription-free.\n* **Watchlist Auto-Remove** Clears items from your Watchlist after a verified finish.\n* **Analyzer** Finds items that are **stuck** or inconsistent between providers.\n* **Editor** Inspect and adjust your items and add or block items.\n* **Player card** Shows what you are currently watching in real time.\n* **Snapshosts** Rollback tool for provider watchlist, ratings, and history\n\n\u003c!-- Features (no header row, titles visible, no \"empty grid\") --\u003e\n\u003ctable width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"border:0; border-collapse:collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd valign=\"top\" width=\"50%\" style=\"border:0; padding-right:18px;\"\u003e\n      \u003ch4 style=\"margin:0 0 8px 0;\"\u003eCore features\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003eSync watchlists (one-/two-way)\u003c/li\u003e\n        \u003cli\u003eLive scrobble (Plex/Jellyfin/Emby to Trakt/SIMKL/MDBList)\u003c/li\u003e\n        \u003cli\u003eSync ratings (one-/two-way)\u003c/li\u003e\n        \u003cli\u003eSync history (one-/two-way)\u003c/li\u003e\n        \u003cli\u003eKeep snapshots with CW tracker\u003c/li\u003e\n        \u003cli\u003eAuto-remove from watchlist after finish\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd valign=\"top\" width=\"50%\" style=\"border:0; padding-left:18px;\"\u003e\n      \u003ch4 style=\"margin:0 0 8px 0;\"\u003eTools \u0026amp; modes\u003c/h4\u003e\n      \u003cul\u003e\n        \u003cli\u003eAnalyzer: finds broken or missing matches/IDs\u003c/li\u003e\n        \u003cli\u003eExporter: CSV files for popular services\u003c/li\u003e\n        \u003cli\u003eEditor: Edit and adjust your items\u003c/li\u003e\n        \u003cli\u003eSnapshots: Create and restore snapshots\u003c/li\u003e\n        \u003cli\u003eNow Playing card, Stats, history, live logs\u003c/li\u003e\n        \u003cli\u003eHeadless scheduled runs\u003c/li\u003e\n      \u003c/ul\u003e\n      \u003cp style=\"margin:10px 0 6px 0;\"\u003e\u003cb\u003eTrackers\u003c/b\u003e\u003cbr\u003e\n        \u003cimg src=\"https://img.shields.io/badge/CrossWatch-7C5CFF?labelColor=1f2328\u0026amp;logoColor=white\" alt=\"CrossWatch\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/SIMKL-0AAEEF?labelColor=1f2328\" alt=\"SIMKL\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/AniList-02A9FF?labelColor=1f2328\" alt=\"AniList\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Trakt-ED1C24?labelColor=1f2328\" alt=\"Trakt\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/MDBList-3B73B9?labelColor=1f2328\" alt=\"MDBList\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/TMDb-01B4E4?labelColor=1f2328\u0026logo=themoviedatabase\u0026logoColor=white\" alt=\"TMDb\"\u003e\n      \u003c/p\u003e\n      \u003cp style=\"margin:10px 0 6px 0;\"\u003e\u003cb\u003eMedia servers\u003c/b\u003e\u003cbr\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Plex-E08A00?logo=plex\u0026amp;logoColor=white\u0026amp;labelColor=1f2328\" alt=\"Plex\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Jellyfin-946AD9?logo=jellyfin\u0026amp;logoColor=white\u0026amp;labelColor=1f2328\" alt=\"Jellyfin\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Emby-52B54B?logo=emby\u0026amp;logoColor=white\u0026amp;labelColor=1f2328\" alt=\"Emby\"\u003e\n      \u003c/p\u003e\n      \u003cp style=\"margin:10px 0 0 0;\"\u003e\u003cb\u003eOthers\u003c/b\u003e\u003cbr\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Tautulli-FF5C5C?labelColor=1f2328\" alt=\"Tautulli\"\u003e\n      \u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n### Download\n[![Guide: Container Installation](https://img.shields.io/badge/Guide-Container%20Installation-2ea44f?style=for-the-badge)](https://wiki.crosswatch.app/getting-started/container-installation)\n[![Guide: Docker Setup](https://img.shields.io/badge/Guide-Docker%20Setup-0d6efd?style=for-the-badge)](https://wiki.crosswatch.app/getting-started/docker-setup)\n\n\n*   **Docker:**\n\n    ```bash\n    docker pull ghcr.io/cenodude/crosswatch:latest\n    ```\n\n### Run as Container\n\n```bash\ndocker run -d   --name crosswatch   -p 8787:8787   -v /path/to/config:/config   -e TZ=UTC   ghcr.io/cenodude/crosswatch:latest\n```\n\nor\n\n```bash\n# docker-compose.yml\nservices:\n  crosswatch:\n    image: ghcr.io/cenodude/crosswatch:latest\n    container_name: crosswatch\n    ports:\n      - \"8787:8787\"          # host:container\n    environment:\n      - TZ=UTC\n    volumes:\n      - /path/to/config:/config\n    restart: unless-stopped\n```\n\n\u003e The container exposes the web UI at:\\\n\u003e http://localhost:8787\n\n## Sponsors\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://www.buymeacoffee.com/cenodude\"\u003e\n  \u003cimg alt=\"Buy Me a Coffee\" src=\"https://img.shields.io/badge/Buy%20Me%20a%20Coffee-support-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=000000\"\u003e\n\u003c/a\u003e\u003ccenter\u003e\u003cbr\u003e\nEvery cent goes to the \u003cb\u003eALS Foundation\u003c/b\u003e in the Netherlands\u003c/center\u003e\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\u003ca href=\"https://www.gitbook.com/\"\u003e\n  \u003cimg alt=\"GitBook\" src=\"https://img.shields.io/badge/GitBook-sponsored-3884ff?style=for-the-badge\u0026logo=gitbook\u0026logoColor=white\"\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  Huge thanks to our sponsors for keeping this project moving.\n\u003c/p\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcenodude%2FCrossWatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcenodude%2FCrossWatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcenodude%2FCrossWatch/lists"}