# Marvel-Playlist für Jellyfin + Seerr Das Script prüft deine Jellyfin-Bibliothek, fordert fehlende Medien über Seerr an und baut eine chronologisch sortierte Jellyfin-Playlist. Serien werden als einzelne Episoden in Staffel-/Episodenreihenfolge eingefügt. ## Version 2026.08.03-r2 Die Timeline enthält nun feste **TMDB-IDs** für alle ausgelieferten MCU- und Legacy-Einträge. Dadurch ist das Script nicht mehr von lokalisierten oder je nach Seerr-Version unterschiedlich aufgebauten Suchergebnissen abhängig. Wichtig: Seerr fordert Medien über **TMDB-IDs**, nicht über IMDb-IDs, an. Weitere Korrekturen: - Jellyfin-Medien ohne Provider-ID werden über Titel und Erscheinungsjahr erkannt. - Eine fehlende TMDB-ID zählt nicht mehr automatisch als harter Fehler. - Nicht auflösbare fehlende Medien erscheinen separat unter `Nicht auflösbar`. - Nur wirkliche HTTP-, API- oder Playlist-Probleme erscheinen unter `Fehler`. - Die Seerr-Suche versteht als Fallback CamelCase- und snake_case-Antworten. ## Installation ```bash mkdir -p /opt/marvel-playlist cp marvel_jellyfin_seerr.py marvel.env.example /opt/marvel-playlist/ cd /opt/marvel-playlist cp marvel.env.example marvel.env chmod 600 marvel.env chmod +x marvel_jellyfin_seerr.py nano marvel.env ``` Es werden keine Python-Pakete benötigt. ## Upgrade von der ersten Version Die vorhandene `marvel.env` bleibt erhalten. Ersetze nur das Script und lösche optional den alten Suchcache: ```bash cd /opt/marvel-playlist cp marvel_jellyfin_seerr.py marvel_jellyfin_seerr.py.bak cp /root/marvel_jellyfin_seerr.py ./marvel_jellyfin_seerr.py chmod +x marvel_jellyfin_seerr.py rm -f .cache/marvel-playlist/tmdb.json ``` ## Erst prüfen ```bash cd /opt/marvel-playlist ./marvel_jellyfin_seerr.py \ --dry-run \ --request-missing \ --sync-playlist \ --profile mcu-complete ``` `--dry-run` verhindert sowohl Seerr-Requests als auch Playlist-Änderungen. Die zusätzlichen Schalter zeigen an, welche Aktionen später ausgeführt würden. ## Fehlende Medien anfragen ```bash cd /opt/marvel-playlist ./marvel_jellyfin_seerr.py --request-missing --profile mcu-complete ``` ## Playlist synchronisieren ```bash cd /opt/marvel-playlist ./marvel_jellyfin_seerr.py --sync-playlist --profile mcu-complete ``` ## Beides in einem Lauf ```bash cd /opt/marvel-playlist ./marvel_jellyfin_seerr.py --request-missing --sync-playlist --profile mcu-complete ``` ## Profile - `mcu-complete`: MCU inklusive Defenders-Saga, Agent Carter und One-Shots. - `mcu-core`: MCU-Filme und Marvel-Studios-Serien ohne ältere Defenders-/One-Shot-Blöcke. - `legacy`: X-Men-, ältere Spider-Man- und Fantastic-Four-Filme als separate Doomsday-Vorbereitung. - `all`: Erstellt `mcu-complete` und `legacy` als zwei getrennte Playlists. Die Legacy-Liste bleibt absichtlich separat, weil die Fox-X-Men-Zeitlinien verzweigt sind und sich nicht widerspruchsfrei in eine einzige MCU-Chronologie einordnen lassen. ## Optionaler täglicher Cronjob Erst verwenden, nachdem ein manueller Dry-Run und ein manueller schreibender Lauf funktioniert haben: ```cron 17 4 * * * cd /opt/marvel-playlist && /usr/bin/python3 ./marvel_jellyfin_seerr.py --request-missing --sync-playlist --profile all >> /var/log/marvel-playlist.log 2>&1 ``` ## Jellyfin-Playlist-Fehler `parentFolder` Falls Jellyfin beim Erstellen einer Playlist mit `parentFolder` abbricht, prüfe das Jellyfin-Datenverzeichnis. Bei betroffenen Installationen muss dort ein Ordner `Playlists` mit passenden Eigentümerrechten existieren. ## Hinweis zu Sonderzeichen Ab Version `2026.08.03-r3` werden sämtliche URL-Query-Parameter strikt percent-encodiert. Dadurch funktionieren Titel mit Sonderzeichen wie `:`, `&`, `?`, `#`, Apostrophen, Sternchen, Schrägstrichen, Umlauten und Unicode-Zeichen auch mit Seerrs strenger API-Validierung. Leerzeichen werden als `%20` statt `+` übertragen.