Initial commit
This commit is contained in:
@@ -0,0 +1,102 @@
|
|||||||
|
# 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.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Jellyfin intern oder extern erreichbar
|
||||||
|
JELLYFIN_URL=http://192.168.1.100:8096
|
||||||
|
JELLYFIN_API_KEY=HIER_JELLYFIN_API_KEY_EINTRAGEN
|
||||||
|
|
||||||
|
# Entweder Benutzername oder feste User-ID setzen.
|
||||||
|
JELLYFIN_USERNAME=josh
|
||||||
|
# JELLYFIN_USER_ID=
|
||||||
|
|
||||||
|
# Seerr / Jellyseerr / Overseerr-kompatible Seerr-API
|
||||||
|
SEERR_URL=http://192.168.1.100:5055
|
||||||
|
SEERR_API_KEY=HIER_SEERR_API_KEY_EINTRAGEN
|
||||||
|
|
||||||
|
# Bei selbst signiertem HTTPS-Zertifikat auf false setzen.
|
||||||
|
VERIFY_SSL=true
|
||||||
|
HTTP_TIMEOUT=30
|
||||||
|
|
||||||
|
# Optionale Playlist-Namen
|
||||||
|
JELLYFIN_PLAYLIST_MCU_COMPLETE=Marvel – MCU komplett chronologisch bis Doomsday
|
||||||
|
JELLYFIN_PLAYLIST_MCU_CORE=Marvel – MCU Core chronologisch bis Doomsday
|
||||||
|
JELLYFIN_PLAYLIST_LEGACY=Marvel – Doomsday Legacy Story Order
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user