https://github.com/gioxx/trakt-multi-scrobbler
Web dashboard to map Jellyfin watches to one or more Trakt accounts.
https://github.com/gioxx/trakt-multi-scrobbler
docker-image jellyfin trakt trakt-tv
Last synced: about 2 months ago
JSON representation
Web dashboard to map Jellyfin watches to one or more Trakt accounts.
- Host: GitHub
- URL: https://github.com/gioxx/trakt-multi-scrobbler
- Owner: gioxx
- License: mit
- Created: 2025-12-16T20:33:34.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-04-28T20:23:26.000Z (about 2 months ago)
- Last Synced: 2026-04-28T21:26:17.991Z (about 2 months ago)
- Topics: docker-image, jellyfin, trakt, trakt-tv
- Language: HTML
- Homepage: https://hub.docker.com/r/gfsolone/trakt-multi-scrobbler
- Size: 1.35 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.IT.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Trakt Multi-Scrobbler (Jellyfin → Trakt)
[English version](README.md)

Dashboard web per scegliere quali utenti Jellyfin scrobblano verso quali account Trakt. Supporta più utenti per entrambi i servizi, regole per serie/film, tema chiaro/scuro e gestione account Trakt via device flow.
## Funzionalità principali
- Lettura libreria Jellyfin (film/episodi) con ID TMDB/IMDB/TVDB e locandine.
- Scelta degli utenti Jellyfin che fungono da “fonte” (persistita).
- Regole per contenuto: per ogni film/serie decidi a quali account Trakt inviare gli scrobble.
- Sync automatica/su richiesta verso Trakt, con filtri per nuovi titoli e “Unassigned”.
- Aggiunta/rimozione account Trakt dalla UI (device flow) e toggle per abilitarli.
- Pagina dedicata per ogni account Trakt per vedere cosa sincronizza.
- Backup/ripristino della configurazione (token JSON + db SQLite) dalla UI.
- Tema chiaro/scuro e localizzazione (en/it).
## Requisiti
- Jellyfin con API key.
- App Trakt con `client_id` e `client_secret` (https://trakt.tv/oauth/applications).
- Python 3.11+ oppure Docker.
- Node.js 18+ (opzionale, solo per rigenerare gli asset CSS della UI).
## Configurazione rapida
1) **Clona il repo**
```bash
git clone https://github.com/gioxx/trakt-multi-scrobbler.git
cd trakt-multi-scrobbler
```
Aggiornamento opzionale dello stylesheet UI (Tailwind, build locale):
```bash
npm install
npm run build:css
```
Per sviluppo continuo:
```bash
npm run watch:css
```
I metadati nel footer (nome/versione/repo) vengono letti da `static/app_meta.json`.
2) **Variabili d’ambiente minime**
```bash
export JELLYFIN_URL="https://il-tuo-jellyfin"
export JELLYFIN_APIKEY="API_KEY_JELLYFIN"
export TRAKT_CLIENT_ID="CLIENT_ID_TRAKT"
export TRAKT_CLIENT_SECRET="CLIENT_SECRET_TRAKT"
```
Opzionali:
```bash
export TRAKT_STATE_PATH="trakt_accounts.json" # percorso stato account Trakt
export TRAKT_DB_PATH="trakt_sync.db" # facoltativo; SQLite con regole di sync (di default accanto a TRAKT_STATE_PATH)
export JELLYFIN_STATE_PATH="jellyfin_state.json" # facoltativo; di default usa la stessa cartella di TRAKT_STATE_PATH
export THUMB_CACHE_DIR="/data/thumb_cache" # facoltativo; cache locale poster (default accanto a TRAKT_STATE_PATH)
export THUMB_CACHE_TTL_HOURS="72" # facoltativo; aggiorna la cache poster ogni N ore
export PROXY_IMAGES="true" # facoltativo; proxy delle immagini Jellyfin tramite l'app (utile con HTTPS/CDN)
export IMAGE_CACHE_SECONDS="86400" # facoltativo; cache-control per le immagini proxate
export JELLYFIN_TIMEOUT="5" # facoltativo; timeout (secondi) per le chiamate a Jellyfin
export THUMB_FETCH_TIMEOUT="5" # facoltativo; timeout per il download delle locandine
export THUMB_MAX_HEIGHT="500" # facoltativo; altezza massima poster richiesta a Jellyfin (px), larghezza auto-adattata
export INTERNAL_HTTP_BASE="http://127.0.0.1:8089" # facoltativo; base interna usata per cache poster quando PROXY_IMAGES=true
export WATCH_THRESHOLD="0.95" # soglia completamento (0-1)
export REFRESH_MINUTES="30" # polling Jellyfin
```
3) **Avvio locale (Python)**
```bash
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8089
```
Apri http://localhost:8089.
4) **Avvio con Docker (immagine già pronta)**
- GitHub Container Registry
```bash
docker run -d --name trakt-multi-scrobbler \
-p 8089:8089 \
-e JELLYFIN_URL="https://il-tuo-jellyfin" \
-e JELLYFIN_APIKEY="API_KEY_JELLYFIN" \
-e TRAKT_CLIENT_ID="CLIENT_ID_TRAKT" \
-e TRAKT_CLIENT_SECRET="CLIENT_SECRET_TRAKT" \
-e TRAKT_STATE_PATH="/data/trakt_accounts.json" \
-e JELLYFIN_STATE_PATH="/data/jellyfin_state.json" \
-v tms-data:/data \
ghcr.io/gioxx/trakt-multi-scrobbler:latest
```
- Docker Hub
```bash
docker run -d --name trakt-multi-scrobbler \
-p 8089:8089 \
-e JELLYFIN_URL="https://il-tuo-jellyfin" \
-e JELLYFIN_APIKEY="API_KEY_JELLYFIN" \
-e TRAKT_CLIENT_ID="CLIENT_ID_TRAKT" \
-e TRAKT_CLIENT_SECRET="CLIENT_SECRET_TRAKT" \
-e TRAKT_STATE_PATH="/data/trakt_accounts.json" \
-e JELLYFIN_STATE_PATH="/data/jellyfin_state.json" \
-v tms-data:/data \
gfsolone/trakt-multi-scrobbler:latest
```
5) **Avvio con Docker Compose (file del repo)**
```bash
docker compose up --build
```
Usa il volume nominato previsto in `docker-compose.yml` (`/data`). Se vuoi inizializzarlo:
```bash
docker compose run --rm trakt-multi-scrobbler sh -c 'cat > /data/trakt_accounts.json <.json` e aggiungi l’opzione al select lingua in `static/index.html`.
- Se usi Plex come principale ma hai anche Jellyfin, puoi abbinarlo a `luigi311/jellyplex-watched` (https://github.com/luigi311/JellyPlex-Watched) per tenere allineati Jellyfin e Plex.