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.

Ü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
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:latestDas 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,StateandDashboardsettings 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
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
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
v1.4.2 · 19.09.2026
- Update MSTest to 4.4.1 in Directory.Packages.props
v1.4.1 · 19.09.2026
- Rebuild website after release
- [Docker] Fix non-root container unable to read appsettings.json
![[ e-networld.de ]](/img/logo.png)