4.9 KiB
title, created, updated, type, tags, confidence, contested, sources
| title | created | updated | type | tags | confidence | contested | sources | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CrossWatch | 2026-06-07 | 2026-06-07 | app |
|
medium | false |
|
🎬 CrossWatch
Synchroniseur d'état de visionnage entre plusieurs instances Plex/Emby/Jellyfin — watch state, watchlist et notes partagés.
📋 Informations Générales
| Attribut | Valeur |
|---|---|
| Nom | CrossWatch |
| Slug | app-crosswatch |
| Description | Outil de synchronisation watch state / watchlist entre plusieurs serveurs média self-hosted |
| Site officiel | https://crosswatch.app/ |
| Repository | https://github.com/crosswatch/crosswatch |
| Stars | 612 ⭐ |
| Licence | MIT |
| Langage principal | Python (FastAPI) |
| Catégorie | Media Streaming |
| Tags | [catalogue, media-streaming, sync, multi-server, plex, emby, jellyfin] |
📝 Description
CrossWatch résout un cas d'usage très concret : vous avez un app-jellyfin à la maison, un app-plex au bureau, un app-emby chez un parent — et vous voulez qu'un épisode regardé sur l'un soit marqué comme vu sur les autres. CrossWatch agit comme un hub de synchronisation qui écoute les webhooks de chaque serveur, applique des règles de mapping (par titre + année, par GUID TMDB, par IMDB) et propage l'événement.
L'architecture est simple : une API FastAPI, une base PostgreSQL, et des workers qui poussent les états via les API natives de chaque plateforme. Le mapping intelligent gère les cas tordus (un même film indexé différemment selon les métadonnées locales).
Points forts : évite la double-surveillance, supporte les trois principaux serveurs média, interface web minimale. Limites : projet jeune, API encore changeante, et nécessite un identifiant API valide pour chaque serveur (Plex token, Emby API key, Jellyfin token).
🚀 Installation
Via Docker (recommandé)
# docker-compose.yml
version: "3.8"
services:
crosswatch:
image: ghcr.io/crosswatch/crosswatch:latest
container_name: crosswatch
restart: unless-stopped
ports:
- "9090:9090"
environment:
- DATABASE_URL=postgresql://crosswatch:***@crosswatch-db:5432/crosswatch
- PLEX_TOKEN=***
- JELLYFIN_URL=http://jellyfin.local:8096
- JELLYFIN_TOKEN=***
- EMBY_URL=http://emby.local:8096
- EMBY_API_KEY=***
- SYNC_INTERVAL=60
volumes:
- ./config:/app/config
depends_on:
- crosswatch-db
crosswatch-db:
image: postgres:16-alpine
container_name: crosswatch-db
restart: unless-stopped
environment:
POSTGRES_USER: crosswatch
POSTGRES_PASSWORD: ***
POSTGRES_DB: crosswatch
volumes:
- ./db:/var/lib/postgresql/data
Installation manuelle
git clone https://github.com/crosswatch/crosswatch
cd crosswatch
pip install -r requirements.txt
uvicorn crosswatch.main:app --host 0.0.0.0 --port 9090
⚙️ Configuration
- Connexion serveurs : URL + token de chaque Plex/Jellyfin/Emby à synchroniser.
- Mapping : choisir la clé de jointure (
tmdb_idrecommandé,imdb_iden repli,title+yearen dernier recours). - Sens de sync : par défaut bidirectionnel, configurable (ex : Plex → Jellyfin seulement).
- Filtres : exclure certaines bibliothèques (kids, documentaires).
- Cron sync : intervalle configurable ; par défaut 60 secondes.
🔗 Alternatives
- Trakt.tv — Service tiers qui résout le même problème (sync multi-serveurs) mais centralise vos données hors de votre contrôle.
- Plex Discover Together — Limité à Plex, sans cross-platform.
- Webhook manuel : un script Python de 50 lignes peut suffire pour un cas simple (1 Plex + 1 Jellyfin).
- Jellysync — Projet plus ancien, Jellyfin → Trakt uniquement.
🔒 Sécurité
- Les tokens Plex/Jellyfin/Emby sont sensibles : ils donnent accès à toute la bibliothèque. Stocker en variables d'environnement, jamais en clair dans
docker-compose.ymlcommité. - Placer l'UI CrossWatch derrière un reverse proxy authentifié (app-authentik ou app-traefik + BasicAuth).
- Logs : surveiller les erreurs de mapping, qui peuvent indiquer un serveur compromis.
- Sauvegarder la base
crosswatch(PostgreSQL) pour pouvoir reconstruire l'état en cas de crash.
📚 Ressources
- Repository : https://github.com/crosswatch/crosswatch
- Site : https://crosswatch.app/
- API Plex : https://www.plexopedia.com/plex-media-server/api/
- API Jellyfin : https://api.jellyfin.org/
🔗 Pages Liées
- cat-media-streaming (catégorie parente)
- app-plex — Serveur média #1 supporté
- app-jellyfin — Serveur média #2 supporté
- app-emby — Serveur média #3 supporté
- app-traefik — Reverse proxy HTTPS
- securisation-home-lab — Bonnes pratiques
- recettes-docker-compose — Templates