# Encode-Skripte (Pre & Post) Ripster unterstützt **Pre-Encode-** und **Post-Encode-Ausführungen**: Beliebige Shell-Skripte oder Skript-Ketten können automatisch vor und/oder nach dem Encoding-Schritt laufen – z. B. zum Vorbereiten von Verzeichnissen, Verschieben von Dateien oder Benachrichtigen externer Dienste. --- ## Funktionsweise ``` READY_TO_ENCODE ↓ [Pre-Encode-Ausführungen] ← Fehler? → Abbruch Skript/Kette 1, 2, … ↓ ENCODING ↓ [Post-Encode-Ausführungen] ← Fehler? → Abbruch Skript/Kette 1, 2, … ↓ FINISHED ``` !!! warning "Abbruch bei Fehler" Schlägt eine Ausführung fehl (Exit-Code ≠ 0), werden alle nachfolgenden Ausführungen der gleichen Phase **nicht mehr ausgeführt**. Der Job bleibt im Abschlusszustand `FINISHED`; der Fehler wird in Log/Status-Text und im Summary festgehalten. --- ## Skript- und Ketten-Verwaltung Skripte und Skript-Ketten werden über die **Einstellungen-Seite** angelegt und verwaltet. Die Reihenfolge in der Liste kann per **Drag & Drop** geändert werden und bleibt persistent gespeichert. ### Skript anlegen Navigiere zu **Einstellungen → Skripte** und klicke **"Neues Skript"**: | Feld | Beschreibung | |------|-------------| | **Name** | Anzeigename des Skripts (z. B. `Zu Plex verschieben`) | | **Befehl** | Shell-Befehl oder Skriptpfad (z. B. `/home/michael/scripts/move-to-plex.sh`) | | **Beschreibung** | Optionale Erklärung | ### Skript-Ketten Eine **Skript-Kette** fasst mehrere Skripte zu einer benannten Einheit zusammen, die als ganzes ausgewählt werden kann. Nützlich für wiederkehrende Kombinationen (z. B. „Move + Notify Plex + Webhook"). Ketten werden genauso wie einzelne Skripte im Review-Panel ausgewählt. ### Verfügbare Umgebungsvariablen Jedes Skript wird mit folgenden Umgebungsvariablen aufgerufen: | Variable | Inhalt | Beispiel | |---------|--------|---------| | `RIPSTER_OUTPUT_PATH` | Absoluter Pfad der encodierten Datei | `/mnt/movies/Inception (2010).mkv` | | `RIPSTER_JOB_ID` | Job-ID in der Datenbank | `42` | | `RIPSTER_TITLE` | Filmtitel | `Inception` | | `RIPSTER_YEAR` | Erscheinungsjahr | `2010` | | `RIPSTER_IMDB_ID` | IMDb-ID | `tt1375666` | | `RIPSTER_RAW_PATH` | Pfad zur Raw-MKV-Datei | `/mnt/raw/Inception-2010/t00.mkv` | ### Beispiel-Skript: Datei nach Jellyfin verschieben ```bash #!/bin/bash # /home/michael/scripts/move-to-jellyfin.sh TARGET_DIR="/mnt/media/movies" mkdir -p "$TARGET_DIR" mv "$RIPSTER_OUTPUT_PATH" "$TARGET_DIR/" echo "Verschoben: $RIPSTER_TITLE nach $TARGET_DIR" ``` ### Beispiel-Skript: Webhook auslösen ```bash #!/bin/bash # /home/michael/scripts/notify-webhook.sh curl -s -X POST https://mein-webhook.example.com/ripster \ -H "Content-Type: application/json" \ -d "{\"title\": \"$RIPSTER_TITLE\", \"year\": \"$RIPSTER_YEAR\", \"path\": \"$RIPSTER_OUTPUT_PATH\"}" ``` --- ## Im Encode-Review auswählen Im `READY_TO_ENCODE`-Zustand zeigt das **MediaInfoReviewPanel** zwei Abschnitte: ``` ┌──────────────────────────────────────────────────────────┐ │ Pre-Encode Ausführungen (optional) │ ├──────────────────────────────────────────────────────────┤ │ ≡ 1. Verzeichnis vorbereiten (Skript) [Entfernen]│ ├──────────────────────────────────────────────────────────┤ │ Hinzufügen: [Skript/Kette auswählen ▾] [+ Hinzuf.]│ └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ │ Post-Encode Ausführungen (optional) │ ├──────────────────────────────────────────────────────────┤ │ ≡ 1. Zu Plex verschieben (Skript) [Entfernen]│ │ ≡ 2. Notify-Kette (Kette) [Entfernen]│ ├──────────────────────────────────────────────────────────┤ │ Hinzufügen: [Skript/Kette auswählen ▾] [+ Hinzuf.]│ └──────────────────────────────────────────────────────────┘ ``` - **Pre-Encode** und **Post-Encode** werden separat konfiguriert - Sowohl **einzelne Skripte** als auch **Skript-Ketten** können in beiden Phasen ausgewählt werden - **Reihenfolge** per Drag & Drop innerhalb jeder Phase ändern - **Hinzufügen** aus der Dropdown-Liste aller konfigurierten Skripte und Ketten - **Entfernen** einzelner Einträge - Auswahl kann pro Job frei variiert werden --- ## Skript testen Über die Einstellungen kann jedes Skript mit einem Test-Job ausgeführt werden: ```http POST /api/settings/scripts/:scriptId/test ``` Der Test-Aufruf befüllt die Umgebungsvariablen mit Platzhalter-Werten. --- ## Ausführungs-Ergebnis Das Ergebnis der Skript-Ausführung wird im Job-Datensatz gespeichert und in der History angezeigt: ```json { "postEncodeScripts": { "configured": 2, "attempted": 2, "succeeded": 2, "failed": 0, "skipped": 0, "aborted": false, "results": [ { "scriptId": 1, "scriptName": "Zu Plex verschieben", "status": "SUCCESS" }, { "scriptId": 2, "scriptName": "Webhook auslösen", "status": "SUCCESS" } ] } } ``` | Feld | Beschreibung | |------|-------------| | `configured` | Anzahl ausgewählter Skripte | | `attempted` | Anzahl tatsächlich gestarteter Skripte | | `succeeded` | Erfolgreich ausgeführt (Exit-Code 0) | | `failed` | Fehlgeschlagen | | `skipped` | Nicht ausgeführt (wegen vorherigem Fehler) | | `aborted` | `true`, wenn die Kette abgebrochen wurde | --- ## API-Referenz Eine vollständige API-Dokumentation der Skript-Endpunkte findest du unter: [:octicons-arrow-right-24: Settings API – Skripte](../api/settings.md#skript-verwaltung)