[ e-networld.de ]

PlexToJellyfinSync

Liest zyklisch den Gesehen-Status vom Plex-Server und schreibt ihn in die NFO-Dateien für Jellyfin, für Filme und Serien. Ohne Plex Pass, mit Web-Dashboard.

MITDockerv1.6.0 · 24.10.2026
Status-Dashboard von PlexToJellyfinSync mit Karten für Plex-Verbindung, letzten und nächsten Abgleich, verarbeitete Einträge und aktualisierte NFO-Dateien

Überblick

Wer Plex und Jellyfin parallel betreibt, kennt das Problem: Was in Plex als gesehen markiert ist, weiß Jellyfin nicht. PlexToJellyfinSync schließt diese Lücke, indem es den Gesehen-Status regelmäßig aus Plex liest und in die NFO-Dateien neben den Mediendateien schreibt, aus denen Jellyfin die Benutzerdaten importiert.

Die Anwendung läuft als kleiner Container und arbeitet rein abfragend: Sie braucht keinen Plex Pass und erfasst dadurch auch Einträge, die von Hand als gesehen markiert wurden. Ein schneller inkrementeller Durchlauf prüft die Verlaufsdaten, ein periodischer vollständiger Abgleich holt Nachträgliches ein. Bestehende NFO-Dateien bleiben unangetastet, außer in den Feldern watched, playcount und lastplayed; fehlende Dateien kann das Werkzeug aus den Plex-Metadaten erzeugen.

Der wichtigste Einrichtungsschritt sind die Pfad-Mappings. Plex meldet Dateipfade so, wie der Plex-Server sie sieht, während dieser Container die gleichen Dateien unter seinem eigenen Mountpunkt findet. Ein Mapping ersetzt das Plex-Präfix durch das lokale. Entscheidend ist der Pfad, den Plex über seine API zurückgibt, nicht der Ordner, den man in der Oberfläche sieht. Ohne passendes Mapping wird ein Eintrag übersprungen und das im Log vermerkt, statt einen falschen Pfad zu schreiben.

Eine Einschränkung liegt auf der Jellyfin-Seite: Benutzerdaten aus NFO-Dateien kann Jellyfin nur für genau einen Benutzer importieren. Das Werkzeug arbeitet deshalb mit dem Plex-Server-Eigentümer. In den Jellyfin-Bibliothekseinstellungen muss der NFO-Metadatenleser aktiv sein und als Zielbenutzer derjenige eingestellt werden, der dem Plex-Eigentümer entspricht.

Funktionen

Gesehen-Status aus Plex übernehmen, ohne Plex Pass
Filme, Episoden, Staffeln und Serien abdecken
Bestehende NFO-Dateien nur in den Watch-Feldern ändern
Fehlende NFO-Dateien auf Wunsch aus den Plex-Metadaten erzeugen
Schneller inkrementeller Abgleich plus regelmäßiger vollständiger Durchlauf
Auch manuell in Plex als gesehen markierte Einträge werden erfasst
Pfad-Mappings zwischen Plex-Sicht und eigenen Mountpunkten
Web-Dashboard mit Statuskarten und Live-Logs, optional mit Token geschützt

Installation

docker run -d \
  --name plextojellyfinsync \
  -e PLEXSYNC__Plex__BaseUrl="http://plex:32400" \
  -e PLEXSYNC__Plex__Token="<Ihr-Plex-Token>" \
  -e PLEXSYNC__PathMappings__0__Plex="/data/Movies" \
  -e PLEXSYNC__PathMappings__0__Local="/media/Movies" \
  -v /pfad/zu/medien:/media \
  -v /pfad/zu/config:/config \
  -p 8080:8080 \
  networlddev/plextojellyfinsync:latest

Das Medienverzeichnis muss beschreibbar eingebunden sein. Mindestens ein passendes Pfad-Mapping ist Pflicht, sonst werden Einträge übersprungen.

Releases

v1.6.0 · 24.10.2026
  • Invalid configuration now stops the start. The Plex, Sync, State and Dashboard settings are checked
  • Behind a reverse proxy, set Dashboard:TrustedProxies. Forwarded headers (X-Forwarded-For,
  • [Docs] Align image references with the Docker Hub release
  • [Docs] Add a docs tier to the squad and tighten record fixes
  • [Core] Validate options at startup
  • [Docs] Apply squad lessons from the issue #31 run
  • [Docs] Add a Devil's Advocate plan challenge to the squad
  • [Service] Split SyncOrchestrator into focused collaborators
  • [Docs] Adopt the Squad-Spec-Repository-Template squad and agent rules
  • [Docs] Update the squad from Squad-Spec-Repository-Template
  • [Docs] Update the squad from Squad-Spec-Repository-Template
  • Bump the nuget-dependencies group with 1 update

GitHub ↗

v1.5.0 · 02.10.2026
  • [CI] Remove redundant GitHub release creation step
  • [Service] Parallelize episode writes during series reconcile
  • [Tests] Add cancellation coverage for in-flight parallel episode writes
  • [Service] Reconcile Plex libraries concurrently during full reconcile
  • Bump the actions group with 5 updates
  • [Service] Page through Plex history instead of hard-capping it at 500
  • [Service] Page through Plex library and episode listings
  • [PlexClient] Guard pagination against a non-advancing page
  • Stream Plex library and episode reads instead of buffering them
  • Only report LastPlayed on fully watched season/series aggregates
  • Update Reihitsu.Analyzer to 1.0.0 stable and adjust CI
  • Skip malformed existing NFO instead of throwing

GitHub ↗

v1.4.3 · 21.09.2026
  • [CI] Trigger releases from a manually pushed tag instead of PR merges
  • [Service] Redact known secrets from captured log text
  • [Docs] Align workflow skills with the PiMonitor skill template
  • [Service] Write NFO files atomically via a temp file and rename
  • [Service] Write state.json atomically and preserve corrupt files
  • [Service] Isolate per-item failures so one bad entry can't stall a cycle
  • [Service] Don't let an upfront Plex timeout crash the host
  • [NfoWriter] Reject writes that resolve outside a mapped local root
  • [PathMapper] Reject leading path-traversal segments
  • Validate and cap Plex metadata before mapping media items

GitHub ↗

v1.4.2 · 19.09.2026
  • Update MSTest to 4.4.1 in Directory.Packages.props

GitHub ↗

v1.4.1 · 19.09.2026
  • Rebuild website after release
  • [Docker] Fix non-root container unable to read appsettings.json

GitHub ↗

Alle Releases auf GitHub ↗