diff --git a/README.md b/README.md index a5b2b04..3f67f8a 100644 --- a/README.md +++ b/README.md @@ -42,13 +42,15 @@ Diese Funktion ist für eine Archivierung von gekauften Titeln. Das System ermit - Ausgabe als M4B, MP3 oder FLAC - Einzeldatei oder kapitelweises Splitten -### 🔄 Converter +### 🔄 Converter (Beta) - Dateibaum und Datei-Explorer für das Converter-RAW-Verzeichnis - Upload, Ordner anlegen, Umbenennen, Verschieben und Löschen - Jobs aus Dateiauswahl erzeugen, Dateien bestehenden Jobs zuweisen oder daraus entfernen - Audio-/Video-Erkennung und automatische RAW-Scans per Polling - TMDB-Metadatenzuordnung für passende Video-Jobs +Der Converter ist noch nicht vollständig entwickelt und auch noch nicht vollständig geprüft. Er kann verwendet werden, es funktionieren aber ggf. nicht alle Funktionen vollständig! + ### 🛠️ Automation, Betrieb und Verwaltung - Queue mit normalen Jobs sowie zusätzlichen `script`-, `chain`- und `wait`-Einträgen - Pre-/Post-Encode-Skripte und Skript-Ketten diff --git a/docs/api/history.md b/docs/api/history.md index 2faf69c..eb4a380 100644 --- a/docs/api/history.md +++ b/docs/api/history.md @@ -114,9 +114,9 @@ Importiert einen RAW-Ordner als Job und triggert optional die Analyse des Import --- -## POST /api/history/:id/omdb/assign +## POST /api/history/:id/metadata/assign -Weist OMDb-/Filmdaten nachträglich zu. +Weist TMDb-Metadaten nachträglich zu oder aktualisiert bestehende Film-/Serien-Metadaten eines Jobs. ## POST /api/history/:id/cd/assign diff --git a/docs/api/pipeline.md b/docs/api/pipeline.md index f303478..b691346 100644 --- a/docs/api/pipeline.md +++ b/docs/api/pipeline.md @@ -107,9 +107,9 @@ Erzwingt Rescan für ein konkretes Laufwerk. --- -## GET /api/pipeline/omdb/search?q= +## GET /api/pipeline/tmdb/movie/search?q= -OMDb-Titelsuche. +TMDb-Filmsuche. **Response:** diff --git a/docs/architecture/backend.md b/docs/architecture/backend.md index f6c1d9a..8cfd279 100644 --- a/docs/architecture/backend.md +++ b/docs/architecture/backend.md @@ -111,7 +111,7 @@ Features: - Job-Liste/Detail inkl. Log-Tail - Orphan-RAW-Erkennung und Import -- OMDb-Nachzuweisung +- TMDb-Neuzuordnung - Dateilöschung (`raw|movie|both`) - Job-Löschung (`none|raw|movie|both`) @@ -222,7 +222,7 @@ Vollständige API-Dokumentation: [Runtime Activities API](../api/runtime-activit - `audnexService.js` (Audnex-API für Audiobook-Metadaten) - `coverArtRecoveryService.js` (Cover-Art-Wiederherstellung) - `thumbnailService.js` (Vorschaubild-Generierung) -- `omdbService.js` (OMDb-Metadaten-Suche) +- `tmdbService.js` (Film-/Serien-Metadaten-Suche) - `logger.js` (rotierende Datei-Logs) --- diff --git a/docs/architecture/frontend.md b/docs/architecture/frontend.md index c420e0e..06f92e0 100644 --- a/docs/architecture/frontend.md +++ b/docs/architecture/frontend.md @@ -34,7 +34,7 @@ Historie: - Job-Liste/Filter - Job-Details + Logs -- OMDb-Nachzuweisung +- TMDb-Neuzuordnung - Re-Encode/Restart-Workflows ### `ConverterPage.jsx` @@ -78,7 +78,7 @@ Expert-Modus: ## Wichtige Komponenten - `PipelineStatusCard.jsx` — Pipeline-Status-Anzeige mit Progress -- `MetadataSelectionDialog.jsx` — OMDb-Metadaten-Auswahl +- `MetadataSelectionDialog.jsx` — TMDb-Metadaten-Auswahl - `MediaInfoReviewPanel.jsx` — Track-Auswahl-Interface (Video/Audio/Untertitel) - `JobDetailDialog.jsx` — Job-Detailansicht mit Logs - `CronJobsTab.jsx` — Cron-Job-Verwaltung diff --git a/docs/configuration/settings-reference.md b/docs/configuration/settings-reference.md index 4cfd9f9..9ad28aa 100644 --- a/docs/configuration/settings-reference.md +++ b/docs/configuration/settings-reference.md @@ -9,7 +9,18 @@ Diese Seite beschreibt **jede** aktuelle Einstellung aus der Settings-GUI: was t - `Was passiert technisch?`: direkte Wirkung im Backend/Pipeline-Verhalten. - `Warum/Wann setzen?`: Praxisgrund inkl. typischem Einsatzzweck. -## Vollstaendige Feldliste +## Wie diese Seite zu lesen ist + +Wenn du nicht von oben bis unten lesen willst, helfen diese typischen Einstiegsfragen: + +- Disc wird nicht sauber erkannt: zuerst `Laufwerk` +- falsche Playlist- oder Titelauswahl: zuerst `Tools` +- Ausgabe landet im falschen Ordner: zuerst `Pfade` +- zu viele oder zu wenige parallele Jobs: zuerst `Tools` +- Converter scannt nicht wie erwartet: zuerst `Converter` +- Hardware oder Speicher fehlen im Monitoring: zuerst `Monitoring` und `Pfade` + +## Vollständige Feldliste ## Kategorie: Benachrichtigungen @@ -140,6 +151,7 @@ Diese Seite beschreibt **jede** aktuelle Einstellung aus der Settings-GUI: was t | `MakeMKV Key` | `makemkv_registration_key` | `string` | `leer` | Standard | Optionaler Registrierungsschlüssel. Wird beim Speichern nach ~/.MakeMKV/settings.conf synchronisiert. Darunter kann der aktuelle Betakey per API übernommen werden. | Wenn MakeMKV-Features ohne Trial-Limit genutzt werden sollen (inkl. Betakey-Usecase). | | `Mediainfo Kommando` | `mediainfo_command` | `string` | `mediainfo` | Expertenmodus | Pfad oder Befehl für mediainfo. | Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). | | `Minimale Titellänge (Minuten)` | `makemkv_min_length_minutes` | `number` | `60` | Standard | Filtert kurze Titel beim Rip. | Wenn kurze Bonus-/Trailer-Titel automatisch ausgefiltert werden sollen. | +| `TMDb Runtime-Abzug für Playlistfilter (%)` | `playlist_tmdb_runtime_subtract_percent` | `number` | `0` | Standard | Zieht optional einen Prozentsatz von der TMDb-Laufzeit ab, damit Ripster bei problematischen Blu-rays leicht kürzere Hauptfassungen trotzdem als Playlist-Kandidaten zulässt. Eine Mindesttoleranz von 2 Minuten nach unten bleibt erhalten. | Wenn die Playlist-Analyse bei einzelnen Discs zu streng ist und der Hauptfilm knapp unter der TMDb-Laufzeit liegt. Beispiel: TMDb sagt 120 Minuten, die Disc liefert 116 bis 118 Minuten, aber die Fassung ist trotzdem korrekt. | | `HandBrake Kommando` | `handbrake_command` | `string` | `HandBrakeCLI` | Expertenmodus | Pfad oder Befehl für HandBrakeCLI. | Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). | | `Encode-Neustart: unvollständige Ausgabe löschen` | `handbrake_restart_delete_incomplete_output` | `boolean` | `true` | Standard | Wenn aktiv, wird bei "Encode neu starten" der bisherige (nicht erfolgreiche) Output vor Start entfernt. | Wenn bei Encode-Neustart alte, unvollstaendige Dateien sicher entfernt werden sollen. | | `Parallele Jobs` | `pipeline_max_parallel_jobs` | `number` | `1` | Standard | Maximale Anzahl parallel laufender Jobs. Weitere Starts landen in der Queue. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. | Wenn Durchsatz und CPU-Last fuer Videojobs ausbalanciert werden sollen. | diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index 0f9fb09..20be8cf 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -4,99 +4,148 @@ Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf. ## Ziel der Ersteinrichtung -Vor dem ersten Job müssen drei Dinge stabil sein: +Vor dem ersten Job sollten fünf Bereiche sauber gesetzt sein: -1. Pfade stimmen (RAW, Output, Logs) -2. Tools sind aufrufbar (MakeMKV, HandBrake, MediaInfo) -3. Metadatenzugänge funktionieren (OMDb, optional TMDb/MusicBrainz) +1. Pfade und Templates +2. Laufwerk und Disc-Erkennung +3. Metadatenzugang über TMDb +4. Encode-Standards und Queue-Regeln +5. optionale Automatisierung und Benachrichtigungen ## Empfohlene Reihenfolge -### 1) Basis in `Settings -> Konfiguration` +### 1. Basis in `Settings -> Konfiguration` -Setze zuerst: +Prüfe zuerst diese Kernfelder: -- `Raw-Ordner` und `Film-/Serien-Ordner` +- RAW- und Zielordner für Blu-ray, DVD, CD, Audiobooks und Converter - `Log Ordner` +- `TMDb Read Access Token` - `MakeMKV Kommando`, `HandBrake Kommando`, `Mediainfo Kommando` -- `OMDb API Key` +- `FFmpeg Kommando`, `FFprobe Kommando`, `cdparanoia Kommando`, `mkvmerge Kommando`, falls du die jeweiligen Workflows nutzt -Dann speichern. +Danach speichern. -### 2) Profile pro Medium festziehen +### 2. Pfade und Templates bewusst festlegen -Ripster löst viele Werte profilspezifisch auf (`bluray`, `dvd`, `cd`, `audiobook`). +Wichtig für den Alltag: -Pflichtprüfung: +- Film-Workflows nutzen `raw_dir_*`, `movie_dir_*` und `output_template_*` +- Serien-Workflows nutzen zusätzlich `raw_dir_*_series`, `series_dir_*` und die Episode-/Multi-Episode-Templates +- Audiobooks nutzen `raw_dir_audiobook`, `movie_dir_audiobook`, `audiobook_raw_template`, `output_template_audiobook`, `output_chapter_template_audiobook` +- Converter nutzt `converter_raw_dir`, `converter_movie_dir`, `converter_audio_dir` und die beiden Converter-Templates +- Downloads nutzen `download_dir` -- RAW-Pfade je Profil -- Output-Pfade je Profil -- HandBrake-Preset je Profil -- Output-Templates je Profil +Wenn du auf NAS, USB oder andere Benutzer/Gruppen schreiben willst, prüfe auch die jeweiligen `*_owner`-Felder. -Für Serien zusätzlich: +### 3. Laufwerk und automatische Erkennung prüfen -- `RAW-Ordner (Blu-ray/DVD Serie)` -- `Serien-Ordner (Blu-ray/DVD)` -- Serien-Templates (Episode/Multi-Episode) +Relevant: -### 3) Queue-Verhalten definieren +- `Laufwerksmodus` +- `Explizite Laufwerke`, falls du nicht mit Auto-Discovery arbeiten willst +- `Automatische Disk-Erkennung` +- `Polling Intervall (ms)` im Expertenmodus +- `Laufwerk nach Rip auswerfen` -Stelle ein: +Empfehlung: -- `Max. parallele Film/Video Encodes` +- Einzelnes Standardlaufwerk: `auto` +- mehrere stabile Laufwerke oder ungewöhnliche Device-Mappings: `Explizite Laufwerke` + +### 4. TMDb und Metadatenverhalten festlegen + +Relevant: + +- `TMDb Read Access Token` +- `Film-Sprache` +- `Fallback Sprache` +- `Coverart-Nachladen aktiv` +- `Coverart-Prüfintervall (Stunden)` +- `NFO nach Encode erzeugen` + +Diese Einstellungen wirken direkt in Metadatensuche, Serienzuordnung, Nachpflege von Covern und im finalen Output. + +### 5. Encode- und Review-Standards festlegen + +Für Video-Workflows besonders wichtig: + +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` +- `HandBrake Preset` und `HandBrake Extra Args` je Medium +- `Review Audio-Sprachen (...)` +- `Review UT-Sprachen (...)` +- `Ausgabeformat` + +Praxis: + +- `Minimale Titellänge` filtert Bonusmaterial früh weg +- `TMDb Runtime-Abzug ...` lockert bei problematischen Blu-rays die Laufzeitprüfung der Playlist-Kandidaten +- Review-Sprachen bestimmen, welche Audio-/Untertitelspuren in der Review schon vorausgewählt sind + +### 6. Queue-Verhalten definieren + +Stelle diese vier Felder bewusst ein: + +- `Parallele Jobs` - `Max. parallele Audio CD Jobs` -- `Max. Encodes gesamt` -- optional `Audio CDs: Queue-Reihenfolge überspringen` +- `Max. Encodes gesamt (medienunabhängig)` +- `Audio CDs: Queue-Reihenfolge überspringen` -Damit steuerst du Durchsatz, Priorität und Lastverteilung. +Damit steuerst du, wie aggressiv Ripster mehrere Jobs gleichzeitig startet. -### 4) Metadatenquellen absichern +### 7. Optional: User-Presets und Standard-Zuordnungen -Film: +Unter `Settings -> Encode-Presets` kannst du: -- OMDb-Key prüfen +- eigene HandBrake-User-Presets anlegen +- Standard-Zuordnungen für `Blu-ray Film`, `Blu-ray Serie`, `DVD Film`, `DVD Serie` setzen -Serien: +Diese Defaults wirken später in der Review automatisch vorbefüllend. -- TMDb Read Access Token setzen -- Sprache/Fallback-Sprachen festlegen +### 8. Optional: Benachrichtigungen -CD/Audiodaten: +Prüfe: -- `MusicBrainz aktiviert` nach Bedarf +- `PushOver aktiviert` +- Token/User/optional Device +- Event-Toggles wie `Bei manueller Auswahl senden`, `Bei Rip-Start senden`, `Bei Erfolg senden` -### 5) Optional: Benachrichtigungen +Danach in `Settings` den Button `PushOver Test` ausführen. -- PushOver-Zugangsdaten setzen -- `PushOver Test` ausführen -- Event-Toggles pro Phase prüfen +### 9. Optional: Automatisierung -### 6) Optional: Automatisierung +Erst wenn die Grundkonfiguration stabil ist: -1. Skripte testen -2. Skriptketten bauen/testen -3. Cronjobs erst danach aktivieren +1. Skripte anlegen und testen +2. Skriptketten aufbauen +3. Cronjobs aktivieren -## Funktionsprüfung (Kurztest) +## Funktionsprüfung -1. Disc in `Ripper` erkennen lassen. -2. `Analyse starten`. -3. Metadaten übernehmen. -4. Bis `Bereit zum Encodieren` laufen. -5. Encode starten und Abschluss in `Historie` prüfen. +Ein sinnvoller Kurztest: + +1. Disc in `Ripper` erkennen lassen +2. `Analyse starten` +3. TMDb-Metadaten übernehmen +4. ggf. Playlist-/RAW-Entscheidung durchlaufen +5. bis `Bereit zum Encodieren` kommen +6. Encode starten +7. Ergebnis in `Historie` prüfen ## Typische Konfigurationsfehler | Symptom | Häufige Ursache | |---|---| -| Job bleibt früh auf Fehler | Toolkommando falsch oder nicht im PATH | -| RAW/Output landet am falschen Ort | Profilpfade nicht gesetzt, Fallback greift | -| Serienausgabe landet bei Filmen | Serienpfade/Serientemplates fehlen | -| Queue verhält sich unerwartet | Gesamtlimit und Lane-Limits widersprechen sich | +| Disc wird nicht erkannt | Laufwerksmodus oder Auto-Erkennung passt nicht | +| Playlist-Auswahl wirkt unplausibel | `Minimale Titellänge` oder `TMDb Runtime-Abzug ...` ist zu streng/zu locker | +| falsche Spuren sind in der Review vorausgewählt | Review-Sprachfilter oder HandBrake-Args greifen unerwartet | +| Ausgabe landet am falschen Ort | Profilpfade oder Templates greifen über Fallback | +| Queue verhält sich unerwartet | `Parallele Jobs`, CD-Limit und Gesamtlimit widersprechen sich | ## Weiter - [Erster Lauf](quickstart.md) - [GUI-Seiten](../gui/index.md) - [Workflows aus Nutzersicht](../workflows/index.md) +- [Alle Einstellungen](../configuration/settings-reference.md) diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index 77058cf..eafdc42 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -1,107 +1,117 @@ # Installation -Die empfohlene Installation läuft über `install.sh` und richtet Ripster vollständig ein. +Die empfohlene Installation startet immer über `setup.sh`. `setup.sh` lädt das passende `install.sh` aus dem gewünschten Branch und übergibt alle weiteren Parameter unverändert an den eigentlichen Installer. -Du musst dafür **keine Tools manuell vorinstallieren**. Das Skript installiert die benötigten Abhängigkeiten automatisch, sofern sie nicht explizit mit `--no-*` übersprungen werden. +Wichtig: -## Unterstützte Systeme und Anforderungen +- Standard-Einstieg: `setup.sh` +- kein `curl | bash` +- du musst die Tools nicht manuell vorinstallieren, sofern du sie nicht bewusst mit `--no-*` auslässt -- unterstützt laut Script: `debian`, `ubuntu`, `linuxmint`, `pop` -- Ausführung als `root` (oder via `sudo`) +## Voraussetzungen + +- unterstütztes Linux-System +- Root-Rechte oder `sudo` - Internetzugang während der Installation -## Schritt-für-Schritt +Der Installer erkennt aktuell: -### 1. Installationsskript herunterladen +- Debian +- Ubuntu +- Linux Mint +- Pop!_OS + +## Standardinstallation ```bash -wget -qO install.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh +wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh +bash setup.sh ``` -### 2. Installation ausführen +Ohne `--branch` fragt `setup.sh` interaktiv nach dem gewünschten Branch. + +Die typischen Branches sind: + +- `main`: stabiles Release +- `dev`: aktueller Entwicklungsstand + +## Installation mit Branch oder Optionen + +Beispiele: ```bash -sudo bash install.sh +bash setup.sh --branch main +bash setup.sh --branch dev +bash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10 ``` -Während der Installation wählst du den HandBrake-Modus: +`setup.sh` wertet selbst nur `--branch` aus. Alles andere übernimmt `install.sh`. -- `1` Standard (Paketinstallation) -- `2` GPU/NVDEC (gebündeltes Binary) +## Wichtige Optionen von `install.sh` -### 3. Dienststatus prüfen +| Option | Default | Zweck | +|---|---|---| +| `--branch ` | `dev` | installiert genau diesen Git-Branch | +| `--dir ` | `/opt/ripster` | Installationsverzeichnis | +| `--user ` | `ripster` | Systembenutzer für den Dienst | +| `--port ` | `3001` | Backend-Port | +| `--host ` | automatisch ermittelte Host-IP | Hostname/IP für Webzugriff und CORS | +| `--no-makemkv` | aus | MakeMKV nicht installieren | +| `--no-handbrake` | aus | HandBrake nicht installieren | +| `--no-nginx` | aus | nginx-Setup überspringen | +| `--no-system-deps` | aus | Systemabhängigkeiten nicht nachinstallieren | +| `--reinstall` | aus | bestehende Installation aktualisieren | + +## Was der Installer einrichtet + +Typischer Ablauf: + +1. Betriebssystem, Root-Rechte und Host prüfen +2. Systemabhängigkeiten installieren +3. Node.js 20 sicherstellen +4. optional MakeMKV installieren +5. optional HandBrakeCLI installieren +6. optional nginx konfigurieren +7. Repository nach `--dir` klonen oder aktualisieren +8. Backend-/Frontend-Abhängigkeiten installieren +9. Frontend bauen +10. `backend/.env` und Laufzeitverzeichnisse vorbereiten +11. `ripster-backend.service` anlegen und starten + +## Dienst prüfen ```bash sudo systemctl status ripster-backend ``` -### 4. Weboberfläche öffnen - -- mit nginx (Standard): `http://` -- ohne nginx (`--no-nginx`): API auf `http://:3001/api` - -## Was `install.sh` konkret einrichtet - -1. prüft Betriebssystem, Root-Rechte und ermittelt Host/IP -2. aktualisiert Paketquellen und installiert Basispakete (`curl`, `wget`, `git`, `mediainfo`, `udev` ...) -3. installiert Node.js 20 (falls nicht passend vorhanden) -4. installiert optional MakeMKV (Build aus den offiziellen Quellen) -5. installiert optional HandBrakeCLI (Standard oder GPU/NVDEC) -6. installiert optional nginx -7. legt den Systembenutzer `ripster` an (ohne Login-Shell, ohne Home) und ergänzt Gruppen (`cdrom`, `optical`, `disk`, `video`, `render`, falls vorhanden) -8. klont das Repository nach `/opt/ripster` (oder aktualisiert bei `--reinstall`) -9. legt Verzeichnisse an: - - `/opt/ripster/backend/data` - - `/opt/ripster/backend/logs` - - `/opt/ripster/backend/data/output/raw` - - `/opt/ripster/backend/data/output/movies` - - `/opt/ripster/backend/data/logs` -10. installiert npm-Abhängigkeiten (Root, Backend, Frontend) und baut das Frontend -11. erzeugt `backend/.env` (bei `--reinstall` bleibt bestehende `.env` erhalten) -12. setzt Rechte/Besitz und erstellt bei sudo-Installation zusätzlich `~/.MakeMKV` für den aufrufenden Benutzer -13. erzeugt und startet `ripster-backend.service` -14. konfiguriert und startet nginx (falls nicht übersprungen) - -## Wichtige Optionen - -| Option | Default laut Script | Zweck | -|---|---|---| -| `--branch ` | `dev` | Branch für die Installation | -| `--dir ` | `/opt/ripster` | Installationsverzeichnis | -| `--user ` | `ripster` | Service-Benutzer | -| `--port ` | `3001` | Backend-Port | -| `--host ` | automatisch ermittelte Host-IP | Hostname/IP für Webzugriff/CORS | -| `--no-makemkv` | aus | MakeMKV-Installation überspringen | -| `--no-handbrake` | aus | HandBrake-Installation überspringen | -| `--no-nginx` | aus | nginx-Setup überspringen | -| `--reinstall` | aus | bestehende Installation aktualisieren | - -Beispiele: +Typische Aufrufe im Betrieb: ```bash -sudo bash install.sh --branch dev -sudo bash install.sh --port 8080 --host ripster.local -sudo bash install.sh --reinstall +sudo journalctl -u ripster-backend -f +sudo systemctl restart ripster-backend ``` -## Betrieb im Alltag +## Update einer bestehenden Installation + +Standard: ```bash -# Logs live ansehen -sudo journalctl -u ripster-backend -f - -# Dienst neu starten -sudo systemctl restart ripster-backend - -# Update aus bestehender Installation sudo bash /opt/ripster/install.sh --reinstall ``` -## Häufige Stolperstellen +Wenn die Installation mit abweichenden Kernparametern eingerichtet wurde, dieselben Parameter wieder mitgeben: -- Laufwerk nicht zugreifbar: Laufwerksrechte/Gruppen prüfen -- CLI-Tool fehlt wegen `--no-*`: Tool nachinstallieren oder Befehl in Settings korrigieren -- UI nicht erreichbar: nginx-Status und Firewall prüfen +```bash +sudo bash /opt/ripster/install.sh --reinstall --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10 +``` + +Alternativ kannst du auch erneut über `setup.sh` gehen: + +```bash +sudo bash /opt/ripster/setup.sh --reinstall +``` + +`--reinstall` aktualisiert die Installation, behält aber die persistenten Daten der bestehenden Instanz. ## Danach weiter diff --git a/docs/getting-started/prerequisites.md b/docs/getting-started/prerequisites.md index 9d0d0b3..322f403 100644 --- a/docs/getting-started/prerequisites.md +++ b/docs/getting-started/prerequisites.md @@ -1,19 +1,31 @@ # Voraussetzungen -Die Voraussetzungen hängen davon ab, **wie** du Ripster betreibst. +Die Voraussetzungen hängen davon ab, ob du Ripster produktiv installieren oder lokal entwickeln willst. -## Produktionsbetrieb mit `install.sh` (Standard) +## Produktionsbetrieb mit `setup.sh` -Für den normalen Betrieb sind nur wenige Punkte vorab nötig. +Für den normalen Betrieb brauchst du nur die Basisvoraussetzungen. Die eigentlichen Tools werden vom Installer eingerichtet, sofern du sie nicht bewusst mit `--no-*` überspringst. ### Pflicht -- unterstütztes Linux-System (laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS) -- `root`-Rechte +- unterstütztes Linux-System +- Root-Rechte oder `sudo` - Internetzugang während der Installation -- optisches Laufwerk für Disc-Betrieb +- optisches Laufwerk, wenn du Disc-Workflows nutzen willst -`install.sh` installiert die benötigten Tools selbst (u. a. Node.js, MakeMKV, HandBrakeCLI, MediaInfo), sofern sie nicht explizit per `--no-*` übersprungen werden. +Der Installer unterstützt aktuell: + +- Debian +- Ubuntu +- Linux Mint +- Pop!_OS + +Standard-Einstieg: + +```bash +wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh +bash setup.sh +``` ### Laufwerk kurz prüfen @@ -22,27 +34,25 @@ ls /dev/sr* lsblk | grep rom ``` -Wenn nötig Rechte setzen (Beispiel): - -```bash -sudo chmod a+rw /dev/sr0 -``` - ### Optional vorab -- OMDb API-Key (kann auch nach Installation in den `Settings` gesetzt werden) -- PushOver-Zugangsdaten (optional) +- TMDb Read Access Token für Film-/Serien-Metadaten +- PushOver-Zugangsdaten für Benachrichtigungen -## Entwicklungsmodus (nur für Dev) +Beides kann auch erst nach der Installation in `Settings` gesetzt werden. + +## Entwicklungsmodus Wenn du lokal entwickelst (`./start.sh`, `npm run dev`), gelten zusätzliche Voraussetzungen: -- Node.js >= 20.19.0 +- Node.js `>= 20.19.0` - `makemkvcon`, `HandBrakeCLI`, `mediainfo` im `PATH` Details: [Entwicklungsumgebung](../deployment/development.md) ## Abschluss-Checkliste -- [ ] Produktionsbetrieb: Linux + root + Internet + Laufwerk vorhanden -- [ ] Dev-Modus (nur falls benötigt): Node.js und CLI-Tools verfügbar +- [ ] Linux + Root/Sudo + Internet vorhanden +- [ ] optisches Laufwerk vorhanden, falls Disc-Ripping genutzt werden soll +- [ ] TMDb/PushOver-Zugangsdaten liegen bereit, falls diese Funktionen sofort genutzt werden sollen +- [ ] im Dev-Modus zusätzlich Node.js und CLI-Tools lokal verfügbar diff --git a/docs/getting-started/quickstart.md b/docs/getting-started/quickstart.md index 2401403..8aad634 100644 --- a/docs/getting-started/quickstart.md +++ b/docs/getting-started/quickstart.md @@ -1,19 +1,25 @@ # Erster Lauf -Dieser Ablauf führt einen vollständigen Disc-Job von Erkennung bis fertiger Datei durch. +Dieser Ablauf führt einen typischen Disc-Job von Erkennung bis fertiger Datei durch. -## 1) Disc erkennen +## 1. Disc erkennen -1. `Ripper` öffnen. -2. Disc einlegen. -3. Auf `Medium erkannt` warten. +1. `Ripper` öffnen +2. Disc einlegen +3. auf `Medium erkannt` warten Prüfen: -- `Disk-Information` zeigt Device/Label. -- Falls nicht: `Laufwerk neu lesen`. +- `Disk-Information` zeigt Device, Label und Laufwerksstatus +- falls nicht: `Laufwerk neu lesen` -## 2) Analyse starten +Relevante Settings: + +- `Laufwerksmodus` +- `Automatische Disk-Erkennung` +- `Polling Intervall (ms)` + +## 2. Analyse starten Aktion: @@ -22,69 +28,124 @@ Aktion: Erwartung: - Status `Analyse` -- danach Metadaten-Dialog +- danach der Metadaten-Dialog -## 3) Metadaten bestätigen +Relevantes Setting: + +- `Minimale Titellänge (Minuten)` beeinflusst bereits, welche Titel/Playlists Ripster später als relevant betrachtet + +## 3. Metadaten in TMDb bestätigen Im Dialog: -1. Treffer suchen/auswählen. -2. Bei Serie zusätzlich Disc-Nummer setzen. -3. `Auswahl übernehmen`. +1. Treffer suchen oder filtern +2. Film oder Serie auswählen +3. bei Serien zusätzlich `Disc-Nummer` setzen +4. `Auswahl übernehmen` Mögliche Abzweigungen: -- Duplikatfilm -> `Übernahme erzwingen` oder `Multipart movie` -- vorhandenes RAW -> Entscheidungsdialog (weiterverwenden oder neu rippen) +- Duplikatfilm: `Übernahme erzwingen` oder `Multipart movie` +- vorhandenes RAW: Entscheidungsdialog `weiterverwenden` oder `neu rippen` -## 4) Rip/Review-Phase +Relevante Settings: -Normalfall: +- `TMDb Read Access Token` +- `Film-Sprache` +- `Fallback Sprache` -- `Startbereit` -> `Rippen` -> `Mediainfo-Pruefung` +## 4. RAW- und Playlist-Entscheidungen -Mögliche Alternativen: +Je nach Disc-Situation geht es jetzt unterschiedlich weiter. -- vorhandenes RAW: direkter Sprung in Prüfung -- Blu-ray/DVD-Entscheidung nötig: `Warte auf Auswahl` für Playlist/Titel +### Normalfall -## 5) Encode-Review abschließen +`Startbereit` -> `Rippen` -> `Mediainfo-Prüfung` -Bei `Bereit zum Encodieren`: +### Vorhandenes RAW -- Titel festlegen -- Audio-/Subtitle-Spuren prüfen -- optional Preset auswählen -- optional Pre-/Post-Skripte wählen +Kein neuer Rip, sondern erst eine Entscheidung: + +- vorhandenes RAW weiterverwenden +- RAW löschen und Rip neu starten +- bei passenden Film-Konstellationen optional Multipart mit Orphan-RAW + +### Playlist- oder Titelauswahl erforderlich + +Bei bestimmten Blu-ray-/DVD-Fällen erscheint `Warte auf Auswahl`. + +Dann bestätigst du: + +- eine Playlist +- oder einen/mehrere HandBrake-Titel + +Relevante Settings: + +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` + +## 5. Encode-Review abschließen + +Bei `Bereit zum Encodieren` prüfst du: + +- Titelwahl +- Audio-Spuren +- Untertitel +- User-Preset oder HandBrake-Preset +- Pre-/Post-Encode-Skripte und Ketten Dann: - `Encoding starten` -## 6) Encoding überwachen +Relevante Settings: + +- `HandBrake Preset` und `HandBrake Extra Args` je Medium +- `Review Audio-Sprachen (...)` +- `Review UT-Sprachen (...)` +- `Ausgabeformat` +- Standard-Zuordnungen unter `Settings -> Encode-Presets` + +## 6. Encoding überwachen Während `Encodieren`: - Fortschritt/ETA im Ripper -- Queue- und Runtime-Status beobachten -- optional Logkontrolle in Historie +- Queue-Status beobachten +- bei Bedarf `Hardware`-Ansicht öffnen -## 7) Ergebnis verifizieren +Relevante Settings: + +- `Parallele Jobs` +- `Max. parallele Audio CD Jobs` +- `Max. Encodes gesamt (medienunabhängig)` +- `Hardware Monitoring aktiviert` +- `Hardware Monitoring Intervall (ms)` + +## 7. Ergebnis verifizieren Nach `Fertig`: -1. `Historie` öffnen. -2. Jobdetail prüfen. -3. Output-Pfad und Log plausibilisieren. +1. `Historie` öffnen +2. Jobdetail prüfen +3. Output-Pfad und Log kontrollieren Kontrollpunkte: -- finale Datei am erwarteten Template-Pfad -- RAW-Ordnerzustand finalisiert (kein `Incomplete_`) +- finale Datei liegt am erwarteten Template-Pfad +- RAW-Ordner ist finalisiert +- optional `.nfo` wurde erzeugt, falls aktiviert -## 8) Typische Folgeaktionen +Relevante Settings: -- falsche Metadaten: `OMDb neu zuordnen` +- `output_template_*` +- `series_dir_*` und Serien-Templates +- `generate_nfo_after_encode` + +## 8. Typische Folgeaktionen + +- falsche TMDb-Zuordnung: `TMDb neu zuweisen` - andere Trackauswahl: `Review neu starten` - erneuter Encode aus RAW: `RAW neu encodieren` - gleicher Plan erneut: `Encode neu starten` +- Rip erneut versuchen: `Retry Rippen` diff --git a/docs/gui/audiobooks.md b/docs/gui/audiobooks.md index 74a1328..e4e0c57 100644 --- a/docs/gui/audiobooks.md +++ b/docs/gui/audiobooks.md @@ -9,74 +9,100 @@ Die Oberfläche besteht aus zwei Hauptbereichen: 1. `Audiobooks Upload` 2. `Audiobook Jobs` -## 1) Audiobooks Upload +## 1. Audiobooks Upload Der Upload akzeptiert ausschließlich `.aax`. ### Bedienung -- Datei auswählen (Button oder Drag-and-Drop) +- Datei auswählen oder per Drag-and-Drop ablegen - Upload starten - Auswahl entfernen oder laufenden Upload abbrechen Während des Uploads zeigt die UI: - Prozentfortschritt -- übertragene/gesamte Bytes -- Statusmeldung (z. B. „Job vorbereitet“, „in Queue eingereiht“) +- übertragene und gesamte Bytes +- Statusmeldung ### Ablauf nach erfolgreichem Upload -- AAX wird serverseitig geprüft -- Audiobook-Job wird angelegt -- Job landet je nach Pipelinezustand in `READY_TO_START`, startet direkt oder wird eingereiht +- die AAX-Datei wird geprüft +- Ripster versucht Metadata, Kapitel und Activation-Bytes-Kontext aufzubauen +- ein Audiobook-Job wird angelegt +- der Job startet direkt oder wird in die Queue eingereiht -## 2) Audiobook Jobs +## 2. Audiobook Jobs -Gezeigt werden aktive Jobs (nicht abgeschlossene). Fertige Jobs liegen in der `Historie`. +Die Seite zeigt aktive Jobs. Abgeschlossene Jobs findest du in der `Historie`. -Jeder Job kann eingeklappt/ausgeklappt werden und zeigt: +Ein Job kann eingeklappt oder ausgeklappt werden und zeigt: -- Titel-/Metadatenblock (Titel, Autor, Sprecher, Jahr, Kapitel) -- Statusbadge -- Fortschritt/ETA -- ggf. Kapitel-Fortschritt +- Titel, Autor, Sprecher, Jahr +- Kapitelanzahl +- Fortschritt und ETA +- bei Split-Ausgabe den Kapitelstatus -### Konfigurierbare Job-Parameter +## Konfigurierbare Job-Parameter -Im ausgeklappten Job: +Im ausgeklappten Job kannst du setzen: -- Ausgabeformat (`m4b`, `mp3`, `flac`) -- formatspezifische Optionen (dynamisch je Format) -- Kapitelnamen bearbeiten -- Pre-Rip-Ausführungen (Skript/Kette) -- Post-Rip-Ausführungen (Skript/Kette) +- Ausgabeformat `m4b`, `mp3` oder `flac` +- formatspezifische Optionen +- Kapitelnamen +- Pre-Encode-Skripte und -Ketten +- Post-Encode-Skripte und -Ketten ### Formatverhalten -- `m4b`: eine Datei mit Kapiteln -- `mp3`/`flac`: kapitelweise Ausgabedateien +- `m4b`: eine Datei mit Kapitelmarken +- `mp3`: eine Datei pro Kapitel +- `flac`: eine Datei pro Kapitel -Für `mp3`/`flac` zeigt die UI während/nach dem Lauf eine Kapitel-Status-Tabelle (`Rip`/`Encode`). +Wenn du `mp3` oder `flac` wählst, zeigt die UI zusätzlich eine Kapitel-Status-Tabelle. -### Aktionen je Job +## Activation Bytes -- `Encode starten` (bzw. Neustart mit aktuellen Optionen) -- `Abbrechen` -- `Job löschen` (mit Bestätigung) +Wenn Ripster für eine Datei keine Activation Bytes verwenden kann, wird im Workflow eine manuelle Eingabe nötig. + +Wichtig: + +- die Bytes werden lokal gecacht +- derselbe AAX-Hash muss dann später nicht erneut manuell eingegeben werden +- der Expertenblock in `Settings` zeigt bekannte Cache-Einträge an ## Relevante Settings - `raw_dir_audiobook` - `movie_dir_audiobook` +- `raw_dir_audiobook_owner` +- `movie_dir_audiobook_owner` - `audiobook_raw_template` - `output_template_audiobook` - `output_chapter_template_audiobook` - `ffprobe_command` - `ffmpeg_command` +### So wirken die Settings im Alltag + +- `audiobook_raw_template` bestimmt den Namen des AAX-RAW-Ordners +- `output_template_audiobook` bestimmt die Einzeldatei für `m4b` +- `output_chapter_template_audiobook` bestimmt Zielstruktur und Dateinamen für `mp3`/`flac` +- `ffprobe_command` liest Kapitel und Metadaten +- `ffmpeg_command` erzeugt die finalen Dateien + +## Queue und Laufzeit + +Audiobook-Jobs nutzen dieselbe globale Pipeline wie die anderen Bereiche. + +Relevante Settings: + +- `Parallele Jobs` +- `Max. Encodes gesamt (medienunabhängig)` + ## Typische Fehlerbilder -- Upload wird abgelehnt: Datei ist keine gültige `*.aax`. -- Start/Encode schlägt fehl: `ffprobe` oder `ffmpeg` nicht erreichbar. -- Unerwartete Ausgabeorte: Templates/Pfade passen nicht zur gewünschten Struktur. +- Upload wird abgelehnt: Datei ist keine gültige `*.aax` +- Analyse schlägt fehl: `ffprobe` ist nicht erreichbar +- Encode schlägt fehl: `ffmpeg` ist nicht erreichbar +- Ausgabe landet unerwartet: Templates oder Zielpfade passen nicht zur gewünschten Struktur diff --git a/docs/gui/converter.md b/docs/gui/converter.md index cdcca56..080da58 100644 --- a/docs/gui/converter.md +++ b/docs/gui/converter.md @@ -1,19 +1,22 @@ # Converter -Die Seite `Converter` verarbeitet bereits vorhandene Dateien (Video, Audio, ISO) ohne Laufwerks-Rip. +Die Seite `Converter` verarbeitet vorhandene Dateien ohne Laufwerks-Rip. Sie ist für Video-, Audio- und ISO-Dateien gedacht, die bereits auf dem System liegen oder hochgeladen werden. ## Betriebsmodell -Der Converter arbeitet auf dem Eingangspfad `converter_raw_dir`: +Der Converter arbeitet auf dem Eingangspfad `converter_raw_dir`. -- Uploads landen dort -- Explorer-Aktionen arbeiten dort -- daraus werden Converter-Jobs erstellt +Dort landen: + +- Uploads +- neu angelegte Ordner +- umbenannte oder verschobene Dateien +- alle Dateien, aus denen später Converter-Jobs entstehen Wichtig: -- Upload erzeugt nicht automatisch einen Job. -- Joberstellung erfolgt explizit über Auswahl im Explorer. +- Upload erzeugt nicht automatisch einen Job +- die Joberstellung erfolgt bewusst aus der Explorer-Auswahl ## Datei-Explorer @@ -23,17 +26,24 @@ Aktionen: | Aktion | Wirkung | |---|---| -| `Upload` | Dateien werden in den Raw-Baum geschrieben | -| `Ordner erstellen` | legt Unterordner im Raw-Baum an | -| `Umbenennen` | benennt Datei/Ordner im Raw-Baum um | -| `Verschieben` | verschiebt innerhalb des Raw-Baums | -| `Löschen` | entfernt Datei/Ordner dauerhaft | -| `Scannen` | synchronisiert Explorer und DB-Zuordnungen | +| `Upload` | schreibt neue Dateien in den Converter-RAW-Baum | +| `Ordner erstellen` | legt Unterordner an | +| `Umbenennen` | benennt Datei oder Ordner um | +| `Verschieben` | verschiebt Einträge innerhalb des Raw-Baums | +| `Löschen` | entfernt Datei oder Ordner dauerhaft | +| `Scannen` | synchronisiert Dateisystem und Converter-Datenbank | -Upload-Regeln: +### Upload- und Scan-Regeln -- Dateiendung muss in `Erlaubte Datei-Endungen*` enthalten sein -- bei Verstoß wird der Upload abgelehnt +- Dateiendungen müssen in `Erlaubte Datei-Endungen` enthalten sein +- neue Dateien erscheinen sofort nach manuellem Scan +- mit Polling auch automatisch + +Relevante Settings: + +- `Erlaubte Datei-Endungen` +- `Auto-Scan (Polling)` +- `Polling-Intervall (Sekunden)` ## Joberstellung aus Explorer-Auswahl @@ -44,65 +54,75 @@ Es gibt zwei Audio-Strategien: Verhalten: -- Video/ISO werden grundsätzlich als Einzeljobs angelegt. -- Audio kann als Shared-Job mit mehreren Eingabedateien erzeugt werden. +- Video und ISO werden immer als Einzeljobs angelegt +- Audio kann als gemeinsamer Album-/Ordner-Job erzeugt werden Shared-Audio-Job: - hält mehrere `inputPaths` -- kann vor Start erweitert/reduziert werden (nur Audio-Dateien) +- kann vor dem Start erweitert oder reduziert werden ## Job-Konfiguration -Vor Start je Job einstellbar: +Vor dem Start je Job einstellbar: -- `converterMediaType` (`video`, `audio`, `iso`) +- `converterMediaType` - `outputFormat` - Metadaten -- Track-/Titelwahl (bei video/iso) +- Track-/Titelwahl bei Video/ISO +- User-Preset und HandBrake-Preset bei Video - Pre-/Post-Encode-Skripte und Ketten Spezifika: -- Video/ISO laufen durch Mediainfo/Review ähnlich zum Disc-Flow. -- Audio kann direkt mit Formatoptionen konfiguriert werden. +- Video/ISO durchlaufen eine Review ähnlich zum Disc-Flow +- Audio wird direkt über Format und Audio-Optionen konfiguriert ## Ausgabe-Pfade -### Video/ISO +### Video / ISO -- Root: `converter_movie_dir` +- Zielordner: `converter_movie_dir` - Dateiname: `Output-Template (Video)` -- Endung: aus gewähltem Output-Format +- Endung: aus dem gewählten Ausgabeformat ### Audio -- Root: `converter_audio_dir` +- Zielordner: `converter_audio_dir` - Dateiname/Ordner: `Output-Template (Audio)` -- bei Shared-/Folder-Job: Ausgabe als Ordnerstruktur mit Trackdateien - -## Queue und Start - -Converter-Jobs laufen über dieselbe Pipeline-/Queue-Logik: - -- sofortiger Start wenn Limits frei -- sonst Queue-Eintrag - -Parallelität richtet sich nach den globalen Encode-Limits in `Settings`. - -## Auto-Scan (Polling) - -Mit aktiviertem Polling: - -- `converter_raw_dir` wird zyklisch gescannt -- neue Dateien erscheinen automatisch im Explorer +- bei Shared- oder Folder-Jobs entsteht eine Ordnerstruktur mit mehreren Track-Dateien Relevante Settings: -- `Auto-Scan (Polling)` -- `Polling-Intervall (Sekunden)` +- `converter_movie_dir` +- `converter_audio_dir` +- `converter_output_template_video` +- `converter_output_template_audio` +- `converter_movie_dir_owner` +- `converter_audio_dir_owner` + +## Queue und Start + +Converter-Jobs laufen über dieselbe globale Pipeline-Queue wie Ripper und Audiobooks. + +Das bedeutet: + +- sofortiger Start, wenn Limits frei sind +- sonst Einreihung in die Warteschlange + +Relevante Settings: + +- `Parallele Jobs` +- `Max. Encodes gesamt (medienunabhängig)` + +## Typische Einsatzfälle + +- vorhandene MKV/MP4-Dateien mit neuem Preset encodieren +- ISO-Dateien in einen Video-Workflow überführen +- Musikdateien gesammelt in einen Audio-Ordner-Job packen +- Medien auf anderem Storage per Upload oder Dateibaum vorbereiten ## Abgrenzung zu Audiobooks -- `Converter`: beliebige Audio/Video/ISO-Dateien -- `Audiobooks`: dedizierter AAX-Workflow mit Kapitel-/Audiobook-Metadaten +- `Converter`: beliebige Audio-, Video- und ISO-Dateien +- `Audiobooks`: spezialisierter AAX-Workflow mit Activation Bytes, Kapitelmetadaten und Kapiteltemplates diff --git a/docs/gui/hardware.md b/docs/gui/hardware.md new file mode 100644 index 0000000..1824f66 --- /dev/null +++ b/docs/gui/hardware.md @@ -0,0 +1,45 @@ +# Hardware + +Die Seite `Hardware` ist die ausführliche Detailansicht für das Live-Monitoring aus dem `Ripper`. + +## Was die Seite zeigt + +- aktuelle CPU-Auslastung +- RAM-Auslastung +- GPU-Auslastung und VRAM, falls vorhanden +- Temperaturen +- Verlaufshistorie für Auslastung und Temperatur +- Zeitfenster für `1h`, `6h`, `24h`, `4d` + +## Live-Bereich + +Oben zeigt die Seite: + +- ob Monitoring aktiv ist +- aktuelles Polling-Intervall +- Zeitpunkt der letzten Messung + +Wenn Monitoring deaktiviert ist, führt die Seite direkt zu `Settings`. + +## Historie + +Die Historie lädt Messpunkte aus dem Backend und zeigt: + +- Auslastung als Linienchart +- Temperatur als Linienchart +- umschaltbare Serien für CPU, RAM und GPU + +Das ist besonders nützlich bei: + +- mehreren parallelen Encodes +- Fehlersuche bei Hitzespitzen +- Abschätzung, ob weitere Jobs sinnvoll gestartet werden können + +## Relevante Settings + +- `Hardware Monitoring aktiviert` +- `Hardware Monitoring Intervall (ms)` + +Außerdem sinnvoll: + +- `Externe Speicher`, damit Speicherstände im `Ripper` sinnvoll angezeigt werden diff --git a/docs/gui/history.md b/docs/gui/history.md index 33ac752..41c43bb 100644 --- a/docs/gui/history.md +++ b/docs/gui/history.md @@ -6,7 +6,7 @@ Filter und Arbeitsmittel: -- Suche (Titel, IMDb, Kontextbegriffe) +- Suche - Statusfilter - Mediumfilter - Sortierung @@ -14,62 +14,61 @@ Filter und Arbeitsmittel: Jeder Eintrag zeigt auf einen Blick: -- Titel, Jahr, Poster +- Titel, Jahr, Poster oder Cover - Status und Zeitstempel -- RAW-/Output-Verfügbarkeit -- Medien- und ggf. Containerhinweise +- RAW- und Output-Verfügbarkeit +- Medien- und Containerhinweise -## Detaildialog: Was dort zusammenläuft +## Detaildialog Der Detaildialog bündelt: -- Metadaten (Film oder Serie) +- Metadaten - Jobstatus und Fehlertexte -- RAW-/Output-Pfade +- RAW- und Output-Pfade - Encode-Plan und Trackauswahl -- ausgeführte Kommandodetails -- Prozesslog (`Tail` oder vollständig) +- ausgeführte Kommandos +- Prozesslog +- verfügbare Folgeaktionen -Bei Seriencontainern wird disk-/child-orientiert dargestellt, nicht nur als Einzeljob. +Bei Seriencontainern und Multipart-Jobs wird container- und child-orientiert dargestellt. -## Nachbearbeitungsaktionen und Wirkung +## Nachbearbeitungsaktionen | Aktion | Typischer Einsatz | Technische Wirkung | |---|---|---| -| `OMDb neu zuordnen` | falsches Match, Titel/Jahr korrigieren | Metadatenfelder werden neu geschrieben; Folder-Rename wird best effort angestoßen | -| `Review neu starten` | neue Track-/Titelbewertung nötig | Mediainfo/Review wird aus RAW neu aufgebaut | -| `RAW neu encodieren` | neuer Encode aus vorhandenem RAW | startet Encode ohne neuen Laufwerks-Rip | -| `Encode neu starten` | gleiche bestätigte Auswahl erneut fahren | letzter bestätigter Plan wird geladen, optional mit Bereinigung unvollständiger Ausgabe | -| `Retry Rippen` | Rip/Analyse neu anstoßen | neuer Rip-Lauf, inkl. erneuter RAW-Phase | +| `TMDb neu zuweisen` | falsches Match, anderer Film, andere Staffel | Metadaten werden neu geschrieben; Poster, Jahr und ggf. Ordnername werden best effort aktualisiert | +| `Review neu starten` | neue Track-/Titelbewertung nötig | Review wird aus vorhandenem RAW neu aufgebaut | +| `RAW neu encodieren` | neuer Encode mit vorhandenem RAW | startet Encode ohne neuen Disc-Rip | +| `Encode neu starten` | gleiche bestätigte Auswahl erneut fahren | letzter bestätigter Plan wird geladen | +| `Retry Rippen` | Rip oder Analyse erneut anstoßen | neuer Rip-Lauf inklusive RAW-Phase | -Löschaktionen im Dialog: +Relevante Settings: -- `RAW löschen` -- `Movie löschen` -- `Beides löschen` -- `Historieneintrag löschen` +- `handbrake_restart_delete_incomplete_output` +- `generate_nfo_after_encode` -## Löschvorschau und selektives Löschen +## Löschaktionen und Vorschau -Vor endgültigem Löschen zeigt Ripster eine Vorschau mit: +Vor dem endgültigen Löschen zeigt Ripster eine Vorschau mit: -- `RAW`-Kandidaten -- `Movie`-/Episoden-Kandidaten -- Related-Scope (Container/Kinder/verbundene Jobs) +- RAW-Kandidaten +- Movie-/Episode-Kandidaten +- Related-Scope für Container, Kinder und verbundene Jobs Wichtige Punkte: -- Pfade sind selektierbar. -- Für RAW-Löschung muss bei Mehrfachkandidaten mindestens ein RAW-Pfad gewählt werden. -- Schutzlogik verhindert Löschungen außerhalb erlaubter Root-Verzeichnisse. +- Pfade sind selektierbar +- bei mehreren RAW-Kandidaten muss mindestens ein RAW-Pfad gewählt werden +- Schutzlogik verhindert Löschungen außerhalb erlaubter Root-Verzeichnisse -## Serien- und Multipart-Sicht in der Historie +## Serien- und Multipart-Sicht ### Serien -- Container zeigt aggregierten Zustand aus Child-Jobs. -- Disk-/Episode-Aktionen können child-spezifisch ausgeführt werden. -- `Im Ripper öffnen` hilft bei `Bereit zum Encodieren`-Kindern. +- Container zeigt den aggregierten Zustand der Child-Jobs +- Disk- und Episodenaktionen können child-spezifisch ausgeführt werden +- `Im Ripper öffnen` hilft bei offenen Reviews ### Multipart @@ -79,11 +78,11 @@ Wichtige Punkte: ## Logs sinnvoll nutzen -- `Tail laden (800)` für schnellen Fehlerkontext -- `Vollständiges Log laden` für forensische Analyse +- `Tail laden` für schnellen Fehlerkontext +- `Vollständiges Log laden` für tiefe Analyse Empfehlung: -1. Erst Tail prüfen. -2. Bei Pfad-/Toolproblemen vollständiges Log laden. -3. Danach passende Wiederanlauf-Aktion wählen. +1. erst den Tail prüfen +2. dann die Stelle im Log eingrenzen +3. anschließend die passende Wiederanlauf-Aktion wählen diff --git a/docs/gui/index.md b/docs/gui/index.md index 983f25d..47e69ca 100644 --- a/docs/gui/index.md +++ b/docs/gui/index.md @@ -6,28 +6,37 @@ Dieses Kapitel ist das Bedienhandbuch für die Oberflächen im Alltag. | Seite | Rolle im Betrieb | Typischer Einsatz | |---|---|---| -| [Ripper](ripper.md) | Live-Steuerung der Pipeline | Disc-Flow starten, Queue steuern, Review freigeben | -| [Audiobooks](audiobooks.md) | AAX-Spezialflow | Upload, Jobkonfiguration und Encode von Audiobooks | -| [Settings](settings.md) | Konfiguration/Automatisierung | Pfade, Tools, Queue-Limits, Skripte, Cron | -| [Historie](history.md) | Nachbearbeitung und Kontrolle | Logs, Re-Encode, Löschvorschau, Recovery-Aktionen | +| [Ripper](ripper.md) | Live-Steuerung der Disc-Pipeline | Disc erkennen, Analyse starten, Entscheidungen treffen, Queue steuern | +| [Hardware](hardware.md) | Detailansicht für Live-Monitoring | CPU/RAM/GPU und Verlauf prüfen | +| [Audiobooks](audiobooks.md) | AAX-Spezialflow | Upload, Kapitelprüfung und Encode von Audiobooks | +| [Settings](settings.md) | Konfiguration und Automatisierung | Pfade, Tools, Queue, Presets, Skripte, Cron | +| [Historie](history.md) | Nachbearbeitung und Kontrolle | Logs, Re-Encode, TMDb-Neuzuordnung, Löschvorschau | | [Converter](converter.md) | dateibasierte Konvertierung | Video/Audio/ISO ohne Disc-Rip verarbeiten | -| [Downloads](downloads.md) | ZIP-Exports | RAW/Output aus Historie bereitstellen | -| [Database (Expert)](database.md) | Recovery-Sicht | orphan RAW finden und importieren | +| [Downloads](downloads.md) | ZIP-Exports | RAW/Output aus der Historie bereitstellen | +| [Database (Expert)](database.md) | Recovery-Sicht | orphan RAW finden, prüfen und importieren | +| [TMDb Migration](tmdb-migration.md) | Sonderseite für Altbestände | alte Jobs gesammelt auf TMDb umstellen | ## Empfohlener Tagesablauf -1. `Ripper` oder `Converter`/`Audiobooks`: neue Arbeit starten. -2. `Historie`: Ergebnisse validieren und ggf. nachbearbeiten. -3. `Downloads`: Exporte für externe Übergabe erzeugen. -4. `Settings`: Regeln und Limits nur kontrolliert anpassen. +1. `Ripper`, `Converter` oder `Audiobooks`: neue Arbeit starten +2. `Historie`: Ergebnisse kontrollieren und ggf. nachbearbeiten +3. `Downloads`: Artefakte für externe Übergabe vorbereiten +4. `Settings`: Regeln, Presets oder Limits nur kontrolliert anpassen +5. `Hardware`: bei Lastspitzen oder Batch-Läufen den Verlauf prüfen ## Navigation Direkt in der Top-Navigation: -- `Ripper`, `Converter`, `Audiobooks`, `Settings`, `Historie`, `Downloads` +- `Ripper` +- `Converter` +- `Audiobooks` +- `Settings` +- `Historie` +- `Downloads` -Nur per URL: +Zusatzansichten: -- `Database` unter `/database` (nur Expertenmodus in der Navigation sichtbar) -- `TMDb Migration` unter `/tmdb-migration` (Direktlink, nicht in der Navigation) +- `Hardware` unter `/hardware` +- `Database` unter `/database` und im Expertenmodus zusätzlich in der Navigation +- `TMDb Migration` unter `/tmdb-migration` als Direktlink diff --git a/docs/gui/ripper.md b/docs/gui/ripper.md index ba0679d..1f36001 100644 --- a/docs/gui/ripper.md +++ b/docs/gui/ripper.md @@ -1,68 +1,76 @@ # Ripper -Die Seite `Ripper` ist die Live-Steuerung der Pipeline. Hier laufen Disc-Erkennung, Queue-Steuerung, Review und Encode-Start zusammen. +Die Seite `Ripper` ist die Live-Steuerung der Disc-Pipeline. Hier laufen Disc-Erkennung, Queue, manuelle Entscheidungen, Review und aktive Jobs zusammen. -## Seitenaufbau und Betriebslogik +## Seitenaufbau -Die Bereiche erscheinen in dieser Reihenfolge: +Die wichtigsten Bereiche: -1. `Hardware Monitoring` +1. `Hardware` 2. `Job Queue` 3. `Skript- / Cron-Status` 4. `Job Übersicht` 5. `Disk-Information` -## 1) Hardware Monitoring +## 1. Hardware -Zeigt kontinuierlich: +Die Hardware-Karte zeigt live: -- CPU / RAM -- GPU (wenn verfügbar) -- freie Speicherstände konfigurierter Pfade +- CPU +- RAM +- GPU, falls vorhanden +- freie Speicherstände der konfigurierten Pfade -Nutzen im Betrieb: +Aktionen: -- Engpässe vor Jobfehlern erkennen -- Pfadfüllstände vor Start großer Batchs prüfen +- Klick auf das Hardware-Symbol öffnet die Seite [Hardware](hardware.md) -Gesteuert über `Settings`: +Relevante Settings: - `Hardware Monitoring aktiviert` - `Hardware Monitoring Intervall (ms)` +- `Externe Speicher` -## 2) Job Queue +## 2. Job Queue Es gibt zwei operative Zonen: -- `Laufende Jobs` -- `Warteschlange` +- laufende Jobs +- Warteschlange Mögliche Queue-Einträge: -- Job-Startaktionen (`Start`, `Retry Rippen`, `RAW neu encodieren`, `Encode neu starten`, `Review neu berechnen`, `Audio CD starten`) -- Nicht-Job-Einträge (`Skript`, `Skriptkette`, `Warten`) +- normale Job-Starts +- `Retry Rippen` +- `RAW neu encodieren` +- `Encode neu starten` +- `Review neu starten` +- `Audio CD starten` +- `Skript` +- `Skriptkette` +- `Warten` Wichtige Regeln: -- Queue-Reihenfolge ist per Drag-and-Drop änderbar. -- `Warten` blockiert nachfolgende Queue-Starts bis kein aktiver Prozess mehr läuft. -- `Skript` und `Skriptkette` werden als Queue-Einträge mitgeführt. +- Reihenfolge ist per Drag-and-Drop änderbar +- `Warten` blockiert nachfolgende Starts, bis keine aktive Verarbeitung mehr läuft +- Queue-Einträge können auch ohne Medienjob existieren -Parallelität kommt aus `Settings`: +Relevante Settings: -- `Max. parallele Film/Video Encodes` +- `Parallele Jobs` - `Max. parallele Audio CD Jobs` -- `Max. Encodes gesamt` -- optional `Audio CDs: Queue-Reihenfolge überspringen` +- `Max. Encodes gesamt (medienunabhängig)` +- `Audio CDs: Queue-Reihenfolge überspringen` -## 3) Skript- / Cron-Status +## 3. Skript- / Cron-Status Zeigt Runtime-Aktivitäten: - laufende Skripte - laufende Ketten - Cron-Ausführungen -- letzte abgeschlossene Aktivitäten +- kürzlich abgeschlossene Aktivitäten Aktionen: @@ -70,66 +78,103 @@ Aktionen: - `Abbrechen` - `Liste leeren` -## 4) Job Übersicht +## 4. Job Übersicht Die Jobliste ist der zentrale Arbeitsbereich. Ein Klick öffnet den jeweiligen `Pipeline-Status`. -### Badges und Kontext +### Zustandsabhängige Hauptaktionen -Neben Status/Fortschritt zeigt die Liste je nach Job: - -- Serienkontext (`Serien-Container`, Staffel/Disk) -- Multipart-Kontext (`Multipart Movie`, Disc-Nr.) -- Queue-/Subjob-Kontext bei Serien-Episoden - -### Zustandsabhängige Aktionen - -| Zustand | Hauptaktion im Ripper | Ergebnis | +| Zustand | Typische Aktion | Ergebnis | |---|---|---| -| `Medium erkannt`, `Bereit` | `Analyse starten` | startet MakeMKV-Analyse | -| `Metadatenauswahl` | `Metadaten öffnen` | Film/Serie auswählen, Provider festlegen | -| `Warte auf Auswahl` | Playlist/Titel/RAW-Entscheidung bestätigen | setzt Flow fort zur Prüfung | -| `Startbereit` | `Job starten` | startet Rip oder RAW-basierte Prüfung | -| `Bereit zum Encodieren` | `Encoding starten` | startet HandBrake mit bestätigter Auswahl | -| Laufend (`Analyse`, `Rippen`, `Encodieren`) | `Abbrechen` | setzt Job auf `Abgebrochen` | -| `Fehler`, `Abgebrochen` | `Retry Rippen` | neuer Rip-Anlauf | +| `Medium erkannt` | `Analyse starten` | MakeMKV-Analyse beginnt | +| `Metadatenauswahl` | `Metadaten öffnen` | TMDb-Dialog für Film/Serie | +| `Warte auf Auswahl` | Entscheidung bestätigen | Flow geht an die passende Stelle weiter | +| `Startbereit` | `Job starten` | Rip oder RAW-basierte Prüfung startet | +| `Bereit zum Encodieren` | `Encoding starten` | HandBrake startet mit bestätigter Auswahl | +| laufend | `Abbrechen` | Job wird gestoppt | +| `Fehler` / `Abgebrochen` | `Retry Rippen` | neuer Rip-Anlauf | -Zusatzaktionen je nach Zustand und Jobtyp: +### Was `Warte auf Auswahl` heute bedeuten kann -- `Review neu starten` -- `Encode neu starten` -- `RAW neu encodieren` -- `Aus Queue löschen` +Der Status ist nicht nur für eine einzige Entscheidung da. Im aktuellen Stand gibt es drei typische Fälle: -### Review-Bereich (`Bereit zum Encodieren`) +#### Vorhandenes RAW -Hier wird die effektive Encode-Entscheidung festgelegt: +Ripster hat zu den Metadaten bereits ein passendes RAW gefunden. Dann entscheidest du: -- Titelwahl -- Audio-/Subtitle-Trackselektion -- User-Preset -- Pre-/Post-Encode-Skripte und Ketten -- HandBrake-Kommandovorschau +- mit RAW weiterarbeiten +- RAW löschen und neu rippen +- in passenden Film-Fällen optional Multipart mit Orphan-RAW bilden -Ohne Bestätigung dieses Blocks startet kein produktiver Encode. +#### Playlist-Auswahl -### RAW-Ordnerphasen (sichtbar über Logs/Details) +Bei mehrdeutigen Blu-rays oder bestimmten DVD-Fällen musst du eine Playlist bestätigen. Die Liste zeigt unter anderem: + +- Playlist-Datei +- Titel-ID +- Laufzeit +- Score +- Empfehlung +- Segment- und Audio-Vorschau + +Relevante Settings: + +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` +- `Bei manueller Auswahl senden` für PushOver + +#### Titelauswahl / PlayAll-Grenzfall + +Wenn Ripster mehrere HandBrake-Titel als plausibel erkannt hat, musst du einen oder mehrere Titel bestätigen. Bei Serien kann das der Grenzfall `PlayAll oder Doppelfolge?` sein. + +## 5. Review-Bereich (`Bereit zum Encodieren`) + +Hier triffst du die eigentliche Encode-Entscheidung. + +Du legst fest: + +- welchen Titel Ripster encodieren soll +- welche Audio-Spuren übernommen werden +- welche Untertitel übernommen, erzwungen oder eingebrannt werden +- welches User-Preset oder HandBrake-Preset verwendet wird +- welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen + +Wichtig: + +- ohne diese Bestätigung startet kein produktiver Encode +- bei Multipart-Locks können Einstellungen von einer Referenz-Disc übernommen und gesperrt sein + +### Welche Settings hier direkt sichtbar werden + +- `HandBrake Preset` +- `HandBrake Extra Args` +- `Review Audio-Sprachen (...)` +- `Review UT-Sprachen (...)` +- `Ausgabeformat` +- Standard-Zuordnungen aus `Settings -> Encode-Presets` + +## RAW-Ordnerphasen Der Ripper arbeitet mit drei RAW-Zuständen: -- `Incomplete_...` während unvollständigem Rip -- `Rip_Complete_...` nach erfolgreich abgeschlossenem Rip, vor Encode +- `Incomplete_...` während eines unvollständigen Rips +- `Rip_Complete_...` nach erfolgreichem Rip, vor dem finalen Encode - ohne Prefix nach erfolgreichem Encode -Das ist wichtig für Recovery und Delete-Vorschau. +Das ist wichtig für: -## 5) Disk-Information +- Recovery +- RAW-Wiederverwendung +- Delete-Preview in `Historie` + +## Disk-Information Zeigt aktuelle Laufwerksdaten: - Device-Pfad - Modell -- Disc-Label / Mount +- Disc-Label +- Mount-Informationen Aktionen: @@ -139,13 +184,13 @@ Aktionen: Hinweis: -- `Laufwerk neu lesen` ist nicht mehr an einen festen Pipeline-State gebunden. +- `Laufwerk neu lesen` ist nicht mehr an einen festen Pipeline-State gebunden ## Wichtige Dialoge ### Metadaten auswählen -Im Dialog werden Film-/Serienmetadaten bestätigt. +Im Dialog bestätigst du Film- oder Serienmetadaten aus TMDb. Sonderfälle: @@ -154,7 +199,7 @@ Sonderfälle: ### Vorhandenes RAW erkannt -Wenn passendes RAW existiert, fordert der Dialog eine explizite Entscheidung: +Wenn zu den Metadaten bereits RAW existiert, fordert Ripster eine explizite Entscheidung: - vorhandenes RAW verwenden - RAW verwerfen/löschen und neu rippen @@ -169,9 +214,14 @@ Du kannst gezielt ab Position einfügen: ### Audible Activation Bytes eintragen -Wenn für eine AAX-Datei keine Activation Bytes automatisch ermittelt werden können, -öffnet Ripster einen Dialog zur manuellen Eingabe. +Wenn für eine AAX-Datei keine Activation Bytes verfügbar sind, öffnet Ripster einen Dialog zur manuellen Eingabe. -- Eingabeformat: genau 8 Hex-Zeichen (z.B. `1a2b3c4d`) +- Format: genau 8 Hex-Zeichen, z. B. `1a2b3c4d` - Speicherung: lokal im Activation-Bytes-Cache -- Wirkung: nach dem Speichern kann der Audiobook-Flow fortgesetzt werden +- Wirkung: der Audiobook-Flow kann anschließend fortgesetzt werden + +## Siehe auch + +- [Hardware](hardware.md) +- [Settings](settings.md) +- [Workflows aus Nutzersicht](../workflows/index.md) diff --git a/docs/gui/settings.md b/docs/gui/settings.md index add78f7..6a38d3a 100644 --- a/docs/gui/settings.md +++ b/docs/gui/settings.md @@ -1,82 +1,198 @@ # Settings -Die Seite `Settings` ist das zentrale Kontrollpanel für Laufzeitverhalten, Automatisierung und Expertenfunktionen. +Die Seite `Settings` ist das Kontrollzentrum für Laufzeitverhalten, Standardwerte und Automatisierung. Alles, was spätere Jobs automatisch tun oder vorschlagen, wird hier vorbereitet. ## Tab-Überblick | Tab | Zweck | |---|---| -| `Konfiguration` | Alle fachlichen Settings (Pfade, Tools, Laufwerk, Metadaten, Monitoring, Benachrichtigungen, Converter) | -| `Scripte` | Einzelne Bash-Skripte pflegen, testen und sortieren | -| `Skriptketten` | Mehrstufige Sequenzen aus `Skript` und `Warten` bauen und testen | -| `Encode-Presets` | Benutzer-Presets und Standard-Zuordnungen für Blu-ray/DVD-Workflows | -| `Cronjobs` | Zeitgesteuerte Jobs auf Basis Skript/Skriptkette | +| `Konfiguration` | alle fachlichen Einstellungen aus der GUI | +| `Scripte` | einzelne Bash-Skripte anlegen, testen und sortieren | +| `Skriptketten` | mehrstufige Abläufe aus Skript- und Warte-Schritten bauen | +| `Encode-Presets` | eigene Video-Presets und Standard-Zuordnungen pflegen | +| `Cronjobs` | zeitgesteuerte Ausführung von Skripten oder Ketten | ## Tab `Konfiguration` ### Bedienlogik -1. Felder ändern. -2. `Änderungen speichern` klicken. -3. Erst dann werden Änderungen persistiert und für neue Pipeline-Schritte wirksam. +1. Felder ändern +2. `Änderungen speichern` klicken +3. erst dann gelten die neuen Werte für künftige Starts, Reviews oder Scheduler -Aktionen in der Toolbar: +Ausnahmen: -- `Änderungen speichern`: schreibt nur geänderte Felder als Bulk-Update. -- `Änderungen verwerfen`: setzt den Formularzustand auf zuletzt geladen/zum Server gespeicherten Stand zurück. -- `Neu laden`: lädt Kategorien + Werte erneut vom Backend. -- `PushOver Test`: sendet eine Testnachricht mit aktuellen PushOver-Werten. -- `Coverarts prüfen`: startet die manuelle Coverart-Recovery. -- `Expertenmodus`: wird sofort gespeichert (nicht Teil des normalen Bulk-Speicherns). +- `Expertenmodus` wird sofort gespeichert +- Buttons wie `PushOver Test`, `Coverarts prüfen` oder der MakeMKV-Betakey-Import lösen direkte Aktionen aus -### Wichtige UI-Verhalten +### Toolbar-Aktionen -- Jede Einstellung zeigt `Gespeichert` oder `Ungespeichert` direkt am Feld. -- Pflichtfelder sind mit `*` markiert. -- Bei Validierungsfehlern wird pro Feld ein Fehlertext angezeigt und Speichern blockiert. -- Tool-Kommandos (`makemkv_command`, `mediainfo_command`, `handbrake_command`, `ffmpeg_command`, `ffprobe_command`, `cdparanoia_command`, `mkvmerge_command`) sind im Formular schreibgeschützt markiert. -- Einige Felder sind abhängig vom Expertenmodus sichtbar. +- `Änderungen speichern`: schreibt nur geänderte Felder +- `Änderungen verwerfen`: setzt den Formularzustand zurück +- `Neu laden`: lädt Schema und Werte neu +- `PushOver Test`: sendet eine Testnachricht mit den aktuellen PushOver-Werten +- `Coverarts prüfen`: startet den Coverart-Recovery-Lauf sofort + +### Was die Kategorien im Alltag steuern + +#### Benachrichtigungen + +Hier steuerst du zwei Dinge: + +- ob und wohin Ripster PushOver-Nachrichten sendet +- bei welchen Ereignissen Ripster überhaupt benachrichtigt + +Wichtig: + +- `PushOver aktiviert` ist der Master-Schalter +- `Bei manueller Auswahl senden` ist besonders relevant für Playlist-, RAW- oder Titelentscheidungen +- der `Expertenmodus` blendet zusätzliche technische Felder in der gesamten Settings-Seite ein + +#### Laufwerk + +Diese Kategorie beeinflusst, wie Ripster optische Laufwerke findet und überwacht. + +Typische Fragen: + +- Soll Ripster Laufwerke automatisch erkennen? +- Soll ein bestimmtes Laufwerk fest an einen MakeMKV-Index gebunden werden? +- Soll das Laufwerk nach erfolgreichem Rip automatisch auswerfen? + +Das ist vor allem wichtig bei: + +- mehreren Laufwerken +- USB-SATA-Adaptern +- Hosts mit instabilen Device-Namen + +#### Logging + +Diese Felder ändern nicht die Job-Logs auf Platte, sondern die Ausgabe im Server-Terminal. + +Damit steuerst du zum Beispiel: + +- ob `start.sh` oder ein Terminal-Run sehr gesprächig sein darf +- ob HTTP-Requests im Terminal sichtbar sein sollen +- ob DEBUG/INFO/WARN/ERROR dort mitlaufen + +#### Metadaten + +Hier legst du fest, wie Ripster mit TMDb, Covern und NFO-Dateien umgeht. + +Besonders wichtig: + +- ohne `TMDb Read Access Token` funktionieren Film-/Seriensuche und Neu-Zuordnung nur eingeschränkt oder gar nicht +- `Film-Sprache` und `Fallback Sprache` bestimmen, welche Titel, Beschreibungen und Staffelinformationen bevorzugt werden +- `Coverart-Nachladen aktiv` hilft bei nachträglich fehlenden Postern/Covern + +#### Monitoring + +Steuert das Hardware-Monitoring für: + +- CPU +- RAM +- GPU +- Speicherstände + +Diese Werte erscheinen: + +- kompakt im `Ripper` +- ausführlich in der Seite `Hardware` + +#### Pfade + +Hier legst du fest, wohin Ripster schreibt und wie Dateien benannt werden. + +Die Felder steuern: + +- RAW-Verzeichnisse pro Medium +- Zielordner für Filme, Serien, CDs, Audiobooks, Converter und Downloads +- Eigentümer per `user:gruppe` +- Templates für Datei- und Ordnernamen + +Praxisbeispiele: + +- Serien getrennt von Filmen ablegen +- RAW auf große HDD, Final-Output auf NAS +- Audiobooks kapitelweise in Unterordnern strukturieren + +#### Converter + +Diese Kategorie wirkt nur auf die Seite `Converter`. + +Sie steuert: + +- welche Dateiendungen der Upload und der Verzeichnisscan akzeptieren +- ob der Converter-RAW-Baum automatisch neu gescannt wird +- wie häufig dieses Polling läuft + +#### Tools + +Diese Kategorie entscheidet über das technische Verhalten der eigentlichen Pipeline. + +Dazu gehören: + +- Pfade/Befehle für externe Tools +- MakeMKV-Filter und Rip-Modi +- HandBrake-Presets und Extra-Args +- Vorauswahl von Audio-/Untertitelsprachen in der Review +- Ausgabeformate +- Queue- und Parallelitätsregeln +- Timeout für Script-Tests + +Für die Nutzer-Workflows besonders relevant: + +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` +- `HandBrake Preset` und `HandBrake Extra Args` +- `Review Audio-Sprachen (...)` +- `Review UT-Sprachen (...)` +- `Parallele Jobs` +- `Max. parallele Audio CD Jobs` +- `Max. Encodes gesamt (medienunabhängig)` ### Kategorie `Pfade`: Besondere Interaktion Die Pfad-Kategorie hat eine eigene Darstellung: -- Tabelle `Effektive Pfade`: zeigt die aktuell tatsächlich aufgelösten Laufzeitpfade inkl. Fallbacks. -- Accordion je Bereich (`Blu-ray`, `DVD`, `CD / Audio`, `Audiobook`, `Converter`, `Downloads`, optional `Externe Speicher`, `Logs`). -- Für Pfadfelder mit Owner-Pendant (`*_owner`) erscheint direkt darunter das Feld `Eigentümer (user:gruppe)`. -- Owner-Felder sind deaktiviert, solange der zugehörige Pfad leer ist. +- Tabelle `Effektive Pfade`: zeigt die aktuell wirklich verwendeten Laufzeitpfade inklusive Fallbacks +- Accordion pro Bereich wie `Blu-ray`, `DVD`, `CD / Audio`, `Audiobook`, `Converter`, `Downloads`, `Logs` +- Owner-Felder (`*_owner`) erscheinen direkt beim zugehörigen Pfad +- Owner-Felder sind deaktiviert, solange der zugehörige Pfad leer ist -### Spezial-Editoren in der Konfiguration +### Spezial-Editoren -- `drive_devices`: JSON-Array wird über UI-Editor gepflegt (Pfad + MakeMKV-Index je Laufwerk). -- `external_storage_paths`: Liste aus `Name` + `Pfad` (für Anzeige freier externer Speicher). -- `converter_scan_extensions`: Checkbox-Raster der erlaubten Endungen; mindestens eine Endung muss aktiv bleiben. -- `makemkv_registration_key`: zusätzlicher Betakey-Hinweis mit `übernehmen`-Button. +- `drive_devices`: Editor für mehrere Laufwerke mit Pfad und MakeMKV-Index +- `external_storage_paths`: Liste aus Anzeigename und Pfad für die Speicheranzeige +- `converter_scan_extensions`: Auswahl der erlaubten Upload-/Scan-Endungen +- `makemkv_registration_key`: inkl. Betakey-Hinweis und Übernahme-Button -### Laufwerks-Infobox innerhalb `Laufwerk` +### Wichtig für Reviews und Workflows -In der Kategorie `Laufwerk` wird eine Live-Tabelle erkannter optischer Laufwerke angezeigt: +Die Seite `Settings` bestimmt direkt, was Nutzer später im Workflow sehen: -- `Neu einlesen` lädt Laufwerksinfos neu. -- Im Expertenmodus: `Freigeben` pro Laufwerk und `Alle Laufwerke freigeben`. +- Playlist-Kandidaten werden durch `Minimale Titellänge` und `TMDb Runtime-Abzug ...` beeinflusst +- Audio-/Untertitel-Vorauswahlen in `Bereit zum Encodieren` hängen an den Review-Sprachfeldern +- automatisch vorgeschlagene Presets hängen an den Standard-Zuordnungen unter `Encode-Presets` +- Queue-Verhalten im `Ripper` hängt an den drei Parallelitätsfeldern plus `Audio CDs: Queue-Reihenfolge überspringen` ## Tab `Scripte` Funktionen: -- Skript anlegen (Inline-Editor) -- Skript bearbeiten (Dialog) -- Skript löschen (mit Bestätigung) +- Skript anlegen +- Skript bearbeiten +- Skript löschen - Skript testen - Reihenfolge per Drag-and-Drop ändern +- Favorit markieren -Testergebnis enthält: +Das Testergebnis zeigt: -- Erfolg/Fehler +- Erfolg oder Fehler - Exit-Code -- Timeout-Info - Dauer - stdout/stderr +- Timeout, falls `Script-Test Timeout (ms)` greift ## Tab `Skriptketten` @@ -87,81 +203,79 @@ Skriptketten bestehen aus Schritten: Funktionen: -- Ketten anlegen/bearbeiten/löschen -- Reihenfolge der Ketten per Drag-and-Drop -- Kette testen -- Schritte in der Kette per Drag-and-Drop neu anordnen +- Ketten anlegen, bearbeiten, löschen +- Reihenfolge der Ketten ändern +- einzelne Ketten testen +- Schritte innerhalb der Kette per Drag-and-Drop sortieren -Im Ketteneditor: +Wichtig: -- linke Palette (`Systemblöcke`, `Scripte`) -- rechte Canvas mit Drop-Zonen -- pro Warte-Schritt konfigurierbare Sekunden +- dieselben Skripte können sowohl in Jobs als auch in Ketten und Cronjobs wiederverwendet werden ## Tab `Encode-Presets` -Bereiche: - -1. `Standard-Zuordnungen` (Slots) -2. `Preset-Liste` (CRUD) +Hier werden Video-Standards für Disc- und Converter-Workflows verwaltet. ### Standard-Zuordnungen -Es gibt vier persistente Slots: +Es gibt vier feste Slots: -- `bluray_movie` -- `bluray_series` -- `dvd_movie` -- `dvd_series` +- `Blu-ray Film` +- `Blu-ray Serie` +- `DVD Film` +- `DVD Serie` -Die Auswahl ist medientyp-kompatibel gefiltert. Nicht kompatible oder fehlende bereits gespeicherte IDs werden weiterhin sichtbar gemacht, damit bestehende Zuordnungen nachvollziehbar bleiben. +Wenn für einen Workflow hier ein Default gesetzt ist, erscheint dieses User-Preset später in der Review bereits vorausgewählt. ### Preset-Inhalt -Ein Preset umfasst: +Ein User-Preset besteht aus: - Name - Medientyp (`all`, `bluray`, `dvd`) -- HandBrake-Preset (`-Z`) +- HandBrake-Preset - Extra Args -- optionale Beschreibung +- optionaler Beschreibung ## Tab `Cronjobs` Funktionen: -- Cronjob erstellen/bearbeiten/löschen -- Debounced Validierung des Cron-Ausdrucks +- Cronjob anlegen, bearbeiten, löschen +- Cron-Ausdruck live validieren - Quelle wählen: `Skript` oder `Skriptkette` -- Aktiv- und PushOver-Toggle je Job +- Aktiv- und PushOver-Status pro Job setzen - `Jetzt ausführen` - Lauf-Logs öffnen -Die Seite zeigt zusätzlich Live-Status laufender Cron-Aktivitäten (Runtime Activities). +Die Runtime-Aktivitäten der laufenden Cronjobs werden zusätzlich live angezeigt. ## Expertenbereich: Activation Bytes Cache -Der Activation-Bytes-Block wird nur im Expertenmodus angezeigt und nur wenn Einträge vorhanden sind. +Dieser Block wird nur im Expertenmodus angezeigt. -Er zeigt: +Er zeigt lokal bekannte AAX-Activation-Bytes mit: -- AAX-Checksum +- Prüfsumme - Activation Bytes - Speicherzeitpunkt -## Validierungshinweise für Template-Felder +Das hilft bei Audiobook-Workflows, wenn dieselbe Datei oder derselbe Hash später erneut auftaucht. + +## Validierung von Template-Feldern Template-Felder akzeptieren nur: -- Buchstaben/Ziffern +- Buchstaben und Ziffern - Leerzeichen - `_` und `-` -- Platzhalter in `{...}` bzw. `${...}` -- `/` für Ordnertrennung +- Platzhalter in `{...}` oder `${...}` +- `/` für Unterordner -Nicht erlaubt sind z. B. unvollständige geschweifte Klammern oder sonstige Sonderzeichen. +Damit verhindert Ripster fehlerhafte Dateinamen schon beim Speichern. ## Siehe auch -- [Einstellungsreferenz](../configuration/settings-reference.md) +- [Alle Einstellungen](../configuration/settings-reference.md) - [Ripper](ripper.md) +- [Workflows aus Nutzersicht](../workflows/index.md) diff --git a/docs/gui/tmdb-migration.md b/docs/gui/tmdb-migration.md new file mode 100644 index 0000000..0448aa7 --- /dev/null +++ b/docs/gui/tmdb-migration.md @@ -0,0 +1,52 @@ +# TMDb Migration + +Die Seite `TMDb Migration` ist eine Sonderansicht für ältere Bestandsjobs, die noch nicht als auf TMDb migriert markiert sind. + +## Zugriff + +- Direktlink: `/tmdb-migration` +- nicht in der normalen Top-Navigation verlinkt + +## Wofür die Seite gedacht ist + +Typische Einsatzfälle: + +- Altbestand aus früheren Ständen bereinigen +- mehrere Jobs nacheinander auf aktuelle TMDb-Metadaten umstellen +- Historie konsistent auf den heutigen Metadaten-Workflow bringen + +## Funktionsweise + +Die Seite lädt offene Migrationskandidaten und zeigt: + +- Job-ID +- Titel +- Jahr +- Medium +- aktuellen Status + +Aktionen: + +- `Liste neu laden` +- `Start` +- `Stop` + +## Ablauf einer Sequenz + +1. Jobliste laden +2. `Start` +3. der bekannte TMDb-Metadaten-Dialog öffnet sich für den ersten Job +4. nach erfolgreicher Übernahme plant Ripster den nächsten Job mit Cooldown + +Wichtig: + +- zwischen zwei Jobs liegt bewusst eine Wartezeit von mindestens 10 Sekunden +- damit wird die TMDb-API bei Serienmigrationen nicht unnötig belastet + +## Relevante Settings + +- `TMDb Read Access Token` +- `Film-Sprache` +- `Fallback Sprache` + +Ohne diese Einstellungen ist die Migration nicht sinnvoll nutzbar. diff --git a/docs/pipeline/playlist-analysis.md b/docs/pipeline/playlist-analysis.md index b96d683..bc37ce8 100644 --- a/docs/pipeline/playlist-analysis.md +++ b/docs/pipeline/playlist-analysis.md @@ -44,7 +44,8 @@ Dann muss eine Playlist bestätigt werden, bevor der Workflow weiterläuft. | Feld in `Settings` | Wirkung | |---|---| -| `Minimale Titellaenge (Minuten)` | Mindestlaufzeit für Kandidaten | +| `Minimale Titellänge (Minuten)` | Mindestlaufzeit für Kandidaten aus MakeMKV/Playlist-Analyse | +| `TMDb Runtime-Abzug für Playlistfilter (%)` | lockert bei Bedarf die untere Laufzeitgrenze relativ zur TMDb-Laufzeit, damit leicht kürzere Hauptfassungen Kandidaten bleiben | Default ist aktuell `60` Minuten. @@ -52,7 +53,14 @@ Default ist aktuell `60` Minuten. ## UI-Verhalten -Bei manueller Entscheidung zeigt das Ripper Kandidaten inkl. Score/Bewertung und markiert eine Empfehlung. +Bei manueller Entscheidung zeigt der `Ripper` Kandidaten mit: + +- Playlist-Datei +- Titel-ID +- Laufzeit +- Score +- Empfehlung +- Segment- und Audio-Vorschau Nach Bestätigung: diff --git a/docs/workflows/index.md b/docs/workflows/index.md index ee35034..6597f65 100644 --- a/docs/workflows/index.md +++ b/docs/workflows/index.md @@ -1,207 +1,366 @@ # Workflows aus Nutzersicht -Diese Seite beschreibt die produktiven Abläufe als Handbuch: welche Entscheidung an welcher Stelle fällt, welche Objekte dabei entstehen (Job, Container, Child-Job) und welche Dateien in welchen Ordnern landen. +Diese Seite beschreibt die produktiven Abläufe aus Sicht der Benutzer: welche Entscheidung wann anfällt, welche Jobs oder Container entstehen und welche Settings den Ablauf sichtbar beeinflussen. ## Gemeinsame Grundlagen -### Statuskette im Normalfall +### Typische Statuskette -`Medium erkannt` -> `Analyse` -> `Metadatenauswahl` -> `Startbereit` -> `Rippen` -> `Mediainfo-Pruefung` -> `Bereit zum Encodieren` -> `Encodieren` -> `Fertig` +`Medium erkannt` -> `Analyse` -> `Metadatenauswahl` -> `Startbereit` -> `Rippen` -> `Mediainfo-Prüfung` -> `Bereit zum Encodieren` -> `Encodieren` -> `Fertig` -Abweichungen: +Wichtige Abweichungen: -- bei Blu-ray/DVD mit nötiger Playlistwahl: `Mediainfo-Pruefung` -> `Warte auf Auswahl` -> zurück in `Mediainfo-Pruefung` -- bei vorhandenem RAW: `Startbereit` springt direkt in Review/Prüfung ohne neuen Laufwerks-Rip -- bei Fehler/Abbruch: `Fehler` oder `Abgebrochen` mit Wiederanlauf-Aktionen +- bei vorhandenem RAW: Sprung direkt in RAW-Entscheidung oder Review +- bei mehrdeutigen Blu-rays/DVDs: `Warte auf Auswahl` für Playlist- oder Titelauswahl +- bei Fehler oder Abbruch: `Fehler` oder `Abgebrochen` mit Folgeaktionen +- bei Audio-CDs und Audiobooks: eigener Spezialflow innerhalb derselben Gesamtpipeline -### Job- und Container-Typen +### Welche Settings fast überall hineinspielen -| Typ | Zweck | Was enthält der Typ? | -|---|---|---| -| Normaler Disc-Job | Einzel-Film oder einzelne Disc | RAW-Pfad, Output-Pfad, Logs, Review | -| `dvd_series_container` | logischer Serien-Container (pro Serie/Staffel) | Metadatenanker, aggregierter Status über Kinder | -| `dvd_series_child` | einzelne Serien-Disc oder Serien-Episode-Job | eigentliche RAW-/Encode-Arbeit | -| `multipart_movie_container` | logischer Multipart-Film-Container | Zusammenfassung für mehrere Film-Discs | -| `multipart_movie_child` | einzelne Disc innerhalb Multipart-Film | Disc-spezifische RAW-/Encode-Daten | +Die wichtigsten globalen Einflussfaktoren: -Wichtig: +- `Parallele Jobs` +- `Max. parallele Audio CD Jobs` +- `Max. Encodes gesamt (medienunabhängig)` +- `Audio CDs: Queue-Reihenfolge überspringen` +- `PushOver`-Ereignisse +- Pfade, Templates und Owner-Felder -- Container sind primär Ordnungs- und Statusobjekte. -- Dateien (RAW/Output) hängen an den Child-Jobs. +Für Disc-Video zusätzlich: -## Workflow A: Film (Blu-ray/DVD) +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` +- `HandBrake Preset` +- `HandBrake Extra Args` +- `Review Audio-Sprachen (...)` +- `Review UT-Sprachen (...)` +- Standard-Zuordnungen aus `Settings -> Encode-Presets` -### 1) Disc analysieren und Film-Metadaten wählen +## Workflow A: Film von Disc (Blu-ray / DVD) -1. Im `Ripper` `Analyse starten`. -2. Im Metadaten-Dialog Film auswählen (OMDb bzw. manuelle Film-Metadaten). -3. `Auswahl übernehmen`. +### 1. Disc analysieren und TMDb-Metadaten wählen + +1. Im `Ripper` `Analyse starten` +2. im Metadaten-Dialog Film auswählen +3. `Auswahl übernehmen` Wirkung: - der Job wird als Film-Workflow geführt -- Film-Fingerprint für Duplikaterkennung wird gebildet (IMDb oder Titel/Jahr) +- Film-Metadaten, Poster und Fingerprint werden gesetzt -### 2) Duplikatfall entscheiden +Relevante Settings: -Wenn Film mit gleichem Fingerprint bereits existiert, gibt es zwei Wege: +- `TMDb Read Access Token` +- `Film-Sprache` +- `Fallback Sprache` -1. `Übernahme erzwingen` (`allow_new`): neuer unabhängiger Film-Job -2. `Multipart movie`: neuer Job wird mit bestehendem Job in einem Multipart-Container verknüpft +### 2. Duplikatfall entscheiden + +Wenn ein Film mit gleichem Fingerprint bereits existiert: + +1. `Übernahme erzwingen`: neuer unabhängiger Film-Job +2. `Multipart movie`: neuer Job wird mit bestehendem Film zu einem Multipart-Container verknüpft Bei Multipart gilt: -- beide Discs brauchen unterschiedliche `Disc-Nummer` -- gleiche Disc-Nummer blockiert den Vorgang (`MULTIPART_DISC_ALREADY_EXISTS`) +- beide Discs brauchen unterschiedliche Disc-Nummern +- gleiche Disc-Nummern blockieren den Vorgang -### 3) RAW-Verzeichnis entsteht +### 3. RAW-Verzeichnis und RAW-Entscheidung -Ordnername basiert auf Metadaten plus Job-ID: +Wenn noch kein passendes RAW vorhanden ist: -- `Incomplete_ () - RAW - job-` +- Ripster legt ein neues RAW-Verzeichnis an -Zustandswechsel des RAW-Ordners: +Wenn bereits ein passendes RAW gefunden wird: -- beim Start: `Incomplete_...` -- nach erfolgreichem Rip: `Rip_Complete_...` -- nach erfolgreichem Encode: Prefix wird entfernt (final) +- der Job geht in `Warte auf Auswahl` +- du entscheidest, ob das vorhandene RAW weiterverwendet oder neu gerippt wird -### 4) Review und Encode +Relevante Settings: -In `Bereit zum Encodieren`: +- `raw_dir_bluray`, `raw_dir_dvd` +- `raw_dir_bluray_owner`, `raw_dir_dvd_owner` -- Titel wählen -- Audio-/Subtitle-Spuren festlegen -- optional User-Preset -- optional Pre-/Post-Encode-Skripte oder Ketten +### 4. Playlist- oder Titelauswahl -Beim Start: +Bei bestimmten Discs ist nach der Metadatenphase eine manuelle Auswahl nötig: -- temporäre Ausgabe in `Incomplete_job-/.` -- nach Erfolg Verschiebung in finalen Zielpfad aus Film-Template +- Playlist-Auswahl +- HandBrake-Titelauswahl +- bei Serien-Grenzfällen PlayAll- oder Doppelfolgen-Entscheidung -## Workflow B: Serie (Blu-ray/DVD) +Das ist der aktuelle `playlistflow`. -### 1) Serienmodus aktivieren +Relevante Settings: -1. Disc analysieren. -2. Im Metadaten-Dialog Serienmetadaten wählen (TMDb-basiert). -3. `Disc-Nummer` setzen (Pflicht, ab 1). +- `Minimale Titellänge (Minuten)` +- `TMDb Runtime-Abzug für Playlistfilter (%)` +- `Bei manueller Auswahl senden` + +Praxis: + +- zu hoher Mindestwert blendet legitime Alternativfassungen aus +- ein kleiner Runtime-Abzug hilft bei Discs, deren Hauptfilm minimal unter der TMDb-Laufzeit liegt + +### 5. Review und Encode + +Im Zustand `Bereit zum Encodieren` entscheidest du: + +- welcher Titel encodiert wird +- welche Audio-Spuren übernommen werden +- welche Untertitel übernommen, erzwungen oder eingebrannt werden +- welches Preset gilt +- welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen + +Relevante Settings: + +- `HandBrake Preset` +- `HandBrake Extra Args` +- `Review Audio-Sprachen (Blu-ray Film)` oder `Review Audio-Sprachen (DVD Film)` +- `Review UT-Sprachen (Blu-ray Film)` oder `Review UT-Sprachen (DVD Film)` +- `Ausgabeformat` +- Standard-Userpreset für Film unter `Settings -> Encode-Presets` + +### 6. Finale Ausgabe + +Finale Ausgabe: + +- Zielordner: `movie_dir_bluray` oder `movie_dir_dvd` +- Dateiname und Ordner: `output_template_bluray` oder `output_template_dvd` + +Optional: + +- `.nfo` direkt nach Encode + +Relevante Settings: + +- `movie_dir_bluray`, `movie_dir_dvd` +- `movie_dir_bluray_owner`, `movie_dir_dvd_owner` +- `output_template_bluray`, `output_template_dvd` +- `generate_nfo_after_encode` + +## Workflow B: Serie von Disc (Blu-ray / DVD) + +### 1. Serienmodus festlegen + +1. Disc analysieren +2. im Metadaten-Dialog Serienmetadaten wählen +3. `Disc-Nummer` setzen Wirkung: -- Workflow-Kind wird `series` -- Seriencontainer wird gesucht/angelegt -- aktueller Job wird als `dvd_series_child` darunter geführt +- Ripster arbeitet als Serien-Workflow +- Seriencontainer wird gesucht oder angelegt +- der Job wird als Child unter diesem Container geführt -### 2) Seriencontainer und Disc-Konflikte +### 2. Serien-RAW und Staffelkontext -Beim Speichern wird geprüft: +Für Serien bevorzugt Ripster eigene Serien-RAW-Verzeichnisse: -- existiert für Serie/Staffel bereits ein Container? -- existiert in diesem Container bereits dieselbe `Disc-Nummer`? +- `raw_dir_bluray_series` +- `raw_dir_dvd_series` -Wenn ja, wird blockiert (`SERIES_DISC_ALREADY_EXISTS`). +Falls leer: -### 3) Serien-RAW-Pfad +- Fallback auf `raw_dir_bluray` bzw. `raw_dir_dvd` -Für Serien wird ein eigener RAW-Pfad bevorzugt: +### 3. Episodenprüfung und Multi-Episode-Fälle -- Blu-ray: `raw_dir_bluray_series` (Fallback: `raw_dir_bluray`) -- DVD: `raw_dir_dvd_series` (Fallback: `raw_dir_dvd`) +In der Review werden Episoden oder Mehrfachfolgen aufgelöst. -RAW-Namensbasis enthält Staffel/Disc (`SxDy`) und wird ebenfalls mit den Prefix-Phasen geführt: +Ausgabevarianten: -- `Incomplete_...` -> `Rip_Complete_...` -> final +- Einzel-Episode +- Multi-Episode-Datei -### 4) Serien-Review und Episoden-Ausgabe +Relevante Settings: -Beim Review werden Episoden-/Titelzuordnungen genutzt. Je nach Auswahl: +- `output_template_bluray_series_episode` +- `output_template_bluray_series_multi_episode` +- `output_template_dvd_series_episode` +- `output_template_dvd_series_multi_episode` +- `series_dir_bluray` +- `series_dir_dvd` -- Einzel-Episode: Episode-Template -- Multi-Episode-Titel: Multi-Episode-Template +### 4. Playlistflow auch bei Serien -Ausgabepfad: +Auch Serien können vor der Review in eine Playlist- oder Titelauswahl laufen. -- Root: `series_dir_*` (Fallback auf `movie_dir_*`) -- Dateiname/Unterordner aus Serien-Template +Zusätzlich wirken: -### 5) Multi-Episode-Disc als Batch - -Wenn mehrere Episoden-Titel aus einer Disc encodiert werden: - -- Ripster erzeugt Episode-Child-Jobs -- der ursprüngliche Disc-Job dient als Batch-Anker -- RAW-Finalisierung erfolgt erst, wenn alle Episode-Encodes abgeschlossen sind +- `Review Audio-Sprachen (Blu-ray Serie)` / `Review Audio-Sprachen (DVD Serie)` +- `Review UT-Sprachen (Blu-ray Serie)` / `Review UT-Sprachen (DVD Serie)` +- Serien-Default-Presets unter `Settings -> Encode-Presets` ## Workflow C: Multipart-Film -### Wann dieser Flow gedacht ist +### Wann der Flow gedacht ist -- gleicher Film auf mehreren Discs (z. B. Disc 1/Disc 2) -- Zusammengehörigkeit soll in Historie und Detailansichten sichtbar sein +- gleicher Film auf mehreren Discs +- die Discs sollen in Historie und Detailansichten zusammengehören ### Ablauf -1. Film-Metadaten wählen. -2. Duplikatdialog -> `Multipart movie`. -3. Disc-Nummern für bestehenden und neuen Job festlegen. +1. Film-Metadaten wählen +2. Duplikatdialog `Multipart movie` +3. Disc-Nummern für bestehenden und neuen Job festlegen Wirkung: - `multipart_movie_container` wird angelegt oder wiederverwendet -- beteiligte Jobs werden `multipart_movie_child` -- Container führt gemeinsame Metadaten, Kinder führen je Disc die eigentlichen Artefakte +- die Discs werden als Child-Jobs darunter geführt +- zusätzlich wird ein Merge-Job vorbereitet -## Workflow D: Vorhandenes RAW / RAW-Import +Relevante Settings: -### Fall 1: RAW bereits vorhanden bei Metadatenübernahme +- `mkvmerge_command` +- Film-Output-Templates +- Queue-Limits, falls mehrere Discs parallel weiterverarbeitet werden -Nach Metadaten-Übernahme erkennt Ripster passende RAW-Ordner und setzt den Job auf Entscheidungsstatus. +## Workflow D: Audio-CD -Möglichkeiten: +### 1. TOC lesen und Metadaten wählen -- vorhandenes RAW weiterverwenden (kein neuer Rip) -- RAW löschen/ignorieren und neu rippen +1. Audio-CD analysieren +2. Tracks prüfen +3. Metadaten aus MusicBrainz übernehmen oder manuell anpassen -### Fall 2: Orphan-RAW aus `/database` +### 2. Trackauswahl und Format -1. In `Database` `RAW prüfen`. -2. Bei orphan RAW `Job anlegen`. -3. Job wird in Historie erzeugt und wie "Disk analysieren aus RAW" weiterverarbeitet. +Vor dem Start legst du fest: -## Workflow E: Nachbearbeitung bestehender Jobs +- welche Tracks übernommen werden +- welches Ausgabeformat gilt +- welche Formatoptionen genutzt werden +- welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen -In `Historie` (Detaildialog): +### 3. Rip und Encode -| Aktion | Wirkung | -|---|---| -| `OMDb neu zuordnen` | Metadaten neu schreiben, Folder-Rename wird best effort angestoßen | -| `Review neu starten` | Titel-/Spurprüfung aus aktuellem RAW neu aufbauen | -| `RAW neu encodieren` | Encode erneut aus vorhandenem RAW starten | -| `Encode neu starten` | letzte bestätigte Review-Einstellungen wiederverwenden | -| `Retry Rippen` | Rip/Analyse neu starten; alter Job-RAW kann bereinigt werden | +Die CD läuft anschließend als Track-für-Track-Flow: -## Wo landet was? (Artefakt-Matrix) +`CD-Metadatenauswahl` -> `CD-Startbereit` -> `CD-Rippen` -> `CD-Encodieren` -> `Fertig` -| Artefakt | Film | Serie | Multipart | -|---|---|---|---| -| RAW | `raw_dir_*` | bevorzugt `raw_dir_*_series` | pro Child-Job im normalen Film-RAW-Schema | -| Finale Ausgabe | `movie_dir_*` + Film-Template | `series_dir_*` (Fallback `movie_dir_*`) + Serien-Templates | pro Child-Job normaler Film-Output | -| Container-Datensatz | nein | ja (`dvd_series_container`) | ja (`multipart_movie_container`) | -| Löschvorschau in Historie | einzelner Job oder Related Scope | Container-/Child-bezogen mit Pfadauswahl | Container-/Child-bezogen mit Pfadauswahl | +Relevante Settings: -## Queue-Verhalten im Alltag - -Die Startfreigabe hängt an vier Settings: - -- `Max. parallele Film/Video Encodes` +- `raw_dir_cd` +- `movie_dir_cd` +- `raw_dir_cd_owner` +- `movie_dir_cd_owner` +- `cd_output_template` +- `cdparanoia_command` - `Max. parallele Audio CD Jobs` -- `Max. Encodes gesamt` - `Audio CDs: Queue-Reihenfolge überspringen` -Praxis: +## Workflow E: Converter -- Film/Video- und Audio/CD laufen in getrennten Lanes -- Gesamtlimit begrenzt beide gemeinsam -- Queue kann neben Jobs auch `Skript`, `Kette`, `Warten` enthalten +### 1. Dateien bereitstellen + +Dateien gelangen in den Converter über: + +- Upload +- bestehende Ordner im `converter_raw_dir` +- manuelle Dateiverwaltung im Explorer + +### 2. Jobs aus Auswahl erzeugen + +- Video und ISO: immer ein Job pro Datei +- Audio: ein Job pro Datei oder gemeinsamer Audio-Job + +### 3. Job konfigurieren und starten + +Je nach Medium: + +- Video/ISO: Review mit Track- und Preset-Auswahl +- Audio: direkte Format- und Zielkonfiguration + +Relevante Settings: + +- `converter_scan_extensions` +- `converter_polling_enabled` +- `converter_polling_interval` +- `converter_raw_dir` +- `converter_movie_dir` +- `converter_audio_dir` +- `converter_output_template_video` +- `converter_output_template_audio` +- globale Queue-Limits + +## Workflow F: Audiobooks + +### 1. AAX hochladen + +1. Datei hochladen +2. Metadaten und Kapitel aufbauen lassen +3. bei Bedarf Activation Bytes klären + +### 2. Ausgabeformat wählen + +- `m4b`: eine Datei +- `mp3`: eine Datei pro Kapitel +- `flac`: eine Datei pro Kapitel + +### 3. Kapitel und Skripte prüfen + +Vor dem Start anpassbar: + +- Kapitelnamen +- Pre-Encode-Skripte und -Ketten +- Post-Encode-Skripte und -Ketten + +Relevante Settings: + +- `raw_dir_audiobook` +- `movie_dir_audiobook` +- `audiobook_raw_template` +- `output_template_audiobook` +- `output_chapter_template_audiobook` +- `ffprobe_command` +- `ffmpeg_command` +- globale Queue-Limits + +## Workflow G: Nachbearbeitung in der Historie + +Typische Folgeaktionen: + +- `TMDb neu zuweisen` +- `Review neu starten` +- `RAW neu encodieren` +- `Encode neu starten` +- `Retry Rippen` +- `Download` als ZIP einreihen + +Besonders wichtig: + +- `Encode neu starten` verwendet den letzten bestätigten Plan +- `handbrake_restart_delete_incomplete_output` entscheidet, ob unvollständige Ausgaben vorher gelöscht werden + +## Workflow H: Downloads und Recovery + +### Downloads + +Aus `Historie` können ZIPs für: + +- `RAW` +- `Output` + +erstellt werden. + +Relevante Settings: + +- `download_dir` +- `download_dir_owner` + +### Database (Expert) + +Die Recovery-Seite hilft bei orphan RAW: + +- `RAW prüfen` +- `Job anlegen` + +So lassen sich vorhandene RAW-Verzeichnisse wieder in einen normalen Workflow zurückführen. + +### TMDb Migration + +Für ältere Bestandsjobs gibt es die Sonderseite `/tmdb-migration`, um mehrere Jobs nacheinander auf den heutigen TMDb-Stand zu bringen. diff --git a/mkdocs.yml b/mkdocs.yml index 9dac353..5c68d1a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -54,12 +54,14 @@ nav: - GUI-Seiten: - gui/index.md - Ripper: gui/ripper.md + - Hardware: gui/hardware.md - Audiobooks: gui/audiobooks.md - Settings: gui/settings.md - Historie: gui/history.md - Converter: gui/converter.md - Downloads: gui/downloads.md - Database (Expert): gui/database.md + - TMDb Migration: gui/tmdb-migration.md - Workflows aus Nutzersicht: workflows/index.md - Technischer Anhang: - appendix/index.md diff --git a/site/404.html b/site/404.html index 6c7520c..e2dd339 100644 --- a/site/404.html +++ b/site/404.html @@ -1 +1 @@ - Ripster

404 - Not found

\ No newline at end of file + Ripster

404 - Not found

\ No newline at end of file diff --git a/site/api/converter/index.html b/site/api/converter/index.html index 2a2fd17..a2614b0 100644 --- a/site/api/converter/index.html +++ b/site/api/converter/index.html @@ -1,4 +1,4 @@ - Converter API - Ripster

Converter API

Endpunkte für den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.

Basis-Pfad: /api/converter


Scan & Explorer

GET /api/converter/tree

Vollständiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).

Response:

{
+ Converter API - Ripster      

Converter API

Endpunkte für den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.

Basis-Pfad: /api/converter


Scan & Explorer

GET /api/converter/tree

Vollständiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).

Response:

{
   "tree": [
     {
       "name": "filme",
diff --git a/site/api/crons/index.html b/site/api/crons/index.html
index 9f58677..30e49ea 100644
--- a/site/api/crons/index.html
+++ b/site/api/crons/index.html
@@ -1,4 +1,4 @@
- Cron API - Ripster      

Cron API

Ripster enthält ein eingebautes Cron-System für Skripte und Skript-Ketten (sourceType: script|chain).


GET /api/crons

Listet alle Cron-Jobs.

{
+ Cron API - Ripster      

Cron API

Ripster enthält ein eingebautes Cron-System für Skripte und Skript-Ketten (sourceType: script|chain).


GET /api/crons

Listet alle Cron-Jobs.

{
   "jobs": [
     {
       "id": 1,
diff --git a/site/api/downloads/index.html b/site/api/downloads/index.html
index fe44682..1e02254 100644
--- a/site/api/downloads/index.html
+++ b/site/api/downloads/index.html
@@ -1,4 +1,4 @@
- Downloads API - Ripster      

Downloads API

Endpunkte für die Download-Queue. Ausgabedateien aus der Job-Historie können als ZIP heruntergeladen werden.

Basis-Pfad: /api/downloads


GET /api/downloads

Liste aller Download-Einträge plus Zusammenfassung.

Response:

{
+ Downloads API - Ripster      

Downloads API

Endpunkte für die Download-Queue. Ausgabedateien aus der Job-Historie können als ZIP heruntergeladen werden.

Basis-Pfad: /api/downloads


GET /api/downloads

Liste aller Download-Einträge plus Zusammenfassung.

Response:

{
   "items": [
     {
       "id": "dl-42-raw",
diff --git a/site/api/history/index.html b/site/api/history/index.html
index c22e255..b51b358 100644
--- a/site/api/history/index.html
+++ b/site/api/history/index.html
@@ -1,4 +1,4 @@
- History API - Ripster      

History API

Endpunkte für Job-Historie, Metadaten-Nachpflege, Orphan-Import und Löschoperationen.


GET /api/history

Liefert Jobs mit optionalen Filtern.

Query-Parameter:

Parameter Typ Beschreibung
status string Einzelstatus-Filter (legacy-kompatibel).
statuses string Mehrfachstatus als CSV, z. B. FINISHED,ERROR.
search string Suche in Titel-/IMDb-Feldern.
limit number Maximale Anzahl Ergebnisse.
lite bool Ohne Dateisystem-Checks (schneller).
includeChildren bool Child-Jobs (z. B. Serien-/Multipart-Kinder) explizit einbeziehen.

Beispiel:

GET /api/history?statuses=FINISHED,ERROR&search=Inception&limit=50&lite=1
+ History API - Ripster      

History API

Endpunkte für Job-Historie, Metadaten-Nachpflege, Orphan-Import und Löschoperationen.


GET /api/history

Liefert Jobs mit optionalen Filtern.

Query-Parameter:

Parameter Typ Beschreibung
status string Einzelstatus-Filter (legacy-kompatibel).
statuses string Mehrfachstatus als CSV, z. B. FINISHED,ERROR.
search string Suche in Titel-/IMDb-Feldern.
limit number Maximale Anzahl Ergebnisse.
lite bool Ohne Dateisystem-Checks (schneller).
includeChildren bool Child-Jobs (z. B. Serien-/Multipart-Kinder) explizit einbeziehen.

Beispiel:

GET /api/history?statuses=FINISHED,ERROR&search=Inception&limit=50&lite=1
 

Response (Beispiel):

{
   "jobs": [
     {
@@ -40,7 +40,7 @@
   "activation": { "started": true },
   "activationError": null
 }
-

POST /api/history/:id/omdb/assign

Weist OMDb-/Filmdaten nachträglich zu.

POST /api/history/:id/cd/assign

Weist CD-Metadaten (z. B. MusicBrainz) nachträglich zu.

POST /api/history/:id/error/ack

Quittiert einen Fehlerzustand im Historieneintrag.


GET /api/history/:id/delete-preview

Liefert eine Vorschau der löschbaren Pfade (inkl. Scope auf verknüpfte Jobs).

Query-Parameter:

Parameter Typ Standard Beschreibung
includeRelated bool true Verknüpfte Jobs in die Vorschau einbeziehen.

Response (Beispiel):

{
+

POST /api/history/:id/metadata/assign

Weist TMDb-Metadaten nachträglich zu oder aktualisiert bestehende Film-/Serien-Metadaten eines Jobs.

POST /api/history/:id/cd/assign

Weist CD-Metadaten (z. B. MusicBrainz) nachträglich zu.

POST /api/history/:id/error/ack

Quittiert einen Fehlerzustand im Historieneintrag.


GET /api/history/:id/delete-preview

Liefert eine Vorschau der löschbaren Pfade (inkl. Scope auf verknüpfte Jobs).

Query-Parameter:

Parameter Typ Standard Beschreibung
includeRelated bool true Verknüpfte Jobs in die Vorschau einbeziehen.

Response (Beispiel):

{
   "preview": {
     "jobId": 42,
     "relatedJobs": [{ "id": 42 }, { "id": 73 }],
diff --git a/site/api/index.html b/site/api/index.html
index 3325262..9db1e67 100644
--- a/site/api/index.html
+++ b/site/api/index.html
@@ -1,2 +1,2 @@
- Anhang: API-Referenz - Ripster      

Anhang: API-Referenz

REST- und WebSocket-Schnittstellen für Integration, Automatisierung und Debugging.

Basis-URL

http://localhost:3001
+ Anhang: API-Referenz - Ripster      

Anhang: API-Referenz

REST- und WebSocket-Schnittstellen für Integration, Automatisierung und Debugging.

Basis-URL

http://localhost:3001
 

API-Prefix: /api

API-Gruppen

  • Health


    Service-Liveness.

    GET /api/health

  • Pipeline API


    Analyse, Start/Retry/Cancel, Queue, Re-Encode.

    Pipeline API

  • Settings API


    Einstellungen, Skripte/Ketten, User-Presets.

    Settings API

  • History API


    Job-Historie, Orphan-Import, Löschoperationen.

    History API

  • Cron API


    Zeitgesteuerte Skript-/Kettenausführung.

    Cron API

  • Converter API


    Datei-Explorer, Upload, Job-Verwaltung für den Converter.

    Converter API

  • Downloads API


    Download-Queue für Ausgabedateien aus der Job-Historie.

    Downloads API

  • Runtime Activities API


    Laufende und abgeschlossene Aktivitäten (Skripte, Ketten, Cron, Tasks).

    Runtime Activities

  • :material-websocket: WebSocket Events


    Pipeline-, Queue-, Disk-, Settings-, Cron-, Converter- und Download-Events.

    WebSocket

Hinweis

Ripster hat keine eingebaute Authentifizierung und ist für lokalen, geschützten Betrieb gedacht.

\ No newline at end of file diff --git a/site/api/pipeline/index.html b/site/api/pipeline/index.html index 1c751ea..cf3ba43 100644 --- a/site/api/pipeline/index.html +++ b/site/api/pipeline/index.html @@ -1,4 +1,4 @@ - Pipeline API - Ripster

Pipeline API

Endpunkte zur Steuerung des Pipeline-Workflows.


GET /api/pipeline/state

Liefert aktuellen Pipeline- und Hardware-Monitoring-Snapshot.

Response (Beispiel):

{
+ Pipeline API - Ripster      

Pipeline API

Endpunkte zur Steuerung des Pipeline-Workflows.


GET /api/pipeline/state

Liefert aktuellen Pipeline- und Hardware-Monitoring-Snapshot.

Response (Beispiel):

{
   "pipeline": {
     "state": "READY_TO_ENCODE",
     "activeJobId": 42,
@@ -57,7 +57,7 @@
   }
 }
 

POST /api/pipeline/rescan-drive

Erzwingt Rescan für ein konkretes Laufwerk.

Request:

{ "devicePath": "/dev/sr0" }
-

GET /api/pipeline/omdb/search?q=

OMDb-Titelsuche.

Response:

{
+

GET /api/pipeline/tmdb/movie/search?q=

TMDb-Filmsuche.

Response:

{
   "results": [
     {
       "imdbId": "tt1375666",
diff --git a/site/api/runtime-activities/index.html b/site/api/runtime-activities/index.html
index e8b4297..38291d6 100644
--- a/site/api/runtime-activities/index.html
+++ b/site/api/runtime-activities/index.html
@@ -1,4 +1,4 @@
- Runtime Activities API - Ripster      

Runtime Activities API

Ripster verfolgt alle laufenden und kürzlich abgeschlossenen Aktivitäten (Skripte, Skript-Ketten, Cron-Jobs, interne Tasks) in Echtzeit über den RuntimeActivityService.


Übersicht

Aktivitäten entstehen, wenn Ripster intern Aktionen ausführt – z. B. beim Start eines Cron-Jobs, beim Ausführen einer Skript-Kette oder beim Durchlaufen von Pipeline-Schritten. Sie sind nicht persistent (kein DB-Speicher) und werden nur im Arbeitsspeicher gehalten.

  • Aktive Aktivitäten (active): Laufen gerade.
  • Letzte Aktivitäten (recent): Abgeschlossen, max. 120 Einträge.

Änderungen werden über WebSocket (RUNTIME_ACTIVITY_CHANGED) in Echtzeit gesendet.


Aktivitäts-Objekt

{
+ Runtime Activities API - Ripster      

Runtime Activities API

Ripster verfolgt alle laufenden und kürzlich abgeschlossenen Aktivitäten (Skripte, Skript-Ketten, Cron-Jobs, interne Tasks) in Echtzeit über den RuntimeActivityService.


Übersicht

Aktivitäten entstehen, wenn Ripster intern Aktionen ausführt – z. B. beim Start eines Cron-Jobs, beim Ausführen einer Skript-Kette oder beim Durchlaufen von Pipeline-Schritten. Sie sind nicht persistent (kein DB-Speicher) und werden nur im Arbeitsspeicher gehalten.

  • Aktive Aktivitäten (active): Laufen gerade.
  • Letzte Aktivitäten (recent): Abgeschlossen, max. 120 Einträge.

Änderungen werden über WebSocket (RUNTIME_ACTIVITY_CHANGED) in Echtzeit gesendet.


Aktivitäts-Objekt

{
   "id": 7,
   "type": "chain",
   "name": "Post-Encode Aufräumen",
diff --git a/site/api/settings/index.html b/site/api/settings/index.html
index e3c0a87..c6bc58e 100644
--- a/site/api/settings/index.html
+++ b/site/api/settings/index.html
@@ -1,4 +1,4 @@
- Settings API - Ripster      

Settings API

Endpunkte für Einstellungen, Skripte, Skript-Ketten und User-Presets.


GET /api/settings

Liefert alle Einstellungen kategorisiert.

Response (Struktur):

{
+ Settings API - Ripster      

Settings API

Endpunkte für Einstellungen, Skripte, Skript-Ketten und User-Presets.


GET /api/settings

Liefert alle Einstellungen kategorisiert.

Response (Struktur):

{
   "categories": [
     {
       "category": "Pfade",
diff --git a/site/api/websocket/index.html b/site/api/websocket/index.html
index fff50b7..b0f606f 100644
--- a/site/api/websocket/index.html
+++ b/site/api/websocket/index.html
@@ -1,4 +1,4 @@
- WebSocket Events - Ripster      

WebSocket Events

Ripster sendet Echtzeit-Updates über /ws.


Verbindung

const ws = new WebSocket('ws://localhost:3001/ws');
+ WebSocket Events - Ripster      

WebSocket Events

Ripster sendet Echtzeit-Updates über /ws.


Verbindung

const ws = new WebSocket('ws://localhost:3001/ws');
 
 ws.onmessage = (event) => {
   const msg = JSON.parse(event.data);
diff --git a/site/appendix/index.html b/site/appendix/index.html
index 04a2b40..ed4eaaf 100644
--- a/site/appendix/index.html
+++ b/site/appendix/index.html
@@ -1 +1 @@
- Technischer Anhang - Ripster      

Technischer Anhang

Dieser Bereich enthält die technische Referenz hinter dem Benutzerhandbuch.

Inhalt

  • Konfiguration
  • komplette Feldreferenz
  • Umgebungsvariablen
  • Pipeline intern
  • Zustandsmodell
  • Encode-Planung
  • Playlist-Analyse
  • Pre-/Post-Encode-Ausführungen
  • API-Referenz
  • REST-Endpunkte
  • WebSocket-Events
  • Architektur
  • Backend-/Frontend-Aufbau
  • Datenbank
  • Deployment
  • Betrieb in Entwicklung und Produktion
  • Externe Tools
  • MakeMKV, HandBrake, MediaInfo

Wann du in den Anhang wechselst

  • du integrierst Ripster mit anderen Systemen
  • du betreibst mehrere Instanzen oder willst tiefer debuggen
  • du brauchst Feld-/API-/Schema-Details für Automatisierung
\ No newline at end of file + Technischer Anhang - Ripster

Technischer Anhang

Dieser Bereich enthält die technische Referenz hinter dem Benutzerhandbuch.

Inhalt

  • Konfiguration
  • komplette Feldreferenz
  • Umgebungsvariablen
  • Pipeline intern
  • Zustandsmodell
  • Encode-Planung
  • Playlist-Analyse
  • Pre-/Post-Encode-Ausführungen
  • API-Referenz
  • REST-Endpunkte
  • WebSocket-Events
  • Architektur
  • Backend-/Frontend-Aufbau
  • Datenbank
  • Deployment
  • Betrieb in Entwicklung und Produktion
  • Externe Tools
  • MakeMKV, HandBrake, MediaInfo

Wann du in den Anhang wechselst

  • du integrierst Ripster mit anderen Systemen
  • du betreibst mehrere Instanzen oder willst tiefer debuggen
  • du brauchst Feld-/API-/Schema-Details für Automatisierung
\ No newline at end of file diff --git a/site/architecture/backend/index.html b/site/architecture/backend/index.html index 57f0b9e..d574fa5 100644 --- a/site/architecture/backend/index.html +++ b/site/architecture/backend/index.html @@ -1 +1 @@ - Backend-Services - Ripster

Backend-Services

Das Backend ist in Services aufgeteilt, die von Express-Routen orchestriert werden. Seit v0.12.0 erfolgt die Medienverarbeitung über ein Plugin-System.


Plugin-System (src/plugins/)

Ab v0.12.0 ist die Pipeline modular aufgebaut. Jeder Medientyp wird von einem eigenen Plugin verwaltet.

Basisklassen

  • PluginBase.js — Abstrakte Basisklasse SourcePlugin mit Lifecycle-Methoden
  • PluginRegistry.js — Dynamische Plugin-Erkennung, prioritätsbasierte Auswahl, Settings-Schema-Aggregation
  • PluginContext.js — Ausführungskontext (Logger, Callbacks, Signals) für Plugin-Aufrufe

Plugin-Lifecycle

Jedes Plugin implementiert die folgenden Methoden:

Methode Beschreibung
detect(discInfo) Medientyp-Erkennung
analyze(devicePath, job, ctx) Analyse / Metadaten-Extraktion
rip(job, ctx) Rohdaten-Extraktion
review(job, ctx) Optionale Vorschau-Vorbereitung
encode(job, ctx) Finales Encoding/Konvertierung
finalize(job, ctx) Nachbearbeitung
onCancel(job, ctx) Bereinigung bei Abbruch
onRetry(job, ctx) Zustand-Reset vor Retry

Implementierte Plugins

  • BluRayPlugin.js — Blu-ray via MakeMKV (Backup-Modus)
  • DVDPlugin.js — DVD via MakeMKV (MKV-Modus)
  • CdPlugin.js — Audio-CD via cdparanoia + FFmpeg (experimentell)
  • AudiobookPlugin.js — AAX/M4B via FFmpeg mit Kapitel-Splitting
  • ConverterPlugin.js — Generische Audio/Video-Konvertierung via FFmpeg
  • VideoDiscPlugin.js — Gemeinsame Basis für Blu-ray/DVD (MediaInfo-Parsing)

pipelineService.js

Zentrale Workflow-Orchestrierung.

Aufgaben:

  • Pipeline-State-Machine + Persistenz (pipeline_state)
  • Disc-Analyse/Rip/Review/Encode via Plugin-Delegation
  • Queue-Management (Jobs + script|chain|wait Einträge)
  • Retry/Re-Encode/Restart-Flows
  • WebSocket-Broadcasts für State/Progress/Queue
  • Converter-Job-Verwaltung (createConverterJobFromEntry, uploadConverterFiles, startConverterJob)

Wichtige Methoden:

  • analyzeDisc()
  • selectMetadata()
  • startPreparedJob()
  • confirmEncodeReview()
  • cancel()
  • retry()
  • reencodeFromRaw()
  • restartReviewFromRaw()
  • restartEncodeWithLastSettings()
  • resumeReadyToEncodeJob()
  • enqueueNonJobEntry(), reorderQueue(), removeQueueEntry()
  • createConverterJobFromEntry(), createConverterJobsFromSelection()
  • uploadConverterFiles(), startConverterJob()

diskDetectionService.js

Pollt Laufwerk(e) und emittiert:

  • discInserted
  • discRemoved
  • error

Zusatz:

  • Modus auto oder explicit
  • heuristische mediaProfile-Erkennung (bluray/dvd/other)
  • rescanAndEmit() für manuellen Trigger

settingsService.js

Settings-Layer mit Validation/Serialisierung.

Features:

  • getCategorizedSettings() für UI-Form
  • setSettingValue() / setSettingsBulk()
  • profilspezifische Auflösung (resolveEffectiveToolSettings)
  • CLI-Config-Building für MakeMKV/HandBrake/MediaInfo/FFmpeg
  • HandBrake-Preset-Liste via HandBrakeCLI -z
  • MakeMKV-Key-Synchronisation aus makemkv_registration_key nach ~/.MakeMKV/settings.conf
  • Pfadauflösung für alle Medienprofile inkl. Audiobook und Converter

historyService.js

Historie + Dateioperationen.

Features:

  • Job-Liste/Detail inkl. Log-Tail
  • Orphan-RAW-Erkennung und Import
  • OMDb-Nachzuweisung
  • Dateilöschung (raw|movie|both)
  • Job-Löschung (none|raw|movie|both)

audiobookService.js

Audiobook-Verarbeitung (AAX/M4B).

Features:

  • FFprobe-basierte Analyse (Kapitel, Metadaten)
  • FFmpeg-basiertes Encoding mit Kapitel-Splitting
  • Ausgabeformate: M4B, MP3, FLAC
  • Template-basierte Pfade ({author}, {title}, {year}, {narrator}, {series}, {part})

activationBytesService.js

Verwaltung von Audible-Activation-Bytes für AAX-DRM-Handling.

Features:

  • SHA-1-Prüfsumme der AAX-Datei berechnen
  • Activation Bytes in aax_activation_bytes-Tabelle cachen
  • Lookup via audnexService (wenn konfiguriert)

converterScanService.js

Dateisystem-Überwachung des Converter-Eingangsordners.

Features:

  • Vollständiger FS-Baum (getTree())
  • DB-basierter Datei-Explorer (getEntries())
  • Manueller und automatischer Scan (Polling)
  • Pfad-Normalisierung mit Traversal-Schutz
  • WebSocket-Broadcast: CONVERTER_SCAN_UPDATE

downloadService.js

Download-Queue für Ausgabedateien aus der Historie.

Features:

  • Job in Download-Queue einreihen (enqueueHistoryJob)
  • ZIP-Archiv aus Ausgabedateien erstellen (archiver)
  • Datei-Streaming via res.download()
  • WebSocket-Broadcast: DOWNLOADS_UPDATED bei Status-Änderungen
  • Download-Item löschen

cronService.js

Integriertes Cron-System ohne externe Parser-Library.

Features:

  • 5-Feld-Cron-Parser + nextRun-Berechnung
  • Quellen: script oder chain
  • Laufzeitlogs (cron_run_logs)
  • manuelles Triggern
  • WebSocket-Events: CRON_JOBS_UPDATED, CRON_JOB_UPDATED

runtimeActivityService.js

In-Memory-Tracking aller laufenden und kürzlich abgeschlossenen Aktivitäten (Skripte, Ketten, Cron-Jobs, Tasks).

Features:

  • startActivity(type, payload) → Aktivität registrieren, ID zurückgeben
  • updateActivity(id, patch) → Laufende Aktivität aktualisieren
  • completeActivity(id, payload) → Aktivität abschließen und in recent verschieben
  • setControls(id, { cancel, nextStep }) → Steuer-Handler registrieren (für canCancel/canNextStep)
  • requestCancel(id) / requestNextStep(id) → Steuer-Handler aufrufen
  • clearRecent() → Abgeschlossene Aktivitäten löschen
  • getSnapshot() → Snapshot mit active + recent + updatedAt
  • Broadcasts RUNTIME_ACTIVITY_CHANGED über WebSocket bei jeder Änderung

Limits:

  • recent max. 120 Einträge
  • stdout/stderr/output max. 12.000 Zeichen
  • message/errorMessage max. 2.000 Zeichen

Vollständige API-Dokumentation: Runtime Activities API


Weitere Services

  • scriptService.js (CRUD + Test + Wrapper-Ausführung)
  • scriptChainService.js (CRUD + Step-Execution)
  • userPresetService.js (HandBrake User-Presets)
  • hardwareMonitorService.js (CPU/RAM/GPU/Storage)
  • websocketService.js (Client-Registry + Broadcast)
  • notificationService.js (PushOver)
  • cdRipService.js (CD-Ripping mit cdparanoia)
  • musicBrainzService.js (MusicBrainz-Metadaten-Lookup)
  • audnexService.js (Audnex-API für Audiobook-Metadaten)
  • coverArtRecoveryService.js (Cover-Art-Wiederherstellung)
  • thumbnailService.js (Vorschaubild-Generierung)
  • omdbService.js (OMDb-Metadaten-Suche)
  • logger.js (rotierende Datei-Logs)

Bootstrapping (src/index.js)

Beim Start:

  1. DB init/migrate
  2. Pipeline-Init (inkl. Plugin-Registry)
  3. Cron-Init
  4. Express-Routes + Error-Handler
  5. WebSocket-Server auf /ws
  6. Hardware-Monitoring-Init
  7. Disk-Detection-Start
  8. Converter-Scan-Service-Init (Polling falls aktiviert)
\ No newline at end of file + Backend-Services - Ripster

Backend-Services

Das Backend ist in Services aufgeteilt, die von Express-Routen orchestriert werden. Seit v0.12.0 erfolgt die Medienverarbeitung über ein Plugin-System.


Plugin-System (src/plugins/)

Ab v0.12.0 ist die Pipeline modular aufgebaut. Jeder Medientyp wird von einem eigenen Plugin verwaltet.

Basisklassen

  • PluginBase.js — Abstrakte Basisklasse SourcePlugin mit Lifecycle-Methoden
  • PluginRegistry.js — Dynamische Plugin-Erkennung, prioritätsbasierte Auswahl, Settings-Schema-Aggregation
  • PluginContext.js — Ausführungskontext (Logger, Callbacks, Signals) für Plugin-Aufrufe

Plugin-Lifecycle

Jedes Plugin implementiert die folgenden Methoden:

Methode Beschreibung
detect(discInfo) Medientyp-Erkennung
analyze(devicePath, job, ctx) Analyse / Metadaten-Extraktion
rip(job, ctx) Rohdaten-Extraktion
review(job, ctx) Optionale Vorschau-Vorbereitung
encode(job, ctx) Finales Encoding/Konvertierung
finalize(job, ctx) Nachbearbeitung
onCancel(job, ctx) Bereinigung bei Abbruch
onRetry(job, ctx) Zustand-Reset vor Retry

Implementierte Plugins

  • BluRayPlugin.js — Blu-ray via MakeMKV (Backup-Modus)
  • DVDPlugin.js — DVD via MakeMKV (MKV-Modus)
  • CdPlugin.js — Audio-CD via cdparanoia + FFmpeg (experimentell)
  • AudiobookPlugin.js — AAX/M4B via FFmpeg mit Kapitel-Splitting
  • ConverterPlugin.js — Generische Audio/Video-Konvertierung via FFmpeg
  • VideoDiscPlugin.js — Gemeinsame Basis für Blu-ray/DVD (MediaInfo-Parsing)

pipelineService.js

Zentrale Workflow-Orchestrierung.

Aufgaben:

  • Pipeline-State-Machine + Persistenz (pipeline_state)
  • Disc-Analyse/Rip/Review/Encode via Plugin-Delegation
  • Queue-Management (Jobs + script|chain|wait Einträge)
  • Retry/Re-Encode/Restart-Flows
  • WebSocket-Broadcasts für State/Progress/Queue
  • Converter-Job-Verwaltung (createConverterJobFromEntry, uploadConverterFiles, startConverterJob)

Wichtige Methoden:

  • analyzeDisc()
  • selectMetadata()
  • startPreparedJob()
  • confirmEncodeReview()
  • cancel()
  • retry()
  • reencodeFromRaw()
  • restartReviewFromRaw()
  • restartEncodeWithLastSettings()
  • resumeReadyToEncodeJob()
  • enqueueNonJobEntry(), reorderQueue(), removeQueueEntry()
  • createConverterJobFromEntry(), createConverterJobsFromSelection()
  • uploadConverterFiles(), startConverterJob()

diskDetectionService.js

Pollt Laufwerk(e) und emittiert:

  • discInserted
  • discRemoved
  • error

Zusatz:

  • Modus auto oder explicit
  • heuristische mediaProfile-Erkennung (bluray/dvd/other)
  • rescanAndEmit() für manuellen Trigger

settingsService.js

Settings-Layer mit Validation/Serialisierung.

Features:

  • getCategorizedSettings() für UI-Form
  • setSettingValue() / setSettingsBulk()
  • profilspezifische Auflösung (resolveEffectiveToolSettings)
  • CLI-Config-Building für MakeMKV/HandBrake/MediaInfo/FFmpeg
  • HandBrake-Preset-Liste via HandBrakeCLI -z
  • MakeMKV-Key-Synchronisation aus makemkv_registration_key nach ~/.MakeMKV/settings.conf
  • Pfadauflösung für alle Medienprofile inkl. Audiobook und Converter

historyService.js

Historie + Dateioperationen.

Features:

  • Job-Liste/Detail inkl. Log-Tail
  • Orphan-RAW-Erkennung und Import
  • TMDb-Neuzuordnung
  • Dateilöschung (raw|movie|both)
  • Job-Löschung (none|raw|movie|both)

audiobookService.js

Audiobook-Verarbeitung (AAX/M4B).

Features:

  • FFprobe-basierte Analyse (Kapitel, Metadaten)
  • FFmpeg-basiertes Encoding mit Kapitel-Splitting
  • Ausgabeformate: M4B, MP3, FLAC
  • Template-basierte Pfade ({author}, {title}, {year}, {narrator}, {series}, {part})

activationBytesService.js

Verwaltung von Audible-Activation-Bytes für AAX-DRM-Handling.

Features:

  • SHA-1-Prüfsumme der AAX-Datei berechnen
  • Activation Bytes in aax_activation_bytes-Tabelle cachen
  • Lookup via audnexService (wenn konfiguriert)

converterScanService.js

Dateisystem-Überwachung des Converter-Eingangsordners.

Features:

  • Vollständiger FS-Baum (getTree())
  • DB-basierter Datei-Explorer (getEntries())
  • Manueller und automatischer Scan (Polling)
  • Pfad-Normalisierung mit Traversal-Schutz
  • WebSocket-Broadcast: CONVERTER_SCAN_UPDATE

downloadService.js

Download-Queue für Ausgabedateien aus der Historie.

Features:

  • Job in Download-Queue einreihen (enqueueHistoryJob)
  • ZIP-Archiv aus Ausgabedateien erstellen (archiver)
  • Datei-Streaming via res.download()
  • WebSocket-Broadcast: DOWNLOADS_UPDATED bei Status-Änderungen
  • Download-Item löschen

cronService.js

Integriertes Cron-System ohne externe Parser-Library.

Features:

  • 5-Feld-Cron-Parser + nextRun-Berechnung
  • Quellen: script oder chain
  • Laufzeitlogs (cron_run_logs)
  • manuelles Triggern
  • WebSocket-Events: CRON_JOBS_UPDATED, CRON_JOB_UPDATED

runtimeActivityService.js

In-Memory-Tracking aller laufenden und kürzlich abgeschlossenen Aktivitäten (Skripte, Ketten, Cron-Jobs, Tasks).

Features:

  • startActivity(type, payload) → Aktivität registrieren, ID zurückgeben
  • updateActivity(id, patch) → Laufende Aktivität aktualisieren
  • completeActivity(id, payload) → Aktivität abschließen und in recent verschieben
  • setControls(id, { cancel, nextStep }) → Steuer-Handler registrieren (für canCancel/canNextStep)
  • requestCancel(id) / requestNextStep(id) → Steuer-Handler aufrufen
  • clearRecent() → Abgeschlossene Aktivitäten löschen
  • getSnapshot() → Snapshot mit active + recent + updatedAt
  • Broadcasts RUNTIME_ACTIVITY_CHANGED über WebSocket bei jeder Änderung

Limits:

  • recent max. 120 Einträge
  • stdout/stderr/output max. 12.000 Zeichen
  • message/errorMessage max. 2.000 Zeichen

Vollständige API-Dokumentation: Runtime Activities API


Weitere Services

  • scriptService.js (CRUD + Test + Wrapper-Ausführung)
  • scriptChainService.js (CRUD + Step-Execution)
  • userPresetService.js (HandBrake User-Presets)
  • hardwareMonitorService.js (CPU/RAM/GPU/Storage)
  • websocketService.js (Client-Registry + Broadcast)
  • notificationService.js (PushOver)
  • cdRipService.js (CD-Ripping mit cdparanoia)
  • musicBrainzService.js (MusicBrainz-Metadaten-Lookup)
  • audnexService.js (Audnex-API für Audiobook-Metadaten)
  • coverArtRecoveryService.js (Cover-Art-Wiederherstellung)
  • thumbnailService.js (Vorschaubild-Generierung)
  • tmdbService.js (Film-/Serien-Metadaten-Suche)
  • logger.js (rotierende Datei-Logs)

Bootstrapping (src/index.js)

Beim Start:

  1. DB init/migrate
  2. Pipeline-Init (inkl. Plugin-Registry)
  3. Cron-Init
  4. Express-Routes + Error-Handler
  5. WebSocket-Server auf /ws
  6. Hardware-Monitoring-Init
  7. Disk-Detection-Start
  8. Converter-Scan-Service-Init (Polling falls aktiviert)
\ No newline at end of file diff --git a/site/architecture/database/index.html b/site/architecture/database/index.html index c5d4aec..20b53f8 100644 --- a/site/architecture/database/index.html +++ b/site/architecture/database/index.html @@ -1,4 +1,4 @@ - Datenbank - Ripster

Datenbank

Ripster verwendet SQLite (backend/data/ripster.db).


Tabellen

settings_schema
+ Datenbank - Ripster      

Datenbank

Ripster verwendet SQLite (backend/data/ripster.db).


Tabellen

settings_schema
 settings_values
 jobs
 job_lineage_artifacts
diff --git a/site/architecture/frontend/index.html b/site/architecture/frontend/index.html
index c07cf6c..61ffecc 100644
--- a/site/architecture/frontend/index.html
+++ b/site/architecture/frontend/index.html
@@ -1,4 +1,4 @@
- Frontend-Komponenten - Ripster      

Frontend-Komponenten

Frontend: React + PrimeReact + Vite.


Hauptseiten

RipperPage.jsx

Pipeline-Steuerung:

  • Status/Progress/ETA
  • Metadaten-Dialog
  • Playlist-Entscheidung
  • Review-Panel (Track-Auswahl)
  • Queue-Interaktion (reorder/add/remove)
  • Job-Aktionen (Start/Cancel/Retry/Re-Encode)
  • Hardware-Monitoring-Anzeige
  • Aktivitäts-Tracking (Skripte, Ketten, Cron)

SettingsPage.jsx

Konfiguration:

  • dynamisches Settings-Formular (DynamicSettingsForm)
  • Skripte/Ketten inkl. Reorder/Test
  • User-Presets
  • Cron-Jobs (CronJobsTab)

HistoryPage.jsx

Historie:

  • Job-Liste/Filter
  • Job-Details + Logs
  • OMDb-Nachzuweisung
  • Re-Encode/Restart-Workflows

ConverterPage.jsx

Datei-Converter:

  • Datei-Explorer des Converter-Eingangsordners (Baum-Ansicht)
  • Upload von Audio/Video-Dateien (bis zu 50 Dateien gleichzeitig)
  • Dateiverwaltung: Umbenennen, Verschieben, Löschen, Ordner erstellen
  • Jobs aus Dateiauswahl erstellen
  • Converter-Job-Konfiguration (Ausgabeformat, Preset, Tracks)
  • Job-Start, Abbruch, Löschung
  • Automatischer Scan-Status

AudiobooksPage.jsx

Dedizierter AAX-/Audiobook-Flow:

  • Upload-Panel für AAX-Dateien
  • aktive Audiobook-Jobkarten mit Start/Cancel/Retry/Delete
  • Audiobook-Konfigurationspanel und Output-Explorer

DownloadsPage.jsx

Download-Queue:

  • Ausgabedateien aus der Job-Historie in die Queue einreihen
  • Download-Status verfolgen (ausstehend, wird verarbeitet, bereit, fehlgeschlagen)
  • Dateien als ZIP herunterladen
  • Download-Einträge löschen

DatabasePage.jsx

Expert-Modus:

  • Tabellarische Rohsicht der Job-Datenbank
  • Orphan-RAW-Import

Wichtige Komponenten

  • PipelineStatusCard.jsx — Pipeline-Status-Anzeige mit Progress
  • MetadataSelectionDialog.jsx — OMDb-Metadaten-Auswahl
  • MediaInfoReviewPanel.jsx — Track-Auswahl-Interface (Video/Audio/Untertitel)
  • JobDetailDialog.jsx — Job-Detailansicht mit Logs
  • CronJobsTab.jsx — Cron-Job-Verwaltung
  • DynamicSettingsForm.jsx — Schema-gesteuertes Einstellungsformular
  • ConverterJobCard.jsx — Converter-Job-Darstellung
  • CdRipConfigPanel.jsx — Konfiguration für Audio-CD-Ripping

API-Client (api/client.js)

  • zentraler request() mit JSON-Handling
  • Fehlerobjekt aus API wird auf Error(message) gemappt
  • VITE_API_BASE default /api

WebSocket (hooks/useWebSocket.js)

  • URL: VITE_WS_URL oder automatisch ws(s)://<host>/ws
  • Auto-Reconnect mit 1500ms Intervall

In App.jsx werden u. a. verarbeitet:

  • PIPELINE_STATE_CHANGED
  • PIPELINE_PROGRESS
  • PIPELINE_QUEUE_CHANGED
  • Disk erkannt / Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • DOWNLOADS_UPDATED
  • CONVERTER_SCAN_UPDATE
  • RUNTIME_ACTIVITY_CHANGED

Build/Run

# dev
+ Frontend-Komponenten - Ripster      

Frontend-Komponenten

Frontend: React + PrimeReact + Vite.


Hauptseiten

RipperPage.jsx

Pipeline-Steuerung:

  • Status/Progress/ETA
  • Metadaten-Dialog
  • Playlist-Entscheidung
  • Review-Panel (Track-Auswahl)
  • Queue-Interaktion (reorder/add/remove)
  • Job-Aktionen (Start/Cancel/Retry/Re-Encode)
  • Hardware-Monitoring-Anzeige
  • Aktivitäts-Tracking (Skripte, Ketten, Cron)

SettingsPage.jsx

Konfiguration:

  • dynamisches Settings-Formular (DynamicSettingsForm)
  • Skripte/Ketten inkl. Reorder/Test
  • User-Presets
  • Cron-Jobs (CronJobsTab)

HistoryPage.jsx

Historie:

  • Job-Liste/Filter
  • Job-Details + Logs
  • TMDb-Neuzuordnung
  • Re-Encode/Restart-Workflows

ConverterPage.jsx

Datei-Converter:

  • Datei-Explorer des Converter-Eingangsordners (Baum-Ansicht)
  • Upload von Audio/Video-Dateien (bis zu 50 Dateien gleichzeitig)
  • Dateiverwaltung: Umbenennen, Verschieben, Löschen, Ordner erstellen
  • Jobs aus Dateiauswahl erstellen
  • Converter-Job-Konfiguration (Ausgabeformat, Preset, Tracks)
  • Job-Start, Abbruch, Löschung
  • Automatischer Scan-Status

AudiobooksPage.jsx

Dedizierter AAX-/Audiobook-Flow:

  • Upload-Panel für AAX-Dateien
  • aktive Audiobook-Jobkarten mit Start/Cancel/Retry/Delete
  • Audiobook-Konfigurationspanel und Output-Explorer

DownloadsPage.jsx

Download-Queue:

  • Ausgabedateien aus der Job-Historie in die Queue einreihen
  • Download-Status verfolgen (ausstehend, wird verarbeitet, bereit, fehlgeschlagen)
  • Dateien als ZIP herunterladen
  • Download-Einträge löschen

DatabasePage.jsx

Expert-Modus:

  • Tabellarische Rohsicht der Job-Datenbank
  • Orphan-RAW-Import

Wichtige Komponenten

  • PipelineStatusCard.jsx — Pipeline-Status-Anzeige mit Progress
  • MetadataSelectionDialog.jsx — TMDb-Metadaten-Auswahl
  • MediaInfoReviewPanel.jsx — Track-Auswahl-Interface (Video/Audio/Untertitel)
  • JobDetailDialog.jsx — Job-Detailansicht mit Logs
  • CronJobsTab.jsx — Cron-Job-Verwaltung
  • DynamicSettingsForm.jsx — Schema-gesteuertes Einstellungsformular
  • ConverterJobCard.jsx — Converter-Job-Darstellung
  • CdRipConfigPanel.jsx — Konfiguration für Audio-CD-Ripping

API-Client (api/client.js)

  • zentraler request() mit JSON-Handling
  • Fehlerobjekt aus API wird auf Error(message) gemappt
  • VITE_API_BASE default /api

WebSocket (hooks/useWebSocket.js)

  • URL: VITE_WS_URL oder automatisch ws(s)://<host>/ws
  • Auto-Reconnect mit 1500ms Intervall

In App.jsx werden u. a. verarbeitet:

  • PIPELINE_STATE_CHANGED
  • PIPELINE_PROGRESS
  • PIPELINE_QUEUE_CHANGED
  • Disk erkannt / Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • DOWNLOADS_UPDATED
  • CONVERTER_SCAN_UPDATE
  • RUNTIME_ACTIVITY_CHANGED

Build/Run

# dev
 npm run dev --prefix frontend
 
 # prod build
diff --git a/site/architecture/index.html b/site/architecture/index.html
index a777f96..67a7900 100644
--- a/site/architecture/index.html
+++ b/site/architecture/index.html
@@ -1,4 +1,4 @@
- Anhang: Architektur - Ripster      

Anhang: Architektur

Ripster ist eine Client-Server-Anwendung mit REST + WebSocket und externen CLI-Tools.


Systemüberblick

graph TB
+ Anhang: Architektur - Ripster      

Anhang: Architektur

Ripster ist eine Client-Server-Anwendung mit REST + WebSocket und externen CLI-Tools.


Systemüberblick

graph TB
     subgraph Browser["Browser (React)"]
         Ripper[Ripper]
         Settings[Einstellungen]
diff --git a/site/architecture/overview/index.html b/site/architecture/overview/index.html
index 916a908..8b37b1a 100644
--- a/site/architecture/overview/index.html
+++ b/site/architecture/overview/index.html
@@ -1,4 +1,4 @@
- Übersicht - Ripster      

Architektur-Übersicht


Kernprinzipien

Event-getriebene Pipeline

pipelineService hält einen Snapshot der State-Machine und broadcastet Änderungen sofort via WebSocket.

State-Änderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update
+ Übersicht - Ripster      

Architektur-Übersicht


Kernprinzipien

Event-getriebene Pipeline

pipelineService hält einen Snapshot der State-Machine und broadcastet Änderungen sofort via WebSocket.

State-Änderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update
 

Service-Layer

Route -> Service -> DB/Tool-Execution
 

Routes enthalten kaum Business-Logik.

Schema-getriebene Settings

Settings sind DB-schema-getrieben (settings_schema + settings_values), UI rendert dynamisch aus diesen Daten.


Echtzeit-Kommunikation

WebSocket läuft auf /ws.

Wichtige Events:

  • PIPELINE_STATE_CHANGED, PIPELINE_PROGRESS, PIPELINE_QUEUE_CHANGED
  • Disk erkannt, Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • SETTINGS_UPDATED, SETTINGS_BULK_UPDATED
  • SETTINGS_SCRIPTS_UPDATED, SETTINGS_SCRIPT_CHAINS_UPDATED, USER_PRESETS_UPDATED
  • CRON_JOBS_UPDATED, CRON_JOB_UPDATED
  • PIPELINE_ERROR, DISK_DETECTION_ERROR

Prozessausführung

Externe Tools werden als Child-Processes gestartet (processRunner):

  • Streaming von stdout/stderr
  • Progress-Parsing (progressParsers.js)
  • kontrollierter Abbruch (SIGINT/SIGKILL-Fallback)

Persistenz

SQLite-Datei: backend/data/ripster.db

Kern-Tabellen:

  • jobs, pipeline_state
  • settings_schema, settings_values
  • scripts, script_chains, script_chain_steps
  • user_presets
  • cron_jobs, cron_run_logs

Beim Start werden Schema und Settings-Migrationen automatisch ausgeführt.


Fehlerbehandlung

Zentrales Error-Handling liefert:

{
   "error": {
diff --git a/site/configuration/environment/index.html b/site/configuration/environment/index.html
index e7798f5..6eb0240 100644
--- a/site/configuration/environment/index.html
+++ b/site/configuration/environment/index.html
@@ -1,4 +1,4 @@
- Umgebungsvariablen - Ripster      

Umgebungsvariablen

Umgebungsvariablen steuern Backend/Vite außerhalb der DB-basierten UI-Settings.


Backend (backend/.env)

Variable Default (Code) Beschreibung
PORT 3001 Express-Port
DB_PATH backend/data/ripster.db SQLite-Datei (relativ zu backend/)
LOG_DIR backend/logs Fallback-Logverzeichnis (wenn log_dir-Setting nicht gesetzt/lesbar)
CORS_ORIGIN * CORS-Origin für API
LOG_LEVEL info debug, info, warn, error

Beispiel:

PORT=3001
+ Umgebungsvariablen - Ripster      

Umgebungsvariablen

Umgebungsvariablen steuern Backend/Vite außerhalb der DB-basierten UI-Settings.


Backend (backend/.env)

Variable Default (Code) Beschreibung
PORT 3001 Express-Port
DB_PATH backend/data/ripster.db SQLite-Datei (relativ zu backend/)
LOG_DIR backend/logs Fallback-Logverzeichnis (wenn log_dir-Setting nicht gesetzt/lesbar)
CORS_ORIGIN * CORS-Origin für API
LOG_LEVEL info debug, info, warn, error

Beispiel:

PORT=3001
 DB_PATH=/var/lib/ripster/ripster.db
 LOG_DIR=/var/log/ripster
 CORS_ORIGIN=http://192.168.1.50:5173
diff --git a/site/configuration/index.html b/site/configuration/index.html
index 8dbe12a..f83d510 100644
--- a/site/configuration/index.html
+++ b/site/configuration/index.html
@@ -1 +1 @@
- Anhang: Konfiguration - Ripster      

Anhang: Konfiguration

Dieser Abschnitt ist die technische Referenz zu allen Konfigurationsarten in Ripster.

Inhalte

Zurück zum Handbuch

\ No newline at end of file + Anhang: Konfiguration - Ripster

Anhang: Konfiguration

Dieser Abschnitt ist die technische Referenz zu allen Konfigurationsarten in Ripster.

Inhalte

Zurück zum Handbuch

\ No newline at end of file diff --git a/site/configuration/settings-reference/index.html b/site/configuration/settings-reference/index.html index 20b4146..d1efeb9 100644 --- a/site/configuration/settings-reference/index.html +++ b/site/configuration/settings-reference/index.html @@ -1 +1 @@ - Alle Einstellungen - Ripster

Einstellungsreferenz

Diese Seite dokumentiert den aktuellen Stand der Settings auf Basis von settings_schema und der aktiven GUI-Logik.

Wichtiges Verhalten in der GUI

  • Speichern erfolgt gesammelt ueber Aenderungen speichern (Bulk-Update).
  • ui_expert_mode wird sofort einzeln gespeichert (nicht erst mit Bulk-Speichern).
  • *_owner-Felder sind in der GUI erst aktiv, wenn der zugehoerige Pfad gesetzt ist.
  • Einige Keys sind absichtlich ausgeblendet und nur technisch (API/DB) nutzbar.
  • Benachrichtigungs-Event-Toggles sind nur sichtbar, wenn pushover_enabled=true.

Fallbacks und Pfadaufloesung

  • Leere profilspezifische Pfade fallen auf Installationsdefaults zurueck.
  • download_dir nutzt bei leerem Wert den Default-Downloadpfad.
  • Die Konfigurationsseite zeigt im Block Effektive Pfade die tatsaechlich verwendeten Laufzeitpfade.

Vollstaendige Feldliste

Kategorie: Benachrichtigungen

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Expertenmodus ui_expert_mode boolean false Standard Schaltet erweiterte Einstellungen in der UI ein.
PushOver aktiviert pushover_enabled boolean false Standard Master-Schalter für PushOver Versand.
PushOver Token pushover_token string leer Standard Application Token für PushOver.
PushOver User pushover_user string leer Standard User-Key für PushOver.
PushOver Device (optional) pushover_device string leer Expertenmodus Optionales Ziel-Device in PushOver.
PushOver Titel-Präfix pushover_title_prefix string Ripster Standard Prefix im PushOver Titel.
PushOver Priority pushover_priority number 0 Expertenmodus Priorität -2 bis 2.
PushOver Timeout (ms) pushover_timeout_ms number 7000 Expertenmodus HTTP Timeout für PushOver Requests.
Bei manueller Auswahl senden pushover_notify_metadata_ready boolean true Standard Sendet, wenn ein Job eine manuelle Auswahl/Entscheidung benötigt (z.B. Metadaten, Titel oder Playlist).
Bei Rip-Start senden pushover_notify_rip_started boolean true Standard Sendet beim Start des MakeMKV-Rips.
Bei Encode-Start senden pushover_notify_encoding_started boolean true Standard Sendet beim Start von HandBrake.
Bei Erfolg senden pushover_notify_job_finished boolean true Standard Sendet bei erfolgreich abgeschlossenem Job.
Bei Fehler senden pushover_notify_job_error boolean true Standard Sendet bei Fehlern in der Pipeline.
Bei Abbruch senden pushover_notify_job_cancelled boolean true Standard Sendet wenn Job manuell abgebrochen wurde.
Bei Re-Encode Start senden pushover_notify_reencode_started boolean true Standard Sendet beim Start von RAW Re-Encode.
Bei Re-Encode Erfolg senden pushover_notify_reencode_finished boolean true Standard Sendet bei erfolgreichem RAW Re-Encode.

Kategorie: Converter

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Erlaubte Datei-Endungen converter_scan_extensions string mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus Standard Komma-getrennte Liste erlaubter Dateiendungen für den Scan (ohne Punkt).
Auto-Scan (Polling) converter_polling_enabled boolean false Standard Converter Raw-Ordner automatisch in regelmäßigen Abständen scannen.
Polling-Intervall (Sekunden) converter_polling_interval number 300 Standard Intervall für automatischen Scan des Converter-Ordners.

Kategorie: Laufwerk

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Laufwerksmodus drive_mode select auto Standard Auto-Discovery oder explizites Device.
Explizite Laufwerke drive_devices path [] Standard Laufwerke für den expliziten Modus als JSON-Array mit Pfad und MakeMKV-Index, z.B. [{"path":"/dev/sr0","makemkvIndex":0},{"path":"/dev/sr1","makemkvIndex":1}]. Nur relevant wenn Modus = Explizites Device.
Device Pfad drive_device path /dev/sr0 Ausgeblendet (nur API/DB) Nur für expliziten Modus, z.B. /dev/sr0.
MakeMKV Source Index makemkv_source_index number 0 Ausgeblendet (nur API/DB) Disc Index im Auto-Modus.
Automatische Disk-Erkennung disc_auto_detection_enabled boolean true Standard Wenn deaktiviert, findet keine automatische Laufwerksprüfung statt. Neue Disks werden nur per "Laufwerk neu lesen" erkannt.
Polling Intervall (ms) disc_poll_interval_ms number 4000 Expertenmodus Intervall für Disk-Erkennung.
Laufwerk nach Rip auswerfen auto_eject_after_rip boolean false Standard Wenn aktiv, wird das Laufwerk nach erfolgreichem Abschluss eines Rip-Vorgangs automatisch ausgeworfen (eject).

Kategorie: Logging

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Terminal-Ausgabe aktiv server_console_log_output_enabled boolean true Expertenmodus Master-Schalter für die Ausgabe der Server-Logs im Terminal (z.B. start.sh). Das Schreiben in Log-Dateien bleibt immer aktiv.
HTTP-Logs im Terminal server_console_log_http_enabled boolean true Expertenmodus Steuert HTTP Request-Logs im Terminal (z.B. request:start). Dateilogs bleiben unverändert.
DEBUG im Terminal server_console_log_debug_enabled boolean true Expertenmodus Steuert DEBUG-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert.
INFO im Terminal server_console_log_info_enabled boolean true Expertenmodus Steuert INFO-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert.
WARN im Terminal server_console_log_warn_enabled boolean true Expertenmodus Steuert WARN-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert.
ERROR im Terminal server_console_log_error_enabled boolean true Expertenmodus Steuert ERROR-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert.

Kategorie: Metadaten

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
TMDb Read Access Token tmdb_api_read_access_token string leer Standard Read Access Token für Serien-Metadaten über TheMovieDB (TMDb).
Film-Sprache dvd_series_language string de-DE Standard Bevorzugte TMDb-Sprache für Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE oder en-US.
Fallback Sprache dvd_series_fallback_languages string de-DE,en-US Standard Kommagetrennte TMDb-Fallback-Sprachen für Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE,en-US,fr-FR.
Coverart-Nachladen aktiv coverart_recovery_enabled boolean true Standard Wenn aktiv, werden fehlende Coverarts automatisch in Intervallen geprüft und nachgeladen.
Coverart-Prüfintervall (Stunden) coverart_recovery_interval_hours number 6 Standard Intervall für automatische Prüfung fehlender Coverarts in Stunden.
NFO nach Encode erzeugen generate_nfo_after_encode boolean false Standard Erstellt nach erfolgreichem Encode automatisch eine .nfo-Datei neben der Ausgabedatei.

Kategorie: Monitoring

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Hardware Monitoring aktiviert hardware_monitoring_enabled boolean true Standard Master-Schalter: aktiviert/deaktiviert das komplette Hardware-Monitoring (Polling + Berechnung + WebSocket-Updates).
Hardware Monitoring Intervall (ms) hardware_monitoring_interval_ms number 5000 Expertenmodus Polling-Intervall für CPU/RAM/GPU/Storage-Metriken.

Kategorie: Pfade

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
Raw Ausgabeordner (Blu-ray) raw_dir_bluray path leer Standard Optionaler RAW-Zielpfad nur für Blu-ray. Leer = Fallback auf "Raw Ausgabeordner".
Raw Ausgabeordner (DVD) raw_dir_dvd path leer Standard Optionaler RAW-Zielpfad nur für DVD. Leer = Fallback auf "Raw Ausgabeordner".
CD RAW-Ordner raw_dir_cd path leer Standard Basisordner für rohe CD-WAV-Dateien (cdparanoia-Output). Leer = Standardpfad (data/output/cd).
Audiobook RAW-Ordner raw_dir_audiobook path leer Standard Basisordner für hochgeladene AAX-Dateien. Leer = Standardpfad (data/output/audiobook-raw).
Serien-Ordner (Blu-ray) series_dir_bluray path leer Standard Zielordner für Blu-ray-Serienfolgen. Leer = Standardpfad (data/output/series).
Film Ausgabeordner (Blu-ray) movie_dir_bluray path leer Standard Optionaler Encode-Zielpfad nur für Blu-ray. Leer = Fallback auf "Film Ausgabeordner".
Film Ausgabeordner (DVD) movie_dir_dvd path leer Standard Optionaler Encode-Zielpfad nur für DVD. Leer = Fallback auf "Film Ausgabeordner".
Serien-Ordner (DVD) series_dir_dvd path leer Standard Zielordner für DVD-Serienfolgen. Leer = Standardpfad (data/output/series).
CD Output-Ordner movie_dir_cd path leer Standard Zielordner für encodierte CD-Ausgaben (FLAC, MP3 usw.). Leer = gleicher Ordner wie CD RAW-Ordner.
Audiobook Output-Ordner movie_dir_audiobook path leer Standard Zielordner für encodierte Audiobook-Dateien. Leer = Standardpfad (data/output/audiobooks).
Download ZIP-Ordner download_dir path leer Standard Zielordner für vorbereitete ZIP-Downloads. Leer = Standardpfad (data/downloads).
Externe Speicher external_storage_paths path [] Standard Wird links unter "Freie Speicher" angezeigt.
Log Ordner log_dir path installationsabhaengig Standard Basisordner für Logs. Job-Logs liegen direkt hier, Backend-Logs in /backend.
CD Output Template cd_output_template string {artist} - {album} ({year})/{trackNr} {artist} - {title} Standard Template für relative CD-Ausgabepfade ohne Dateiendung. Platzhalter: {artist}, {album}, {year}, {title}, {trackNr}, {trackNo}. Unterordner sind über "/" möglich. Die Endung wird über das gewählte Ausgabeformat gesetzt.
Output Template (Blu-ray) output_template_bluray string ${title} (${year})/${title} (${year}) Standard Template für Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner über "/" möglich – alles nach dem letzten "/" ist der Dateiname. Die Endung wird über das gewählte Ausgabeformat gesetzt.
Output Template (Blu-ray Serie, Episode) output_template_bluray_series_episode string {seriesTitle}/Staffel {seasonNr}/S{seasonNr}E{episodeNr} - {episodeTitle} Standard Template für einzelne Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNr}.
Output Template (Blu-ray Serie, Multi-Episode) output_template_bluray_series_multi_episode string {seriesTitle}/Staffel {seasonNr}/S{0:seasonNr}E{episodeRange} - {episodeTitle} (Teil {parts}) Standard Template für zusammengefasste Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}.
Output Template (DVD) output_template_dvd string ${title} (${year})/${title} (${year}) Standard Template für Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner über "/" möglich – alles nach dem letzten "/" ist der Dateiname. Die Endung wird über das gewählte Ausgabeformat gesetzt.
Output Template (DVD Serie, Episode) output_template_dvd_series_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeNo} - {episodeTitle} Standard Template für einzelne DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNr}.
Output Template (DVD Serie, Multi-Episode) output_template_dvd_series_multi_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeRange} Standard Template für zusammengefasste DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}.
Output Template (Audiobook) output_template_audiobook string {author}/{author} - {title} ({year}) Standard Template für relative Audiobook-Ausgabepfade ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}. Unterordner sind über "/" möglich.
Audiobook RAW Template audiobook_raw_template string {author} - {title} ({year}) Standard Template für relative Audiobook-RAW-Ordner. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}.
Converter Raw-Ordner converter_raw_dir path leer Standard Eingangsordner für den Converter (Import-Scan und Datei-Uploads). Jeder Upload erhält einen Unterordner. Leer = Standardpfad (data/output/converter-raw).
Converter Ausgabe (Video) converter_movie_dir path leer Standard Ausgabepfad für konvertierte Video-Dateien. Leer = Standardpfad (data/output/converted-movies).
Converter Ausgabe (Audio) converter_audio_dir path leer Standard Ausgabepfad für konvertierte Audio-Dateien. Leer = Standardpfad (data/output/converted-audio).
Output-Template (Video) converter_output_template_video string {title} Standard Dateiname-Template für konvertierte Video-Dateien (ohne Endung). Platzhalter: {title}, {year}.
Output-Template (Audio) converter_output_template_audio string {artist} - {title} Standard Dateiname-Template für konvertierte Audio-Dateien (ohne Endung). Platzhalter: {artist}, {title}, {album}, {year}, {trackNr}.
RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series path leer Standard RAW-Zielpfad für Blu-ray-Serien. Leer = gleicher Pfad wie RAW-Ordner (Blu-ray).
Eigentümer RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series_owner string leer Standard Eigentümer der Dateien im Format user:gruppe für Blu-ray-Serien-RAW. Leer = Eigentümer Raw-Ordner (Blu-ray).
Eigentümer Raw-Ordner (Blu-ray) raw_dir_bluray_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
RAW-Ordner (DVD Serie) raw_dir_dvd_series path leer Standard RAW-Zielpfad für DVD-Serien. Leer = gleicher Pfad wie RAW-Ordner (DVD).
Eigentümer RAW-Ordner (DVD Serie) raw_dir_dvd_series_owner string leer Standard Eigentümer der Dateien im Format user:gruppe für DVD-Serien-RAW. Leer = Eigentümer Raw-Ordner (DVD).
Eigentümer Raw-Ordner (DVD) raw_dir_dvd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
Eigentümer CD RAW-Ordner raw_dir_cd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
Eigentümer Audiobook RAW-Ordner raw_dir_audiobook_owner string leer Standard Eigentümer der Audiobook-RAW-Dateien im Format user:gruppe. Nur aktiv wenn ein Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
Eigentümer Converter RAW-Ordner converter_raw_dir_owner string leer Standard Eigentümer der Converter-Eingabedateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Serien-Ordner (Blu-ray) series_dir_bluray_owner string leer Standard Eigentümer der Blu-ray-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Film-Ordner (Blu-ray) movie_dir_bluray_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
Eigentümer Film-Ordner (DVD) movie_dir_dvd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes.
Eigentümer Serien-Ordner (DVD) series_dir_dvd_owner string leer Standard Eigentümer der DVD-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer CD Output-Ordner movie_dir_cd_owner string leer Standard Eigentümer der encodierten CD-Ausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Audiobook Output-Ordner movie_dir_audiobook_owner string leer Standard Eigentümer der encodierten Audiobook-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Converter Video Output-Ordner converter_movie_dir_owner string leer Standard Eigentümer der konvertierten Video-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Converter Audio Output-Ordner converter_audio_dir_owner string leer Standard Eigentümer der konvertierten Audio-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Eigentümer Download ZIP-Ordner download_dir_owner string leer Standard Eigentümer der vorbereiteten ZIP-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes.
Kapitel Template (Audiobook) output_chapter_template_audiobook string {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle} Standard Template für kapitelweise Audiobook-Ausgaben (MP3/FLAC) ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}, {chapterNr}, {chapterNo}, {chapterTitle}. Unterordner sind über "/" möglich.

Kategorie: Tools

GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System
MakeMKV Kommando makemkv_command string makemkvcon Expertenmodus Pfad oder Befehl für makemkvcon.
MakeMKV Key makemkv_registration_key string leer Standard Optionaler Registrierungsschlüssel. Wird beim Speichern nach ~/.MakeMKV/settings.conf synchronisiert. Darunter kann der aktuelle Betakey per API übernommen werden.
Mediainfo Kommando mediainfo_command string mediainfo Expertenmodus Pfad oder Befehl für mediainfo.
Minimale Titellänge (Minuten) makemkv_min_length_minutes number 60 Standard Filtert kurze Titel beim Rip.
HandBrake Kommando handbrake_command string HandBrakeCLI Expertenmodus Pfad oder Befehl für HandBrakeCLI.
Encode-Neustart: unvollständige Ausgabe löschen handbrake_restart_delete_incomplete_output boolean true Standard Wenn aktiv, wird bei "Encode neu starten" der bisherige (nicht erfolgreiche) Output vor Start entfernt.
Parallele Jobs pipeline_max_parallel_jobs number 1 Standard Maximale Anzahl parallel laufender Jobs. Weitere Starts landen in der Queue.
Max. parallele Audio CD Jobs pipeline_max_parallel_cd_encodes number 2 Standard Maximale Anzahl parallel laufender Audio CD Jobs (Rip + Encode als Einheit). Gilt zusätzlich zum Gesamtlimit.
Script-Test Timeout (ms) script_test_timeout_ms number 0 Expertenmodus Timeout fuer Script-Tests in den Settings. 0 = kein Timeout.
Max. Encodes gesamt (medienunabhängig) pipeline_max_total_encodes number 3 Standard Gesamtlimit für alle parallel laufenden Encode-Jobs (Film + Audio CD). Dieses Limit hat Vorrang vor den Einzellimits.
Audio CDs: Queue-Reihenfolge überspringen pipeline_cd_bypasses_queue boolean false Standard Wenn aktiv, können Audio CD Jobs unabhängig von Film-Jobs starten (überspringen die Film-Queue-Reihenfolge). Einzellimits und Gesamtlimit gelten weiterhin.
cdparanoia Kommando cdparanoia_command string cdparanoia Expertenmodus Pfad oder Befehl für cdparanoia. Wird als Fallback genutzt wenn kein individuelles Kommando gesetzt ist.
FFmpeg Kommando ffmpeg_command string ffmpeg Standard Pfad oder Befehl für ffmpeg. Wird für Audiobook-Encoding genutzt.
FFprobe Kommando ffprobe_command string ffprobe Standard Pfad oder Befehl für ffprobe. Wird für Audiobook-Metadaten und Kapitel genutzt.
Serie: PlayAll Untergrenze (%) series_playall_tolerance_lower_pct number 10 Standard Untere Toleranz in Prozent für die Plausibilitätsprüfung von PlayAll gegen Episodensumme (DVD/Blu-ray).
Serie: PlayAll Obergrenze (%) series_playall_tolerance_upper_pct number 10 Standard Obere Toleranz in Prozent für die Plausibilitätsprüfung von PlayAll gegen Episodensumme (DVD/Blu-ray).
Mediainfo Extra Args mediainfo_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für mediainfo (Blu-ray).
MakeMKV Rip Modus makemkv_rip_mode_bluray select backup Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollständige Blu-ray Struktur im RAW-Ordner.
MakeMKV Analyze Extra Args makemkv_analyze_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für Analyze (Blu-ray).
MakeMKV Rip Extra Args makemkv_rip_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für Rip (Blu-ray).
HandBrake Preset handbrake_preset_bluray string H.264 MKV 1080p30 Standard Preset Name für -Z (Blu-ray). Leer = kein Preset, nur CLI-Parameter werden verwendet.
HandBrake Extra Args handbrake_extra_args_bluray string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-mask ac3,eac3,dts --au... Standard Zusätzliche CLI-Argumente (Blu-ray).
Ausgabeformat output_extension_bluray select mkv Standard Dateiendung für finale Datei (Blu-ray).
Mediainfo Extra Args mediainfo_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für mediainfo (DVD).
MakeMKV Rip Modus makemkv_rip_mode_dvd select mkv Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollständige Disc-Struktur im RAW-Ordner.
MakeMKV Analyze Extra Args makemkv_analyze_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für Analyze (DVD).
MakeMKV Rip Extra Args makemkv_rip_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für Rip (DVD).
HandBrake Preset handbrake_preset_dvd string H.264 MKV 480p30 Standard Preset Name für -Z (DVD). Leer = kein Preset, nur CLI-Parameter werden verwendet.
HandBrake Extra Args handbrake_extra_args_dvd string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-mask ac3,eac3,dts --au... Standard Zusätzliche CLI-Argumente (DVD).
Ausgabeformat output_extension_dvd select mkv Standard Dateiendung für finale Datei (DVD).
mkvmerge Kommando mkvmerge_command string mkvmerge Standard Pfad oder Befehl für mkvmerge. Wird für Multipart-Movie-Merges genutzt.

Beispiele fuer haeufige Settings

  • drive_devices: [{"path":"/dev/sr0","makemkvIndex":0},{"path":"/dev/sr1","makemkvIndex":1}]
  • external_storage_paths: [{"name":"USB HDD","path":"/mnt/usb-hdd"}]
  • converter_scan_extensions: mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus
  • output_template_bluray: ${title} (${year})/${title} (${year})
  • output_template_audiobook: {author}/{author} - {title} ({year})
  • output_chapter_template_audiobook: {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle}
  • download_dir_owner: ripster:media

Hinweise zu ausgeblendeten Keys

Folgende Keys liegen im Schema, sind aber im normalen Settings-Formular absichtlich ausgeblendet: drive_device, makemkv_source_index, makemkv_rip_mode_bluray, makemkv_rip_mode_dvd. Aenderungen daran erfolgen nur ueber API/DB oder technische Migrationen.

\ No newline at end of file + Alle Einstellungen - Ripster

Einstellungsreferenz

Diese Seite beschreibt jede aktuelle Einstellung aus der Settings-GUI: was technisch passiert und warum man sie setzt.

Lesehilfe

  • Sichtbarkeit: Standard, Expertenmodus oder Ausgeblendet (nur API/DB).
  • Default: UI-/Schema-Default (sensible Werte werden als leer dargestellt).
  • Was passiert technisch?: direkte Wirkung im Backend/Pipeline-Verhalten.
  • Warum/Wann setzen?: Praxisgrund inkl. typischem Einsatzzweck.

Wie diese Seite zu lesen ist

Wenn du nicht von oben bis unten lesen willst, helfen diese typischen Einstiegsfragen:

  • Disc wird nicht sauber erkannt: zuerst Laufwerk
  • falsche Playlist- oder Titelauswahl: zuerst Tools
  • Ausgabe landet im falschen Ordner: zuerst Pfade
  • zu viele oder zu wenige parallele Jobs: zuerst Tools
  • Converter scannt nicht wie erwartet: zuerst Converter
  • Hardware oder Speicher fehlen im Monitoring: zuerst Monitoring und Pfade

Vollständige Feldliste

Kategorie: Benachrichtigungen

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Expertenmodus ui_expert_mode boolean false Standard Schaltet erweiterte Einstellungen in der UI ein. Wird sofort einzeln gespeichert und beeinflusst Sichtbarkeit von Feldern/Kategorien. Wenn du selten benoetigte technische Felder sehen willst (z.B. Logging- oder CLI-Details).
PushOver aktiviert pushover_enabled boolean false Standard Master-Schalter für PushOver Versand. Wenn du aktive Laufzeit-Benachrichtigungen auf Mobilgeraete erhalten willst.
PushOver Token pushover_token string leer Standard Application Token für PushOver. Wenn Ripster in deine PushOver-App senden soll (Token aus PushOver-App-Config).
PushOver User pushover_user string leer Standard User-Key für PushOver. Wenn Benachrichtigungen an einen bestimmten PushOver-Account gehen sollen.
PushOver Device (optional) pushover_device string leer Expertenmodus Optionales Ziel-Device in PushOver. Wenn Nachrichten nur auf ein bestimmtes Endgeraet zugestellt werden sollen.
PushOver Titel-Präfix pushover_title_prefix string Ripster Standard Prefix im PushOver Titel. Wenn du Meldungen mehrerer Instanzen sauber unterscheiden willst (z.B. "Ripper-Wohnzimmer").
PushOver Priority pushover_priority number 0 Expertenmodus Priorität -2 bis 2. Wenn Meldungen bewusst leiser (niedrig) oder dringender (hoch) zugestellt werden sollen.
PushOver Timeout (ms) pushover_timeout_ms number 7000 Expertenmodus HTTP Timeout für PushOver Requests. Wenn PushOver bei schlechter Verbindung mehr oder weniger Zeit fuer den Request bekommen soll.
Bei manueller Auswahl senden pushover_notify_metadata_ready boolean true Standard Sendet, wenn ein Job eine manuelle Auswahl/Entscheidung benötigt (z.B. Metadaten, Titel oder Playlist). Wenn 'Bei manueller Auswahl senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Rip-Start senden pushover_notify_rip_started boolean true Standard Sendet beim Start des MakeMKV-Rips. Wenn 'Bei Rip-Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Encode-Start senden pushover_notify_encoding_started boolean true Standard Sendet beim Start von HandBrake. Wenn 'Bei Encode-Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Erfolg senden pushover_notify_job_finished boolean true Standard Sendet bei erfolgreich abgeschlossenem Job. Wenn 'Bei Erfolg senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Fehler senden pushover_notify_job_error boolean true Standard Sendet bei Fehlern in der Pipeline. Wenn 'Bei Fehler senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Abbruch senden pushover_notify_job_cancelled boolean true Standard Sendet wenn Job manuell abgebrochen wurde. Wenn 'Bei Abbruch senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Re-Encode Start senden pushover_notify_reencode_started boolean true Standard Sendet beim Start von RAW Re-Encode. Wenn 'Bei Re-Encode Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.
Bei Re-Encode Erfolg senden pushover_notify_reencode_finished boolean true Standard Sendet bei erfolgreichem RAW Re-Encode. Wenn 'Bei Re-Encode Erfolg senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen.

Kategorie: Converter

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Erlaubte Datei-Endungen converter_scan_extensions string mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus Standard Komma-getrennte Liste erlaubter Dateiendungen für den Scan (ohne Punkt). Steuert sowohl Upload-Validierung als auch Converter-Scan-Filter. Wenn 'Erlaubte Datei-Endungen' vom Default abweichen soll.
Auto-Scan (Polling) converter_polling_enabled boolean false Standard Converter Raw-Ordner automatisch in regelmäßigen Abständen scannen. Wenn neue Dateien im Converter-Ordner automatisch erscheinen sollen, ohne manuellen Scan.
Polling-Intervall (Sekunden) converter_polling_interval number 300 Standard Intervall für automatischen Scan des Converter-Ordners. Wenn der Auto-Scan schneller (kleiner Wert) oder ressourcenschonender (groesserer Wert) laufen soll.

Kategorie: Laufwerk

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Laufwerksmodus drive_mode select auto Standard Auto-Discovery oder explizites Device. Wenn du zwischen automatischer Laufwerkserkennung und fixer Device-Liste umschalten willst.
Explizite Laufwerke drive_devices path [] Standard Laufwerke für den expliziten Modus als JSON-Array mit Pfad und MakeMKV-Index, z.B. [{"path":"/dev/sr0","makemkvIndex":0},{"path":"/dev/sr1","makemkvIndex":1}]. Nur relevant wenn Modus = Explizites Device. Wird als JSON gespeichert und vom Laufwerksdienst fuer explizite Zuordnung genutzt. Wenn auf dem Host mehrere Laufwerke stabil gemappt werden muessen (z.B. /dev/sr0=disc:0, /dev/sr1=disc:1).
Device Pfad drive_device path /dev/sr0 Ausgeblendet (nur API/DB) Nur für expliziten Modus, z.B. /dev/sr0. Wenn 'Device Pfad' vom Default abweichen soll.
MakeMKV Source Index makemkv_source_index number 0 Ausgeblendet (nur API/DB) Disc Index im Auto-Modus. Wenn 'MakeMKV Source Index' fuer Performance, Last oder Genauigkeit feinjustiert werden soll.
Automatische Disk-Erkennung disc_auto_detection_enabled boolean true Standard Wenn deaktiviert, findet keine automatische Laufwerksprüfung statt. Neue Disks werden nur per "Laufwerk neu lesen" erkannt. Wenn Discs nur manuell statt automatisch erkannt werden sollen.
Polling Intervall (ms) disc_poll_interval_ms number 4000 Expertenmodus Intervall für Disk-Erkennung. Wenn die Erkennung schneller reagieren oder weniger oft pollen soll.
Laufwerk nach Rip auswerfen auto_eject_after_rip boolean false Standard Wenn aktiv, wird das Laufwerk nach erfolgreichem Abschluss eines Rip-Vorgangs automatisch ausgeworfen (eject). Wenn ein Laufwerk nach erfolgreichem Rip direkt freigegeben/ausgeworfen werden soll.

Kategorie: Logging

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Terminal-Ausgabe aktiv server_console_log_output_enabled boolean true Expertenmodus Master-Schalter für die Ausgabe der Server-Logs im Terminal (z.B. start.sh). Das Schreiben in Log-Dateien bleibt immer aktiv. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Terminal-Logs bei Betrieb unter Service/SSH ein- oder ausgeschaltet werden sollen.
HTTP-Logs im Terminal server_console_log_http_enabled boolean true Expertenmodus Steuert HTTP Request-Logs im Terminal (z.B. request:start). Dateilogs bleiben unverändert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn HTTP-Request-Logs im Terminal fuer API-Debugging gebraucht werden.
DEBUG im Terminal server_console_log_debug_enabled boolean true Expertenmodus Steuert DEBUG-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn detailreiche DEBUG-Logs im Terminal benoetigt werden (Fehlersuche).
INFO im Terminal server_console_log_info_enabled boolean true Expertenmodus Steuert INFO-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn normale INFO-Laufzeitmeldungen im Terminal sichtbar sein sollen.
WARN im Terminal server_console_log_warn_enabled boolean true Expertenmodus Steuert WARN-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Warnungen im Terminal hervorgehoben bleiben sollen.
ERROR im Terminal server_console_log_error_enabled boolean true Expertenmodus Steuert ERROR-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unverändert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Fehler zwingend im Terminal sichtbar sein sollen.

Kategorie: Metadaten

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
TMDb Read Access Token tmdb_api_read_access_token string leer Standard Read Access Token für Serien-Metadaten über TheMovieDB (TMDb). Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn TMDb-Metadaten (Suche/Zuordnung/Serienepisoden) verlässlich funktionieren sollen.
Film-Sprache dvd_series_language string de-DE Standard Bevorzugte TMDb-Sprache für Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE oder en-US. Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn bevorzugt deutsche, englische oder andere lokalisierte Metadaten genutzt werden sollen.
Fallback Sprache dvd_series_fallback_languages string de-DE,en-US Standard Kommagetrennte TMDb-Fallback-Sprachen für Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE,en-US,fr-FR. Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn bei fehlender Primärsprache automatisch andere Sprachversionen ausprobiert werden sollen.
Coverart-Nachladen aktiv coverart_recovery_enabled boolean true Standard Wenn aktiv, werden fehlende Coverarts automatisch in Intervallen geprüft und nachgeladen. Aenderung aktualisiert den Coverart-Recovery-Scheduler. Wenn fehlende Cover später automatisch nachgezogen werden sollen.
Coverart-Prüfintervall (Stunden) coverart_recovery_interval_hours number 6 Standard Intervall für automatische Prüfung fehlender Coverarts in Stunden. Aenderung aktualisiert den Coverart-Recovery-Scheduler. Wenn der Nachlade-Job haeufiger oder seltener laufen soll.
NFO nach Encode erzeugen generate_nfo_after_encode boolean false Standard Erstellt nach erfolgreichem Encode automatisch eine .nfo-Datei neben der Ausgabedatei. Wird nach erfolgreichem Encode in der Historie/Pipeline ausgewertet. Wenn neben der Ausgabedatei automatisch eine .nfo fuer Media-Center erzeugt werden soll.

Kategorie: Monitoring

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Hardware Monitoring aktiviert hardware_monitoring_enabled boolean true Standard Master-Schalter: aktiviert/deaktiviert das komplette Hardware-Monitoring (Polling + Berechnung + WebSocket-Updates). Aenderung triggert Re-Konfiguration des Hardware-Monitoring-Dienstes. Wenn CPU/RAM/GPU/Speicher live sichtbar sein sollen.
Hardware Monitoring Intervall (ms) hardware_monitoring_interval_ms number 5000 Expertenmodus Polling-Intervall für CPU/RAM/GPU/Storage-Metriken. Aenderung triggert Re-Konfiguration des Hardware-Monitoring-Dienstes. Wenn Monitoring häufiger aktualisiert oder Last reduziert werden soll.

Kategorie: Pfade

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
Raw Ausgabeordner (Blu-ray) raw_dir_bluray path leer Standard Optionaler RAW-Zielpfad nur für Blu-ray. Leer = Fallback auf "Raw Ausgabeordner". Wenn 'Raw Ausgabeordner (Blu-ray)' vom Default abweichen soll.
Raw Ausgabeordner (DVD) raw_dir_dvd path leer Standard Optionaler RAW-Zielpfad nur für DVD. Leer = Fallback auf "Raw Ausgabeordner". Wenn 'Raw Ausgabeordner (DVD)' vom Default abweichen soll.
CD RAW-Ordner raw_dir_cd path leer Standard Basisordner für rohe CD-WAV-Dateien (cdparanoia-Output). Leer = Standardpfad (data/output/cd). Wenn 'CD RAW-Ordner' vom Default abweichen soll.
Audiobook RAW-Ordner raw_dir_audiobook path leer Standard Basisordner für hochgeladene AAX-Dateien. Leer = Standardpfad (data/output/audiobook-raw). Wenn 'Audiobook RAW-Ordner' vom Default abweichen soll.
Serien-Ordner (Blu-ray) series_dir_bluray path leer Standard Zielordner für Blu-ray-Serienfolgen. Leer = Standardpfad (data/output/series). Wenn 'Serien-Ordner (Blu-ray)' vom Default abweichen soll.
Film Ausgabeordner (Blu-ray) movie_dir_bluray path leer Standard Optionaler Encode-Zielpfad nur für Blu-ray. Leer = Fallback auf "Film Ausgabeordner". Wenn 'Film Ausgabeordner (Blu-ray)' vom Default abweichen soll.
Film Ausgabeordner (DVD) movie_dir_dvd path leer Standard Optionaler Encode-Zielpfad nur für DVD. Leer = Fallback auf "Film Ausgabeordner". Wenn 'Film Ausgabeordner (DVD)' vom Default abweichen soll.
Serien-Ordner (DVD) series_dir_dvd path leer Standard Zielordner für DVD-Serienfolgen. Leer = Standardpfad (data/output/series). Wenn 'Serien-Ordner (DVD)' vom Default abweichen soll.
CD Output-Ordner movie_dir_cd path leer Standard Zielordner für encodierte CD-Ausgaben (FLAC, MP3 usw.). Leer = gleicher Ordner wie CD RAW-Ordner. Wenn 'CD Output-Ordner' vom Default abweichen soll.
Audiobook Output-Ordner movie_dir_audiobook path leer Standard Zielordner für encodierte Audiobook-Dateien. Leer = Standardpfad (data/output/audiobooks). Wenn 'Audiobook Output-Ordner' vom Default abweichen soll.
Download ZIP-Ordner download_dir path leer Standard Zielordner für vorbereitete ZIP-Downloads. Leer = Standardpfad (data/downloads). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS).
Externe Speicher external_storage_paths path [] Standard Wird links unter "Freie Speicher" angezeigt. Wenn 'Externe Speicher' vom Default abweichen soll.
Log Ordner log_dir path installationsabhaengig Standard Basisordner für Logs. Job-Logs liegen direkt hier, Backend-Logs in /backend. Wird zur Laufzeit angewendet; bei ungueltigem Pfad faellt Ripster auf Fallback-Logpfad zurueck. Wenn Logs auf ein anderes Medium sollen (z.B. persistentes NAS/SSD statt Standardpfad).
CD Output Template cd_output_template string {artist} - {album} ({year})/{trackNr} {artist} - {title} Standard Template für relative CD-Ausgabepfade ohne Dateiendung. Platzhalter: {artist}, {album}, {year}, {title}, {trackNr}, {trackNo}. Unterordner sind über "/" möglich. Die Endung wird über das gewählte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (Blu-ray) output_template_bluray string ${title} (${year})/${title} (${year}) Standard Template für Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner über "/" möglich – alles nach dem letzten "/" ist der Dateiname. Die Endung wird über das gewählte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (Blu-ray Serie, Episode) output_template_bluray_series_episode string {seriesTitle}/Staffel {seasonNr}/S{seasonNr}E{episodeNr} - {episodeTitle} Standard Template für einzelne Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (Blu-ray Serie, Multi-Episode) output_template_bluray_series_multi_episode string {seriesTitle}/Staffel {seasonNr}/S{0:seasonNr}E{episodeRange} - {episodeTitle} (Teil {parts}) Standard Template für zusammengefasste Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (DVD) output_template_dvd string ${title} (${year})/${title} (${year}) Standard Template für Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner über "/" möglich – alles nach dem letzten "/" ist der Dateiname. Die Endung wird über das gewählte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (DVD Serie, Episode) output_template_dvd_series_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeNo} - {episodeTitle} Standard Template für einzelne DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (DVD Serie, Multi-Episode) output_template_dvd_series_multi_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeRange} Standard Template für zusammengefasste DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit führender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output Template (Audiobook) output_template_audiobook string {author}/{author} - {title} ({year}) Standard Template für relative Audiobook-Ausgabepfade ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}. Unterordner sind über "/" möglich. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Audiobook RAW Template audiobook_raw_template string {author} - {title} ({year}) Standard Template für relative Audiobook-RAW-Ordner. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Converter Raw-Ordner converter_raw_dir path leer Standard Eingangsordner für den Converter (Import-Scan und Datei-Uploads). Jeder Upload erhält einen Unterordner. Leer = Standardpfad (data/output/converter-raw). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS).
Converter Ausgabe (Video) converter_movie_dir path leer Standard Ausgabepfad für konvertierte Video-Dateien. Leer = Standardpfad (data/output/converted-movies). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS).
Converter Ausgabe (Audio) converter_audio_dir path leer Standard Ausgabepfad für konvertierte Audio-Dateien. Leer = Standardpfad (data/output/converted-audio). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS).
Output-Template (Video) converter_output_template_video string {title} Standard Dateiname-Template für konvertierte Video-Dateien (ohne Endung). Platzhalter: {title}, {year}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
Output-Template (Audio) converter_output_template_audio string {artist} - {title} Standard Dateiname-Template für konvertierte Audio-Dateien (ohne Endung). Platzhalter: {artist}, {title}, {album}, {year}, {trackNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.
RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series path leer Standard RAW-Zielpfad für Blu-ray-Serien. Leer = gleicher Pfad wie RAW-Ordner (Blu-ray). Wenn 'RAW-Ordner (Blu-ray Serie)' vom Default abweichen soll.
Eigentümer RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series_owner string leer Standard Eigentümer der Dateien im Format user:gruppe für Blu-ray-Serien-RAW. Leer = Eigentümer Raw-Ordner (Blu-ray). Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Raw-Ordner (Blu-ray) raw_dir_bluray_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
RAW-Ordner (DVD Serie) raw_dir_dvd_series path leer Standard RAW-Zielpfad für DVD-Serien. Leer = gleicher Pfad wie RAW-Ordner (DVD). Wenn 'RAW-Ordner (DVD Serie)' vom Default abweichen soll.
Eigentümer RAW-Ordner (DVD Serie) raw_dir_dvd_series_owner string leer Standard Eigentümer der Dateien im Format user:gruppe für DVD-Serien-RAW. Leer = Eigentümer Raw-Ordner (DVD). Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Raw-Ordner (DVD) raw_dir_dvd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer CD RAW-Ordner raw_dir_cd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Audiobook RAW-Ordner raw_dir_audiobook_owner string leer Standard Eigentümer der Audiobook-RAW-Dateien im Format user:gruppe. Nur aktiv wenn ein Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Converter RAW-Ordner converter_raw_dir_owner string leer Standard Eigentümer der Converter-Eingabedateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Serien-Ordner (Blu-ray) series_dir_bluray_owner string leer Standard Eigentümer der Blu-ray-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Film-Ordner (Blu-ray) movie_dir_bluray_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Film-Ordner (DVD) movie_dir_dvd_owner string leer Standard Eigentümer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Serien-Ordner (DVD) series_dir_dvd_owner string leer Standard Eigentümer der DVD-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer CD Output-Ordner movie_dir_cd_owner string leer Standard Eigentümer der encodierten CD-Ausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Audiobook Output-Ordner movie_dir_audiobook_owner string leer Standard Eigentümer der encodierten Audiobook-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Converter Video Output-Ordner converter_movie_dir_owner string leer Standard Eigentümer der konvertierten Video-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Converter Audio Output-Ordner converter_audio_dir_owner string leer Standard Eigentümer der konvertierten Audio-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Eigentümer Download ZIP-Ordner download_dir_owner string leer Standard Eigentümer der vorbereiteten ZIP-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Greift bei ZIP-Ordner, Archivdatei und Metadatei. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media.
Kapitel Template (Audiobook) output_chapter_template_audiobook string {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle} Standard Template für kapitelweise Audiobook-Ausgaben (MP3/FLAC) ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}, {chapterNr}, {chapterNo}, {chapterTitle}. Unterordner sind über "/" möglich. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren.

Kategorie: Tools

GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen?
MakeMKV Kommando makemkv_command string makemkvcon Expertenmodus Pfad oder Befehl für makemkvcon. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
MakeMKV Key makemkv_registration_key string leer Standard Optionaler Registrierungsschlüssel. Wird beim Speichern nach ~/.MakeMKV/settings.conf synchronisiert. Darunter kann der aktuelle Betakey per API übernommen werden. Wenn MakeMKV-Features ohne Trial-Limit genutzt werden sollen (inkl. Betakey-Usecase).
Mediainfo Kommando mediainfo_command string mediainfo Expertenmodus Pfad oder Befehl für mediainfo. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
Minimale Titellänge (Minuten) makemkv_min_length_minutes number 60 Standard Filtert kurze Titel beim Rip. Wenn kurze Bonus-/Trailer-Titel automatisch ausgefiltert werden sollen.
TMDb Runtime-Abzug für Playlistfilter (%) playlist_tmdb_runtime_subtract_percent number 0 Standard Zieht optional einen Prozentsatz von der TMDb-Laufzeit ab, damit Ripster bei problematischen Blu-rays leicht kürzere Hauptfassungen trotzdem als Playlist-Kandidaten zulässt. Eine Mindesttoleranz von 2 Minuten nach unten bleibt erhalten. Wenn die Playlist-Analyse bei einzelnen Discs zu streng ist und der Hauptfilm knapp unter der TMDb-Laufzeit liegt. Beispiel: TMDb sagt 120 Minuten, die Disc liefert 116 bis 118 Minuten, aber die Fassung ist trotzdem korrekt.
HandBrake Kommando handbrake_command string HandBrakeCLI Expertenmodus Pfad oder Befehl für HandBrakeCLI. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
Encode-Neustart: unvollständige Ausgabe löschen handbrake_restart_delete_incomplete_output boolean true Standard Wenn aktiv, wird bei "Encode neu starten" der bisherige (nicht erfolgreiche) Output vor Start entfernt. Wenn bei Encode-Neustart alte, unvollstaendige Dateien sicher entfernt werden sollen.
Parallele Jobs pipeline_max_parallel_jobs number 1 Standard Maximale Anzahl parallel laufender Jobs. Weitere Starts landen in der Queue. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn Durchsatz und CPU-Last fuer Videojobs ausbalanciert werden sollen.
Max. parallele Audio CD Jobs pipeline_max_parallel_cd_encodes number 2 Standard Maximale Anzahl parallel laufender Audio CD Jobs (Rip + Encode als Einheit). Gilt zusätzlich zum Gesamtlimit. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn mehrere Audio-CD-Jobs parallel erlaubt/begrenzt werden sollen.
Script-Test Timeout (ms) script_test_timeout_ms number 0 Expertenmodus Timeout fuer Script-Tests in den Settings. 0 = kein Timeout. Wird beim Testlauf von Scripts in Settings angewendet. Wenn Script-Tests bei Haengern automatisch abgebrochen werden sollen.
Max. Encodes gesamt (medienunabhängig) pipeline_max_total_encodes number 3 Standard Gesamtlimit für alle parallel laufenden Encode-Jobs (Film + Audio CD). Dieses Limit hat Vorrang vor den Einzellimits. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn ein harter Deckel fuer alle Encodes zusammen gelten soll.
Audio CDs: Queue-Reihenfolge überspringen pipeline_cd_bypasses_queue boolean false Standard Wenn aktiv, können Audio CD Jobs unabhängig von Film-Jobs starten (überspringen die Film-Queue-Reihenfolge). Einzellimits und Gesamtlimit gelten weiterhin. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn Audio-CD-Jobs nicht hinter langen Video-Warteschlangen blockieren sollen.
cdparanoia Kommando cdparanoia_command string cdparanoia Expertenmodus Pfad oder Befehl für cdparanoia. Wird als Fallback genutzt wenn kein individuelles Kommando gesetzt ist. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
FFmpeg Kommando ffmpeg_command string ffmpeg Standard Pfad oder Befehl für ffmpeg. Wird für Audiobook-Encoding genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
FFprobe Kommando ffprobe_command string ffprobe Standard Pfad oder Befehl für ffprobe. Wird für Audiobook-Metadaten und Kapitel genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).
Mediainfo Extra Args mediainfo_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für mediainfo (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
MakeMKV Rip Modus makemkv_rip_mode_bluray select backup Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollständige Blu-ray Struktur im RAW-Ordner. Wenn fuer 'MakeMKV Rip Modus' ein anderes Standardverhalten benoetigt wird.
MakeMKV Analyze Extra Args makemkv_analyze_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für Analyze (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
MakeMKV Rip Extra Args makemkv_rip_extra_args_bluray string leer Expertenmodus Zusätzliche CLI-Parameter für Rip (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
HandBrake Preset handbrake_preset_bluray string H.264 MKV 1080p30 Standard Preset Name für -Z (Blu-ray). Leer = kein Preset, nur CLI-Parameter werden verwendet. Wenn ein bevorzugtes Standard-Preset fuer Blu-ray nicht jedes Mal manuell gewaehlt werden soll.
HandBrake Extra Args handbrake_extra_args_bluray string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-ma... Standard Zusätzliche CLI-Argumente (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
Review Audio-Sprachen (Blu-ray Film) handbrake_review_audio_languages_bluray_movie string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Audio-Spuren bei Blu-ray-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei Blu-ray-Filmen im Review nicht mehr alle Audio-Spuren vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review UT-Sprachen (Blu-ray Film) handbrake_review_subtitle_languages_bluray_movie string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Untertiteln bei Blu-ray-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei Blu-ray-Filmen im Review nicht mehr alle Untertitel vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review Audio-Sprachen (Blu-ray Serie) handbrake_review_audio_languages_bluray_series string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Audio-Spuren bei Blu-ray-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei Blu-ray-Serien im Review nicht mehr alle Audio-Spuren vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review UT-Sprachen (Blu-ray Serie) handbrake_review_subtitle_languages_bluray_series string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Untertiteln bei Blu-ray-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei Blu-ray-Serien im Review nicht mehr alle Untertitel vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Ausgabeformat output_extension_bluray select mkv Standard Dateiendung für finale Datei (Blu-ray). Wenn finale Blu-ray-Dateien standardmaessig als MKV oder MP4 ausgegeben werden sollen.
Mediainfo Extra Args mediainfo_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für mediainfo (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
MakeMKV Rip Modus makemkv_rip_mode_dvd select mkv Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollständige Disc-Struktur im RAW-Ordner. Wenn fuer 'MakeMKV Rip Modus' ein anderes Standardverhalten benoetigt wird.
MakeMKV Analyze Extra Args makemkv_analyze_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für Analyze (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
MakeMKV Rip Extra Args makemkv_rip_extra_args_dvd string leer Expertenmodus Zusätzliche CLI-Parameter für Rip (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
HandBrake Preset handbrake_preset_dvd string H.264 MKV 480p30 Standard Preset Name für -Z (DVD). Leer = kein Preset, nur CLI-Parameter werden verwendet. Wenn ein bevorzugtes Standard-Preset fuer DVD nicht jedes Mal manuell gewaehlt werden soll.
HandBrake Extra Args handbrake_extra_args_dvd string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-ma... Standard Zusätzliche CLI-Argumente (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen).
Review Audio-Sprachen (DVD Film) handbrake_review_audio_languages_dvd_movie string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Audio-Spuren bei DVD-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei DVD-Filmen im Review nicht mehr alle Audio-Spuren vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review UT-Sprachen (DVD Film) handbrake_review_subtitle_languages_dvd_movie string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Untertiteln bei DVD-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei DVD-Filmen im Review nicht mehr alle Untertitel vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review Audio-Sprachen (DVD Serie) handbrake_review_audio_languages_dvd_series string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Audio-Spuren bei DVD-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei DVD-Serien im Review nicht mehr alle Audio-Spuren vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Review UT-Sprachen (DVD Serie) handbrake_review_subtitle_languages_dvd_series string leer Standard Kommagetrennte Sprachliste für die Review-Vorauswahl von Untertiteln bei DVD-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei DVD-Serien im Review nicht mehr alle Untertitel vorausgewählt werden sollen, sondern nur bestimmte Sprachen.
Ausgabeformat output_extension_dvd select mkv Standard Dateiendung für finale Datei (DVD). Wenn finale DVD-Dateien standardmaessig als MKV oder MP4 ausgegeben werden sollen.
mkvmerge Kommando mkvmerge_command string mkvmerge Standard Pfad oder Befehl für mkvmerge. Wird für Multipart-Movie-Merges genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad).

Spezielle Werteformate

  • Eigentümer (user:gruppe): z.B. media:media oder 1000:1000.
  • drive_devices (JSON): [{"path":"/dev/sr0","makemkvIndex":0},{"path":"/dev/sr1","makemkvIndex":1}]
  • external_storage_paths (JSON): [{"name":"USB HDD","path":"/mnt/usb-hdd"}]
  • converter_scan_extensions: kommagetrennt, ohne Punkt, z.B. mkv,mp4,flac,mp3.
  • Template-Felder: erlauben Platzhalter ({...} / ${...}) und / fuer Unterordner.

Hinweis zu ausgeblendeten Feldern

Die Keys drive_device, makemkv_source_index, makemkv_rip_mode_bluray, makemkv_rip_mode_dvd liegen im Schema, werden aber bewusst nicht im normalen Formular angezeigt.

\ No newline at end of file diff --git a/site/deployment/development/index.html b/site/deployment/development/index.html index 2f3f3c2..1e72b60 100644 --- a/site/deployment/development/index.html +++ b/site/deployment/development/index.html @@ -1,4 +1,4 @@ - Entwicklungsumgebung - Ripster

Entwicklungsumgebung


Voraussetzungen

  • Node.js >= 20.19.0
  • externe Tools installiert (makemkvcon, HandBrakeCLI, mediainfo)

Schnellstart

./start.sh
+ Entwicklungsumgebung - Ripster      

Entwicklungsumgebung


Voraussetzungen

  • Node.js >= 20.19.0
  • externe Tools installiert (makemkvcon, HandBrakeCLI, mediainfo)

Schnellstart

./start.sh
 

Startet:

  • Backend (http://localhost:3001, mit nodemon)
  • Frontend (http://localhost:5173, mit Vite HMR)

Stoppen: Ctrl+C.


Manuell

Backend

cd backend
 npm install
 npm run dev
diff --git a/site/deployment/index.html b/site/deployment/index.html
index 03051e5..937c6b8 100644
--- a/site/deployment/index.html
+++ b/site/deployment/index.html
@@ -1 +1 @@
- Anhang: Deployment - Ripster      

Anhang: Deployment

Technische Betriebsdokumentation für Entwicklung und Produktion.

  • Entwicklungsumgebung


    Lokale Entwicklung mit Hot-Reload.

    Entwicklung

  • Produktion


    Installation und Betrieb auf Servern.

    Produktion

\ No newline at end of file + Anhang: Deployment - Ripster

Anhang: Deployment

Technische Betriebsdokumentation für Entwicklung und Produktion.

  • Entwicklungsumgebung


    Lokale Entwicklung mit Hot-Reload.

    Entwicklung

  • Produktion


    Installation und Betrieb auf Servern.

    Produktion

\ No newline at end of file diff --git a/site/deployment/production/index.html b/site/deployment/production/index.html index 1eb8db2..9d57311 100644 --- a/site/deployment/production/index.html +++ b/site/deployment/production/index.html @@ -1,4 +1,4 @@ - Produktion - Ripster

Produktions-Deployment


Automatische Installation (empfohlen)

Das mitgelieferte install.sh richtet Ripster vollautomatisch ein – inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.

Unterstützte Systeme laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS Voraussetzung: root-Rechte, Internetzugang

Schnellstart via curl

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash
+ Produktion - Ripster      

Produktions-Deployment


Automatische Installation (empfohlen)

Das mitgelieferte install.sh richtet Ripster vollautomatisch ein – inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.

Unterstützte Systeme laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS Voraussetzung: root-Rechte, Internetzugang

Schnellstart via curl

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash
 

Oder mit wget:

wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash
 

Optionen nur via Datei

Beim Pipen von curl/wget können keine Argumente übergeben werden. Für benutzerdefinierte Optionen zuerst herunterladen und dann mit sudo bash install.sh [Optionen] ausführen.

Optionen

Option Standard Beschreibung
--branch <branch> dev Git-Branch für die Installation
--dir <pfad> /opt/ripster Installationsverzeichnis
--user <benutzer> ripster Systembenutzer für den Dienst
--port <port> 3001 Backend-Port
--host <hostname> Auto (Maschinen-IP) Hostname/IP für die Weboberfläche
--no-makemkv MakeMKV-Installation überspringen
--no-handbrake HandBrake-Installation überspringen
--no-nginx nginx-Einrichtung überspringen
--reinstall Bestehende Installation aktualisieren (Daten bleiben erhalten)
-h, --help Hilfe anzeigen

Beispiele

# Standard-Installation
 sudo bash install.sh
diff --git a/site/getting-started/configuration/index.html b/site/getting-started/configuration/index.html
index 9001a9b..5e2720a 100644
--- a/site/getting-started/configuration/index.html
+++ b/site/getting-started/configuration/index.html
@@ -1 +1 @@
- Ersteinrichtung - Ripster      

Ersteinrichtung

Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf.

Ziel der Ersteinrichtung

Vor dem ersten Job müssen drei Dinge stabil sein:

  1. Pfade stimmen (RAW, Output, Logs)
  2. Tools sind aufrufbar (MakeMKV, HandBrake, MediaInfo)
  3. Metadatenzugänge funktionieren (OMDb, optional TMDb/MusicBrainz)

Empfohlene Reihenfolge

1) Basis in Settings -> Konfiguration

Setze zuerst:

  • Raw-Ordner und Film-/Serien-Ordner
  • Log Ordner
  • MakeMKV Kommando, HandBrake Kommando, Mediainfo Kommando
  • OMDb API Key

Dann speichern.

2) Profile pro Medium festziehen

Ripster löst viele Werte profilspezifisch auf (bluray, dvd, cd, audiobook).

Pflichtprüfung:

  • RAW-Pfade je Profil
  • Output-Pfade je Profil
  • HandBrake-Preset je Profil
  • Output-Templates je Profil

Für Serien zusätzlich:

  • RAW-Ordner (Blu-ray/DVD Serie)
  • Serien-Ordner (Blu-ray/DVD)
  • Serien-Templates (Episode/Multi-Episode)

3) Queue-Verhalten definieren

Stelle ein:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • optional Audio CDs: Queue-Reihenfolge überspringen

Damit steuerst du Durchsatz, Priorität und Lastverteilung.

4) Metadatenquellen absichern

Film:

  • OMDb-Key prüfen

Serien:

  • TMDb Read Access Token setzen
  • Sprache/Fallback-Sprachen festlegen

CD/Audiodaten:

  • MusicBrainz aktiviert nach Bedarf

5) Optional: Benachrichtigungen

  • PushOver-Zugangsdaten setzen
  • PushOver Test ausführen
  • Event-Toggles pro Phase prüfen

6) Optional: Automatisierung

  1. Skripte testen
  2. Skriptketten bauen/testen
  3. Cronjobs erst danach aktivieren

Funktionsprüfung (Kurztest)

  1. Disc in Ripper erkennen lassen.
  2. Analyse starten.
  3. Metadaten übernehmen.
  4. Bis Bereit zum Encodieren laufen.
  5. Encode starten und Abschluss in Historie prüfen.

Typische Konfigurationsfehler

Symptom Häufige Ursache
Job bleibt früh auf Fehler Toolkommando falsch oder nicht im PATH
RAW/Output landet am falschen Ort Profilpfade nicht gesetzt, Fallback greift
Serienausgabe landet bei Filmen Serienpfade/Serientemplates fehlen
Queue verhält sich unerwartet Gesamtlimit und Lane-Limits widersprechen sich

Weiter

\ No newline at end of file + Ersteinrichtung - Ripster

Ersteinrichtung

Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf.

Ziel der Ersteinrichtung

Vor dem ersten Job sollten fünf Bereiche sauber gesetzt sein:

  1. Pfade und Templates
  2. Laufwerk und Disc-Erkennung
  3. Metadatenzugang über TMDb
  4. Encode-Standards und Queue-Regeln
  5. optionale Automatisierung und Benachrichtigungen

Empfohlene Reihenfolge

1. Basis in Settings -> Konfiguration

Prüfe zuerst diese Kernfelder:

  • RAW- und Zielordner für Blu-ray, DVD, CD, Audiobooks und Converter
  • Log Ordner
  • TMDb Read Access Token
  • MakeMKV Kommando, HandBrake Kommando, Mediainfo Kommando
  • FFmpeg Kommando, FFprobe Kommando, cdparanoia Kommando, mkvmerge Kommando, falls du die jeweiligen Workflows nutzt

Danach speichern.

2. Pfade und Templates bewusst festlegen

Wichtig für den Alltag:

  • Film-Workflows nutzen raw_dir_*, movie_dir_* und output_template_*
  • Serien-Workflows nutzen zusätzlich raw_dir_*_series, series_dir_* und die Episode-/Multi-Episode-Templates
  • Audiobooks nutzen raw_dir_audiobook, movie_dir_audiobook, audiobook_raw_template, output_template_audiobook, output_chapter_template_audiobook
  • Converter nutzt converter_raw_dir, converter_movie_dir, converter_audio_dir und die beiden Converter-Templates
  • Downloads nutzen download_dir

Wenn du auf NAS, USB oder andere Benutzer/Gruppen schreiben willst, prüfe auch die jeweiligen *_owner-Felder.

3. Laufwerk und automatische Erkennung prüfen

Relevant:

  • Laufwerksmodus
  • Explizite Laufwerke, falls du nicht mit Auto-Discovery arbeiten willst
  • Automatische Disk-Erkennung
  • Polling Intervall (ms) im Expertenmodus
  • Laufwerk nach Rip auswerfen

Empfehlung:

  • Einzelnes Standardlaufwerk: auto
  • mehrere stabile Laufwerke oder ungewöhnliche Device-Mappings: Explizite Laufwerke

4. TMDb und Metadatenverhalten festlegen

Relevant:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache
  • Coverart-Nachladen aktiv
  • Coverart-Prüfintervall (Stunden)
  • NFO nach Encode erzeugen

Diese Einstellungen wirken direkt in Metadatensuche, Serienzuordnung, Nachpflege von Covern und im finalen Output.

5. Encode- und Review-Standards festlegen

Für Video-Workflows besonders wichtig:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)
  • HandBrake Preset und HandBrake Extra Args je Medium
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat

Praxis:

  • Minimale Titellänge filtert Bonusmaterial früh weg
  • TMDb Runtime-Abzug ... lockert bei problematischen Blu-rays die Laufzeitprüfung der Playlist-Kandidaten
  • Review-Sprachen bestimmen, welche Audio-/Untertitelspuren in der Review schon vorausgewählt sind

6. Queue-Verhalten definieren

Stelle diese vier Felder bewusst ein:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabhängig)
  • Audio CDs: Queue-Reihenfolge überspringen

Damit steuerst du, wie aggressiv Ripster mehrere Jobs gleichzeitig startet.

7. Optional: User-Presets und Standard-Zuordnungen

Unter Settings -> Encode-Presets kannst du:

  • eigene HandBrake-User-Presets anlegen
  • Standard-Zuordnungen für Blu-ray Film, Blu-ray Serie, DVD Film, DVD Serie setzen

Diese Defaults wirken später in der Review automatisch vorbefüllend.

8. Optional: Benachrichtigungen

Prüfe:

  • PushOver aktiviert
  • Token/User/optional Device
  • Event-Toggles wie Bei manueller Auswahl senden, Bei Rip-Start senden, Bei Erfolg senden

Danach in Settings den Button PushOver Test ausführen.

9. Optional: Automatisierung

Erst wenn die Grundkonfiguration stabil ist:

  1. Skripte anlegen und testen
  2. Skriptketten aufbauen
  3. Cronjobs aktivieren

Funktionsprüfung

Ein sinnvoller Kurztest:

  1. Disc in Ripper erkennen lassen
  2. Analyse starten
  3. TMDb-Metadaten übernehmen
  4. ggf. Playlist-/RAW-Entscheidung durchlaufen
  5. bis Bereit zum Encodieren kommen
  6. Encode starten
  7. Ergebnis in Historie prüfen

Typische Konfigurationsfehler

Symptom Häufige Ursache
Disc wird nicht erkannt Laufwerksmodus oder Auto-Erkennung passt nicht
Playlist-Auswahl wirkt unplausibel Minimale Titellänge oder TMDb Runtime-Abzug ... ist zu streng/zu locker
falsche Spuren sind in der Review vorausgewählt Review-Sprachfilter oder HandBrake-Args greifen unerwartet
Ausgabe landet am falschen Ort Profilpfade oder Templates greifen über Fallback
Queue verhält sich unerwartet Parallele Jobs, CD-Limit und Gesamtlimit widersprechen sich

Weiter

\ No newline at end of file diff --git a/site/getting-started/index.html b/site/getting-started/index.html index 92d2b07..62ddf65 100644 --- a/site/getting-started/index.html +++ b/site/getting-started/index.html @@ -1 +1 @@ - Benutzerhandbuch Überblick - Ripster

Benutzerhandbuch Überblick

Dieses Kapitel ist für den Betrieb von Ripster im Alltag geschrieben.

Zielgruppe

  • Anwender, die Discs verarbeiten wollen
  • Betreiber, die den täglichen Ablauf stabil fahren möchten
  • Power-User, die Queue/Skripte/Cron im UI steuern möchten

Kapitelstruktur

Kapitel Zweck
Voraussetzungen Produktions- vs. Dev-Voraussetzungen klar trennen
Installation Ripster aufsetzen und starten
Ersteinrichtung Pfade, Tools und Metadaten korrekt setzen
Erster Lauf Ein kompletter Job von Disc bis Datei
GUI-Seiten Alle Ansichten und Aktionen im Detail
Workflows Typische Abläufe und Entscheidungen aus User-Sicht

Wenn du neu startest

  1. Voraussetzungen
  2. Installation
  3. Ersteinrichtung
  4. Erster Lauf

Wenn Ripster bereits läuft

  1. GUI-Seiten
  2. Workflows
  3. Bei Detailfragen: Technischer Anhang
\ No newline at end of file + Benutzerhandbuch Überblick - Ripster

Benutzerhandbuch Überblick

Dieses Kapitel ist für den Betrieb von Ripster im Alltag geschrieben.

Zielgruppe

  • Anwender, die Discs verarbeiten wollen
  • Betreiber, die den täglichen Ablauf stabil fahren möchten
  • Power-User, die Queue/Skripte/Cron im UI steuern möchten

Kapitelstruktur

Kapitel Zweck
Voraussetzungen Produktions- vs. Dev-Voraussetzungen klar trennen
Installation Ripster aufsetzen und starten
Ersteinrichtung Pfade, Tools und Metadaten korrekt setzen
Erster Lauf Ein kompletter Job von Disc bis Datei
GUI-Seiten Alle Ansichten und Aktionen im Detail
Workflows Typische Abläufe und Entscheidungen aus User-Sicht

Wenn du neu startest

  1. Voraussetzungen
  2. Installation
  3. Ersteinrichtung
  4. Erster Lauf

Wenn Ripster bereits läuft

  1. GUI-Seiten
  2. Workflows
  3. Bei Detailfragen: Technischer Anhang
\ No newline at end of file diff --git a/site/getting-started/installation/index.html b/site/getting-started/installation/index.html index 71fc39d..364c895 100644 --- a/site/getting-started/installation/index.html +++ b/site/getting-started/installation/index.html @@ -1,15 +1,12 @@ - Installation - Ripster

Installation

Die empfohlene Installation läuft über install.sh und richtet Ripster vollständig ein.

Du musst dafür keine Tools manuell vorinstallieren. Das Skript installiert die benötigten Abhängigkeiten automatisch, sofern sie nicht explizit mit --no-* übersprungen werden.

Unterstützte Systeme und Anforderungen

  • unterstützt laut Script: debian, ubuntu, linuxmint, pop
  • Ausführung als root (oder via sudo)
  • Internetzugang während der Installation

Schritt-für-Schritt

1. Installationsskript herunterladen

wget -qO install.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh
-

2. Installation ausführen

sudo bash install.sh
-

Während der Installation wählst du den HandBrake-Modus:

  • 1 Standard (Paketinstallation)
  • 2 GPU/NVDEC (gebündeltes Binary)

3. Dienststatus prüfen

sudo systemctl status ripster-backend
-

4. Weboberfläche öffnen

  • mit nginx (Standard): http://<Server-IP>
  • ohne nginx (--no-nginx): API auf http://<Server-IP>:3001/api

Was install.sh konkret einrichtet

  1. prüft Betriebssystem, Root-Rechte und ermittelt Host/IP
  2. aktualisiert Paketquellen und installiert Basispakete (curl, wget, git, mediainfo, udev ...)
  3. installiert Node.js 20 (falls nicht passend vorhanden)
  4. installiert optional MakeMKV (Build aus den offiziellen Quellen)
  5. installiert optional HandBrakeCLI (Standard oder GPU/NVDEC)
  6. installiert optional nginx
  7. legt den Systembenutzer ripster an (ohne Login-Shell, ohne Home) und ergänzt Gruppen (cdrom, optical, disk, video, render, falls vorhanden)
  8. klont das Repository nach /opt/ripster (oder aktualisiert bei --reinstall)
  9. legt Verzeichnisse an:
  10. /opt/ripster/backend/data
  11. /opt/ripster/backend/logs
  12. /opt/ripster/backend/data/output/raw
  13. /opt/ripster/backend/data/output/movies
  14. /opt/ripster/backend/data/logs
  15. installiert npm-Abhängigkeiten (Root, Backend, Frontend) und baut das Frontend
  16. erzeugt backend/.env (bei --reinstall bleibt bestehende .env erhalten)
  17. setzt Rechte/Besitz und erstellt bei sudo-Installation zusätzlich ~/.MakeMKV für den aufrufenden Benutzer
  18. erzeugt und startet ripster-backend.service
  19. konfiguriert und startet nginx (falls nicht übersprungen)

Wichtige Optionen

Option Default laut Script Zweck
--branch <branch> dev Branch für die Installation
--dir <pfad> /opt/ripster Installationsverzeichnis
--user <benutzer> ripster Service-Benutzer
--port <port> 3001 Backend-Port
--host <hostname> automatisch ermittelte Host-IP Hostname/IP für Webzugriff/CORS
--no-makemkv aus MakeMKV-Installation überspringen
--no-handbrake aus HandBrake-Installation überspringen
--no-nginx aus nginx-Setup überspringen
--reinstall aus bestehende Installation aktualisieren

Beispiele:

sudo bash install.sh --branch dev
-sudo bash install.sh --port 8080 --host ripster.local
-sudo bash install.sh --reinstall
-

Betrieb im Alltag

# Logs live ansehen
-sudo journalctl -u ripster-backend -f
-
-# Dienst neu starten
-sudo systemctl restart ripster-backend
-
-# Update aus bestehender Installation
-sudo bash /opt/ripster/install.sh --reinstall
-

Häufige Stolperstellen

  • Laufwerk nicht zugreifbar: Laufwerksrechte/Gruppen prüfen
  • CLI-Tool fehlt wegen --no-*: Tool nachinstallieren oder Befehl in Settings korrigieren
  • UI nicht erreichbar: nginx-Status und Firewall prüfen

Danach weiter

  1. Ersteinrichtung
  2. Erster Lauf
\ No newline at end of file + Installation - Ripster

Installation

Die empfohlene Installation startet immer über setup.sh. setup.sh lädt das passende install.sh aus dem gewünschten Branch und übergibt alle weiteren Parameter unverändert an den eigentlichen Installer.

Wichtig:

  • Standard-Einstieg: setup.sh
  • kein curl | bash
  • du musst die Tools nicht manuell vorinstallieren, sofern du sie nicht bewusst mit --no-* auslässt

Voraussetzungen

  • unterstütztes Linux-System
  • Root-Rechte oder sudo
  • Internetzugang während der Installation

Der Installer erkennt aktuell:

  • Debian
  • Ubuntu
  • Linux Mint
  • Pop!_OS

Standardinstallation

wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh
+bash setup.sh
+

Ohne --branch fragt setup.sh interaktiv nach dem gewünschten Branch.

Die typischen Branches sind:

  • main: stabiles Release
  • dev: aktueller Entwicklungsstand

Installation mit Branch oder Optionen

Beispiele:

bash setup.sh --branch main
+bash setup.sh --branch dev
+bash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10
+

setup.sh wertet selbst nur --branch aus. Alles andere übernimmt install.sh.

Wichtige Optionen von install.sh

Option Default Zweck
--branch <branch> dev installiert genau diesen Git-Branch
--dir <pfad> /opt/ripster Installationsverzeichnis
--user <benutzer> ripster Systembenutzer für den Dienst
--port <port> 3001 Backend-Port
--host <hostname|ip> automatisch ermittelte Host-IP Hostname/IP für Webzugriff und CORS
--no-makemkv aus MakeMKV nicht installieren
--no-handbrake aus HandBrake nicht installieren
--no-nginx aus nginx-Setup überspringen
--no-system-deps aus Systemabhängigkeiten nicht nachinstallieren
--reinstall aus bestehende Installation aktualisieren

Was der Installer einrichtet

Typischer Ablauf:

  1. Betriebssystem, Root-Rechte und Host prüfen
  2. Systemabhängigkeiten installieren
  3. Node.js 20 sicherstellen
  4. optional MakeMKV installieren
  5. optional HandBrakeCLI installieren
  6. optional nginx konfigurieren
  7. Repository nach --dir klonen oder aktualisieren
  8. Backend-/Frontend-Abhängigkeiten installieren
  9. Frontend bauen
  10. backend/.env und Laufzeitverzeichnisse vorbereiten
  11. ripster-backend.service anlegen und starten

Dienst prüfen

sudo systemctl status ripster-backend
+

Typische Aufrufe im Betrieb:

sudo journalctl -u ripster-backend -f
+sudo systemctl restart ripster-backend
+

Update einer bestehenden Installation

Standard:

sudo bash /opt/ripster/install.sh --reinstall
+

Wenn die Installation mit abweichenden Kernparametern eingerichtet wurde, dieselben Parameter wieder mitgeben:

sudo bash /opt/ripster/install.sh --reinstall --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10
+

Alternativ kannst du auch erneut über setup.sh gehen:

sudo bash /opt/ripster/setup.sh --reinstall
+

--reinstall aktualisiert die Installation, behält aber die persistenten Daten der bestehenden Instanz.

Danach weiter

  1. Ersteinrichtung
  2. Erster Lauf
\ No newline at end of file diff --git a/site/getting-started/prerequisites/index.html b/site/getting-started/prerequisites/index.html index 838b386..bf399f0 100644 --- a/site/getting-started/prerequisites/index.html +++ b/site/getting-started/prerequisites/index.html @@ -1,4 +1,5 @@ - Voraussetzungen - Ripster

Voraussetzungen

Die Voraussetzungen hängen davon ab, wie du Ripster betreibst.

Produktionsbetrieb mit install.sh (Standard)

Für den normalen Betrieb sind nur wenige Punkte vorab nötig.

Pflicht

  • unterstütztes Linux-System (laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS)
  • root-Rechte
  • Internetzugang während der Installation
  • optisches Laufwerk für Disc-Betrieb

install.sh installiert die benötigten Tools selbst (u. a. Node.js, MakeMKV, HandBrakeCLI, MediaInfo), sofern sie nicht explizit per --no-* übersprungen werden.

Laufwerk kurz prüfen

ls /dev/sr*
-lsblk | grep rom
-

Wenn nötig Rechte setzen (Beispiel):

sudo chmod a+rw /dev/sr0
-

Optional vorab

  • OMDb API-Key (kann auch nach Installation in den Settings gesetzt werden)
  • PushOver-Zugangsdaten (optional)

Entwicklungsmodus (nur für Dev)

Wenn du lokal entwickelst (./start.sh, npm run dev), gelten zusätzliche Voraussetzungen:

  • Node.js >= 20.19.0
  • makemkvcon, HandBrakeCLI, mediainfo im PATH

Details: Entwicklungsumgebung

Abschluss-Checkliste

  • [ ] Produktionsbetrieb: Linux + root + Internet + Laufwerk vorhanden
  • [ ] Dev-Modus (nur falls benötigt): Node.js und CLI-Tools verfügbar
\ No newline at end of file + Voraussetzungen - Ripster

Voraussetzungen

Die Voraussetzungen hängen davon ab, ob du Ripster produktiv installieren oder lokal entwickeln willst.

Produktionsbetrieb mit setup.sh

Für den normalen Betrieb brauchst du nur die Basisvoraussetzungen. Die eigentlichen Tools werden vom Installer eingerichtet, sofern du sie nicht bewusst mit --no-* überspringst.

Pflicht

  • unterstütztes Linux-System
  • Root-Rechte oder sudo
  • Internetzugang während der Installation
  • optisches Laufwerk, wenn du Disc-Workflows nutzen willst

Der Installer unterstützt aktuell:

  • Debian
  • Ubuntu
  • Linux Mint
  • Pop!_OS

Standard-Einstieg:

wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh
+bash setup.sh
+

Laufwerk kurz prüfen

ls /dev/sr*
+lsblk | grep rom
+

Optional vorab

  • TMDb Read Access Token für Film-/Serien-Metadaten
  • PushOver-Zugangsdaten für Benachrichtigungen

Beides kann auch erst nach der Installation in Settings gesetzt werden.

Entwicklungsmodus

Wenn du lokal entwickelst (./start.sh, npm run dev), gelten zusätzliche Voraussetzungen:

  • Node.js >= 20.19.0
  • makemkvcon, HandBrakeCLI, mediainfo im PATH

Details: Entwicklungsumgebung

Abschluss-Checkliste

  • [ ] Linux + Root/Sudo + Internet vorhanden
  • [ ] optisches Laufwerk vorhanden, falls Disc-Ripping genutzt werden soll
  • [ ] TMDb/PushOver-Zugangsdaten liegen bereit, falls diese Funktionen sofort genutzt werden sollen
  • [ ] im Dev-Modus zusätzlich Node.js und CLI-Tools lokal verfügbar
\ No newline at end of file diff --git a/site/getting-started/quickstart/index.html b/site/getting-started/quickstart/index.html index 6cdc02f..4e2e4c3 100644 --- a/site/getting-started/quickstart/index.html +++ b/site/getting-started/quickstart/index.html @@ -1 +1 @@ - Erster Lauf - Ripster

Erster Lauf

Dieser Ablauf führt einen vollständigen Disc-Job von Erkennung bis fertiger Datei durch.

1) Disc erkennen

  1. Ripper öffnen.
  2. Disc einlegen.
  3. Auf Medium erkannt warten.

Prüfen:

  • Disk-Information zeigt Device/Label.
  • Falls nicht: Laufwerk neu lesen.

2) Analyse starten

Aktion:

  • Analyse starten

Erwartung:

  • Status Analyse
  • danach Metadaten-Dialog

3) Metadaten bestätigen

Im Dialog:

  1. Treffer suchen/auswählen.
  2. Bei Serie zusätzlich Disc-Nummer setzen.
  3. Auswahl übernehmen.

Mögliche Abzweigungen:

  • Duplikatfilm -> Übernahme erzwingen oder Multipart movie
  • vorhandenes RAW -> Entscheidungsdialog (weiterverwenden oder neu rippen)

4) Rip/Review-Phase

Normalfall:

  • Startbereit -> Rippen -> Mediainfo-Pruefung

Mögliche Alternativen:

  • vorhandenes RAW: direkter Sprung in Prüfung
  • Blu-ray/DVD-Entscheidung nötig: Warte auf Auswahl für Playlist/Titel

5) Encode-Review abschließen

Bei Bereit zum Encodieren:

  • Titel festlegen
  • Audio-/Subtitle-Spuren prüfen
  • optional Preset auswählen
  • optional Pre-/Post-Skripte wählen

Dann:

  • Encoding starten

6) Encoding überwachen

Während Encodieren:

  • Fortschritt/ETA im Ripper
  • Queue- und Runtime-Status beobachten
  • optional Logkontrolle in Historie

7) Ergebnis verifizieren

Nach Fertig:

  1. Historie öffnen.
  2. Jobdetail prüfen.
  3. Output-Pfad und Log plausibilisieren.

Kontrollpunkte:

  • finale Datei am erwarteten Template-Pfad
  • RAW-Ordnerzustand finalisiert (kein Incomplete_)

8) Typische Folgeaktionen

  • falsche Metadaten: OMDb neu zuordnen
  • andere Trackauswahl: Review neu starten
  • erneuter Encode aus RAW: RAW neu encodieren
  • gleicher Plan erneut: Encode neu starten
\ No newline at end of file + Erster Lauf - Ripster

Erster Lauf

Dieser Ablauf führt einen typischen Disc-Job von Erkennung bis fertiger Datei durch.

1. Disc erkennen

  1. Ripper öffnen
  2. Disc einlegen
  3. auf Medium erkannt warten

Prüfen:

  • Disk-Information zeigt Device, Label und Laufwerksstatus
  • falls nicht: Laufwerk neu lesen

Relevante Settings:

  • Laufwerksmodus
  • Automatische Disk-Erkennung
  • Polling Intervall (ms)

2. Analyse starten

Aktion:

  • Analyse starten

Erwartung:

  • Status Analyse
  • danach der Metadaten-Dialog

Relevantes Setting:

  • Minimale Titellänge (Minuten) beeinflusst bereits, welche Titel/Playlists Ripster später als relevant betrachtet

3. Metadaten in TMDb bestätigen

Im Dialog:

  1. Treffer suchen oder filtern
  2. Film oder Serie auswählen
  3. bei Serien zusätzlich Disc-Nummer setzen
  4. Auswahl übernehmen

Mögliche Abzweigungen:

  • Duplikatfilm: Übernahme erzwingen oder Multipart movie
  • vorhandenes RAW: Entscheidungsdialog weiterverwenden oder neu rippen

Relevante Settings:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache

4. RAW- und Playlist-Entscheidungen

Je nach Disc-Situation geht es jetzt unterschiedlich weiter.

Normalfall

Startbereit -> Rippen -> Mediainfo-Prüfung

Vorhandenes RAW

Kein neuer Rip, sondern erst eine Entscheidung:

  • vorhandenes RAW weiterverwenden
  • RAW löschen und Rip neu starten
  • bei passenden Film-Konstellationen optional Multipart mit Orphan-RAW

Playlist- oder Titelauswahl erforderlich

Bei bestimmten Blu-ray-/DVD-Fällen erscheint Warte auf Auswahl.

Dann bestätigst du:

  • eine Playlist
  • oder einen/mehrere HandBrake-Titel

Relevante Settings:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)

5. Encode-Review abschließen

Bei Bereit zum Encodieren prüfst du:

  • Titelwahl
  • Audio-Spuren
  • Untertitel
  • User-Preset oder HandBrake-Preset
  • Pre-/Post-Encode-Skripte und Ketten

Dann:

  • Encoding starten

Relevante Settings:

  • HandBrake Preset und HandBrake Extra Args je Medium
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat
  • Standard-Zuordnungen unter Settings -> Encode-Presets

6. Encoding überwachen

Während Encodieren:

  • Fortschritt/ETA im Ripper
  • Queue-Status beobachten
  • bei Bedarf Hardware-Ansicht öffnen

Relevante Settings:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabhängig)
  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)

7. Ergebnis verifizieren

Nach Fertig:

  1. Historie öffnen
  2. Jobdetail prüfen
  3. Output-Pfad und Log kontrollieren

Kontrollpunkte:

  • finale Datei liegt am erwarteten Template-Pfad
  • RAW-Ordner ist finalisiert
  • optional .nfo wurde erzeugt, falls aktiviert

Relevante Settings:

  • output_template_*
  • series_dir_* und Serien-Templates
  • generate_nfo_after_encode

8. Typische Folgeaktionen

  • falsche TMDb-Zuordnung: TMDb neu zuweisen
  • andere Trackauswahl: Review neu starten
  • erneuter Encode aus RAW: RAW neu encodieren
  • gleicher Plan erneut: Encode neu starten
  • Rip erneut versuchen: Retry Rippen
\ No newline at end of file diff --git a/site/gui/audiobooks/index.html b/site/gui/audiobooks/index.html index f083639..7464ed1 100644 --- a/site/gui/audiobooks/index.html +++ b/site/gui/audiobooks/index.html @@ -1 +1 @@ - Audiobooks - Ripster

Audiobooks

Die Seite Audiobooks ist der spezialisierte Workflow für Audible-*.aax-Dateien.

Seitenstruktur

Die Oberfläche besteht aus zwei Hauptbereichen:

  1. Audiobooks Upload
  2. Audiobook Jobs

1) Audiobooks Upload

Der Upload akzeptiert ausschließlich .aax.

Bedienung

  • Datei auswählen (Button oder Drag-and-Drop)
  • Upload starten
  • Auswahl entfernen oder laufenden Upload abbrechen

Während des Uploads zeigt die UI:

  • Prozentfortschritt
  • übertragene/gesamte Bytes
  • Statusmeldung (z. B. „Job vorbereitet“, „in Queue eingereiht“)

Ablauf nach erfolgreichem Upload

  • AAX wird serverseitig geprüft
  • Audiobook-Job wird angelegt
  • Job landet je nach Pipelinezustand in READY_TO_START, startet direkt oder wird eingereiht

2) Audiobook Jobs

Gezeigt werden aktive Jobs (nicht abgeschlossene). Fertige Jobs liegen in der Historie.

Jeder Job kann eingeklappt/ausgeklappt werden und zeigt:

  • Titel-/Metadatenblock (Titel, Autor, Sprecher, Jahr, Kapitel)
  • Statusbadge
  • Fortschritt/ETA
  • ggf. Kapitel-Fortschritt

Konfigurierbare Job-Parameter

Im ausgeklappten Job:

  • Ausgabeformat (m4b, mp3, flac)
  • formatspezifische Optionen (dynamisch je Format)
  • Kapitelnamen bearbeiten
  • Pre-Rip-Ausführungen (Skript/Kette)
  • Post-Rip-Ausführungen (Skript/Kette)

Formatverhalten

  • m4b: eine Datei mit Kapiteln
  • mp3/flac: kapitelweise Ausgabedateien

Für mp3/flac zeigt die UI während/nach dem Lauf eine Kapitel-Status-Tabelle (Rip/Encode).

Aktionen je Job

  • Encode starten (bzw. Neustart mit aktuellen Optionen)
  • Abbrechen
  • Job löschen (mit Bestätigung)

Relevante Settings

  • raw_dir_audiobook
  • movie_dir_audiobook
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command

Typische Fehlerbilder

  • Upload wird abgelehnt: Datei ist keine gültige *.aax.
  • Start/Encode schlägt fehl: ffprobe oder ffmpeg nicht erreichbar.
  • Unerwartete Ausgabeorte: Templates/Pfade passen nicht zur gewünschten Struktur.
\ No newline at end of file + Audiobooks - Ripster

Audiobooks

Die Seite Audiobooks ist der spezialisierte Workflow für Audible-*.aax-Dateien.

Seitenstruktur

Die Oberfläche besteht aus zwei Hauptbereichen:

  1. Audiobooks Upload
  2. Audiobook Jobs

1. Audiobooks Upload

Der Upload akzeptiert ausschließlich .aax.

Bedienung

  • Datei auswählen oder per Drag-and-Drop ablegen
  • Upload starten
  • Auswahl entfernen oder laufenden Upload abbrechen

Während des Uploads zeigt die UI:

  • Prozentfortschritt
  • übertragene und gesamte Bytes
  • Statusmeldung

Ablauf nach erfolgreichem Upload

  • die AAX-Datei wird geprüft
  • Ripster versucht Metadata, Kapitel und Activation-Bytes-Kontext aufzubauen
  • ein Audiobook-Job wird angelegt
  • der Job startet direkt oder wird in die Queue eingereiht

2. Audiobook Jobs

Die Seite zeigt aktive Jobs. Abgeschlossene Jobs findest du in der Historie.

Ein Job kann eingeklappt oder ausgeklappt werden und zeigt:

  • Titel, Autor, Sprecher, Jahr
  • Kapitelanzahl
  • Fortschritt und ETA
  • bei Split-Ausgabe den Kapitelstatus

Konfigurierbare Job-Parameter

Im ausgeklappten Job kannst du setzen:

  • Ausgabeformat m4b, mp3 oder flac
  • formatspezifische Optionen
  • Kapitelnamen
  • Pre-Encode-Skripte und -Ketten
  • Post-Encode-Skripte und -Ketten

Formatverhalten

  • m4b: eine Datei mit Kapitelmarken
  • mp3: eine Datei pro Kapitel
  • flac: eine Datei pro Kapitel

Wenn du mp3 oder flac wählst, zeigt die UI zusätzlich eine Kapitel-Status-Tabelle.

Activation Bytes

Wenn Ripster für eine Datei keine Activation Bytes verwenden kann, wird im Workflow eine manuelle Eingabe nötig.

Wichtig:

  • die Bytes werden lokal gecacht
  • derselbe AAX-Hash muss dann später nicht erneut manuell eingegeben werden
  • der Expertenblock in Settings zeigt bekannte Cache-Einträge an

Relevante Settings

  • raw_dir_audiobook
  • movie_dir_audiobook
  • raw_dir_audiobook_owner
  • movie_dir_audiobook_owner
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command

So wirken die Settings im Alltag

  • audiobook_raw_template bestimmt den Namen des AAX-RAW-Ordners
  • output_template_audiobook bestimmt die Einzeldatei für m4b
  • output_chapter_template_audiobook bestimmt Zielstruktur und Dateinamen für mp3/flac
  • ffprobe_command liest Kapitel und Metadaten
  • ffmpeg_command erzeugt die finalen Dateien

Queue und Laufzeit

Audiobook-Jobs nutzen dieselbe globale Pipeline wie die anderen Bereiche.

Relevante Settings:

  • Parallele Jobs
  • Max. Encodes gesamt (medienunabhängig)

Typische Fehlerbilder

  • Upload wird abgelehnt: Datei ist keine gültige *.aax
  • Analyse schlägt fehl: ffprobe ist nicht erreichbar
  • Encode schlägt fehl: ffmpeg ist nicht erreichbar
  • Ausgabe landet unerwartet: Templates oder Zielpfade passen nicht zur gewünschten Struktur
\ No newline at end of file diff --git a/site/gui/converter/index.html b/site/gui/converter/index.html index fdf1204..e8ac15f 100644 --- a/site/gui/converter/index.html +++ b/site/gui/converter/index.html @@ -1 +1 @@ - Converter - Ripster

Converter

Die Seite Converter verarbeitet bereits vorhandene Dateien (Video, Audio, ISO) ohne Laufwerks-Rip.

Betriebsmodell

Der Converter arbeitet auf dem Eingangspfad converter_raw_dir:

  • Uploads landen dort
  • Explorer-Aktionen arbeiten dort
  • daraus werden Converter-Jobs erstellt

Wichtig:

  • Upload erzeugt nicht automatisch einen Job.
  • Joberstellung erfolgt explizit über Auswahl im Explorer.

Datei-Explorer

Der Explorer zeigt den kompletten Baum unter converter_raw_dir.

Aktionen:

Aktion Wirkung
Upload Dateien werden in den Raw-Baum geschrieben
Ordner erstellen legt Unterordner im Raw-Baum an
Umbenennen benennt Datei/Ordner im Raw-Baum um
Verschieben verschiebt innerhalb des Raw-Baums
Löschen entfernt Datei/Ordner dauerhaft
Scannen synchronisiert Explorer und DB-Zuordnungen

Upload-Regeln:

  • Dateiendung muss in Erlaubte Datei-Endungen* enthalten sein
  • bei Verstoß wird der Upload abgelehnt

Joberstellung aus Explorer-Auswahl

Es gibt zwei Audio-Strategien:

  1. Ein Job pro Datei
  2. Gemeinsamer Job (Audio)

Verhalten:

  • Video/ISO werden grundsätzlich als Einzeljobs angelegt.
  • Audio kann als Shared-Job mit mehreren Eingabedateien erzeugt werden.

Shared-Audio-Job:

  • hält mehrere inputPaths
  • kann vor Start erweitert/reduziert werden (nur Audio-Dateien)

Job-Konfiguration

Vor Start je Job einstellbar:

  • converterMediaType (video, audio, iso)
  • outputFormat
  • Metadaten
  • Track-/Titelwahl (bei video/iso)
  • Pre-/Post-Encode-Skripte und Ketten

Spezifika:

  • Video/ISO laufen durch Mediainfo/Review ähnlich zum Disc-Flow.
  • Audio kann direkt mit Formatoptionen konfiguriert werden.

Ausgabe-Pfade

Video/ISO

  • Root: converter_movie_dir
  • Dateiname: Output-Template (Video)
  • Endung: aus gewähltem Output-Format

Audio

  • Root: converter_audio_dir
  • Dateiname/Ordner: Output-Template (Audio)
  • bei Shared-/Folder-Job: Ausgabe als Ordnerstruktur mit Trackdateien

Queue und Start

Converter-Jobs laufen über dieselbe Pipeline-/Queue-Logik:

  • sofortiger Start wenn Limits frei
  • sonst Queue-Eintrag

Parallelität richtet sich nach den globalen Encode-Limits in Settings.

Auto-Scan (Polling)

Mit aktiviertem Polling:

  • converter_raw_dir wird zyklisch gescannt
  • neue Dateien erscheinen automatisch im Explorer

Relevante Settings:

  • Auto-Scan (Polling)
  • Polling-Intervall (Sekunden)

Abgrenzung zu Audiobooks

  • Converter: beliebige Audio/Video/ISO-Dateien
  • Audiobooks: dedizierter AAX-Workflow mit Kapitel-/Audiobook-Metadaten
\ No newline at end of file + Converter - Ripster

Converter

Die Seite Converter verarbeitet vorhandene Dateien ohne Laufwerks-Rip. Sie ist für Video-, Audio- und ISO-Dateien gedacht, die bereits auf dem System liegen oder hochgeladen werden.

Betriebsmodell

Der Converter arbeitet auf dem Eingangspfad converter_raw_dir.

Dort landen:

  • Uploads
  • neu angelegte Ordner
  • umbenannte oder verschobene Dateien
  • alle Dateien, aus denen später Converter-Jobs entstehen

Wichtig:

  • Upload erzeugt nicht automatisch einen Job
  • die Joberstellung erfolgt bewusst aus der Explorer-Auswahl

Datei-Explorer

Der Explorer zeigt den kompletten Baum unter converter_raw_dir.

Aktionen:

Aktion Wirkung
Upload schreibt neue Dateien in den Converter-RAW-Baum
Ordner erstellen legt Unterordner an
Umbenennen benennt Datei oder Ordner um
Verschieben verschiebt Einträge innerhalb des Raw-Baums
Löschen entfernt Datei oder Ordner dauerhaft
Scannen synchronisiert Dateisystem und Converter-Datenbank

Upload- und Scan-Regeln

  • Dateiendungen müssen in Erlaubte Datei-Endungen enthalten sein
  • neue Dateien erscheinen sofort nach manuellem Scan
  • mit Polling auch automatisch

Relevante Settings:

  • Erlaubte Datei-Endungen
  • Auto-Scan (Polling)
  • Polling-Intervall (Sekunden)

Joberstellung aus Explorer-Auswahl

Es gibt zwei Audio-Strategien:

  1. Ein Job pro Datei
  2. Gemeinsamer Job (Audio)

Verhalten:

  • Video und ISO werden immer als Einzeljobs angelegt
  • Audio kann als gemeinsamer Album-/Ordner-Job erzeugt werden

Shared-Audio-Job:

  • hält mehrere inputPaths
  • kann vor dem Start erweitert oder reduziert werden

Job-Konfiguration

Vor dem Start je Job einstellbar:

  • converterMediaType
  • outputFormat
  • Metadaten
  • Track-/Titelwahl bei Video/ISO
  • User-Preset und HandBrake-Preset bei Video
  • Pre-/Post-Encode-Skripte und Ketten

Spezifika:

  • Video/ISO durchlaufen eine Review ähnlich zum Disc-Flow
  • Audio wird direkt über Format und Audio-Optionen konfiguriert

Ausgabe-Pfade

Video / ISO

  • Zielordner: converter_movie_dir
  • Dateiname: Output-Template (Video)
  • Endung: aus dem gewählten Ausgabeformat

Audio

  • Zielordner: converter_audio_dir
  • Dateiname/Ordner: Output-Template (Audio)
  • bei Shared- oder Folder-Jobs entsteht eine Ordnerstruktur mit mehreren Track-Dateien

Relevante Settings:

  • converter_movie_dir
  • converter_audio_dir
  • converter_output_template_video
  • converter_output_template_audio
  • converter_movie_dir_owner
  • converter_audio_dir_owner

Queue und Start

Converter-Jobs laufen über dieselbe globale Pipeline-Queue wie Ripper und Audiobooks.

Das bedeutet:

  • sofortiger Start, wenn Limits frei sind
  • sonst Einreihung in die Warteschlange

Relevante Settings:

  • Parallele Jobs
  • Max. Encodes gesamt (medienunabhängig)

Typische Einsatzfälle

  • vorhandene MKV/MP4-Dateien mit neuem Preset encodieren
  • ISO-Dateien in einen Video-Workflow überführen
  • Musikdateien gesammelt in einen Audio-Ordner-Job packen
  • Medien auf anderem Storage per Upload oder Dateibaum vorbereiten

Abgrenzung zu Audiobooks

  • Converter: beliebige Audio-, Video- und ISO-Dateien
  • Audiobooks: spezialisierter AAX-Workflow mit Activation Bytes, Kapitelmetadaten und Kapiteltemplates
\ No newline at end of file diff --git a/site/gui/database/index.html b/site/gui/database/index.html index 4166772..2212ecc 100644 --- a/site/gui/database/index.html +++ b/site/gui/database/index.html @@ -1 +1 @@ - Database (Expert) - Ripster

Database (Expert)

/database ist die Recovery- und Expertensicht für Fälle, in denen Dateisystem und Historie nicht mehr sauber zusammenpassen.

Zugriff

  • direkte Route: /database
  • nicht Teil der Standardnavigation

Bereich Gefundene RAW-Einträge

Dieser Bereich listet RAW-Verzeichnisse ohne zugeordneten Historie-Job.

Aktionen:

  • RAW prüfen: scannt konfigurierte RAW-Wurzeln
  • Job anlegen: erstellt aus einem orphan RAW einen neuen Historie-Job

Was bei Job anlegen passiert

  • RAW-Pfad wird als Importquelle registriert
  • Job wird in die Historie geschrieben
  • anschließende Analyse läuft als RAW-basierter Einstieg (ohne klassischen Disc-Read)

Typischer Einsatz:

  • manuelle Dateioperationen außerhalb der UI
  • Migrationen
  • Wiederherstellung nach abgebrochenen Läufen

Sicherheits- und Betriebsregeln

  • Aktionen wirken direkt auf produktive Historie/Dateipfade.
  • Vor Import oder Löschung immer Pfad und Ziel prüfen.
  • Diese Seite nur für Recovery-Szenarien nutzen, nicht für normalen Tagesbetrieb.
\ No newline at end of file + Database (Expert) - Ripster

Database (Expert)

/database ist die Recovery- und Expertensicht für Fälle, in denen Dateisystem und Historie nicht mehr sauber zusammenpassen.

Zugriff

  • direkte Route: /database
  • nicht Teil der Standardnavigation

Bereich Gefundene RAW-Einträge

Dieser Bereich listet RAW-Verzeichnisse ohne zugeordneten Historie-Job.

Aktionen:

  • RAW prüfen: scannt konfigurierte RAW-Wurzeln
  • Job anlegen: erstellt aus einem orphan RAW einen neuen Historie-Job

Was bei Job anlegen passiert

  • RAW-Pfad wird als Importquelle registriert
  • Job wird in die Historie geschrieben
  • anschließende Analyse läuft als RAW-basierter Einstieg (ohne klassischen Disc-Read)

Typischer Einsatz:

  • manuelle Dateioperationen außerhalb der UI
  • Migrationen
  • Wiederherstellung nach abgebrochenen Läufen

Sicherheits- und Betriebsregeln

  • Aktionen wirken direkt auf produktive Historie/Dateipfade.
  • Vor Import oder Löschung immer Pfad und Ziel prüfen.
  • Diese Seite nur für Recovery-Szenarien nutzen, nicht für normalen Tagesbetrieb.
\ No newline at end of file diff --git a/site/gui/downloads/index.html b/site/gui/downloads/index.html index 6c96860..4c5f0c9 100644 --- a/site/gui/downloads/index.html +++ b/site/gui/downloads/index.html @@ -1 +1 @@ - Downloads - Ripster

Downloads

Auf Downloads werden ZIP-Archive für Historie-Artefakte erstellt und bereitgestellt.

Was heruntergeladen werden kann

Ein Download-Eintrag referenziert immer einen Historie-Job und genau ein Ziel:

  • RAW
  • Output

Erzeugt wird ein ZIP-Archiv im Download-Verzeichnis des Backends.

Statusmodell

Status Bedeutung
queued Eintrag erstellt, wartet auf Verarbeitung
processing ZIP wird gerade gebaut
ready Archiv fertig, Download-Link aktiv
failed Erzeugung oder Zugriff fehlgeschlagen

Eintrag anlegen

Startpunkt ist die Historie:

  1. Job öffnen.
  2. Download einreihen.
  3. Ziel (RAW oder Output) wählen.
  4. Status in Downloads verfolgen.

Wichtige Laufzeitdetails

  • Wenn bereits ein passendes, aktuelles Archiv existiert, kann der Eintrag wiederverwendet werden.
  • Nach Backend-Neustart werden unterbrochene queued/processing-Einträge geprüft und fortgesetzt.
  • Fehlt eine erwartete ZIP-Datei bei ready, wird der Eintrag auf failed gesetzt.

Download auslösen

Bei Status ready:

  • Download-Button lädt die ZIP direkt aus /api/downloads/:id/file.

Einträge entfernen

Löschen entfernt:

  • Queue-Metadaten
  • zugehörige Archivdatei

Nicht erlaubt:

  • Löschen während queued/processing

Echtzeitaktualisierung

Die Seite reagiert auf DOWNLOADS_UPDATED per WebSocket. Dadurch sind Statuswechsel ohne Reload sichtbar.

\ No newline at end of file + Downloads - Ripster

Downloads

Auf Downloads werden ZIP-Archive für Historie-Artefakte erstellt und bereitgestellt.

Was heruntergeladen werden kann

Ein Download-Eintrag referenziert immer einen Historie-Job und genau ein Ziel:

  • RAW
  • Output

Erzeugt wird ein ZIP-Archiv im Download-Verzeichnis des Backends.

Statusmodell

Status Bedeutung
queued Eintrag erstellt, wartet auf Verarbeitung
processing ZIP wird gerade gebaut
ready Archiv fertig, Download-Link aktiv
failed Erzeugung oder Zugriff fehlgeschlagen

Eintrag anlegen

Startpunkt ist die Historie:

  1. Job öffnen.
  2. Download einreihen.
  3. Ziel (RAW oder Output) wählen.
  4. Status in Downloads verfolgen.

Wichtige Laufzeitdetails

  • Wenn bereits ein passendes, aktuelles Archiv existiert, kann der Eintrag wiederverwendet werden.
  • Nach Backend-Neustart werden unterbrochene queued/processing-Einträge geprüft und fortgesetzt.
  • Fehlt eine erwartete ZIP-Datei bei ready, wird der Eintrag auf failed gesetzt.

Download auslösen

Bei Status ready:

  • Download-Button lädt die ZIP direkt aus /api/downloads/:id/file.

Einträge entfernen

Löschen entfernt:

  • Queue-Metadaten
  • zugehörige Archivdatei

Nicht erlaubt:

  • Löschen während queued/processing

Echtzeitaktualisierung

Die Seite reagiert auf DOWNLOADS_UPDATED per WebSocket. Dadurch sind Statuswechsel ohne Reload sichtbar.

\ No newline at end of file diff --git a/site/gui/hardware/index.html b/site/gui/hardware/index.html new file mode 100644 index 0000000..3d88ee4 --- /dev/null +++ b/site/gui/hardware/index.html @@ -0,0 +1 @@ + Hardware - Ripster

Hardware

Die Seite Hardware ist die ausführliche Detailansicht für das Live-Monitoring aus dem Ripper.

Was die Seite zeigt

  • aktuelle CPU-Auslastung
  • RAM-Auslastung
  • GPU-Auslastung und VRAM, falls vorhanden
  • Temperaturen
  • Verlaufshistorie für Auslastung und Temperatur
  • Zeitfenster für 1h, 6h, 24h, 4d

Live-Bereich

Oben zeigt die Seite:

  • ob Monitoring aktiv ist
  • aktuelles Polling-Intervall
  • Zeitpunkt der letzten Messung

Wenn Monitoring deaktiviert ist, führt die Seite direkt zu Settings.

Historie

Die Historie lädt Messpunkte aus dem Backend und zeigt:

  • Auslastung als Linienchart
  • Temperatur als Linienchart
  • umschaltbare Serien für CPU, RAM und GPU

Das ist besonders nützlich bei:

  • mehreren parallelen Encodes
  • Fehlersuche bei Hitzespitzen
  • Abschätzung, ob weitere Jobs sinnvoll gestartet werden können

Relevante Settings

  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)

Außerdem sinnvoll:

  • Externe Speicher, damit Speicherstände im Ripper sinnvoll angezeigt werden
\ No newline at end of file diff --git a/site/gui/history/index.html b/site/gui/history/index.html index 6e415a0..5c96ecb 100644 --- a/site/gui/history/index.html +++ b/site/gui/history/index.html @@ -1 +1 @@ - Historie - Ripster

Historie

Historie ist die Kontroll- und Nachbearbeitungsoberfläche für alle bereits angelegten Jobs.

Hauptansicht

Filter und Arbeitsmittel:

  • Suche (Titel, IMDb, Kontextbegriffe)
  • Statusfilter
  • Mediumfilter
  • Sortierung
  • Listen-/Grid-Layout

Jeder Eintrag zeigt auf einen Blick:

  • Titel, Jahr, Poster
  • Status und Zeitstempel
  • RAW-/Output-Verfügbarkeit
  • Medien- und ggf. Containerhinweise

Detaildialog: Was dort zusammenläuft

Der Detaildialog bündelt:

  • Metadaten (Film oder Serie)
  • Jobstatus und Fehlertexte
  • RAW-/Output-Pfade
  • Encode-Plan und Trackauswahl
  • ausgeführte Kommandodetails
  • Prozesslog (Tail oder vollständig)

Bei Seriencontainern wird disk-/child-orientiert dargestellt, nicht nur als Einzeljob.

Nachbearbeitungsaktionen und Wirkung

Aktion Typischer Einsatz Technische Wirkung
OMDb neu zuordnen falsches Match, Titel/Jahr korrigieren Metadatenfelder werden neu geschrieben; Folder-Rename wird best effort angestoßen
Review neu starten neue Track-/Titelbewertung nötig Mediainfo/Review wird aus RAW neu aufgebaut
RAW neu encodieren neuer Encode aus vorhandenem RAW startet Encode ohne neuen Laufwerks-Rip
Encode neu starten gleiche bestätigte Auswahl erneut fahren letzter bestätigter Plan wird geladen, optional mit Bereinigung unvollständiger Ausgabe
Retry Rippen Rip/Analyse neu anstoßen neuer Rip-Lauf, inkl. erneuter RAW-Phase

Löschaktionen im Dialog:

  • RAW löschen
  • Movie löschen
  • Beides löschen
  • Historieneintrag löschen

Löschvorschau und selektives Löschen

Vor endgültigem Löschen zeigt Ripster eine Vorschau mit:

  • RAW-Kandidaten
  • Movie-/Episoden-Kandidaten
  • Related-Scope (Container/Kinder/verbundene Jobs)

Wichtige Punkte:

  • Pfade sind selektierbar.
  • Für RAW-Löschung muss bei Mehrfachkandidaten mindestens ein RAW-Pfad gewählt werden.
  • Schutzlogik verhindert Löschungen außerhalb erlaubter Root-Verzeichnisse.

Serien- und Multipart-Sicht in der Historie

Serien

  • Container zeigt aggregierten Zustand aus Child-Jobs.
  • Disk-/Episode-Aktionen können child-spezifisch ausgeführt werden.
  • Im Ripper öffnen hilft bei Bereit zum Encodieren-Kindern.

Multipart

  • gemeinsamer Container mit Disc-Childs
  • Disc-Nummern bleiben pro Child nachvollziehbar
  • Delete-Preview kann Related-Pfade gemeinsam auflösen

Logs sinnvoll nutzen

  • Tail laden (800) für schnellen Fehlerkontext
  • Vollständiges Log laden für forensische Analyse

Empfehlung:

  1. Erst Tail prüfen.
  2. Bei Pfad-/Toolproblemen vollständiges Log laden.
  3. Danach passende Wiederanlauf-Aktion wählen.
\ No newline at end of file + Historie - Ripster

Historie

Historie ist die Kontroll- und Nachbearbeitungsoberfläche für alle bereits angelegten Jobs.

Hauptansicht

Filter und Arbeitsmittel:

  • Suche
  • Statusfilter
  • Mediumfilter
  • Sortierung
  • Listen-/Grid-Layout

Jeder Eintrag zeigt auf einen Blick:

  • Titel, Jahr, Poster oder Cover
  • Status und Zeitstempel
  • RAW- und Output-Verfügbarkeit
  • Medien- und Containerhinweise

Detaildialog

Der Detaildialog bündelt:

  • Metadaten
  • Jobstatus und Fehlertexte
  • RAW- und Output-Pfade
  • Encode-Plan und Trackauswahl
  • ausgeführte Kommandos
  • Prozesslog
  • verfügbare Folgeaktionen

Bei Seriencontainern und Multipart-Jobs wird container- und child-orientiert dargestellt.

Nachbearbeitungsaktionen

Aktion Typischer Einsatz Technische Wirkung
TMDb neu zuweisen falsches Match, anderer Film, andere Staffel Metadaten werden neu geschrieben; Poster, Jahr und ggf. Ordnername werden best effort aktualisiert
Review neu starten neue Track-/Titelbewertung nötig Review wird aus vorhandenem RAW neu aufgebaut
RAW neu encodieren neuer Encode mit vorhandenem RAW startet Encode ohne neuen Disc-Rip
Encode neu starten gleiche bestätigte Auswahl erneut fahren letzter bestätigter Plan wird geladen
Retry Rippen Rip oder Analyse erneut anstoßen neuer Rip-Lauf inklusive RAW-Phase

Relevante Settings:

  • handbrake_restart_delete_incomplete_output
  • generate_nfo_after_encode

Löschaktionen und Vorschau

Vor dem endgültigen Löschen zeigt Ripster eine Vorschau mit:

  • RAW-Kandidaten
  • Movie-/Episode-Kandidaten
  • Related-Scope für Container, Kinder und verbundene Jobs

Wichtige Punkte:

  • Pfade sind selektierbar
  • bei mehreren RAW-Kandidaten muss mindestens ein RAW-Pfad gewählt werden
  • Schutzlogik verhindert Löschungen außerhalb erlaubter Root-Verzeichnisse

Serien- und Multipart-Sicht

Serien

  • Container zeigt den aggregierten Zustand der Child-Jobs
  • Disk- und Episodenaktionen können child-spezifisch ausgeführt werden
  • Im Ripper öffnen hilft bei offenen Reviews

Multipart

  • gemeinsamer Container mit Disc-Childs
  • Disc-Nummern bleiben pro Child nachvollziehbar
  • Delete-Preview kann Related-Pfade gemeinsam auflösen

Logs sinnvoll nutzen

  • Tail laden für schnellen Fehlerkontext
  • Vollständiges Log laden für tiefe Analyse

Empfehlung:

  1. erst den Tail prüfen
  2. dann die Stelle im Log eingrenzen
  3. anschließend die passende Wiederanlauf-Aktion wählen
\ No newline at end of file diff --git a/site/gui/index.html b/site/gui/index.html index 7009d69..97c5cd1 100644 --- a/site/gui/index.html +++ b/site/gui/index.html @@ -1 +1 @@ - GUI-Seiten - Ripster

GUI-Seiten

Dieses Kapitel ist das Bedienhandbuch für die Oberflächen im Alltag.

Seitenüberblick

Seite Rolle im Betrieb Typischer Einsatz
Ripper Live-Steuerung der Pipeline Disc-Flow starten, Queue steuern, Review freigeben
Audiobooks AAX-Spezialflow Upload, Jobkonfiguration und Encode von Audiobooks
Settings Konfiguration/Automatisierung Pfade, Tools, Queue-Limits, Skripte, Cron
Historie Nachbearbeitung und Kontrolle Logs, Re-Encode, Löschvorschau, Recovery-Aktionen
Converter dateibasierte Konvertierung Video/Audio/ISO ohne Disc-Rip verarbeiten
Downloads ZIP-Exports RAW/Output aus Historie bereitstellen
Database (Expert) Recovery-Sicht orphan RAW finden und importieren

Empfohlener Tagesablauf

  1. Ripper oder Converter/Audiobooks: neue Arbeit starten.
  2. Historie: Ergebnisse validieren und ggf. nachbearbeiten.
  3. Downloads: Exporte für externe Übergabe erzeugen.
  4. Settings: Regeln und Limits nur kontrolliert anpassen.

Direkt in der Top-Navigation:

  • Ripper, Converter, Audiobooks, Settings, Historie, Downloads

Nur per URL:

  • Database unter /database (nur Expertenmodus in der Navigation sichtbar)
  • TMDb Migration unter /tmdb-migration (Direktlink, nicht in der Navigation)
\ No newline at end of file + GUI-Seiten - Ripster

GUI-Seiten

Dieses Kapitel ist das Bedienhandbuch für die Oberflächen im Alltag.

Seitenüberblick

Seite Rolle im Betrieb Typischer Einsatz
Ripper Live-Steuerung der Disc-Pipeline Disc erkennen, Analyse starten, Entscheidungen treffen, Queue steuern
Hardware Detailansicht für Live-Monitoring CPU/RAM/GPU und Verlauf prüfen
Audiobooks AAX-Spezialflow Upload, Kapitelprüfung und Encode von Audiobooks
Settings Konfiguration und Automatisierung Pfade, Tools, Queue, Presets, Skripte, Cron
Historie Nachbearbeitung und Kontrolle Logs, Re-Encode, TMDb-Neuzuordnung, Löschvorschau
Converter dateibasierte Konvertierung Video/Audio/ISO ohne Disc-Rip verarbeiten
Downloads ZIP-Exports RAW/Output aus der Historie bereitstellen
Database (Expert) Recovery-Sicht orphan RAW finden, prüfen und importieren
TMDb Migration Sonderseite für Altbestände alte Jobs gesammelt auf TMDb umstellen

Empfohlener Tagesablauf

  1. Ripper, Converter oder Audiobooks: neue Arbeit starten
  2. Historie: Ergebnisse kontrollieren und ggf. nachbearbeiten
  3. Downloads: Artefakte für externe Übergabe vorbereiten
  4. Settings: Regeln, Presets oder Limits nur kontrolliert anpassen
  5. Hardware: bei Lastspitzen oder Batch-Läufen den Verlauf prüfen

Direkt in der Top-Navigation:

  • Ripper
  • Converter
  • Audiobooks
  • Settings
  • Historie
  • Downloads

Zusatzansichten:

  • Hardware unter /hardware
  • Database unter /database und im Expertenmodus zusätzlich in der Navigation
  • TMDb Migration unter /tmdb-migration als Direktlink
\ No newline at end of file diff --git a/site/gui/ripper/index.html b/site/gui/ripper/index.html index f7c0192..86adc7c 100644 --- a/site/gui/ripper/index.html +++ b/site/gui/ripper/index.html @@ -1 +1 @@ - Ripper - Ripster

Ripper

Die Seite Ripper ist die Live-Steuerung der Pipeline. Hier laufen Disc-Erkennung, Queue-Steuerung, Review und Encode-Start zusammen.

Seitenaufbau und Betriebslogik

Die Bereiche erscheinen in dieser Reihenfolge:

  1. Hardware Monitoring
  2. Job Queue
  3. Skript- / Cron-Status
  4. Job Übersicht
  5. Disk-Information

1) Hardware Monitoring

Zeigt kontinuierlich:

  • CPU / RAM
  • GPU (wenn verfügbar)
  • freie Speicherstände konfigurierter Pfade

Nutzen im Betrieb:

  • Engpässe vor Jobfehlern erkennen
  • Pfadfüllstände vor Start großer Batchs prüfen

Gesteuert über Settings:

  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)

2) Job Queue

Es gibt zwei operative Zonen:

  • Laufende Jobs
  • Warteschlange

Mögliche Queue-Einträge:

  • Job-Startaktionen (Start, Retry Rippen, RAW neu encodieren, Encode neu starten, Review neu berechnen, Audio CD starten)
  • Nicht-Job-Einträge (Skript, Skriptkette, Warten)

Wichtige Regeln:

  • Queue-Reihenfolge ist per Drag-and-Drop änderbar.
  • Warten blockiert nachfolgende Queue-Starts bis kein aktiver Prozess mehr läuft.
  • Skript und Skriptkette werden als Queue-Einträge mitgeführt.

Parallelität kommt aus Settings:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • optional Audio CDs: Queue-Reihenfolge überspringen

3) Skript- / Cron-Status

Zeigt Runtime-Aktivitäten:

  • laufende Skripte
  • laufende Ketten
  • Cron-Ausführungen
  • letzte abgeschlossene Aktivitäten

Aktionen:

  • Nächster Schritt bei Ketten
  • Abbrechen
  • Liste leeren

4) Job Übersicht

Die Jobliste ist der zentrale Arbeitsbereich. Ein Klick öffnet den jeweiligen Pipeline-Status.

Badges und Kontext

Neben Status/Fortschritt zeigt die Liste je nach Job:

  • Serienkontext (Serien-Container, Staffel/Disk)
  • Multipart-Kontext (Multipart Movie, Disc-Nr.)
  • Queue-/Subjob-Kontext bei Serien-Episoden

Zustandsabhängige Aktionen

Zustand Hauptaktion im Ripper Ergebnis
Medium erkannt, Bereit Analyse starten startet MakeMKV-Analyse
Metadatenauswahl Metadaten öffnen Film/Serie auswählen, Provider festlegen
Warte auf Auswahl Playlist/Titel/RAW-Entscheidung bestätigen setzt Flow fort zur Prüfung
Startbereit Job starten startet Rip oder RAW-basierte Prüfung
Bereit zum Encodieren Encoding starten startet HandBrake mit bestätigter Auswahl
Laufend (Analyse, Rippen, Encodieren) Abbrechen setzt Job auf Abgebrochen
Fehler, Abgebrochen Retry Rippen neuer Rip-Anlauf

Zusatzaktionen je nach Zustand und Jobtyp:

  • Review neu starten
  • Encode neu starten
  • RAW neu encodieren
  • Aus Queue löschen

Review-Bereich (Bereit zum Encodieren)

Hier wird die effektive Encode-Entscheidung festgelegt:

  • Titelwahl
  • Audio-/Subtitle-Trackselektion
  • User-Preset
  • Pre-/Post-Encode-Skripte und Ketten
  • HandBrake-Kommandovorschau

Ohne Bestätigung dieses Blocks startet kein produktiver Encode.

RAW-Ordnerphasen (sichtbar über Logs/Details)

Der Ripper arbeitet mit drei RAW-Zuständen:

  • Incomplete_... während unvollständigem Rip
  • Rip_Complete_... nach erfolgreich abgeschlossenem Rip, vor Encode
  • ohne Prefix nach erfolgreichem Encode

Das ist wichtig für Recovery und Delete-Vorschau.

5) Disk-Information

Zeigt aktuelle Laufwerksdaten:

  • Device-Pfad
  • Modell
  • Disc-Label / Mount

Aktionen:

  • Laufwerk neu lesen
  • Disk neu analysieren
  • Metadaten-Dialog öffnen

Hinweis:

  • Laufwerk neu lesen ist nicht mehr an einen festen Pipeline-State gebunden.

Wichtige Dialoge

Metadaten auswählen

Im Dialog werden Film-/Serienmetadaten bestätigt.

Sonderfälle:

  • Film-Duplikat: Übernahme erzwingen oder Multipart movie
  • Serie: Disc-Nummer ist Pflicht

Vorhandenes RAW erkannt

Wenn passendes RAW existiert, fordert der Dialog eine explizite Entscheidung:

  • vorhandenes RAW verwenden
  • RAW verwerfen/löschen und neu rippen

Queue-Eintrag einfügen

Du kannst gezielt ab Position einfügen:

  • Skript
  • Skriptkette
  • Wartezeit

Audible Activation Bytes eintragen

Wenn für eine AAX-Datei keine Activation Bytes automatisch ermittelt werden können, öffnet Ripster einen Dialog zur manuellen Eingabe.

  • Eingabeformat: genau 8 Hex-Zeichen (z.B. 1a2b3c4d)
  • Speicherung: lokal im Activation-Bytes-Cache
  • Wirkung: nach dem Speichern kann der Audiobook-Flow fortgesetzt werden
\ No newline at end of file + Ripper - Ripster

Ripper

Die Seite Ripper ist die Live-Steuerung der Disc-Pipeline. Hier laufen Disc-Erkennung, Queue, manuelle Entscheidungen, Review und aktive Jobs zusammen.

Seitenaufbau

Die wichtigsten Bereiche:

  1. Hardware
  2. Job Queue
  3. Skript- / Cron-Status
  4. Job Übersicht
  5. Disk-Information

1. Hardware

Die Hardware-Karte zeigt live:

  • CPU
  • RAM
  • GPU, falls vorhanden
  • freie Speicherstände der konfigurierten Pfade

Aktionen:

  • Klick auf das Hardware-Symbol öffnet die Seite Hardware

Relevante Settings:

  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)
  • Externe Speicher

2. Job Queue

Es gibt zwei operative Zonen:

  • laufende Jobs
  • Warteschlange

Mögliche Queue-Einträge:

  • normale Job-Starts
  • Retry Rippen
  • RAW neu encodieren
  • Encode neu starten
  • Review neu starten
  • Audio CD starten
  • Skript
  • Skriptkette
  • Warten

Wichtige Regeln:

  • Reihenfolge ist per Drag-and-Drop änderbar
  • Warten blockiert nachfolgende Starts, bis keine aktive Verarbeitung mehr läuft
  • Queue-Einträge können auch ohne Medienjob existieren

Relevante Settings:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabhängig)
  • Audio CDs: Queue-Reihenfolge überspringen

3. Skript- / Cron-Status

Zeigt Runtime-Aktivitäten:

  • laufende Skripte
  • laufende Ketten
  • Cron-Ausführungen
  • kürzlich abgeschlossene Aktivitäten

Aktionen:

  • Nächster Schritt bei Ketten
  • Abbrechen
  • Liste leeren

4. Job Übersicht

Die Jobliste ist der zentrale Arbeitsbereich. Ein Klick öffnet den jeweiligen Pipeline-Status.

Zustandsabhängige Hauptaktionen

Zustand Typische Aktion Ergebnis
Medium erkannt Analyse starten MakeMKV-Analyse beginnt
Metadatenauswahl Metadaten öffnen TMDb-Dialog für Film/Serie
Warte auf Auswahl Entscheidung bestätigen Flow geht an die passende Stelle weiter
Startbereit Job starten Rip oder RAW-basierte Prüfung startet
Bereit zum Encodieren Encoding starten HandBrake startet mit bestätigter Auswahl
laufend Abbrechen Job wird gestoppt
Fehler / Abgebrochen Retry Rippen neuer Rip-Anlauf

Was Warte auf Auswahl heute bedeuten kann

Der Status ist nicht nur für eine einzige Entscheidung da. Im aktuellen Stand gibt es drei typische Fälle:

Vorhandenes RAW

Ripster hat zu den Metadaten bereits ein passendes RAW gefunden. Dann entscheidest du:

  • mit RAW weiterarbeiten
  • RAW löschen und neu rippen
  • in passenden Film-Fällen optional Multipart mit Orphan-RAW bilden

Playlist-Auswahl

Bei mehrdeutigen Blu-rays oder bestimmten DVD-Fällen musst du eine Playlist bestätigen. Die Liste zeigt unter anderem:

  • Playlist-Datei
  • Titel-ID
  • Laufzeit
  • Score
  • Empfehlung
  • Segment- und Audio-Vorschau

Relevante Settings:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)
  • Bei manueller Auswahl senden für PushOver

Titelauswahl / PlayAll-Grenzfall

Wenn Ripster mehrere HandBrake-Titel als plausibel erkannt hat, musst du einen oder mehrere Titel bestätigen. Bei Serien kann das der Grenzfall PlayAll oder Doppelfolge? sein.

5. Review-Bereich (Bereit zum Encodieren)

Hier triffst du die eigentliche Encode-Entscheidung.

Du legst fest:

  • welchen Titel Ripster encodieren soll
  • welche Audio-Spuren übernommen werden
  • welche Untertitel übernommen, erzwungen oder eingebrannt werden
  • welches User-Preset oder HandBrake-Preset verwendet wird
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen

Wichtig:

  • ohne diese Bestätigung startet kein produktiver Encode
  • bei Multipart-Locks können Einstellungen von einer Referenz-Disc übernommen und gesperrt sein

Welche Settings hier direkt sichtbar werden

  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat
  • Standard-Zuordnungen aus Settings -> Encode-Presets

RAW-Ordnerphasen

Der Ripper arbeitet mit drei RAW-Zuständen:

  • Incomplete_... während eines unvollständigen Rips
  • Rip_Complete_... nach erfolgreichem Rip, vor dem finalen Encode
  • ohne Prefix nach erfolgreichem Encode

Das ist wichtig für:

  • Recovery
  • RAW-Wiederverwendung
  • Delete-Preview in Historie

Disk-Information

Zeigt aktuelle Laufwerksdaten:

  • Device-Pfad
  • Modell
  • Disc-Label
  • Mount-Informationen

Aktionen:

  • Laufwerk neu lesen
  • Disk neu analysieren
  • Metadaten-Dialog öffnen

Hinweis:

  • Laufwerk neu lesen ist nicht mehr an einen festen Pipeline-State gebunden

Wichtige Dialoge

Metadaten auswählen

Im Dialog bestätigst du Film- oder Serienmetadaten aus TMDb.

Sonderfälle:

  • Film-Duplikat: Übernahme erzwingen oder Multipart movie
  • Serie: Disc-Nummer ist Pflicht

Vorhandenes RAW erkannt

Wenn zu den Metadaten bereits RAW existiert, fordert Ripster eine explizite Entscheidung:

  • vorhandenes RAW verwenden
  • RAW verwerfen/löschen und neu rippen

Queue-Eintrag einfügen

Du kannst gezielt ab Position einfügen:

  • Skript
  • Skriptkette
  • Wartezeit

Audible Activation Bytes eintragen

Wenn für eine AAX-Datei keine Activation Bytes verfügbar sind, öffnet Ripster einen Dialog zur manuellen Eingabe.

  • Format: genau 8 Hex-Zeichen, z. B. 1a2b3c4d
  • Speicherung: lokal im Activation-Bytes-Cache
  • Wirkung: der Audiobook-Flow kann anschließend fortgesetzt werden

Siehe auch

\ No newline at end of file diff --git a/site/gui/settings/index.html b/site/gui/settings/index.html index d4b2843..1cb1981 100644 --- a/site/gui/settings/index.html +++ b/site/gui/settings/index.html @@ -1 +1 @@ - Settings - Ripster

Settings

Die Seite Settings ist das zentrale Kontrollpanel für Laufzeitverhalten, Automatisierung und Expertenfunktionen.

Tab-Überblick

Tab Zweck
Konfiguration Alle fachlichen Settings (Pfade, Tools, Laufwerk, Metadaten, Monitoring, Benachrichtigungen, Converter)
Scripte Einzelne Bash-Skripte pflegen, testen und sortieren
Skriptketten Mehrstufige Sequenzen aus Skript und Warten bauen und testen
Encode-Presets Benutzer-Presets und Standard-Zuordnungen für Blu-ray/DVD-Workflows
Cronjobs Zeitgesteuerte Jobs auf Basis Skript/Skriptkette

Tab Konfiguration

Bedienlogik

  1. Felder ändern.
  2. Änderungen speichern klicken.
  3. Erst dann werden Änderungen persistiert und für neue Pipeline-Schritte wirksam.

Aktionen in der Toolbar:

  • Änderungen speichern: schreibt nur geänderte Felder als Bulk-Update.
  • Änderungen verwerfen: setzt den Formularzustand auf zuletzt geladen/zum Server gespeicherten Stand zurück.
  • Neu laden: lädt Kategorien + Werte erneut vom Backend.
  • PushOver Test: sendet eine Testnachricht mit aktuellen PushOver-Werten.
  • Coverarts prüfen: startet die manuelle Coverart-Recovery.
  • Expertenmodus: wird sofort gespeichert (nicht Teil des normalen Bulk-Speicherns).

Wichtige UI-Verhalten

  • Jede Einstellung zeigt Gespeichert oder Ungespeichert direkt am Feld.
  • Pflichtfelder sind mit * markiert.
  • Bei Validierungsfehlern wird pro Feld ein Fehlertext angezeigt und Speichern blockiert.
  • Tool-Kommandos (makemkv_command, mediainfo_command, handbrake_command, ffmpeg_command, ffprobe_command, cdparanoia_command, mkvmerge_command) sind im Formular schreibgeschützt markiert.
  • Einige Felder sind abhängig vom Expertenmodus sichtbar.

Kategorie Pfade: Besondere Interaktion

Die Pfad-Kategorie hat eine eigene Darstellung:

  • Tabelle Effektive Pfade: zeigt die aktuell tatsächlich aufgelösten Laufzeitpfade inkl. Fallbacks.
  • Accordion je Bereich (Blu-ray, DVD, CD / Audio, Audiobook, Converter, Downloads, optional Externe Speicher, Logs).
  • Für Pfadfelder mit Owner-Pendant (*_owner) erscheint direkt darunter das Feld Eigentümer (user:gruppe).
  • Owner-Felder sind deaktiviert, solange der zugehörige Pfad leer ist.

Spezial-Editoren in der Konfiguration

  • drive_devices: JSON-Array wird über UI-Editor gepflegt (Pfad + MakeMKV-Index je Laufwerk).
  • external_storage_paths: Liste aus Name + Pfad (für Anzeige freier externer Speicher).
  • converter_scan_extensions: Checkbox-Raster der erlaubten Endungen; mindestens eine Endung muss aktiv bleiben.
  • makemkv_registration_key: zusätzlicher Betakey-Hinweis mit übernehmen-Button.

Laufwerks-Infobox innerhalb Laufwerk

In der Kategorie Laufwerk wird eine Live-Tabelle erkannter optischer Laufwerke angezeigt:

  • Neu einlesen lädt Laufwerksinfos neu.
  • Im Expertenmodus: Freigeben pro Laufwerk und Alle Laufwerke freigeben.

Tab Scripte

Funktionen:

  • Skript anlegen (Inline-Editor)
  • Skript bearbeiten (Dialog)
  • Skript löschen (mit Bestätigung)
  • Skript testen
  • Reihenfolge per Drag-and-Drop ändern

Testergebnis enthält:

  • Erfolg/Fehler
  • Exit-Code
  • Timeout-Info
  • Dauer
  • stdout/stderr

Tab Skriptketten

Skriptketten bestehen aus Schritten:

  • Skript
  • Warten (Sekunden)

Funktionen:

  • Ketten anlegen/bearbeiten/löschen
  • Reihenfolge der Ketten per Drag-and-Drop
  • Kette testen
  • Schritte in der Kette per Drag-and-Drop neu anordnen

Im Ketteneditor:

  • linke Palette (Systemblöcke, Scripte)
  • rechte Canvas mit Drop-Zonen
  • pro Warte-Schritt konfigurierbare Sekunden

Tab Encode-Presets

Bereiche:

  1. Standard-Zuordnungen (Slots)
  2. Preset-Liste (CRUD)

Standard-Zuordnungen

Es gibt vier persistente Slots:

  • bluray_movie
  • bluray_series
  • dvd_movie
  • dvd_series

Die Auswahl ist medientyp-kompatibel gefiltert. Nicht kompatible oder fehlende bereits gespeicherte IDs werden weiterhin sichtbar gemacht, damit bestehende Zuordnungen nachvollziehbar bleiben.

Preset-Inhalt

Ein Preset umfasst:

  • Name
  • Medientyp (all, bluray, dvd)
  • HandBrake-Preset (-Z)
  • Extra Args
  • optionale Beschreibung

Tab Cronjobs

Funktionen:

  • Cronjob erstellen/bearbeiten/löschen
  • Debounced Validierung des Cron-Ausdrucks
  • Quelle wählen: Skript oder Skriptkette
  • Aktiv- und PushOver-Toggle je Job
  • Jetzt ausführen
  • Lauf-Logs öffnen

Die Seite zeigt zusätzlich Live-Status laufender Cron-Aktivitäten (Runtime Activities).

Expertenbereich: Activation Bytes Cache

Der Activation-Bytes-Block wird nur im Expertenmodus angezeigt und nur wenn Einträge vorhanden sind.

Er zeigt:

  • AAX-Checksum
  • Activation Bytes
  • Speicherzeitpunkt

Validierungshinweise für Template-Felder

Template-Felder akzeptieren nur:

  • Buchstaben/Ziffern
  • Leerzeichen
  • _ und -
  • Platzhalter in {...} bzw. ${...}
  • / für Ordnertrennung

Nicht erlaubt sind z. B. unvollständige geschweifte Klammern oder sonstige Sonderzeichen.

Siehe auch

\ No newline at end of file + Settings - Ripster

Settings

Die Seite Settings ist das Kontrollzentrum für Laufzeitverhalten, Standardwerte und Automatisierung. Alles, was spätere Jobs automatisch tun oder vorschlagen, wird hier vorbereitet.

Tab-Überblick

Tab Zweck
Konfiguration alle fachlichen Einstellungen aus der GUI
Scripte einzelne Bash-Skripte anlegen, testen und sortieren
Skriptketten mehrstufige Abläufe aus Skript- und Warte-Schritten bauen
Encode-Presets eigene Video-Presets und Standard-Zuordnungen pflegen
Cronjobs zeitgesteuerte Ausführung von Skripten oder Ketten

Tab Konfiguration

Bedienlogik

  1. Felder ändern
  2. Änderungen speichern klicken
  3. erst dann gelten die neuen Werte für künftige Starts, Reviews oder Scheduler

Ausnahmen:

  • Expertenmodus wird sofort gespeichert
  • Buttons wie PushOver Test, Coverarts prüfen oder der MakeMKV-Betakey-Import lösen direkte Aktionen aus

Toolbar-Aktionen

  • Änderungen speichern: schreibt nur geänderte Felder
  • Änderungen verwerfen: setzt den Formularzustand zurück
  • Neu laden: lädt Schema und Werte neu
  • PushOver Test: sendet eine Testnachricht mit den aktuellen PushOver-Werten
  • Coverarts prüfen: startet den Coverart-Recovery-Lauf sofort

Was die Kategorien im Alltag steuern

Benachrichtigungen

Hier steuerst du zwei Dinge:

  • ob und wohin Ripster PushOver-Nachrichten sendet
  • bei welchen Ereignissen Ripster überhaupt benachrichtigt

Wichtig:

  • PushOver aktiviert ist der Master-Schalter
  • Bei manueller Auswahl senden ist besonders relevant für Playlist-, RAW- oder Titelentscheidungen
  • der Expertenmodus blendet zusätzliche technische Felder in der gesamten Settings-Seite ein

Laufwerk

Diese Kategorie beeinflusst, wie Ripster optische Laufwerke findet und überwacht.

Typische Fragen:

  • Soll Ripster Laufwerke automatisch erkennen?
  • Soll ein bestimmtes Laufwerk fest an einen MakeMKV-Index gebunden werden?
  • Soll das Laufwerk nach erfolgreichem Rip automatisch auswerfen?

Das ist vor allem wichtig bei:

  • mehreren Laufwerken
  • USB-SATA-Adaptern
  • Hosts mit instabilen Device-Namen

Logging

Diese Felder ändern nicht die Job-Logs auf Platte, sondern die Ausgabe im Server-Terminal.

Damit steuerst du zum Beispiel:

  • ob start.sh oder ein Terminal-Run sehr gesprächig sein darf
  • ob HTTP-Requests im Terminal sichtbar sein sollen
  • ob DEBUG/INFO/WARN/ERROR dort mitlaufen

Metadaten

Hier legst du fest, wie Ripster mit TMDb, Covern und NFO-Dateien umgeht.

Besonders wichtig:

  • ohne TMDb Read Access Token funktionieren Film-/Seriensuche und Neu-Zuordnung nur eingeschränkt oder gar nicht
  • Film-Sprache und Fallback Sprache bestimmen, welche Titel, Beschreibungen und Staffelinformationen bevorzugt werden
  • Coverart-Nachladen aktiv hilft bei nachträglich fehlenden Postern/Covern

Monitoring

Steuert das Hardware-Monitoring für:

  • CPU
  • RAM
  • GPU
  • Speicherstände

Diese Werte erscheinen:

  • kompakt im Ripper
  • ausführlich in der Seite Hardware

Pfade

Hier legst du fest, wohin Ripster schreibt und wie Dateien benannt werden.

Die Felder steuern:

  • RAW-Verzeichnisse pro Medium
  • Zielordner für Filme, Serien, CDs, Audiobooks, Converter und Downloads
  • Eigentümer per user:gruppe
  • Templates für Datei- und Ordnernamen

Praxisbeispiele:

  • Serien getrennt von Filmen ablegen
  • RAW auf große HDD, Final-Output auf NAS
  • Audiobooks kapitelweise in Unterordnern strukturieren

Converter

Diese Kategorie wirkt nur auf die Seite Converter.

Sie steuert:

  • welche Dateiendungen der Upload und der Verzeichnisscan akzeptieren
  • ob der Converter-RAW-Baum automatisch neu gescannt wird
  • wie häufig dieses Polling läuft

Tools

Diese Kategorie entscheidet über das technische Verhalten der eigentlichen Pipeline.

Dazu gehören:

  • Pfade/Befehle für externe Tools
  • MakeMKV-Filter und Rip-Modi
  • HandBrake-Presets und Extra-Args
  • Vorauswahl von Audio-/Untertitelsprachen in der Review
  • Ausgabeformate
  • Queue- und Parallelitätsregeln
  • Timeout für Script-Tests

Für die Nutzer-Workflows besonders relevant:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)
  • HandBrake Preset und HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabhängig)

Kategorie Pfade: Besondere Interaktion

Die Pfad-Kategorie hat eine eigene Darstellung:

  • Tabelle Effektive Pfade: zeigt die aktuell wirklich verwendeten Laufzeitpfade inklusive Fallbacks
  • Accordion pro Bereich wie Blu-ray, DVD, CD / Audio, Audiobook, Converter, Downloads, Logs
  • Owner-Felder (*_owner) erscheinen direkt beim zugehörigen Pfad
  • Owner-Felder sind deaktiviert, solange der zugehörige Pfad leer ist

Spezial-Editoren

  • drive_devices: Editor für mehrere Laufwerke mit Pfad und MakeMKV-Index
  • external_storage_paths: Liste aus Anzeigename und Pfad für die Speicheranzeige
  • converter_scan_extensions: Auswahl der erlaubten Upload-/Scan-Endungen
  • makemkv_registration_key: inkl. Betakey-Hinweis und Übernahme-Button

Wichtig für Reviews und Workflows

Die Seite Settings bestimmt direkt, was Nutzer später im Workflow sehen:

  • Playlist-Kandidaten werden durch Minimale Titellänge und TMDb Runtime-Abzug ... beeinflusst
  • Audio-/Untertitel-Vorauswahlen in Bereit zum Encodieren hängen an den Review-Sprachfeldern
  • automatisch vorgeschlagene Presets hängen an den Standard-Zuordnungen unter Encode-Presets
  • Queue-Verhalten im Ripper hängt an den drei Parallelitätsfeldern plus Audio CDs: Queue-Reihenfolge überspringen

Tab Scripte

Funktionen:

  • Skript anlegen
  • Skript bearbeiten
  • Skript löschen
  • Skript testen
  • Reihenfolge per Drag-and-Drop ändern
  • Favorit markieren

Das Testergebnis zeigt:

  • Erfolg oder Fehler
  • Exit-Code
  • Dauer
  • stdout/stderr
  • Timeout, falls Script-Test Timeout (ms) greift

Tab Skriptketten

Skriptketten bestehen aus Schritten:

  • Skript
  • Warten (Sekunden)

Funktionen:

  • Ketten anlegen, bearbeiten, löschen
  • Reihenfolge der Ketten ändern
  • einzelne Ketten testen
  • Schritte innerhalb der Kette per Drag-and-Drop sortieren

Wichtig:

  • dieselben Skripte können sowohl in Jobs als auch in Ketten und Cronjobs wiederverwendet werden

Tab Encode-Presets

Hier werden Video-Standards für Disc- und Converter-Workflows verwaltet.

Standard-Zuordnungen

Es gibt vier feste Slots:

  • Blu-ray Film
  • Blu-ray Serie
  • DVD Film
  • DVD Serie

Wenn für einen Workflow hier ein Default gesetzt ist, erscheint dieses User-Preset später in der Review bereits vorausgewählt.

Preset-Inhalt

Ein User-Preset besteht aus:

  • Name
  • Medientyp (all, bluray, dvd)
  • HandBrake-Preset
  • Extra Args
  • optionaler Beschreibung

Tab Cronjobs

Funktionen:

  • Cronjob anlegen, bearbeiten, löschen
  • Cron-Ausdruck live validieren
  • Quelle wählen: Skript oder Skriptkette
  • Aktiv- und PushOver-Status pro Job setzen
  • Jetzt ausführen
  • Lauf-Logs öffnen

Die Runtime-Aktivitäten der laufenden Cronjobs werden zusätzlich live angezeigt.

Expertenbereich: Activation Bytes Cache

Dieser Block wird nur im Expertenmodus angezeigt.

Er zeigt lokal bekannte AAX-Activation-Bytes mit:

  • Prüfsumme
  • Activation Bytes
  • Speicherzeitpunkt

Das hilft bei Audiobook-Workflows, wenn dieselbe Datei oder derselbe Hash später erneut auftaucht.

Validierung von Template-Feldern

Template-Felder akzeptieren nur:

  • Buchstaben und Ziffern
  • Leerzeichen
  • _ und -
  • Platzhalter in {...} oder ${...}
  • / für Unterordner

Damit verhindert Ripster fehlerhafte Dateinamen schon beim Speichern.

Siehe auch

\ No newline at end of file diff --git a/site/gui/tmdb-migration/index.html b/site/gui/tmdb-migration/index.html new file mode 100644 index 0000000..9bdca29 --- /dev/null +++ b/site/gui/tmdb-migration/index.html @@ -0,0 +1 @@ + TMDb Migration - Ripster

TMDb Migration

Die Seite TMDb Migration ist eine Sonderansicht für ältere Bestandsjobs, die noch nicht als auf TMDb migriert markiert sind.

Zugriff

  • Direktlink: /tmdb-migration
  • nicht in der normalen Top-Navigation verlinkt

Wofür die Seite gedacht ist

Typische Einsatzfälle:

  • Altbestand aus früheren Ständen bereinigen
  • mehrere Jobs nacheinander auf aktuelle TMDb-Metadaten umstellen
  • Historie konsistent auf den heutigen Metadaten-Workflow bringen

Funktionsweise

Die Seite lädt offene Migrationskandidaten und zeigt:

  • Job-ID
  • Titel
  • Jahr
  • Medium
  • aktuellen Status

Aktionen:

  • Liste neu laden
  • Start
  • Stop

Ablauf einer Sequenz

  1. Jobliste laden
  2. Start
  3. der bekannte TMDb-Metadaten-Dialog öffnet sich für den ersten Job
  4. nach erfolgreicher Übernahme plant Ripster den nächsten Job mit Cooldown

Wichtig:

  • zwischen zwei Jobs liegt bewusst eine Wartezeit von mindestens 10 Sekunden
  • damit wird die TMDb-API bei Serienmigrationen nicht unnötig belastet

Relevante Settings

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache

Ohne diese Einstellungen ist die Migration nicht sinnvoll nutzbar.

\ No newline at end of file diff --git a/site/index.html b/site/index.html index 98ac41c..a253943 100644 --- a/site/index.html +++ b/site/index.html @@ -1 +1 @@ - Ripster

Ripster Handbuch

Diese Dokumentation ist als vollständiges Benutzerhandbuch aufgebaut: tägliche Bedienung zuerst, technische Referenz danach.

Einstieg in 3 Schritten

  1. Installation: Installation
  2. Betriebskonfiguration: Ersteinrichtung
  3. erster End-to-End-Lauf: Erster Lauf

Was das Handbuch abdeckt

  • alle GUI-Seiten mit Aktionen und Wirkung
  • vollständige Workflows für Film, Serie und Multipart
  • Queue-, Job-, Container- und Recovery-Verhalten
  • detaillierte Settings-Wirkung inklusive Fallbacks

Empfohlene Lesereihenfolge

  1. Benutzerhandbuch Überblick
  2. GUI-Seiten
  3. Workflows aus Nutzersicht
  4. Einstellungsreferenz
  5. bei Bedarf technischer Tiefgang im Anhang
\ No newline at end of file + Ripster

Ripster Handbuch

Diese Dokumentation ist als vollständiges Benutzerhandbuch aufgebaut: tägliche Bedienung zuerst, technische Referenz danach.

Einstieg in 3 Schritten

  1. Installation: Installation
  2. Betriebskonfiguration: Ersteinrichtung
  3. erster End-to-End-Lauf: Erster Lauf

Was das Handbuch abdeckt

  • alle GUI-Seiten mit Aktionen und Wirkung
  • vollständige Workflows für Film, Serie und Multipart
  • Queue-, Job-, Container- und Recovery-Verhalten
  • detaillierte Settings-Wirkung inklusive Fallbacks

Empfohlene Lesereihenfolge

  1. Benutzerhandbuch Überblick
  2. GUI-Seiten
  3. Workflows aus Nutzersicht
  4. Einstellungsreferenz
  5. bei Bedarf technischer Tiefgang im Anhang
\ No newline at end of file diff --git a/site/pipeline/encoding/index.html b/site/pipeline/encoding/index.html index 86662fa..d41dd74 100644 --- a/site/pipeline/encoding/index.html +++ b/site/pipeline/encoding/index.html @@ -1,4 +1,4 @@ - Encode-Planung & Track-Auswahl - Ripster

Encode-Planung & Track-Auswahl

Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.


Ablauf

Quelle bestimmen (Disc/RAW)
+ Encode-Planung & Track-Auswahl - Ripster      

Encode-Planung & Track-Auswahl

Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.


Ablauf

Quelle bestimmen (Disc/RAW)
   -> HandBrake-Scan (--scan --json)
   -> Plan erstellen (Titel, Audio, Untertitel)
   -> Status: Bereit zum Encodieren
diff --git a/site/pipeline/index.html b/site/pipeline/index.html
index 5d9798e..305ddf2 100644
--- a/site/pipeline/index.html
+++ b/site/pipeline/index.html
@@ -1 +1 @@
- Anhang: Pipeline intern - Ripster      

Anhang: Pipeline intern

Dieser Abschnitt beschreibt die technische Pipeline-Logik hinter den UI-Workflows.

  • Workflow & Zustände


    Zustandsmodell, Übergänge, Queue-Verhalten.

    Workflow

  • Encode-Planung


    Aufbereitung von Titeln/Tracks und Bestätigungslogik.

    Encoding

  • Playlist-Analyse


    Bewertung mehrdeutiger Blu-ray-Playlists.

    Playlist-Analyse

  • Pre-/Post-Encode-Ausführungen


    Skript- und Kettenlauf vor/nach dem Encoding.

    Encode-Skripte

Zurück zum Handbuch

\ No newline at end of file + Anhang: Pipeline intern - Ripster

Anhang: Pipeline intern

Dieser Abschnitt beschreibt die technische Pipeline-Logik hinter den UI-Workflows.

  • Workflow & Zustände


    Zustandsmodell, Übergänge, Queue-Verhalten.

    Workflow

  • Encode-Planung


    Aufbereitung von Titeln/Tracks und Bestätigungslogik.

    Encoding

  • Playlist-Analyse


    Bewertung mehrdeutiger Blu-ray-Playlists.

    Playlist-Analyse

  • Pre-/Post-Encode-Ausführungen


    Skript- und Kettenlauf vor/nach dem Encoding.

    Encode-Skripte

Zurück zum Handbuch

\ No newline at end of file diff --git a/site/pipeline/playlist-analysis/index.html b/site/pipeline/playlist-analysis/index.html index ab64e35..2f54569 100644 --- a/site/pipeline/playlist-analysis/index.html +++ b/site/pipeline/playlist-analysis/index.html @@ -1 +1 @@ - Playlist-Analyse - Ripster

Playlist-Analyse

Ripster analysiert bei Blu-ray-ähnlichen Quellen Playlists und fordert bei Mehrdeutigkeit eine manuelle Auswahl an.


Ziel

Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.


Eingabedaten

Die Analyse basiert auf MakeMKV-Infos (u. a. Playlist-/Segment-Struktur, Laufzeiten, Titelzuordnung).


Auswertung (vereinfacht)

Für Kandidaten werden u. a. berücksichtigt:

  • Laufzeit
  • Segment-Reihenfolge
  • Rückwärtssprünge/große Sprünge
  • Kohärenz linearer Segmentfolgen
  • Duplikatgruppen mit ähnlicher Laufzeit

Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.


Wann muss der Benutzer entscheiden?

Wenn nach Filterung mehr als ein relevanter Kandidat übrig bleibt, wechselt der Job in der GUI auf:

  • Warte auf Auswahl

Dann muss eine Playlist bestätigt werden, bevor der Workflow weiterläuft.


Konfigurationseinfluss

Feld in Settings Wirkung
Minimale Titellaenge (Minuten) Mindestlaufzeit für Kandidaten

Default ist aktuell 60 Minuten.


UI-Verhalten

Bei manueller Entscheidung zeigt das Ripper Kandidaten inkl. Score/Bewertung und markiert eine Empfehlung.

Nach Bestätigung:

  • mit vorhandenem RAW -> zurück zu Mediainfo-Pruefung
  • ohne RAW -> Startpfad über Startbereit / Rippen
\ No newline at end of file + Playlist-Analyse - Ripster

Playlist-Analyse

Ripster analysiert bei Blu-ray-ähnlichen Quellen Playlists und fordert bei Mehrdeutigkeit eine manuelle Auswahl an.


Ziel

Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.


Eingabedaten

Die Analyse basiert auf MakeMKV-Infos (u. a. Playlist-/Segment-Struktur, Laufzeiten, Titelzuordnung).


Auswertung (vereinfacht)

Für Kandidaten werden u. a. berücksichtigt:

  • Laufzeit
  • Segment-Reihenfolge
  • Rückwärtssprünge/große Sprünge
  • Kohärenz linearer Segmentfolgen
  • Duplikatgruppen mit ähnlicher Laufzeit

Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.


Wann muss der Benutzer entscheiden?

Wenn nach Filterung mehr als ein relevanter Kandidat übrig bleibt, wechselt der Job in der GUI auf:

  • Warte auf Auswahl

Dann muss eine Playlist bestätigt werden, bevor der Workflow weiterläuft.


Konfigurationseinfluss

Feld in Settings Wirkung
Minimale Titellänge (Minuten) Mindestlaufzeit für Kandidaten aus MakeMKV/Playlist-Analyse
TMDb Runtime-Abzug für Playlistfilter (%) lockert bei Bedarf die untere Laufzeitgrenze relativ zur TMDb-Laufzeit, damit leicht kürzere Hauptfassungen Kandidaten bleiben

Default ist aktuell 60 Minuten.


UI-Verhalten

Bei manueller Entscheidung zeigt der Ripper Kandidaten mit:

  • Playlist-Datei
  • Titel-ID
  • Laufzeit
  • Score
  • Empfehlung
  • Segment- und Audio-Vorschau

Nach Bestätigung:

  • mit vorhandenem RAW -> zurück zu Mediainfo-Pruefung
  • ohne RAW -> Startpfad über Startbereit / Rippen
\ No newline at end of file diff --git a/site/pipeline/post-encode-scripts/index.html b/site/pipeline/post-encode-scripts/index.html index eef65b4..c65d1b1 100644 --- a/site/pipeline/post-encode-scripts/index.html +++ b/site/pipeline/post-encode-scripts/index.html @@ -1,4 +1,4 @@ - Encode-Skripte (Pre & Post) - Ripster

Encode-Skripte (Pre & Post)

Ripster kann Skripte und Skript-Ketten vor und nach dem Encode ausführen.


Ablauf

Bereit zum Encodieren
+ Encode-Skripte (Pre & Post) - Ripster      

Encode-Skripte (Pre & Post)

Ripster kann Skripte und Skript-Ketten vor und nach dem Encode ausführen.


Ablauf

Bereit zum Encodieren
   -> Pre-Encode Skripte/Ketten
   -> HandBrake Encoding
   -> Post-Encode Skripte/Ketten
diff --git a/site/pipeline/workflow/index.html b/site/pipeline/workflow/index.html
index 6d10e6c..53e3833 100644
--- a/site/pipeline/workflow/index.html
+++ b/site/pipeline/workflow/index.html
@@ -1,4 +1,4 @@
- Workflow & Zustände - Ripster      

Workflow & Zustände

Ripster steuert den Ablauf als Zustandsmaschine.


Zustandsdiagramm (vereinfacht)

flowchart LR
+ Workflow & Zustände - Ripster      

Workflow & Zustände

Ripster steuert den Ablauf als Zustandsmaschine.


Zustandsdiagramm (vereinfacht)

flowchart LR
     A[Bereit] --> B[Medium erkannt]
     B --> C[Analyse]
     C --> D[Metadatenauswahl]
diff --git a/site/search/search_index.json b/site/search/search_index.json
index 5828d82..794d73b 100644
--- a/site/search/search_index.json
+++ b/site/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["de"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Ripster Handbuch","text":"

Diese Dokumentation ist als vollst\u00e4ndiges Benutzerhandbuch aufgebaut: t\u00e4gliche Bedienung zuerst, technische Referenz danach.

"},{"location":"#einstieg-in-3-schritten","title":"Einstieg in 3 Schritten","text":"
  1. Installation: Installation
  2. Betriebskonfiguration: Ersteinrichtung
  3. erster End-to-End-Lauf: Erster Lauf
"},{"location":"#was-das-handbuch-abdeckt","title":"Was das Handbuch abdeckt","text":"
  • alle GUI-Seiten mit Aktionen und Wirkung
  • vollst\u00e4ndige Workflows f\u00fcr Film, Serie und Multipart
  • Queue-, Job-, Container- und Recovery-Verhalten
  • detaillierte Settings-Wirkung inklusive Fallbacks
"},{"location":"#empfohlene-lesereihenfolge","title":"Empfohlene Lesereihenfolge","text":"
  1. Benutzerhandbuch \u00dcberblick
  2. GUI-Seiten
  3. Workflows aus Nutzersicht
  4. Einstellungsreferenz
  5. bei Bedarf technischer Tiefgang im Anhang
"},{"location":"api/","title":"Anhang: API-Referenz","text":"

REST- und WebSocket-Schnittstellen f\u00fcr Integration, Automatisierung und Debugging.

"},{"location":"api/#basis-url","title":"Basis-URL","text":"
http://localhost:3001\n

API-Prefix: /api

"},{"location":"api/#api-gruppen","title":"API-Gruppen","text":"
  • Health

    Service-Liveness.

    GET /api/health

  • Pipeline API

    Analyse, Start/Retry/Cancel, Queue, Re-Encode.

    Pipeline API

  • Settings API

    Einstellungen, Skripte/Ketten, User-Presets.

    Settings API

  • History API

    Job-Historie, Orphan-Import, L\u00f6schoperationen.

    History API

  • Cron API

    Zeitgesteuerte Skript-/Kettenausf\u00fchrung.

    Cron API

  • Converter API

    Datei-Explorer, Upload, Job-Verwaltung f\u00fcr den Converter.

    Converter API

  • Downloads API

    Download-Queue f\u00fcr Ausgabedateien aus der Job-Historie.

    Downloads API

  • Runtime Activities API

    Laufende und abgeschlossene Aktivit\u00e4ten (Skripte, Ketten, Cron, Tasks).

    Runtime Activities

  • :material-websocket: WebSocket Events

    Pipeline-, Queue-, Disk-, Settings-, Cron-, Converter- und Download-Events.

    WebSocket

"},{"location":"api/#hinweis","title":"Hinweis","text":"

Ripster hat keine eingebaute Authentifizierung und ist f\u00fcr lokalen, gesch\u00fctzten Betrieb gedacht.

"},{"location":"api/converter/","title":"Converter API","text":"

Endpunkte f\u00fcr den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.

Basis-Pfad: /api/converter

"},{"location":"api/converter/#scan-explorer","title":"Scan & Explorer","text":""},{"location":"api/converter/#get-apiconvertertree","title":"GET /api/converter/tree","text":"

Vollst\u00e4ndiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).

Response:

{\n  \"tree\": [\n    {\n      \"name\": \"filme\",\n      \"relPath\": \"filme\",\n      \"isDir\": true,\n      \"children\": [\n        {\n          \"name\": \"film.mkv\",\n          \"relPath\": \"filme/film.mkv\",\n          \"isDir\": false,\n          \"size\": 10485760\n        }\n      ]\n    }\n  ]\n}\n
"},{"location":"api/converter/#get-apiconverterbrowseparentrelpath","title":"GET /api/converter/browse?parent=relPath","text":"

DB-basierter Datei-Explorer. Gibt Eintr\u00e4ge f\u00fcr einen Unterordner zur\u00fcck.

Query-Parameter:

Parameter Typ Beschreibung parent string Relativer Pfad zum Unterordner (leer = Root)

Response:

{\n  \"entries\": [\n    {\n      \"id\": 1,\n      \"rel_path\": \"filme/film.mkv\",\n      \"is_dir\": false,\n      \"size\": 10485760,\n      \"job_id\": null\n    }\n  ],\n  \"rawDir\": \"/data/output/converter-raw\"\n}\n
"},{"location":"api/converter/#post-apiconverterscan","title":"POST /api/converter/scan","text":"

Manuellen Scan des converter_raw_dir ausl\u00f6sen. Aktualisiert converter_scan_entries in der DB.

Response:

{ \"result\": { \"added\": 3, \"removed\": 1 } }\n
"},{"location":"api/converter/#jobs-erstellen","title":"Jobs erstellen","text":""},{"location":"api/converter/#post-apiconverterjobsfrom-selection","title":"POST /api/converter/jobs/from-selection","text":"

Jobs aus im Datei-Explorer ausgew\u00e4hlten Dateien erstellen.

Body:

{\n  \"relPaths\": [\"filme/film.mkv\", \"musik/track.flac\"],\n  \"audioMode\": \"individual\"\n}\n
Feld Typ Beschreibung relPaths string[] Relative Pfade der ausgew\u00e4hlten Dateien audioMode string individual (ein Job pro Datei) oder shared (ein gemeinsamer Job)

Response:

{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\" }] }\n
"},{"location":"api/converter/#post-apiconvertercreate-jobs","title":"POST /api/converter/create-jobs","text":"

Jobs aus DB-Scan-Eintr\u00e4gen erstellen.

Body:

{\n  \"entries\": [\n    { \"relPath\": \"filme/film.mkv\", \"converterMediaType\": \"video\" }\n  ]\n}\n
"},{"location":"api/converter/#post-apiconverterupload","title":"POST /api/converter/upload","text":"

Dateien hochladen (Multipart, max. 50 Dateien).

Form-Felder:

Feld Typ Beschreibung files File[] Hochzuladende Dateien folderName string (Optional) Ziel-Unterordner

Response:

{\n  \"folders\": [{ \"folderRelPath\": \"upload-2026-03-30\", \"fileCount\": 2 }]\n}\n
"},{"location":"api/converter/#job-verwaltung","title":"Job-Verwaltung","text":""},{"location":"api/converter/#get-apiconverterjobs","title":"GET /api/converter/jobs","text":"

Alle Converter-Jobs zur\u00fcckgeben.

Response:

{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\", \"title\": \"film.mkv\" }] }\n
"},{"location":"api/converter/#get-apiconverterjobsjobid","title":"GET /api/converter/jobs/:jobId","text":"

Einzelnen Converter-Job abrufen.

"},{"location":"api/converter/#post-apiconverterjobsjobidconfig","title":"POST /api/converter/jobs/:jobId/config","text":"

Konfigurationsentwurf f\u00fcr einen Job speichern (persistiert in encode_plan_json).

Body: Partielles Konfig-Objekt (Ausgabeformat, Presets, Metadaten, Track-Auswahl).

"},{"location":"api/converter/#post-apiconverterjobsjobidassign-files","title":"POST /api/converter/jobs/:jobId/assign-files","text":"

Dateien einem bestehenden (noch nicht gestarteten) Job hinzuf\u00fcgen.

Body:

{ \"relPaths\": [\"musik/track2.flac\"] }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidremove-file","title":"POST /api/converter/jobs/:jobId/remove-file","text":"

Datei aus einem Job entfernen (per relativer Pfad).

Body:

{ \"relPath\": \"musik/track2.flac\" }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidremove-input","title":"POST /api/converter/jobs/:jobId/remove-input","text":"

Datei aus einem Job entfernen (per absolutem Eingabepfad).

Body:

{ \"inputPath\": \"/data/output/converter-raw/musik/track2.flac\" }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidstart","title":"POST /api/converter/jobs/:jobId/start","text":"

Job mit finaler Konfiguration starten.

Body:

{\n  \"converterMediaType\": \"video\",\n  \"outputFormat\": \"mkv\",\n  \"userPreset\": \"H.264 MKV 1080p30\",\n  \"trackSelection\": {},\n  \"handBrakeTitleId\": 1,\n  \"audioFormatOptions\": {}\n}\n
"},{"location":"api/converter/#post-apiconverterjobsjobidcancel","title":"POST /api/converter/jobs/:jobId/cancel","text":"

Laufenden Job abbrechen.

"},{"location":"api/converter/#delete-apiconverterjobsjobid","title":"DELETE /api/converter/jobs/:jobId","text":"

Job aus der DB l\u00f6schen.

"},{"location":"api/converter/#datei-operationen","title":"Datei-Operationen","text":"

Alle Datei-Operationen arbeiten direkt auf dem Dateisystem (ohne DB-Aktualisierung). Ein anschlie\u00dfender Scan-Aufruf synchronisiert die DB.

"},{"location":"api/converter/#delete-apiconverterfiles","title":"DELETE /api/converter/files","text":"

Datei oder Ordner l\u00f6schen.

Body:

{ \"relPath\": \"filme/film.mkv\" }\n
"},{"location":"api/converter/#post-apiconverterfilesrename","title":"POST /api/converter/files/rename","text":"

Datei oder Ordner umbenennen.

Body:

{ \"relPath\": \"filme/film.mkv\", \"newName\": \"film-neu.mkv\" }\n
"},{"location":"api/converter/#post-apiconverterfilesmove","title":"POST /api/converter/files/move","text":"

Datei oder Ordner verschieben.

Body:

{ \"relPath\": \"filme/film.mkv\", \"targetParentRelPath\": \"archiv\" }\n

targetParentRelPath = \"\" verschiebt in das Root-Verzeichnis.

"},{"location":"api/converter/#post-apiconverterfilesfolder","title":"POST /api/converter/files/folder","text":"

Neuen Ordner anlegen.

Body:

{ \"parentRelPath\": \"filme\", \"name\": \"neu\" }\n
"},{"location":"api/crons/","title":"Cron API","text":"

Ripster enth\u00e4lt ein eingebautes Cron-System f\u00fcr Skripte und Skript-Ketten (sourceType: script|chain).

"},{"location":"api/crons/#get-apicrons","title":"GET /api/crons","text":"

Listet alle Cron-Jobs.

{\n  \"jobs\": [\n    {\n      \"id\": 1,\n      \"name\": \"Nachtlauf Backup\",\n      \"cronExpression\": \"0 2 * * *\",\n      \"sourceType\": \"script\",\n      \"sourceId\": 3,\n      \"sourceName\": \"Backup-Skript\",\n      \"enabled\": true,\n      \"pushoverEnabled\": true,\n      \"lastRunAt\": \"2026-03-10T02:00:00.000Z\",\n      \"lastRunStatus\": \"success\",\n      \"nextRunAt\": \"2026-03-11T02:00:00.000Z\",\n      \"createdAt\": \"2026-03-01T10:00:00.000Z\",\n      \"updatedAt\": \"2026-03-10T02:00:05.000Z\"\n    }\n  ]\n}\n
"},{"location":"api/crons/#post-apicrons","title":"POST /api/crons","text":"

Erstellt Cron-Job.

{\n  \"name\": \"Nachtlauf Backup\",\n  \"cronExpression\": \"0 2 * * *\",\n  \"sourceType\": \"script\",\n  \"sourceId\": 3,\n  \"enabled\": true,\n  \"pushoverEnabled\": true\n}\n

Response: 201 mit { \"job\": { ... } }

"},{"location":"api/crons/#get-apicronsid","title":"GET /api/crons/:id","text":"

Response:

{ \"job\": { \"id\": 1, \"name\": \"...\" } }\n
"},{"location":"api/crons/#put-apicronsid","title":"PUT /api/crons/:id","text":"

Aktualisiert Cron-Job. Felder wie bei POST.

Response:

{ \"job\": { ... } }\n
"},{"location":"api/crons/#delete-apicronsid","title":"DELETE /api/crons/:id","text":"

Response:

{ \"removed\": { \"id\": 1, \"name\": \"Nachtlauf Backup\" } }\n
"},{"location":"api/crons/#get-apicronsidlogs","title":"GET /api/crons/:id/logs","text":"

Liefert Ausf\u00fchrungs-Logs.

Query-Parameter:

Parameter Typ Default Beschreibung limit number 20 Anzahl Eintr\u00e4ge, max. 100

Response:

{\n  \"logs\": [\n    {\n      \"id\": 42,\n      \"cronJobId\": 1,\n      \"startedAt\": \"2026-03-10T02:00:01.000Z\",\n      \"finishedAt\": \"2026-03-10T02:00:05.000Z\",\n      \"status\": \"success\",\n      \"output\": \"Backup abgeschlossen.\",\n      \"errorMessage\": null\n    }\n  ]\n}\n

status: running | success | error

"},{"location":"api/crons/#post-apicronsidrun","title":"POST /api/crons/:id/run","text":"

Triggert Job manuell (asynchron).

Response:

{ \"triggered\": true, \"cronJobId\": 1 }\n

Wenn Job bereits l\u00e4uft: 409.

"},{"location":"api/crons/#post-apicronsvalidate-expression","title":"POST /api/crons/validate-expression","text":"

Validiert 5-Felder-Cron-Ausdruck und berechnet n\u00e4chsten Lauf.

Request:

{ \"cronExpression\": \"*/15 * * * *\" }\n

G\u00fcltige Response:

{\n  \"valid\": true,\n  \"nextRunAt\": \"2026-03-10T14:15:00.000Z\"\n}\n

Ung\u00fcltige Response:

{\n  \"valid\": false,\n  \"error\": \"Cron-Ausdruck muss genau 5 Felder haben (Minute Stunde Tag Monat Wochentag).\",\n  \"nextRunAt\": null\n}\n
"},{"location":"api/crons/#cron-format","title":"Cron-Format","text":"

Ripster unterst\u00fctzt 5 Felder:

Minute Stunde Tag Monat Wochentag\n

Beispiele:

  • 0 2 * * * t\u00e4glich 02:00
  • */15 * * * * alle 15 Minuten
  • 0 6 * * 1-5 Mo-Fr 06:00
"},{"location":"api/crons/#websocket-events-zu-cron","title":"WebSocket-Events zu Cron","text":"
  • CRON_JOBS_UPDATED bei Create/Update/Delete
  • CRON_JOB_UPDATED bei Laufzeitstatus (running -> success|error)
"},{"location":"api/downloads/","title":"Downloads API","text":"

Endpunkte f\u00fcr die Download-Queue. Ausgabedateien aus der Job-Historie k\u00f6nnen als ZIP heruntergeladen werden.

Basis-Pfad: /api/downloads

"},{"location":"api/downloads/#get-apidownloads","title":"GET /api/downloads","text":"

Liste aller Download-Eintr\u00e4ge plus Zusammenfassung.

Response:

{\n  \"items\": [\n    {\n      \"id\": \"dl-42-raw\",\n      \"jobId\": 42,\n      \"target\": \"raw\",\n      \"status\": \"ready\",\n      \"archiveName\": \"Job_42_raw.zip\",\n      \"outputPath\": null,\n      \"createdAt\": \"2026-03-30T10:00:00.000Z\",\n      \"updatedAt\": \"2026-03-30T10:01:00.000Z\",\n      \"errorMessage\": null\n    }\n  ],\n  \"summary\": {\n    \"total\": 3,\n    \"pending\": 1,\n    \"processing\": 0,\n    \"ready\": 1,\n    \"failed\": 1\n  }\n}\n

Status-Werte:

Status Beschreibung pending In der Queue, noch nicht gestartet processing ZIP wird gerade erstellt ready ZIP fertig, Download verf\u00fcgbar failed Fehler bei der Erstellung"},{"location":"api/downloads/#get-apidownloadssummary","title":"GET /api/downloads/summary","text":"

Nur die Zusammenfassung der Download-Queue (ohne Item-Liste).

Response:

{\n  \"summary\": {\n    \"total\": 3,\n    \"pending\": 1,\n    \"processing\": 0,\n    \"ready\": 1,\n    \"failed\": 1\n  }\n}\n
"},{"location":"api/downloads/#post-apidownloadshistoryjobid","title":"POST /api/downloads/history/:jobId","text":"

Job-Ausgabe in die Download-Queue einreihen.

Parameter:

Parameter Typ Beschreibung jobId number ID des Jobs in der Historie

Body:

{\n  \"target\": \"raw\",\n  \"outputPath\": null\n}\n
Feld Typ Default Beschreibung target string raw raw (RAW-Dateien) oder movie (Ausgabedateien) outputPath string null Optionaler expliziter Ausgabepfad

Response (201 Created):

{\n  \"created\": true,\n  \"id\": \"dl-42-raw\",\n  \"status\": \"pending\",\n  \"summary\": { \"total\": 1, \"pending\": 1, \"processing\": 0, \"ready\": 0, \"failed\": 0 }\n}\n

Ist der Eintrag bereits vorhanden, wird 201 durch 200 ersetzt und created: false zur\u00fcckgegeben.

"},{"location":"api/downloads/#get-apidownloadsidfile","title":"GET /api/downloads/:id/file","text":"

Fertige ZIP-Datei herunterladen.

Parameter:

Parameter Typ Beschreibung id string Download-ID (z. B. dl-42-raw)

Response: Datei-Download (Content-Disposition: attachment).

Schl\u00e4gt fehl mit 404, wenn kein Download-Eintrag mit dieser ID existiert oder die Datei noch nicht bereit ist.

"},{"location":"api/downloads/#delete-apidownloadsid","title":"DELETE /api/downloads/:id","text":"

Download-Eintrag l\u00f6schen (auch fertige ZIP-Dateien werden vom Dateisystem entfernt).

Response:

{\n  \"ok\": true,\n  \"summary\": { \"total\": 2, \"pending\": 0, \"processing\": 0, \"ready\": 2, \"failed\": 0 }\n}\n
"},{"location":"api/downloads/#websocket","title":"WebSocket","text":"

Status\u00e4nderungen werden \u00fcber DOWNLOADS_UPDATED in Echtzeit gemeldet. Vollst\u00e4ndige Dokumentation: WebSocket Events.

"},{"location":"api/history/","title":"History API","text":"

Endpunkte f\u00fcr Job-Historie, Metadaten-Nachpflege, Orphan-Import und L\u00f6schoperationen.

"},{"location":"api/history/#get-apihistory","title":"GET /api/history","text":"

Liefert Jobs mit optionalen Filtern.

Query-Parameter:

Parameter Typ Beschreibung status string Einzelstatus-Filter (legacy-kompatibel). statuses string Mehrfachstatus als CSV, z. B. FINISHED,ERROR. search string Suche in Titel-/IMDb-Feldern. limit number Maximale Anzahl Ergebnisse. lite bool Ohne Dateisystem-Checks (schneller). includeChildren bool Child-Jobs (z. B. Serien-/Multipart-Kinder) explizit einbeziehen.

Beispiel:

GET /api/history?statuses=FINISHED,ERROR&search=Inception&limit=50&lite=1\n

Response (Beispiel):

{\n  \"jobs\": [\n    {\n      \"id\": 42,\n      \"status\": \"FINISHED\",\n      \"title\": \"Inception\",\n      \"job_kind\": \"bluray\",\n      \"raw_path\": \"/mnt/raw/Inception - RAW - job-42\",\n      \"output_path\": \"/mnt/movies/Inception (2010)/Inception (2010).mkv\",\n      \"mediaType\": \"bluray\",\n      \"ripSuccessful\": true,\n      \"encodeSuccess\": true,\n      \"created_at\": \"2026-03-10T08:00:00.000Z\",\n      \"updated_at\": \"2026-03-10T10:00:00.000Z\"\n    }\n  ]\n}\n
"},{"location":"api/history/#get-apihistoryid","title":"GET /api/history/:id","text":"

Liefert Job-Detail.

Query-Parameter:

Parameter Typ Standard Beschreibung includeLogs bool false Prozesslog laden. includeLiveLog bool false Live-/Tail-Log laden. includeAllLogs bool false vollst\u00e4ndiges Log statt Tail. logTailLines number 800 Tail-L\u00e4nge falls nicht includeAllLogs. lite bool false Detailantwort ohne FS-Checks.

Response (Beispiel):

{\n  \"job\": {\n    \"id\": 42,\n    \"status\": \"FINISHED\",\n    \"makemkvInfo\": {},\n    \"mediainfoInfo\": {},\n    \"handbrakeInfo\": {},\n    \"encodePlan\": {},\n    \"log\": \"...\",\n    \"log_count\": 1,\n    \"logMeta\": {\n      \"loaded\": true,\n      \"total\": 800,\n      \"returned\": 800,\n      \"truncated\": true\n    }\n  }\n}\n
"},{"location":"api/history/#get-apihistoryorphan-raw","title":"GET /api/history/orphan-raw","text":"

Sucht RAW-Ordner ohne zugeh\u00f6rigen Job.

"},{"location":"api/history/#post-apihistoryorphan-rawimport","title":"POST /api/history/orphan-raw/import","text":"

Importiert einen RAW-Ordner als Job und triggert optional die Analyse des Imports.

Request:

{ \"rawPath\": \"/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99\" }\n

Response (Beispiel):

{\n  \"job\": { \"id\": 77, \"status\": \"FINISHED\" },\n  \"activation\": { \"started\": true },\n  \"activationError\": null\n}\n
"},{"location":"api/history/#post-apihistoryidomdbassign","title":"POST /api/history/:id/omdb/assign","text":"

Weist OMDb-/Filmdaten nachtr\u00e4glich zu.

"},{"location":"api/history/#post-apihistoryidcdassign","title":"POST /api/history/:id/cd/assign","text":"

Weist CD-Metadaten (z. B. MusicBrainz) nachtr\u00e4glich zu.

"},{"location":"api/history/#post-apihistoryiderrorack","title":"POST /api/history/:id/error/ack","text":"

Quittiert einen Fehlerzustand im Historieneintrag.

"},{"location":"api/history/#get-apihistoryiddelete-preview","title":"GET /api/history/:id/delete-preview","text":"

Liefert eine Vorschau der l\u00f6schbaren Pfade (inkl. Scope auf verkn\u00fcpfte Jobs).

Query-Parameter:

Parameter Typ Standard Beschreibung includeRelated bool true Verkn\u00fcpfte Jobs in die Vorschau einbeziehen.

Response (Beispiel):

{\n  \"preview\": {\n    \"jobId\": 42,\n    \"relatedJobs\": [{ \"id\": 42 }, { \"id\": 73 }],\n    \"pathCandidates\": {\n      \"raw\": [{ \"path\": \"/mnt/raw/...\", \"exists\": true, \"isDirectory\": true }],\n      \"movie\": [{ \"path\": \"/mnt/movies/...\", \"exists\": true, \"isDirectory\": true }]\n    }\n  }\n}\n
"},{"location":"api/history/#post-apihistoryiddelete-files","title":"POST /api/history/:id/delete-files","text":"

L\u00f6scht Dateien eines Jobs, beh\u00e4lt DB-Eintrag.

Request:

{\n  \"target\": \"both\",\n  \"includeRelated\": true,\n  \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n  \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n

target: raw | movie | both

selectedRawPaths / selectedMoviePaths sind optional und begrenzen die L\u00f6schung auf ausgew\u00e4hlte Pfade aus der Vorschau.

"},{"location":"api/history/#post-apihistoryiddelete","title":"POST /api/history/:id/delete","text":"

L\u00f6scht Job aus DB; optional auch Dateien.

Request:

{\n  \"target\": \"both\",\n  \"includeRelated\": true,\n  \"resetDriveState\": false,\n  \"keepDetectedDevice\": true,\n  \"preserveRawForImportJobs\": false,\n  \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n  \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n

target: none | raw | movie | both

Response (Beispiel):

{\n  \"deleted\": true,\n  \"jobId\": 42,\n  \"fileTarget\": \"both\",\n  \"fileSummary\": {\n    \"target\": \"both\",\n    \"raw\": { \"filesDeleted\": 10 },\n    \"movie\": { \"filesDeleted\": 1 }\n  },\n  \"uiReset\": {\n    \"reset\": true,\n    \"state\": \"IDLE\"\n  },\n  \"safeguards\": {\n    \"containsOrphanRawImportJob\": false,\n    \"resetDriveStateApplied\": false,\n    \"keepDetectedDeviceApplied\": true\n  }\n}\n
"},{"location":"api/history/#hinweise","title":"Hinweise","text":"
  • Ein aktiver Pipeline-Job kann nicht gel\u00f6scht werden (409).
  • L\u00f6schoperationen sind irreversibel.
  • Bei Serien-/Multipart-Containern steuern includeRelated und Pfadselektionen den genauen Scope.
"},{"location":"api/pipeline/","title":"Pipeline API","text":"

Endpunkte zur Steuerung des Pipeline-Workflows.

"},{"location":"api/pipeline/#get-apipipelinestate","title":"GET /api/pipeline/state","text":"

Liefert aktuellen Pipeline- und Hardware-Monitoring-Snapshot.

Response (Beispiel):

{\n  \"pipeline\": {\n    \"state\": \"READY_TO_ENCODE\",\n    \"activeJobId\": 42,\n    \"progress\": 0,\n    \"eta\": null,\n    \"statusText\": \"Mediainfo best\u00e4tigt - Encode manuell starten\",\n    \"context\": {\n      \"jobId\": 42\n    },\n    \"jobProgress\": {\n      \"42\": {\n        \"state\": \"MEDIAINFO_CHECK\",\n        \"progress\": 68.5,\n        \"eta\": null,\n        \"statusText\": \"MEDIAINFO_CHECK 68.50%\"\n      }\n    },\n    \"queue\": {\n      \"maxParallelJobs\": 1,\n      \"runningCount\": 1,\n      \"queuedCount\": 2,\n      \"runningJobs\": [],\n      \"queuedJobs\": []\n    }\n  },\n  \"hardwareMonitoring\": {\n    \"enabled\": true,\n    \"intervalMs\": 5000,\n    \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n    \"sample\": {\n      \"cpu\": {},\n      \"memory\": {},\n      \"gpu\": {},\n      \"storage\": {}\n    },\n    \"error\": null\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelineanalyze","title":"POST /api/pipeline/analyze","text":"

Startet Disc-Analyse und legt Job an.

Response:

{\n  \"result\": {\n    \"jobId\": 42,\n    \"detectedTitle\": \"INCEPTION\",\n    \"omdbCandidates\": []\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinerescan-disc","title":"POST /api/pipeline/rescan-disc","text":"

Erzwingt erneute Laufwerkspr\u00fcfung.

Response (Beispiel):

{\n  \"result\": {\n    \"present\": true,\n    \"changed\": true,\n    \"emitted\": \"discInserted\",\n    \"device\": {\n      \"path\": \"/dev/sr0\",\n      \"discLabel\": \"INCEPTION\",\n      \"mediaProfile\": \"bluray\"\n    }\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinerescan-drive","title":"POST /api/pipeline/rescan-drive","text":"

Erzwingt Rescan f\u00fcr ein konkretes Laufwerk.

Request:

{ \"devicePath\": \"/dev/sr0\" }\n
"},{"location":"api/pipeline/#get-apipipelineomdbsearchq","title":"GET /api/pipeline/omdb/search?q=

OMDb-Titelsuche.

Response:

{\n  \"results\": [\n    {\n      \"imdbId\": \"tt1375666\",\n      \"title\": \"Inception\",\n      \"year\": \"2010\",\n      \"type\": \"movie\",\n      \"poster\": \"https://...\"\n    }\n  ]\n}\n
","text":""},{"location":"api/pipeline/#get-apipipelinetmdbseriessearchqseason","title":"GET /api/pipeline/tmdb/series/search?q=&season=

TMDb-Seriensuche (f\u00fcr Serien-Workflow bei DVD/Blu-ray).

","text":""},{"location":"api/pipeline/#get-apipipelinecddrives","title":"GET /api/pipeline/cd/drives

Liefert Snapshot der aktuell bekannten CD-Laufwerke.

","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzsearchq","title":"GET /api/pipeline/cd/musicbrainz/search?q=

MusicBrainz-Suche f\u00fcr CD-Metadaten.

","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzreleasembid","title":"GET /api/pipeline/cd/musicbrainz/release/:mbId

L\u00e4dt Release-Details zu einer MusicBrainz-ID.

","text":""},{"location":"api/pipeline/#post-apipipelinecdselect-metadata","title":"POST /api/pipeline/cd/select-metadata

\u00dcbernimmt CD-Metadaten f\u00fcr einen Job.

Request (Beispiel):

{\n  \"jobId\": 91,\n  \"title\": \"Album\",\n  \"artist\": \"Artist\",\n  \"year\": 2020,\n  \"mbId\": \"f5093c06-23e3-404f-aeaa-40f72885ee3a\",\n  \"coverUrl\": \"https://...\",\n  \"tracks\": []\n}\n
","text":""},{"location":"api/pipeline/#post-apipipelinecdstartjobid","title":"POST /api/pipeline/cd/start/:jobId

Startet/queued CD-Rip mit Format-/Script-/Chain-Konfiguration.

","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookupload","title":"POST /api/pipeline/audiobook/upload

Upload von AAX-Datei (Multipart/FormData).

FormData-Felder:

  • file (Pflicht)
  • format (optional)
  • startImmediately (optional)
","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookpending-activation","title":"GET /api/pipeline/audiobook/pending-activation

Zeigt AAX-Jobs mit fehlenden Activation-Bytes.

","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookstartjobid","title":"POST /api/pipeline/audiobook/start/:jobId

Startet Audiobook-Job mit optionaler Konfiguration.

","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookjobs","title":"GET /api/pipeline/audiobook/jobs

Liefert Audiobook-Jobliste.

","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookoutput-tree","title":"GET /api/pipeline/audiobook/output-tree

Read-only Baumansicht des Audiobook-Ausgabeordners.

","text":""},{"location":"api/pipeline/#post-apipipelineselect-metadata","title":"POST /api/pipeline/select-metadata

Setzt Metadaten (und optional Playlist) f\u00fcr einen Job.

Request:

{\n  \"jobId\": 42,\n  \"title\": \"Inception\",\n  \"year\": 2010,\n  \"imdbId\": \"tt1375666\",\n  \"poster\": \"https://...\",\n  \"fromOmdb\": true,\n  \"selectedPlaylist\": \"00800\"\n}\n

Wichtige optionale Felder:

  • selectedHandBrakeTitleId / selectedHandBrakeTitleIds: Titel-Auswahl f\u00fcr Review/MediaInfo.
  • metadataProvider: omdb oder tmdb.
  • workflowKind: bei Disc-Jobs typischerweise film oder series.
  • discNumber: Pflicht f\u00fcr Serien-Disc-Zuordnung (workflowKind=series).
  • duplicateAction: Duplikatverhalten bei Film-Metadaten (allow_new oder multipart_movie).
  • existingJobId: optionaler Referenzjob f\u00fcr multipart_movie.
  • existingDiscNumber: Disc-Nummer des bestehenden Jobs f\u00fcr multipart_movie.

Response:

{ \"job\": { \"id\": 42, \"status\": \"READY_TO_START\" } }\n

Konflikt-Response (Beispiel, HTTP 409):

{\n  \"message\": \"Metadaten bereits in der Historie gefunden. Bitte Auswahl \u00fcbernehmen oder Multipart movie w\u00e4hlen.\",\n  \"details\": [\n    {\n      \"code\": \"METADATA_DUPLICATE_FOUND\",\n      \"mediaProfile\": \"bluray\",\n      \"existingJob\": {\n        \"id\": 17,\n        \"title\": \"Inception\",\n        \"year\": 2010,\n        \"status\": \"FINISHED\",\n        \"jobKind\": \"bluray\",\n        \"discNumber\": 1,\n        \"isMultipartMovie\": false\n      }\n    }\n  ]\n}\n

Relevante Fehlercodes (POST /api/pipeline/select-metadata):

Code Bedeutung METADATA_DUPLICATE_FOUND Film-Metadaten existieren bereits in der Historie (Konfliktdialog im UI). MULTIPART_DISC_REQUIRED F\u00fcr Multipart fehlen Disc-Nummern (discNumber/existingDiscNumber). MULTIPART_DISC_ALREADY_EXISTS Disc-Nummer im Multipart-Container bereits vergeben oder doppelt. MULTIPART_MEDIA_MISMATCH Multipart nur bei gleichem Medientyp (DVD oder Blu-ray). MULTIPART_SERIES_NOT_ALLOWED Multipart ist nur f\u00fcr Film-Jobs erlaubt, nicht f\u00fcr Serien-Workflow. MULTIPART_METADATA_MISMATCH Ausgew\u00e4hlter bestehender Job passt nicht zu den Film-Metadaten. SERIES_DISC_ALREADY_EXISTS Serien-Disc-Nummer innerhalb einer Staffel bereits vorhanden.","text":""},{"location":"api/pipeline/#post-apipipelinejobsjobidraw-decision","title":"POST /api/pipeline/jobs/:jobId/raw-decision

Trifft Entscheidung bei vorhandenem RAW (continue oder restart je nach Dialogfluss).

Request:

{ \"decision\": \"continue\" }\n
","text":""},{"location":"api/pipeline/#post-apipipelinestartjobid","title":"POST /api/pipeline/start/:jobId

Startet vorbereiteten Job oder queued ihn (je nach Parallel-Limit).

M\u00f6gliche Responses:

{ \"result\": { \"started\": true, \"stage\": \"RIPPING\" } }\n
{ \"result\": { \"queued\": true, \"started\": false, \"queuePosition\": 2, \"action\": \"START_PREPARED\" } }\n
","text":""},{"location":"api/pipeline/#post-apipipelineconfirm-encodejobid","title":"POST /api/pipeline/confirm-encode/:jobId

Best\u00e4tigt Review-Auswahl (Tracks, Pre/Post-Skripte/Ketten, User-Preset).

Request (typisch):

{\n  \"selectedEncodeTitleId\": 1,\n  \"selectedTrackSelection\": {\n    \"1\": {\n      \"audioTrackIds\": [1, 2],\n      \"subtitleTrackIds\": [3]\n    }\n  },\n  \"selectedPreEncodeScriptIds\": [1],\n  \"selectedPostEncodeScriptIds\": [2, 7],\n  \"selectedPreEncodeChainIds\": [3],\n  \"selectedPostEncodeChainIds\": [4],\n  \"selectedUserPresetId\": 5,\n  \"skipPipelineStateUpdate\": false\n}\n

Response:

{ \"job\": { \"id\": 42, \"encode_review_confirmed\": 1 } }\n
","text":""},{"location":"api/pipeline/#post-apipipelinecancel","title":"POST /api/pipeline/cancel

Bricht laufenden Job ab oder entfernt Queue-Eintrag.

Request (optional):

{ \"jobId\": 42 }\n

M\u00f6gliche Responses:

{ \"result\": { \"cancelled\": true, \"queuedOnly\": true, \"jobId\": 42 } }\n
{ \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"jobId\": 42 } }\n
{ \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"pending\": true, \"jobId\": 42 } }\n
","text":""},{"location":"api/pipeline/#post-apipipelineretryjobid","title":"POST /api/pipeline/retry/:jobId

Retry f\u00fcr ERROR/CANCELLED-Jobs (oder Queue-Einreihung).

","text":""},{"location":"api/pipeline/#post-apipipelinereencodejobid","title":"POST /api/pipeline/reencode/:jobId

Startet Re-Encode aus bestehendem RAW.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-reviewjobid","title":"POST /api/pipeline/restart-review/:jobId

Berechnet Review aus RAW neu.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-encodejobid","title":"POST /api/pipeline/restart-encode/:jobId

Startet Encoding mit letzter best\u00e4tigter Review neu.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-cd-reviewjobid","title":"POST /api/pipeline/restart-cd-review/:jobId

Berechnet CD-Review aus vorhandenem RAW neu.

","text":""},{"location":"api/pipeline/#post-apipipelineresume-readyjobid","title":"POST /api/pipeline/resume-ready/:jobId

L\u00e4dt READY_TO_ENCODE-Job nach Neustart wieder in aktive Session.

","text":""},{"location":"api/pipeline/#get-apipipelineoutput-foldersjobid","title":"GET /api/pipeline/output-folders/:jobId

Liefert bekannte Output-Ordner entlang der Job-Lineage.

","text":""},{"location":"api/pipeline/#post-apipipelinedelete-output-foldersjobid","title":"POST /api/pipeline/delete-output-folders/:jobId

L\u00f6scht ausgew\u00e4hlte Output-Ordner.

Request:

{ \"folderPaths\": [\"/mnt/movies/Inception (2010)\"] }\n

Alle Endpunkte liefern { result: ... } bzw. { job: ... }.

","text":""},{"location":"api/pipeline/#queue-endpunkte","title":"Queue-Endpunkte","text":""},{"location":"api/pipeline/#get-apipipelinequeue","title":"GET /api/pipeline/queue","text":"

Liefert Queue-Snapshot.

{\n  \"queue\": {\n    \"maxParallelJobs\": 1,\n    \"runningCount\": 1,\n    \"queuedCount\": 3,\n    \"runningJobs\": [\n      {\n        \"jobId\": 41,\n        \"title\": \"Inception\",\n        \"status\": \"ENCODING\",\n        \"lastState\": \"ENCODING\"\n      }\n    ],\n    \"queuedJobs\": [\n      {\n        \"entryId\": 11,\n        \"position\": 1,\n        \"type\": \"job\",\n        \"jobId\": 42,\n        \"action\": \"START_PREPARED\",\n        \"actionLabel\": \"Start\",\n        \"title\": \"Matrix\",\n        \"status\": \"READY_TO_ENCODE\",\n        \"lastState\": \"READY_TO_ENCODE\",\n        \"hasScripts\": true,\n        \"hasChains\": false,\n        \"enqueuedAt\": \"2026-03-10T09:00:00.000Z\"\n      },\n      {\n        \"entryId\": 12,\n        \"position\": 2,\n        \"type\": \"wait\",\n        \"waitSeconds\": 30,\n        \"title\": \"Warten 30s\",\n        \"status\": \"QUEUED\",\n        \"enqueuedAt\": \"2026-03-10T09:01:00.000Z\"\n      }\n    ],\n    \"updatedAt\": \"2026-03-10T09:01:02.000Z\"\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinequeuereorder","title":"POST /api/pipeline/queue/reorder","text":"

Sortiert Queue-Eintr\u00e4ge neu.

Request:

{\n  \"orderedEntryIds\": [12, 11]\n}\n

Legacy fallback wird akzeptiert:

{\n  \"orderedJobIds\": [42, 43]\n}\n
"},{"location":"api/pipeline/#post-apipipelinequeueentry","title":"POST /api/pipeline/queue/entry","text":"

F\u00fcgt Nicht-Job-Queue-Eintrag hinzu (script, chain, wait).

Request-Beispiele:

{ \"type\": \"script\", \"scriptId\": 3 }\n
{ \"type\": \"chain\", \"chainId\": 2, \"insertAfterEntryId\": 11 }\n
{ \"type\": \"wait\", \"waitSeconds\": 45 }\n

Response:

{\n  \"result\": { \"entryId\": 12, \"type\": \"wait\", \"position\": 2 },\n  \"queue\": { \"...\": \"...\" }\n}\n
"},{"location":"api/pipeline/#delete-apipipelinequeueentryentryid","title":"DELETE /api/pipeline/queue/entry/:entryId","text":"

Entfernt Queue-Eintrag.

Response:

{ \"queue\": { \"...\": \"...\" } }\n
"},{"location":"api/pipeline/#pipeline-zustande","title":"Pipeline-Zust\u00e4nde State Bedeutung IDLE Wartet auf Medium DISC_DETECTED Medium erkannt ANALYZING MakeMKV-Analyse l\u00e4uft METADATA_SELECTION Metadaten-Auswahl WAITING_FOR_USER_DECISION Nutzerentscheidung erforderlich (Playlist-Auswahl oder RAW-Entscheidung) READY_TO_START \u00dcbergang vor Start RIPPING MakeMKV-Rip l\u00e4uft MEDIAINFO_CHECK Titel-/Track-Auswertung READY_TO_ENCODE Review bereit ENCODING HandBrake-Encoding l\u00e4uft CD_METADATA_SELECTION CD-Metadatenauswahl aktiv CD_READY_TO_RIP CD-Job ist startbereit CD_ANALYZING CD-Struktur/Tracks werden vorbereitet CD_RIPPING CD-Ripping l\u00e4uft CD_ENCODING CD-Encode l\u00e4uft FINISHED Abgeschlossen DONE Abgeschlossen (v. a. Audiobook/Converter/CD-Varianten) CANCELLED Abgebrochen ERROR Fehler","text":""},{"location":"api/runtime-activities/","title":"Runtime Activities API","text":"

Ripster verfolgt alle laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Skript-Ketten, Cron-Jobs, interne Tasks) in Echtzeit \u00fcber den RuntimeActivityService.

"},{"location":"api/runtime-activities/#ubersicht","title":"\u00dcbersicht","text":"

Aktivit\u00e4ten entstehen, wenn Ripster intern Aktionen ausf\u00fchrt \u2013 z. B. beim Start eines Cron-Jobs, beim Ausf\u00fchren einer Skript-Kette oder beim Durchlaufen von Pipeline-Schritten. Sie sind nicht persistent (kein DB-Speicher) und werden nur im Arbeitsspeicher gehalten.

  • Aktive Aktivit\u00e4ten (active): Laufen gerade.
  • Letzte Aktivit\u00e4ten (recent): Abgeschlossen, max. 120 Eintr\u00e4ge.

\u00c4nderungen werden \u00fcber WebSocket (RUNTIME_ACTIVITY_CHANGED) in Echtzeit gesendet.

"},{"location":"api/runtime-activities/#aktivitats-objekt","title":"Aktivit\u00e4ts-Objekt","text":"
{\n  \"id\": 7,\n  \"type\": \"chain\",\n  \"name\": \"Post-Encode Aufr\u00e4umen\",\n  \"status\": \"running\",\n  \"source\": \"cron\",\n  \"message\": \"Schritt 2 von 3\",\n  \"currentStep\": \"cleanup.sh\",\n  \"currentStepType\": \"script\",\n  \"currentScriptName\": \"cleanup.sh\",\n  \"stepIndex\": 2,\n  \"stepTotal\": 3,\n  \"parentActivityId\": null,\n  \"jobId\": 42,\n  \"cronJobId\": 3,\n  \"chainId\": 5,\n  \"scriptId\": null,\n  \"canCancel\": true,\n  \"canNextStep\": false,\n  \"outcome\": \"running\",\n  \"errorMessage\": null,\n  \"output\": null,\n  \"stdout\": null,\n  \"stderr\": null,\n  \"stdoutTruncated\": false,\n  \"stderrTruncated\": false,\n  \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n  \"finishedAt\": null,\n  \"durationMs\": null,\n  \"exitCode\": null,\n  \"success\": null\n}\n
"},{"location":"api/runtime-activities/#felder","title":"Felder","text":"Feld Typ Beschreibung id number Eindeutige ID (Laufz\u00e4hler, nicht persistent) type string Art der Aktivit\u00e4t: script | chain | cron | task name string \\| null Anzeigename der Aktivit\u00e4t status string Aktueller Status: running | success | error source string \\| null Ausl\u00f6ser (z. B. cron, pipeline, manual) message string \\| null Kurztext zum aktuellen Zustand currentStep string \\| null Name des aktuell ausgef\u00fchrten Schritts currentStepType string \\| null Typ des Schritts (z. B. script, wait) currentScriptName string \\| null Name des Skripts im aktuellen Schritt stepIndex number \\| null Aktueller Schritt (1-basiert) stepTotal number \\| null Gesamtanzahl Schritte parentActivityId number \\| null ID der \u00fcbergeordneten Aktivit\u00e4t jobId number \\| null Verkn\u00fcpfte Job-ID cronJobId number \\| null Verkn\u00fcpfte Cron-Job-ID chainId number \\| null Verkn\u00fcpfte Skript-Ketten-ID scriptId number \\| null Verkn\u00fcpfte Skript-ID canCancel boolean Abbrechen \u00fcber API m\u00f6glich canNextStep boolean N\u00e4chster Schritt \u00fcber API ausl\u00f6sbar outcome string \\| null Abschluss-Ergebnis: success | error | cancelled | skipped | running errorMessage string \\| null Fehlermeldung (max. 2.000 Zeichen) output string \\| null Allgemeine Ausgabe (max. 12.000 Zeichen) stdout string \\| null Standardausgabe des Prozesses (max. 12.000 Zeichen) stderr string \\| null Fehlerausgabe des Prozesses (max. 12.000 Zeichen) stdoutTruncated boolean true, wenn stdout gek\u00fcrzt wurde stderrTruncated boolean true, wenn stderr gek\u00fcrzt wurde startedAt string ISO-8601-Zeitstempel des Starts finishedAt string \\| null ISO-8601-Zeitstempel des Endes durationMs number \\| null Laufzeit in Millisekunden exitCode number \\| null Exit-Code des Prozesses success boolean \\| null Erfolgsstatus (null bei laufender Aktivit\u00e4t)"},{"location":"api/runtime-activities/#snapshot-objekt","title":"Snapshot-Objekt","text":"

Alle Aktivit\u00e4ts-Endpunkte geben einen Snapshot zur\u00fcck:

{\n  \"active\": [ /* laufende Aktivit\u00e4ten, nach startedAt absteigend */ ],\n  \"recent\": [ /* abgeschlossene Aktivit\u00e4ten, nach finishedAt absteigend, max. 120 */ ],\n  \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n
"},{"location":"api/runtime-activities/#endpunkte","title":"Endpunkte","text":""},{"location":"api/runtime-activities/#get-apiruntimeactivities","title":"GET /api/runtime/activities","text":"

Aktuellen Aktivit\u00e4ts-Snapshot abrufen.

Antwort:

{\n  \"active\": [],\n  \"recent\": [\n    {\n      \"id\": 5,\n      \"type\": \"script\",\n      \"name\": \"notify.sh\",\n      \"status\": \"success\",\n      \"outcome\": \"success\",\n      \"startedAt\": \"2026-03-10T09:58:00.000Z\",\n      \"finishedAt\": \"2026-03-10T09:58:02.000Z\",\n      \"durationMs\": 2100,\n      \"exitCode\": 0,\n      \"success\": true,\n      \"canCancel\": false,\n      \"canNextStep\": false\n    }\n  ],\n  \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n
"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidcancel","title":"POST /api/runtime/activities/:id/cancel","text":"

Aktive Aktivit\u00e4t abbrechen (nur wenn canCancel: true).

Parameter:

Name In Typ Beschreibung id path number Aktivit\u00e4ts-ID reason body string Optionaler Abbruchgrund

Request Body:

{ \"reason\": \"Manueller Abbruch durch Benutzer\" }\n

Antwort (Erfolg):

{\n  \"ok\": true,\n  \"action\": null,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n

Fehlercodes:

HTTP Bedeutung 404 Aktivit\u00e4t nicht gefunden oder bereits abgeschlossen 409 Abbrechen wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidnext-step","title":"POST /api/runtime/activities/:id/next-step","text":"

N\u00e4chsten Schritt einer Aktivit\u00e4t ausl\u00f6sen (nur wenn canNextStep: true).

Parameter:

Name In Typ Beschreibung id path number Aktivit\u00e4ts-ID

Antwort (Erfolg):

{\n  \"ok\": true,\n  \"action\": null,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n

Fehlercodes:

HTTP Bedeutung 404 Aktivit\u00e4t nicht gefunden 409 N\u00e4chster Schritt wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesclear-recent","title":"POST /api/runtime/activities/clear-recent","text":"

Alle abgeschlossenen Aktivit\u00e4ten aus recent l\u00f6schen.

Antwort:

{\n  \"ok\": true,\n  \"removed\": 14,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n
"},{"location":"api/runtime-activities/#grenzwerte","title":"Grenzwerte","text":"Wert Limit Maximale recent-Eintr\u00e4ge 120 Maximale L\u00e4nge stdout / stderr / output 12.000 Zeichen Maximale L\u00e4nge errorMessage / message 2.000 Zeichen Maximale L\u00e4nge outcome 40 Zeichen

Gek\u00fcrzte Ausgaben erhalten den Suffix ...[gek\u00fcrzt] (bei Inline-Text) bzw. \\n...[gek\u00fcrzt] (bei mehrzeiligem Output).

"},{"location":"api/runtime-activities/#echtzeit-updates","title":"Echtzeit-Updates","text":"

\u00c4nderungen werden automatisch als RUNTIME_ACTIVITY_CHANGED WebSocket-Event gesendet. Die Frontend-Komponente braucht GET /api/runtime/activities nur beim initialen Laden aufzurufen.

"},{"location":"api/settings/","title":"Settings API","text":"

Endpunkte f\u00fcr Einstellungen, Skripte, Skript-Ketten und User-Presets.

"},{"location":"api/settings/#get-apisettings","title":"GET /api/settings","text":"

Liefert alle Einstellungen kategorisiert.

Response (Struktur):

{\n  \"categories\": [\n    {\n      \"category\": \"Pfade\",\n      \"settings\": [\n        {\n          \"key\": \"raw_dir\",\n          \"label\": \"Raw Ausgabeordner\",\n          \"type\": \"path\",\n          \"required\": true,\n          \"description\": \"...\",\n          \"defaultValue\": \"data/output/raw\",\n          \"options\": [],\n          \"validation\": { \"minLength\": 1 },\n          \"value\": \"data/output/raw\",\n          \"orderIndex\": 100\n        }\n      ]\n    }\n  ]\n}\n
"},{"location":"api/settings/#put-apisettingskey","title":"PUT /api/settings/:key","text":"

Aktualisiert eine einzelne Einstellung.

Request:

{ \"value\": \"/mnt/storage/raw\" }\n

Response:

{\n  \"setting\": {\n    \"key\": \"raw_dir\",\n    \"value\": \"/mnt/storage/raw\"\n  },\n  \"reviewRefresh\": {\n    \"triggered\": false,\n    \"reason\": \"not_ready\"\n  }\n}\n

reviewRefresh ist null oder ein Objekt mit Status der optionalen Review-Neuberechnung.

"},{"location":"api/settings/#put-apisettings","title":"PUT /api/settings","text":"

Aktualisiert mehrere Einstellungen atomar.

Request:

{\n  \"settings\": {\n    \"raw_dir\": \"/mnt/storage/raw\",\n    \"movie_dir\": \"/mnt/storage/movies\",\n    \"handbrake_preset_bluray\": \"H.264 MKV 1080p30\"\n  }\n}\n

Response:

{\n  \"changes\": [\n    { \"key\": \"raw_dir\", \"value\": \"/mnt/storage/raw\" },\n    { \"key\": \"movie_dir\", \"value\": \"/mnt/storage/movies\" }\n  ],\n  \"reviewRefresh\": {\n    \"triggered\": true,\n    \"jobId\": 42,\n    \"relevantKeys\": [\"handbrake_preset_bluray\"]\n  }\n}\n

Bei Validierungsfehlern kommt 400 mit error.details[].

"},{"location":"api/settings/#get-apisettingshandbrake-presets","title":"GET /api/settings/handbrake-presets","text":"

Liest Preset-Liste via HandBrakeCLI -z (mit Fallback auf konfigurierte Presets).

Response (Beispiel):

{\n  \"source\": \"handbrake-cli\",\n  \"message\": null,\n  \"options\": [\n    { \"label\": \"General/\", \"value\": \"__group__general\", \"disabled\": true, \"category\": \"General\" },\n    { \"label\": \"   Fast 1080p30\", \"value\": \"Fast 1080p30\", \"category\": \"General\" }\n  ]\n}\n
"},{"location":"api/settings/#post-apisettingspushovertest","title":"POST /api/settings/pushover/test","text":"

Sendet Testnachricht \u00fcber aktuelle PushOver-Settings.

Request (optional):

{\n  \"title\": \"Test\",\n  \"message\": \"Ripster Test\"\n}\n

Response:

{\n  \"result\": {\n    \"sent\": true,\n    \"eventKey\": \"test\",\n    \"requestId\": \"...\"\n  }\n}\n

Wenn PushOver deaktiviert ist oder Credentials fehlen, kommt i. d. R. ebenfalls 200 mit sent: false + reason.

"},{"location":"api/settings/#skripte","title":"Skripte","text":"

Basis: /api/settings/scripts

"},{"location":"api/settings/#get-apisettingsscripts","title":"GET /api/settings/scripts","text":"
{ \"scripts\": [ { \"id\": 1, \"name\": \"...\", \"scriptBody\": \"...\", \"orderIndex\": 1, \"createdAt\": \"...\", \"updatedAt\": \"...\" } ] }\n
"},{"location":"api/settings/#post-apisettingsscripts","title":"POST /api/settings/scripts","text":"
{ \"name\": \"Move\", \"scriptBody\": \"mv \\\"$RIPSTER_OUTPUT_PATH\\\" /mnt/movies/\" }\n

Response: 201 mit { \"script\": { ... } }

"},{"location":"api/settings/#put-apisettingsscriptsid","title":"PUT /api/settings/scripts/:id","text":"

Body wie POST, Response { \"script\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsscriptsid","title":"DELETE /api/settings/scripts/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscriptsreorder","title":"POST /api/settings/scripts/reorder","text":"
{ \"orderedScriptIds\": [3, 1, 2] }\n

Response { \"scripts\": [ ... ] }.

"},{"location":"api/settings/#post-apisettingsscriptsidtest","title":"POST /api/settings/scripts/:id/test","text":"

F\u00fchrt Skript als Testlauf aus.

{\n  \"result\": {\n    \"scriptId\": 1,\n    \"scriptName\": \"Move\",\n    \"success\": true,\n    \"exitCode\": 0,\n    \"signal\": null,\n    \"timedOut\": false,\n    \"durationMs\": 120,\n    \"stdout\": \"...\",\n    \"stderr\": \"...\",\n    \"stdoutTruncated\": false,\n    \"stderrTruncated\": false\n  }\n}\n
"},{"location":"api/settings/#umgebungsvariablen-fur-skripte","title":"Umgebungsvariablen f\u00fcr Skripte","text":"

Diese Variablen werden beim Ausf\u00fchren gesetzt:

  • RIPSTER_SCRIPT_RUN_AT
  • RIPSTER_JOB_ID
  • RIPSTER_JOB_TITLE
  • RIPSTER_MODE
  • RIPSTER_INPUT_PATH
  • RIPSTER_OUTPUT_PATH
  • RIPSTER_RAW_PATH
  • RIPSTER_SCRIPT_ID
  • RIPSTER_SCRIPT_NAME
  • RIPSTER_SCRIPT_SOURCE
"},{"location":"api/settings/#skript-ketten","title":"Skript-Ketten","text":"

Basis: /api/settings/script-chains

Eine Kette hat Schritte vom Typ:

  • script (scriptId erforderlich)
  • wait (waitSeconds 1..3600)
"},{"location":"api/settings/#get-apisettingsscript-chains","title":"GET /api/settings/script-chains","text":"

Response { \"chains\": [ ... ] } (inkl. steps[]).

"},{"location":"api/settings/#get-apisettingsscript-chainsid","title":"GET /api/settings/script-chains/:id","text":"

Response { \"chain\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscript-chains","title":"POST /api/settings/script-chains","text":"
{\n  \"name\": \"After Encode\",\n  \"steps\": [\n    { \"stepType\": \"script\", \"scriptId\": 1 },\n    { \"stepType\": \"wait\", \"waitSeconds\": 15 },\n    { \"stepType\": \"script\", \"scriptId\": 2 }\n  ]\n}\n

Response: 201 mit { \"chain\": { ... } }

"},{"location":"api/settings/#put-apisettingsscript-chainsid","title":"PUT /api/settings/script-chains/:id","text":"

Body wie POST, Response { \"chain\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsscript-chainsid","title":"DELETE /api/settings/script-chains/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscript-chainsreorder","title":"POST /api/settings/script-chains/reorder","text":"
{ \"orderedChainIds\": [2, 1, 3] }\n

Response { \"chains\": [ ... ] }.

"},{"location":"api/settings/#post-apisettingsscript-chainsidtest","title":"POST /api/settings/script-chains/:id/test","text":"

Response:

{\n  \"result\": {\n    \"chainId\": 2,\n    \"chainName\": \"After Encode\",\n    \"steps\": 3,\n    \"succeeded\": 3,\n    \"failed\": 0,\n    \"aborted\": false,\n    \"results\": []\n  }\n}\n
"},{"location":"api/settings/#user-presets","title":"User-Presets","text":"

Basis: /api/settings/user-presets

"},{"location":"api/settings/#get-apisettingsuser-presets","title":"GET /api/settings/user-presets","text":"

Optionaler Query-Parameter: media_type=bluray|dvd|other|all

{\n  \"presets\": [\n    {\n      \"id\": 1,\n      \"name\": \"Blu-ray HQ\",\n      \"mediaType\": \"bluray\",\n      \"handbrakePreset\": \"H.264 MKV 1080p30\",\n      \"extraArgs\": \"--encoder-preset slow\",\n      \"description\": \"...\",\n      \"createdAt\": \"...\",\n      \"updatedAt\": \"...\"\n    }\n  ]\n}\n
"},{"location":"api/settings/#post-apisettingsuser-presets","title":"POST /api/settings/user-presets","text":"
{\n  \"name\": \"Blu-ray HQ\",\n  \"mediaType\": \"bluray\",\n  \"handbrakePreset\": \"H.264 MKV 1080p30\",\n  \"extraArgs\": \"--encoder-preset slow\",\n  \"description\": \"optional\"\n}\n

Response: 201 mit { \"preset\": { ... } }

"},{"location":"api/settings/#put-apisettingsuser-presetsid","title":"PUT /api/settings/user-presets/:id","text":"

Body mit beliebigen Feldern aus POST, Response { \"preset\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsuser-presetsid","title":"DELETE /api/settings/user-presets/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#weitere-endpunkte","title":"Weitere Endpunkte","text":""},{"location":"api/settings/#get-apisettingseffective-paths","title":"GET /api/settings/effective-paths","text":"

Liefert aufgel\u00f6ste, effektiv genutzte Pfade aus den Settings (f\u00fcr UI- und Diagnosezwecke).

"},{"location":"api/settings/#post-apisettingscoverartrecover","title":"POST /api/settings/coverart/recover","text":"

Startet eine manuelle Coverart-Recovery.

Response (Beispiel):

{\n  \"result\": { \"started\": true },\n  \"scheduler\": { \"enabled\": true }\n}\n
"},{"location":"api/settings/#activation-bytes-aax","title":"Activation Bytes (AAX)","text":""},{"location":"api/settings/#get-apisettingsactivation-bytes","title":"GET /api/settings/activation-bytes","text":"

Liest gecachte AAX-Activation-Bytes.

"},{"location":"api/settings/#post-apisettingsactivation-bytes","title":"POST /api/settings/activation-bytes","text":"

Speichert Activation-Bytes.

Request:

{\n  \"checksum\": \"abc123...\",\n  \"activationBytes\": \"1a2b3c4d\"\n}\n
"},{"location":"api/settings/#laufwerke","title":"Laufwerke","text":""},{"location":"api/settings/#get-apisettingsdrives","title":"GET /api/settings/drives","text":"

Liefert erkannte optische Laufwerke (/dev/...) inkl. MakeMKV-Disc-Index.

"},{"location":"api/settings/#post-apisettingsdrivesforce-unlock","title":"POST /api/settings/drives/force-unlock","text":"

Erzwingt Entsperren aktiver Laufwerkslocks.

Hinweis: Expertenmodus (ui_expert_mode) ist erforderlich, sonst 403.

Request (ein Laufwerk):

{ \"devicePath\": \"/dev/sr0\" }\n

Request (alle):

{ \"all\": true }\n
"},{"location":"api/settings/#ui-preferences","title":"UI Preferences","text":""},{"location":"api/settings/#get-apisettingsprefskey","title":"GET /api/settings/prefs/:key","text":"

Liest einen persistierten UI-Preference-Wert.

"},{"location":"api/settings/#put-apisettingsprefskey","title":"PUT /api/settings/prefs/:key","text":"

Speichert einen persistierten UI-Preference-Wert.

Request:

{ \"value\": \"{\\\"columns\\\":[\\\"id\\\",\\\"status\\\"]}\" }\n
"},{"location":"api/websocket/","title":"WebSocket Events","text":"

Ripster sendet Echtzeit-Updates \u00fcber /ws.

"},{"location":"api/websocket/#verbindung","title":"Verbindung","text":"
const ws = new WebSocket('ws://localhost:3001/ws');\n\nws.onmessage = (event) => {\n  const msg = JSON.parse(event.data);\n  console.log(msg.type, msg.payload);\n};\n
"},{"location":"api/websocket/#nachrichtenformat","title":"Nachrichtenformat","text":"

Die meisten Broadcasts haben dieses Schema:

{\n  \"type\": \"EVENT_TYPE\",\n  \"payload\": {},\n  \"timestamp\": \"2026-03-10T09:00:00.000Z\"\n}\n

Ausnahme: WS_CONNECTED beim Verbindungsaufbau enth\u00e4lt kein timestamp.

"},{"location":"api/websocket/#event-typen","title":"Event-Typen","text":""},{"location":"api/websocket/#ws_connected","title":"WS_CONNECTED","text":"

Sofort nach erfolgreicher Verbindung.

{\n  \"type\": \"WS_CONNECTED\",\n  \"payload\": {\n    \"connectedAt\": \"2026-03-10T09:00:00.000Z\"\n  }\n}\n
"},{"location":"api/websocket/#pipeline_state_changed","title":"PIPELINE_STATE_CHANGED","text":"

Neuer Pipeline-Snapshot.

{\n  \"type\": \"PIPELINE_STATE_CHANGED\",\n  \"payload\": {\n    \"state\": \"ENCODING\",\n    \"activeJobId\": 42,\n    \"progress\": 62.5,\n    \"eta\": \"00:12:34\",\n    \"statusText\": \"ENCODING 62.50%\",\n    \"context\": {},\n    \"jobProgress\": {\n      \"42\": {\n        \"state\": \"ENCODING\",\n        \"progress\": 62.5,\n        \"eta\": \"00:12:34\",\n        \"statusText\": \"ENCODING 62.50%\"\n      }\n    },\n    \"queue\": {\n      \"maxParallelJobs\": 1,\n      \"runningCount\": 1,\n      \"queuedCount\": 2,\n      \"runningJobs\": [],\n      \"queuedJobs\": []\n    }\n  }\n}\n
"},{"location":"api/websocket/#pipeline_progress","title":"PIPELINE_PROGRESS","text":"

Laufende Fortschrittsupdates.

{\n  \"type\": \"PIPELINE_PROGRESS\",\n  \"payload\": {\n    \"state\": \"ENCODING\",\n    \"activeJobId\": 42,\n    \"progress\": 62.5,\n    \"eta\": \"00:12:34\",\n    \"statusText\": \"ENCODING 62.50%\"\n  }\n}\n
"},{"location":"api/websocket/#pipeline_queue_changed","title":"PIPELINE_QUEUE_CHANGED","text":"

Queue-Snapshot aktualisiert.

"},{"location":"api/websocket/#disc_detected-disc_removed","title":"DISC_DETECTED / DISC_REMOVED","text":"

Disc-Insertion/-Removal.

{\n  \"type\": \"DISC_DETECTED\",\n  \"payload\": {\n    \"device\": {\n      \"path\": \"/dev/sr0\",\n      \"discLabel\": \"INCEPTION\",\n      \"model\": \"ASUS BW-16D1HT\",\n      \"fstype\": \"udf\",\n      \"mountpoint\": null,\n      \"mediaProfile\": \"bluray\"\n    }\n  }\n}\n

mediaProfile: bluray | dvd | other | null

"},{"location":"api/websocket/#hardware_monitor_update","title":"HARDWARE_MONITOR_UPDATE","text":"

Snapshot aus Hardware-Monitoring.

{\n  \"type\": \"HARDWARE_MONITOR_UPDATE\",\n  \"payload\": {\n    \"enabled\": true,\n    \"intervalMs\": 5000,\n    \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n    \"sample\": {\n      \"cpu\": {},\n      \"memory\": {},\n      \"gpu\": {},\n      \"storage\": {}\n    },\n    \"error\": null\n  }\n}\n
"},{"location":"api/websocket/#pipeline_error","title":"PIPELINE_ERROR","text":"

Fehler bei Disc-Event-Verarbeitung in Pipeline.

"},{"location":"api/websocket/#disk_detection_error","title":"DISK_DETECTION_ERROR","text":"

Fehler in Laufwerkserkennung.

"},{"location":"api/websocket/#settings_updated","title":"SETTINGS_UPDATED","text":"

Einzelnes Setting wurde gespeichert.

"},{"location":"api/websocket/#settings_bulk_updated","title":"SETTINGS_BULK_UPDATED","text":"

Bulk-Settings gespeichert.

{\n  \"type\": \"SETTINGS_BULK_UPDATED\",\n  \"payload\": {\n    \"count\": 3,\n    \"keys\": [\"raw_dir\", \"movie_dir\", \"handbrake_preset_bluray\"]\n  }\n}\n
"},{"location":"api/websocket/#settings_scripts_updated","title":"SETTINGS_SCRIPTS_UPDATED","text":"

Skript ge\u00e4ndert (created|updated|deleted|reordered).

"},{"location":"api/websocket/#settings_script_chains_updated","title":"SETTINGS_SCRIPT_CHAINS_UPDATED","text":"

Skript-Kette ge\u00e4ndert (created|updated|deleted|reordered).

"},{"location":"api/websocket/#user_presets_updated","title":"USER_PRESETS_UPDATED","text":"

User-Preset ge\u00e4ndert (created|updated|deleted).

"},{"location":"api/websocket/#cron_jobs_updated","title":"CRON_JOBS_UPDATED","text":"

Cron-Config ge\u00e4ndert (created|updated|deleted).

"},{"location":"api/websocket/#cron_job_updated","title":"CRON_JOB_UPDATED","text":"

Laufzeitstatus eines Cron-Jobs ge\u00e4ndert.

{\n  \"type\": \"CRON_JOB_UPDATED\",\n  \"payload\": {\n    \"id\": 1,\n    \"lastRunStatus\": \"running\",\n    \"lastRunAt\": \"2026-03-10T10:00:00.000Z\",\n    \"nextRunAt\": null\n  }\n}\n
"},{"location":"api/websocket/#runtime_activity_changed","title":"RUNTIME_ACTIVITY_CHANGED","text":"

Vollst\u00e4ndiger Snapshot aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten.

Wird ausgel\u00f6st, wenn eine Aktivit\u00e4t gestartet, aktualisiert oder abgeschlossen wird sowie nach clear-recent.

{\n  \"type\": \"RUNTIME_ACTIVITY_CHANGED\",\n  \"payload\": {\n    \"active\": [\n      {\n        \"id\": 7,\n        \"type\": \"chain\",\n        \"name\": \"Post-Encode Aufr\u00e4umen\",\n        \"status\": \"running\",\n        \"source\": \"cron\",\n        \"message\": \"Schritt 2 von 3\",\n        \"currentStep\": \"cleanup.sh\",\n        \"currentStepType\": \"script\",\n        \"stepIndex\": 2,\n        \"stepTotal\": 3,\n        \"canCancel\": true,\n        \"canNextStep\": false,\n        \"outcome\": \"running\",\n        \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n        \"finishedAt\": null,\n        \"durationMs\": null\n      }\n    ],\n    \"recent\": [],\n    \"updatedAt\": \"2026-03-10T10:00:05.000Z\"\n  }\n}\n

Vollst\u00e4ndige Feldbeschreibung: Runtime Activities API.

"},{"location":"api/websocket/#converter_scan_update","title":"CONVERTER_SCAN_UPDATE","text":"

Wird nach einem Scan des Converter-Eingangsordners gesendet (manuell oder per Polling).

{\n  \"type\": \"CONVERTER_SCAN_UPDATE\",\n  \"payload\": {\n    \"entryCount\": 12\n  }\n}\n
"},{"location":"api/websocket/#downloads_updated","title":"DOWNLOADS_UPDATED","text":"

Wird bei jeder Status\u00e4nderung in der Download-Queue gesendet.

{\n  \"type\": \"DOWNLOADS_UPDATED\",\n  \"payload\": {\n    \"reason\": \"ready\",\n    \"item\": {\n      \"id\": \"dl-1\",\n      \"jobId\": 42,\n      \"status\": \"ready\",\n      \"archiveName\": \"Job_42_movie.zip\",\n      \"createdAt\": \"2026-03-30T10:00:00.000Z\"\n    },\n    \"summary\": {\n      \"total\": 3,\n      \"pending\": 1,\n      \"processing\": 0,\n      \"ready\": 1,\n      \"failed\": 1\n    }\n  }\n}\n

M\u00f6gliche reason-Werte: queued, processing, ready, failed, deleted.

"},{"location":"api/websocket/#reconnect-verhalten","title":"Reconnect-Verhalten","text":"

useWebSocket verbindet bei Abbruch automatisch neu:

  • Retry-Intervall: 1500ms
  • Wiederverbindung bis Komponente unmounted wird
"},{"location":"appendix/","title":"Technischer Anhang","text":"

Dieser Bereich enth\u00e4lt die technische Referenz hinter dem Benutzerhandbuch.

"},{"location":"appendix/#inhalt","title":"Inhalt","text":"
  • Konfiguration
  • komplette Feldreferenz
  • Umgebungsvariablen
  • Pipeline intern
  • Zustandsmodell
  • Encode-Planung
  • Playlist-Analyse
  • Pre-/Post-Encode-Ausf\u00fchrungen
  • API-Referenz
  • REST-Endpunkte
  • WebSocket-Events
  • Architektur
  • Backend-/Frontend-Aufbau
  • Datenbank
  • Deployment
  • Betrieb in Entwicklung und Produktion
  • Externe Tools
  • MakeMKV, HandBrake, MediaInfo
"},{"location":"appendix/#wann-du-in-den-anhang-wechselst","title":"Wann du in den Anhang wechselst","text":"
  • du integrierst Ripster mit anderen Systemen
  • du betreibst mehrere Instanzen oder willst tiefer debuggen
  • du brauchst Feld-/API-/Schema-Details f\u00fcr Automatisierung
"},{"location":"architecture/","title":"Anhang: Architektur","text":"

Ripster ist eine Client-Server-Anwendung mit REST + WebSocket und externen CLI-Tools.

"},{"location":"architecture/#systemuberblick","title":"System\u00fcberblick","text":"
graph TB\n    subgraph Browser[\"Browser (React)\"]\n        Ripper[Ripper]\n        Settings[Einstellungen]\n        History[Historie]\n    end\n\n    subgraph Backend[\"Node.js Backend\"]\n        API[REST API\\nExpress]\n        WS[WebSocket\\n/ws]\n        Pipeline[pipelineService]\n        Cron[cronService]\n        DB[(SQLite)]\n    end\n\n    subgraph Tools[\"Externe Tools\"]\n        MakeMKV[makemkvcon]\n        HandBrake[HandBrakeCLI]\n        MediaInfo[mediainfo]\n    end\n\n    Browser <-->|HTTP| API\n    Browser <-->|WebSocket| WS\n    Pipeline --> MakeMKV\n    Pipeline --> HandBrake\n    Pipeline --> MediaInfo\n    API --> DB\n    Pipeline --> DB\n    Cron --> DB
"},{"location":"architecture/#details","title":"Details","text":"
  • \u00dcbersicht
  • Backend-Services
  • Frontend-Komponenten
  • Datenbank
"},{"location":"architecture/backend/","title":"Backend-Services","text":"

Das Backend ist in Services aufgeteilt, die von Express-Routen orchestriert werden. Seit v0.12.0 erfolgt die Medienverarbeitung \u00fcber ein Plugin-System.

"},{"location":"architecture/backend/#plugin-system-srcplugins","title":"Plugin-System (src/plugins/)","text":"

Ab v0.12.0 ist die Pipeline modular aufgebaut. Jeder Medientyp wird von einem eigenen Plugin verwaltet.

"},{"location":"architecture/backend/#basisklassen","title":"Basisklassen","text":"
  • PluginBase.js \u2014 Abstrakte Basisklasse SourcePlugin mit Lifecycle-Methoden
  • PluginRegistry.js \u2014 Dynamische Plugin-Erkennung, priorit\u00e4tsbasierte Auswahl, Settings-Schema-Aggregation
  • PluginContext.js \u2014 Ausf\u00fchrungskontext (Logger, Callbacks, Signals) f\u00fcr Plugin-Aufrufe
"},{"location":"architecture/backend/#plugin-lifecycle","title":"Plugin-Lifecycle","text":"

Jedes Plugin implementiert die folgenden Methoden:

Methode Beschreibung detect(discInfo) Medientyp-Erkennung analyze(devicePath, job, ctx) Analyse / Metadaten-Extraktion rip(job, ctx) Rohdaten-Extraktion review(job, ctx) Optionale Vorschau-Vorbereitung encode(job, ctx) Finales Encoding/Konvertierung finalize(job, ctx) Nachbearbeitung onCancel(job, ctx) Bereinigung bei Abbruch onRetry(job, ctx) Zustand-Reset vor Retry"},{"location":"architecture/backend/#implementierte-plugins","title":"Implementierte Plugins","text":"
  • BluRayPlugin.js \u2014 Blu-ray via MakeMKV (Backup-Modus)
  • DVDPlugin.js \u2014 DVD via MakeMKV (MKV-Modus)
  • CdPlugin.js \u2014 Audio-CD via cdparanoia + FFmpeg (experimentell)
  • AudiobookPlugin.js \u2014 AAX/M4B via FFmpeg mit Kapitel-Splitting
  • ConverterPlugin.js \u2014 Generische Audio/Video-Konvertierung via FFmpeg
  • VideoDiscPlugin.js \u2014 Gemeinsame Basis f\u00fcr Blu-ray/DVD (MediaInfo-Parsing)
"},{"location":"architecture/backend/#pipelineservicejs","title":"pipelineService.js","text":"

Zentrale Workflow-Orchestrierung.

Aufgaben:

  • Pipeline-State-Machine + Persistenz (pipeline_state)
  • Disc-Analyse/Rip/Review/Encode via Plugin-Delegation
  • Queue-Management (Jobs + script|chain|wait Eintr\u00e4ge)
  • Retry/Re-Encode/Restart-Flows
  • WebSocket-Broadcasts f\u00fcr State/Progress/Queue
  • Converter-Job-Verwaltung (createConverterJobFromEntry, uploadConverterFiles, startConverterJob)

Wichtige Methoden:

  • analyzeDisc()
  • selectMetadata()
  • startPreparedJob()
  • confirmEncodeReview()
  • cancel()
  • retry()
  • reencodeFromRaw()
  • restartReviewFromRaw()
  • restartEncodeWithLastSettings()
  • resumeReadyToEncodeJob()
  • enqueueNonJobEntry(), reorderQueue(), removeQueueEntry()
  • createConverterJobFromEntry(), createConverterJobsFromSelection()
  • uploadConverterFiles(), startConverterJob()
"},{"location":"architecture/backend/#diskdetectionservicejs","title":"diskDetectionService.js","text":"

Pollt Laufwerk(e) und emittiert:

  • discInserted
  • discRemoved
  • error

Zusatz:

  • Modus auto oder explicit
  • heuristische mediaProfile-Erkennung (bluray/dvd/other)
  • rescanAndEmit() f\u00fcr manuellen Trigger
"},{"location":"architecture/backend/#settingsservicejs","title":"settingsService.js","text":"

Settings-Layer mit Validation/Serialisierung.

Features:

  • getCategorizedSettings() f\u00fcr UI-Form
  • setSettingValue() / setSettingsBulk()
  • profilspezifische Aufl\u00f6sung (resolveEffectiveToolSettings)
  • CLI-Config-Building f\u00fcr MakeMKV/HandBrake/MediaInfo/FFmpeg
  • HandBrake-Preset-Liste via HandBrakeCLI -z
  • MakeMKV-Key-Synchronisation aus makemkv_registration_key nach ~/.MakeMKV/settings.conf
  • Pfadaufl\u00f6sung f\u00fcr alle Medienprofile inkl. Audiobook und Converter
"},{"location":"architecture/backend/#historyservicejs","title":"historyService.js","text":"

Historie + Dateioperationen.

Features:

  • Job-Liste/Detail inkl. Log-Tail
  • Orphan-RAW-Erkennung und Import
  • OMDb-Nachzuweisung
  • Dateil\u00f6schung (raw|movie|both)
  • Job-L\u00f6schung (none|raw|movie|both)
"},{"location":"architecture/backend/#audiobookservicejs","title":"audiobookService.js","text":"

Audiobook-Verarbeitung (AAX/M4B).

Features:

  • FFprobe-basierte Analyse (Kapitel, Metadaten)
  • FFmpeg-basiertes Encoding mit Kapitel-Splitting
  • Ausgabeformate: M4B, MP3, FLAC
  • Template-basierte Pfade ({author}, {title}, {year}, {narrator}, {series}, {part})
"},{"location":"architecture/backend/#activationbytesservicejs","title":"activationBytesService.js","text":"

Verwaltung von Audible-Activation-Bytes f\u00fcr AAX-DRM-Handling.

Features:

  • SHA-1-Pr\u00fcfsumme der AAX-Datei berechnen
  • Activation Bytes in aax_activation_bytes-Tabelle cachen
  • Lookup via audnexService (wenn konfiguriert)
"},{"location":"architecture/backend/#converterscanservicejs","title":"converterScanService.js","text":"

Dateisystem-\u00dcberwachung des Converter-Eingangsordners.

Features:

  • Vollst\u00e4ndiger FS-Baum (getTree())
  • DB-basierter Datei-Explorer (getEntries())
  • Manueller und automatischer Scan (Polling)
  • Pfad-Normalisierung mit Traversal-Schutz
  • WebSocket-Broadcast: CONVERTER_SCAN_UPDATE
"},{"location":"architecture/backend/#downloadservicejs","title":"downloadService.js","text":"

Download-Queue f\u00fcr Ausgabedateien aus der Historie.

Features:

  • Job in Download-Queue einreihen (enqueueHistoryJob)
  • ZIP-Archiv aus Ausgabedateien erstellen (archiver)
  • Datei-Streaming via res.download()
  • WebSocket-Broadcast: DOWNLOADS_UPDATED bei Status-\u00c4nderungen
  • Download-Item l\u00f6schen
"},{"location":"architecture/backend/#cronservicejs","title":"cronService.js","text":"

Integriertes Cron-System ohne externe Parser-Library.

Features:

  • 5-Feld-Cron-Parser + nextRun-Berechnung
  • Quellen: script oder chain
  • Laufzeitlogs (cron_run_logs)
  • manuelles Triggern
  • WebSocket-Events: CRON_JOBS_UPDATED, CRON_JOB_UPDATED
"},{"location":"architecture/backend/#runtimeactivityservicejs","title":"runtimeActivityService.js","text":"

In-Memory-Tracking aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Ketten, Cron-Jobs, Tasks).

Features:

  • startActivity(type, payload) \u2192 Aktivit\u00e4t registrieren, ID zur\u00fcckgeben
  • updateActivity(id, patch) \u2192 Laufende Aktivit\u00e4t aktualisieren
  • completeActivity(id, payload) \u2192 Aktivit\u00e4t abschlie\u00dfen und in recent verschieben
  • setControls(id, { cancel, nextStep }) \u2192 Steuer-Handler registrieren (f\u00fcr canCancel/canNextStep)
  • requestCancel(id) / requestNextStep(id) \u2192 Steuer-Handler aufrufen
  • clearRecent() \u2192 Abgeschlossene Aktivit\u00e4ten l\u00f6schen
  • getSnapshot() \u2192 Snapshot mit active + recent + updatedAt
  • Broadcasts RUNTIME_ACTIVITY_CHANGED \u00fcber WebSocket bei jeder \u00c4nderung

Limits:

  • recent max. 120 Eintr\u00e4ge
  • stdout/stderr/output max. 12.000 Zeichen
  • message/errorMessage max. 2.000 Zeichen

Vollst\u00e4ndige API-Dokumentation: Runtime Activities API

"},{"location":"architecture/backend/#weitere-services","title":"Weitere Services","text":"
  • scriptService.js (CRUD + Test + Wrapper-Ausf\u00fchrung)
  • scriptChainService.js (CRUD + Step-Execution)
  • userPresetService.js (HandBrake User-Presets)
  • hardwareMonitorService.js (CPU/RAM/GPU/Storage)
  • websocketService.js (Client-Registry + Broadcast)
  • notificationService.js (PushOver)
  • cdRipService.js (CD-Ripping mit cdparanoia)
  • musicBrainzService.js (MusicBrainz-Metadaten-Lookup)
  • audnexService.js (Audnex-API f\u00fcr Audiobook-Metadaten)
  • coverArtRecoveryService.js (Cover-Art-Wiederherstellung)
  • thumbnailService.js (Vorschaubild-Generierung)
  • omdbService.js (OMDb-Metadaten-Suche)
  • logger.js (rotierende Datei-Logs)
"},{"location":"architecture/backend/#bootstrapping-srcindexjs","title":"Bootstrapping (src/index.js)","text":"

Beim Start:

  1. DB init/migrate
  2. Pipeline-Init (inkl. Plugin-Registry)
  3. Cron-Init
  4. Express-Routes + Error-Handler
  5. WebSocket-Server auf /ws
  6. Hardware-Monitoring-Init
  7. Disk-Detection-Start
  8. Converter-Scan-Service-Init (Polling falls aktiviert)
"},{"location":"architecture/database/","title":"Datenbank","text":"

Ripster verwendet SQLite (backend/data/ripster.db).

"},{"location":"architecture/database/#tabellen","title":"Tabellen","text":"
settings_schema\nsettings_values\njobs\njob_lineage_artifacts\njob_output_folders\npipeline_state\nscripts\nscript_chains\nscript_chain_steps\nuser_presets\ncron_jobs\ncron_run_logs\naax_activation_bytes\nuser_prefs\nconverter_scan_entries\n
"},{"location":"architecture/database/#jobs","title":"jobs","text":"

Speichert Pipeline-Lifecycle und Artefakte pro Job.

Zentrale Felder:

  • Metadaten: title, year, imdb_id, poster_url, omdb_json, selected_from_omdb
  • Laufzeit: start_time, end_time, status, last_state
  • Pfade: raw_path, output_path, encode_input_path
  • Tool-Ausgaben: makemkv_info_json, handbrake_info_json, mediainfo_info_json, encode_plan_json
  • Kontrolle: encode_review_confirmed, rip_successful, error_message
  • Medientyp: media_type (bluray|dvd|cd|audiobook|converter)
  • Job-Typ/Beziehung: job_kind, parent_job_id
  • Multipart-/Disc-Merkmale: is_multipart_movie, disc_number, metadata_fingerprint
  • Pr\u00fcfsumme: aax_checksum (f\u00fcr AAX-Dateien)
  • Audit: created_at, updated_at

Typische job_kind-Werte:

  • Standard: bluray, dvd, cd, audiobook, converter_audio, converter_video, converter_iso
  • Serien: dvd_series_container, dvd_series_child
  • Multipart Film: multipart_movie_container, multipart_movie_child

Wichtige Indizes:

  • idx_jobs_status
  • idx_jobs_parent_job_id
  • idx_jobs_job_kind
  • idx_jobs_disc_number
  • idx_jobs_metadata_fingerprint
"},{"location":"architecture/database/#job_lineage_artifacts","title":"job_lineage_artifacts","text":"

Verkn\u00fcpft Jobs mit ihren Quell-Jobs (z. B. Re-Encode aus einem vorherigen Rip).

Felder:

  • job_id \u2014 der abgeleitete Job
  • source_job_id \u2014 der Quell-Job
  • artifact_type \u2014 Art der Verkn\u00fcpfung (z. B. reencode, restart_review)
  • created_at
"},{"location":"architecture/database/#job_output_folders","title":"job_output_folders","text":"

Verfolgt Ausgabepfade pro Job (mehrere Ausgaben m\u00f6glich, z. B. bei Kapitel-Splitting).

Felder:

  • job_id
  • folder_path
  • label \u2014 optionaler Bezeichner
  • created_at
"},{"location":"architecture/database/#pipeline_state","title":"pipeline_state","text":"

Singleton-Tabelle (id = 1) f\u00fcr aktiven Snapshot:

  • state
  • active_job_id
  • progress
  • eta
  • status_text
  • context_json
  • updated_at
"},{"location":"architecture/database/#settings_schema-settings_values","title":"settings_schema + settings_values","text":"
  • settings_schema: Definition (Typ, Default, Validation, Reihenfolge)
  • settings_values: aktueller Wert pro Key
"},{"location":"architecture/database/#scripts-script_chains-script_chain_steps","title":"scripts, script_chains, script_chain_steps","text":"
  • scripts: Shell-Skripte (name, script_body, order_index)
  • script_chains: Ketten (name, order_index)
  • script_chain_steps: Schritte je Kette
  • step_type: script oder wait
  • script_id oder wait_seconds
"},{"location":"architecture/database/#user_presets","title":"user_presets","text":"

Benannte HandBrake-Preset-Sets:

  • name
  • media_type (bluray|dvd|other|all)
  • handbrake_preset
  • extra_args
  • description
"},{"location":"architecture/database/#cron_jobs-cron_run_logs","title":"cron_jobs + cron_run_logs","text":"
  • cron_jobs: Zeitplan + Status
  • cron_run_logs: einzelne L\u00e4ufe
  • status: running|success|error
  • output
  • error_message
"},{"location":"architecture/database/#aax_activation_bytes","title":"aax_activation_bytes","text":"

Cache f\u00fcr Audible-Activation-Bytes (AAX-DRM).

Felder:

  • checksum \u2014 SHA-1-Pr\u00fcfsumme der AAX-Datei (Prim\u00e4rschl\u00fcssel)
  • activation_bytes \u2014 Hex-String der Activation Bytes
  • created_at
"},{"location":"architecture/database/#user_prefs","title":"user_prefs","text":"

Benutzer-spezifische Einstellungen (Key-Value).

Felder:

  • key
  • value
  • updated_at
"},{"location":"architecture/database/#converter_scan_entries","title":"converter_scan_entries","text":"

DB-seitige Erfassung gescannter Dateien im Converter-Eingangsordner.

Felder:

  • rel_path \u2014 relativer Pfad zum converter_raw_dir
  • is_dir \u2014 Verzeichnis-Flag
  • size \u2014 Dateigr\u00f6\u00dfe in Bytes
  • modified_at \u2014 Datei-\u00c4nderungsdatum
  • job_id \u2014 zugewiesener Converter-Job (falls vorhanden)
  • scanned_at
"},{"location":"architecture/database/#migrationrecovery","title":"Migration/Recovery","text":"

Beim Start werden Schema und Settings-Metadaten automatisch abgeglichen.

Bei korruptem SQLite-File:

  1. Datei wird nach backend/data/corrupt-backups/ verschoben
  2. neue DB wird initialisiert
  3. Schema wird neu aufgebaut
"},{"location":"architecture/database/#direkte-inspektion","title":"Direkte Inspektion","text":"
sqlite3 backend/data/ripster.db\n\n.mode table\nSELECT id, status, title, media_type, created_at FROM jobs ORDER BY created_at DESC;\nSELECT id, parent_job_id, job_kind, is_multipart_movie, disc_number FROM jobs ORDER BY created_at DESC;\nSELECT key, value FROM settings_values ORDER BY key;\nSELECT checksum, activation_bytes FROM aax_activation_bytes;\nSELECT rel_path, job_id FROM converter_scan_entries;\n
"},{"location":"architecture/frontend/","title":"Frontend-Komponenten","text":"

Frontend: React + PrimeReact + Vite.

"},{"location":"architecture/frontend/#hauptseiten","title":"Hauptseiten","text":""},{"location":"architecture/frontend/#ripperpagejsx","title":"RipperPage.jsx","text":"

Pipeline-Steuerung:

  • Status/Progress/ETA
  • Metadaten-Dialog
  • Playlist-Entscheidung
  • Review-Panel (Track-Auswahl)
  • Queue-Interaktion (reorder/add/remove)
  • Job-Aktionen (Start/Cancel/Retry/Re-Encode)
  • Hardware-Monitoring-Anzeige
  • Aktivit\u00e4ts-Tracking (Skripte, Ketten, Cron)
"},{"location":"architecture/frontend/#settingspagejsx","title":"SettingsPage.jsx","text":"

Konfiguration:

  • dynamisches Settings-Formular (DynamicSettingsForm)
  • Skripte/Ketten inkl. Reorder/Test
  • User-Presets
  • Cron-Jobs (CronJobsTab)
"},{"location":"architecture/frontend/#historypagejsx","title":"HistoryPage.jsx","text":"

Historie:

  • Job-Liste/Filter
  • Job-Details + Logs
  • OMDb-Nachzuweisung
  • Re-Encode/Restart-Workflows
"},{"location":"architecture/frontend/#converterpagejsx","title":"ConverterPage.jsx","text":"

Datei-Converter:

  • Datei-Explorer des Converter-Eingangsordners (Baum-Ansicht)
  • Upload von Audio/Video-Dateien (bis zu 50 Dateien gleichzeitig)
  • Dateiverwaltung: Umbenennen, Verschieben, L\u00f6schen, Ordner erstellen
  • Jobs aus Dateiauswahl erstellen
  • Converter-Job-Konfiguration (Ausgabeformat, Preset, Tracks)
  • Job-Start, Abbruch, L\u00f6schung
  • Automatischer Scan-Status
"},{"location":"architecture/frontend/#audiobookspagejsx","title":"AudiobooksPage.jsx","text":"

Dedizierter AAX-/Audiobook-Flow:

  • Upload-Panel f\u00fcr AAX-Dateien
  • aktive Audiobook-Jobkarten mit Start/Cancel/Retry/Delete
  • Audiobook-Konfigurationspanel und Output-Explorer
"},{"location":"architecture/frontend/#downloadspagejsx","title":"DownloadsPage.jsx","text":"

Download-Queue:

  • Ausgabedateien aus der Job-Historie in die Queue einreihen
  • Download-Status verfolgen (ausstehend, wird verarbeitet, bereit, fehlgeschlagen)
  • Dateien als ZIP herunterladen
  • Download-Eintr\u00e4ge l\u00f6schen
"},{"location":"architecture/frontend/#databasepagejsx","title":"DatabasePage.jsx","text":"

Expert-Modus:

  • Tabellarische Rohsicht der Job-Datenbank
  • Orphan-RAW-Import
"},{"location":"architecture/frontend/#wichtige-komponenten","title":"Wichtige Komponenten","text":"
  • PipelineStatusCard.jsx \u2014 Pipeline-Status-Anzeige mit Progress
  • MetadataSelectionDialog.jsx \u2014 OMDb-Metadaten-Auswahl
  • MediaInfoReviewPanel.jsx \u2014 Track-Auswahl-Interface (Video/Audio/Untertitel)
  • JobDetailDialog.jsx \u2014 Job-Detailansicht mit Logs
  • CronJobsTab.jsx \u2014 Cron-Job-Verwaltung
  • DynamicSettingsForm.jsx \u2014 Schema-gesteuertes Einstellungsformular
  • ConverterJobCard.jsx \u2014 Converter-Job-Darstellung
  • CdRipConfigPanel.jsx \u2014 Konfiguration f\u00fcr Audio-CD-Ripping
"},{"location":"architecture/frontend/#api-client-apiclientjs","title":"API-Client (api/client.js)","text":"
  • zentraler request() mit JSON-Handling
  • Fehlerobjekt aus API wird auf Error(message) gemappt
  • VITE_API_BASE default /api
"},{"location":"architecture/frontend/#websocket-hooksusewebsocketjs","title":"WebSocket (hooks/useWebSocket.js)","text":"
  • URL: VITE_WS_URL oder automatisch ws(s)://<host>/ws
  • Auto-Reconnect mit 1500ms Intervall

In App.jsx werden u. a. verarbeitet:

  • PIPELINE_STATE_CHANGED
  • PIPELINE_PROGRESS
  • PIPELINE_QUEUE_CHANGED
  • Disk erkannt / Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • DOWNLOADS_UPDATED
  • CONVERTER_SCAN_UPDATE
  • RUNTIME_ACTIVITY_CHANGED
"},{"location":"architecture/frontend/#buildrun","title":"Build/Run","text":"
# dev\nnpm run dev --prefix frontend\n\n# prod build\nnpm run build --prefix frontend\n
"},{"location":"architecture/overview/","title":"Architektur-\u00dcbersicht","text":""},{"location":"architecture/overview/#kernprinzipien","title":"Kernprinzipien","text":""},{"location":"architecture/overview/#event-getriebene-pipeline","title":"Event-getriebene Pipeline","text":"

pipelineService h\u00e4lt einen Snapshot der State-Machine und broadcastet \u00c4nderungen sofort via WebSocket.

State-\u00c4nderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update\n
"},{"location":"architecture/overview/#service-layer","title":"Service-Layer","text":"
Route -> Service -> DB/Tool-Execution\n

Routes enthalten kaum Business-Logik.

"},{"location":"architecture/overview/#schema-getriebene-settings","title":"Schema-getriebene Settings","text":"

Settings sind DB-schema-getrieben (settings_schema + settings_values), UI rendert dynamisch aus diesen Daten.

"},{"location":"architecture/overview/#echtzeit-kommunikation","title":"Echtzeit-Kommunikation","text":"

WebSocket l\u00e4uft auf /ws.

Wichtige Events:

  • PIPELINE_STATE_CHANGED, PIPELINE_PROGRESS, PIPELINE_QUEUE_CHANGED
  • Disk erkannt, Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • SETTINGS_UPDATED, SETTINGS_BULK_UPDATED
  • SETTINGS_SCRIPTS_UPDATED, SETTINGS_SCRIPT_CHAINS_UPDATED, USER_PRESETS_UPDATED
  • CRON_JOBS_UPDATED, CRON_JOB_UPDATED
  • PIPELINE_ERROR, DISK_DETECTION_ERROR
"},{"location":"architecture/overview/#prozessausfuhrung","title":"Prozessausf\u00fchrung","text":"

Externe Tools werden als Child-Processes gestartet (processRunner):

  • Streaming von stdout/stderr
  • Progress-Parsing (progressParsers.js)
  • kontrollierter Abbruch (SIGINT/SIGKILL-Fallback)
"},{"location":"architecture/overview/#persistenz","title":"Persistenz","text":"

SQLite-Datei: backend/data/ripster.db

Kern-Tabellen:

  • jobs, pipeline_state
  • settings_schema, settings_values
  • scripts, script_chains, script_chain_steps
  • user_presets
  • cron_jobs, cron_run_logs

Beim Start werden Schema und Settings-Migrationen automatisch ausgef\u00fchrt.

"},{"location":"architecture/overview/#fehlerbehandlung","title":"Fehlerbehandlung","text":"

Zentrales Error-Handling liefert:

{\n  \"error\": {\n    \"message\": \"...\",\n    \"statusCode\": 400,\n    \"reqId\": \"...\",\n    \"details\": []\n  }\n}\n

Fehlgeschlagene Jobs bleiben in der Historie (Fehler oder Abgebrochen) und k\u00f6nnen erneut gestartet werden.

"},{"location":"architecture/overview/#cors-runtime-konfig","title":"CORS & Runtime-Konfig","text":"
  • CORS_ORIGIN default: *
  • LOG_LEVEL default: info
  • DB-/Log-Pfade \u00fcber DB_PATH/LOG_DIR konfigurierbar
"},{"location":"configuration/","title":"Anhang: Konfiguration","text":"

Dieser Abschnitt ist die technische Referenz zu allen Konfigurationsarten in Ripster.

"},{"location":"configuration/#inhalte","title":"Inhalte","text":"
  • Einstellungsreferenz

    Vollst\u00e4ndige Liste aller UI-Settings (Typ, Default, Hinweise).

    Einstellungsreferenz

  • Umgebungsvariablen

    backend/.env und frontend/.env inkl. Priorit\u00e4ten.

    Umgebungsvariablen

"},{"location":"configuration/#zuruck-zum-handbuch","title":"Zur\u00fcck zum Handbuch","text":"
  • Benutzerhandbuch \u00dcberblick
"},{"location":"configuration/environment/","title":"Umgebungsvariablen","text":"

Umgebungsvariablen steuern Backend/Vite au\u00dferhalb der DB-basierten UI-Settings.

"},{"location":"configuration/environment/#backend-backendenv","title":"Backend (backend/.env)","text":"Variable Default (Code) Beschreibung PORT 3001 Express-Port DB_PATH backend/data/ripster.db SQLite-Datei (relativ zu backend/) LOG_DIR backend/logs Fallback-Logverzeichnis (wenn log_dir-Setting nicht gesetzt/lesbar) CORS_ORIGIN * CORS-Origin f\u00fcr API LOG_LEVEL info debug, info, warn, error

Beispiel:

PORT=3001\nDB_PATH=/var/lib/ripster/ripster.db\nLOG_DIR=/var/log/ripster\nCORS_ORIGIN=http://192.168.1.50:5173\nLOG_LEVEL=info\n

Hinweis: backend/.env.example enth\u00e4lt bewusst dev-freundliche Werte (z. B. lokaler CORS_ORIGIN).

"},{"location":"configuration/environment/#frontend-frontendenv","title":"Frontend (frontend/.env)","text":"Variable Default Beschreibung VITE_API_BASE /api API-Basis f\u00fcr Fetch-Client VITE_WS_URL automatisch aus window.location + /ws Optional explizite WebSocket-URL VITE_PUBLIC_ORIGIN leer \u00d6ffentliche Vite-Origin (Remote-Dev) VITE_ALLOWED_HOSTS true Komma-separierte Hostliste f\u00fcr Vite allowedHosts VITE_HMR_PROTOCOL abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Protokoll (ws/wss) VITE_HMR_HOST abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Host VITE_HMR_CLIENT_PORT abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Client-Port

Beispiele:

# lokal (mit Vite-Proxy)\nVITE_API_BASE=/api\n
# remote dev\nVITE_API_BASE=http://192.168.1.50:3001/api\nVITE_WS_URL=ws://192.168.1.50:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.50:5173\nVITE_ALLOWED_HOSTS=192.168.1.50,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.50\nVITE_HMR_CLIENT_PORT=5173\n
"},{"location":"configuration/environment/#prioritat","title":"Priorit\u00e4t","text":"
  1. Prozess-Umgebungsvariablen
  2. .env
  3. Code-Defaults
"},{"location":"configuration/settings-reference/","title":"Einstellungsreferenz","text":"

Diese Seite dokumentiert den aktuellen Stand der Settings auf Basis von settings_schema und der aktiven GUI-Logik.

"},{"location":"configuration/settings-reference/#wichtiges-verhalten-in-der-gui","title":"Wichtiges Verhalten in der GUI","text":"
  • Speichern erfolgt gesammelt ueber Aenderungen speichern (Bulk-Update).
  • ui_expert_mode wird sofort einzeln gespeichert (nicht erst mit Bulk-Speichern).
  • *_owner-Felder sind in der GUI erst aktiv, wenn der zugehoerige Pfad gesetzt ist.
  • Einige Keys sind absichtlich ausgeblendet und nur technisch (API/DB) nutzbar.
  • Benachrichtigungs-Event-Toggles sind nur sichtbar, wenn pushover_enabled=true.
"},{"location":"configuration/settings-reference/#fallbacks-und-pfadaufloesung","title":"Fallbacks und Pfadaufloesung","text":"
  • Leere profilspezifische Pfade fallen auf Installationsdefaults zurueck.
  • download_dir nutzt bei leerem Wert den Default-Downloadpfad.
  • Die Konfigurationsseite zeigt im Block Effektive Pfade die tatsaechlich verwendeten Laufzeitpfade.
"},{"location":"configuration/settings-reference/#vollstaendige-feldliste","title":"Vollstaendige Feldliste","text":""},{"location":"configuration/settings-reference/#kategorie-benachrichtigungen","title":"Kategorie: Benachrichtigungen","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Expertenmodus ui_expert_mode boolean false Standard Schaltet erweiterte Einstellungen in der UI ein. PushOver aktiviert pushover_enabled boolean false Standard Master-Schalter f\u00fcr PushOver Versand. PushOver Token pushover_token string leer Standard Application Token f\u00fcr PushOver. PushOver User pushover_user string leer Standard User-Key f\u00fcr PushOver. PushOver Device (optional) pushover_device string leer Expertenmodus Optionales Ziel-Device in PushOver. PushOver Titel-Pr\u00e4fix pushover_title_prefix string Ripster Standard Prefix im PushOver Titel. PushOver Priority pushover_priority number 0 Expertenmodus Priorit\u00e4t -2 bis 2. PushOver Timeout (ms) pushover_timeout_ms number 7000 Expertenmodus HTTP Timeout f\u00fcr PushOver Requests. Bei manueller Auswahl senden pushover_notify_metadata_ready boolean true Standard Sendet, wenn ein Job eine manuelle Auswahl/Entscheidung ben\u00f6tigt (z.B. Metadaten, Titel oder Playlist). Bei Rip-Start senden pushover_notify_rip_started boolean true Standard Sendet beim Start des MakeMKV-Rips. Bei Encode-Start senden pushover_notify_encoding_started boolean true Standard Sendet beim Start von HandBrake. Bei Erfolg senden pushover_notify_job_finished boolean true Standard Sendet bei erfolgreich abgeschlossenem Job. Bei Fehler senden pushover_notify_job_error boolean true Standard Sendet bei Fehlern in der Pipeline. Bei Abbruch senden pushover_notify_job_cancelled boolean true Standard Sendet wenn Job manuell abgebrochen wurde. Bei Re-Encode Start senden pushover_notify_reencode_started boolean true Standard Sendet beim Start von RAW Re-Encode. Bei Re-Encode Erfolg senden pushover_notify_reencode_finished boolean true Standard Sendet bei erfolgreichem RAW Re-Encode."},{"location":"configuration/settings-reference/#kategorie-converter","title":"Kategorie: Converter","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Erlaubte Datei-Endungen converter_scan_extensions string mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus Standard Komma-getrennte Liste erlaubter Dateiendungen f\u00fcr den Scan (ohne Punkt). Auto-Scan (Polling) converter_polling_enabled boolean false Standard Converter Raw-Ordner automatisch in regelm\u00e4\u00dfigen Abst\u00e4nden scannen. Polling-Intervall (Sekunden) converter_polling_interval number 300 Standard Intervall f\u00fcr automatischen Scan des Converter-Ordners."},{"location":"configuration/settings-reference/#kategorie-laufwerk","title":"Kategorie: Laufwerk","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Laufwerksmodus drive_mode select auto Standard Auto-Discovery oder explizites Device. Explizite Laufwerke drive_devices path [] Standard Laufwerke f\u00fcr den expliziten Modus als JSON-Array mit Pfad und MakeMKV-Index, z.B. [{\"path\":\"/dev/sr0\",\"makemkvIndex\":0},{\"path\":\"/dev/sr1\",\"makemkvIndex\":1}]. Nur relevant wenn Modus = Explizites Device. Device Pfad drive_device path /dev/sr0 Ausgeblendet (nur API/DB) Nur f\u00fcr expliziten Modus, z.B. /dev/sr0. MakeMKV Source Index makemkv_source_index number 0 Ausgeblendet (nur API/DB) Disc Index im Auto-Modus. Automatische Disk-Erkennung disc_auto_detection_enabled boolean true Standard Wenn deaktiviert, findet keine automatische Laufwerkspr\u00fcfung statt. Neue Disks werden nur per \"Laufwerk neu lesen\" erkannt. Polling Intervall (ms) disc_poll_interval_ms number 4000 Expertenmodus Intervall f\u00fcr Disk-Erkennung. Laufwerk nach Rip auswerfen auto_eject_after_rip boolean false Standard Wenn aktiv, wird das Laufwerk nach erfolgreichem Abschluss eines Rip-Vorgangs automatisch ausgeworfen (eject)."},{"location":"configuration/settings-reference/#kategorie-logging","title":"Kategorie: Logging","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Terminal-Ausgabe aktiv server_console_log_output_enabled boolean true Expertenmodus Master-Schalter f\u00fcr die Ausgabe der Server-Logs im Terminal (z.B. start.sh). Das Schreiben in Log-Dateien bleibt immer aktiv. HTTP-Logs im Terminal server_console_log_http_enabled boolean true Expertenmodus Steuert HTTP Request-Logs im Terminal (z.B. request:start). Dateilogs bleiben unver\u00e4ndert. DEBUG im Terminal server_console_log_debug_enabled boolean true Expertenmodus Steuert DEBUG-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. INFO im Terminal server_console_log_info_enabled boolean true Expertenmodus Steuert INFO-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. WARN im Terminal server_console_log_warn_enabled boolean true Expertenmodus Steuert WARN-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. ERROR im Terminal server_console_log_error_enabled boolean true Expertenmodus Steuert ERROR-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert."},{"location":"configuration/settings-reference/#kategorie-metadaten","title":"Kategorie: Metadaten","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System TMDb Read Access Token tmdb_api_read_access_token string leer Standard Read Access Token f\u00fcr Serien-Metadaten \u00fcber TheMovieDB (TMDb). Film-Sprache dvd_series_language string de-DE Standard Bevorzugte TMDb-Sprache f\u00fcr Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE oder en-US. Fallback Sprache dvd_series_fallback_languages string de-DE,en-US Standard Kommagetrennte TMDb-Fallback-Sprachen f\u00fcr Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE,en-US,fr-FR. Coverart-Nachladen aktiv coverart_recovery_enabled boolean true Standard Wenn aktiv, werden fehlende Coverarts automatisch in Intervallen gepr\u00fcft und nachgeladen. Coverart-Pr\u00fcfintervall (Stunden) coverart_recovery_interval_hours number 6 Standard Intervall f\u00fcr automatische Pr\u00fcfung fehlender Coverarts in Stunden. NFO nach Encode erzeugen generate_nfo_after_encode boolean false Standard Erstellt nach erfolgreichem Encode automatisch eine .nfo-Datei neben der Ausgabedatei."},{"location":"configuration/settings-reference/#kategorie-monitoring","title":"Kategorie: Monitoring","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Hardware Monitoring aktiviert hardware_monitoring_enabled boolean true Standard Master-Schalter: aktiviert/deaktiviert das komplette Hardware-Monitoring (Polling + Berechnung + WebSocket-Updates). Hardware Monitoring Intervall (ms) hardware_monitoring_interval_ms number 5000 Expertenmodus Polling-Intervall f\u00fcr CPU/RAM/GPU/Storage-Metriken."},{"location":"configuration/settings-reference/#kategorie-pfade","title":"Kategorie: Pfade","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System Raw Ausgabeordner (Blu-ray) raw_dir_bluray path leer Standard Optionaler RAW-Zielpfad nur f\u00fcr Blu-ray. Leer = Fallback auf \"Raw Ausgabeordner\". Raw Ausgabeordner (DVD) raw_dir_dvd path leer Standard Optionaler RAW-Zielpfad nur f\u00fcr DVD. Leer = Fallback auf \"Raw Ausgabeordner\". CD RAW-Ordner raw_dir_cd path leer Standard Basisordner f\u00fcr rohe CD-WAV-Dateien (cdparanoia-Output). Leer = Standardpfad (data/output/cd). Audiobook RAW-Ordner raw_dir_audiobook path leer Standard Basisordner f\u00fcr hochgeladene AAX-Dateien. Leer = Standardpfad (data/output/audiobook-raw). Serien-Ordner (Blu-ray) series_dir_bluray path leer Standard Zielordner f\u00fcr Blu-ray-Serienfolgen. Leer = Standardpfad (data/output/series). Film Ausgabeordner (Blu-ray) movie_dir_bluray path leer Standard Optionaler Encode-Zielpfad nur f\u00fcr Blu-ray. Leer = Fallback auf \"Film Ausgabeordner\". Film Ausgabeordner (DVD) movie_dir_dvd path leer Standard Optionaler Encode-Zielpfad nur f\u00fcr DVD. Leer = Fallback auf \"Film Ausgabeordner\". Serien-Ordner (DVD) series_dir_dvd path leer Standard Zielordner f\u00fcr DVD-Serienfolgen. Leer = Standardpfad (data/output/series). CD Output-Ordner movie_dir_cd path leer Standard Zielordner f\u00fcr encodierte CD-Ausgaben (FLAC, MP3 usw.). Leer = gleicher Ordner wie CD RAW-Ordner. Audiobook Output-Ordner movie_dir_audiobook path leer Standard Zielordner f\u00fcr encodierte Audiobook-Dateien. Leer = Standardpfad (data/output/audiobooks). Download ZIP-Ordner download_dir path leer Standard Zielordner f\u00fcr vorbereitete ZIP-Downloads. Leer = Standardpfad (data/downloads). Externe Speicher external_storage_paths path [] Standard Wird links unter \"Freie Speicher\" angezeigt. Log Ordner log_dir path installationsabhaengig Standard Basisordner f\u00fcr Logs. Job-Logs liegen direkt hier, Backend-Logs in /backend. CD Output Template cd_output_template string {artist} - {album} ({year})/{trackNr} {artist} - {title} Standard Template f\u00fcr relative CD-Ausgabepfade ohne Dateiendung. Platzhalter: {artist}, {album}, {year}, {title}, {trackNr}, {trackNo}. Unterordner sind \u00fcber \"/\" m\u00f6glich. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Output Template (Blu-ray) output_template_bluray string ${title} (${year})/${title} (${year}) Standard Template f\u00fcr Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner \u00fcber \"/\" m\u00f6glich \u2013 alles nach dem letzten \"/\" ist der Dateiname. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Output Template (Blu-ray Serie, Episode) output_template_bluray_series_episode string {seriesTitle}/Staffel {seasonNr}/S{seasonNr}E{episodeNr} - {episodeTitle} Standard Template f\u00fcr einzelne Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNr}. Output Template (Blu-ray Serie, Multi-Episode) output_template_bluray_series_multi_episode string {seriesTitle}/Staffel {seasonNr}/S{0:seasonNr}E{episodeRange} - {episodeTitle} (Teil {parts}) Standard Template f\u00fcr zusammengefasste Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Output Template (DVD) output_template_dvd string ${title} (${year})/${title} (${year}) Standard Template f\u00fcr Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner \u00fcber \"/\" m\u00f6glich \u2013 alles nach dem letzten \"/\" ist der Dateiname. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Output Template (DVD Serie, Episode) output_template_dvd_series_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeNo} - {episodeTitle} Standard Template f\u00fcr einzelne DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNr}. Output Template (DVD Serie, Multi-Episode) output_template_dvd_series_multi_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeRange} Standard Template f\u00fcr zusammengefasste DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Output Template (Audiobook) output_template_audiobook string {author}/{author} - {title} ({year}) Standard Template f\u00fcr relative Audiobook-Ausgabepfade ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}. Unterordner sind \u00fcber \"/\" m\u00f6glich. Audiobook RAW Template audiobook_raw_template string {author} - {title} ({year}) Standard Template f\u00fcr relative Audiobook-RAW-Ordner. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}. Converter Raw-Ordner converter_raw_dir path leer Standard Eingangsordner f\u00fcr den Converter (Import-Scan und Datei-Uploads). Jeder Upload erh\u00e4lt einen Unterordner. Leer = Standardpfad (data/output/converter-raw). Converter Ausgabe (Video) converter_movie_dir path leer Standard Ausgabepfad f\u00fcr konvertierte Video-Dateien. Leer = Standardpfad (data/output/converted-movies). Converter Ausgabe (Audio) converter_audio_dir path leer Standard Ausgabepfad f\u00fcr konvertierte Audio-Dateien. Leer = Standardpfad (data/output/converted-audio). Output-Template (Video) converter_output_template_video string {title} Standard Dateiname-Template f\u00fcr konvertierte Video-Dateien (ohne Endung). Platzhalter: {title}, {year}. Output-Template (Audio) converter_output_template_audio string {artist} - {title} Standard Dateiname-Template f\u00fcr konvertierte Audio-Dateien (ohne Endung). Platzhalter: {artist}, {title}, {album}, {year}, {trackNr}. RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series path leer Standard RAW-Zielpfad f\u00fcr Blu-ray-Serien. Leer = gleicher Pfad wie RAW-Ordner (Blu-ray). Eigent\u00fcmer RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe f\u00fcr Blu-ray-Serien-RAW. Leer = Eigent\u00fcmer Raw-Ordner (Blu-ray). Eigent\u00fcmer Raw-Ordner (Blu-ray) raw_dir_bluray_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. RAW-Ordner (DVD Serie) raw_dir_dvd_series path leer Standard RAW-Zielpfad f\u00fcr DVD-Serien. Leer = gleicher Pfad wie RAW-Ordner (DVD). Eigent\u00fcmer RAW-Ordner (DVD Serie) raw_dir_dvd_series_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe f\u00fcr DVD-Serien-RAW. Leer = Eigent\u00fcmer Raw-Ordner (DVD). Eigent\u00fcmer Raw-Ordner (DVD) raw_dir_dvd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer CD RAW-Ordner raw_dir_cd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Audiobook RAW-Ordner raw_dir_audiobook_owner string leer Standard Eigent\u00fcmer der Audiobook-RAW-Dateien im Format user:gruppe. Nur aktiv wenn ein Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Converter RAW-Ordner converter_raw_dir_owner string leer Standard Eigent\u00fcmer der Converter-Eingabedateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Serien-Ordner (Blu-ray) series_dir_bluray_owner string leer Standard Eigent\u00fcmer der Blu-ray-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Film-Ordner (Blu-ray) movie_dir_bluray_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Film-Ordner (DVD) movie_dir_dvd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Serien-Ordner (DVD) series_dir_dvd_owner string leer Standard Eigent\u00fcmer der DVD-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer CD Output-Ordner movie_dir_cd_owner string leer Standard Eigent\u00fcmer der encodierten CD-Ausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Audiobook Output-Ordner movie_dir_audiobook_owner string leer Standard Eigent\u00fcmer der encodierten Audiobook-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Converter Video Output-Ordner converter_movie_dir_owner string leer Standard Eigent\u00fcmer der konvertierten Video-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Converter Audio Output-Ordner converter_audio_dir_owner string leer Standard Eigent\u00fcmer der konvertierten Audio-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Eigent\u00fcmer Download ZIP-Ordner download_dir_owner string leer Standard Eigent\u00fcmer der vorbereiteten ZIP-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Kapitel Template (Audiobook) output_chapter_template_audiobook string {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle} Standard Template f\u00fcr kapitelweise Audiobook-Ausgaben (MP3/FLAC) ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}, {chapterNr}, {chapterNo}, {chapterTitle}. Unterordner sind \u00fcber \"/\" m\u00f6glich."},{"location":"configuration/settings-reference/#kategorie-tools","title":"Kategorie: Tools","text":"GUI-Feld Key Typ Default Sichtbarkeit Wirkung im System MakeMKV Kommando makemkv_command string makemkvcon Expertenmodus Pfad oder Befehl f\u00fcr makemkvcon. MakeMKV Key makemkv_registration_key string leer Standard Optionaler Registrierungsschl\u00fcssel. Wird beim Speichern nach ~/.MakeMKV/settings.conf synchronisiert. Darunter kann der aktuelle Betakey per API \u00fcbernommen werden. Mediainfo Kommando mediainfo_command string mediainfo Expertenmodus Pfad oder Befehl f\u00fcr mediainfo. Minimale Titell\u00e4nge (Minuten) makemkv_min_length_minutes number 60 Standard Filtert kurze Titel beim Rip. HandBrake Kommando handbrake_command string HandBrakeCLI Expertenmodus Pfad oder Befehl f\u00fcr HandBrakeCLI. Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen handbrake_restart_delete_incomplete_output boolean true Standard Wenn aktiv, wird bei \"Encode neu starten\" der bisherige (nicht erfolgreiche) Output vor Start entfernt. Parallele Jobs pipeline_max_parallel_jobs number 1 Standard Maximale Anzahl parallel laufender Jobs. Weitere Starts landen in der Queue. Max. parallele Audio CD Jobs pipeline_max_parallel_cd_encodes number 2 Standard Maximale Anzahl parallel laufender Audio CD Jobs (Rip + Encode als Einheit). Gilt zus\u00e4tzlich zum Gesamtlimit. Script-Test Timeout (ms) script_test_timeout_ms number 0 Expertenmodus Timeout fuer Script-Tests in den Settings. 0 = kein Timeout. Max. Encodes gesamt (medienunabh\u00e4ngig) pipeline_max_total_encodes number 3 Standard Gesamtlimit f\u00fcr alle parallel laufenden Encode-Jobs (Film + Audio CD). Dieses Limit hat Vorrang vor den Einzellimits. Audio CDs: Queue-Reihenfolge \u00fcberspringen pipeline_cd_bypasses_queue boolean false Standard Wenn aktiv, k\u00f6nnen Audio CD Jobs unabh\u00e4ngig von Film-Jobs starten (\u00fcberspringen die Film-Queue-Reihenfolge). Einzellimits und Gesamtlimit gelten weiterhin. cdparanoia Kommando cdparanoia_command string cdparanoia Expertenmodus Pfad oder Befehl f\u00fcr cdparanoia. Wird als Fallback genutzt wenn kein individuelles Kommando gesetzt ist. FFmpeg Kommando ffmpeg_command string ffmpeg Standard Pfad oder Befehl f\u00fcr ffmpeg. Wird f\u00fcr Audiobook-Encoding genutzt. FFprobe Kommando ffprobe_command string ffprobe Standard Pfad oder Befehl f\u00fcr ffprobe. Wird f\u00fcr Audiobook-Metadaten und Kapitel genutzt. Serie: PlayAll Untergrenze (%) series_playall_tolerance_lower_pct number 10 Standard Untere Toleranz in Prozent f\u00fcr die Plausibilit\u00e4tspr\u00fcfung von PlayAll gegen Episodensumme (DVD/Blu-ray). Serie: PlayAll Obergrenze (%) series_playall_tolerance_upper_pct number 10 Standard Obere Toleranz in Prozent f\u00fcr die Plausibilit\u00e4tspr\u00fcfung von PlayAll gegen Episodensumme (DVD/Blu-ray). Mediainfo Extra Args mediainfo_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr mediainfo (Blu-ray). MakeMKV Rip Modus makemkv_rip_mode_bluray select backup Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollst\u00e4ndige Blu-ray Struktur im RAW-Ordner. MakeMKV Analyze Extra Args makemkv_analyze_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Analyze (Blu-ray). MakeMKV Rip Extra Args makemkv_rip_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Rip (Blu-ray). HandBrake Preset handbrake_preset_bluray string H.264 MKV 1080p30 Standard Preset Name f\u00fcr -Z (Blu-ray). Leer = kein Preset, nur CLI-Parameter werden verwendet. HandBrake Extra Args handbrake_extra_args_bluray string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-mask ac3,eac3,dts --au... Standard Zus\u00e4tzliche CLI-Argumente (Blu-ray). Ausgabeformat output_extension_bluray select mkv Standard Dateiendung f\u00fcr finale Datei (Blu-ray). Mediainfo Extra Args mediainfo_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr mediainfo (DVD). MakeMKV Rip Modus makemkv_rip_mode_dvd select mkv Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollst\u00e4ndige Disc-Struktur im RAW-Ordner. MakeMKV Analyze Extra Args makemkv_analyze_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Analyze (DVD). MakeMKV Rip Extra Args makemkv_rip_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Rip (DVD). HandBrake Preset handbrake_preset_dvd string H.264 MKV 480p30 Standard Preset Name f\u00fcr -Z (DVD). Leer = kein Preset, nur CLI-Parameter werden verwendet. HandBrake Extra Args handbrake_extra_args_dvd string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-mask ac3,eac3,dts --au... Standard Zus\u00e4tzliche CLI-Argumente (DVD). Ausgabeformat output_extension_dvd select mkv Standard Dateiendung f\u00fcr finale Datei (DVD). mkvmerge Kommando mkvmerge_command string mkvmerge Standard Pfad oder Befehl f\u00fcr mkvmerge. Wird f\u00fcr Multipart-Movie-Merges genutzt."},{"location":"configuration/settings-reference/#beispiele-fuer-haeufige-settings","title":"Beispiele fuer haeufige Settings","text":"
  • drive_devices: [{\"path\":\"/dev/sr0\",\"makemkvIndex\":0},{\"path\":\"/dev/sr1\",\"makemkvIndex\":1}]
  • external_storage_paths: [{\"name\":\"USB HDD\",\"path\":\"/mnt/usb-hdd\"}]
  • converter_scan_extensions: mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus
  • output_template_bluray: ${title} (${year})/${title} (${year})
  • output_template_audiobook: {author}/{author} - {title} ({year})
  • output_chapter_template_audiobook: {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle}
  • download_dir_owner: ripster:media
"},{"location":"configuration/settings-reference/#hinweise-zu-ausgeblendeten-keys","title":"Hinweise zu ausgeblendeten Keys","text":"

Folgende Keys liegen im Schema, sind aber im normalen Settings-Formular absichtlich ausgeblendet: drive_device, makemkv_source_index, makemkv_rip_mode_bluray, makemkv_rip_mode_dvd. Aenderungen daran erfolgen nur ueber API/DB oder technische Migrationen.

"},{"location":"deployment/","title":"Anhang: Deployment","text":"

Technische Betriebsdokumentation f\u00fcr Entwicklung und Produktion.

  • Entwicklungsumgebung

    Lokale Entwicklung mit Hot-Reload.

    Entwicklung

  • Produktion

    Installation und Betrieb auf Servern.

    Produktion

"},{"location":"deployment/development/","title":"Entwicklungsumgebung","text":""},{"location":"deployment/development/#voraussetzungen","title":"Voraussetzungen","text":"
  • Node.js >= 20.19.0
  • externe Tools installiert (makemkvcon, HandBrakeCLI, mediainfo)
"},{"location":"deployment/development/#schnellstart","title":"Schnellstart","text":"
./start.sh\n

Startet:

  • Backend (http://localhost:3001, mit nodemon)
  • Frontend (http://localhost:5173, mit Vite HMR)

Stoppen: Ctrl+C.

"},{"location":"deployment/development/#manuell","title":"Manuell","text":""},{"location":"deployment/development/#backend","title":"Backend","text":"
cd backend\nnpm install\nnpm run dev\n
"},{"location":"deployment/development/#frontend","title":"Frontend","text":"
cd frontend\nnpm install\nnpm run dev\n
"},{"location":"deployment/development/#vite-proxy-dev","title":"Vite-Proxy (Dev)","text":"

frontend/vite.config.js proxied standardm\u00e4\u00dfig:

  • /api -> http://127.0.0.1:3001
  • /ws -> ws://127.0.0.1:3001
"},{"location":"deployment/development/#remote-dev-optional","title":"Remote-Dev (optional)","text":"

Beispiel frontend/.env.local:

VITE_API_BASE=http://192.168.1.100:3001/api\nVITE_WS_URL=ws://192.168.1.100:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.100:5173\nVITE_ALLOWED_HOSTS=192.168.1.100,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.100\nVITE_HMR_CLIENT_PORT=5173\n
"},{"location":"deployment/development/#nutzliche-kommandos","title":"N\u00fctzliche Kommandos","text":"
# Root dev (backend + frontend)\nnpm run dev\n\n# einzeln\nnpm run dev:backend\nnpm run dev:frontend\n\n# Frontend Build\nnpm run build:frontend\n
"},{"location":"deployment/production/","title":"Produktions-Deployment","text":""},{"location":"deployment/production/#automatische-installation-empfohlen","title":"Automatische Installation (empfohlen)","text":"

Das mitgelieferte install.sh richtet Ripster vollautomatisch ein \u2013 inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.

Unterst\u00fctzte Systeme laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS Voraussetzung: root-Rechte, Internetzugang

"},{"location":"deployment/production/#schnellstart-via-curl","title":"Schnellstart via curl","text":"
curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n

Oder mit wget:

wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n

Optionen nur via Datei

Beim Pipen von curl/wget k\u00f6nnen keine Argumente \u00fcbergeben werden. F\u00fcr benutzerdefinierte Optionen zuerst herunterladen und dann mit sudo bash install.sh [Optionen] ausf\u00fchren.

"},{"location":"deployment/production/#optionen","title":"Optionen","text":"Option Standard Beschreibung --branch <branch> dev Git-Branch f\u00fcr die Installation --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Systembenutzer f\u00fcr den Dienst --port <port> 3001 Backend-Port --host <hostname> Auto (Maschinen-IP) Hostname/IP f\u00fcr die Weboberfl\u00e4che --no-makemkv \u2013 MakeMKV-Installation \u00fcberspringen --no-handbrake \u2013 HandBrake-Installation \u00fcberspringen --no-nginx \u2013 nginx-Einrichtung \u00fcberspringen --reinstall \u2013 Bestehende Installation aktualisieren (Daten bleiben erhalten) -h, --help \u2013 Hilfe anzeigen"},{"location":"deployment/production/#beispiele","title":"Beispiele","text":"
# Standard-Installation\nsudo bash install.sh\n\n# Anderen Branch und Port verwenden\nsudo bash install.sh --branch dev --port 8080\n\n# Ohne MakeMKV (bereits installiert)\nsudo bash install.sh --no-makemkv\n\n# Bestehende Installation aktualisieren\nsudo bash install.sh --reinstall\n\n# Ohne nginx (eigener Reverse-Proxy)\nsudo bash install.sh --no-nginx --host mein-server.local\n
"},{"location":"deployment/production/#was-das-skript-erledigt","title":"Was das Skript erledigt","text":"
  1. Systempr\u00fcfung \u2013 OS-Erkennung und Root-Check
  2. Systempakete \u2013 curl, wget, git, mediainfo, udev u. a.
  3. Node.js 20 \u2013 via NodeSource, falls noch nicht installiert
  4. MakeMKV \u2013 aktuelle Version wird aus dem offiziellen Forum ermittelt und aus dem Quellcode kompiliert (kann mit --no-makemkv \u00fcbersprungen werden)
  5. HandBrake \u2013 interaktive Auswahl:
    • Option 1: Standard (apt install handbrake-cli)
    • Option 2: Geb\u00fcndelte GPU-Version mit NVDEC aus bin/HandBrakeCLI
  6. Systembenutzer ripster \u2013 ohne Login-Shell und ohne Home-Verzeichnis; Gruppen werden (falls vorhanden) erg\u00e4nzt: cdrom, optical, disk, video, render
  7. Repository \u2013 klont Branch nach --dir (bei --reinstall: sichert backend/data, aktualisiert Repo, stellt Daten wieder her)
  8. Verzeichnisse \u2013 stellt u. a. sicher: backend/data, backend/logs, backend/data/output/raw, backend/data/output/movies, backend/data/logs
  9. npm-Abh\u00e4ngigkeiten \u2013 Root, Backend (nur production), Frontend
  10. Frontend-Build \u2013 npm run build mit relativen API-URLs (nginx-kompatibel)
  11. Backend .env \u2013 wird automatisch generiert (bei --reinstall bleibt bestehende .env erhalten)
  12. Berechtigungen \u2013 zun\u00e4chst ripster:ripster auf Installationsverzeichnis; bei sudo-Aufruf werden Output-/Log-Ordner auf <aufrufender user>:ripster mit 775 gesetzt; .env wird auf 600 gesetzt
  13. MakeMKV User-Ordner \u2013 erstellt bei sudo-Aufruf ~/.MakeMKV f\u00fcr den aufrufenden Benutzer
  14. systemd-Dienst \u2013 ripster-backend.service erstellt, aktiviert und gestartet
  15. nginx \u2013 konfiguriert als Reverse-Proxy f\u00fcr Frontend, /api/ und /ws (kann mit --no-nginx \u00fcbersprungen werden)
"},{"location":"deployment/production/#nach-der-installation","title":"Nach der Installation","text":"
# Status pr\u00fcfen\nsudo systemctl status ripster-backend\n\n# Logs verfolgen\nsudo journalctl -u ripster-backend -f\n\n# Neustart\nsudo systemctl restart ripster-backend\n\n# Aktualisieren\nsudo bash /opt/ripster/install.sh --reinstall\n

Zugriff: http://<Maschinen-IP> (oder der mit --host angegebene Hostname)

"},{"location":"deployment/production/#handbrake-modus-gpunvdec","title":"HandBrake-Modus (GPU/NVDEC)","text":"

Bei nicht-interaktiver Ausf\u00fchrung (Pipe von curl) wird automatisch die Standard-Version gew\u00e4hlt. F\u00fcr die GPU-Version zuerst herunterladen:

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh -o install.sh\nsudo bash install.sh\n# \u2192 Interaktive Auswahl: Option 2 f\u00fcr NVDEC\n

Das geb\u00fcndelte Binary liegt unter bin/HandBrakeCLI und wird nach /usr/local/bin/HandBrakeCLI kopiert.

"},{"location":"deployment/production/#manuelle-installation","title":"Manuelle Installation","text":"

Die folgenden Abschnitte beschreiben die einzelnen Schritte f\u00fcr manuelle oder angepasste Setups.

"},{"location":"deployment/production/#empfohlene-architektur","title":"Empfohlene Architektur","text":"
Client\n  -> nginx (Reverse Proxy + statisches Frontend)\n    -> Backend API/WebSocket (Node.js, Port 3001)\n

Wichtig: Das Backend serviert im aktuellen Stand keine frontend/dist-Dateien automatisch.

"},{"location":"deployment/production/#1-frontend-builden","title":"1) Frontend builden","text":"
cd frontend\nnpm install\nnpm run build\n

Artefakte liegen in frontend/dist/.

"},{"location":"deployment/production/#2-backend-als-systemd-service","title":"2) Backend als systemd-Service","text":"

Beispiel /etc/systemd/system/ripster-backend.service:

[Unit]\nDescription=Ripster Backend\nAfter=network.target\n\n[Service]\nType=simple\nUser=ripster\nWorkingDirectory=/opt/ripster/backend\nExecStart=/usr/bin/env node src/index.js\nRestart=on-failure\nRestartSec=5\nEnvironment=NODE_ENV=production\nEnvironment=PORT=3001\nEnvironment=LOG_LEVEL=info\n\n[Install]\nWantedBy=multi-user.target\n

Aktivieren:

sudo systemctl daemon-reload\nsudo systemctl enable --now ripster-backend\nsudo systemctl status ripster-backend\n
"},{"location":"deployment/production/#3-nginx-konfigurieren","title":"3) nginx konfigurieren","text":"

Beispiel /etc/nginx/sites-available/ripster:

server {\n    listen 80;\n    server_name ripster.local;\n    client_max_body_size 8G;\n\n    root /opt/ripster/frontend/dist;\n    index index.html;\n\n    location / {\n        try_files $uri $uri/ /index.html;\n    }\n\n    location /api/ {\n        proxy_pass http://127.0.0.1:3001;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n\n    location /ws {\n        proxy_pass http://127.0.0.1:3001;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n    }\n}\n

Aktivieren:

sudo ln -s /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl reload nginx\n

Hinweis: Fuer groessere Uploads wie .aax-Audiobooks muss client_max_body_size ausreichend hoch gesetzt sein. Im mitgelieferten Beispiel sind 8G hinterlegt.

"},{"location":"deployment/production/#datenbank-backup","title":"Datenbank-Backup","text":"
sqlite3 /opt/ripster/backend/data/ripster.db \\\n  \".backup '/var/backups/ripster-$(date +%Y%m%d).db'\"\n
"},{"location":"deployment/production/#sicherheit","title":"Sicherheit","text":"
  • Ripster hat keine eingebaute Authentifizierung.
  • F\u00fcr externen Zugriff mindestens Basic Auth + TLS + Netzwerksegmentierung/VPN einsetzen.
  • Secrets nicht ins Repo committen (.env, Settings-Felder).
"},{"location":"getting-started/","title":"Benutzerhandbuch \u00dcberblick","text":"

Dieses Kapitel ist f\u00fcr den Betrieb von Ripster im Alltag geschrieben.

"},{"location":"getting-started/#zielgruppe","title":"Zielgruppe","text":"
  • Anwender, die Discs verarbeiten wollen
  • Betreiber, die den t\u00e4glichen Ablauf stabil fahren m\u00f6chten
  • Power-User, die Queue/Skripte/Cron im UI steuern m\u00f6chten
"},{"location":"getting-started/#kapitelstruktur","title":"Kapitelstruktur","text":"Kapitel Zweck Voraussetzungen Produktions- vs. Dev-Voraussetzungen klar trennen Installation Ripster aufsetzen und starten Ersteinrichtung Pfade, Tools und Metadaten korrekt setzen Erster Lauf Ein kompletter Job von Disc bis Datei GUI-Seiten Alle Ansichten und Aktionen im Detail Workflows Typische Abl\u00e4ufe und Entscheidungen aus User-Sicht"},{"location":"getting-started/#wenn-du-neu-startest","title":"Wenn du neu startest","text":"
  1. Voraussetzungen
  2. Installation
  3. Ersteinrichtung
  4. Erster Lauf
"},{"location":"getting-started/#wenn-ripster-bereits-lauft","title":"Wenn Ripster bereits l\u00e4uft","text":"
  1. GUI-Seiten
  2. Workflows
  3. Bei Detailfragen: Technischer Anhang
"},{"location":"getting-started/configuration/","title":"Ersteinrichtung","text":"

Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf.

"},{"location":"getting-started/configuration/#ziel-der-ersteinrichtung","title":"Ziel der Ersteinrichtung","text":"

Vor dem ersten Job m\u00fcssen drei Dinge stabil sein:

  1. Pfade stimmen (RAW, Output, Logs)
  2. Tools sind aufrufbar (MakeMKV, HandBrake, MediaInfo)
  3. Metadatenzug\u00e4nge funktionieren (OMDb, optional TMDb/MusicBrainz)
"},{"location":"getting-started/configuration/#empfohlene-reihenfolge","title":"Empfohlene Reihenfolge","text":""},{"location":"getting-started/configuration/#1-basis-in-settings-konfiguration","title":"1) Basis in Settings -> Konfiguration","text":"

Setze zuerst:

  • Raw-Ordner und Film-/Serien-Ordner
  • Log Ordner
  • MakeMKV Kommando, HandBrake Kommando, Mediainfo Kommando
  • OMDb API Key

Dann speichern.

"},{"location":"getting-started/configuration/#2-profile-pro-medium-festziehen","title":"2) Profile pro Medium festziehen","text":"

Ripster l\u00f6st viele Werte profilspezifisch auf (bluray, dvd, cd, audiobook).

Pflichtpr\u00fcfung:

  • RAW-Pfade je Profil
  • Output-Pfade je Profil
  • HandBrake-Preset je Profil
  • Output-Templates je Profil

F\u00fcr Serien zus\u00e4tzlich:

  • RAW-Ordner (Blu-ray/DVD Serie)
  • Serien-Ordner (Blu-ray/DVD)
  • Serien-Templates (Episode/Multi-Episode)
"},{"location":"getting-started/configuration/#3-queue-verhalten-definieren","title":"3) Queue-Verhalten definieren","text":"

Stelle ein:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • optional Audio CDs: Queue-Reihenfolge \u00fcberspringen

Damit steuerst du Durchsatz, Priorit\u00e4t und Lastverteilung.

"},{"location":"getting-started/configuration/#4-metadatenquellen-absichern","title":"4) Metadatenquellen absichern","text":"

Film:

  • OMDb-Key pr\u00fcfen

Serien:

  • TMDb Read Access Token setzen
  • Sprache/Fallback-Sprachen festlegen

CD/Audiodaten:

  • MusicBrainz aktiviert nach Bedarf
"},{"location":"getting-started/configuration/#5-optional-benachrichtigungen","title":"5) Optional: Benachrichtigungen","text":"
  • PushOver-Zugangsdaten setzen
  • PushOver Test ausf\u00fchren
  • Event-Toggles pro Phase pr\u00fcfen
"},{"location":"getting-started/configuration/#6-optional-automatisierung","title":"6) Optional: Automatisierung","text":"
  1. Skripte testen
  2. Skriptketten bauen/testen
  3. Cronjobs erst danach aktivieren
"},{"location":"getting-started/configuration/#funktionsprufung-kurztest","title":"Funktionspr\u00fcfung (Kurztest)","text":"
  1. Disc in Ripper erkennen lassen.
  2. Analyse starten.
  3. Metadaten \u00fcbernehmen.
  4. Bis Bereit zum Encodieren laufen.
  5. Encode starten und Abschluss in Historie pr\u00fcfen.
"},{"location":"getting-started/configuration/#typische-konfigurationsfehler","title":"Typische Konfigurationsfehler","text":"Symptom H\u00e4ufige Ursache Job bleibt fr\u00fch auf Fehler Toolkommando falsch oder nicht im PATH RAW/Output landet am falschen Ort Profilpfade nicht gesetzt, Fallback greift Serienausgabe landet bei Filmen Serienpfade/Serientemplates fehlen Queue verh\u00e4lt sich unerwartet Gesamtlimit und Lane-Limits widersprechen sich"},{"location":"getting-started/configuration/#weiter","title":"Weiter","text":"
  • Erster Lauf
  • GUI-Seiten
  • Workflows aus Nutzersicht
"},{"location":"getting-started/installation/","title":"Installation","text":"

Die empfohlene Installation l\u00e4uft \u00fcber install.sh und richtet Ripster vollst\u00e4ndig ein.

Du musst daf\u00fcr keine Tools manuell vorinstallieren. Das Skript installiert die ben\u00f6tigten Abh\u00e4ngigkeiten automatisch, sofern sie nicht explizit mit --no-* \u00fcbersprungen werden.

"},{"location":"getting-started/installation/#unterstutzte-systeme-und-anforderungen","title":"Unterst\u00fctzte Systeme und Anforderungen","text":"
  • unterst\u00fctzt laut Script: debian, ubuntu, linuxmint, pop
  • Ausf\u00fchrung als root (oder via sudo)
  • Internetzugang w\u00e4hrend der Installation
"},{"location":"getting-started/installation/#schritt-fur-schritt","title":"Schritt-f\u00fcr-Schritt","text":""},{"location":"getting-started/installation/#1-installationsskript-herunterladen","title":"1. Installationsskript herunterladen","text":"
wget -qO install.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh\n
"},{"location":"getting-started/installation/#2-installation-ausfuhren","title":"2. Installation ausf\u00fchren","text":"
sudo bash install.sh\n

W\u00e4hrend der Installation w\u00e4hlst du den HandBrake-Modus:

  • 1 Standard (Paketinstallation)
  • 2 GPU/NVDEC (geb\u00fcndeltes Binary)
"},{"location":"getting-started/installation/#3-dienststatus-prufen","title":"3. Dienststatus pr\u00fcfen","text":"
sudo systemctl status ripster-backend\n
"},{"location":"getting-started/installation/#4-weboberflache-offnen","title":"4. Weboberfl\u00e4che \u00f6ffnen","text":"
  • mit nginx (Standard): http://<Server-IP>
  • ohne nginx (--no-nginx): API auf http://<Server-IP>:3001/api
"},{"location":"getting-started/installation/#was-installsh-konkret-einrichtet","title":"Was install.sh konkret einrichtet","text":"
  1. pr\u00fcft Betriebssystem, Root-Rechte und ermittelt Host/IP
  2. aktualisiert Paketquellen und installiert Basispakete (curl, wget, git, mediainfo, udev ...)
  3. installiert Node.js 20 (falls nicht passend vorhanden)
  4. installiert optional MakeMKV (Build aus den offiziellen Quellen)
  5. installiert optional HandBrakeCLI (Standard oder GPU/NVDEC)
  6. installiert optional nginx
  7. legt den Systembenutzer ripster an (ohne Login-Shell, ohne Home) und erg\u00e4nzt Gruppen (cdrom, optical, disk, video, render, falls vorhanden)
  8. klont das Repository nach /opt/ripster (oder aktualisiert bei --reinstall)
  9. legt Verzeichnisse an:
  10. /opt/ripster/backend/data
  11. /opt/ripster/backend/logs
  12. /opt/ripster/backend/data/output/raw
  13. /opt/ripster/backend/data/output/movies
  14. /opt/ripster/backend/data/logs
  15. installiert npm-Abh\u00e4ngigkeiten (Root, Backend, Frontend) und baut das Frontend
  16. erzeugt backend/.env (bei --reinstall bleibt bestehende .env erhalten)
  17. setzt Rechte/Besitz und erstellt bei sudo-Installation zus\u00e4tzlich ~/.MakeMKV f\u00fcr den aufrufenden Benutzer
  18. erzeugt und startet ripster-backend.service
  19. konfiguriert und startet nginx (falls nicht \u00fcbersprungen)
"},{"location":"getting-started/installation/#wichtige-optionen","title":"Wichtige Optionen","text":"Option Default laut Script Zweck --branch <branch> dev Branch f\u00fcr die Installation --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Service-Benutzer --port <port> 3001 Backend-Port --host <hostname> automatisch ermittelte Host-IP Hostname/IP f\u00fcr Webzugriff/CORS --no-makemkv aus MakeMKV-Installation \u00fcberspringen --no-handbrake aus HandBrake-Installation \u00fcberspringen --no-nginx aus nginx-Setup \u00fcberspringen --reinstall aus bestehende Installation aktualisieren

Beispiele:

sudo bash install.sh --branch dev\nsudo bash install.sh --port 8080 --host ripster.local\nsudo bash install.sh --reinstall\n
"},{"location":"getting-started/installation/#betrieb-im-alltag","title":"Betrieb im Alltag","text":"
# Logs live ansehen\nsudo journalctl -u ripster-backend -f\n\n# Dienst neu starten\nsudo systemctl restart ripster-backend\n\n# Update aus bestehender Installation\nsudo bash /opt/ripster/install.sh --reinstall\n
"},{"location":"getting-started/installation/#haufige-stolperstellen","title":"H\u00e4ufige Stolperstellen","text":"
  • Laufwerk nicht zugreifbar: Laufwerksrechte/Gruppen pr\u00fcfen
  • CLI-Tool fehlt wegen --no-*: Tool nachinstallieren oder Befehl in Settings korrigieren
  • UI nicht erreichbar: nginx-Status und Firewall pr\u00fcfen
"},{"location":"getting-started/installation/#danach-weiter","title":"Danach weiter","text":"
  1. Ersteinrichtung
  2. Erster Lauf
"},{"location":"getting-started/prerequisites/","title":"Voraussetzungen","text":"

Die Voraussetzungen h\u00e4ngen davon ab, wie du Ripster betreibst.

"},{"location":"getting-started/prerequisites/#produktionsbetrieb-mit-installsh-standard","title":"Produktionsbetrieb mit install.sh (Standard)","text":"

F\u00fcr den normalen Betrieb sind nur wenige Punkte vorab n\u00f6tig.

"},{"location":"getting-started/prerequisites/#pflicht","title":"Pflicht","text":"
  • unterst\u00fctztes Linux-System (laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS)
  • root-Rechte
  • Internetzugang w\u00e4hrend der Installation
  • optisches Laufwerk f\u00fcr Disc-Betrieb

install.sh installiert die ben\u00f6tigten Tools selbst (u. a. Node.js, MakeMKV, HandBrakeCLI, MediaInfo), sofern sie nicht explizit per --no-* \u00fcbersprungen werden.

"},{"location":"getting-started/prerequisites/#laufwerk-kurz-prufen","title":"Laufwerk kurz pr\u00fcfen","text":"
ls /dev/sr*\nlsblk | grep rom\n

Wenn n\u00f6tig Rechte setzen (Beispiel):

sudo chmod a+rw /dev/sr0\n
"},{"location":"getting-started/prerequisites/#optional-vorab","title":"Optional vorab","text":"
  • OMDb API-Key (kann auch nach Installation in den Settings gesetzt werden)
  • PushOver-Zugangsdaten (optional)
"},{"location":"getting-started/prerequisites/#entwicklungsmodus-nur-fur-dev","title":"Entwicklungsmodus (nur f\u00fcr Dev)","text":"

Wenn du lokal entwickelst (./start.sh, npm run dev), gelten zus\u00e4tzliche Voraussetzungen:

  • Node.js >= 20.19.0
  • makemkvcon, HandBrakeCLI, mediainfo im PATH

Details: Entwicklungsumgebung

"},{"location":"getting-started/prerequisites/#abschluss-checkliste","title":"Abschluss-Checkliste","text":"
  • [ ] Produktionsbetrieb: Linux + root + Internet + Laufwerk vorhanden
  • [ ] Dev-Modus (nur falls ben\u00f6tigt): Node.js und CLI-Tools verf\u00fcgbar
"},{"location":"getting-started/quickstart/","title":"Erster Lauf","text":"

Dieser Ablauf f\u00fchrt einen vollst\u00e4ndigen Disc-Job von Erkennung bis fertiger Datei durch.

"},{"location":"getting-started/quickstart/#1-disc-erkennen","title":"1) Disc erkennen","text":"
  1. Ripper \u00f6ffnen.
  2. Disc einlegen.
  3. Auf Medium erkannt warten.

Pr\u00fcfen:

  • Disk-Information zeigt Device/Label.
  • Falls nicht: Laufwerk neu lesen.
"},{"location":"getting-started/quickstart/#2-analyse-starten","title":"2) Analyse starten","text":"

Aktion:

  • Analyse starten

Erwartung:

  • Status Analyse
  • danach Metadaten-Dialog
"},{"location":"getting-started/quickstart/#3-metadaten-bestatigen","title":"3) Metadaten best\u00e4tigen","text":"

Im Dialog:

  1. Treffer suchen/ausw\u00e4hlen.
  2. Bei Serie zus\u00e4tzlich Disc-Nummer setzen.
  3. Auswahl \u00fcbernehmen.

M\u00f6gliche Abzweigungen:

  • Duplikatfilm -> \u00dcbernahme erzwingen oder Multipart movie
  • vorhandenes RAW -> Entscheidungsdialog (weiterverwenden oder neu rippen)
"},{"location":"getting-started/quickstart/#4-ripreview-phase","title":"4) Rip/Review-Phase","text":"

Normalfall:

  • Startbereit -> Rippen -> Mediainfo-Pruefung

M\u00f6gliche Alternativen:

  • vorhandenes RAW: direkter Sprung in Pr\u00fcfung
  • Blu-ray/DVD-Entscheidung n\u00f6tig: Warte auf Auswahl f\u00fcr Playlist/Titel
"},{"location":"getting-started/quickstart/#5-encode-review-abschlieen","title":"5) Encode-Review abschlie\u00dfen","text":"

Bei Bereit zum Encodieren:

  • Titel festlegen
  • Audio-/Subtitle-Spuren pr\u00fcfen
  • optional Preset ausw\u00e4hlen
  • optional Pre-/Post-Skripte w\u00e4hlen

Dann:

  • Encoding starten
"},{"location":"getting-started/quickstart/#6-encoding-uberwachen","title":"6) Encoding \u00fcberwachen","text":"

W\u00e4hrend Encodieren:

  • Fortschritt/ETA im Ripper
  • Queue- und Runtime-Status beobachten
  • optional Logkontrolle in Historie
"},{"location":"getting-started/quickstart/#7-ergebnis-verifizieren","title":"7) Ergebnis verifizieren","text":"

Nach Fertig:

  1. Historie \u00f6ffnen.
  2. Jobdetail pr\u00fcfen.
  3. Output-Pfad und Log plausibilisieren.

Kontrollpunkte:

  • finale Datei am erwarteten Template-Pfad
  • RAW-Ordnerzustand finalisiert (kein Incomplete_)
"},{"location":"getting-started/quickstart/#8-typische-folgeaktionen","title":"8) Typische Folgeaktionen","text":"
  • falsche Metadaten: OMDb neu zuordnen
  • andere Trackauswahl: Review neu starten
  • erneuter Encode aus RAW: RAW neu encodieren
  • gleicher Plan erneut: Encode neu starten
"},{"location":"gui/","title":"GUI-Seiten","text":"

Dieses Kapitel ist das Bedienhandbuch f\u00fcr die Oberfl\u00e4chen im Alltag.

"},{"location":"gui/#seitenuberblick","title":"Seiten\u00fcberblick","text":"Seite Rolle im Betrieb Typischer Einsatz Ripper Live-Steuerung der Pipeline Disc-Flow starten, Queue steuern, Review freigeben Audiobooks AAX-Spezialflow Upload, Jobkonfiguration und Encode von Audiobooks Settings Konfiguration/Automatisierung Pfade, Tools, Queue-Limits, Skripte, Cron Historie Nachbearbeitung und Kontrolle Logs, Re-Encode, L\u00f6schvorschau, Recovery-Aktionen Converter dateibasierte Konvertierung Video/Audio/ISO ohne Disc-Rip verarbeiten Downloads ZIP-Exports RAW/Output aus Historie bereitstellen Database (Expert) Recovery-Sicht orphan RAW finden und importieren"},{"location":"gui/#empfohlener-tagesablauf","title":"Empfohlener Tagesablauf","text":"
  1. Ripper oder Converter/Audiobooks: neue Arbeit starten.
  2. Historie: Ergebnisse validieren und ggf. nachbearbeiten.
  3. Downloads: Exporte f\u00fcr externe \u00dcbergabe erzeugen.
  4. Settings: Regeln und Limits nur kontrolliert anpassen.
"},{"location":"gui/#navigation","title":"Navigation","text":"

Direkt in der Top-Navigation:

  • Ripper, Converter, Audiobooks, Settings, Historie, Downloads

Nur per URL:

  • Database unter /database (nur Expertenmodus in der Navigation sichtbar)
  • TMDb Migration unter /tmdb-migration (Direktlink, nicht in der Navigation)
"},{"location":"gui/audiobooks/","title":"Audiobooks","text":"

Die Seite Audiobooks ist der spezialisierte Workflow f\u00fcr Audible-*.aax-Dateien.

"},{"location":"gui/audiobooks/#seitenstruktur","title":"Seitenstruktur","text":"

Die Oberfl\u00e4che besteht aus zwei Hauptbereichen:

  1. Audiobooks Upload
  2. Audiobook Jobs
"},{"location":"gui/audiobooks/#1-audiobooks-upload","title":"1) Audiobooks Upload","text":"

Der Upload akzeptiert ausschlie\u00dflich .aax.

"},{"location":"gui/audiobooks/#bedienung","title":"Bedienung","text":"
  • Datei ausw\u00e4hlen (Button oder Drag-and-Drop)
  • Upload starten
  • Auswahl entfernen oder laufenden Upload abbrechen

W\u00e4hrend des Uploads zeigt die UI:

  • Prozentfortschritt
  • \u00fcbertragene/gesamte Bytes
  • Statusmeldung (z. B. \u201eJob vorbereitet\u201c, \u201ein Queue eingereiht\u201c)
"},{"location":"gui/audiobooks/#ablauf-nach-erfolgreichem-upload","title":"Ablauf nach erfolgreichem Upload","text":"
  • AAX wird serverseitig gepr\u00fcft
  • Audiobook-Job wird angelegt
  • Job landet je nach Pipelinezustand in READY_TO_START, startet direkt oder wird eingereiht
"},{"location":"gui/audiobooks/#2-audiobook-jobs","title":"2) Audiobook Jobs","text":"

Gezeigt werden aktive Jobs (nicht abgeschlossene). Fertige Jobs liegen in der Historie.

Jeder Job kann eingeklappt/ausgeklappt werden und zeigt:

  • Titel-/Metadatenblock (Titel, Autor, Sprecher, Jahr, Kapitel)
  • Statusbadge
  • Fortschritt/ETA
  • ggf. Kapitel-Fortschritt
"},{"location":"gui/audiobooks/#konfigurierbare-job-parameter","title":"Konfigurierbare Job-Parameter","text":"

Im ausgeklappten Job:

  • Ausgabeformat (m4b, mp3, flac)
  • formatspezifische Optionen (dynamisch je Format)
  • Kapitelnamen bearbeiten
  • Pre-Rip-Ausf\u00fchrungen (Skript/Kette)
  • Post-Rip-Ausf\u00fchrungen (Skript/Kette)
"},{"location":"gui/audiobooks/#formatverhalten","title":"Formatverhalten","text":"
  • m4b: eine Datei mit Kapiteln
  • mp3/flac: kapitelweise Ausgabedateien

F\u00fcr mp3/flac zeigt die UI w\u00e4hrend/nach dem Lauf eine Kapitel-Status-Tabelle (Rip/Encode).

"},{"location":"gui/audiobooks/#aktionen-je-job","title":"Aktionen je Job","text":"
  • Encode starten (bzw. Neustart mit aktuellen Optionen)
  • Abbrechen
  • Job l\u00f6schen (mit Best\u00e4tigung)
"},{"location":"gui/audiobooks/#relevante-settings","title":"Relevante Settings","text":"
  • raw_dir_audiobook
  • movie_dir_audiobook
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command
"},{"location":"gui/audiobooks/#typische-fehlerbilder","title":"Typische Fehlerbilder","text":"
  • Upload wird abgelehnt: Datei ist keine g\u00fcltige *.aax.
  • Start/Encode schl\u00e4gt fehl: ffprobe oder ffmpeg nicht erreichbar.
  • Unerwartete Ausgabeorte: Templates/Pfade passen nicht zur gew\u00fcnschten Struktur.
"},{"location":"gui/converter/","title":"Converter","text":"

Die Seite Converter verarbeitet bereits vorhandene Dateien (Video, Audio, ISO) ohne Laufwerks-Rip.

"},{"location":"gui/converter/#betriebsmodell","title":"Betriebsmodell","text":"

Der Converter arbeitet auf dem Eingangspfad converter_raw_dir:

  • Uploads landen dort
  • Explorer-Aktionen arbeiten dort
  • daraus werden Converter-Jobs erstellt

Wichtig:

  • Upload erzeugt nicht automatisch einen Job.
  • Joberstellung erfolgt explizit \u00fcber Auswahl im Explorer.
"},{"location":"gui/converter/#datei-explorer","title":"Datei-Explorer","text":"

Der Explorer zeigt den kompletten Baum unter converter_raw_dir.

Aktionen:

Aktion Wirkung Upload Dateien werden in den Raw-Baum geschrieben Ordner erstellen legt Unterordner im Raw-Baum an Umbenennen benennt Datei/Ordner im Raw-Baum um Verschieben verschiebt innerhalb des Raw-Baums L\u00f6schen entfernt Datei/Ordner dauerhaft Scannen synchronisiert Explorer und DB-Zuordnungen

Upload-Regeln:

  • Dateiendung muss in Erlaubte Datei-Endungen* enthalten sein
  • bei Versto\u00df wird der Upload abgelehnt
"},{"location":"gui/converter/#joberstellung-aus-explorer-auswahl","title":"Joberstellung aus Explorer-Auswahl","text":"

Es gibt zwei Audio-Strategien:

  1. Ein Job pro Datei
  2. Gemeinsamer Job (Audio)

Verhalten:

  • Video/ISO werden grunds\u00e4tzlich als Einzeljobs angelegt.
  • Audio kann als Shared-Job mit mehreren Eingabedateien erzeugt werden.

Shared-Audio-Job:

  • h\u00e4lt mehrere inputPaths
  • kann vor Start erweitert/reduziert werden (nur Audio-Dateien)
"},{"location":"gui/converter/#job-konfiguration","title":"Job-Konfiguration","text":"

Vor Start je Job einstellbar:

  • converterMediaType (video, audio, iso)
  • outputFormat
  • Metadaten
  • Track-/Titelwahl (bei video/iso)
  • Pre-/Post-Encode-Skripte und Ketten

Spezifika:

  • Video/ISO laufen durch Mediainfo/Review \u00e4hnlich zum Disc-Flow.
  • Audio kann direkt mit Formatoptionen konfiguriert werden.
"},{"location":"gui/converter/#ausgabe-pfade","title":"Ausgabe-Pfade","text":""},{"location":"gui/converter/#videoiso","title":"Video/ISO","text":"
  • Root: converter_movie_dir
  • Dateiname: Output-Template (Video)
  • Endung: aus gew\u00e4hltem Output-Format
"},{"location":"gui/converter/#audio","title":"Audio","text":"
  • Root: converter_audio_dir
  • Dateiname/Ordner: Output-Template (Audio)
  • bei Shared-/Folder-Job: Ausgabe als Ordnerstruktur mit Trackdateien
"},{"location":"gui/converter/#queue-und-start","title":"Queue und Start","text":"

Converter-Jobs laufen \u00fcber dieselbe Pipeline-/Queue-Logik:

  • sofortiger Start wenn Limits frei
  • sonst Queue-Eintrag

Parallelit\u00e4t richtet sich nach den globalen Encode-Limits in Settings.

"},{"location":"gui/converter/#auto-scan-polling","title":"Auto-Scan (Polling)","text":"

Mit aktiviertem Polling:

  • converter_raw_dir wird zyklisch gescannt
  • neue Dateien erscheinen automatisch im Explorer

Relevante Settings:

  • Auto-Scan (Polling)
  • Polling-Intervall (Sekunden)
"},{"location":"gui/converter/#abgrenzung-zu-audiobooks","title":"Abgrenzung zu Audiobooks","text":"
  • Converter: beliebige Audio/Video/ISO-Dateien
  • Audiobooks: dedizierter AAX-Workflow mit Kapitel-/Audiobook-Metadaten
"},{"location":"gui/database/","title":"Database (Expert)","text":"

/database ist die Recovery- und Expertensicht f\u00fcr F\u00e4lle, in denen Dateisystem und Historie nicht mehr sauber zusammenpassen.

"},{"location":"gui/database/#zugriff","title":"Zugriff","text":"
  • direkte Route: /database
  • nicht Teil der Standardnavigation
"},{"location":"gui/database/#bereich-gefundene-raw-eintrage","title":"Bereich Gefundene RAW-Eintr\u00e4ge","text":"

Dieser Bereich listet RAW-Verzeichnisse ohne zugeordneten Historie-Job.

Aktionen:

  • RAW pr\u00fcfen: scannt konfigurierte RAW-Wurzeln
  • Job anlegen: erstellt aus einem orphan RAW einen neuen Historie-Job
"},{"location":"gui/database/#was-bei-job-anlegen-passiert","title":"Was bei Job anlegen passiert","text":"
  • RAW-Pfad wird als Importquelle registriert
  • Job wird in die Historie geschrieben
  • anschlie\u00dfende Analyse l\u00e4uft als RAW-basierter Einstieg (ohne klassischen Disc-Read)

Typischer Einsatz:

  • manuelle Dateioperationen au\u00dferhalb der UI
  • Migrationen
  • Wiederherstellung nach abgebrochenen L\u00e4ufen
"},{"location":"gui/database/#sicherheits-und-betriebsregeln","title":"Sicherheits- und Betriebsregeln","text":"
  • Aktionen wirken direkt auf produktive Historie/Dateipfade.
  • Vor Import oder L\u00f6schung immer Pfad und Ziel pr\u00fcfen.
  • Diese Seite nur f\u00fcr Recovery-Szenarien nutzen, nicht f\u00fcr normalen Tagesbetrieb.
"},{"location":"gui/downloads/","title":"Downloads","text":"

Auf Downloads werden ZIP-Archive f\u00fcr Historie-Artefakte erstellt und bereitgestellt.

"},{"location":"gui/downloads/#was-heruntergeladen-werden-kann","title":"Was heruntergeladen werden kann","text":"

Ein Download-Eintrag referenziert immer einen Historie-Job und genau ein Ziel:

  • RAW
  • Output

Erzeugt wird ein ZIP-Archiv im Download-Verzeichnis des Backends.

"},{"location":"gui/downloads/#statusmodell","title":"Statusmodell","text":"Status Bedeutung queued Eintrag erstellt, wartet auf Verarbeitung processing ZIP wird gerade gebaut ready Archiv fertig, Download-Link aktiv failed Erzeugung oder Zugriff fehlgeschlagen"},{"location":"gui/downloads/#eintrag-anlegen","title":"Eintrag anlegen","text":"

Startpunkt ist die Historie:

  1. Job \u00f6ffnen.
  2. Download einreihen.
  3. Ziel (RAW oder Output) w\u00e4hlen.
  4. Status in Downloads verfolgen.
"},{"location":"gui/downloads/#wichtige-laufzeitdetails","title":"Wichtige Laufzeitdetails","text":"
  • Wenn bereits ein passendes, aktuelles Archiv existiert, kann der Eintrag wiederverwendet werden.
  • Nach Backend-Neustart werden unterbrochene queued/processing-Eintr\u00e4ge gepr\u00fcft und fortgesetzt.
  • Fehlt eine erwartete ZIP-Datei bei ready, wird der Eintrag auf failed gesetzt.
"},{"location":"gui/downloads/#download-auslosen","title":"Download ausl\u00f6sen","text":"

Bei Status ready:

  • Download-Button l\u00e4dt die ZIP direkt aus /api/downloads/:id/file.
"},{"location":"gui/downloads/#eintrage-entfernen","title":"Eintr\u00e4ge entfernen","text":"

L\u00f6schen entfernt:

  • Queue-Metadaten
  • zugeh\u00f6rige Archivdatei

Nicht erlaubt:

  • L\u00f6schen w\u00e4hrend queued/processing
"},{"location":"gui/downloads/#echtzeitaktualisierung","title":"Echtzeitaktualisierung","text":"

Die Seite reagiert auf DOWNLOADS_UPDATED per WebSocket. Dadurch sind Statuswechsel ohne Reload sichtbar.

"},{"location":"gui/history/","title":"Historie","text":"

Historie ist die Kontroll- und Nachbearbeitungsoberfl\u00e4che f\u00fcr alle bereits angelegten Jobs.

"},{"location":"gui/history/#hauptansicht","title":"Hauptansicht","text":"

Filter und Arbeitsmittel:

  • Suche (Titel, IMDb, Kontextbegriffe)
  • Statusfilter
  • Mediumfilter
  • Sortierung
  • Listen-/Grid-Layout

Jeder Eintrag zeigt auf einen Blick:

  • Titel, Jahr, Poster
  • Status und Zeitstempel
  • RAW-/Output-Verf\u00fcgbarkeit
  • Medien- und ggf. Containerhinweise
"},{"location":"gui/history/#detaildialog-was-dort-zusammenlauft","title":"Detaildialog: Was dort zusammenl\u00e4uft","text":"

Der Detaildialog b\u00fcndelt:

  • Metadaten (Film oder Serie)
  • Jobstatus und Fehlertexte
  • RAW-/Output-Pfade
  • Encode-Plan und Trackauswahl
  • ausgef\u00fchrte Kommandodetails
  • Prozesslog (Tail oder vollst\u00e4ndig)

Bei Seriencontainern wird disk-/child-orientiert dargestellt, nicht nur als Einzeljob.

"},{"location":"gui/history/#nachbearbeitungsaktionen-und-wirkung","title":"Nachbearbeitungsaktionen und Wirkung","text":"Aktion Typischer Einsatz Technische Wirkung OMDb neu zuordnen falsches Match, Titel/Jahr korrigieren Metadatenfelder werden neu geschrieben; Folder-Rename wird best effort angesto\u00dfen Review neu starten neue Track-/Titelbewertung n\u00f6tig Mediainfo/Review wird aus RAW neu aufgebaut RAW neu encodieren neuer Encode aus vorhandenem RAW startet Encode ohne neuen Laufwerks-Rip Encode neu starten gleiche best\u00e4tigte Auswahl erneut fahren letzter best\u00e4tigter Plan wird geladen, optional mit Bereinigung unvollst\u00e4ndiger Ausgabe Retry Rippen Rip/Analyse neu ansto\u00dfen neuer Rip-Lauf, inkl. erneuter RAW-Phase

L\u00f6schaktionen im Dialog:

  • RAW l\u00f6schen
  • Movie l\u00f6schen
  • Beides l\u00f6schen
  • Historieneintrag l\u00f6schen
"},{"location":"gui/history/#loschvorschau-und-selektives-loschen","title":"L\u00f6schvorschau und selektives L\u00f6schen","text":"

Vor endg\u00fcltigem L\u00f6schen zeigt Ripster eine Vorschau mit:

  • RAW-Kandidaten
  • Movie-/Episoden-Kandidaten
  • Related-Scope (Container/Kinder/verbundene Jobs)

Wichtige Punkte:

  • Pfade sind selektierbar.
  • F\u00fcr RAW-L\u00f6schung muss bei Mehrfachkandidaten mindestens ein RAW-Pfad gew\u00e4hlt werden.
  • Schutzlogik verhindert L\u00f6schungen au\u00dferhalb erlaubter Root-Verzeichnisse.
"},{"location":"gui/history/#serien-und-multipart-sicht-in-der-historie","title":"Serien- und Multipart-Sicht in der Historie","text":""},{"location":"gui/history/#serien","title":"Serien","text":"
  • Container zeigt aggregierten Zustand aus Child-Jobs.
  • Disk-/Episode-Aktionen k\u00f6nnen child-spezifisch ausgef\u00fchrt werden.
  • Im Ripper \u00f6ffnen hilft bei Bereit zum Encodieren-Kindern.
"},{"location":"gui/history/#multipart","title":"Multipart","text":"
  • gemeinsamer Container mit Disc-Childs
  • Disc-Nummern bleiben pro Child nachvollziehbar
  • Delete-Preview kann Related-Pfade gemeinsam aufl\u00f6sen
"},{"location":"gui/history/#logs-sinnvoll-nutzen","title":"Logs sinnvoll nutzen","text":"
  • Tail laden (800) f\u00fcr schnellen Fehlerkontext
  • Vollst\u00e4ndiges Log laden f\u00fcr forensische Analyse

Empfehlung:

  1. Erst Tail pr\u00fcfen.
  2. Bei Pfad-/Toolproblemen vollst\u00e4ndiges Log laden.
  3. Danach passende Wiederanlauf-Aktion w\u00e4hlen.
"},{"location":"gui/ripper/","title":"Ripper","text":"

Die Seite Ripper ist die Live-Steuerung der Pipeline. Hier laufen Disc-Erkennung, Queue-Steuerung, Review und Encode-Start zusammen.

"},{"location":"gui/ripper/#seitenaufbau-und-betriebslogik","title":"Seitenaufbau und Betriebslogik","text":"

Die Bereiche erscheinen in dieser Reihenfolge:

  1. Hardware Monitoring
  2. Job Queue
  3. Skript- / Cron-Status
  4. Job \u00dcbersicht
  5. Disk-Information
"},{"location":"gui/ripper/#1-hardware-monitoring","title":"1) Hardware Monitoring","text":"

Zeigt kontinuierlich:

  • CPU / RAM
  • GPU (wenn verf\u00fcgbar)
  • freie Speicherst\u00e4nde konfigurierter Pfade

Nutzen im Betrieb:

  • Engp\u00e4sse vor Jobfehlern erkennen
  • Pfadf\u00fcllst\u00e4nde vor Start gro\u00dfer Batchs pr\u00fcfen

Gesteuert \u00fcber Settings:

  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)
"},{"location":"gui/ripper/#2-job-queue","title":"2) Job Queue","text":"

Es gibt zwei operative Zonen:

  • Laufende Jobs
  • Warteschlange

M\u00f6gliche Queue-Eintr\u00e4ge:

  • Job-Startaktionen (Start, Retry Rippen, RAW neu encodieren, Encode neu starten, Review neu berechnen, Audio CD starten)
  • Nicht-Job-Eintr\u00e4ge (Skript, Skriptkette, Warten)

Wichtige Regeln:

  • Queue-Reihenfolge ist per Drag-and-Drop \u00e4nderbar.
  • Warten blockiert nachfolgende Queue-Starts bis kein aktiver Prozess mehr l\u00e4uft.
  • Skript und Skriptkette werden als Queue-Eintr\u00e4ge mitgef\u00fchrt.

Parallelit\u00e4t kommt aus Settings:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • optional Audio CDs: Queue-Reihenfolge \u00fcberspringen
"},{"location":"gui/ripper/#3-skript-cron-status","title":"3) Skript- / Cron-Status","text":"

Zeigt Runtime-Aktivit\u00e4ten:

  • laufende Skripte
  • laufende Ketten
  • Cron-Ausf\u00fchrungen
  • letzte abgeschlossene Aktivit\u00e4ten

Aktionen:

  • N\u00e4chster Schritt bei Ketten
  • Abbrechen
  • Liste leeren
"},{"location":"gui/ripper/#4-job-ubersicht","title":"4) Job \u00dcbersicht","text":"

Die Jobliste ist der zentrale Arbeitsbereich. Ein Klick \u00f6ffnet den jeweiligen Pipeline-Status.

"},{"location":"gui/ripper/#badges-und-kontext","title":"Badges und Kontext","text":"

Neben Status/Fortschritt zeigt die Liste je nach Job:

  • Serienkontext (Serien-Container, Staffel/Disk)
  • Multipart-Kontext (Multipart Movie, Disc-Nr.)
  • Queue-/Subjob-Kontext bei Serien-Episoden
"},{"location":"gui/ripper/#zustandsabhangige-aktionen","title":"Zustandsabh\u00e4ngige Aktionen","text":"Zustand Hauptaktion im Ripper Ergebnis Medium erkannt, Bereit Analyse starten startet MakeMKV-Analyse Metadatenauswahl Metadaten \u00f6ffnen Film/Serie ausw\u00e4hlen, Provider festlegen Warte auf Auswahl Playlist/Titel/RAW-Entscheidung best\u00e4tigen setzt Flow fort zur Pr\u00fcfung Startbereit Job starten startet Rip oder RAW-basierte Pr\u00fcfung Bereit zum Encodieren Encoding starten startet HandBrake mit best\u00e4tigter Auswahl Laufend (Analyse, Rippen, Encodieren) Abbrechen setzt Job auf Abgebrochen Fehler, Abgebrochen Retry Rippen neuer Rip-Anlauf

Zusatzaktionen je nach Zustand und Jobtyp:

  • Review neu starten
  • Encode neu starten
  • RAW neu encodieren
  • Aus Queue l\u00f6schen
"},{"location":"gui/ripper/#review-bereich-bereit-zum-encodieren","title":"Review-Bereich (Bereit zum Encodieren)","text":"

Hier wird die effektive Encode-Entscheidung festgelegt:

  • Titelwahl
  • Audio-/Subtitle-Trackselektion
  • User-Preset
  • Pre-/Post-Encode-Skripte und Ketten
  • HandBrake-Kommandovorschau

Ohne Best\u00e4tigung dieses Blocks startet kein produktiver Encode.

"},{"location":"gui/ripper/#raw-ordnerphasen-sichtbar-uber-logsdetails","title":"RAW-Ordnerphasen (sichtbar \u00fcber Logs/Details)","text":"

Der Ripper arbeitet mit drei RAW-Zust\u00e4nden:

  • Incomplete_... w\u00e4hrend unvollst\u00e4ndigem Rip
  • Rip_Complete_... nach erfolgreich abgeschlossenem Rip, vor Encode
  • ohne Prefix nach erfolgreichem Encode

Das ist wichtig f\u00fcr Recovery und Delete-Vorschau.

"},{"location":"gui/ripper/#5-disk-information","title":"5) Disk-Information","text":"

Zeigt aktuelle Laufwerksdaten:

  • Device-Pfad
  • Modell
  • Disc-Label / Mount

Aktionen:

  • Laufwerk neu lesen
  • Disk neu analysieren
  • Metadaten-Dialog \u00f6ffnen

Hinweis:

  • Laufwerk neu lesen ist nicht mehr an einen festen Pipeline-State gebunden.
"},{"location":"gui/ripper/#wichtige-dialoge","title":"Wichtige Dialoge","text":""},{"location":"gui/ripper/#metadaten-auswahlen","title":"Metadaten ausw\u00e4hlen","text":"

Im Dialog werden Film-/Serienmetadaten best\u00e4tigt.

Sonderf\u00e4lle:

  • Film-Duplikat: \u00dcbernahme erzwingen oder Multipart movie
  • Serie: Disc-Nummer ist Pflicht
"},{"location":"gui/ripper/#vorhandenes-raw-erkannt","title":"Vorhandenes RAW erkannt","text":"

Wenn passendes RAW existiert, fordert der Dialog eine explizite Entscheidung:

  • vorhandenes RAW verwenden
  • RAW verwerfen/l\u00f6schen und neu rippen
"},{"location":"gui/ripper/#queue-eintrag-einfugen","title":"Queue-Eintrag einf\u00fcgen","text":"

Du kannst gezielt ab Position einf\u00fcgen:

  • Skript
  • Skriptkette
  • Wartezeit
"},{"location":"gui/ripper/#audible-activation-bytes-eintragen","title":"Audible Activation Bytes eintragen","text":"

Wenn f\u00fcr eine AAX-Datei keine Activation Bytes automatisch ermittelt werden k\u00f6nnen, \u00f6ffnet Ripster einen Dialog zur manuellen Eingabe.

  • Eingabeformat: genau 8 Hex-Zeichen (z.B. 1a2b3c4d)
  • Speicherung: lokal im Activation-Bytes-Cache
  • Wirkung: nach dem Speichern kann der Audiobook-Flow fortgesetzt werden
"},{"location":"gui/settings/","title":"Settings","text":"

Die Seite Settings ist das zentrale Kontrollpanel f\u00fcr Laufzeitverhalten, Automatisierung und Expertenfunktionen.

"},{"location":"gui/settings/#tab-uberblick","title":"Tab-\u00dcberblick","text":"Tab Zweck Konfiguration Alle fachlichen Settings (Pfade, Tools, Laufwerk, Metadaten, Monitoring, Benachrichtigungen, Converter) Scripte Einzelne Bash-Skripte pflegen, testen und sortieren Skriptketten Mehrstufige Sequenzen aus Skript und Warten bauen und testen Encode-Presets Benutzer-Presets und Standard-Zuordnungen f\u00fcr Blu-ray/DVD-Workflows Cronjobs Zeitgesteuerte Jobs auf Basis Skript/Skriptkette"},{"location":"gui/settings/#tab-konfiguration","title":"Tab Konfiguration","text":""},{"location":"gui/settings/#bedienlogik","title":"Bedienlogik","text":"
  1. Felder \u00e4ndern.
  2. \u00c4nderungen speichern klicken.
  3. Erst dann werden \u00c4nderungen persistiert und f\u00fcr neue Pipeline-Schritte wirksam.

Aktionen in der Toolbar:

  • \u00c4nderungen speichern: schreibt nur ge\u00e4nderte Felder als Bulk-Update.
  • \u00c4nderungen verwerfen: setzt den Formularzustand auf zuletzt geladen/zum Server gespeicherten Stand zur\u00fcck.
  • Neu laden: l\u00e4dt Kategorien + Werte erneut vom Backend.
  • PushOver Test: sendet eine Testnachricht mit aktuellen PushOver-Werten.
  • Coverarts pr\u00fcfen: startet die manuelle Coverart-Recovery.
  • Expertenmodus: wird sofort gespeichert (nicht Teil des normalen Bulk-Speicherns).
"},{"location":"gui/settings/#wichtige-ui-verhalten","title":"Wichtige UI-Verhalten","text":"
  • Jede Einstellung zeigt Gespeichert oder Ungespeichert direkt am Feld.
  • Pflichtfelder sind mit * markiert.
  • Bei Validierungsfehlern wird pro Feld ein Fehlertext angezeigt und Speichern blockiert.
  • Tool-Kommandos (makemkv_command, mediainfo_command, handbrake_command, ffmpeg_command, ffprobe_command, cdparanoia_command, mkvmerge_command) sind im Formular schreibgesch\u00fctzt markiert.
  • Einige Felder sind abh\u00e4ngig vom Expertenmodus sichtbar.
"},{"location":"gui/settings/#kategorie-pfade-besondere-interaktion","title":"Kategorie Pfade: Besondere Interaktion","text":"

Die Pfad-Kategorie hat eine eigene Darstellung:

  • Tabelle Effektive Pfade: zeigt die aktuell tats\u00e4chlich aufgel\u00f6sten Laufzeitpfade inkl. Fallbacks.
  • Accordion je Bereich (Blu-ray, DVD, CD / Audio, Audiobook, Converter, Downloads, optional Externe Speicher, Logs).
  • F\u00fcr Pfadfelder mit Owner-Pendant (*_owner) erscheint direkt darunter das Feld Eigent\u00fcmer (user:gruppe).
  • Owner-Felder sind deaktiviert, solange der zugeh\u00f6rige Pfad leer ist.
"},{"location":"gui/settings/#spezial-editoren-in-der-konfiguration","title":"Spezial-Editoren in der Konfiguration","text":"
  • drive_devices: JSON-Array wird \u00fcber UI-Editor gepflegt (Pfad + MakeMKV-Index je Laufwerk).
  • external_storage_paths: Liste aus Name + Pfad (f\u00fcr Anzeige freier externer Speicher).
  • converter_scan_extensions: Checkbox-Raster der erlaubten Endungen; mindestens eine Endung muss aktiv bleiben.
  • makemkv_registration_key: zus\u00e4tzlicher Betakey-Hinweis mit \u00fcbernehmen-Button.
"},{"location":"gui/settings/#laufwerks-infobox-innerhalb-laufwerk","title":"Laufwerks-Infobox innerhalb Laufwerk","text":"

In der Kategorie Laufwerk wird eine Live-Tabelle erkannter optischer Laufwerke angezeigt:

  • Neu einlesen l\u00e4dt Laufwerksinfos neu.
  • Im Expertenmodus: Freigeben pro Laufwerk und Alle Laufwerke freigeben.
"},{"location":"gui/settings/#tab-scripte","title":"Tab Scripte","text":"

Funktionen:

  • Skript anlegen (Inline-Editor)
  • Skript bearbeiten (Dialog)
  • Skript l\u00f6schen (mit Best\u00e4tigung)
  • Skript testen
  • Reihenfolge per Drag-and-Drop \u00e4ndern

Testergebnis enth\u00e4lt:

  • Erfolg/Fehler
  • Exit-Code
  • Timeout-Info
  • Dauer
  • stdout/stderr
"},{"location":"gui/settings/#tab-skriptketten","title":"Tab Skriptketten","text":"

Skriptketten bestehen aus Schritten:

  • Skript
  • Warten (Sekunden)

Funktionen:

  • Ketten anlegen/bearbeiten/l\u00f6schen
  • Reihenfolge der Ketten per Drag-and-Drop
  • Kette testen
  • Schritte in der Kette per Drag-and-Drop neu anordnen

Im Ketteneditor:

  • linke Palette (Systembl\u00f6cke, Scripte)
  • rechte Canvas mit Drop-Zonen
  • pro Warte-Schritt konfigurierbare Sekunden
"},{"location":"gui/settings/#tab-encode-presets","title":"Tab Encode-Presets","text":"

Bereiche:

  1. Standard-Zuordnungen (Slots)
  2. Preset-Liste (CRUD)
"},{"location":"gui/settings/#standard-zuordnungen","title":"Standard-Zuordnungen","text":"

Es gibt vier persistente Slots:

  • bluray_movie
  • bluray_series
  • dvd_movie
  • dvd_series

Die Auswahl ist medientyp-kompatibel gefiltert. Nicht kompatible oder fehlende bereits gespeicherte IDs werden weiterhin sichtbar gemacht, damit bestehende Zuordnungen nachvollziehbar bleiben.

"},{"location":"gui/settings/#preset-inhalt","title":"Preset-Inhalt","text":"

Ein Preset umfasst:

  • Name
  • Medientyp (all, bluray, dvd)
  • HandBrake-Preset (-Z)
  • Extra Args
  • optionale Beschreibung
"},{"location":"gui/settings/#tab-cronjobs","title":"Tab Cronjobs","text":"

Funktionen:

  • Cronjob erstellen/bearbeiten/l\u00f6schen
  • Debounced Validierung des Cron-Ausdrucks
  • Quelle w\u00e4hlen: Skript oder Skriptkette
  • Aktiv- und PushOver-Toggle je Job
  • Jetzt ausf\u00fchren
  • Lauf-Logs \u00f6ffnen

Die Seite zeigt zus\u00e4tzlich Live-Status laufender Cron-Aktivit\u00e4ten (Runtime Activities).

"},{"location":"gui/settings/#expertenbereich-activation-bytes-cache","title":"Expertenbereich: Activation Bytes Cache","text":"

Der Activation-Bytes-Block wird nur im Expertenmodus angezeigt und nur wenn Eintr\u00e4ge vorhanden sind.

Er zeigt:

  • AAX-Checksum
  • Activation Bytes
  • Speicherzeitpunkt
"},{"location":"gui/settings/#validierungshinweise-fur-template-felder","title":"Validierungshinweise f\u00fcr Template-Felder","text":"

Template-Felder akzeptieren nur:

  • Buchstaben/Ziffern
  • Leerzeichen
  • _ und -
  • Platzhalter in {...} bzw. ${...}
  • / f\u00fcr Ordnertrennung

Nicht erlaubt sind z. B. unvollst\u00e4ndige geschweifte Klammern oder sonstige Sonderzeichen.

"},{"location":"gui/settings/#siehe-auch","title":"Siehe auch","text":"
  • Einstellungsreferenz
  • Ripper
"},{"location":"pipeline/","title":"Anhang: Pipeline intern","text":"

Dieser Abschnitt beschreibt die technische Pipeline-Logik hinter den UI-Workflows.

  • Workflow & Zust\u00e4nde

    Zustandsmodell, \u00dcberg\u00e4nge, Queue-Verhalten.

    Workflow

  • Encode-Planung

    Aufbereitung von Titeln/Tracks und Best\u00e4tigungslogik.

    Encoding

  • Playlist-Analyse

    Bewertung mehrdeutiger Blu-ray-Playlists.

    Playlist-Analyse

  • Pre-/Post-Encode-Ausf\u00fchrungen

    Skript- und Kettenlauf vor/nach dem Encoding.

    Encode-Skripte

"},{"location":"pipeline/#zuruck-zum-handbuch","title":"Zur\u00fcck zum Handbuch","text":"
  • Workflows aus Nutzersicht
"},{"location":"pipeline/encoding/","title":"Encode-Planung & Track-Auswahl","text":"

Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.

"},{"location":"pipeline/encoding/#ablauf","title":"Ablauf","text":"
Quelle bestimmen (Disc/RAW)\n  -> HandBrake-Scan (--scan --json)\n  -> Plan erstellen (Titel, Audio, Untertitel)\n  -> Status: Bereit zum Encodieren\n  -> Benutzer bestaetigt Auswahl\n  -> finaler HandBrake-Aufruf\n
"},{"location":"pipeline/encoding/#review-inhalt-status-bereit-zum-encodieren","title":"Review-Inhalt (Status: Bereit zum Encodieren)","text":"
  • ausw\u00e4hlbarer Encode-Titel
  • Audio-Track-Auswahl
  • Untertitel-Track-Auswahl inkl. Flags
  • burnIn
  • forced
  • defaultTrack
  • optionale User-Presets (HandBrake Preset + Extra Args)
  • optionale Pre-/Post-Skripte und Ketten
"},{"location":"pipeline/encoding/#bestaetigung-confirm-encode","title":"Bestaetigung (confirm-encode)","text":"

Typischer Payload:

{\n  \"selectedEncodeTitleId\": 1,\n  \"selectedTrackSelection\": {\n    \"1\": {\n      \"audioTrackIds\": [1, 2],\n      \"subtitleTrackIds\": [3]\n    }\n  },\n  \"selectedPreEncodeScriptIds\": [1],\n  \"selectedPostEncodeScriptIds\": [2],\n  \"selectedPreEncodeChainIds\": [3],\n  \"selectedPostEncodeChainIds\": [4],\n  \"selectedUserPresetId\": 5\n}\n

Die best\u00e4tigte Auswahl wird im Job gespeichert und f\u00fcr Neustarts wiederverwendet.

"},{"location":"pipeline/encoding/#handbrake-aufruf","title":"HandBrake-Aufruf","text":"

Grundstruktur:

HandBrakeCLI \\\n  -i <input> \\\n  -o <output> \\\n  -t <titleId> \\\n  -Z \"<preset>\" \\\n  <extra-args> \\\n  -a <audioTrackIds|none> \\\n  -s <subtitleTrackIds|none>\n

Untertitel-Flags werden bei Bedarf erg\u00e4nzt:

  • --subtitle-burned=<id>
  • --subtitle-default=<id>
  • --subtitle-forced=<id> oder --subtitle-forced
"},{"location":"pipeline/encoding/#pre-post-encode-ausfuhrungen","title":"Pre-/Post-Encode-Ausf\u00fchrungen","text":"
  • Pre-Encode l\u00e4uft vor HandBrake
  • Post-Encode l\u00e4uft nach HandBrake

Fehlerverhalten:

  • Pre-Encode-Fehler: Job endet mit Status Fehler (Encode startet nicht)
  • Post-Encode-Fehler: Job kann Fertig bleiben, enth\u00e4lt aber Fehlerhinweis/Script-Summary
"},{"location":"pipeline/encoding/#dateinamenordner","title":"Dateinamen/Ordner","text":"

Der finale Outputpfad wird aus den Templates in den Settings aufgebaut.

Platzhalter:

  • ${title}
  • ${year}
  • ${imdbId}

Ung\u00fcltige Dateizeichen werden bereinigt.

"},{"location":"pipeline/playlist-analysis/","title":"Playlist-Analyse","text":"

Ripster analysiert bei Blu-ray-\u00e4hnlichen Quellen Playlists und fordert bei Mehrdeutigkeit eine manuelle Auswahl an.

"},{"location":"pipeline/playlist-analysis/#ziel","title":"Ziel","text":"

Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.

"},{"location":"pipeline/playlist-analysis/#eingabedaten","title":"Eingabedaten","text":"

Die Analyse basiert auf MakeMKV-Infos (u. a. Playlist-/Segment-Struktur, Laufzeiten, Titelzuordnung).

"},{"location":"pipeline/playlist-analysis/#auswertung-vereinfacht","title":"Auswertung (vereinfacht)","text":"

F\u00fcr Kandidaten werden u. a. ber\u00fccksichtigt:

  • Laufzeit
  • Segment-Reihenfolge
  • R\u00fcckw\u00e4rtsspr\u00fcnge/gro\u00dfe Spr\u00fcnge
  • Koh\u00e4renz linearer Segmentfolgen
  • Duplikatgruppen mit \u00e4hnlicher Laufzeit

Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.

"},{"location":"pipeline/playlist-analysis/#wann-muss-der-benutzer-entscheiden","title":"Wann muss der Benutzer entscheiden?","text":"

Wenn nach Filterung mehr als ein relevanter Kandidat \u00fcbrig bleibt, wechselt der Job in der GUI auf:

  • Warte auf Auswahl

Dann muss eine Playlist best\u00e4tigt werden, bevor der Workflow weiterl\u00e4uft.

"},{"location":"pipeline/playlist-analysis/#konfigurationseinfluss","title":"Konfigurationseinfluss","text":"Feld in Settings Wirkung Minimale Titellaenge (Minuten) Mindestlaufzeit f\u00fcr Kandidaten

Default ist aktuell 60 Minuten.

"},{"location":"pipeline/playlist-analysis/#ui-verhalten","title":"UI-Verhalten","text":"

Bei manueller Entscheidung zeigt das Ripper Kandidaten inkl. Score/Bewertung und markiert eine Empfehlung.

Nach Best\u00e4tigung:

  • mit vorhandenem RAW -> zur\u00fcck zu Mediainfo-Pruefung
  • ohne RAW -> Startpfad \u00fcber Startbereit / Rippen
"},{"location":"pipeline/post-encode-scripts/","title":"Encode-Skripte (Pre & Post)","text":"

Ripster kann Skripte und Skript-Ketten vor und nach dem Encode ausf\u00fchren.

"},{"location":"pipeline/post-encode-scripts/#ablauf","title":"Ablauf","text":"
Bereit zum Encodieren\n  -> Pre-Encode Skripte/Ketten\n  -> HandBrake Encoding\n  -> Post-Encode Skripte/Ketten\n  -> Fertig oder Fehler\n
"},{"location":"pipeline/post-encode-scripts/#auswahl-im-review","title":"Auswahl im Review","text":"

Im Review-Panel kannst du getrennt w\u00e4hlen:

  • selectedPreEncodeScriptIds
  • selectedPostEncodeScriptIds
  • selectedPreEncodeChainIds
  • selectedPostEncodeChainIds
"},{"location":"pipeline/post-encode-scripts/#fehlerverhalten","title":"Fehlerverhalten","text":"
  • Pre-Encode-Fehler stoppen die Kette und f\u00fchren zu Fehler.
  • Post-Encode-Fehler stoppen die restlichen Post-Schritte; Job kann dennoch Fertig sein (mit Fehlerzusatz im Status/Log).
"},{"location":"pipeline/post-encode-scripts/#verfugbare-umgebungsvariablen","title":"Verf\u00fcgbare Umgebungsvariablen","text":"

Beim Script-Run werden gesetzt:

  • RIPSTER_SCRIPT_RUN_AT
  • RIPSTER_JOB_ID
  • RIPSTER_JOB_TITLE
  • RIPSTER_MODE
  • RIPSTER_INPUT_PATH
  • RIPSTER_OUTPUT_PATH
  • RIPSTER_RAW_PATH
  • RIPSTER_SCRIPT_ID
  • RIPSTER_SCRIPT_NAME
  • RIPSTER_SCRIPT_SOURCE
"},{"location":"pipeline/post-encode-scripts/#skript-ketten","title":"Skript-Ketten","text":"

Ketten unterst\u00fctzen zwei Step-Typen:

  • script (f\u00fchrt ein hinterlegtes Skript aus)
  • wait (wartet waitSeconds)

Bei Fehler in einem Script-Step wird die Kette abgebrochen.

"},{"location":"pipeline/post-encode-scripts/#testlaufe","title":"Testl\u00e4ufe","text":"
  • Skript testen: POST /api/settings/scripts/:id/test
  • Kette testen: POST /api/settings/script-chains/:id/test

Ergebnisse enthalten Erfolg/Exit-Code, Laufzeit und stdout/stderr.

"},{"location":"pipeline/workflow/","title":"Workflow & Zust\u00e4nde","text":"

Ripster steuert den Ablauf als Zustandsmaschine.

"},{"location":"pipeline/workflow/#zustandsdiagramm-vereinfacht","title":"Zustandsdiagramm (vereinfacht)","text":"
flowchart LR\n    A[Bereit] --> B[Medium erkannt]\n    B --> C[Analyse]\n    C --> D[Metadatenauswahl]\n    D --> E[Startbereit]\n    E --> F[Rippen]\n    E --> G[Mediainfo-Pruefung]\n    G --> H[Warte auf Auswahl]\n    H --> G\n    G --> I[Bereit zum Encodieren]\n    I --> J[Encodieren]\n    J --> K[Fertig]\n    J --> L[Fehler]\n    F --> L\n    F --> M[Abgebrochen]
"},{"location":"pipeline/workflow/#statusliste-gui-anzeige","title":"Statusliste (GUI-Anzeige)","text":"Status in der GUI Bedeutung Bereit Wartet auf Disc Medium erkannt Disc wurde erkannt Analyse MakeMKV-Analyse l\u00e4uft Metadatenauswahl Metadaten m\u00fcssen best\u00e4tigt werden Warte auf Auswahl Playlist-Auswahl ist erforderlich Warte auf Auswahl auch f\u00fcr RAW-Entscheidung bei vorhandenen Quelldaten genutzt Startbereit kurzer \u00dcbergang vor Start Rippen MakeMKV-Rip l\u00e4uft Mediainfo-Pruefung Titel/Spuren werden ausgewertet Bereit zum Encodieren Review ist bereit Encodieren HandBrake l\u00e4uft CD-Metadatenauswahl CD-Metadaten m\u00fcssen best\u00e4tigt werden CD-Startbereit CD-Job wartet auf Start CD-Analyse CD-Track-/Strukturaufbereitung CD-Rippen Audio-CD-Rip l\u00e4uft CD-Encodieren CD-Encode l\u00e4uft Fertig erfolgreich abgeschlossen Abgebrochen manuell oder technisch abgebrochen Fehler fehlgeschlagen"},{"location":"pipeline/workflow/#typische-pfade","title":"Typische Pfade","text":""},{"location":"pipeline/workflow/#standardfall-kein-vorhandenes-raw","title":"Standardfall (kein vorhandenes RAW)","text":"
  1. Medium erkannt
  2. Analyse + Metadaten
  3. Rippen
  4. Mediainfo-Pruefung
  5. Bereit zum Encodieren
  6. Encodieren
  7. Fertig
"},{"location":"pipeline/workflow/#vorhandenes-raw","title":"Vorhandenes RAW","text":"

Startbereit springt direkt zu Mediainfo-Pruefung (kein neuer Rip).

"},{"location":"pipeline/workflow/#mehrdeutige-blu-ray-playlist","title":"Mehrdeutige Blu-ray-Playlist","text":"

Mediainfo-Pruefung -> Warte auf Auswahl bis Playlist best\u00e4tigt wurde.

"},{"location":"pipeline/workflow/#vorhandenes-raw-mit-nutzerentscheidung","title":"Vorhandenes RAW mit Nutzerentscheidung","text":"

Metadatenauswahl -> Warte auf Auswahl bis Entscheidung f\u00fcr Weiterverarbeitung (continue) oder Neustart getroffen wurde.

"},{"location":"pipeline/workflow/#cd-flow","title":"CD-Flow","text":"

CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig

"},{"location":"pipeline/workflow/#queue-verhalten","title":"Queue-Verhalten","text":"

Wenn der Wert Parallele Jobs erreicht ist:

  • neue Starts werden als Queue-Eintr\u00e4ge abgelegt
  • die Queue kann zus\u00e4tzlich Nicht-Job-Eintr\u00e4ge enthalten (Skript, Kette, Warten)
  • Reihenfolge ist per UI/API \u00e4nderbar
"},{"location":"pipeline/workflow/#abbruch-wiederaufnahme-neustart","title":"Abbruch, Wiederaufnahme, Neustart","text":"
  • Abbrechen: laufenden Job stoppen oder Queue-Eintrag entfernen
  • Retry Rippen: Fehler-/Abbruch-Job erneut starten
  • RAW neu encodieren: aus vorhandenem RAW neu encodieren
  • Review neu starten: Review aus RAW neu aufbauen
  • Encode neu starten: Encoding mit letzter best\u00e4tigter Auswahl neu starten
"},{"location":"tools/","title":"Anhang: Externe Tools","text":"

Ripster orchestriert externe CLI-Tools. Dieser Abschnitt erkl\u00e4rt deren Rolle im Gesamtsystem.

  • MakeMKV

    Disc-Analyse und Ripping.

    MakeMKV

  • HandBrake

    Video-Encoding inklusive Preset-Logik.

    HandBrake

  • MediaInfo

    Track-/Containeranalyse f\u00fcr Review und Auswahl.

    MediaInfo

"},{"location":"tools/handbrake/","title":"HandBrake","text":"

Ripster verwendet HandBrakeCLI f\u00fcr Scan und Encode.

"},{"location":"tools/handbrake/#verwendete-aufrufe","title":"Verwendete Aufrufe","text":""},{"location":"tools/handbrake/#scan-review-aufbau","title":"Scan (Review-Aufbau)","text":"
HandBrakeCLI --scan --json -i <input> -t 0\n
"},{"location":"tools/handbrake/#encode-vereinfacht","title":"Encode (vereinfacht)","text":"
HandBrakeCLI \\\n  -i <input> \\\n  -o <output> \\\n  -t <titleId> \\\n  -Z \"<preset>\" \\\n  <extra-args> \\\n  -a <audioTrackIds|none> \\\n  -s <subtitleTrackIds|none>\n

Optional erg\u00e4nzt Ripster:

  • --subtitle-burned=<id>
  • --subtitle-default=<id>
  • --subtitle-forced=<id> oder --subtitle-forced
"},{"location":"tools/handbrake/#presets-auslesen","title":"Presets auslesen","text":"

Ripster liest Presets mit:

HandBrakeCLI -z\n
"},{"location":"tools/handbrake/#relevante-felder-in-settings","title":"Relevante Felder in Settings","text":"Feldname in der GUI Bedeutung HandBrake Kommando CLI-Binary HandBrake Preset (Blu-ray/DVD) profilspezifisches Preset HandBrake Extra Args (Blu-ray/DVD) profilspezifische Zusatzargumente Ausgabeformat (Blu-ray/DVD) Dateiendung der finalen Datei Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen unvollst\u00e4ndige Ausgabe bei Neustart l\u00f6schen"},{"location":"tools/handbrake/#fortschritts-parsing","title":"Fortschritts-Parsing","text":"

Ripster parst HandBrake-Stderr (Prozent/ETA/Detail) und sendet WebSocket-Progress (PIPELINE_PROGRESS).

"},{"location":"tools/handbrake/#troubleshooting","title":"Troubleshooting","text":"
  • Preset nicht gefunden: Preset-Namen mit HandBrakeCLI -z pr\u00fcfen
  • sehr langsames Encoding: Preset/Extra-Args pr\u00fcfen (z. B. --encoder-preset)

Das Produktions-Installer-Script install.sh bietet eine Option zur Installation eines geb\u00fcndelten HandBrakeCLI-Binaries mit NVDEC-Unterst\u00fctzung (NVIDIA GPU-Dekodierung). Diese Option erscheint interaktiv w\u00e4hrend der Installation.

"},{"location":"tools/makemkv/","title":"MakeMKV","text":"

Ripster nutzt makemkvcon f\u00fcr Disc-Analyse und Rip.

"},{"location":"tools/makemkv/#verwendete-aufrufe","title":"Verwendete Aufrufe","text":""},{"location":"tools/makemkv/#analyse","title":"Analyse","text":"
makemkvcon -r info <source>\n

<source> ist typischerweise:

  • disc:<index> (Auto-Modus)
  • dev:/dev/sr0 (explicit)
  • file:<path> (Datei/Ordner-Analyse)
"},{"location":"tools/makemkv/#rip-mkv-modus","title":"Rip (MKV-Modus)","text":"
makemkvcon mkv <source> <title-or-all> <rawDir> [--minlength=...] [...extraArgs]\n
"},{"location":"tools/makemkv/#rip-backup-modus","title":"Rip (Backup-Modus)","text":"
makemkvcon backup <source> <rawDir> --decrypt\n
"},{"location":"tools/makemkv/#registrierungsschlussel-optional","title":"Registrierungsschl\u00fcssel (optional)","text":"

Wenn in Settings ein MakeMKV Key gesetzt ist, synchronisiert Ripster ihn nach:

~/.MakeMKV/settings.conf\n

Format:

app_Key = \"product-key\"\n

Zus\u00e4tzlich zeigt die UI unterhalb des Feldes den aktuellen Betakey an, der per Button in das Eingabefeld \u00fcbernommen werden kann.

"},{"location":"tools/makemkv/#relevante-felder-in-settings","title":"Relevante Felder in Settings","text":"Feldname in der GUI Bedeutung MakeMKV Kommando CLI-Binary MakeMKV Source Index Source-Index im Auto-Modus Minimale Titellaenge (Minuten) Mindestlaufzeitfilter MakeMKV Rip Modus (Blu-ray/DVD) mkv oder backup MakeMKV Analyze Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Analyse MakeMKV Rip Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Rip"},{"location":"tools/makemkv/#hinweise","title":"Hinweise","text":"
  • Blu-ray-Backups werden oft f\u00fcr robuste Playlist-Analyse genutzt.
  • MakeMKV-Ausgaben werden geparst und als makemkvInfo im Job gespeichert.
"},{"location":"tools/mediainfo/","title":"MediaInfo","text":"

Ripster nutzt mediainfo zur JSON-Analyse von Medien-Dateien.

"},{"location":"tools/mediainfo/#aufruf","title":"Aufruf","text":"
mediainfo --Output=JSON <input>\n

Der Input ist typischerweise eine RAW-Datei oder ein vom Workflow gew\u00e4hlter Inputpfad.

"},{"location":"tools/mediainfo/#verwendung-in-ripster","title":"Verwendung in Ripster","text":"
  • Track-/Codec-Metadaten f\u00fcr Review-Plan
  • Fallback-Informationen in bestimmten Analysepfaden
  • Persistenz als mediainfoInfo im Job
"},{"location":"tools/mediainfo/#relevante-settings","title":"Relevante Settings","text":"Key Bedeutung mediainfo_command CLI-Binary mediainfo_extra_args_bluray / _dvd profilspezifische Zusatzargumente"},{"location":"tools/mediainfo/#troubleshooting","title":"Troubleshooting","text":"
  • JSON-Test: mediainfo --Output=JSON <datei>
  • unbekannte Sprache erscheint oft als und (undetermined)
"},{"location":"workflows/","title":"Workflows aus Nutzersicht","text":"

Diese Seite beschreibt die produktiven Abl\u00e4ufe als Handbuch: welche Entscheidung an welcher Stelle f\u00e4llt, welche Objekte dabei entstehen (Job, Container, Child-Job) und welche Dateien in welchen Ordnern landen.

"},{"location":"workflows/#gemeinsame-grundlagen","title":"Gemeinsame Grundlagen","text":""},{"location":"workflows/#statuskette-im-normalfall","title":"Statuskette im Normalfall","text":"

Medium erkannt -> Analyse -> Metadatenauswahl -> Startbereit -> Rippen -> Mediainfo-Pruefung -> Bereit zum Encodieren -> Encodieren -> Fertig

Abweichungen:

  • bei Blu-ray/DVD mit n\u00f6tiger Playlistwahl: Mediainfo-Pruefung -> Warte auf Auswahl -> zur\u00fcck in Mediainfo-Pruefung
  • bei vorhandenem RAW: Startbereit springt direkt in Review/Pr\u00fcfung ohne neuen Laufwerks-Rip
  • bei Fehler/Abbruch: Fehler oder Abgebrochen mit Wiederanlauf-Aktionen
"},{"location":"workflows/#job-und-container-typen","title":"Job- und Container-Typen","text":"Typ Zweck Was enth\u00e4lt der Typ? Normaler Disc-Job Einzel-Film oder einzelne Disc RAW-Pfad, Output-Pfad, Logs, Review dvd_series_container logischer Serien-Container (pro Serie/Staffel) Metadatenanker, aggregierter Status \u00fcber Kinder dvd_series_child einzelne Serien-Disc oder Serien-Episode-Job eigentliche RAW-/Encode-Arbeit multipart_movie_container logischer Multipart-Film-Container Zusammenfassung f\u00fcr mehrere Film-Discs multipart_movie_child einzelne Disc innerhalb Multipart-Film Disc-spezifische RAW-/Encode-Daten

Wichtig:

  • Container sind prim\u00e4r Ordnungs- und Statusobjekte.
  • Dateien (RAW/Output) h\u00e4ngen an den Child-Jobs.
"},{"location":"workflows/#workflow-a-film-blu-raydvd","title":"Workflow A: Film (Blu-ray/DVD)","text":""},{"location":"workflows/#1-disc-analysieren-und-film-metadaten-wahlen","title":"1) Disc analysieren und Film-Metadaten w\u00e4hlen","text":"
  1. Im Ripper Analyse starten.
  2. Im Metadaten-Dialog Film ausw\u00e4hlen (OMDb bzw. manuelle Film-Metadaten).
  3. Auswahl \u00fcbernehmen.

Wirkung:

  • der Job wird als Film-Workflow gef\u00fchrt
  • Film-Fingerprint f\u00fcr Duplikaterkennung wird gebildet (IMDb oder Titel/Jahr)
"},{"location":"workflows/#2-duplikatfall-entscheiden","title":"2) Duplikatfall entscheiden","text":"

Wenn Film mit gleichem Fingerprint bereits existiert, gibt es zwei Wege:

  1. \u00dcbernahme erzwingen (allow_new): neuer unabh\u00e4ngiger Film-Job
  2. Multipart movie: neuer Job wird mit bestehendem Job in einem Multipart-Container verkn\u00fcpft

Bei Multipart gilt:

  • beide Discs brauchen unterschiedliche Disc-Nummer
  • gleiche Disc-Nummer blockiert den Vorgang (MULTIPART_DISC_ALREADY_EXISTS)
"},{"location":"workflows/#3-raw-verzeichnis-entsteht","title":"3) RAW-Verzeichnis entsteht","text":"

Ordnername basiert auf Metadaten plus Job-ID:

  • Incomplete_<Titel> (<Jahr>) - RAW - job-<id>

Zustandswechsel des RAW-Ordners:

  • beim Start: Incomplete_...
  • nach erfolgreichem Rip: Rip_Complete_...
  • nach erfolgreichem Encode: Prefix wird entfernt (final)
"},{"location":"workflows/#4-review-und-encode","title":"4) Review und Encode","text":"

In Bereit zum Encodieren:

  • Titel w\u00e4hlen
  • Audio-/Subtitle-Spuren festlegen
  • optional User-Preset
  • optional Pre-/Post-Encode-Skripte oder Ketten

Beim Start:

  • tempor\u00e4re Ausgabe in Incomplete_job-<id>/<Datei>.<ext>
  • nach Erfolg Verschiebung in finalen Zielpfad aus Film-Template
"},{"location":"workflows/#workflow-b-serie-blu-raydvd","title":"Workflow B: Serie (Blu-ray/DVD)","text":""},{"location":"workflows/#1-serienmodus-aktivieren","title":"1) Serienmodus aktivieren","text":"
  1. Disc analysieren.
  2. Im Metadaten-Dialog Serienmetadaten w\u00e4hlen (TMDb-basiert).
  3. Disc-Nummer setzen (Pflicht, ab 1).

Wirkung:

  • Workflow-Kind wird series
  • Seriencontainer wird gesucht/angelegt
  • aktueller Job wird als dvd_series_child darunter gef\u00fchrt
"},{"location":"workflows/#2-seriencontainer-und-disc-konflikte","title":"2) Seriencontainer und Disc-Konflikte","text":"

Beim Speichern wird gepr\u00fcft:

  • existiert f\u00fcr Serie/Staffel bereits ein Container?
  • existiert in diesem Container bereits dieselbe Disc-Nummer?

Wenn ja, wird blockiert (SERIES_DISC_ALREADY_EXISTS).

"},{"location":"workflows/#3-serien-raw-pfad","title":"3) Serien-RAW-Pfad","text":"

F\u00fcr Serien wird ein eigener RAW-Pfad bevorzugt:

  • Blu-ray: raw_dir_bluray_series (Fallback: raw_dir_bluray)
  • DVD: raw_dir_dvd_series (Fallback: raw_dir_dvd)

RAW-Namensbasis enth\u00e4lt Staffel/Disc (SxDy) und wird ebenfalls mit den Prefix-Phasen gef\u00fchrt:

  • Incomplete_... -> Rip_Complete_... -> final
"},{"location":"workflows/#4-serien-review-und-episoden-ausgabe","title":"4) Serien-Review und Episoden-Ausgabe","text":"

Beim Review werden Episoden-/Titelzuordnungen genutzt. Je nach Auswahl:

  • Einzel-Episode: Episode-Template
  • Multi-Episode-Titel: Multi-Episode-Template

Ausgabepfad:

  • Root: series_dir_* (Fallback auf movie_dir_*)
  • Dateiname/Unterordner aus Serien-Template
"},{"location":"workflows/#5-multi-episode-disc-als-batch","title":"5) Multi-Episode-Disc als Batch","text":"

Wenn mehrere Episoden-Titel aus einer Disc encodiert werden:

  • Ripster erzeugt Episode-Child-Jobs
  • der urspr\u00fcngliche Disc-Job dient als Batch-Anker
  • RAW-Finalisierung erfolgt erst, wenn alle Episode-Encodes abgeschlossen sind
"},{"location":"workflows/#workflow-c-multipart-film","title":"Workflow C: Multipart-Film","text":""},{"location":"workflows/#wann-dieser-flow-gedacht-ist","title":"Wann dieser Flow gedacht ist","text":"
  • gleicher Film auf mehreren Discs (z. B. Disc 1/Disc 2)
  • Zusammengeh\u00f6rigkeit soll in Historie und Detailansichten sichtbar sein
"},{"location":"workflows/#ablauf","title":"Ablauf","text":"
  1. Film-Metadaten w\u00e4hlen.
  2. Duplikatdialog -> Multipart movie.
  3. Disc-Nummern f\u00fcr bestehenden und neuen Job festlegen.

Wirkung:

  • multipart_movie_container wird angelegt oder wiederverwendet
  • beteiligte Jobs werden multipart_movie_child
  • Container f\u00fchrt gemeinsame Metadaten, Kinder f\u00fchren je Disc die eigentlichen Artefakte
"},{"location":"workflows/#workflow-d-vorhandenes-raw-raw-import","title":"Workflow D: Vorhandenes RAW / RAW-Import","text":""},{"location":"workflows/#fall-1-raw-bereits-vorhanden-bei-metadatenubernahme","title":"Fall 1: RAW bereits vorhanden bei Metadaten\u00fcbernahme","text":"

Nach Metadaten-\u00dcbernahme erkennt Ripster passende RAW-Ordner und setzt den Job auf Entscheidungsstatus.

M\u00f6glichkeiten:

  • vorhandenes RAW weiterverwenden (kein neuer Rip)
  • RAW l\u00f6schen/ignorieren und neu rippen
"},{"location":"workflows/#fall-2-orphan-raw-aus-database","title":"Fall 2: Orphan-RAW aus /database","text":"
  1. In Database RAW pr\u00fcfen.
  2. Bei orphan RAW Job anlegen.
  3. Job wird in Historie erzeugt und wie \"Disk analysieren aus RAW\" weiterverarbeitet.
"},{"location":"workflows/#workflow-e-nachbearbeitung-bestehender-jobs","title":"Workflow E: Nachbearbeitung bestehender Jobs","text":"

In Historie (Detaildialog):

Aktion Wirkung OMDb neu zuordnen Metadaten neu schreiben, Folder-Rename wird best effort angesto\u00dfen Review neu starten Titel-/Spurpr\u00fcfung aus aktuellem RAW neu aufbauen RAW neu encodieren Encode erneut aus vorhandenem RAW starten Encode neu starten letzte best\u00e4tigte Review-Einstellungen wiederverwenden Retry Rippen Rip/Analyse neu starten; alter Job-RAW kann bereinigt werden"},{"location":"workflows/#wo-landet-was-artefakt-matrix","title":"Wo landet was? (Artefakt-Matrix)","text":"Artefakt Film Serie Multipart RAW raw_dir_* bevorzugt raw_dir_*_series pro Child-Job im normalen Film-RAW-Schema Finale Ausgabe movie_dir_* + Film-Template series_dir_* (Fallback movie_dir_*) + Serien-Templates pro Child-Job normaler Film-Output Container-Datensatz nein ja (dvd_series_container) ja (multipart_movie_container) L\u00f6schvorschau in Historie einzelner Job oder Related Scope Container-/Child-bezogen mit Pfadauswahl Container-/Child-bezogen mit Pfadauswahl"},{"location":"workflows/#queue-verhalten-im-alltag","title":"Queue-Verhalten im Alltag","text":"

Die Startfreigabe h\u00e4ngt an vier Settings:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • Audio CDs: Queue-Reihenfolge \u00fcberspringen

Praxis:

  • Film/Video- und Audio/CD laufen in getrennten Lanes
  • Gesamtlimit begrenzt beide gemeinsam
  • Queue kann neben Jobs auch Skript, Kette, Warten enthalten
"}]} \ No newline at end of file +{"config":{"lang":["de"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Ripster Handbuch","text":"

Diese Dokumentation ist als vollst\u00e4ndiges Benutzerhandbuch aufgebaut: t\u00e4gliche Bedienung zuerst, technische Referenz danach.

"},{"location":"#einstieg-in-3-schritten","title":"Einstieg in 3 Schritten","text":"
  1. Installation: Installation
  2. Betriebskonfiguration: Ersteinrichtung
  3. erster End-to-End-Lauf: Erster Lauf
"},{"location":"#was-das-handbuch-abdeckt","title":"Was das Handbuch abdeckt","text":"
  • alle GUI-Seiten mit Aktionen und Wirkung
  • vollst\u00e4ndige Workflows f\u00fcr Film, Serie und Multipart
  • Queue-, Job-, Container- und Recovery-Verhalten
  • detaillierte Settings-Wirkung inklusive Fallbacks
"},{"location":"#empfohlene-lesereihenfolge","title":"Empfohlene Lesereihenfolge","text":"
  1. Benutzerhandbuch \u00dcberblick
  2. GUI-Seiten
  3. Workflows aus Nutzersicht
  4. Einstellungsreferenz
  5. bei Bedarf technischer Tiefgang im Anhang
"},{"location":"api/","title":"Anhang: API-Referenz","text":"

REST- und WebSocket-Schnittstellen f\u00fcr Integration, Automatisierung und Debugging.

"},{"location":"api/#basis-url","title":"Basis-URL","text":"
http://localhost:3001\n

API-Prefix: /api

"},{"location":"api/#api-gruppen","title":"API-Gruppen","text":"
  • Health

    Service-Liveness.

    GET /api/health

  • Pipeline API

    Analyse, Start/Retry/Cancel, Queue, Re-Encode.

    Pipeline API

  • Settings API

    Einstellungen, Skripte/Ketten, User-Presets.

    Settings API

  • History API

    Job-Historie, Orphan-Import, L\u00f6schoperationen.

    History API

  • Cron API

    Zeitgesteuerte Skript-/Kettenausf\u00fchrung.

    Cron API

  • Converter API

    Datei-Explorer, Upload, Job-Verwaltung f\u00fcr den Converter.

    Converter API

  • Downloads API

    Download-Queue f\u00fcr Ausgabedateien aus der Job-Historie.

    Downloads API

  • Runtime Activities API

    Laufende und abgeschlossene Aktivit\u00e4ten (Skripte, Ketten, Cron, Tasks).

    Runtime Activities

  • :material-websocket: WebSocket Events

    Pipeline-, Queue-, Disk-, Settings-, Cron-, Converter- und Download-Events.

    WebSocket

"},{"location":"api/#hinweis","title":"Hinweis","text":"

Ripster hat keine eingebaute Authentifizierung und ist f\u00fcr lokalen, gesch\u00fctzten Betrieb gedacht.

"},{"location":"api/converter/","title":"Converter API","text":"

Endpunkte f\u00fcr den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.

Basis-Pfad: /api/converter

"},{"location":"api/converter/#scan-explorer","title":"Scan & Explorer","text":""},{"location":"api/converter/#get-apiconvertertree","title":"GET /api/converter/tree","text":"

Vollst\u00e4ndiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).

Response:

{\n  \"tree\": [\n    {\n      \"name\": \"filme\",\n      \"relPath\": \"filme\",\n      \"isDir\": true,\n      \"children\": [\n        {\n          \"name\": \"film.mkv\",\n          \"relPath\": \"filme/film.mkv\",\n          \"isDir\": false,\n          \"size\": 10485760\n        }\n      ]\n    }\n  ]\n}\n
"},{"location":"api/converter/#get-apiconverterbrowseparentrelpath","title":"GET /api/converter/browse?parent=relPath","text":"

DB-basierter Datei-Explorer. Gibt Eintr\u00e4ge f\u00fcr einen Unterordner zur\u00fcck.

Query-Parameter:

Parameter Typ Beschreibung parent string Relativer Pfad zum Unterordner (leer = Root)

Response:

{\n  \"entries\": [\n    {\n      \"id\": 1,\n      \"rel_path\": \"filme/film.mkv\",\n      \"is_dir\": false,\n      \"size\": 10485760,\n      \"job_id\": null\n    }\n  ],\n  \"rawDir\": \"/data/output/converter-raw\"\n}\n
"},{"location":"api/converter/#post-apiconverterscan","title":"POST /api/converter/scan","text":"

Manuellen Scan des converter_raw_dir ausl\u00f6sen. Aktualisiert converter_scan_entries in der DB.

Response:

{ \"result\": { \"added\": 3, \"removed\": 1 } }\n
"},{"location":"api/converter/#jobs-erstellen","title":"Jobs erstellen","text":""},{"location":"api/converter/#post-apiconverterjobsfrom-selection","title":"POST /api/converter/jobs/from-selection","text":"

Jobs aus im Datei-Explorer ausgew\u00e4hlten Dateien erstellen.

Body:

{\n  \"relPaths\": [\"filme/film.mkv\", \"musik/track.flac\"],\n  \"audioMode\": \"individual\"\n}\n
Feld Typ Beschreibung relPaths string[] Relative Pfade der ausgew\u00e4hlten Dateien audioMode string individual (ein Job pro Datei) oder shared (ein gemeinsamer Job)

Response:

{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\" }] }\n
"},{"location":"api/converter/#post-apiconvertercreate-jobs","title":"POST /api/converter/create-jobs","text":"

Jobs aus DB-Scan-Eintr\u00e4gen erstellen.

Body:

{\n  \"entries\": [\n    { \"relPath\": \"filme/film.mkv\", \"converterMediaType\": \"video\" }\n  ]\n}\n
"},{"location":"api/converter/#post-apiconverterupload","title":"POST /api/converter/upload","text":"

Dateien hochladen (Multipart, max. 50 Dateien).

Form-Felder:

Feld Typ Beschreibung files File[] Hochzuladende Dateien folderName string (Optional) Ziel-Unterordner

Response:

{\n  \"folders\": [{ \"folderRelPath\": \"upload-2026-03-30\", \"fileCount\": 2 }]\n}\n
"},{"location":"api/converter/#job-verwaltung","title":"Job-Verwaltung","text":""},{"location":"api/converter/#get-apiconverterjobs","title":"GET /api/converter/jobs","text":"

Alle Converter-Jobs zur\u00fcckgeben.

Response:

{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\", \"title\": \"film.mkv\" }] }\n
"},{"location":"api/converter/#get-apiconverterjobsjobid","title":"GET /api/converter/jobs/:jobId","text":"

Einzelnen Converter-Job abrufen.

"},{"location":"api/converter/#post-apiconverterjobsjobidconfig","title":"POST /api/converter/jobs/:jobId/config","text":"

Konfigurationsentwurf f\u00fcr einen Job speichern (persistiert in encode_plan_json).

Body: Partielles Konfig-Objekt (Ausgabeformat, Presets, Metadaten, Track-Auswahl).

"},{"location":"api/converter/#post-apiconverterjobsjobidassign-files","title":"POST /api/converter/jobs/:jobId/assign-files","text":"

Dateien einem bestehenden (noch nicht gestarteten) Job hinzuf\u00fcgen.

Body:

{ \"relPaths\": [\"musik/track2.flac\"] }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidremove-file","title":"POST /api/converter/jobs/:jobId/remove-file","text":"

Datei aus einem Job entfernen (per relativer Pfad).

Body:

{ \"relPath\": \"musik/track2.flac\" }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidremove-input","title":"POST /api/converter/jobs/:jobId/remove-input","text":"

Datei aus einem Job entfernen (per absolutem Eingabepfad).

Body:

{ \"inputPath\": \"/data/output/converter-raw/musik/track2.flac\" }\n
"},{"location":"api/converter/#post-apiconverterjobsjobidstart","title":"POST /api/converter/jobs/:jobId/start","text":"

Job mit finaler Konfiguration starten.

Body:

{\n  \"converterMediaType\": \"video\",\n  \"outputFormat\": \"mkv\",\n  \"userPreset\": \"H.264 MKV 1080p30\",\n  \"trackSelection\": {},\n  \"handBrakeTitleId\": 1,\n  \"audioFormatOptions\": {}\n}\n
"},{"location":"api/converter/#post-apiconverterjobsjobidcancel","title":"POST /api/converter/jobs/:jobId/cancel","text":"

Laufenden Job abbrechen.

"},{"location":"api/converter/#delete-apiconverterjobsjobid","title":"DELETE /api/converter/jobs/:jobId","text":"

Job aus der DB l\u00f6schen.

"},{"location":"api/converter/#datei-operationen","title":"Datei-Operationen","text":"

Alle Datei-Operationen arbeiten direkt auf dem Dateisystem (ohne DB-Aktualisierung). Ein anschlie\u00dfender Scan-Aufruf synchronisiert die DB.

"},{"location":"api/converter/#delete-apiconverterfiles","title":"DELETE /api/converter/files","text":"

Datei oder Ordner l\u00f6schen.

Body:

{ \"relPath\": \"filme/film.mkv\" }\n
"},{"location":"api/converter/#post-apiconverterfilesrename","title":"POST /api/converter/files/rename","text":"

Datei oder Ordner umbenennen.

Body:

{ \"relPath\": \"filme/film.mkv\", \"newName\": \"film-neu.mkv\" }\n
"},{"location":"api/converter/#post-apiconverterfilesmove","title":"POST /api/converter/files/move","text":"

Datei oder Ordner verschieben.

Body:

{ \"relPath\": \"filme/film.mkv\", \"targetParentRelPath\": \"archiv\" }\n

targetParentRelPath = \"\" verschiebt in das Root-Verzeichnis.

"},{"location":"api/converter/#post-apiconverterfilesfolder","title":"POST /api/converter/files/folder","text":"

Neuen Ordner anlegen.

Body:

{ \"parentRelPath\": \"filme\", \"name\": \"neu\" }\n
"},{"location":"api/crons/","title":"Cron API","text":"

Ripster enth\u00e4lt ein eingebautes Cron-System f\u00fcr Skripte und Skript-Ketten (sourceType: script|chain).

"},{"location":"api/crons/#get-apicrons","title":"GET /api/crons","text":"

Listet alle Cron-Jobs.

{\n  \"jobs\": [\n    {\n      \"id\": 1,\n      \"name\": \"Nachtlauf Backup\",\n      \"cronExpression\": \"0 2 * * *\",\n      \"sourceType\": \"script\",\n      \"sourceId\": 3,\n      \"sourceName\": \"Backup-Skript\",\n      \"enabled\": true,\n      \"pushoverEnabled\": true,\n      \"lastRunAt\": \"2026-03-10T02:00:00.000Z\",\n      \"lastRunStatus\": \"success\",\n      \"nextRunAt\": \"2026-03-11T02:00:00.000Z\",\n      \"createdAt\": \"2026-03-01T10:00:00.000Z\",\n      \"updatedAt\": \"2026-03-10T02:00:05.000Z\"\n    }\n  ]\n}\n
"},{"location":"api/crons/#post-apicrons","title":"POST /api/crons","text":"

Erstellt Cron-Job.

{\n  \"name\": \"Nachtlauf Backup\",\n  \"cronExpression\": \"0 2 * * *\",\n  \"sourceType\": \"script\",\n  \"sourceId\": 3,\n  \"enabled\": true,\n  \"pushoverEnabled\": true\n}\n

Response: 201 mit { \"job\": { ... } }

"},{"location":"api/crons/#get-apicronsid","title":"GET /api/crons/:id","text":"

Response:

{ \"job\": { \"id\": 1, \"name\": \"...\" } }\n
"},{"location":"api/crons/#put-apicronsid","title":"PUT /api/crons/:id","text":"

Aktualisiert Cron-Job. Felder wie bei POST.

Response:

{ \"job\": { ... } }\n
"},{"location":"api/crons/#delete-apicronsid","title":"DELETE /api/crons/:id","text":"

Response:

{ \"removed\": { \"id\": 1, \"name\": \"Nachtlauf Backup\" } }\n
"},{"location":"api/crons/#get-apicronsidlogs","title":"GET /api/crons/:id/logs","text":"

Liefert Ausf\u00fchrungs-Logs.

Query-Parameter:

Parameter Typ Default Beschreibung limit number 20 Anzahl Eintr\u00e4ge, max. 100

Response:

{\n  \"logs\": [\n    {\n      \"id\": 42,\n      \"cronJobId\": 1,\n      \"startedAt\": \"2026-03-10T02:00:01.000Z\",\n      \"finishedAt\": \"2026-03-10T02:00:05.000Z\",\n      \"status\": \"success\",\n      \"output\": \"Backup abgeschlossen.\",\n      \"errorMessage\": null\n    }\n  ]\n}\n

status: running | success | error

"},{"location":"api/crons/#post-apicronsidrun","title":"POST /api/crons/:id/run","text":"

Triggert Job manuell (asynchron).

Response:

{ \"triggered\": true, \"cronJobId\": 1 }\n

Wenn Job bereits l\u00e4uft: 409.

"},{"location":"api/crons/#post-apicronsvalidate-expression","title":"POST /api/crons/validate-expression","text":"

Validiert 5-Felder-Cron-Ausdruck und berechnet n\u00e4chsten Lauf.

Request:

{ \"cronExpression\": \"*/15 * * * *\" }\n

G\u00fcltige Response:

{\n  \"valid\": true,\n  \"nextRunAt\": \"2026-03-10T14:15:00.000Z\"\n}\n

Ung\u00fcltige Response:

{\n  \"valid\": false,\n  \"error\": \"Cron-Ausdruck muss genau 5 Felder haben (Minute Stunde Tag Monat Wochentag).\",\n  \"nextRunAt\": null\n}\n
"},{"location":"api/crons/#cron-format","title":"Cron-Format","text":"

Ripster unterst\u00fctzt 5 Felder:

Minute Stunde Tag Monat Wochentag\n

Beispiele:

  • 0 2 * * * t\u00e4glich 02:00
  • */15 * * * * alle 15 Minuten
  • 0 6 * * 1-5 Mo-Fr 06:00
"},{"location":"api/crons/#websocket-events-zu-cron","title":"WebSocket-Events zu Cron","text":"
  • CRON_JOBS_UPDATED bei Create/Update/Delete
  • CRON_JOB_UPDATED bei Laufzeitstatus (running -> success|error)
"},{"location":"api/downloads/","title":"Downloads API","text":"

Endpunkte f\u00fcr die Download-Queue. Ausgabedateien aus der Job-Historie k\u00f6nnen als ZIP heruntergeladen werden.

Basis-Pfad: /api/downloads

"},{"location":"api/downloads/#get-apidownloads","title":"GET /api/downloads","text":"

Liste aller Download-Eintr\u00e4ge plus Zusammenfassung.

Response:

{\n  \"items\": [\n    {\n      \"id\": \"dl-42-raw\",\n      \"jobId\": 42,\n      \"target\": \"raw\",\n      \"status\": \"ready\",\n      \"archiveName\": \"Job_42_raw.zip\",\n      \"outputPath\": null,\n      \"createdAt\": \"2026-03-30T10:00:00.000Z\",\n      \"updatedAt\": \"2026-03-30T10:01:00.000Z\",\n      \"errorMessage\": null\n    }\n  ],\n  \"summary\": {\n    \"total\": 3,\n    \"pending\": 1,\n    \"processing\": 0,\n    \"ready\": 1,\n    \"failed\": 1\n  }\n}\n

Status-Werte:

Status Beschreibung pending In der Queue, noch nicht gestartet processing ZIP wird gerade erstellt ready ZIP fertig, Download verf\u00fcgbar failed Fehler bei der Erstellung"},{"location":"api/downloads/#get-apidownloadssummary","title":"GET /api/downloads/summary","text":"

Nur die Zusammenfassung der Download-Queue (ohne Item-Liste).

Response:

{\n  \"summary\": {\n    \"total\": 3,\n    \"pending\": 1,\n    \"processing\": 0,\n    \"ready\": 1,\n    \"failed\": 1\n  }\n}\n
"},{"location":"api/downloads/#post-apidownloadshistoryjobid","title":"POST /api/downloads/history/:jobId","text":"

Job-Ausgabe in die Download-Queue einreihen.

Parameter:

Parameter Typ Beschreibung jobId number ID des Jobs in der Historie

Body:

{\n  \"target\": \"raw\",\n  \"outputPath\": null\n}\n
Feld Typ Default Beschreibung target string raw raw (RAW-Dateien) oder movie (Ausgabedateien) outputPath string null Optionaler expliziter Ausgabepfad

Response (201 Created):

{\n  \"created\": true,\n  \"id\": \"dl-42-raw\",\n  \"status\": \"pending\",\n  \"summary\": { \"total\": 1, \"pending\": 1, \"processing\": 0, \"ready\": 0, \"failed\": 0 }\n}\n

Ist der Eintrag bereits vorhanden, wird 201 durch 200 ersetzt und created: false zur\u00fcckgegeben.

"},{"location":"api/downloads/#get-apidownloadsidfile","title":"GET /api/downloads/:id/file","text":"

Fertige ZIP-Datei herunterladen.

Parameter:

Parameter Typ Beschreibung id string Download-ID (z. B. dl-42-raw)

Response: Datei-Download (Content-Disposition: attachment).

Schl\u00e4gt fehl mit 404, wenn kein Download-Eintrag mit dieser ID existiert oder die Datei noch nicht bereit ist.

"},{"location":"api/downloads/#delete-apidownloadsid","title":"DELETE /api/downloads/:id","text":"

Download-Eintrag l\u00f6schen (auch fertige ZIP-Dateien werden vom Dateisystem entfernt).

Response:

{\n  \"ok\": true,\n  \"summary\": { \"total\": 2, \"pending\": 0, \"processing\": 0, \"ready\": 2, \"failed\": 0 }\n}\n
"},{"location":"api/downloads/#websocket","title":"WebSocket","text":"

Status\u00e4nderungen werden \u00fcber DOWNLOADS_UPDATED in Echtzeit gemeldet. Vollst\u00e4ndige Dokumentation: WebSocket Events.

"},{"location":"api/history/","title":"History API","text":"

Endpunkte f\u00fcr Job-Historie, Metadaten-Nachpflege, Orphan-Import und L\u00f6schoperationen.

"},{"location":"api/history/#get-apihistory","title":"GET /api/history","text":"

Liefert Jobs mit optionalen Filtern.

Query-Parameter:

Parameter Typ Beschreibung status string Einzelstatus-Filter (legacy-kompatibel). statuses string Mehrfachstatus als CSV, z. B. FINISHED,ERROR. search string Suche in Titel-/IMDb-Feldern. limit number Maximale Anzahl Ergebnisse. lite bool Ohne Dateisystem-Checks (schneller). includeChildren bool Child-Jobs (z. B. Serien-/Multipart-Kinder) explizit einbeziehen.

Beispiel:

GET /api/history?statuses=FINISHED,ERROR&search=Inception&limit=50&lite=1\n

Response (Beispiel):

{\n  \"jobs\": [\n    {\n      \"id\": 42,\n      \"status\": \"FINISHED\",\n      \"title\": \"Inception\",\n      \"job_kind\": \"bluray\",\n      \"raw_path\": \"/mnt/raw/Inception - RAW - job-42\",\n      \"output_path\": \"/mnt/movies/Inception (2010)/Inception (2010).mkv\",\n      \"mediaType\": \"bluray\",\n      \"ripSuccessful\": true,\n      \"encodeSuccess\": true,\n      \"created_at\": \"2026-03-10T08:00:00.000Z\",\n      \"updated_at\": \"2026-03-10T10:00:00.000Z\"\n    }\n  ]\n}\n
"},{"location":"api/history/#get-apihistoryid","title":"GET /api/history/:id","text":"

Liefert Job-Detail.

Query-Parameter:

Parameter Typ Standard Beschreibung includeLogs bool false Prozesslog laden. includeLiveLog bool false Live-/Tail-Log laden. includeAllLogs bool false vollst\u00e4ndiges Log statt Tail. logTailLines number 800 Tail-L\u00e4nge falls nicht includeAllLogs. lite bool false Detailantwort ohne FS-Checks.

Response (Beispiel):

{\n  \"job\": {\n    \"id\": 42,\n    \"status\": \"FINISHED\",\n    \"makemkvInfo\": {},\n    \"mediainfoInfo\": {},\n    \"handbrakeInfo\": {},\n    \"encodePlan\": {},\n    \"log\": \"...\",\n    \"log_count\": 1,\n    \"logMeta\": {\n      \"loaded\": true,\n      \"total\": 800,\n      \"returned\": 800,\n      \"truncated\": true\n    }\n  }\n}\n
"},{"location":"api/history/#get-apihistoryorphan-raw","title":"GET /api/history/orphan-raw","text":"

Sucht RAW-Ordner ohne zugeh\u00f6rigen Job.

"},{"location":"api/history/#post-apihistoryorphan-rawimport","title":"POST /api/history/orphan-raw/import","text":"

Importiert einen RAW-Ordner als Job und triggert optional die Analyse des Imports.

Request:

{ \"rawPath\": \"/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99\" }\n

Response (Beispiel):

{\n  \"job\": { \"id\": 77, \"status\": \"FINISHED\" },\n  \"activation\": { \"started\": true },\n  \"activationError\": null\n}\n
"},{"location":"api/history/#post-apihistoryidmetadataassign","title":"POST /api/history/:id/metadata/assign","text":"

Weist TMDb-Metadaten nachtr\u00e4glich zu oder aktualisiert bestehende Film-/Serien-Metadaten eines Jobs.

"},{"location":"api/history/#post-apihistoryidcdassign","title":"POST /api/history/:id/cd/assign","text":"

Weist CD-Metadaten (z. B. MusicBrainz) nachtr\u00e4glich zu.

"},{"location":"api/history/#post-apihistoryiderrorack","title":"POST /api/history/:id/error/ack","text":"

Quittiert einen Fehlerzustand im Historieneintrag.

"},{"location":"api/history/#get-apihistoryiddelete-preview","title":"GET /api/history/:id/delete-preview","text":"

Liefert eine Vorschau der l\u00f6schbaren Pfade (inkl. Scope auf verkn\u00fcpfte Jobs).

Query-Parameter:

Parameter Typ Standard Beschreibung includeRelated bool true Verkn\u00fcpfte Jobs in die Vorschau einbeziehen.

Response (Beispiel):

{\n  \"preview\": {\n    \"jobId\": 42,\n    \"relatedJobs\": [{ \"id\": 42 }, { \"id\": 73 }],\n    \"pathCandidates\": {\n      \"raw\": [{ \"path\": \"/mnt/raw/...\", \"exists\": true, \"isDirectory\": true }],\n      \"movie\": [{ \"path\": \"/mnt/movies/...\", \"exists\": true, \"isDirectory\": true }]\n    }\n  }\n}\n
"},{"location":"api/history/#post-apihistoryiddelete-files","title":"POST /api/history/:id/delete-files","text":"

L\u00f6scht Dateien eines Jobs, beh\u00e4lt DB-Eintrag.

Request:

{\n  \"target\": \"both\",\n  \"includeRelated\": true,\n  \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n  \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n

target: raw | movie | both

selectedRawPaths / selectedMoviePaths sind optional und begrenzen die L\u00f6schung auf ausgew\u00e4hlte Pfade aus der Vorschau.

"},{"location":"api/history/#post-apihistoryiddelete","title":"POST /api/history/:id/delete","text":"

L\u00f6scht Job aus DB; optional auch Dateien.

Request:

{\n  \"target\": \"both\",\n  \"includeRelated\": true,\n  \"resetDriveState\": false,\n  \"keepDetectedDevice\": true,\n  \"preserveRawForImportJobs\": false,\n  \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n  \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n

target: none | raw | movie | both

Response (Beispiel):

{\n  \"deleted\": true,\n  \"jobId\": 42,\n  \"fileTarget\": \"both\",\n  \"fileSummary\": {\n    \"target\": \"both\",\n    \"raw\": { \"filesDeleted\": 10 },\n    \"movie\": { \"filesDeleted\": 1 }\n  },\n  \"uiReset\": {\n    \"reset\": true,\n    \"state\": \"IDLE\"\n  },\n  \"safeguards\": {\n    \"containsOrphanRawImportJob\": false,\n    \"resetDriveStateApplied\": false,\n    \"keepDetectedDeviceApplied\": true\n  }\n}\n
"},{"location":"api/history/#hinweise","title":"Hinweise","text":"
  • Ein aktiver Pipeline-Job kann nicht gel\u00f6scht werden (409).
  • L\u00f6schoperationen sind irreversibel.
  • Bei Serien-/Multipart-Containern steuern includeRelated und Pfadselektionen den genauen Scope.
"},{"location":"api/pipeline/","title":"Pipeline API","text":"

Endpunkte zur Steuerung des Pipeline-Workflows.

"},{"location":"api/pipeline/#get-apipipelinestate","title":"GET /api/pipeline/state","text":"

Liefert aktuellen Pipeline- und Hardware-Monitoring-Snapshot.

Response (Beispiel):

{\n  \"pipeline\": {\n    \"state\": \"READY_TO_ENCODE\",\n    \"activeJobId\": 42,\n    \"progress\": 0,\n    \"eta\": null,\n    \"statusText\": \"Mediainfo best\u00e4tigt - Encode manuell starten\",\n    \"context\": {\n      \"jobId\": 42\n    },\n    \"jobProgress\": {\n      \"42\": {\n        \"state\": \"MEDIAINFO_CHECK\",\n        \"progress\": 68.5,\n        \"eta\": null,\n        \"statusText\": \"MEDIAINFO_CHECK 68.50%\"\n      }\n    },\n    \"queue\": {\n      \"maxParallelJobs\": 1,\n      \"runningCount\": 1,\n      \"queuedCount\": 2,\n      \"runningJobs\": [],\n      \"queuedJobs\": []\n    }\n  },\n  \"hardwareMonitoring\": {\n    \"enabled\": true,\n    \"intervalMs\": 5000,\n    \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n    \"sample\": {\n      \"cpu\": {},\n      \"memory\": {},\n      \"gpu\": {},\n      \"storage\": {}\n    },\n    \"error\": null\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelineanalyze","title":"POST /api/pipeline/analyze","text":"

Startet Disc-Analyse und legt Job an.

Response:

{\n  \"result\": {\n    \"jobId\": 42,\n    \"detectedTitle\": \"INCEPTION\",\n    \"omdbCandidates\": []\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinerescan-disc","title":"POST /api/pipeline/rescan-disc","text":"

Erzwingt erneute Laufwerkspr\u00fcfung.

Response (Beispiel):

{\n  \"result\": {\n    \"present\": true,\n    \"changed\": true,\n    \"emitted\": \"discInserted\",\n    \"device\": {\n      \"path\": \"/dev/sr0\",\n      \"discLabel\": \"INCEPTION\",\n      \"mediaProfile\": \"bluray\"\n    }\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinerescan-drive","title":"POST /api/pipeline/rescan-drive","text":"

Erzwingt Rescan f\u00fcr ein konkretes Laufwerk.

Request:

{ \"devicePath\": \"/dev/sr0\" }\n
"},{"location":"api/pipeline/#get-apipipelinetmdbmoviesearchq","title":"GET /api/pipeline/tmdb/movie/search?q=

TMDb-Filmsuche.

Response:

{\n  \"results\": [\n    {\n      \"imdbId\": \"tt1375666\",\n      \"title\": \"Inception\",\n      \"year\": \"2010\",\n      \"type\": \"movie\",\n      \"poster\": \"https://...\"\n    }\n  ]\n}\n
","text":""},{"location":"api/pipeline/#get-apipipelinetmdbseriessearchqseason","title":"GET /api/pipeline/tmdb/series/search?q=&season=

TMDb-Seriensuche (f\u00fcr Serien-Workflow bei DVD/Blu-ray).

","text":""},{"location":"api/pipeline/#get-apipipelinecddrives","title":"GET /api/pipeline/cd/drives

Liefert Snapshot der aktuell bekannten CD-Laufwerke.

","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzsearchq","title":"GET /api/pipeline/cd/musicbrainz/search?q=

MusicBrainz-Suche f\u00fcr CD-Metadaten.

","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzreleasembid","title":"GET /api/pipeline/cd/musicbrainz/release/:mbId

L\u00e4dt Release-Details zu einer MusicBrainz-ID.

","text":""},{"location":"api/pipeline/#post-apipipelinecdselect-metadata","title":"POST /api/pipeline/cd/select-metadata

\u00dcbernimmt CD-Metadaten f\u00fcr einen Job.

Request (Beispiel):

{\n  \"jobId\": 91,\n  \"title\": \"Album\",\n  \"artist\": \"Artist\",\n  \"year\": 2020,\n  \"mbId\": \"f5093c06-23e3-404f-aeaa-40f72885ee3a\",\n  \"coverUrl\": \"https://...\",\n  \"tracks\": []\n}\n
","text":""},{"location":"api/pipeline/#post-apipipelinecdstartjobid","title":"POST /api/pipeline/cd/start/:jobId

Startet/queued CD-Rip mit Format-/Script-/Chain-Konfiguration.

","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookupload","title":"POST /api/pipeline/audiobook/upload

Upload von AAX-Datei (Multipart/FormData).

FormData-Felder:

  • file (Pflicht)
  • format (optional)
  • startImmediately (optional)
","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookpending-activation","title":"GET /api/pipeline/audiobook/pending-activation

Zeigt AAX-Jobs mit fehlenden Activation-Bytes.

","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookstartjobid","title":"POST /api/pipeline/audiobook/start/:jobId

Startet Audiobook-Job mit optionaler Konfiguration.

","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookjobs","title":"GET /api/pipeline/audiobook/jobs

Liefert Audiobook-Jobliste.

","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookoutput-tree","title":"GET /api/pipeline/audiobook/output-tree

Read-only Baumansicht des Audiobook-Ausgabeordners.

","text":""},{"location":"api/pipeline/#post-apipipelineselect-metadata","title":"POST /api/pipeline/select-metadata

Setzt Metadaten (und optional Playlist) f\u00fcr einen Job.

Request:

{\n  \"jobId\": 42,\n  \"title\": \"Inception\",\n  \"year\": 2010,\n  \"imdbId\": \"tt1375666\",\n  \"poster\": \"https://...\",\n  \"fromOmdb\": true,\n  \"selectedPlaylist\": \"00800\"\n}\n

Wichtige optionale Felder:

  • selectedHandBrakeTitleId / selectedHandBrakeTitleIds: Titel-Auswahl f\u00fcr Review/MediaInfo.
  • metadataProvider: omdb oder tmdb.
  • workflowKind: bei Disc-Jobs typischerweise film oder series.
  • discNumber: Pflicht f\u00fcr Serien-Disc-Zuordnung (workflowKind=series).
  • duplicateAction: Duplikatverhalten bei Film-Metadaten (allow_new oder multipart_movie).
  • existingJobId: optionaler Referenzjob f\u00fcr multipart_movie.
  • existingDiscNumber: Disc-Nummer des bestehenden Jobs f\u00fcr multipart_movie.

Response:

{ \"job\": { \"id\": 42, \"status\": \"READY_TO_START\" } }\n

Konflikt-Response (Beispiel, HTTP 409):

{\n  \"message\": \"Metadaten bereits in der Historie gefunden. Bitte Auswahl \u00fcbernehmen oder Multipart movie w\u00e4hlen.\",\n  \"details\": [\n    {\n      \"code\": \"METADATA_DUPLICATE_FOUND\",\n      \"mediaProfile\": \"bluray\",\n      \"existingJob\": {\n        \"id\": 17,\n        \"title\": \"Inception\",\n        \"year\": 2010,\n        \"status\": \"FINISHED\",\n        \"jobKind\": \"bluray\",\n        \"discNumber\": 1,\n        \"isMultipartMovie\": false\n      }\n    }\n  ]\n}\n

Relevante Fehlercodes (POST /api/pipeline/select-metadata):

Code Bedeutung METADATA_DUPLICATE_FOUND Film-Metadaten existieren bereits in der Historie (Konfliktdialog im UI). MULTIPART_DISC_REQUIRED F\u00fcr Multipart fehlen Disc-Nummern (discNumber/existingDiscNumber). MULTIPART_DISC_ALREADY_EXISTS Disc-Nummer im Multipart-Container bereits vergeben oder doppelt. MULTIPART_MEDIA_MISMATCH Multipart nur bei gleichem Medientyp (DVD oder Blu-ray). MULTIPART_SERIES_NOT_ALLOWED Multipart ist nur f\u00fcr Film-Jobs erlaubt, nicht f\u00fcr Serien-Workflow. MULTIPART_METADATA_MISMATCH Ausgew\u00e4hlter bestehender Job passt nicht zu den Film-Metadaten. SERIES_DISC_ALREADY_EXISTS Serien-Disc-Nummer innerhalb einer Staffel bereits vorhanden.","text":""},{"location":"api/pipeline/#post-apipipelinejobsjobidraw-decision","title":"POST /api/pipeline/jobs/:jobId/raw-decision

Trifft Entscheidung bei vorhandenem RAW (continue oder restart je nach Dialogfluss).

Request:

{ \"decision\": \"continue\" }\n
","text":""},{"location":"api/pipeline/#post-apipipelinestartjobid","title":"POST /api/pipeline/start/:jobId

Startet vorbereiteten Job oder queued ihn (je nach Parallel-Limit).

M\u00f6gliche Responses:

{ \"result\": { \"started\": true, \"stage\": \"RIPPING\" } }\n
{ \"result\": { \"queued\": true, \"started\": false, \"queuePosition\": 2, \"action\": \"START_PREPARED\" } }\n
","text":""},{"location":"api/pipeline/#post-apipipelineconfirm-encodejobid","title":"POST /api/pipeline/confirm-encode/:jobId

Best\u00e4tigt Review-Auswahl (Tracks, Pre/Post-Skripte/Ketten, User-Preset).

Request (typisch):

{\n  \"selectedEncodeTitleId\": 1,\n  \"selectedTrackSelection\": {\n    \"1\": {\n      \"audioTrackIds\": [1, 2],\n      \"subtitleTrackIds\": [3]\n    }\n  },\n  \"selectedPreEncodeScriptIds\": [1],\n  \"selectedPostEncodeScriptIds\": [2, 7],\n  \"selectedPreEncodeChainIds\": [3],\n  \"selectedPostEncodeChainIds\": [4],\n  \"selectedUserPresetId\": 5,\n  \"skipPipelineStateUpdate\": false\n}\n

Response:

{ \"job\": { \"id\": 42, \"encode_review_confirmed\": 1 } }\n
","text":""},{"location":"api/pipeline/#post-apipipelinecancel","title":"POST /api/pipeline/cancel

Bricht laufenden Job ab oder entfernt Queue-Eintrag.

Request (optional):

{ \"jobId\": 42 }\n

M\u00f6gliche Responses:

{ \"result\": { \"cancelled\": true, \"queuedOnly\": true, \"jobId\": 42 } }\n
{ \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"jobId\": 42 } }\n
{ \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"pending\": true, \"jobId\": 42 } }\n
","text":""},{"location":"api/pipeline/#post-apipipelineretryjobid","title":"POST /api/pipeline/retry/:jobId

Retry f\u00fcr ERROR/CANCELLED-Jobs (oder Queue-Einreihung).

","text":""},{"location":"api/pipeline/#post-apipipelinereencodejobid","title":"POST /api/pipeline/reencode/:jobId

Startet Re-Encode aus bestehendem RAW.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-reviewjobid","title":"POST /api/pipeline/restart-review/:jobId

Berechnet Review aus RAW neu.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-encodejobid","title":"POST /api/pipeline/restart-encode/:jobId

Startet Encoding mit letzter best\u00e4tigter Review neu.

","text":""},{"location":"api/pipeline/#post-apipipelinerestart-cd-reviewjobid","title":"POST /api/pipeline/restart-cd-review/:jobId

Berechnet CD-Review aus vorhandenem RAW neu.

","text":""},{"location":"api/pipeline/#post-apipipelineresume-readyjobid","title":"POST /api/pipeline/resume-ready/:jobId

L\u00e4dt READY_TO_ENCODE-Job nach Neustart wieder in aktive Session.

","text":""},{"location":"api/pipeline/#get-apipipelineoutput-foldersjobid","title":"GET /api/pipeline/output-folders/:jobId

Liefert bekannte Output-Ordner entlang der Job-Lineage.

","text":""},{"location":"api/pipeline/#post-apipipelinedelete-output-foldersjobid","title":"POST /api/pipeline/delete-output-folders/:jobId

L\u00f6scht ausgew\u00e4hlte Output-Ordner.

Request:

{ \"folderPaths\": [\"/mnt/movies/Inception (2010)\"] }\n

Alle Endpunkte liefern { result: ... } bzw. { job: ... }.

","text":""},{"location":"api/pipeline/#queue-endpunkte","title":"Queue-Endpunkte","text":""},{"location":"api/pipeline/#get-apipipelinequeue","title":"GET /api/pipeline/queue","text":"

Liefert Queue-Snapshot.

{\n  \"queue\": {\n    \"maxParallelJobs\": 1,\n    \"runningCount\": 1,\n    \"queuedCount\": 3,\n    \"runningJobs\": [\n      {\n        \"jobId\": 41,\n        \"title\": \"Inception\",\n        \"status\": \"ENCODING\",\n        \"lastState\": \"ENCODING\"\n      }\n    ],\n    \"queuedJobs\": [\n      {\n        \"entryId\": 11,\n        \"position\": 1,\n        \"type\": \"job\",\n        \"jobId\": 42,\n        \"action\": \"START_PREPARED\",\n        \"actionLabel\": \"Start\",\n        \"title\": \"Matrix\",\n        \"status\": \"READY_TO_ENCODE\",\n        \"lastState\": \"READY_TO_ENCODE\",\n        \"hasScripts\": true,\n        \"hasChains\": false,\n        \"enqueuedAt\": \"2026-03-10T09:00:00.000Z\"\n      },\n      {\n        \"entryId\": 12,\n        \"position\": 2,\n        \"type\": \"wait\",\n        \"waitSeconds\": 30,\n        \"title\": \"Warten 30s\",\n        \"status\": \"QUEUED\",\n        \"enqueuedAt\": \"2026-03-10T09:01:00.000Z\"\n      }\n    ],\n    \"updatedAt\": \"2026-03-10T09:01:02.000Z\"\n  }\n}\n
"},{"location":"api/pipeline/#post-apipipelinequeuereorder","title":"POST /api/pipeline/queue/reorder","text":"

Sortiert Queue-Eintr\u00e4ge neu.

Request:

{\n  \"orderedEntryIds\": [12, 11]\n}\n

Legacy fallback wird akzeptiert:

{\n  \"orderedJobIds\": [42, 43]\n}\n
"},{"location":"api/pipeline/#post-apipipelinequeueentry","title":"POST /api/pipeline/queue/entry","text":"

F\u00fcgt Nicht-Job-Queue-Eintrag hinzu (script, chain, wait).

Request-Beispiele:

{ \"type\": \"script\", \"scriptId\": 3 }\n
{ \"type\": \"chain\", \"chainId\": 2, \"insertAfterEntryId\": 11 }\n
{ \"type\": \"wait\", \"waitSeconds\": 45 }\n

Response:

{\n  \"result\": { \"entryId\": 12, \"type\": \"wait\", \"position\": 2 },\n  \"queue\": { \"...\": \"...\" }\n}\n
"},{"location":"api/pipeline/#delete-apipipelinequeueentryentryid","title":"DELETE /api/pipeline/queue/entry/:entryId","text":"

Entfernt Queue-Eintrag.

Response:

{ \"queue\": { \"...\": \"...\" } }\n
"},{"location":"api/pipeline/#pipeline-zustande","title":"Pipeline-Zust\u00e4nde State Bedeutung IDLE Wartet auf Medium DISC_DETECTED Medium erkannt ANALYZING MakeMKV-Analyse l\u00e4uft METADATA_SELECTION Metadaten-Auswahl WAITING_FOR_USER_DECISION Nutzerentscheidung erforderlich (Playlist-Auswahl oder RAW-Entscheidung) READY_TO_START \u00dcbergang vor Start RIPPING MakeMKV-Rip l\u00e4uft MEDIAINFO_CHECK Titel-/Track-Auswertung READY_TO_ENCODE Review bereit ENCODING HandBrake-Encoding l\u00e4uft CD_METADATA_SELECTION CD-Metadatenauswahl aktiv CD_READY_TO_RIP CD-Job ist startbereit CD_ANALYZING CD-Struktur/Tracks werden vorbereitet CD_RIPPING CD-Ripping l\u00e4uft CD_ENCODING CD-Encode l\u00e4uft FINISHED Abgeschlossen DONE Abgeschlossen (v. a. Audiobook/Converter/CD-Varianten) CANCELLED Abgebrochen ERROR Fehler","text":""},{"location":"api/runtime-activities/","title":"Runtime Activities API","text":"

Ripster verfolgt alle laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Skript-Ketten, Cron-Jobs, interne Tasks) in Echtzeit \u00fcber den RuntimeActivityService.

"},{"location":"api/runtime-activities/#ubersicht","title":"\u00dcbersicht","text":"

Aktivit\u00e4ten entstehen, wenn Ripster intern Aktionen ausf\u00fchrt \u2013 z. B. beim Start eines Cron-Jobs, beim Ausf\u00fchren einer Skript-Kette oder beim Durchlaufen von Pipeline-Schritten. Sie sind nicht persistent (kein DB-Speicher) und werden nur im Arbeitsspeicher gehalten.

  • Aktive Aktivit\u00e4ten (active): Laufen gerade.
  • Letzte Aktivit\u00e4ten (recent): Abgeschlossen, max. 120 Eintr\u00e4ge.

\u00c4nderungen werden \u00fcber WebSocket (RUNTIME_ACTIVITY_CHANGED) in Echtzeit gesendet.

"},{"location":"api/runtime-activities/#aktivitats-objekt","title":"Aktivit\u00e4ts-Objekt","text":"
{\n  \"id\": 7,\n  \"type\": \"chain\",\n  \"name\": \"Post-Encode Aufr\u00e4umen\",\n  \"status\": \"running\",\n  \"source\": \"cron\",\n  \"message\": \"Schritt 2 von 3\",\n  \"currentStep\": \"cleanup.sh\",\n  \"currentStepType\": \"script\",\n  \"currentScriptName\": \"cleanup.sh\",\n  \"stepIndex\": 2,\n  \"stepTotal\": 3,\n  \"parentActivityId\": null,\n  \"jobId\": 42,\n  \"cronJobId\": 3,\n  \"chainId\": 5,\n  \"scriptId\": null,\n  \"canCancel\": true,\n  \"canNextStep\": false,\n  \"outcome\": \"running\",\n  \"errorMessage\": null,\n  \"output\": null,\n  \"stdout\": null,\n  \"stderr\": null,\n  \"stdoutTruncated\": false,\n  \"stderrTruncated\": false,\n  \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n  \"finishedAt\": null,\n  \"durationMs\": null,\n  \"exitCode\": null,\n  \"success\": null\n}\n
"},{"location":"api/runtime-activities/#felder","title":"Felder","text":"Feld Typ Beschreibung id number Eindeutige ID (Laufz\u00e4hler, nicht persistent) type string Art der Aktivit\u00e4t: script | chain | cron | task name string \\| null Anzeigename der Aktivit\u00e4t status string Aktueller Status: running | success | error source string \\| null Ausl\u00f6ser (z. B. cron, pipeline, manual) message string \\| null Kurztext zum aktuellen Zustand currentStep string \\| null Name des aktuell ausgef\u00fchrten Schritts currentStepType string \\| null Typ des Schritts (z. B. script, wait) currentScriptName string \\| null Name des Skripts im aktuellen Schritt stepIndex number \\| null Aktueller Schritt (1-basiert) stepTotal number \\| null Gesamtanzahl Schritte parentActivityId number \\| null ID der \u00fcbergeordneten Aktivit\u00e4t jobId number \\| null Verkn\u00fcpfte Job-ID cronJobId number \\| null Verkn\u00fcpfte Cron-Job-ID chainId number \\| null Verkn\u00fcpfte Skript-Ketten-ID scriptId number \\| null Verkn\u00fcpfte Skript-ID canCancel boolean Abbrechen \u00fcber API m\u00f6glich canNextStep boolean N\u00e4chster Schritt \u00fcber API ausl\u00f6sbar outcome string \\| null Abschluss-Ergebnis: success | error | cancelled | skipped | running errorMessage string \\| null Fehlermeldung (max. 2.000 Zeichen) output string \\| null Allgemeine Ausgabe (max. 12.000 Zeichen) stdout string \\| null Standardausgabe des Prozesses (max. 12.000 Zeichen) stderr string \\| null Fehlerausgabe des Prozesses (max. 12.000 Zeichen) stdoutTruncated boolean true, wenn stdout gek\u00fcrzt wurde stderrTruncated boolean true, wenn stderr gek\u00fcrzt wurde startedAt string ISO-8601-Zeitstempel des Starts finishedAt string \\| null ISO-8601-Zeitstempel des Endes durationMs number \\| null Laufzeit in Millisekunden exitCode number \\| null Exit-Code des Prozesses success boolean \\| null Erfolgsstatus (null bei laufender Aktivit\u00e4t)"},{"location":"api/runtime-activities/#snapshot-objekt","title":"Snapshot-Objekt","text":"

Alle Aktivit\u00e4ts-Endpunkte geben einen Snapshot zur\u00fcck:

{\n  \"active\": [ /* laufende Aktivit\u00e4ten, nach startedAt absteigend */ ],\n  \"recent\": [ /* abgeschlossene Aktivit\u00e4ten, nach finishedAt absteigend, max. 120 */ ],\n  \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n
"},{"location":"api/runtime-activities/#endpunkte","title":"Endpunkte","text":""},{"location":"api/runtime-activities/#get-apiruntimeactivities","title":"GET /api/runtime/activities","text":"

Aktuellen Aktivit\u00e4ts-Snapshot abrufen.

Antwort:

{\n  \"active\": [],\n  \"recent\": [\n    {\n      \"id\": 5,\n      \"type\": \"script\",\n      \"name\": \"notify.sh\",\n      \"status\": \"success\",\n      \"outcome\": \"success\",\n      \"startedAt\": \"2026-03-10T09:58:00.000Z\",\n      \"finishedAt\": \"2026-03-10T09:58:02.000Z\",\n      \"durationMs\": 2100,\n      \"exitCode\": 0,\n      \"success\": true,\n      \"canCancel\": false,\n      \"canNextStep\": false\n    }\n  ],\n  \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n
"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidcancel","title":"POST /api/runtime/activities/:id/cancel","text":"

Aktive Aktivit\u00e4t abbrechen (nur wenn canCancel: true).

Parameter:

Name In Typ Beschreibung id path number Aktivit\u00e4ts-ID reason body string Optionaler Abbruchgrund

Request Body:

{ \"reason\": \"Manueller Abbruch durch Benutzer\" }\n

Antwort (Erfolg):

{\n  \"ok\": true,\n  \"action\": null,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n

Fehlercodes:

HTTP Bedeutung 404 Aktivit\u00e4t nicht gefunden oder bereits abgeschlossen 409 Abbrechen wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidnext-step","title":"POST /api/runtime/activities/:id/next-step","text":"

N\u00e4chsten Schritt einer Aktivit\u00e4t ausl\u00f6sen (nur wenn canNextStep: true).

Parameter:

Name In Typ Beschreibung id path number Aktivit\u00e4ts-ID

Antwort (Erfolg):

{\n  \"ok\": true,\n  \"action\": null,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n

Fehlercodes:

HTTP Bedeutung 404 Aktivit\u00e4t nicht gefunden 409 N\u00e4chster Schritt wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesclear-recent","title":"POST /api/runtime/activities/clear-recent","text":"

Alle abgeschlossenen Aktivit\u00e4ten aus recent l\u00f6schen.

Antwort:

{\n  \"ok\": true,\n  \"removed\": 14,\n  \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n
"},{"location":"api/runtime-activities/#grenzwerte","title":"Grenzwerte","text":"Wert Limit Maximale recent-Eintr\u00e4ge 120 Maximale L\u00e4nge stdout / stderr / output 12.000 Zeichen Maximale L\u00e4nge errorMessage / message 2.000 Zeichen Maximale L\u00e4nge outcome 40 Zeichen

Gek\u00fcrzte Ausgaben erhalten den Suffix ...[gek\u00fcrzt] (bei Inline-Text) bzw. \\n...[gek\u00fcrzt] (bei mehrzeiligem Output).

"},{"location":"api/runtime-activities/#echtzeit-updates","title":"Echtzeit-Updates","text":"

\u00c4nderungen werden automatisch als RUNTIME_ACTIVITY_CHANGED WebSocket-Event gesendet. Die Frontend-Komponente braucht GET /api/runtime/activities nur beim initialen Laden aufzurufen.

"},{"location":"api/settings/","title":"Settings API","text":"

Endpunkte f\u00fcr Einstellungen, Skripte, Skript-Ketten und User-Presets.

"},{"location":"api/settings/#get-apisettings","title":"GET /api/settings","text":"

Liefert alle Einstellungen kategorisiert.

Response (Struktur):

{\n  \"categories\": [\n    {\n      \"category\": \"Pfade\",\n      \"settings\": [\n        {\n          \"key\": \"raw_dir\",\n          \"label\": \"Raw Ausgabeordner\",\n          \"type\": \"path\",\n          \"required\": true,\n          \"description\": \"...\",\n          \"defaultValue\": \"data/output/raw\",\n          \"options\": [],\n          \"validation\": { \"minLength\": 1 },\n          \"value\": \"data/output/raw\",\n          \"orderIndex\": 100\n        }\n      ]\n    }\n  ]\n}\n
"},{"location":"api/settings/#put-apisettingskey","title":"PUT /api/settings/:key","text":"

Aktualisiert eine einzelne Einstellung.

Request:

{ \"value\": \"/mnt/storage/raw\" }\n

Response:

{\n  \"setting\": {\n    \"key\": \"raw_dir\",\n    \"value\": \"/mnt/storage/raw\"\n  },\n  \"reviewRefresh\": {\n    \"triggered\": false,\n    \"reason\": \"not_ready\"\n  }\n}\n

reviewRefresh ist null oder ein Objekt mit Status der optionalen Review-Neuberechnung.

"},{"location":"api/settings/#put-apisettings","title":"PUT /api/settings","text":"

Aktualisiert mehrere Einstellungen atomar.

Request:

{\n  \"settings\": {\n    \"raw_dir\": \"/mnt/storage/raw\",\n    \"movie_dir\": \"/mnt/storage/movies\",\n    \"handbrake_preset_bluray\": \"H.264 MKV 1080p30\"\n  }\n}\n

Response:

{\n  \"changes\": [\n    { \"key\": \"raw_dir\", \"value\": \"/mnt/storage/raw\" },\n    { \"key\": \"movie_dir\", \"value\": \"/mnt/storage/movies\" }\n  ],\n  \"reviewRefresh\": {\n    \"triggered\": true,\n    \"jobId\": 42,\n    \"relevantKeys\": [\"handbrake_preset_bluray\"]\n  }\n}\n

Bei Validierungsfehlern kommt 400 mit error.details[].

"},{"location":"api/settings/#get-apisettingshandbrake-presets","title":"GET /api/settings/handbrake-presets","text":"

Liest Preset-Liste via HandBrakeCLI -z (mit Fallback auf konfigurierte Presets).

Response (Beispiel):

{\n  \"source\": \"handbrake-cli\",\n  \"message\": null,\n  \"options\": [\n    { \"label\": \"General/\", \"value\": \"__group__general\", \"disabled\": true, \"category\": \"General\" },\n    { \"label\": \"   Fast 1080p30\", \"value\": \"Fast 1080p30\", \"category\": \"General\" }\n  ]\n}\n
"},{"location":"api/settings/#post-apisettingspushovertest","title":"POST /api/settings/pushover/test","text":"

Sendet Testnachricht \u00fcber aktuelle PushOver-Settings.

Request (optional):

{\n  \"title\": \"Test\",\n  \"message\": \"Ripster Test\"\n}\n

Response:

{\n  \"result\": {\n    \"sent\": true,\n    \"eventKey\": \"test\",\n    \"requestId\": \"...\"\n  }\n}\n

Wenn PushOver deaktiviert ist oder Credentials fehlen, kommt i. d. R. ebenfalls 200 mit sent: false + reason.

"},{"location":"api/settings/#skripte","title":"Skripte","text":"

Basis: /api/settings/scripts

"},{"location":"api/settings/#get-apisettingsscripts","title":"GET /api/settings/scripts","text":"
{ \"scripts\": [ { \"id\": 1, \"name\": \"...\", \"scriptBody\": \"...\", \"orderIndex\": 1, \"createdAt\": \"...\", \"updatedAt\": \"...\" } ] }\n
"},{"location":"api/settings/#post-apisettingsscripts","title":"POST /api/settings/scripts","text":"
{ \"name\": \"Move\", \"scriptBody\": \"mv \\\"$RIPSTER_OUTPUT_PATH\\\" /mnt/movies/\" }\n

Response: 201 mit { \"script\": { ... } }

"},{"location":"api/settings/#put-apisettingsscriptsid","title":"PUT /api/settings/scripts/:id","text":"

Body wie POST, Response { \"script\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsscriptsid","title":"DELETE /api/settings/scripts/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscriptsreorder","title":"POST /api/settings/scripts/reorder","text":"
{ \"orderedScriptIds\": [3, 1, 2] }\n

Response { \"scripts\": [ ... ] }.

"},{"location":"api/settings/#post-apisettingsscriptsidtest","title":"POST /api/settings/scripts/:id/test","text":"

F\u00fchrt Skript als Testlauf aus.

{\n  \"result\": {\n    \"scriptId\": 1,\n    \"scriptName\": \"Move\",\n    \"success\": true,\n    \"exitCode\": 0,\n    \"signal\": null,\n    \"timedOut\": false,\n    \"durationMs\": 120,\n    \"stdout\": \"...\",\n    \"stderr\": \"...\",\n    \"stdoutTruncated\": false,\n    \"stderrTruncated\": false\n  }\n}\n
"},{"location":"api/settings/#umgebungsvariablen-fur-skripte","title":"Umgebungsvariablen f\u00fcr Skripte","text":"

Diese Variablen werden beim Ausf\u00fchren gesetzt:

  • RIPSTER_SCRIPT_RUN_AT
  • RIPSTER_JOB_ID
  • RIPSTER_JOB_TITLE
  • RIPSTER_MODE
  • RIPSTER_INPUT_PATH
  • RIPSTER_OUTPUT_PATH
  • RIPSTER_RAW_PATH
  • RIPSTER_SCRIPT_ID
  • RIPSTER_SCRIPT_NAME
  • RIPSTER_SCRIPT_SOURCE
"},{"location":"api/settings/#skript-ketten","title":"Skript-Ketten","text":"

Basis: /api/settings/script-chains

Eine Kette hat Schritte vom Typ:

  • script (scriptId erforderlich)
  • wait (waitSeconds 1..3600)
"},{"location":"api/settings/#get-apisettingsscript-chains","title":"GET /api/settings/script-chains","text":"

Response { \"chains\": [ ... ] } (inkl. steps[]).

"},{"location":"api/settings/#get-apisettingsscript-chainsid","title":"GET /api/settings/script-chains/:id","text":"

Response { \"chain\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscript-chains","title":"POST /api/settings/script-chains","text":"
{\n  \"name\": \"After Encode\",\n  \"steps\": [\n    { \"stepType\": \"script\", \"scriptId\": 1 },\n    { \"stepType\": \"wait\", \"waitSeconds\": 15 },\n    { \"stepType\": \"script\", \"scriptId\": 2 }\n  ]\n}\n

Response: 201 mit { \"chain\": { ... } }

"},{"location":"api/settings/#put-apisettingsscript-chainsid","title":"PUT /api/settings/script-chains/:id","text":"

Body wie POST, Response { \"chain\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsscript-chainsid","title":"DELETE /api/settings/script-chains/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#post-apisettingsscript-chainsreorder","title":"POST /api/settings/script-chains/reorder","text":"
{ \"orderedChainIds\": [2, 1, 3] }\n

Response { \"chains\": [ ... ] }.

"},{"location":"api/settings/#post-apisettingsscript-chainsidtest","title":"POST /api/settings/script-chains/:id/test","text":"

Response:

{\n  \"result\": {\n    \"chainId\": 2,\n    \"chainName\": \"After Encode\",\n    \"steps\": 3,\n    \"succeeded\": 3,\n    \"failed\": 0,\n    \"aborted\": false,\n    \"results\": []\n  }\n}\n
"},{"location":"api/settings/#user-presets","title":"User-Presets","text":"

Basis: /api/settings/user-presets

"},{"location":"api/settings/#get-apisettingsuser-presets","title":"GET /api/settings/user-presets","text":"

Optionaler Query-Parameter: media_type=bluray|dvd|other|all

{\n  \"presets\": [\n    {\n      \"id\": 1,\n      \"name\": \"Blu-ray HQ\",\n      \"mediaType\": \"bluray\",\n      \"handbrakePreset\": \"H.264 MKV 1080p30\",\n      \"extraArgs\": \"--encoder-preset slow\",\n      \"description\": \"...\",\n      \"createdAt\": \"...\",\n      \"updatedAt\": \"...\"\n    }\n  ]\n}\n
"},{"location":"api/settings/#post-apisettingsuser-presets","title":"POST /api/settings/user-presets","text":"
{\n  \"name\": \"Blu-ray HQ\",\n  \"mediaType\": \"bluray\",\n  \"handbrakePreset\": \"H.264 MKV 1080p30\",\n  \"extraArgs\": \"--encoder-preset slow\",\n  \"description\": \"optional\"\n}\n

Response: 201 mit { \"preset\": { ... } }

"},{"location":"api/settings/#put-apisettingsuser-presetsid","title":"PUT /api/settings/user-presets/:id","text":"

Body mit beliebigen Feldern aus POST, Response { \"preset\": { ... } }.

"},{"location":"api/settings/#delete-apisettingsuser-presetsid","title":"DELETE /api/settings/user-presets/:id","text":"

Response { \"removed\": { ... } }.

"},{"location":"api/settings/#weitere-endpunkte","title":"Weitere Endpunkte","text":""},{"location":"api/settings/#get-apisettingseffective-paths","title":"GET /api/settings/effective-paths","text":"

Liefert aufgel\u00f6ste, effektiv genutzte Pfade aus den Settings (f\u00fcr UI- und Diagnosezwecke).

"},{"location":"api/settings/#post-apisettingscoverartrecover","title":"POST /api/settings/coverart/recover","text":"

Startet eine manuelle Coverart-Recovery.

Response (Beispiel):

{\n  \"result\": { \"started\": true },\n  \"scheduler\": { \"enabled\": true }\n}\n
"},{"location":"api/settings/#activation-bytes-aax","title":"Activation Bytes (AAX)","text":""},{"location":"api/settings/#get-apisettingsactivation-bytes","title":"GET /api/settings/activation-bytes","text":"

Liest gecachte AAX-Activation-Bytes.

"},{"location":"api/settings/#post-apisettingsactivation-bytes","title":"POST /api/settings/activation-bytes","text":"

Speichert Activation-Bytes.

Request:

{\n  \"checksum\": \"abc123...\",\n  \"activationBytes\": \"1a2b3c4d\"\n}\n
"},{"location":"api/settings/#laufwerke","title":"Laufwerke","text":""},{"location":"api/settings/#get-apisettingsdrives","title":"GET /api/settings/drives","text":"

Liefert erkannte optische Laufwerke (/dev/...) inkl. MakeMKV-Disc-Index.

"},{"location":"api/settings/#post-apisettingsdrivesforce-unlock","title":"POST /api/settings/drives/force-unlock","text":"

Erzwingt Entsperren aktiver Laufwerkslocks.

Hinweis: Expertenmodus (ui_expert_mode) ist erforderlich, sonst 403.

Request (ein Laufwerk):

{ \"devicePath\": \"/dev/sr0\" }\n

Request (alle):

{ \"all\": true }\n
"},{"location":"api/settings/#ui-preferences","title":"UI Preferences","text":""},{"location":"api/settings/#get-apisettingsprefskey","title":"GET /api/settings/prefs/:key","text":"

Liest einen persistierten UI-Preference-Wert.

"},{"location":"api/settings/#put-apisettingsprefskey","title":"PUT /api/settings/prefs/:key","text":"

Speichert einen persistierten UI-Preference-Wert.

Request:

{ \"value\": \"{\\\"columns\\\":[\\\"id\\\",\\\"status\\\"]}\" }\n
"},{"location":"api/websocket/","title":"WebSocket Events","text":"

Ripster sendet Echtzeit-Updates \u00fcber /ws.

"},{"location":"api/websocket/#verbindung","title":"Verbindung","text":"
const ws = new WebSocket('ws://localhost:3001/ws');\n\nws.onmessage = (event) => {\n  const msg = JSON.parse(event.data);\n  console.log(msg.type, msg.payload);\n};\n
"},{"location":"api/websocket/#nachrichtenformat","title":"Nachrichtenformat","text":"

Die meisten Broadcasts haben dieses Schema:

{\n  \"type\": \"EVENT_TYPE\",\n  \"payload\": {},\n  \"timestamp\": \"2026-03-10T09:00:00.000Z\"\n}\n

Ausnahme: WS_CONNECTED beim Verbindungsaufbau enth\u00e4lt kein timestamp.

"},{"location":"api/websocket/#event-typen","title":"Event-Typen","text":""},{"location":"api/websocket/#ws_connected","title":"WS_CONNECTED","text":"

Sofort nach erfolgreicher Verbindung.

{\n  \"type\": \"WS_CONNECTED\",\n  \"payload\": {\n    \"connectedAt\": \"2026-03-10T09:00:00.000Z\"\n  }\n}\n
"},{"location":"api/websocket/#pipeline_state_changed","title":"PIPELINE_STATE_CHANGED","text":"

Neuer Pipeline-Snapshot.

{\n  \"type\": \"PIPELINE_STATE_CHANGED\",\n  \"payload\": {\n    \"state\": \"ENCODING\",\n    \"activeJobId\": 42,\n    \"progress\": 62.5,\n    \"eta\": \"00:12:34\",\n    \"statusText\": \"ENCODING 62.50%\",\n    \"context\": {},\n    \"jobProgress\": {\n      \"42\": {\n        \"state\": \"ENCODING\",\n        \"progress\": 62.5,\n        \"eta\": \"00:12:34\",\n        \"statusText\": \"ENCODING 62.50%\"\n      }\n    },\n    \"queue\": {\n      \"maxParallelJobs\": 1,\n      \"runningCount\": 1,\n      \"queuedCount\": 2,\n      \"runningJobs\": [],\n      \"queuedJobs\": []\n    }\n  }\n}\n
"},{"location":"api/websocket/#pipeline_progress","title":"PIPELINE_PROGRESS","text":"

Laufende Fortschrittsupdates.

{\n  \"type\": \"PIPELINE_PROGRESS\",\n  \"payload\": {\n    \"state\": \"ENCODING\",\n    \"activeJobId\": 42,\n    \"progress\": 62.5,\n    \"eta\": \"00:12:34\",\n    \"statusText\": \"ENCODING 62.50%\"\n  }\n}\n
"},{"location":"api/websocket/#pipeline_queue_changed","title":"PIPELINE_QUEUE_CHANGED","text":"

Queue-Snapshot aktualisiert.

"},{"location":"api/websocket/#disc_detected-disc_removed","title":"DISC_DETECTED / DISC_REMOVED","text":"

Disc-Insertion/-Removal.

{\n  \"type\": \"DISC_DETECTED\",\n  \"payload\": {\n    \"device\": {\n      \"path\": \"/dev/sr0\",\n      \"discLabel\": \"INCEPTION\",\n      \"model\": \"ASUS BW-16D1HT\",\n      \"fstype\": \"udf\",\n      \"mountpoint\": null,\n      \"mediaProfile\": \"bluray\"\n    }\n  }\n}\n

mediaProfile: bluray | dvd | other | null

"},{"location":"api/websocket/#hardware_monitor_update","title":"HARDWARE_MONITOR_UPDATE","text":"

Snapshot aus Hardware-Monitoring.

{\n  \"type\": \"HARDWARE_MONITOR_UPDATE\",\n  \"payload\": {\n    \"enabled\": true,\n    \"intervalMs\": 5000,\n    \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n    \"sample\": {\n      \"cpu\": {},\n      \"memory\": {},\n      \"gpu\": {},\n      \"storage\": {}\n    },\n    \"error\": null\n  }\n}\n
"},{"location":"api/websocket/#pipeline_error","title":"PIPELINE_ERROR","text":"

Fehler bei Disc-Event-Verarbeitung in Pipeline.

"},{"location":"api/websocket/#disk_detection_error","title":"DISK_DETECTION_ERROR","text":"

Fehler in Laufwerkserkennung.

"},{"location":"api/websocket/#settings_updated","title":"SETTINGS_UPDATED","text":"

Einzelnes Setting wurde gespeichert.

"},{"location":"api/websocket/#settings_bulk_updated","title":"SETTINGS_BULK_UPDATED","text":"

Bulk-Settings gespeichert.

{\n  \"type\": \"SETTINGS_BULK_UPDATED\",\n  \"payload\": {\n    \"count\": 3,\n    \"keys\": [\"raw_dir\", \"movie_dir\", \"handbrake_preset_bluray\"]\n  }\n}\n
"},{"location":"api/websocket/#settings_scripts_updated","title":"SETTINGS_SCRIPTS_UPDATED","text":"

Skript ge\u00e4ndert (created|updated|deleted|reordered).

"},{"location":"api/websocket/#settings_script_chains_updated","title":"SETTINGS_SCRIPT_CHAINS_UPDATED","text":"

Skript-Kette ge\u00e4ndert (created|updated|deleted|reordered).

"},{"location":"api/websocket/#user_presets_updated","title":"USER_PRESETS_UPDATED","text":"

User-Preset ge\u00e4ndert (created|updated|deleted).

"},{"location":"api/websocket/#cron_jobs_updated","title":"CRON_JOBS_UPDATED","text":"

Cron-Config ge\u00e4ndert (created|updated|deleted).

"},{"location":"api/websocket/#cron_job_updated","title":"CRON_JOB_UPDATED","text":"

Laufzeitstatus eines Cron-Jobs ge\u00e4ndert.

{\n  \"type\": \"CRON_JOB_UPDATED\",\n  \"payload\": {\n    \"id\": 1,\n    \"lastRunStatus\": \"running\",\n    \"lastRunAt\": \"2026-03-10T10:00:00.000Z\",\n    \"nextRunAt\": null\n  }\n}\n
"},{"location":"api/websocket/#runtime_activity_changed","title":"RUNTIME_ACTIVITY_CHANGED","text":"

Vollst\u00e4ndiger Snapshot aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten.

Wird ausgel\u00f6st, wenn eine Aktivit\u00e4t gestartet, aktualisiert oder abgeschlossen wird sowie nach clear-recent.

{\n  \"type\": \"RUNTIME_ACTIVITY_CHANGED\",\n  \"payload\": {\n    \"active\": [\n      {\n        \"id\": 7,\n        \"type\": \"chain\",\n        \"name\": \"Post-Encode Aufr\u00e4umen\",\n        \"status\": \"running\",\n        \"source\": \"cron\",\n        \"message\": \"Schritt 2 von 3\",\n        \"currentStep\": \"cleanup.sh\",\n        \"currentStepType\": \"script\",\n        \"stepIndex\": 2,\n        \"stepTotal\": 3,\n        \"canCancel\": true,\n        \"canNextStep\": false,\n        \"outcome\": \"running\",\n        \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n        \"finishedAt\": null,\n        \"durationMs\": null\n      }\n    ],\n    \"recent\": [],\n    \"updatedAt\": \"2026-03-10T10:00:05.000Z\"\n  }\n}\n

Vollst\u00e4ndige Feldbeschreibung: Runtime Activities API.

"},{"location":"api/websocket/#converter_scan_update","title":"CONVERTER_SCAN_UPDATE","text":"

Wird nach einem Scan des Converter-Eingangsordners gesendet (manuell oder per Polling).

{\n  \"type\": \"CONVERTER_SCAN_UPDATE\",\n  \"payload\": {\n    \"entryCount\": 12\n  }\n}\n
"},{"location":"api/websocket/#downloads_updated","title":"DOWNLOADS_UPDATED","text":"

Wird bei jeder Status\u00e4nderung in der Download-Queue gesendet.

{\n  \"type\": \"DOWNLOADS_UPDATED\",\n  \"payload\": {\n    \"reason\": \"ready\",\n    \"item\": {\n      \"id\": \"dl-1\",\n      \"jobId\": 42,\n      \"status\": \"ready\",\n      \"archiveName\": \"Job_42_movie.zip\",\n      \"createdAt\": \"2026-03-30T10:00:00.000Z\"\n    },\n    \"summary\": {\n      \"total\": 3,\n      \"pending\": 1,\n      \"processing\": 0,\n      \"ready\": 1,\n      \"failed\": 1\n    }\n  }\n}\n

M\u00f6gliche reason-Werte: queued, processing, ready, failed, deleted.

"},{"location":"api/websocket/#reconnect-verhalten","title":"Reconnect-Verhalten","text":"

useWebSocket verbindet bei Abbruch automatisch neu:

  • Retry-Intervall: 1500ms
  • Wiederverbindung bis Komponente unmounted wird
"},{"location":"appendix/","title":"Technischer Anhang","text":"

Dieser Bereich enth\u00e4lt die technische Referenz hinter dem Benutzerhandbuch.

"},{"location":"appendix/#inhalt","title":"Inhalt","text":"
  • Konfiguration
  • komplette Feldreferenz
  • Umgebungsvariablen
  • Pipeline intern
  • Zustandsmodell
  • Encode-Planung
  • Playlist-Analyse
  • Pre-/Post-Encode-Ausf\u00fchrungen
  • API-Referenz
  • REST-Endpunkte
  • WebSocket-Events
  • Architektur
  • Backend-/Frontend-Aufbau
  • Datenbank
  • Deployment
  • Betrieb in Entwicklung und Produktion
  • Externe Tools
  • MakeMKV, HandBrake, MediaInfo
"},{"location":"appendix/#wann-du-in-den-anhang-wechselst","title":"Wann du in den Anhang wechselst","text":"
  • du integrierst Ripster mit anderen Systemen
  • du betreibst mehrere Instanzen oder willst tiefer debuggen
  • du brauchst Feld-/API-/Schema-Details f\u00fcr Automatisierung
"},{"location":"architecture/","title":"Anhang: Architektur","text":"

Ripster ist eine Client-Server-Anwendung mit REST + WebSocket und externen CLI-Tools.

"},{"location":"architecture/#systemuberblick","title":"System\u00fcberblick","text":"
graph TB\n    subgraph Browser[\"Browser (React)\"]\n        Ripper[Ripper]\n        Settings[Einstellungen]\n        History[Historie]\n    end\n\n    subgraph Backend[\"Node.js Backend\"]\n        API[REST API\\nExpress]\n        WS[WebSocket\\n/ws]\n        Pipeline[pipelineService]\n        Cron[cronService]\n        DB[(SQLite)]\n    end\n\n    subgraph Tools[\"Externe Tools\"]\n        MakeMKV[makemkvcon]\n        HandBrake[HandBrakeCLI]\n        MediaInfo[mediainfo]\n    end\n\n    Browser <-->|HTTP| API\n    Browser <-->|WebSocket| WS\n    Pipeline --> MakeMKV\n    Pipeline --> HandBrake\n    Pipeline --> MediaInfo\n    API --> DB\n    Pipeline --> DB\n    Cron --> DB
"},{"location":"architecture/#details","title":"Details","text":"
  • \u00dcbersicht
  • Backend-Services
  • Frontend-Komponenten
  • Datenbank
"},{"location":"architecture/backend/","title":"Backend-Services","text":"

Das Backend ist in Services aufgeteilt, die von Express-Routen orchestriert werden. Seit v0.12.0 erfolgt die Medienverarbeitung \u00fcber ein Plugin-System.

"},{"location":"architecture/backend/#plugin-system-srcplugins","title":"Plugin-System (src/plugins/)","text":"

Ab v0.12.0 ist die Pipeline modular aufgebaut. Jeder Medientyp wird von einem eigenen Plugin verwaltet.

"},{"location":"architecture/backend/#basisklassen","title":"Basisklassen","text":"
  • PluginBase.js \u2014 Abstrakte Basisklasse SourcePlugin mit Lifecycle-Methoden
  • PluginRegistry.js \u2014 Dynamische Plugin-Erkennung, priorit\u00e4tsbasierte Auswahl, Settings-Schema-Aggregation
  • PluginContext.js \u2014 Ausf\u00fchrungskontext (Logger, Callbacks, Signals) f\u00fcr Plugin-Aufrufe
"},{"location":"architecture/backend/#plugin-lifecycle","title":"Plugin-Lifecycle","text":"

Jedes Plugin implementiert die folgenden Methoden:

Methode Beschreibung detect(discInfo) Medientyp-Erkennung analyze(devicePath, job, ctx) Analyse / Metadaten-Extraktion rip(job, ctx) Rohdaten-Extraktion review(job, ctx) Optionale Vorschau-Vorbereitung encode(job, ctx) Finales Encoding/Konvertierung finalize(job, ctx) Nachbearbeitung onCancel(job, ctx) Bereinigung bei Abbruch onRetry(job, ctx) Zustand-Reset vor Retry"},{"location":"architecture/backend/#implementierte-plugins","title":"Implementierte Plugins","text":"
  • BluRayPlugin.js \u2014 Blu-ray via MakeMKV (Backup-Modus)
  • DVDPlugin.js \u2014 DVD via MakeMKV (MKV-Modus)
  • CdPlugin.js \u2014 Audio-CD via cdparanoia + FFmpeg (experimentell)
  • AudiobookPlugin.js \u2014 AAX/M4B via FFmpeg mit Kapitel-Splitting
  • ConverterPlugin.js \u2014 Generische Audio/Video-Konvertierung via FFmpeg
  • VideoDiscPlugin.js \u2014 Gemeinsame Basis f\u00fcr Blu-ray/DVD (MediaInfo-Parsing)
"},{"location":"architecture/backend/#pipelineservicejs","title":"pipelineService.js","text":"

Zentrale Workflow-Orchestrierung.

Aufgaben:

  • Pipeline-State-Machine + Persistenz (pipeline_state)
  • Disc-Analyse/Rip/Review/Encode via Plugin-Delegation
  • Queue-Management (Jobs + script|chain|wait Eintr\u00e4ge)
  • Retry/Re-Encode/Restart-Flows
  • WebSocket-Broadcasts f\u00fcr State/Progress/Queue
  • Converter-Job-Verwaltung (createConverterJobFromEntry, uploadConverterFiles, startConverterJob)

Wichtige Methoden:

  • analyzeDisc()
  • selectMetadata()
  • startPreparedJob()
  • confirmEncodeReview()
  • cancel()
  • retry()
  • reencodeFromRaw()
  • restartReviewFromRaw()
  • restartEncodeWithLastSettings()
  • resumeReadyToEncodeJob()
  • enqueueNonJobEntry(), reorderQueue(), removeQueueEntry()
  • createConverterJobFromEntry(), createConverterJobsFromSelection()
  • uploadConverterFiles(), startConverterJob()
"},{"location":"architecture/backend/#diskdetectionservicejs","title":"diskDetectionService.js","text":"

Pollt Laufwerk(e) und emittiert:

  • discInserted
  • discRemoved
  • error

Zusatz:

  • Modus auto oder explicit
  • heuristische mediaProfile-Erkennung (bluray/dvd/other)
  • rescanAndEmit() f\u00fcr manuellen Trigger
"},{"location":"architecture/backend/#settingsservicejs","title":"settingsService.js","text":"

Settings-Layer mit Validation/Serialisierung.

Features:

  • getCategorizedSettings() f\u00fcr UI-Form
  • setSettingValue() / setSettingsBulk()
  • profilspezifische Aufl\u00f6sung (resolveEffectiveToolSettings)
  • CLI-Config-Building f\u00fcr MakeMKV/HandBrake/MediaInfo/FFmpeg
  • HandBrake-Preset-Liste via HandBrakeCLI -z
  • MakeMKV-Key-Synchronisation aus makemkv_registration_key nach ~/.MakeMKV/settings.conf
  • Pfadaufl\u00f6sung f\u00fcr alle Medienprofile inkl. Audiobook und Converter
"},{"location":"architecture/backend/#historyservicejs","title":"historyService.js","text":"

Historie + Dateioperationen.

Features:

  • Job-Liste/Detail inkl. Log-Tail
  • Orphan-RAW-Erkennung und Import
  • TMDb-Neuzuordnung
  • Dateil\u00f6schung (raw|movie|both)
  • Job-L\u00f6schung (none|raw|movie|both)
"},{"location":"architecture/backend/#audiobookservicejs","title":"audiobookService.js","text":"

Audiobook-Verarbeitung (AAX/M4B).

Features:

  • FFprobe-basierte Analyse (Kapitel, Metadaten)
  • FFmpeg-basiertes Encoding mit Kapitel-Splitting
  • Ausgabeformate: M4B, MP3, FLAC
  • Template-basierte Pfade ({author}, {title}, {year}, {narrator}, {series}, {part})
"},{"location":"architecture/backend/#activationbytesservicejs","title":"activationBytesService.js","text":"

Verwaltung von Audible-Activation-Bytes f\u00fcr AAX-DRM-Handling.

Features:

  • SHA-1-Pr\u00fcfsumme der AAX-Datei berechnen
  • Activation Bytes in aax_activation_bytes-Tabelle cachen
  • Lookup via audnexService (wenn konfiguriert)
"},{"location":"architecture/backend/#converterscanservicejs","title":"converterScanService.js","text":"

Dateisystem-\u00dcberwachung des Converter-Eingangsordners.

Features:

  • Vollst\u00e4ndiger FS-Baum (getTree())
  • DB-basierter Datei-Explorer (getEntries())
  • Manueller und automatischer Scan (Polling)
  • Pfad-Normalisierung mit Traversal-Schutz
  • WebSocket-Broadcast: CONVERTER_SCAN_UPDATE
"},{"location":"architecture/backend/#downloadservicejs","title":"downloadService.js","text":"

Download-Queue f\u00fcr Ausgabedateien aus der Historie.

Features:

  • Job in Download-Queue einreihen (enqueueHistoryJob)
  • ZIP-Archiv aus Ausgabedateien erstellen (archiver)
  • Datei-Streaming via res.download()
  • WebSocket-Broadcast: DOWNLOADS_UPDATED bei Status-\u00c4nderungen
  • Download-Item l\u00f6schen
"},{"location":"architecture/backend/#cronservicejs","title":"cronService.js","text":"

Integriertes Cron-System ohne externe Parser-Library.

Features:

  • 5-Feld-Cron-Parser + nextRun-Berechnung
  • Quellen: script oder chain
  • Laufzeitlogs (cron_run_logs)
  • manuelles Triggern
  • WebSocket-Events: CRON_JOBS_UPDATED, CRON_JOB_UPDATED
"},{"location":"architecture/backend/#runtimeactivityservicejs","title":"runtimeActivityService.js","text":"

In-Memory-Tracking aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Ketten, Cron-Jobs, Tasks).

Features:

  • startActivity(type, payload) \u2192 Aktivit\u00e4t registrieren, ID zur\u00fcckgeben
  • updateActivity(id, patch) \u2192 Laufende Aktivit\u00e4t aktualisieren
  • completeActivity(id, payload) \u2192 Aktivit\u00e4t abschlie\u00dfen und in recent verschieben
  • setControls(id, { cancel, nextStep }) \u2192 Steuer-Handler registrieren (f\u00fcr canCancel/canNextStep)
  • requestCancel(id) / requestNextStep(id) \u2192 Steuer-Handler aufrufen
  • clearRecent() \u2192 Abgeschlossene Aktivit\u00e4ten l\u00f6schen
  • getSnapshot() \u2192 Snapshot mit active + recent + updatedAt
  • Broadcasts RUNTIME_ACTIVITY_CHANGED \u00fcber WebSocket bei jeder \u00c4nderung

Limits:

  • recent max. 120 Eintr\u00e4ge
  • stdout/stderr/output max. 12.000 Zeichen
  • message/errorMessage max. 2.000 Zeichen

Vollst\u00e4ndige API-Dokumentation: Runtime Activities API

"},{"location":"architecture/backend/#weitere-services","title":"Weitere Services","text":"
  • scriptService.js (CRUD + Test + Wrapper-Ausf\u00fchrung)
  • scriptChainService.js (CRUD + Step-Execution)
  • userPresetService.js (HandBrake User-Presets)
  • hardwareMonitorService.js (CPU/RAM/GPU/Storage)
  • websocketService.js (Client-Registry + Broadcast)
  • notificationService.js (PushOver)
  • cdRipService.js (CD-Ripping mit cdparanoia)
  • musicBrainzService.js (MusicBrainz-Metadaten-Lookup)
  • audnexService.js (Audnex-API f\u00fcr Audiobook-Metadaten)
  • coverArtRecoveryService.js (Cover-Art-Wiederherstellung)
  • thumbnailService.js (Vorschaubild-Generierung)
  • tmdbService.js (Film-/Serien-Metadaten-Suche)
  • logger.js (rotierende Datei-Logs)
"},{"location":"architecture/backend/#bootstrapping-srcindexjs","title":"Bootstrapping (src/index.js)","text":"

Beim Start:

  1. DB init/migrate
  2. Pipeline-Init (inkl. Plugin-Registry)
  3. Cron-Init
  4. Express-Routes + Error-Handler
  5. WebSocket-Server auf /ws
  6. Hardware-Monitoring-Init
  7. Disk-Detection-Start
  8. Converter-Scan-Service-Init (Polling falls aktiviert)
"},{"location":"architecture/database/","title":"Datenbank","text":"

Ripster verwendet SQLite (backend/data/ripster.db).

"},{"location":"architecture/database/#tabellen","title":"Tabellen","text":"
settings_schema\nsettings_values\njobs\njob_lineage_artifacts\njob_output_folders\npipeline_state\nscripts\nscript_chains\nscript_chain_steps\nuser_presets\ncron_jobs\ncron_run_logs\naax_activation_bytes\nuser_prefs\nconverter_scan_entries\n
"},{"location":"architecture/database/#jobs","title":"jobs","text":"

Speichert Pipeline-Lifecycle und Artefakte pro Job.

Zentrale Felder:

  • Metadaten: title, year, imdb_id, poster_url, omdb_json, selected_from_omdb
  • Laufzeit: start_time, end_time, status, last_state
  • Pfade: raw_path, output_path, encode_input_path
  • Tool-Ausgaben: makemkv_info_json, handbrake_info_json, mediainfo_info_json, encode_plan_json
  • Kontrolle: encode_review_confirmed, rip_successful, error_message
  • Medientyp: media_type (bluray|dvd|cd|audiobook|converter)
  • Job-Typ/Beziehung: job_kind, parent_job_id
  • Multipart-/Disc-Merkmale: is_multipart_movie, disc_number, metadata_fingerprint
  • Pr\u00fcfsumme: aax_checksum (f\u00fcr AAX-Dateien)
  • Audit: created_at, updated_at

Typische job_kind-Werte:

  • Standard: bluray, dvd, cd, audiobook, converter_audio, converter_video, converter_iso
  • Serien: dvd_series_container, dvd_series_child
  • Multipart Film: multipart_movie_container, multipart_movie_child

Wichtige Indizes:

  • idx_jobs_status
  • idx_jobs_parent_job_id
  • idx_jobs_job_kind
  • idx_jobs_disc_number
  • idx_jobs_metadata_fingerprint
"},{"location":"architecture/database/#job_lineage_artifacts","title":"job_lineage_artifacts","text":"

Verkn\u00fcpft Jobs mit ihren Quell-Jobs (z. B. Re-Encode aus einem vorherigen Rip).

Felder:

  • job_id \u2014 der abgeleitete Job
  • source_job_id \u2014 der Quell-Job
  • artifact_type \u2014 Art der Verkn\u00fcpfung (z. B. reencode, restart_review)
  • created_at
"},{"location":"architecture/database/#job_output_folders","title":"job_output_folders","text":"

Verfolgt Ausgabepfade pro Job (mehrere Ausgaben m\u00f6glich, z. B. bei Kapitel-Splitting).

Felder:

  • job_id
  • folder_path
  • label \u2014 optionaler Bezeichner
  • created_at
"},{"location":"architecture/database/#pipeline_state","title":"pipeline_state","text":"

Singleton-Tabelle (id = 1) f\u00fcr aktiven Snapshot:

  • state
  • active_job_id
  • progress
  • eta
  • status_text
  • context_json
  • updated_at
"},{"location":"architecture/database/#settings_schema-settings_values","title":"settings_schema + settings_values","text":"
  • settings_schema: Definition (Typ, Default, Validation, Reihenfolge)
  • settings_values: aktueller Wert pro Key
"},{"location":"architecture/database/#scripts-script_chains-script_chain_steps","title":"scripts, script_chains, script_chain_steps","text":"
  • scripts: Shell-Skripte (name, script_body, order_index)
  • script_chains: Ketten (name, order_index)
  • script_chain_steps: Schritte je Kette
  • step_type: script oder wait
  • script_id oder wait_seconds
"},{"location":"architecture/database/#user_presets","title":"user_presets","text":"

Benannte HandBrake-Preset-Sets:

  • name
  • media_type (bluray|dvd|other|all)
  • handbrake_preset
  • extra_args
  • description
"},{"location":"architecture/database/#cron_jobs-cron_run_logs","title":"cron_jobs + cron_run_logs","text":"
  • cron_jobs: Zeitplan + Status
  • cron_run_logs: einzelne L\u00e4ufe
  • status: running|success|error
  • output
  • error_message
"},{"location":"architecture/database/#aax_activation_bytes","title":"aax_activation_bytes","text":"

Cache f\u00fcr Audible-Activation-Bytes (AAX-DRM).

Felder:

  • checksum \u2014 SHA-1-Pr\u00fcfsumme der AAX-Datei (Prim\u00e4rschl\u00fcssel)
  • activation_bytes \u2014 Hex-String der Activation Bytes
  • created_at
"},{"location":"architecture/database/#user_prefs","title":"user_prefs","text":"

Benutzer-spezifische Einstellungen (Key-Value).

Felder:

  • key
  • value
  • updated_at
"},{"location":"architecture/database/#converter_scan_entries","title":"converter_scan_entries","text":"

DB-seitige Erfassung gescannter Dateien im Converter-Eingangsordner.

Felder:

  • rel_path \u2014 relativer Pfad zum converter_raw_dir
  • is_dir \u2014 Verzeichnis-Flag
  • size \u2014 Dateigr\u00f6\u00dfe in Bytes
  • modified_at \u2014 Datei-\u00c4nderungsdatum
  • job_id \u2014 zugewiesener Converter-Job (falls vorhanden)
  • scanned_at
"},{"location":"architecture/database/#migrationrecovery","title":"Migration/Recovery","text":"

Beim Start werden Schema und Settings-Metadaten automatisch abgeglichen.

Bei korruptem SQLite-File:

  1. Datei wird nach backend/data/corrupt-backups/ verschoben
  2. neue DB wird initialisiert
  3. Schema wird neu aufgebaut
"},{"location":"architecture/database/#direkte-inspektion","title":"Direkte Inspektion","text":"
sqlite3 backend/data/ripster.db\n\n.mode table\nSELECT id, status, title, media_type, created_at FROM jobs ORDER BY created_at DESC;\nSELECT id, parent_job_id, job_kind, is_multipart_movie, disc_number FROM jobs ORDER BY created_at DESC;\nSELECT key, value FROM settings_values ORDER BY key;\nSELECT checksum, activation_bytes FROM aax_activation_bytes;\nSELECT rel_path, job_id FROM converter_scan_entries;\n
"},{"location":"architecture/frontend/","title":"Frontend-Komponenten","text":"

Frontend: React + PrimeReact + Vite.

"},{"location":"architecture/frontend/#hauptseiten","title":"Hauptseiten","text":""},{"location":"architecture/frontend/#ripperpagejsx","title":"RipperPage.jsx","text":"

Pipeline-Steuerung:

  • Status/Progress/ETA
  • Metadaten-Dialog
  • Playlist-Entscheidung
  • Review-Panel (Track-Auswahl)
  • Queue-Interaktion (reorder/add/remove)
  • Job-Aktionen (Start/Cancel/Retry/Re-Encode)
  • Hardware-Monitoring-Anzeige
  • Aktivit\u00e4ts-Tracking (Skripte, Ketten, Cron)
"},{"location":"architecture/frontend/#settingspagejsx","title":"SettingsPage.jsx","text":"

Konfiguration:

  • dynamisches Settings-Formular (DynamicSettingsForm)
  • Skripte/Ketten inkl. Reorder/Test
  • User-Presets
  • Cron-Jobs (CronJobsTab)
"},{"location":"architecture/frontend/#historypagejsx","title":"HistoryPage.jsx","text":"

Historie:

  • Job-Liste/Filter
  • Job-Details + Logs
  • TMDb-Neuzuordnung
  • Re-Encode/Restart-Workflows
"},{"location":"architecture/frontend/#converterpagejsx","title":"ConverterPage.jsx","text":"

Datei-Converter:

  • Datei-Explorer des Converter-Eingangsordners (Baum-Ansicht)
  • Upload von Audio/Video-Dateien (bis zu 50 Dateien gleichzeitig)
  • Dateiverwaltung: Umbenennen, Verschieben, L\u00f6schen, Ordner erstellen
  • Jobs aus Dateiauswahl erstellen
  • Converter-Job-Konfiguration (Ausgabeformat, Preset, Tracks)
  • Job-Start, Abbruch, L\u00f6schung
  • Automatischer Scan-Status
"},{"location":"architecture/frontend/#audiobookspagejsx","title":"AudiobooksPage.jsx","text":"

Dedizierter AAX-/Audiobook-Flow:

  • Upload-Panel f\u00fcr AAX-Dateien
  • aktive Audiobook-Jobkarten mit Start/Cancel/Retry/Delete
  • Audiobook-Konfigurationspanel und Output-Explorer
"},{"location":"architecture/frontend/#downloadspagejsx","title":"DownloadsPage.jsx","text":"

Download-Queue:

  • Ausgabedateien aus der Job-Historie in die Queue einreihen
  • Download-Status verfolgen (ausstehend, wird verarbeitet, bereit, fehlgeschlagen)
  • Dateien als ZIP herunterladen
  • Download-Eintr\u00e4ge l\u00f6schen
"},{"location":"architecture/frontend/#databasepagejsx","title":"DatabasePage.jsx","text":"

Expert-Modus:

  • Tabellarische Rohsicht der Job-Datenbank
  • Orphan-RAW-Import
"},{"location":"architecture/frontend/#wichtige-komponenten","title":"Wichtige Komponenten","text":"
  • PipelineStatusCard.jsx \u2014 Pipeline-Status-Anzeige mit Progress
  • MetadataSelectionDialog.jsx \u2014 TMDb-Metadaten-Auswahl
  • MediaInfoReviewPanel.jsx \u2014 Track-Auswahl-Interface (Video/Audio/Untertitel)
  • JobDetailDialog.jsx \u2014 Job-Detailansicht mit Logs
  • CronJobsTab.jsx \u2014 Cron-Job-Verwaltung
  • DynamicSettingsForm.jsx \u2014 Schema-gesteuertes Einstellungsformular
  • ConverterJobCard.jsx \u2014 Converter-Job-Darstellung
  • CdRipConfigPanel.jsx \u2014 Konfiguration f\u00fcr Audio-CD-Ripping
"},{"location":"architecture/frontend/#api-client-apiclientjs","title":"API-Client (api/client.js)","text":"
  • zentraler request() mit JSON-Handling
  • Fehlerobjekt aus API wird auf Error(message) gemappt
  • VITE_API_BASE default /api
"},{"location":"architecture/frontend/#websocket-hooksusewebsocketjs","title":"WebSocket (hooks/useWebSocket.js)","text":"
  • URL: VITE_WS_URL oder automatisch ws(s)://<host>/ws
  • Auto-Reconnect mit 1500ms Intervall

In App.jsx werden u. a. verarbeitet:

  • PIPELINE_STATE_CHANGED
  • PIPELINE_PROGRESS
  • PIPELINE_QUEUE_CHANGED
  • Disk erkannt / Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • DOWNLOADS_UPDATED
  • CONVERTER_SCAN_UPDATE
  • RUNTIME_ACTIVITY_CHANGED
"},{"location":"architecture/frontend/#buildrun","title":"Build/Run","text":"
# dev\nnpm run dev --prefix frontend\n\n# prod build\nnpm run build --prefix frontend\n
"},{"location":"architecture/overview/","title":"Architektur-\u00dcbersicht","text":""},{"location":"architecture/overview/#kernprinzipien","title":"Kernprinzipien","text":""},{"location":"architecture/overview/#event-getriebene-pipeline","title":"Event-getriebene Pipeline","text":"

pipelineService h\u00e4lt einen Snapshot der State-Machine und broadcastet \u00c4nderungen sofort via WebSocket.

State-\u00c4nderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update\n
"},{"location":"architecture/overview/#service-layer","title":"Service-Layer","text":"
Route -> Service -> DB/Tool-Execution\n

Routes enthalten kaum Business-Logik.

"},{"location":"architecture/overview/#schema-getriebene-settings","title":"Schema-getriebene Settings","text":"

Settings sind DB-schema-getrieben (settings_schema + settings_values), UI rendert dynamisch aus diesen Daten.

"},{"location":"architecture/overview/#echtzeit-kommunikation","title":"Echtzeit-Kommunikation","text":"

WebSocket l\u00e4uft auf /ws.

Wichtige Events:

  • PIPELINE_STATE_CHANGED, PIPELINE_PROGRESS, PIPELINE_QUEUE_CHANGED
  • Disk erkannt, Disk entfernt
  • HARDWARE_MONITOR_UPDATE
  • SETTINGS_UPDATED, SETTINGS_BULK_UPDATED
  • SETTINGS_SCRIPTS_UPDATED, SETTINGS_SCRIPT_CHAINS_UPDATED, USER_PRESETS_UPDATED
  • CRON_JOBS_UPDATED, CRON_JOB_UPDATED
  • PIPELINE_ERROR, DISK_DETECTION_ERROR
"},{"location":"architecture/overview/#prozessausfuhrung","title":"Prozessausf\u00fchrung","text":"

Externe Tools werden als Child-Processes gestartet (processRunner):

  • Streaming von stdout/stderr
  • Progress-Parsing (progressParsers.js)
  • kontrollierter Abbruch (SIGINT/SIGKILL-Fallback)
"},{"location":"architecture/overview/#persistenz","title":"Persistenz","text":"

SQLite-Datei: backend/data/ripster.db

Kern-Tabellen:

  • jobs, pipeline_state
  • settings_schema, settings_values
  • scripts, script_chains, script_chain_steps
  • user_presets
  • cron_jobs, cron_run_logs

Beim Start werden Schema und Settings-Migrationen automatisch ausgef\u00fchrt.

"},{"location":"architecture/overview/#fehlerbehandlung","title":"Fehlerbehandlung","text":"

Zentrales Error-Handling liefert:

{\n  \"error\": {\n    \"message\": \"...\",\n    \"statusCode\": 400,\n    \"reqId\": \"...\",\n    \"details\": []\n  }\n}\n

Fehlgeschlagene Jobs bleiben in der Historie (Fehler oder Abgebrochen) und k\u00f6nnen erneut gestartet werden.

"},{"location":"architecture/overview/#cors-runtime-konfig","title":"CORS & Runtime-Konfig","text":"
  • CORS_ORIGIN default: *
  • LOG_LEVEL default: info
  • DB-/Log-Pfade \u00fcber DB_PATH/LOG_DIR konfigurierbar
"},{"location":"configuration/","title":"Anhang: Konfiguration","text":"

Dieser Abschnitt ist die technische Referenz zu allen Konfigurationsarten in Ripster.

"},{"location":"configuration/#inhalte","title":"Inhalte","text":"
  • Einstellungsreferenz

    Vollst\u00e4ndige Liste aller UI-Settings (Typ, Default, Hinweise).

    Einstellungsreferenz

  • Umgebungsvariablen

    backend/.env und frontend/.env inkl. Priorit\u00e4ten.

    Umgebungsvariablen

"},{"location":"configuration/#zuruck-zum-handbuch","title":"Zur\u00fcck zum Handbuch","text":"
  • Benutzerhandbuch \u00dcberblick
"},{"location":"configuration/environment/","title":"Umgebungsvariablen","text":"

Umgebungsvariablen steuern Backend/Vite au\u00dferhalb der DB-basierten UI-Settings.

"},{"location":"configuration/environment/#backend-backendenv","title":"Backend (backend/.env)","text":"Variable Default (Code) Beschreibung PORT 3001 Express-Port DB_PATH backend/data/ripster.db SQLite-Datei (relativ zu backend/) LOG_DIR backend/logs Fallback-Logverzeichnis (wenn log_dir-Setting nicht gesetzt/lesbar) CORS_ORIGIN * CORS-Origin f\u00fcr API LOG_LEVEL info debug, info, warn, error

Beispiel:

PORT=3001\nDB_PATH=/var/lib/ripster/ripster.db\nLOG_DIR=/var/log/ripster\nCORS_ORIGIN=http://192.168.1.50:5173\nLOG_LEVEL=info\n

Hinweis: backend/.env.example enth\u00e4lt bewusst dev-freundliche Werte (z. B. lokaler CORS_ORIGIN).

"},{"location":"configuration/environment/#frontend-frontendenv","title":"Frontend (frontend/.env)","text":"Variable Default Beschreibung VITE_API_BASE /api API-Basis f\u00fcr Fetch-Client VITE_WS_URL automatisch aus window.location + /ws Optional explizite WebSocket-URL VITE_PUBLIC_ORIGIN leer \u00d6ffentliche Vite-Origin (Remote-Dev) VITE_ALLOWED_HOSTS true Komma-separierte Hostliste f\u00fcr Vite allowedHosts VITE_HMR_PROTOCOL abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Protokoll (ws/wss) VITE_HMR_HOST abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Host VITE_HMR_CLIENT_PORT abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Client-Port

Beispiele:

# lokal (mit Vite-Proxy)\nVITE_API_BASE=/api\n
# remote dev\nVITE_API_BASE=http://192.168.1.50:3001/api\nVITE_WS_URL=ws://192.168.1.50:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.50:5173\nVITE_ALLOWED_HOSTS=192.168.1.50,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.50\nVITE_HMR_CLIENT_PORT=5173\n
"},{"location":"configuration/environment/#prioritat","title":"Priorit\u00e4t","text":"
  1. Prozess-Umgebungsvariablen
  2. .env
  3. Code-Defaults
"},{"location":"configuration/settings-reference/","title":"Einstellungsreferenz","text":"

Diese Seite beschreibt jede aktuelle Einstellung aus der Settings-GUI: was technisch passiert und warum man sie setzt.

"},{"location":"configuration/settings-reference/#lesehilfe","title":"Lesehilfe","text":"
  • Sichtbarkeit: Standard, Expertenmodus oder Ausgeblendet (nur API/DB).
  • Default: UI-/Schema-Default (sensible Werte werden als leer dargestellt).
  • Was passiert technisch?: direkte Wirkung im Backend/Pipeline-Verhalten.
  • Warum/Wann setzen?: Praxisgrund inkl. typischem Einsatzzweck.
"},{"location":"configuration/settings-reference/#wie-diese-seite-zu-lesen-ist","title":"Wie diese Seite zu lesen ist","text":"

Wenn du nicht von oben bis unten lesen willst, helfen diese typischen Einstiegsfragen:

  • Disc wird nicht sauber erkannt: zuerst Laufwerk
  • falsche Playlist- oder Titelauswahl: zuerst Tools
  • Ausgabe landet im falschen Ordner: zuerst Pfade
  • zu viele oder zu wenige parallele Jobs: zuerst Tools
  • Converter scannt nicht wie erwartet: zuerst Converter
  • Hardware oder Speicher fehlen im Monitoring: zuerst Monitoring und Pfade
"},{"location":"configuration/settings-reference/#vollstandige-feldliste","title":"Vollst\u00e4ndige Feldliste","text":""},{"location":"configuration/settings-reference/#kategorie-benachrichtigungen","title":"Kategorie: Benachrichtigungen","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Expertenmodus ui_expert_mode boolean false Standard Schaltet erweiterte Einstellungen in der UI ein. Wird sofort einzeln gespeichert und beeinflusst Sichtbarkeit von Feldern/Kategorien. Wenn du selten benoetigte technische Felder sehen willst (z.B. Logging- oder CLI-Details). PushOver aktiviert pushover_enabled boolean false Standard Master-Schalter f\u00fcr PushOver Versand. Wenn du aktive Laufzeit-Benachrichtigungen auf Mobilgeraete erhalten willst. PushOver Token pushover_token string leer Standard Application Token f\u00fcr PushOver. Wenn Ripster in deine PushOver-App senden soll (Token aus PushOver-App-Config). PushOver User pushover_user string leer Standard User-Key f\u00fcr PushOver. Wenn Benachrichtigungen an einen bestimmten PushOver-Account gehen sollen. PushOver Device (optional) pushover_device string leer Expertenmodus Optionales Ziel-Device in PushOver. Wenn Nachrichten nur auf ein bestimmtes Endgeraet zugestellt werden sollen. PushOver Titel-Pr\u00e4fix pushover_title_prefix string Ripster Standard Prefix im PushOver Titel. Wenn du Meldungen mehrerer Instanzen sauber unterscheiden willst (z.B. \"Ripper-Wohnzimmer\"). PushOver Priority pushover_priority number 0 Expertenmodus Priorit\u00e4t -2 bis 2. Wenn Meldungen bewusst leiser (niedrig) oder dringender (hoch) zugestellt werden sollen. PushOver Timeout (ms) pushover_timeout_ms number 7000 Expertenmodus HTTP Timeout f\u00fcr PushOver Requests. Wenn PushOver bei schlechter Verbindung mehr oder weniger Zeit fuer den Request bekommen soll. Bei manueller Auswahl senden pushover_notify_metadata_ready boolean true Standard Sendet, wenn ein Job eine manuelle Auswahl/Entscheidung ben\u00f6tigt (z.B. Metadaten, Titel oder Playlist). Wenn 'Bei manueller Auswahl senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Rip-Start senden pushover_notify_rip_started boolean true Standard Sendet beim Start des MakeMKV-Rips. Wenn 'Bei Rip-Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Encode-Start senden pushover_notify_encoding_started boolean true Standard Sendet beim Start von HandBrake. Wenn 'Bei Encode-Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Erfolg senden pushover_notify_job_finished boolean true Standard Sendet bei erfolgreich abgeschlossenem Job. Wenn 'Bei Erfolg senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Fehler senden pushover_notify_job_error boolean true Standard Sendet bei Fehlern in der Pipeline. Wenn 'Bei Fehler senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Abbruch senden pushover_notify_job_cancelled boolean true Standard Sendet wenn Job manuell abgebrochen wurde. Wenn 'Bei Abbruch senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Re-Encode Start senden pushover_notify_reencode_started boolean true Standard Sendet beim Start von RAW Re-Encode. Wenn 'Bei Re-Encode Start senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen. Bei Re-Encode Erfolg senden pushover_notify_reencode_finished boolean true Standard Sendet bei erfolgreichem RAW Re-Encode. Wenn 'Bei Re-Encode Erfolg senden' bewusst ein- oder ausgeschaltet werden soll, um den Ablauf an deine Umgebung anzupassen."},{"location":"configuration/settings-reference/#kategorie-converter","title":"Kategorie: Converter","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Erlaubte Datei-Endungen converter_scan_extensions string mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus Standard Komma-getrennte Liste erlaubter Dateiendungen f\u00fcr den Scan (ohne Punkt). Steuert sowohl Upload-Validierung als auch Converter-Scan-Filter. Wenn 'Erlaubte Datei-Endungen' vom Default abweichen soll. Auto-Scan (Polling) converter_polling_enabled boolean false Standard Converter Raw-Ordner automatisch in regelm\u00e4\u00dfigen Abst\u00e4nden scannen. Wenn neue Dateien im Converter-Ordner automatisch erscheinen sollen, ohne manuellen Scan. Polling-Intervall (Sekunden) converter_polling_interval number 300 Standard Intervall f\u00fcr automatischen Scan des Converter-Ordners. Wenn der Auto-Scan schneller (kleiner Wert) oder ressourcenschonender (groesserer Wert) laufen soll."},{"location":"configuration/settings-reference/#kategorie-laufwerk","title":"Kategorie: Laufwerk","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Laufwerksmodus drive_mode select auto Standard Auto-Discovery oder explizites Device. Wenn du zwischen automatischer Laufwerkserkennung und fixer Device-Liste umschalten willst. Explizite Laufwerke drive_devices path [] Standard Laufwerke f\u00fcr den expliziten Modus als JSON-Array mit Pfad und MakeMKV-Index, z.B. [{\"path\":\"/dev/sr0\",\"makemkvIndex\":0},{\"path\":\"/dev/sr1\",\"makemkvIndex\":1}]. Nur relevant wenn Modus = Explizites Device. Wird als JSON gespeichert und vom Laufwerksdienst fuer explizite Zuordnung genutzt. Wenn auf dem Host mehrere Laufwerke stabil gemappt werden muessen (z.B. /dev/sr0=disc:0, /dev/sr1=disc:1). Device Pfad drive_device path /dev/sr0 Ausgeblendet (nur API/DB) Nur f\u00fcr expliziten Modus, z.B. /dev/sr0. Wenn 'Device Pfad' vom Default abweichen soll. MakeMKV Source Index makemkv_source_index number 0 Ausgeblendet (nur API/DB) Disc Index im Auto-Modus. Wenn 'MakeMKV Source Index' fuer Performance, Last oder Genauigkeit feinjustiert werden soll. Automatische Disk-Erkennung disc_auto_detection_enabled boolean true Standard Wenn deaktiviert, findet keine automatische Laufwerkspr\u00fcfung statt. Neue Disks werden nur per \"Laufwerk neu lesen\" erkannt. Wenn Discs nur manuell statt automatisch erkannt werden sollen. Polling Intervall (ms) disc_poll_interval_ms number 4000 Expertenmodus Intervall f\u00fcr Disk-Erkennung. Wenn die Erkennung schneller reagieren oder weniger oft pollen soll. Laufwerk nach Rip auswerfen auto_eject_after_rip boolean false Standard Wenn aktiv, wird das Laufwerk nach erfolgreichem Abschluss eines Rip-Vorgangs automatisch ausgeworfen (eject). Wenn ein Laufwerk nach erfolgreichem Rip direkt freigegeben/ausgeworfen werden soll."},{"location":"configuration/settings-reference/#kategorie-logging","title":"Kategorie: Logging","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Terminal-Ausgabe aktiv server_console_log_output_enabled boolean true Expertenmodus Master-Schalter f\u00fcr die Ausgabe der Server-Logs im Terminal (z.B. start.sh). Das Schreiben in Log-Dateien bleibt immer aktiv. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Terminal-Logs bei Betrieb unter Service/SSH ein- oder ausgeschaltet werden sollen. HTTP-Logs im Terminal server_console_log_http_enabled boolean true Expertenmodus Steuert HTTP Request-Logs im Terminal (z.B. request:start). Dateilogs bleiben unver\u00e4ndert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn HTTP-Request-Logs im Terminal fuer API-Debugging gebraucht werden. DEBUG im Terminal server_console_log_debug_enabled boolean true Expertenmodus Steuert DEBUG-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn detailreiche DEBUG-Logs im Terminal benoetigt werden (Fehlersuche). INFO im Terminal server_console_log_info_enabled boolean true Expertenmodus Steuert INFO-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn normale INFO-Laufzeitmeldungen im Terminal sichtbar sein sollen. WARN im Terminal server_console_log_warn_enabled boolean true Expertenmodus Steuert WARN-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Warnungen im Terminal hervorgehoben bleiben sollen. ERROR im Terminal server_console_log_error_enabled boolean true Expertenmodus Steuert ERROR-Meldungen in der Terminal-Ausgabe. Dateilogs bleiben unver\u00e4ndert. Aenderung wirkt direkt auf die Terminal-Logausgabe, Dateilogging bleibt erhalten. Wenn Fehler zwingend im Terminal sichtbar sein sollen."},{"location":"configuration/settings-reference/#kategorie-metadaten","title":"Kategorie: Metadaten","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? TMDb Read Access Token tmdb_api_read_access_token string leer Standard Read Access Token f\u00fcr Serien-Metadaten \u00fcber TheMovieDB (TMDb). Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn TMDb-Metadaten (Suche/Zuordnung/Serienepisoden) verl\u00e4sslich funktionieren sollen. Film-Sprache dvd_series_language string de-DE Standard Bevorzugte TMDb-Sprache f\u00fcr Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE oder en-US. Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn bevorzugt deutsche, englische oder andere lokalisierte Metadaten genutzt werden sollen. Fallback Sprache dvd_series_fallback_languages string de-DE,en-US Standard Kommagetrennte TMDb-Fallback-Sprachen f\u00fcr Film- und Serienmetadaten (DVD/Blu-ray), z.B. de-DE,en-US,fr-FR. Wird von TMDb-Service und Serienzuordnung in Analyse/Metadaten-Dialog genutzt. Wenn bei fehlender Prim\u00e4rsprache automatisch andere Sprachversionen ausprobiert werden sollen. Coverart-Nachladen aktiv coverart_recovery_enabled boolean true Standard Wenn aktiv, werden fehlende Coverarts automatisch in Intervallen gepr\u00fcft und nachgeladen. Aenderung aktualisiert den Coverart-Recovery-Scheduler. Wenn fehlende Cover sp\u00e4ter automatisch nachgezogen werden sollen. Coverart-Pr\u00fcfintervall (Stunden) coverart_recovery_interval_hours number 6 Standard Intervall f\u00fcr automatische Pr\u00fcfung fehlender Coverarts in Stunden. Aenderung aktualisiert den Coverart-Recovery-Scheduler. Wenn der Nachlade-Job haeufiger oder seltener laufen soll. NFO nach Encode erzeugen generate_nfo_after_encode boolean false Standard Erstellt nach erfolgreichem Encode automatisch eine .nfo-Datei neben der Ausgabedatei. Wird nach erfolgreichem Encode in der Historie/Pipeline ausgewertet. Wenn neben der Ausgabedatei automatisch eine .nfo fuer Media-Center erzeugt werden soll."},{"location":"configuration/settings-reference/#kategorie-monitoring","title":"Kategorie: Monitoring","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Hardware Monitoring aktiviert hardware_monitoring_enabled boolean true Standard Master-Schalter: aktiviert/deaktiviert das komplette Hardware-Monitoring (Polling + Berechnung + WebSocket-Updates). Aenderung triggert Re-Konfiguration des Hardware-Monitoring-Dienstes. Wenn CPU/RAM/GPU/Speicher live sichtbar sein sollen. Hardware Monitoring Intervall (ms) hardware_monitoring_interval_ms number 5000 Expertenmodus Polling-Intervall f\u00fcr CPU/RAM/GPU/Storage-Metriken. Aenderung triggert Re-Konfiguration des Hardware-Monitoring-Dienstes. Wenn Monitoring h\u00e4ufiger aktualisiert oder Last reduziert werden soll."},{"location":"configuration/settings-reference/#kategorie-pfade","title":"Kategorie: Pfade","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? Raw Ausgabeordner (Blu-ray) raw_dir_bluray path leer Standard Optionaler RAW-Zielpfad nur f\u00fcr Blu-ray. Leer = Fallback auf \"Raw Ausgabeordner\". Wenn 'Raw Ausgabeordner (Blu-ray)' vom Default abweichen soll. Raw Ausgabeordner (DVD) raw_dir_dvd path leer Standard Optionaler RAW-Zielpfad nur f\u00fcr DVD. Leer = Fallback auf \"Raw Ausgabeordner\". Wenn 'Raw Ausgabeordner (DVD)' vom Default abweichen soll. CD RAW-Ordner raw_dir_cd path leer Standard Basisordner f\u00fcr rohe CD-WAV-Dateien (cdparanoia-Output). Leer = Standardpfad (data/output/cd). Wenn 'CD RAW-Ordner' vom Default abweichen soll. Audiobook RAW-Ordner raw_dir_audiobook path leer Standard Basisordner f\u00fcr hochgeladene AAX-Dateien. Leer = Standardpfad (data/output/audiobook-raw). Wenn 'Audiobook RAW-Ordner' vom Default abweichen soll. Serien-Ordner (Blu-ray) series_dir_bluray path leer Standard Zielordner f\u00fcr Blu-ray-Serienfolgen. Leer = Standardpfad (data/output/series). Wenn 'Serien-Ordner (Blu-ray)' vom Default abweichen soll. Film Ausgabeordner (Blu-ray) movie_dir_bluray path leer Standard Optionaler Encode-Zielpfad nur f\u00fcr Blu-ray. Leer = Fallback auf \"Film Ausgabeordner\". Wenn 'Film Ausgabeordner (Blu-ray)' vom Default abweichen soll. Film Ausgabeordner (DVD) movie_dir_dvd path leer Standard Optionaler Encode-Zielpfad nur f\u00fcr DVD. Leer = Fallback auf \"Film Ausgabeordner\". Wenn 'Film Ausgabeordner (DVD)' vom Default abweichen soll. Serien-Ordner (DVD) series_dir_dvd path leer Standard Zielordner f\u00fcr DVD-Serienfolgen. Leer = Standardpfad (data/output/series). Wenn 'Serien-Ordner (DVD)' vom Default abweichen soll. CD Output-Ordner movie_dir_cd path leer Standard Zielordner f\u00fcr encodierte CD-Ausgaben (FLAC, MP3 usw.). Leer = gleicher Ordner wie CD RAW-Ordner. Wenn 'CD Output-Ordner' vom Default abweichen soll. Audiobook Output-Ordner movie_dir_audiobook path leer Standard Zielordner f\u00fcr encodierte Audiobook-Dateien. Leer = Standardpfad (data/output/audiobooks). Wenn 'Audiobook Output-Ordner' vom Default abweichen soll. Download ZIP-Ordner download_dir path leer Standard Zielordner f\u00fcr vorbereitete ZIP-Downloads. Leer = Standardpfad (data/downloads). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS). Externe Speicher external_storage_paths path [] Standard Wird links unter \"Freie Speicher\" angezeigt. Wenn 'Externe Speicher' vom Default abweichen soll. Log Ordner log_dir path installationsabhaengig Standard Basisordner f\u00fcr Logs. Job-Logs liegen direkt hier, Backend-Logs in /backend. Wird zur Laufzeit angewendet; bei ungueltigem Pfad faellt Ripster auf Fallback-Logpfad zurueck. Wenn Logs auf ein anderes Medium sollen (z.B. persistentes NAS/SSD statt Standardpfad). CD Output Template cd_output_template string {artist} - {album} ({year})/{trackNr} {artist} - {title} Standard Template f\u00fcr relative CD-Ausgabepfade ohne Dateiendung. Platzhalter: {artist}, {album}, {year}, {title}, {trackNr}, {trackNo}. Unterordner sind \u00fcber \"/\" m\u00f6glich. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (Blu-ray) output_template_bluray string ${title} (${year})/${title} (${year}) Standard Template f\u00fcr Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner \u00fcber \"/\" m\u00f6glich \u2013 alles nach dem letzten \"/\" ist der Dateiname. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (Blu-ray Serie, Episode) output_template_bluray_series_episode string {seriesTitle}/Staffel {seasonNr}/S{seasonNr}E{episodeNr} - {episodeTitle} Standard Template f\u00fcr einzelne Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (Blu-ray Serie, Multi-Episode) output_template_bluray_series_multi_episode string {seriesTitle}/Staffel {seasonNr}/S{0:seasonNr}E{episodeRange} - {episodeTitle} (Teil {parts}) Standard Template f\u00fcr zusammengefasste Blu-ray-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (DVD) output_template_dvd string ${title} (${year})/${title} (${year}) Standard Template f\u00fcr Ordner und Dateiname. Platzhalter: ${title}, ${year}, ${imdbId}. Unterordner \u00fcber \"/\" m\u00f6glich \u2013 alles nach dem letzten \"/\" ist der Dateiname. Die Endung wird \u00fcber das gew\u00e4hlte Ausgabeformat gesetzt. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (DVD Serie, Episode) output_template_dvd_series_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeNo} - {episodeTitle} Standard Template f\u00fcr einzelne DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNr}, {episodeTitle}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (DVD Serie, Multi-Episode) output_template_dvd_series_multi_episode string {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeRange} Standard Template f\u00fcr zusammengefasste DVD-Serienepisoden ohne Dateiendung. Platzhalter: {seriesTitle}, {seasonNr}, {episodeNoStart}, {episodeNoEnd}, {episodeRange}, {episodeTitle}, {parts}, {discNr}, {year}, {language}. Optional mit f\u00fchrender Null: {0:seasonNr}, {0:episodeNoStart}, {0:episodeNoEnd}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output Template (Audiobook) output_template_audiobook string {author}/{author} - {title} ({year}) Standard Template f\u00fcr relative Audiobook-Ausgabepfade ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}. Unterordner sind \u00fcber \"/\" m\u00f6glich. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Audiobook RAW Template audiobook_raw_template string {author} - {title} ({year}) Standard Template f\u00fcr relative Audiobook-RAW-Ordner. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Converter Raw-Ordner converter_raw_dir path leer Standard Eingangsordner f\u00fcr den Converter (Import-Scan und Datei-Uploads). Jeder Upload erh\u00e4lt einen Unterordner. Leer = Standardpfad (data/output/converter-raw). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS). Converter Ausgabe (Video) converter_movie_dir path leer Standard Ausgabepfad f\u00fcr konvertierte Video-Dateien. Leer = Standardpfad (data/output/converted-movies). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS). Converter Ausgabe (Audio) converter_audio_dir path leer Standard Ausgabepfad f\u00fcr konvertierte Audio-Dateien. Leer = Standardpfad (data/output/converted-audio). Leere Werte nutzen automatisch den Installations-Defaultpfad. Wenn RAW/Output/Download auf andere Datentraeger verschoben werden sollen (z.B. grosse HDD/NAS). Output-Template (Video) converter_output_template_video string {title} Standard Dateiname-Template f\u00fcr konvertierte Video-Dateien (ohne Endung). Platzhalter: {title}, {year}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. Output-Template (Audio) converter_output_template_audio string {artist} - {title} Standard Dateiname-Template f\u00fcr konvertierte Audio-Dateien (ohne Endung). Platzhalter: {artist}, {title}, {album}, {year}, {trackNr}. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren. RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series path leer Standard RAW-Zielpfad f\u00fcr Blu-ray-Serien. Leer = gleicher Pfad wie RAW-Ordner (Blu-ray). Wenn 'RAW-Ordner (Blu-ray Serie)' vom Default abweichen soll. Eigent\u00fcmer RAW-Ordner (Blu-ray Serie) raw_dir_bluray_series_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe f\u00fcr Blu-ray-Serien-RAW. Leer = Eigent\u00fcmer Raw-Ordner (Blu-ray). Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Raw-Ordner (Blu-ray) raw_dir_bluray_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. RAW-Ordner (DVD Serie) raw_dir_dvd_series path leer Standard RAW-Zielpfad f\u00fcr DVD-Serien. Leer = gleicher Pfad wie RAW-Ordner (DVD). Wenn 'RAW-Ordner (DVD Serie)' vom Default abweichen soll. Eigent\u00fcmer RAW-Ordner (DVD Serie) raw_dir_dvd_series_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe f\u00fcr DVD-Serien-RAW. Leer = Eigent\u00fcmer Raw-Ordner (DVD). Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Raw-Ordner (DVD) raw_dir_dvd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer CD RAW-Ordner raw_dir_cd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Audiobook RAW-Ordner raw_dir_audiobook_owner string leer Standard Eigent\u00fcmer der Audiobook-RAW-Dateien im Format user:gruppe. Nur aktiv wenn ein Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Converter RAW-Ordner converter_raw_dir_owner string leer Standard Eigent\u00fcmer der Converter-Eingabedateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Serien-Ordner (Blu-ray) series_dir_bluray_owner string leer Standard Eigent\u00fcmer der Blu-ray-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Film-Ordner (Blu-ray) movie_dir_bluray_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Film-Ordner (DVD) movie_dir_dvd_owner string leer Standard Eigent\u00fcmer der Dateien im Format user:gruppe. Nur aktiv wenn ein alternativer Pfad gesetzt ist. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Serien-Ordner (DVD) series_dir_dvd_owner string leer Standard Eigent\u00fcmer der DVD-Serienausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer CD Output-Ordner movie_dir_cd_owner string leer Standard Eigent\u00fcmer der encodierten CD-Ausgaben im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Audiobook Output-Ordner movie_dir_audiobook_owner string leer Standard Eigent\u00fcmer der encodierten Audiobook-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Converter Video Output-Ordner converter_movie_dir_owner string leer Standard Eigent\u00fcmer der konvertierten Video-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Converter Audio Output-Ordner converter_audio_dir_owner string leer Standard Eigent\u00fcmer der konvertierten Audio-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Eigent\u00fcmer Download ZIP-Ordner download_dir_owner string leer Standard Eigent\u00fcmer der vorbereiteten ZIP-Dateien im Format user:gruppe. Leer = Standardbenutzer des Dienstes. Wird beim Anlegen/Finalisieren per chown auf Zielpfade angewendet. Greift bei ZIP-Ordner, Archivdatei und Metadatei. Wenn Dateien/Ordner nicht dem Service-User gehoeren sollen (z.B. NAS-Freigaben). Beispiel: media:media. Kapitel Template (Audiobook) output_chapter_template_audiobook string {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle} Standard Template f\u00fcr kapitelweise Audiobook-Ausgaben (MP3/FLAC) ohne Dateiendung. Platzhalter: {author}, {title}, {year}, {narrator}, {series}, {part}, {format}, {chapterNr}, {chapterNo}, {chapterTitle}. Unterordner sind \u00fcber \"/\" m\u00f6glich. Wenn Ausgabe-/Ordnernamen standardisiert werden sollen. Beispiel: Serien nach Staffel oder Kapitel in Unterordner strukturieren."},{"location":"configuration/settings-reference/#kategorie-tools","title":"Kategorie: Tools","text":"GUI-Feld Key Typ Default Sichtbarkeit Was passiert technisch? Warum/Wann setzen? MakeMKV Kommando makemkv_command string makemkvcon Expertenmodus Pfad oder Befehl f\u00fcr makemkvcon. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). MakeMKV Key makemkv_registration_key string leer Standard Optionaler Registrierungsschl\u00fcssel. Wird beim Speichern nach ~/.MakeMKV/settings.conf synchronisiert. Darunter kann der aktuelle Betakey per API \u00fcbernommen werden. Wenn MakeMKV-Features ohne Trial-Limit genutzt werden sollen (inkl. Betakey-Usecase). Mediainfo Kommando mediainfo_command string mediainfo Expertenmodus Pfad oder Befehl f\u00fcr mediainfo. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). Minimale Titell\u00e4nge (Minuten) makemkv_min_length_minutes number 60 Standard Filtert kurze Titel beim Rip. Wenn kurze Bonus-/Trailer-Titel automatisch ausgefiltert werden sollen. TMDb Runtime-Abzug f\u00fcr Playlistfilter (%) playlist_tmdb_runtime_subtract_percent number 0 Standard Zieht optional einen Prozentsatz von der TMDb-Laufzeit ab, damit Ripster bei problematischen Blu-rays leicht k\u00fcrzere Hauptfassungen trotzdem als Playlist-Kandidaten zul\u00e4sst. Eine Mindesttoleranz von 2 Minuten nach unten bleibt erhalten. Wenn die Playlist-Analyse bei einzelnen Discs zu streng ist und der Hauptfilm knapp unter der TMDb-Laufzeit liegt. Beispiel: TMDb sagt 120 Minuten, die Disc liefert 116 bis 118 Minuten, aber die Fassung ist trotzdem korrekt. HandBrake Kommando handbrake_command string HandBrakeCLI Expertenmodus Pfad oder Befehl f\u00fcr HandBrakeCLI. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen handbrake_restart_delete_incomplete_output boolean true Standard Wenn aktiv, wird bei \"Encode neu starten\" der bisherige (nicht erfolgreiche) Output vor Start entfernt. Wenn bei Encode-Neustart alte, unvollstaendige Dateien sicher entfernt werden sollen. Parallele Jobs pipeline_max_parallel_jobs number 1 Standard Maximale Anzahl parallel laufender Jobs. Weitere Starts landen in der Queue. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn Durchsatz und CPU-Last fuer Videojobs ausbalanciert werden sollen. Max. parallele Audio CD Jobs pipeline_max_parallel_cd_encodes number 2 Standard Maximale Anzahl parallel laufender Audio CD Jobs (Rip + Encode als Einheit). Gilt zus\u00e4tzlich zum Gesamtlimit. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn mehrere Audio-CD-Jobs parallel erlaubt/begrenzt werden sollen. Script-Test Timeout (ms) script_test_timeout_ms number 0 Expertenmodus Timeout fuer Script-Tests in den Settings. 0 = kein Timeout. Wird beim Testlauf von Scripts in Settings angewendet. Wenn Script-Tests bei Haengern automatisch abgebrochen werden sollen. Max. Encodes gesamt (medienunabh\u00e4ngig) pipeline_max_total_encodes number 3 Standard Gesamtlimit f\u00fcr alle parallel laufenden Encode-Jobs (Film + Audio CD). Dieses Limit hat Vorrang vor den Einzellimits. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn ein harter Deckel fuer alle Encodes zusammen gelten soll. Audio CDs: Queue-Reihenfolge \u00fcberspringen pipeline_cd_bypasses_queue boolean false Standard Wenn aktiv, k\u00f6nnen Audio CD Jobs unabh\u00e4ngig von Film-Jobs starten (\u00fcberspringen die Film-Queue-Reihenfolge). Einzellimits und Gesamtlimit gelten weiterhin. Aenderung beeinflusst Queue-Pump und Startentscheidungen fuer neue Jobs. Wenn Audio-CD-Jobs nicht hinter langen Video-Warteschlangen blockieren sollen. cdparanoia Kommando cdparanoia_command string cdparanoia Expertenmodus Pfad oder Befehl f\u00fcr cdparanoia. Wird als Fallback genutzt wenn kein individuelles Kommando gesetzt ist. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). FFmpeg Kommando ffmpeg_command string ffmpeg Standard Pfad oder Befehl f\u00fcr ffmpeg. Wird f\u00fcr Audiobook-Encoding genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). FFprobe Kommando ffprobe_command string ffprobe Standard Pfad oder Befehl f\u00fcr ffprobe. Wird f\u00fcr Audiobook-Metadaten und Kapitel genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad). Mediainfo Extra Args mediainfo_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr mediainfo (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). MakeMKV Rip Modus makemkv_rip_mode_bluray select backup Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollst\u00e4ndige Blu-ray Struktur im RAW-Ordner. Wenn fuer 'MakeMKV Rip Modus' ein anderes Standardverhalten benoetigt wird. MakeMKV Analyze Extra Args makemkv_analyze_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Analyze (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). MakeMKV Rip Extra Args makemkv_rip_extra_args_bluray string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Rip (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). HandBrake Preset handbrake_preset_bluray string H.264 MKV 1080p30 Standard Preset Name f\u00fcr -Z (Blu-ray). Leer = kein Preset, nur CLI-Parameter werden verwendet. Wenn ein bevorzugtes Standard-Preset fuer Blu-ray nicht jedes Mal manuell gewaehlt werden soll. HandBrake Extra Args handbrake_extra_args_bluray string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-ma... Standard Zus\u00e4tzliche CLI-Argumente (Blu-ray). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). Review Audio-Sprachen (Blu-ray Film) handbrake_review_audio_languages_bluray_movie string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Audio-Spuren bei Blu-ray-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei Blu-ray-Filmen im Review nicht mehr alle Audio-Spuren vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review UT-Sprachen (Blu-ray Film) handbrake_review_subtitle_languages_bluray_movie string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Untertiteln bei Blu-ray-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei Blu-ray-Filmen im Review nicht mehr alle Untertitel vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review Audio-Sprachen (Blu-ray Serie) handbrake_review_audio_languages_bluray_series string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Audio-Spuren bei Blu-ray-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei Blu-ray-Serien im Review nicht mehr alle Audio-Spuren vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review UT-Sprachen (Blu-ray Serie) handbrake_review_subtitle_languages_bluray_series string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Untertiteln bei Blu-ray-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei Blu-ray-Serien im Review nicht mehr alle Untertitel vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Ausgabeformat output_extension_bluray select mkv Standard Dateiendung f\u00fcr finale Datei (Blu-ray). Wenn finale Blu-ray-Dateien standardmaessig als MKV oder MP4 ausgegeben werden sollen. Mediainfo Extra Args mediainfo_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr mediainfo (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). MakeMKV Rip Modus makemkv_rip_mode_dvd select mkv Ausgeblendet (nur API/DB) mkv: direkte MKV-Dateien; backup: vollst\u00e4ndige Disc-Struktur im RAW-Ordner. Wenn fuer 'MakeMKV Rip Modus' ein anderes Standardverhalten benoetigt wird. MakeMKV Analyze Extra Args makemkv_analyze_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Analyze (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). MakeMKV Rip Extra Args makemkv_rip_extra_args_dvd string leer Expertenmodus Zus\u00e4tzliche CLI-Parameter f\u00fcr Rip (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). HandBrake Preset handbrake_preset_dvd string H.264 MKV 480p30 Standard Preset Name f\u00fcr -Z (DVD). Leer = kein Preset, nur CLI-Parameter werden verwendet. Wenn ein bevorzugtes Standard-Preset fuer DVD nicht jedes Mal manuell gewaehlt werden soll. HandBrake Extra Args handbrake_extra_args_dvd string --audio-lang-list deu,eng --first-audio --subtitle-lang-list deu,eng --first-subtitle --aencoder copy --audio-copy-ma... Standard Zus\u00e4tzliche CLI-Argumente (DVD). Wenn du das CLI-Verhalten feinjustieren willst (Codec, Sprache, Untertitel, Analyse-Optionen). Review Audio-Sprachen (DVD Film) handbrake_review_audio_languages_dvd_movie string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Audio-Spuren bei DVD-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei DVD-Filmen im Review nicht mehr alle Audio-Spuren vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review UT-Sprachen (DVD Film) handbrake_review_subtitle_languages_dvd_movie string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Untertiteln bei DVD-Filmen. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei DVD-Filmen im Review nicht mehr alle Untertitel vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review Audio-Sprachen (DVD Serie) handbrake_review_audio_languages_dvd_series string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Audio-Spuren bei DVD-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Audio-Auswahl vorgeben. Wenn bei DVD-Serien im Review nicht mehr alle Audio-Spuren vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Review UT-Sprachen (DVD Serie) handbrake_review_subtitle_languages_dvd_series string leer Standard Kommagetrennte Sprachliste f\u00fcr die Review-Vorauswahl von Untertiteln bei DVD-Serien. Beispiel: de,en,jp. Greift nur, wenn Preset/Extra Args keine Subtitle-Auswahl vorgeben. Wenn bei DVD-Serien im Review nicht mehr alle Untertitel vorausgew\u00e4hlt werden sollen, sondern nur bestimmte Sprachen. Ausgabeformat output_extension_dvd select mkv Standard Dateiendung f\u00fcr finale Datei (DVD). Wenn finale DVD-Dateien standardmaessig als MKV oder MP4 ausgegeben werden sollen. mkvmerge Kommando mkvmerge_command string mkvmerge Standard Pfad oder Befehl f\u00fcr mkvmerge. Wird f\u00fcr Multipart-Movie-Merges genutzt. Wenn ein Tool nicht im PATH liegt oder eine feste Binary genutzt werden soll (voller Pfad)."},{"location":"configuration/settings-reference/#spezielle-werteformate","title":"Spezielle Werteformate","text":"
  • Eigent\u00fcmer (user:gruppe): z.B. media:media oder 1000:1000.
  • drive_devices (JSON): [{\"path\":\"/dev/sr0\",\"makemkvIndex\":0},{\"path\":\"/dev/sr1\",\"makemkvIndex\":1}]
  • external_storage_paths (JSON): [{\"name\":\"USB HDD\",\"path\":\"/mnt/usb-hdd\"}]
  • converter_scan_extensions: kommagetrennt, ohne Punkt, z.B. mkv,mp4,flac,mp3.
  • Template-Felder: erlauben Platzhalter ({...} / ${...}) und / fuer Unterordner.
"},{"location":"configuration/settings-reference/#hinweis-zu-ausgeblendeten-feldern","title":"Hinweis zu ausgeblendeten Feldern","text":"

Die Keys drive_device, makemkv_source_index, makemkv_rip_mode_bluray, makemkv_rip_mode_dvd liegen im Schema, werden aber bewusst nicht im normalen Formular angezeigt.

"},{"location":"deployment/","title":"Anhang: Deployment","text":"

Technische Betriebsdokumentation f\u00fcr Entwicklung und Produktion.

  • Entwicklungsumgebung

    Lokale Entwicklung mit Hot-Reload.

    Entwicklung

  • Produktion

    Installation und Betrieb auf Servern.

    Produktion

"},{"location":"deployment/development/","title":"Entwicklungsumgebung","text":""},{"location":"deployment/development/#voraussetzungen","title":"Voraussetzungen","text":"
  • Node.js >= 20.19.0
  • externe Tools installiert (makemkvcon, HandBrakeCLI, mediainfo)
"},{"location":"deployment/development/#schnellstart","title":"Schnellstart","text":"
./start.sh\n

Startet:

  • Backend (http://localhost:3001, mit nodemon)
  • Frontend (http://localhost:5173, mit Vite HMR)

Stoppen: Ctrl+C.

"},{"location":"deployment/development/#manuell","title":"Manuell","text":""},{"location":"deployment/development/#backend","title":"Backend","text":"
cd backend\nnpm install\nnpm run dev\n
"},{"location":"deployment/development/#frontend","title":"Frontend","text":"
cd frontend\nnpm install\nnpm run dev\n
"},{"location":"deployment/development/#vite-proxy-dev","title":"Vite-Proxy (Dev)","text":"

frontend/vite.config.js proxied standardm\u00e4\u00dfig:

  • /api -> http://127.0.0.1:3001
  • /ws -> ws://127.0.0.1:3001
"},{"location":"deployment/development/#remote-dev-optional","title":"Remote-Dev (optional)","text":"

Beispiel frontend/.env.local:

VITE_API_BASE=http://192.168.1.100:3001/api\nVITE_WS_URL=ws://192.168.1.100:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.100:5173\nVITE_ALLOWED_HOSTS=192.168.1.100,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.100\nVITE_HMR_CLIENT_PORT=5173\n
"},{"location":"deployment/development/#nutzliche-kommandos","title":"N\u00fctzliche Kommandos","text":"
# Root dev (backend + frontend)\nnpm run dev\n\n# einzeln\nnpm run dev:backend\nnpm run dev:frontend\n\n# Frontend Build\nnpm run build:frontend\n
"},{"location":"deployment/production/","title":"Produktions-Deployment","text":""},{"location":"deployment/production/#automatische-installation-empfohlen","title":"Automatische Installation (empfohlen)","text":"

Das mitgelieferte install.sh richtet Ripster vollautomatisch ein \u2013 inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.

Unterst\u00fctzte Systeme laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS Voraussetzung: root-Rechte, Internetzugang

"},{"location":"deployment/production/#schnellstart-via-curl","title":"Schnellstart via curl","text":"
curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n

Oder mit wget:

wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n

Optionen nur via Datei

Beim Pipen von curl/wget k\u00f6nnen keine Argumente \u00fcbergeben werden. F\u00fcr benutzerdefinierte Optionen zuerst herunterladen und dann mit sudo bash install.sh [Optionen] ausf\u00fchren.

"},{"location":"deployment/production/#optionen","title":"Optionen","text":"Option Standard Beschreibung --branch <branch> dev Git-Branch f\u00fcr die Installation --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Systembenutzer f\u00fcr den Dienst --port <port> 3001 Backend-Port --host <hostname> Auto (Maschinen-IP) Hostname/IP f\u00fcr die Weboberfl\u00e4che --no-makemkv \u2013 MakeMKV-Installation \u00fcberspringen --no-handbrake \u2013 HandBrake-Installation \u00fcberspringen --no-nginx \u2013 nginx-Einrichtung \u00fcberspringen --reinstall \u2013 Bestehende Installation aktualisieren (Daten bleiben erhalten) -h, --help \u2013 Hilfe anzeigen"},{"location":"deployment/production/#beispiele","title":"Beispiele","text":"
# Standard-Installation\nsudo bash install.sh\n\n# Anderen Branch und Port verwenden\nsudo bash install.sh --branch dev --port 8080\n\n# Ohne MakeMKV (bereits installiert)\nsudo bash install.sh --no-makemkv\n\n# Bestehende Installation aktualisieren\nsudo bash install.sh --reinstall\n\n# Ohne nginx (eigener Reverse-Proxy)\nsudo bash install.sh --no-nginx --host mein-server.local\n
"},{"location":"deployment/production/#was-das-skript-erledigt","title":"Was das Skript erledigt","text":"
  1. Systempr\u00fcfung \u2013 OS-Erkennung und Root-Check
  2. Systempakete \u2013 curl, wget, git, mediainfo, udev u. a.
  3. Node.js 20 \u2013 via NodeSource, falls noch nicht installiert
  4. MakeMKV \u2013 aktuelle Version wird aus dem offiziellen Forum ermittelt und aus dem Quellcode kompiliert (kann mit --no-makemkv \u00fcbersprungen werden)
  5. HandBrake \u2013 interaktive Auswahl:
    • Option 1: Standard (apt install handbrake-cli)
    • Option 2: Geb\u00fcndelte GPU-Version mit NVDEC aus bin/HandBrakeCLI
  6. Systembenutzer ripster \u2013 ohne Login-Shell und ohne Home-Verzeichnis; Gruppen werden (falls vorhanden) erg\u00e4nzt: cdrom, optical, disk, video, render
  7. Repository \u2013 klont Branch nach --dir (bei --reinstall: sichert backend/data, aktualisiert Repo, stellt Daten wieder her)
  8. Verzeichnisse \u2013 stellt u. a. sicher: backend/data, backend/logs, backend/data/output/raw, backend/data/output/movies, backend/data/logs
  9. npm-Abh\u00e4ngigkeiten \u2013 Root, Backend (nur production), Frontend
  10. Frontend-Build \u2013 npm run build mit relativen API-URLs (nginx-kompatibel)
  11. Backend .env \u2013 wird automatisch generiert (bei --reinstall bleibt bestehende .env erhalten)
  12. Berechtigungen \u2013 zun\u00e4chst ripster:ripster auf Installationsverzeichnis; bei sudo-Aufruf werden Output-/Log-Ordner auf <aufrufender user>:ripster mit 775 gesetzt; .env wird auf 600 gesetzt
  13. MakeMKV User-Ordner \u2013 erstellt bei sudo-Aufruf ~/.MakeMKV f\u00fcr den aufrufenden Benutzer
  14. systemd-Dienst \u2013 ripster-backend.service erstellt, aktiviert und gestartet
  15. nginx \u2013 konfiguriert als Reverse-Proxy f\u00fcr Frontend, /api/ und /ws (kann mit --no-nginx \u00fcbersprungen werden)
"},{"location":"deployment/production/#nach-der-installation","title":"Nach der Installation","text":"
# Status pr\u00fcfen\nsudo systemctl status ripster-backend\n\n# Logs verfolgen\nsudo journalctl -u ripster-backend -f\n\n# Neustart\nsudo systemctl restart ripster-backend\n\n# Aktualisieren\nsudo bash /opt/ripster/install.sh --reinstall\n

Zugriff: http://<Maschinen-IP> (oder der mit --host angegebene Hostname)

"},{"location":"deployment/production/#handbrake-modus-gpunvdec","title":"HandBrake-Modus (GPU/NVDEC)","text":"

Bei nicht-interaktiver Ausf\u00fchrung (Pipe von curl) wird automatisch die Standard-Version gew\u00e4hlt. F\u00fcr die GPU-Version zuerst herunterladen:

curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh -o install.sh\nsudo bash install.sh\n# \u2192 Interaktive Auswahl: Option 2 f\u00fcr NVDEC\n

Das geb\u00fcndelte Binary liegt unter bin/HandBrakeCLI und wird nach /usr/local/bin/HandBrakeCLI kopiert.

"},{"location":"deployment/production/#manuelle-installation","title":"Manuelle Installation","text":"

Die folgenden Abschnitte beschreiben die einzelnen Schritte f\u00fcr manuelle oder angepasste Setups.

"},{"location":"deployment/production/#empfohlene-architektur","title":"Empfohlene Architektur","text":"
Client\n  -> nginx (Reverse Proxy + statisches Frontend)\n    -> Backend API/WebSocket (Node.js, Port 3001)\n

Wichtig: Das Backend serviert im aktuellen Stand keine frontend/dist-Dateien automatisch.

"},{"location":"deployment/production/#1-frontend-builden","title":"1) Frontend builden","text":"
cd frontend\nnpm install\nnpm run build\n

Artefakte liegen in frontend/dist/.

"},{"location":"deployment/production/#2-backend-als-systemd-service","title":"2) Backend als systemd-Service","text":"

Beispiel /etc/systemd/system/ripster-backend.service:

[Unit]\nDescription=Ripster Backend\nAfter=network.target\n\n[Service]\nType=simple\nUser=ripster\nWorkingDirectory=/opt/ripster/backend\nExecStart=/usr/bin/env node src/index.js\nRestart=on-failure\nRestartSec=5\nEnvironment=NODE_ENV=production\nEnvironment=PORT=3001\nEnvironment=LOG_LEVEL=info\n\n[Install]\nWantedBy=multi-user.target\n

Aktivieren:

sudo systemctl daemon-reload\nsudo systemctl enable --now ripster-backend\nsudo systemctl status ripster-backend\n
"},{"location":"deployment/production/#3-nginx-konfigurieren","title":"3) nginx konfigurieren","text":"

Beispiel /etc/nginx/sites-available/ripster:

server {\n    listen 80;\n    server_name ripster.local;\n    client_max_body_size 8G;\n\n    root /opt/ripster/frontend/dist;\n    index index.html;\n\n    location / {\n        try_files $uri $uri/ /index.html;\n    }\n\n    location /api/ {\n        proxy_pass http://127.0.0.1:3001;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n\n    location /ws {\n        proxy_pass http://127.0.0.1:3001;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n    }\n}\n

Aktivieren:

sudo ln -s /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl reload nginx\n

Hinweis: Fuer groessere Uploads wie .aax-Audiobooks muss client_max_body_size ausreichend hoch gesetzt sein. Im mitgelieferten Beispiel sind 8G hinterlegt.

"},{"location":"deployment/production/#datenbank-backup","title":"Datenbank-Backup","text":"
sqlite3 /opt/ripster/backend/data/ripster.db \\\n  \".backup '/var/backups/ripster-$(date +%Y%m%d).db'\"\n
"},{"location":"deployment/production/#sicherheit","title":"Sicherheit","text":"
  • Ripster hat keine eingebaute Authentifizierung.
  • F\u00fcr externen Zugriff mindestens Basic Auth + TLS + Netzwerksegmentierung/VPN einsetzen.
  • Secrets nicht ins Repo committen (.env, Settings-Felder).
"},{"location":"getting-started/","title":"Benutzerhandbuch \u00dcberblick","text":"

Dieses Kapitel ist f\u00fcr den Betrieb von Ripster im Alltag geschrieben.

"},{"location":"getting-started/#zielgruppe","title":"Zielgruppe","text":"
  • Anwender, die Discs verarbeiten wollen
  • Betreiber, die den t\u00e4glichen Ablauf stabil fahren m\u00f6chten
  • Power-User, die Queue/Skripte/Cron im UI steuern m\u00f6chten
"},{"location":"getting-started/#kapitelstruktur","title":"Kapitelstruktur","text":"Kapitel Zweck Voraussetzungen Produktions- vs. Dev-Voraussetzungen klar trennen Installation Ripster aufsetzen und starten Ersteinrichtung Pfade, Tools und Metadaten korrekt setzen Erster Lauf Ein kompletter Job von Disc bis Datei GUI-Seiten Alle Ansichten und Aktionen im Detail Workflows Typische Abl\u00e4ufe und Entscheidungen aus User-Sicht"},{"location":"getting-started/#wenn-du-neu-startest","title":"Wenn du neu startest","text":"
  1. Voraussetzungen
  2. Installation
  3. Ersteinrichtung
  4. Erster Lauf
"},{"location":"getting-started/#wenn-ripster-bereits-lauft","title":"Wenn Ripster bereits l\u00e4uft","text":"
  1. GUI-Seiten
  2. Workflows
  3. Bei Detailfragen: Technischer Anhang
"},{"location":"getting-started/configuration/","title":"Ersteinrichtung","text":"

Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf.

"},{"location":"getting-started/configuration/#ziel-der-ersteinrichtung","title":"Ziel der Ersteinrichtung","text":"

Vor dem ersten Job sollten f\u00fcnf Bereiche sauber gesetzt sein:

  1. Pfade und Templates
  2. Laufwerk und Disc-Erkennung
  3. Metadatenzugang \u00fcber TMDb
  4. Encode-Standards und Queue-Regeln
  5. optionale Automatisierung und Benachrichtigungen
"},{"location":"getting-started/configuration/#empfohlene-reihenfolge","title":"Empfohlene Reihenfolge","text":""},{"location":"getting-started/configuration/#1-basis-in-settings-konfiguration","title":"1. Basis in Settings -> Konfiguration","text":"

Pr\u00fcfe zuerst diese Kernfelder:

  • RAW- und Zielordner f\u00fcr Blu-ray, DVD, CD, Audiobooks und Converter
  • Log Ordner
  • TMDb Read Access Token
  • MakeMKV Kommando, HandBrake Kommando, Mediainfo Kommando
  • FFmpeg Kommando, FFprobe Kommando, cdparanoia Kommando, mkvmerge Kommando, falls du die jeweiligen Workflows nutzt

Danach speichern.

"},{"location":"getting-started/configuration/#2-pfade-und-templates-bewusst-festlegen","title":"2. Pfade und Templates bewusst festlegen","text":"

Wichtig f\u00fcr den Alltag:

  • Film-Workflows nutzen raw_dir_*, movie_dir_* und output_template_*
  • Serien-Workflows nutzen zus\u00e4tzlich raw_dir_*_series, series_dir_* und die Episode-/Multi-Episode-Templates
  • Audiobooks nutzen raw_dir_audiobook, movie_dir_audiobook, audiobook_raw_template, output_template_audiobook, output_chapter_template_audiobook
  • Converter nutzt converter_raw_dir, converter_movie_dir, converter_audio_dir und die beiden Converter-Templates
  • Downloads nutzen download_dir

Wenn du auf NAS, USB oder andere Benutzer/Gruppen schreiben willst, pr\u00fcfe auch die jeweiligen *_owner-Felder.

"},{"location":"getting-started/configuration/#3-laufwerk-und-automatische-erkennung-prufen","title":"3. Laufwerk und automatische Erkennung pr\u00fcfen","text":"

Relevant:

  • Laufwerksmodus
  • Explizite Laufwerke, falls du nicht mit Auto-Discovery arbeiten willst
  • Automatische Disk-Erkennung
  • Polling Intervall (ms) im Expertenmodus
  • Laufwerk nach Rip auswerfen

Empfehlung:

  • Einzelnes Standardlaufwerk: auto
  • mehrere stabile Laufwerke oder ungew\u00f6hnliche Device-Mappings: Explizite Laufwerke
"},{"location":"getting-started/configuration/#4-tmdb-und-metadatenverhalten-festlegen","title":"4. TMDb und Metadatenverhalten festlegen","text":"

Relevant:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache
  • Coverart-Nachladen aktiv
  • Coverart-Pr\u00fcfintervall (Stunden)
  • NFO nach Encode erzeugen

Diese Einstellungen wirken direkt in Metadatensuche, Serienzuordnung, Nachpflege von Covern und im finalen Output.

"},{"location":"getting-started/configuration/#5-encode-und-review-standards-festlegen","title":"5. Encode- und Review-Standards festlegen","text":"

F\u00fcr Video-Workflows besonders wichtig:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
  • HandBrake Preset und HandBrake Extra Args je Medium
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat

Praxis:

  • Minimale Titell\u00e4nge filtert Bonusmaterial fr\u00fch weg
  • TMDb Runtime-Abzug ... lockert bei problematischen Blu-rays die Laufzeitpr\u00fcfung der Playlist-Kandidaten
  • Review-Sprachen bestimmen, welche Audio-/Untertitelspuren in der Review schon vorausgew\u00e4hlt sind
"},{"location":"getting-started/configuration/#6-queue-verhalten-definieren","title":"6. Queue-Verhalten definieren","text":"

Stelle diese vier Felder bewusst ein:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
  • Audio CDs: Queue-Reihenfolge \u00fcberspringen

Damit steuerst du, wie aggressiv Ripster mehrere Jobs gleichzeitig startet.

"},{"location":"getting-started/configuration/#7-optional-user-presets-und-standard-zuordnungen","title":"7. Optional: User-Presets und Standard-Zuordnungen","text":"

Unter Settings -> Encode-Presets kannst du:

  • eigene HandBrake-User-Presets anlegen
  • Standard-Zuordnungen f\u00fcr Blu-ray Film, Blu-ray Serie, DVD Film, DVD Serie setzen

Diese Defaults wirken sp\u00e4ter in der Review automatisch vorbef\u00fcllend.

"},{"location":"getting-started/configuration/#8-optional-benachrichtigungen","title":"8. Optional: Benachrichtigungen","text":"

Pr\u00fcfe:

  • PushOver aktiviert
  • Token/User/optional Device
  • Event-Toggles wie Bei manueller Auswahl senden, Bei Rip-Start senden, Bei Erfolg senden

Danach in Settings den Button PushOver Test ausf\u00fchren.

"},{"location":"getting-started/configuration/#9-optional-automatisierung","title":"9. Optional: Automatisierung","text":"

Erst wenn die Grundkonfiguration stabil ist:

  1. Skripte anlegen und testen
  2. Skriptketten aufbauen
  3. Cronjobs aktivieren
"},{"location":"getting-started/configuration/#funktionsprufung","title":"Funktionspr\u00fcfung","text":"

Ein sinnvoller Kurztest:

  1. Disc in Ripper erkennen lassen
  2. Analyse starten
  3. TMDb-Metadaten \u00fcbernehmen
  4. ggf. Playlist-/RAW-Entscheidung durchlaufen
  5. bis Bereit zum Encodieren kommen
  6. Encode starten
  7. Ergebnis in Historie pr\u00fcfen
"},{"location":"getting-started/configuration/#typische-konfigurationsfehler","title":"Typische Konfigurationsfehler","text":"Symptom H\u00e4ufige Ursache Disc wird nicht erkannt Laufwerksmodus oder Auto-Erkennung passt nicht Playlist-Auswahl wirkt unplausibel Minimale Titell\u00e4nge oder TMDb Runtime-Abzug ... ist zu streng/zu locker falsche Spuren sind in der Review vorausgew\u00e4hlt Review-Sprachfilter oder HandBrake-Args greifen unerwartet Ausgabe landet am falschen Ort Profilpfade oder Templates greifen \u00fcber Fallback Queue verh\u00e4lt sich unerwartet Parallele Jobs, CD-Limit und Gesamtlimit widersprechen sich"},{"location":"getting-started/configuration/#weiter","title":"Weiter","text":"
  • Erster Lauf
  • GUI-Seiten
  • Workflows aus Nutzersicht
  • Alle Einstellungen
"},{"location":"getting-started/installation/","title":"Installation","text":"

Die empfohlene Installation startet immer \u00fcber setup.sh. setup.sh l\u00e4dt das passende install.sh aus dem gew\u00fcnschten Branch und \u00fcbergibt alle weiteren Parameter unver\u00e4ndert an den eigentlichen Installer.

Wichtig:

  • Standard-Einstieg: setup.sh
  • kein curl | bash
  • du musst die Tools nicht manuell vorinstallieren, sofern du sie nicht bewusst mit --no-* ausl\u00e4sst
"},{"location":"getting-started/installation/#voraussetzungen","title":"Voraussetzungen","text":"
  • unterst\u00fctztes Linux-System
  • Root-Rechte oder sudo
  • Internetzugang w\u00e4hrend der Installation

Der Installer erkennt aktuell:

  • Debian
  • Ubuntu
  • Linux Mint
  • Pop!_OS
"},{"location":"getting-started/installation/#standardinstallation","title":"Standardinstallation","text":"
wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh\nbash setup.sh\n

Ohne --branch fragt setup.sh interaktiv nach dem gew\u00fcnschten Branch.

Die typischen Branches sind:

  • main: stabiles Release
  • dev: aktueller Entwicklungsstand
"},{"location":"getting-started/installation/#installation-mit-branch-oder-optionen","title":"Installation mit Branch oder Optionen","text":"

Beispiele:

bash setup.sh --branch main\nbash setup.sh --branch dev\nbash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10\n

setup.sh wertet selbst nur --branch aus. Alles andere \u00fcbernimmt install.sh.

"},{"location":"getting-started/installation/#wichtige-optionen-von-installsh","title":"Wichtige Optionen von install.sh","text":"Option Default Zweck --branch <branch> dev installiert genau diesen Git-Branch --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Systembenutzer f\u00fcr den Dienst --port <port> 3001 Backend-Port --host <hostname|ip> automatisch ermittelte Host-IP Hostname/IP f\u00fcr Webzugriff und CORS --no-makemkv aus MakeMKV nicht installieren --no-handbrake aus HandBrake nicht installieren --no-nginx aus nginx-Setup \u00fcberspringen --no-system-deps aus Systemabh\u00e4ngigkeiten nicht nachinstallieren --reinstall aus bestehende Installation aktualisieren"},{"location":"getting-started/installation/#was-der-installer-einrichtet","title":"Was der Installer einrichtet","text":"

Typischer Ablauf:

  1. Betriebssystem, Root-Rechte und Host pr\u00fcfen
  2. Systemabh\u00e4ngigkeiten installieren
  3. Node.js 20 sicherstellen
  4. optional MakeMKV installieren
  5. optional HandBrakeCLI installieren
  6. optional nginx konfigurieren
  7. Repository nach --dir klonen oder aktualisieren
  8. Backend-/Frontend-Abh\u00e4ngigkeiten installieren
  9. Frontend bauen
  10. backend/.env und Laufzeitverzeichnisse vorbereiten
  11. ripster-backend.service anlegen und starten
"},{"location":"getting-started/installation/#dienst-prufen","title":"Dienst pr\u00fcfen","text":"
sudo systemctl status ripster-backend\n

Typische Aufrufe im Betrieb:

sudo journalctl -u ripster-backend -f\nsudo systemctl restart ripster-backend\n
"},{"location":"getting-started/installation/#update-einer-bestehenden-installation","title":"Update einer bestehenden Installation","text":"

Standard:

sudo bash /opt/ripster/install.sh --reinstall\n

Wenn die Installation mit abweichenden Kernparametern eingerichtet wurde, dieselben Parameter wieder mitgeben:

sudo bash /opt/ripster/install.sh --reinstall --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10\n

Alternativ kannst du auch erneut \u00fcber setup.sh gehen:

sudo bash /opt/ripster/setup.sh --reinstall\n

--reinstall aktualisiert die Installation, beh\u00e4lt aber die persistenten Daten der bestehenden Instanz.

"},{"location":"getting-started/installation/#danach-weiter","title":"Danach weiter","text":"
  1. Ersteinrichtung
  2. Erster Lauf
"},{"location":"getting-started/prerequisites/","title":"Voraussetzungen","text":"

Die Voraussetzungen h\u00e4ngen davon ab, ob du Ripster produktiv installieren oder lokal entwickeln willst.

"},{"location":"getting-started/prerequisites/#produktionsbetrieb-mit-setupsh","title":"Produktionsbetrieb mit setup.sh","text":"

F\u00fcr den normalen Betrieb brauchst du nur die Basisvoraussetzungen. Die eigentlichen Tools werden vom Installer eingerichtet, sofern du sie nicht bewusst mit --no-* \u00fcberspringst.

"},{"location":"getting-started/prerequisites/#pflicht","title":"Pflicht","text":"
  • unterst\u00fctztes Linux-System
  • Root-Rechte oder sudo
  • Internetzugang w\u00e4hrend der Installation
  • optisches Laufwerk, wenn du Disc-Workflows nutzen willst

Der Installer unterst\u00fctzt aktuell:

  • Debian
  • Ubuntu
  • Linux Mint
  • Pop!_OS

Standard-Einstieg:

wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh\nbash setup.sh\n
"},{"location":"getting-started/prerequisites/#laufwerk-kurz-prufen","title":"Laufwerk kurz pr\u00fcfen","text":"
ls /dev/sr*\nlsblk | grep rom\n
"},{"location":"getting-started/prerequisites/#optional-vorab","title":"Optional vorab","text":"
  • TMDb Read Access Token f\u00fcr Film-/Serien-Metadaten
  • PushOver-Zugangsdaten f\u00fcr Benachrichtigungen

Beides kann auch erst nach der Installation in Settings gesetzt werden.

"},{"location":"getting-started/prerequisites/#entwicklungsmodus","title":"Entwicklungsmodus","text":"

Wenn du lokal entwickelst (./start.sh, npm run dev), gelten zus\u00e4tzliche Voraussetzungen:

  • Node.js >= 20.19.0
  • makemkvcon, HandBrakeCLI, mediainfo im PATH

Details: Entwicklungsumgebung

"},{"location":"getting-started/prerequisites/#abschluss-checkliste","title":"Abschluss-Checkliste","text":"
  • [ ] Linux + Root/Sudo + Internet vorhanden
  • [ ] optisches Laufwerk vorhanden, falls Disc-Ripping genutzt werden soll
  • [ ] TMDb/PushOver-Zugangsdaten liegen bereit, falls diese Funktionen sofort genutzt werden sollen
  • [ ] im Dev-Modus zus\u00e4tzlich Node.js und CLI-Tools lokal verf\u00fcgbar
"},{"location":"getting-started/quickstart/","title":"Erster Lauf","text":"

Dieser Ablauf f\u00fchrt einen typischen Disc-Job von Erkennung bis fertiger Datei durch.

"},{"location":"getting-started/quickstart/#1-disc-erkennen","title":"1. Disc erkennen","text":"
  1. Ripper \u00f6ffnen
  2. Disc einlegen
  3. auf Medium erkannt warten

Pr\u00fcfen:

  • Disk-Information zeigt Device, Label und Laufwerksstatus
  • falls nicht: Laufwerk neu lesen

Relevante Settings:

  • Laufwerksmodus
  • Automatische Disk-Erkennung
  • Polling Intervall (ms)
"},{"location":"getting-started/quickstart/#2-analyse-starten","title":"2. Analyse starten","text":"

Aktion:

  • Analyse starten

Erwartung:

  • Status Analyse
  • danach der Metadaten-Dialog

Relevantes Setting:

  • Minimale Titell\u00e4nge (Minuten) beeinflusst bereits, welche Titel/Playlists Ripster sp\u00e4ter als relevant betrachtet
"},{"location":"getting-started/quickstart/#3-metadaten-in-tmdb-bestatigen","title":"3. Metadaten in TMDb best\u00e4tigen","text":"

Im Dialog:

  1. Treffer suchen oder filtern
  2. Film oder Serie ausw\u00e4hlen
  3. bei Serien zus\u00e4tzlich Disc-Nummer setzen
  4. Auswahl \u00fcbernehmen

M\u00f6gliche Abzweigungen:

  • Duplikatfilm: \u00dcbernahme erzwingen oder Multipart movie
  • vorhandenes RAW: Entscheidungsdialog weiterverwenden oder neu rippen

Relevante Settings:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache
"},{"location":"getting-started/quickstart/#4-raw-und-playlist-entscheidungen","title":"4. RAW- und Playlist-Entscheidungen","text":"

Je nach Disc-Situation geht es jetzt unterschiedlich weiter.

"},{"location":"getting-started/quickstart/#normalfall","title":"Normalfall","text":"

Startbereit -> Rippen -> Mediainfo-Pr\u00fcfung

"},{"location":"getting-started/quickstart/#vorhandenes-raw","title":"Vorhandenes RAW","text":"

Kein neuer Rip, sondern erst eine Entscheidung:

  • vorhandenes RAW weiterverwenden
  • RAW l\u00f6schen und Rip neu starten
  • bei passenden Film-Konstellationen optional Multipart mit Orphan-RAW
"},{"location":"getting-started/quickstart/#playlist-oder-titelauswahl-erforderlich","title":"Playlist- oder Titelauswahl erforderlich","text":"

Bei bestimmten Blu-ray-/DVD-F\u00e4llen erscheint Warte auf Auswahl.

Dann best\u00e4tigst du:

  • eine Playlist
  • oder einen/mehrere HandBrake-Titel

Relevante Settings:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
"},{"location":"getting-started/quickstart/#5-encode-review-abschlieen","title":"5. Encode-Review abschlie\u00dfen","text":"

Bei Bereit zum Encodieren pr\u00fcfst du:

  • Titelwahl
  • Audio-Spuren
  • Untertitel
  • User-Preset oder HandBrake-Preset
  • Pre-/Post-Encode-Skripte und Ketten

Dann:

  • Encoding starten

Relevante Settings:

  • HandBrake Preset und HandBrake Extra Args je Medium
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat
  • Standard-Zuordnungen unter Settings -> Encode-Presets
"},{"location":"getting-started/quickstart/#6-encoding-uberwachen","title":"6. Encoding \u00fcberwachen","text":"

W\u00e4hrend Encodieren:

  • Fortschritt/ETA im Ripper
  • Queue-Status beobachten
  • bei Bedarf Hardware-Ansicht \u00f6ffnen

Relevante Settings:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)
"},{"location":"getting-started/quickstart/#7-ergebnis-verifizieren","title":"7. Ergebnis verifizieren","text":"

Nach Fertig:

  1. Historie \u00f6ffnen
  2. Jobdetail pr\u00fcfen
  3. Output-Pfad und Log kontrollieren

Kontrollpunkte:

  • finale Datei liegt am erwarteten Template-Pfad
  • RAW-Ordner ist finalisiert
  • optional .nfo wurde erzeugt, falls aktiviert

Relevante Settings:

  • output_template_*
  • series_dir_* und Serien-Templates
  • generate_nfo_after_encode
"},{"location":"getting-started/quickstart/#8-typische-folgeaktionen","title":"8. Typische Folgeaktionen","text":"
  • falsche TMDb-Zuordnung: TMDb neu zuweisen
  • andere Trackauswahl: Review neu starten
  • erneuter Encode aus RAW: RAW neu encodieren
  • gleicher Plan erneut: Encode neu starten
  • Rip erneut versuchen: Retry Rippen
"},{"location":"gui/","title":"GUI-Seiten","text":"

Dieses Kapitel ist das Bedienhandbuch f\u00fcr die Oberfl\u00e4chen im Alltag.

"},{"location":"gui/#seitenuberblick","title":"Seiten\u00fcberblick","text":"Seite Rolle im Betrieb Typischer Einsatz Ripper Live-Steuerung der Disc-Pipeline Disc erkennen, Analyse starten, Entscheidungen treffen, Queue steuern Hardware Detailansicht f\u00fcr Live-Monitoring CPU/RAM/GPU und Verlauf pr\u00fcfen Audiobooks AAX-Spezialflow Upload, Kapitelpr\u00fcfung und Encode von Audiobooks Settings Konfiguration und Automatisierung Pfade, Tools, Queue, Presets, Skripte, Cron Historie Nachbearbeitung und Kontrolle Logs, Re-Encode, TMDb-Neuzuordnung, L\u00f6schvorschau Converter dateibasierte Konvertierung Video/Audio/ISO ohne Disc-Rip verarbeiten Downloads ZIP-Exports RAW/Output aus der Historie bereitstellen Database (Expert) Recovery-Sicht orphan RAW finden, pr\u00fcfen und importieren TMDb Migration Sonderseite f\u00fcr Altbest\u00e4nde alte Jobs gesammelt auf TMDb umstellen"},{"location":"gui/#empfohlener-tagesablauf","title":"Empfohlener Tagesablauf","text":"
  1. Ripper, Converter oder Audiobooks: neue Arbeit starten
  2. Historie: Ergebnisse kontrollieren und ggf. nachbearbeiten
  3. Downloads: Artefakte f\u00fcr externe \u00dcbergabe vorbereiten
  4. Settings: Regeln, Presets oder Limits nur kontrolliert anpassen
  5. Hardware: bei Lastspitzen oder Batch-L\u00e4ufen den Verlauf pr\u00fcfen
"},{"location":"gui/#navigation","title":"Navigation","text":"

Direkt in der Top-Navigation:

  • Ripper
  • Converter
  • Audiobooks
  • Settings
  • Historie
  • Downloads

Zusatzansichten:

  • Hardware unter /hardware
  • Database unter /database und im Expertenmodus zus\u00e4tzlich in der Navigation
  • TMDb Migration unter /tmdb-migration als Direktlink
"},{"location":"gui/audiobooks/","title":"Audiobooks","text":"

Die Seite Audiobooks ist der spezialisierte Workflow f\u00fcr Audible-*.aax-Dateien.

"},{"location":"gui/audiobooks/#seitenstruktur","title":"Seitenstruktur","text":"

Die Oberfl\u00e4che besteht aus zwei Hauptbereichen:

  1. Audiobooks Upload
  2. Audiobook Jobs
"},{"location":"gui/audiobooks/#1-audiobooks-upload","title":"1. Audiobooks Upload","text":"

Der Upload akzeptiert ausschlie\u00dflich .aax.

"},{"location":"gui/audiobooks/#bedienung","title":"Bedienung","text":"
  • Datei ausw\u00e4hlen oder per Drag-and-Drop ablegen
  • Upload starten
  • Auswahl entfernen oder laufenden Upload abbrechen

W\u00e4hrend des Uploads zeigt die UI:

  • Prozentfortschritt
  • \u00fcbertragene und gesamte Bytes
  • Statusmeldung
"},{"location":"gui/audiobooks/#ablauf-nach-erfolgreichem-upload","title":"Ablauf nach erfolgreichem Upload","text":"
  • die AAX-Datei wird gepr\u00fcft
  • Ripster versucht Metadata, Kapitel und Activation-Bytes-Kontext aufzubauen
  • ein Audiobook-Job wird angelegt
  • der Job startet direkt oder wird in die Queue eingereiht
"},{"location":"gui/audiobooks/#2-audiobook-jobs","title":"2. Audiobook Jobs","text":"

Die Seite zeigt aktive Jobs. Abgeschlossene Jobs findest du in der Historie.

Ein Job kann eingeklappt oder ausgeklappt werden und zeigt:

  • Titel, Autor, Sprecher, Jahr
  • Kapitelanzahl
  • Fortschritt und ETA
  • bei Split-Ausgabe den Kapitelstatus
"},{"location":"gui/audiobooks/#konfigurierbare-job-parameter","title":"Konfigurierbare Job-Parameter","text":"

Im ausgeklappten Job kannst du setzen:

  • Ausgabeformat m4b, mp3 oder flac
  • formatspezifische Optionen
  • Kapitelnamen
  • Pre-Encode-Skripte und -Ketten
  • Post-Encode-Skripte und -Ketten
"},{"location":"gui/audiobooks/#formatverhalten","title":"Formatverhalten","text":"
  • m4b: eine Datei mit Kapitelmarken
  • mp3: eine Datei pro Kapitel
  • flac: eine Datei pro Kapitel

Wenn du mp3 oder flac w\u00e4hlst, zeigt die UI zus\u00e4tzlich eine Kapitel-Status-Tabelle.

"},{"location":"gui/audiobooks/#activation-bytes","title":"Activation Bytes","text":"

Wenn Ripster f\u00fcr eine Datei keine Activation Bytes verwenden kann, wird im Workflow eine manuelle Eingabe n\u00f6tig.

Wichtig:

  • die Bytes werden lokal gecacht
  • derselbe AAX-Hash muss dann sp\u00e4ter nicht erneut manuell eingegeben werden
  • der Expertenblock in Settings zeigt bekannte Cache-Eintr\u00e4ge an
"},{"location":"gui/audiobooks/#relevante-settings","title":"Relevante Settings","text":"
  • raw_dir_audiobook
  • movie_dir_audiobook
  • raw_dir_audiobook_owner
  • movie_dir_audiobook_owner
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command
"},{"location":"gui/audiobooks/#so-wirken-die-settings-im-alltag","title":"So wirken die Settings im Alltag","text":"
  • audiobook_raw_template bestimmt den Namen des AAX-RAW-Ordners
  • output_template_audiobook bestimmt die Einzeldatei f\u00fcr m4b
  • output_chapter_template_audiobook bestimmt Zielstruktur und Dateinamen f\u00fcr mp3/flac
  • ffprobe_command liest Kapitel und Metadaten
  • ffmpeg_command erzeugt die finalen Dateien
"},{"location":"gui/audiobooks/#queue-und-laufzeit","title":"Queue und Laufzeit","text":"

Audiobook-Jobs nutzen dieselbe globale Pipeline wie die anderen Bereiche.

Relevante Settings:

  • Parallele Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
"},{"location":"gui/audiobooks/#typische-fehlerbilder","title":"Typische Fehlerbilder","text":"
  • Upload wird abgelehnt: Datei ist keine g\u00fcltige *.aax
  • Analyse schl\u00e4gt fehl: ffprobe ist nicht erreichbar
  • Encode schl\u00e4gt fehl: ffmpeg ist nicht erreichbar
  • Ausgabe landet unerwartet: Templates oder Zielpfade passen nicht zur gew\u00fcnschten Struktur
"},{"location":"gui/converter/","title":"Converter","text":"

Die Seite Converter verarbeitet vorhandene Dateien ohne Laufwerks-Rip. Sie ist f\u00fcr Video-, Audio- und ISO-Dateien gedacht, die bereits auf dem System liegen oder hochgeladen werden.

"},{"location":"gui/converter/#betriebsmodell","title":"Betriebsmodell","text":"

Der Converter arbeitet auf dem Eingangspfad converter_raw_dir.

Dort landen:

  • Uploads
  • neu angelegte Ordner
  • umbenannte oder verschobene Dateien
  • alle Dateien, aus denen sp\u00e4ter Converter-Jobs entstehen

Wichtig:

  • Upload erzeugt nicht automatisch einen Job
  • die Joberstellung erfolgt bewusst aus der Explorer-Auswahl
"},{"location":"gui/converter/#datei-explorer","title":"Datei-Explorer","text":"

Der Explorer zeigt den kompletten Baum unter converter_raw_dir.

Aktionen:

Aktion Wirkung Upload schreibt neue Dateien in den Converter-RAW-Baum Ordner erstellen legt Unterordner an Umbenennen benennt Datei oder Ordner um Verschieben verschiebt Eintr\u00e4ge innerhalb des Raw-Baums L\u00f6schen entfernt Datei oder Ordner dauerhaft Scannen synchronisiert Dateisystem und Converter-Datenbank"},{"location":"gui/converter/#upload-und-scan-regeln","title":"Upload- und Scan-Regeln","text":"
  • Dateiendungen m\u00fcssen in Erlaubte Datei-Endungen enthalten sein
  • neue Dateien erscheinen sofort nach manuellem Scan
  • mit Polling auch automatisch

Relevante Settings:

  • Erlaubte Datei-Endungen
  • Auto-Scan (Polling)
  • Polling-Intervall (Sekunden)
"},{"location":"gui/converter/#joberstellung-aus-explorer-auswahl","title":"Joberstellung aus Explorer-Auswahl","text":"

Es gibt zwei Audio-Strategien:

  1. Ein Job pro Datei
  2. Gemeinsamer Job (Audio)

Verhalten:

  • Video und ISO werden immer als Einzeljobs angelegt
  • Audio kann als gemeinsamer Album-/Ordner-Job erzeugt werden

Shared-Audio-Job:

  • h\u00e4lt mehrere inputPaths
  • kann vor dem Start erweitert oder reduziert werden
"},{"location":"gui/converter/#job-konfiguration","title":"Job-Konfiguration","text":"

Vor dem Start je Job einstellbar:

  • converterMediaType
  • outputFormat
  • Metadaten
  • Track-/Titelwahl bei Video/ISO
  • User-Preset und HandBrake-Preset bei Video
  • Pre-/Post-Encode-Skripte und Ketten

Spezifika:

  • Video/ISO durchlaufen eine Review \u00e4hnlich zum Disc-Flow
  • Audio wird direkt \u00fcber Format und Audio-Optionen konfiguriert
"},{"location":"gui/converter/#ausgabe-pfade","title":"Ausgabe-Pfade","text":""},{"location":"gui/converter/#video-iso","title":"Video / ISO","text":"
  • Zielordner: converter_movie_dir
  • Dateiname: Output-Template (Video)
  • Endung: aus dem gew\u00e4hlten Ausgabeformat
"},{"location":"gui/converter/#audio","title":"Audio","text":"
  • Zielordner: converter_audio_dir
  • Dateiname/Ordner: Output-Template (Audio)
  • bei Shared- oder Folder-Jobs entsteht eine Ordnerstruktur mit mehreren Track-Dateien

Relevante Settings:

  • converter_movie_dir
  • converter_audio_dir
  • converter_output_template_video
  • converter_output_template_audio
  • converter_movie_dir_owner
  • converter_audio_dir_owner
"},{"location":"gui/converter/#queue-und-start","title":"Queue und Start","text":"

Converter-Jobs laufen \u00fcber dieselbe globale Pipeline-Queue wie Ripper und Audiobooks.

Das bedeutet:

  • sofortiger Start, wenn Limits frei sind
  • sonst Einreihung in die Warteschlange

Relevante Settings:

  • Parallele Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
"},{"location":"gui/converter/#typische-einsatzfalle","title":"Typische Einsatzf\u00e4lle","text":"
  • vorhandene MKV/MP4-Dateien mit neuem Preset encodieren
  • ISO-Dateien in einen Video-Workflow \u00fcberf\u00fchren
  • Musikdateien gesammelt in einen Audio-Ordner-Job packen
  • Medien auf anderem Storage per Upload oder Dateibaum vorbereiten
"},{"location":"gui/converter/#abgrenzung-zu-audiobooks","title":"Abgrenzung zu Audiobooks","text":"
  • Converter: beliebige Audio-, Video- und ISO-Dateien
  • Audiobooks: spezialisierter AAX-Workflow mit Activation Bytes, Kapitelmetadaten und Kapiteltemplates
"},{"location":"gui/database/","title":"Database (Expert)","text":"

/database ist die Recovery- und Expertensicht f\u00fcr F\u00e4lle, in denen Dateisystem und Historie nicht mehr sauber zusammenpassen.

"},{"location":"gui/database/#zugriff","title":"Zugriff","text":"
  • direkte Route: /database
  • nicht Teil der Standardnavigation
"},{"location":"gui/database/#bereich-gefundene-raw-eintrage","title":"Bereich Gefundene RAW-Eintr\u00e4ge","text":"

Dieser Bereich listet RAW-Verzeichnisse ohne zugeordneten Historie-Job.

Aktionen:

  • RAW pr\u00fcfen: scannt konfigurierte RAW-Wurzeln
  • Job anlegen: erstellt aus einem orphan RAW einen neuen Historie-Job
"},{"location":"gui/database/#was-bei-job-anlegen-passiert","title":"Was bei Job anlegen passiert","text":"
  • RAW-Pfad wird als Importquelle registriert
  • Job wird in die Historie geschrieben
  • anschlie\u00dfende Analyse l\u00e4uft als RAW-basierter Einstieg (ohne klassischen Disc-Read)

Typischer Einsatz:

  • manuelle Dateioperationen au\u00dferhalb der UI
  • Migrationen
  • Wiederherstellung nach abgebrochenen L\u00e4ufen
"},{"location":"gui/database/#sicherheits-und-betriebsregeln","title":"Sicherheits- und Betriebsregeln","text":"
  • Aktionen wirken direkt auf produktive Historie/Dateipfade.
  • Vor Import oder L\u00f6schung immer Pfad und Ziel pr\u00fcfen.
  • Diese Seite nur f\u00fcr Recovery-Szenarien nutzen, nicht f\u00fcr normalen Tagesbetrieb.
"},{"location":"gui/downloads/","title":"Downloads","text":"

Auf Downloads werden ZIP-Archive f\u00fcr Historie-Artefakte erstellt und bereitgestellt.

"},{"location":"gui/downloads/#was-heruntergeladen-werden-kann","title":"Was heruntergeladen werden kann","text":"

Ein Download-Eintrag referenziert immer einen Historie-Job und genau ein Ziel:

  • RAW
  • Output

Erzeugt wird ein ZIP-Archiv im Download-Verzeichnis des Backends.

"},{"location":"gui/downloads/#statusmodell","title":"Statusmodell","text":"Status Bedeutung queued Eintrag erstellt, wartet auf Verarbeitung processing ZIP wird gerade gebaut ready Archiv fertig, Download-Link aktiv failed Erzeugung oder Zugriff fehlgeschlagen"},{"location":"gui/downloads/#eintrag-anlegen","title":"Eintrag anlegen","text":"

Startpunkt ist die Historie:

  1. Job \u00f6ffnen.
  2. Download einreihen.
  3. Ziel (RAW oder Output) w\u00e4hlen.
  4. Status in Downloads verfolgen.
"},{"location":"gui/downloads/#wichtige-laufzeitdetails","title":"Wichtige Laufzeitdetails","text":"
  • Wenn bereits ein passendes, aktuelles Archiv existiert, kann der Eintrag wiederverwendet werden.
  • Nach Backend-Neustart werden unterbrochene queued/processing-Eintr\u00e4ge gepr\u00fcft und fortgesetzt.
  • Fehlt eine erwartete ZIP-Datei bei ready, wird der Eintrag auf failed gesetzt.
"},{"location":"gui/downloads/#download-auslosen","title":"Download ausl\u00f6sen","text":"

Bei Status ready:

  • Download-Button l\u00e4dt die ZIP direkt aus /api/downloads/:id/file.
"},{"location":"gui/downloads/#eintrage-entfernen","title":"Eintr\u00e4ge entfernen","text":"

L\u00f6schen entfernt:

  • Queue-Metadaten
  • zugeh\u00f6rige Archivdatei

Nicht erlaubt:

  • L\u00f6schen w\u00e4hrend queued/processing
"},{"location":"gui/downloads/#echtzeitaktualisierung","title":"Echtzeitaktualisierung","text":"

Die Seite reagiert auf DOWNLOADS_UPDATED per WebSocket. Dadurch sind Statuswechsel ohne Reload sichtbar.

"},{"location":"gui/hardware/","title":"Hardware","text":"

Die Seite Hardware ist die ausf\u00fchrliche Detailansicht f\u00fcr das Live-Monitoring aus dem Ripper.

"},{"location":"gui/hardware/#was-die-seite-zeigt","title":"Was die Seite zeigt","text":"
  • aktuelle CPU-Auslastung
  • RAM-Auslastung
  • GPU-Auslastung und VRAM, falls vorhanden
  • Temperaturen
  • Verlaufshistorie f\u00fcr Auslastung und Temperatur
  • Zeitfenster f\u00fcr 1h, 6h, 24h, 4d
"},{"location":"gui/hardware/#live-bereich","title":"Live-Bereich","text":"

Oben zeigt die Seite:

  • ob Monitoring aktiv ist
  • aktuelles Polling-Intervall
  • Zeitpunkt der letzten Messung

Wenn Monitoring deaktiviert ist, f\u00fchrt die Seite direkt zu Settings.

"},{"location":"gui/hardware/#historie","title":"Historie","text":"

Die Historie l\u00e4dt Messpunkte aus dem Backend und zeigt:

  • Auslastung als Linienchart
  • Temperatur als Linienchart
  • umschaltbare Serien f\u00fcr CPU, RAM und GPU

Das ist besonders n\u00fctzlich bei:

  • mehreren parallelen Encodes
  • Fehlersuche bei Hitzespitzen
  • Absch\u00e4tzung, ob weitere Jobs sinnvoll gestartet werden k\u00f6nnen
"},{"location":"gui/hardware/#relevante-settings","title":"Relevante Settings","text":"
  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)

Au\u00dferdem sinnvoll:

  • Externe Speicher, damit Speicherst\u00e4nde im Ripper sinnvoll angezeigt werden
"},{"location":"gui/history/","title":"Historie","text":"

Historie ist die Kontroll- und Nachbearbeitungsoberfl\u00e4che f\u00fcr alle bereits angelegten Jobs.

"},{"location":"gui/history/#hauptansicht","title":"Hauptansicht","text":"

Filter und Arbeitsmittel:

  • Suche
  • Statusfilter
  • Mediumfilter
  • Sortierung
  • Listen-/Grid-Layout

Jeder Eintrag zeigt auf einen Blick:

  • Titel, Jahr, Poster oder Cover
  • Status und Zeitstempel
  • RAW- und Output-Verf\u00fcgbarkeit
  • Medien- und Containerhinweise
"},{"location":"gui/history/#detaildialog","title":"Detaildialog","text":"

Der Detaildialog b\u00fcndelt:

  • Metadaten
  • Jobstatus und Fehlertexte
  • RAW- und Output-Pfade
  • Encode-Plan und Trackauswahl
  • ausgef\u00fchrte Kommandos
  • Prozesslog
  • verf\u00fcgbare Folgeaktionen

Bei Seriencontainern und Multipart-Jobs wird container- und child-orientiert dargestellt.

"},{"location":"gui/history/#nachbearbeitungsaktionen","title":"Nachbearbeitungsaktionen","text":"Aktion Typischer Einsatz Technische Wirkung TMDb neu zuweisen falsches Match, anderer Film, andere Staffel Metadaten werden neu geschrieben; Poster, Jahr und ggf. Ordnername werden best effort aktualisiert Review neu starten neue Track-/Titelbewertung n\u00f6tig Review wird aus vorhandenem RAW neu aufgebaut RAW neu encodieren neuer Encode mit vorhandenem RAW startet Encode ohne neuen Disc-Rip Encode neu starten gleiche best\u00e4tigte Auswahl erneut fahren letzter best\u00e4tigter Plan wird geladen Retry Rippen Rip oder Analyse erneut ansto\u00dfen neuer Rip-Lauf inklusive RAW-Phase

Relevante Settings:

  • handbrake_restart_delete_incomplete_output
  • generate_nfo_after_encode
"},{"location":"gui/history/#loschaktionen-und-vorschau","title":"L\u00f6schaktionen und Vorschau","text":"

Vor dem endg\u00fcltigen L\u00f6schen zeigt Ripster eine Vorschau mit:

  • RAW-Kandidaten
  • Movie-/Episode-Kandidaten
  • Related-Scope f\u00fcr Container, Kinder und verbundene Jobs

Wichtige Punkte:

  • Pfade sind selektierbar
  • bei mehreren RAW-Kandidaten muss mindestens ein RAW-Pfad gew\u00e4hlt werden
  • Schutzlogik verhindert L\u00f6schungen au\u00dferhalb erlaubter Root-Verzeichnisse
"},{"location":"gui/history/#serien-und-multipart-sicht","title":"Serien- und Multipart-Sicht","text":""},{"location":"gui/history/#serien","title":"Serien","text":"
  • Container zeigt den aggregierten Zustand der Child-Jobs
  • Disk- und Episodenaktionen k\u00f6nnen child-spezifisch ausgef\u00fchrt werden
  • Im Ripper \u00f6ffnen hilft bei offenen Reviews
"},{"location":"gui/history/#multipart","title":"Multipart","text":"
  • gemeinsamer Container mit Disc-Childs
  • Disc-Nummern bleiben pro Child nachvollziehbar
  • Delete-Preview kann Related-Pfade gemeinsam aufl\u00f6sen
"},{"location":"gui/history/#logs-sinnvoll-nutzen","title":"Logs sinnvoll nutzen","text":"
  • Tail laden f\u00fcr schnellen Fehlerkontext
  • Vollst\u00e4ndiges Log laden f\u00fcr tiefe Analyse

Empfehlung:

  1. erst den Tail pr\u00fcfen
  2. dann die Stelle im Log eingrenzen
  3. anschlie\u00dfend die passende Wiederanlauf-Aktion w\u00e4hlen
"},{"location":"gui/ripper/","title":"Ripper","text":"

Die Seite Ripper ist die Live-Steuerung der Disc-Pipeline. Hier laufen Disc-Erkennung, Queue, manuelle Entscheidungen, Review und aktive Jobs zusammen.

"},{"location":"gui/ripper/#seitenaufbau","title":"Seitenaufbau","text":"

Die wichtigsten Bereiche:

  1. Hardware
  2. Job Queue
  3. Skript- / Cron-Status
  4. Job \u00dcbersicht
  5. Disk-Information
"},{"location":"gui/ripper/#1-hardware","title":"1. Hardware","text":"

Die Hardware-Karte zeigt live:

  • CPU
  • RAM
  • GPU, falls vorhanden
  • freie Speicherst\u00e4nde der konfigurierten Pfade

Aktionen:

  • Klick auf das Hardware-Symbol \u00f6ffnet die Seite Hardware

Relevante Settings:

  • Hardware Monitoring aktiviert
  • Hardware Monitoring Intervall (ms)
  • Externe Speicher
"},{"location":"gui/ripper/#2-job-queue","title":"2. Job Queue","text":"

Es gibt zwei operative Zonen:

  • laufende Jobs
  • Warteschlange

M\u00f6gliche Queue-Eintr\u00e4ge:

  • normale Job-Starts
  • Retry Rippen
  • RAW neu encodieren
  • Encode neu starten
  • Review neu starten
  • Audio CD starten
  • Skript
  • Skriptkette
  • Warten

Wichtige Regeln:

  • Reihenfolge ist per Drag-and-Drop \u00e4nderbar
  • Warten blockiert nachfolgende Starts, bis keine aktive Verarbeitung mehr l\u00e4uft
  • Queue-Eintr\u00e4ge k\u00f6nnen auch ohne Medienjob existieren

Relevante Settings:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
  • Audio CDs: Queue-Reihenfolge \u00fcberspringen
"},{"location":"gui/ripper/#3-skript-cron-status","title":"3. Skript- / Cron-Status","text":"

Zeigt Runtime-Aktivit\u00e4ten:

  • laufende Skripte
  • laufende Ketten
  • Cron-Ausf\u00fchrungen
  • k\u00fcrzlich abgeschlossene Aktivit\u00e4ten

Aktionen:

  • N\u00e4chster Schritt bei Ketten
  • Abbrechen
  • Liste leeren
"},{"location":"gui/ripper/#4-job-ubersicht","title":"4. Job \u00dcbersicht","text":"

Die Jobliste ist der zentrale Arbeitsbereich. Ein Klick \u00f6ffnet den jeweiligen Pipeline-Status.

"},{"location":"gui/ripper/#zustandsabhangige-hauptaktionen","title":"Zustandsabh\u00e4ngige Hauptaktionen","text":"Zustand Typische Aktion Ergebnis Medium erkannt Analyse starten MakeMKV-Analyse beginnt Metadatenauswahl Metadaten \u00f6ffnen TMDb-Dialog f\u00fcr Film/Serie Warte auf Auswahl Entscheidung best\u00e4tigen Flow geht an die passende Stelle weiter Startbereit Job starten Rip oder RAW-basierte Pr\u00fcfung startet Bereit zum Encodieren Encoding starten HandBrake startet mit best\u00e4tigter Auswahl laufend Abbrechen Job wird gestoppt Fehler / Abgebrochen Retry Rippen neuer Rip-Anlauf"},{"location":"gui/ripper/#was-warte-auf-auswahl-heute-bedeuten-kann","title":"Was Warte auf Auswahl heute bedeuten kann","text":"

Der Status ist nicht nur f\u00fcr eine einzige Entscheidung da. Im aktuellen Stand gibt es drei typische F\u00e4lle:

"},{"location":"gui/ripper/#vorhandenes-raw","title":"Vorhandenes RAW","text":"

Ripster hat zu den Metadaten bereits ein passendes RAW gefunden. Dann entscheidest du:

  • mit RAW weiterarbeiten
  • RAW l\u00f6schen und neu rippen
  • in passenden Film-F\u00e4llen optional Multipart mit Orphan-RAW bilden
"},{"location":"gui/ripper/#playlist-auswahl","title":"Playlist-Auswahl","text":"

Bei mehrdeutigen Blu-rays oder bestimmten DVD-F\u00e4llen musst du eine Playlist best\u00e4tigen. Die Liste zeigt unter anderem:

  • Playlist-Datei
  • Titel-ID
  • Laufzeit
  • Score
  • Empfehlung
  • Segment- und Audio-Vorschau

Relevante Settings:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
  • Bei manueller Auswahl senden f\u00fcr PushOver
"},{"location":"gui/ripper/#titelauswahl-playall-grenzfall","title":"Titelauswahl / PlayAll-Grenzfall","text":"

Wenn Ripster mehrere HandBrake-Titel als plausibel erkannt hat, musst du einen oder mehrere Titel best\u00e4tigen. Bei Serien kann das der Grenzfall PlayAll oder Doppelfolge? sein.

"},{"location":"gui/ripper/#5-review-bereich-bereit-zum-encodieren","title":"5. Review-Bereich (Bereit zum Encodieren)","text":"

Hier triffst du die eigentliche Encode-Entscheidung.

Du legst fest:

  • welchen Titel Ripster encodieren soll
  • welche Audio-Spuren \u00fcbernommen werden
  • welche Untertitel \u00fcbernommen, erzwungen oder eingebrannt werden
  • welches User-Preset oder HandBrake-Preset verwendet wird
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen

Wichtig:

  • ohne diese Best\u00e4tigung startet kein produktiver Encode
  • bei Multipart-Locks k\u00f6nnen Einstellungen von einer Referenz-Disc \u00fcbernommen und gesperrt sein
"},{"location":"gui/ripper/#welche-settings-hier-direkt-sichtbar-werden","title":"Welche Settings hier direkt sichtbar werden","text":"
  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Ausgabeformat
  • Standard-Zuordnungen aus Settings -> Encode-Presets
"},{"location":"gui/ripper/#raw-ordnerphasen","title":"RAW-Ordnerphasen","text":"

Der Ripper arbeitet mit drei RAW-Zust\u00e4nden:

  • Incomplete_... w\u00e4hrend eines unvollst\u00e4ndigen Rips
  • Rip_Complete_... nach erfolgreichem Rip, vor dem finalen Encode
  • ohne Prefix nach erfolgreichem Encode

Das ist wichtig f\u00fcr:

  • Recovery
  • RAW-Wiederverwendung
  • Delete-Preview in Historie
"},{"location":"gui/ripper/#disk-information","title":"Disk-Information","text":"

Zeigt aktuelle Laufwerksdaten:

  • Device-Pfad
  • Modell
  • Disc-Label
  • Mount-Informationen

Aktionen:

  • Laufwerk neu lesen
  • Disk neu analysieren
  • Metadaten-Dialog \u00f6ffnen

Hinweis:

  • Laufwerk neu lesen ist nicht mehr an einen festen Pipeline-State gebunden
"},{"location":"gui/ripper/#wichtige-dialoge","title":"Wichtige Dialoge","text":""},{"location":"gui/ripper/#metadaten-auswahlen","title":"Metadaten ausw\u00e4hlen","text":"

Im Dialog best\u00e4tigst du Film- oder Serienmetadaten aus TMDb.

Sonderf\u00e4lle:

  • Film-Duplikat: \u00dcbernahme erzwingen oder Multipart movie
  • Serie: Disc-Nummer ist Pflicht
"},{"location":"gui/ripper/#vorhandenes-raw-erkannt","title":"Vorhandenes RAW erkannt","text":"

Wenn zu den Metadaten bereits RAW existiert, fordert Ripster eine explizite Entscheidung:

  • vorhandenes RAW verwenden
  • RAW verwerfen/l\u00f6schen und neu rippen
"},{"location":"gui/ripper/#queue-eintrag-einfugen","title":"Queue-Eintrag einf\u00fcgen","text":"

Du kannst gezielt ab Position einf\u00fcgen:

  • Skript
  • Skriptkette
  • Wartezeit
"},{"location":"gui/ripper/#audible-activation-bytes-eintragen","title":"Audible Activation Bytes eintragen","text":"

Wenn f\u00fcr eine AAX-Datei keine Activation Bytes verf\u00fcgbar sind, \u00f6ffnet Ripster einen Dialog zur manuellen Eingabe.

  • Format: genau 8 Hex-Zeichen, z. B. 1a2b3c4d
  • Speicherung: lokal im Activation-Bytes-Cache
  • Wirkung: der Audiobook-Flow kann anschlie\u00dfend fortgesetzt werden
"},{"location":"gui/ripper/#siehe-auch","title":"Siehe auch","text":"
  • Hardware
  • Settings
  • Workflows aus Nutzersicht
"},{"location":"gui/settings/","title":"Settings","text":"

Die Seite Settings ist das Kontrollzentrum f\u00fcr Laufzeitverhalten, Standardwerte und Automatisierung. Alles, was sp\u00e4tere Jobs automatisch tun oder vorschlagen, wird hier vorbereitet.

"},{"location":"gui/settings/#tab-uberblick","title":"Tab-\u00dcberblick","text":"Tab Zweck Konfiguration alle fachlichen Einstellungen aus der GUI Scripte einzelne Bash-Skripte anlegen, testen und sortieren Skriptketten mehrstufige Abl\u00e4ufe aus Skript- und Warte-Schritten bauen Encode-Presets eigene Video-Presets und Standard-Zuordnungen pflegen Cronjobs zeitgesteuerte Ausf\u00fchrung von Skripten oder Ketten"},{"location":"gui/settings/#tab-konfiguration","title":"Tab Konfiguration","text":""},{"location":"gui/settings/#bedienlogik","title":"Bedienlogik","text":"
  1. Felder \u00e4ndern
  2. \u00c4nderungen speichern klicken
  3. erst dann gelten die neuen Werte f\u00fcr k\u00fcnftige Starts, Reviews oder Scheduler

Ausnahmen:

  • Expertenmodus wird sofort gespeichert
  • Buttons wie PushOver Test, Coverarts pr\u00fcfen oder der MakeMKV-Betakey-Import l\u00f6sen direkte Aktionen aus
"},{"location":"gui/settings/#toolbar-aktionen","title":"Toolbar-Aktionen","text":"
  • \u00c4nderungen speichern: schreibt nur ge\u00e4nderte Felder
  • \u00c4nderungen verwerfen: setzt den Formularzustand zur\u00fcck
  • Neu laden: l\u00e4dt Schema und Werte neu
  • PushOver Test: sendet eine Testnachricht mit den aktuellen PushOver-Werten
  • Coverarts pr\u00fcfen: startet den Coverart-Recovery-Lauf sofort
"},{"location":"gui/settings/#was-die-kategorien-im-alltag-steuern","title":"Was die Kategorien im Alltag steuern","text":""},{"location":"gui/settings/#benachrichtigungen","title":"Benachrichtigungen","text":"

Hier steuerst du zwei Dinge:

  • ob und wohin Ripster PushOver-Nachrichten sendet
  • bei welchen Ereignissen Ripster \u00fcberhaupt benachrichtigt

Wichtig:

  • PushOver aktiviert ist der Master-Schalter
  • Bei manueller Auswahl senden ist besonders relevant f\u00fcr Playlist-, RAW- oder Titelentscheidungen
  • der Expertenmodus blendet zus\u00e4tzliche technische Felder in der gesamten Settings-Seite ein
"},{"location":"gui/settings/#laufwerk","title":"Laufwerk","text":"

Diese Kategorie beeinflusst, wie Ripster optische Laufwerke findet und \u00fcberwacht.

Typische Fragen:

  • Soll Ripster Laufwerke automatisch erkennen?
  • Soll ein bestimmtes Laufwerk fest an einen MakeMKV-Index gebunden werden?
  • Soll das Laufwerk nach erfolgreichem Rip automatisch auswerfen?

Das ist vor allem wichtig bei:

  • mehreren Laufwerken
  • USB-SATA-Adaptern
  • Hosts mit instabilen Device-Namen
"},{"location":"gui/settings/#logging","title":"Logging","text":"

Diese Felder \u00e4ndern nicht die Job-Logs auf Platte, sondern die Ausgabe im Server-Terminal.

Damit steuerst du zum Beispiel:

  • ob start.sh oder ein Terminal-Run sehr gespr\u00e4chig sein darf
  • ob HTTP-Requests im Terminal sichtbar sein sollen
  • ob DEBUG/INFO/WARN/ERROR dort mitlaufen
"},{"location":"gui/settings/#metadaten","title":"Metadaten","text":"

Hier legst du fest, wie Ripster mit TMDb, Covern und NFO-Dateien umgeht.

Besonders wichtig:

  • ohne TMDb Read Access Token funktionieren Film-/Seriensuche und Neu-Zuordnung nur eingeschr\u00e4nkt oder gar nicht
  • Film-Sprache und Fallback Sprache bestimmen, welche Titel, Beschreibungen und Staffelinformationen bevorzugt werden
  • Coverart-Nachladen aktiv hilft bei nachtr\u00e4glich fehlenden Postern/Covern
"},{"location":"gui/settings/#monitoring","title":"Monitoring","text":"

Steuert das Hardware-Monitoring f\u00fcr:

  • CPU
  • RAM
  • GPU
  • Speicherst\u00e4nde

Diese Werte erscheinen:

  • kompakt im Ripper
  • ausf\u00fchrlich in der Seite Hardware
"},{"location":"gui/settings/#pfade","title":"Pfade","text":"

Hier legst du fest, wohin Ripster schreibt und wie Dateien benannt werden.

Die Felder steuern:

  • RAW-Verzeichnisse pro Medium
  • Zielordner f\u00fcr Filme, Serien, CDs, Audiobooks, Converter und Downloads
  • Eigent\u00fcmer per user:gruppe
  • Templates f\u00fcr Datei- und Ordnernamen

Praxisbeispiele:

  • Serien getrennt von Filmen ablegen
  • RAW auf gro\u00dfe HDD, Final-Output auf NAS
  • Audiobooks kapitelweise in Unterordnern strukturieren
"},{"location":"gui/settings/#converter","title":"Converter","text":"

Diese Kategorie wirkt nur auf die Seite Converter.

Sie steuert:

  • welche Dateiendungen der Upload und der Verzeichnisscan akzeptieren
  • ob der Converter-RAW-Baum automatisch neu gescannt wird
  • wie h\u00e4ufig dieses Polling l\u00e4uft
"},{"location":"gui/settings/#tools","title":"Tools","text":"

Diese Kategorie entscheidet \u00fcber das technische Verhalten der eigentlichen Pipeline.

Dazu geh\u00f6ren:

  • Pfade/Befehle f\u00fcr externe Tools
  • MakeMKV-Filter und Rip-Modi
  • HandBrake-Presets und Extra-Args
  • Vorauswahl von Audio-/Untertitelsprachen in der Review
  • Ausgabeformate
  • Queue- und Parallelit\u00e4tsregeln
  • Timeout f\u00fcr Script-Tests

F\u00fcr die Nutzer-Workflows besonders relevant:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
  • HandBrake Preset und HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
"},{"location":"gui/settings/#kategorie-pfade-besondere-interaktion","title":"Kategorie Pfade: Besondere Interaktion","text":"

Die Pfad-Kategorie hat eine eigene Darstellung:

  • Tabelle Effektive Pfade: zeigt die aktuell wirklich verwendeten Laufzeitpfade inklusive Fallbacks
  • Accordion pro Bereich wie Blu-ray, DVD, CD / Audio, Audiobook, Converter, Downloads, Logs
  • Owner-Felder (*_owner) erscheinen direkt beim zugeh\u00f6rigen Pfad
  • Owner-Felder sind deaktiviert, solange der zugeh\u00f6rige Pfad leer ist
"},{"location":"gui/settings/#spezial-editoren","title":"Spezial-Editoren","text":"
  • drive_devices: Editor f\u00fcr mehrere Laufwerke mit Pfad und MakeMKV-Index
  • external_storage_paths: Liste aus Anzeigename und Pfad f\u00fcr die Speicheranzeige
  • converter_scan_extensions: Auswahl der erlaubten Upload-/Scan-Endungen
  • makemkv_registration_key: inkl. Betakey-Hinweis und \u00dcbernahme-Button
"},{"location":"gui/settings/#wichtig-fur-reviews-und-workflows","title":"Wichtig f\u00fcr Reviews und Workflows","text":"

Die Seite Settings bestimmt direkt, was Nutzer sp\u00e4ter im Workflow sehen:

  • Playlist-Kandidaten werden durch Minimale Titell\u00e4nge und TMDb Runtime-Abzug ... beeinflusst
  • Audio-/Untertitel-Vorauswahlen in Bereit zum Encodieren h\u00e4ngen an den Review-Sprachfeldern
  • automatisch vorgeschlagene Presets h\u00e4ngen an den Standard-Zuordnungen unter Encode-Presets
  • Queue-Verhalten im Ripper h\u00e4ngt an den drei Parallelit\u00e4tsfeldern plus Audio CDs: Queue-Reihenfolge \u00fcberspringen
"},{"location":"gui/settings/#tab-scripte","title":"Tab Scripte","text":"

Funktionen:

  • Skript anlegen
  • Skript bearbeiten
  • Skript l\u00f6schen
  • Skript testen
  • Reihenfolge per Drag-and-Drop \u00e4ndern
  • Favorit markieren

Das Testergebnis zeigt:

  • Erfolg oder Fehler
  • Exit-Code
  • Dauer
  • stdout/stderr
  • Timeout, falls Script-Test Timeout (ms) greift
"},{"location":"gui/settings/#tab-skriptketten","title":"Tab Skriptketten","text":"

Skriptketten bestehen aus Schritten:

  • Skript
  • Warten (Sekunden)

Funktionen:

  • Ketten anlegen, bearbeiten, l\u00f6schen
  • Reihenfolge der Ketten \u00e4ndern
  • einzelne Ketten testen
  • Schritte innerhalb der Kette per Drag-and-Drop sortieren

Wichtig:

  • dieselben Skripte k\u00f6nnen sowohl in Jobs als auch in Ketten und Cronjobs wiederverwendet werden
"},{"location":"gui/settings/#tab-encode-presets","title":"Tab Encode-Presets","text":"

Hier werden Video-Standards f\u00fcr Disc- und Converter-Workflows verwaltet.

"},{"location":"gui/settings/#standard-zuordnungen","title":"Standard-Zuordnungen","text":"

Es gibt vier feste Slots:

  • Blu-ray Film
  • Blu-ray Serie
  • DVD Film
  • DVD Serie

Wenn f\u00fcr einen Workflow hier ein Default gesetzt ist, erscheint dieses User-Preset sp\u00e4ter in der Review bereits vorausgew\u00e4hlt.

"},{"location":"gui/settings/#preset-inhalt","title":"Preset-Inhalt","text":"

Ein User-Preset besteht aus:

  • Name
  • Medientyp (all, bluray, dvd)
  • HandBrake-Preset
  • Extra Args
  • optionaler Beschreibung
"},{"location":"gui/settings/#tab-cronjobs","title":"Tab Cronjobs","text":"

Funktionen:

  • Cronjob anlegen, bearbeiten, l\u00f6schen
  • Cron-Ausdruck live validieren
  • Quelle w\u00e4hlen: Skript oder Skriptkette
  • Aktiv- und PushOver-Status pro Job setzen
  • Jetzt ausf\u00fchren
  • Lauf-Logs \u00f6ffnen

Die Runtime-Aktivit\u00e4ten der laufenden Cronjobs werden zus\u00e4tzlich live angezeigt.

"},{"location":"gui/settings/#expertenbereich-activation-bytes-cache","title":"Expertenbereich: Activation Bytes Cache","text":"

Dieser Block wird nur im Expertenmodus angezeigt.

Er zeigt lokal bekannte AAX-Activation-Bytes mit:

  • Pr\u00fcfsumme
  • Activation Bytes
  • Speicherzeitpunkt

Das hilft bei Audiobook-Workflows, wenn dieselbe Datei oder derselbe Hash sp\u00e4ter erneut auftaucht.

"},{"location":"gui/settings/#validierung-von-template-feldern","title":"Validierung von Template-Feldern","text":"

Template-Felder akzeptieren nur:

  • Buchstaben und Ziffern
  • Leerzeichen
  • _ und -
  • Platzhalter in {...} oder ${...}
  • / f\u00fcr Unterordner

Damit verhindert Ripster fehlerhafte Dateinamen schon beim Speichern.

"},{"location":"gui/settings/#siehe-auch","title":"Siehe auch","text":"
  • Alle Einstellungen
  • Ripper
  • Workflows aus Nutzersicht
"},{"location":"gui/tmdb-migration/","title":"TMDb Migration","text":"

Die Seite TMDb Migration ist eine Sonderansicht f\u00fcr \u00e4ltere Bestandsjobs, die noch nicht als auf TMDb migriert markiert sind.

"},{"location":"gui/tmdb-migration/#zugriff","title":"Zugriff","text":"
  • Direktlink: /tmdb-migration
  • nicht in der normalen Top-Navigation verlinkt
"},{"location":"gui/tmdb-migration/#wofur-die-seite-gedacht-ist","title":"Wof\u00fcr die Seite gedacht ist","text":"

Typische Einsatzf\u00e4lle:

  • Altbestand aus fr\u00fcheren St\u00e4nden bereinigen
  • mehrere Jobs nacheinander auf aktuelle TMDb-Metadaten umstellen
  • Historie konsistent auf den heutigen Metadaten-Workflow bringen
"},{"location":"gui/tmdb-migration/#funktionsweise","title":"Funktionsweise","text":"

Die Seite l\u00e4dt offene Migrationskandidaten und zeigt:

  • Job-ID
  • Titel
  • Jahr
  • Medium
  • aktuellen Status

Aktionen:

  • Liste neu laden
  • Start
  • Stop
"},{"location":"gui/tmdb-migration/#ablauf-einer-sequenz","title":"Ablauf einer Sequenz","text":"
  1. Jobliste laden
  2. Start
  3. der bekannte TMDb-Metadaten-Dialog \u00f6ffnet sich f\u00fcr den ersten Job
  4. nach erfolgreicher \u00dcbernahme plant Ripster den n\u00e4chsten Job mit Cooldown

Wichtig:

  • zwischen zwei Jobs liegt bewusst eine Wartezeit von mindestens 10 Sekunden
  • damit wird die TMDb-API bei Serienmigrationen nicht unn\u00f6tig belastet
"},{"location":"gui/tmdb-migration/#relevante-settings","title":"Relevante Settings","text":"
  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache

Ohne diese Einstellungen ist die Migration nicht sinnvoll nutzbar.

"},{"location":"pipeline/","title":"Anhang: Pipeline intern","text":"

Dieser Abschnitt beschreibt die technische Pipeline-Logik hinter den UI-Workflows.

  • Workflow & Zust\u00e4nde

    Zustandsmodell, \u00dcberg\u00e4nge, Queue-Verhalten.

    Workflow

  • Encode-Planung

    Aufbereitung von Titeln/Tracks und Best\u00e4tigungslogik.

    Encoding

  • Playlist-Analyse

    Bewertung mehrdeutiger Blu-ray-Playlists.

    Playlist-Analyse

  • Pre-/Post-Encode-Ausf\u00fchrungen

    Skript- und Kettenlauf vor/nach dem Encoding.

    Encode-Skripte

"},{"location":"pipeline/#zuruck-zum-handbuch","title":"Zur\u00fcck zum Handbuch","text":"
  • Workflows aus Nutzersicht
"},{"location":"pipeline/encoding/","title":"Encode-Planung & Track-Auswahl","text":"

Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.

"},{"location":"pipeline/encoding/#ablauf","title":"Ablauf","text":"
Quelle bestimmen (Disc/RAW)\n  -> HandBrake-Scan (--scan --json)\n  -> Plan erstellen (Titel, Audio, Untertitel)\n  -> Status: Bereit zum Encodieren\n  -> Benutzer bestaetigt Auswahl\n  -> finaler HandBrake-Aufruf\n
"},{"location":"pipeline/encoding/#review-inhalt-status-bereit-zum-encodieren","title":"Review-Inhalt (Status: Bereit zum Encodieren)","text":"
  • ausw\u00e4hlbarer Encode-Titel
  • Audio-Track-Auswahl
  • Untertitel-Track-Auswahl inkl. Flags
  • burnIn
  • forced
  • defaultTrack
  • optionale User-Presets (HandBrake Preset + Extra Args)
  • optionale Pre-/Post-Skripte und Ketten
"},{"location":"pipeline/encoding/#bestaetigung-confirm-encode","title":"Bestaetigung (confirm-encode)","text":"

Typischer Payload:

{\n  \"selectedEncodeTitleId\": 1,\n  \"selectedTrackSelection\": {\n    \"1\": {\n      \"audioTrackIds\": [1, 2],\n      \"subtitleTrackIds\": [3]\n    }\n  },\n  \"selectedPreEncodeScriptIds\": [1],\n  \"selectedPostEncodeScriptIds\": [2],\n  \"selectedPreEncodeChainIds\": [3],\n  \"selectedPostEncodeChainIds\": [4],\n  \"selectedUserPresetId\": 5\n}\n

Die best\u00e4tigte Auswahl wird im Job gespeichert und f\u00fcr Neustarts wiederverwendet.

"},{"location":"pipeline/encoding/#handbrake-aufruf","title":"HandBrake-Aufruf","text":"

Grundstruktur:

HandBrakeCLI \\\n  -i <input> \\\n  -o <output> \\\n  -t <titleId> \\\n  -Z \"<preset>\" \\\n  <extra-args> \\\n  -a <audioTrackIds|none> \\\n  -s <subtitleTrackIds|none>\n

Untertitel-Flags werden bei Bedarf erg\u00e4nzt:

  • --subtitle-burned=<id>
  • --subtitle-default=<id>
  • --subtitle-forced=<id> oder --subtitle-forced
"},{"location":"pipeline/encoding/#pre-post-encode-ausfuhrungen","title":"Pre-/Post-Encode-Ausf\u00fchrungen","text":"
  • Pre-Encode l\u00e4uft vor HandBrake
  • Post-Encode l\u00e4uft nach HandBrake

Fehlerverhalten:

  • Pre-Encode-Fehler: Job endet mit Status Fehler (Encode startet nicht)
  • Post-Encode-Fehler: Job kann Fertig bleiben, enth\u00e4lt aber Fehlerhinweis/Script-Summary
"},{"location":"pipeline/encoding/#dateinamenordner","title":"Dateinamen/Ordner","text":"

Der finale Outputpfad wird aus den Templates in den Settings aufgebaut.

Platzhalter:

  • ${title}
  • ${year}
  • ${imdbId}

Ung\u00fcltige Dateizeichen werden bereinigt.

"},{"location":"pipeline/playlist-analysis/","title":"Playlist-Analyse","text":"

Ripster analysiert bei Blu-ray-\u00e4hnlichen Quellen Playlists und fordert bei Mehrdeutigkeit eine manuelle Auswahl an.

"},{"location":"pipeline/playlist-analysis/#ziel","title":"Ziel","text":"

Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.

"},{"location":"pipeline/playlist-analysis/#eingabedaten","title":"Eingabedaten","text":"

Die Analyse basiert auf MakeMKV-Infos (u. a. Playlist-/Segment-Struktur, Laufzeiten, Titelzuordnung).

"},{"location":"pipeline/playlist-analysis/#auswertung-vereinfacht","title":"Auswertung (vereinfacht)","text":"

F\u00fcr Kandidaten werden u. a. ber\u00fccksichtigt:

  • Laufzeit
  • Segment-Reihenfolge
  • R\u00fcckw\u00e4rtsspr\u00fcnge/gro\u00dfe Spr\u00fcnge
  • Koh\u00e4renz linearer Segmentfolgen
  • Duplikatgruppen mit \u00e4hnlicher Laufzeit

Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.

"},{"location":"pipeline/playlist-analysis/#wann-muss-der-benutzer-entscheiden","title":"Wann muss der Benutzer entscheiden?","text":"

Wenn nach Filterung mehr als ein relevanter Kandidat \u00fcbrig bleibt, wechselt der Job in der GUI auf:

  • Warte auf Auswahl

Dann muss eine Playlist best\u00e4tigt werden, bevor der Workflow weiterl\u00e4uft.

"},{"location":"pipeline/playlist-analysis/#konfigurationseinfluss","title":"Konfigurationseinfluss","text":"Feld in Settings Wirkung Minimale Titell\u00e4nge (Minuten) Mindestlaufzeit f\u00fcr Kandidaten aus MakeMKV/Playlist-Analyse TMDb Runtime-Abzug f\u00fcr Playlistfilter (%) lockert bei Bedarf die untere Laufzeitgrenze relativ zur TMDb-Laufzeit, damit leicht k\u00fcrzere Hauptfassungen Kandidaten bleiben

Default ist aktuell 60 Minuten.

"},{"location":"pipeline/playlist-analysis/#ui-verhalten","title":"UI-Verhalten","text":"

Bei manueller Entscheidung zeigt der Ripper Kandidaten mit:

  • Playlist-Datei
  • Titel-ID
  • Laufzeit
  • Score
  • Empfehlung
  • Segment- und Audio-Vorschau

Nach Best\u00e4tigung:

  • mit vorhandenem RAW -> zur\u00fcck zu Mediainfo-Pruefung
  • ohne RAW -> Startpfad \u00fcber Startbereit / Rippen
"},{"location":"pipeline/post-encode-scripts/","title":"Encode-Skripte (Pre & Post)","text":"

Ripster kann Skripte und Skript-Ketten vor und nach dem Encode ausf\u00fchren.

"},{"location":"pipeline/post-encode-scripts/#ablauf","title":"Ablauf","text":"
Bereit zum Encodieren\n  -> Pre-Encode Skripte/Ketten\n  -> HandBrake Encoding\n  -> Post-Encode Skripte/Ketten\n  -> Fertig oder Fehler\n
"},{"location":"pipeline/post-encode-scripts/#auswahl-im-review","title":"Auswahl im Review","text":"

Im Review-Panel kannst du getrennt w\u00e4hlen:

  • selectedPreEncodeScriptIds
  • selectedPostEncodeScriptIds
  • selectedPreEncodeChainIds
  • selectedPostEncodeChainIds
"},{"location":"pipeline/post-encode-scripts/#fehlerverhalten","title":"Fehlerverhalten","text":"
  • Pre-Encode-Fehler stoppen die Kette und f\u00fchren zu Fehler.
  • Post-Encode-Fehler stoppen die restlichen Post-Schritte; Job kann dennoch Fertig sein (mit Fehlerzusatz im Status/Log).
"},{"location":"pipeline/post-encode-scripts/#verfugbare-umgebungsvariablen","title":"Verf\u00fcgbare Umgebungsvariablen","text":"

Beim Script-Run werden gesetzt:

  • RIPSTER_SCRIPT_RUN_AT
  • RIPSTER_JOB_ID
  • RIPSTER_JOB_TITLE
  • RIPSTER_MODE
  • RIPSTER_INPUT_PATH
  • RIPSTER_OUTPUT_PATH
  • RIPSTER_RAW_PATH
  • RIPSTER_SCRIPT_ID
  • RIPSTER_SCRIPT_NAME
  • RIPSTER_SCRIPT_SOURCE
"},{"location":"pipeline/post-encode-scripts/#skript-ketten","title":"Skript-Ketten","text":"

Ketten unterst\u00fctzen zwei Step-Typen:

  • script (f\u00fchrt ein hinterlegtes Skript aus)
  • wait (wartet waitSeconds)

Bei Fehler in einem Script-Step wird die Kette abgebrochen.

"},{"location":"pipeline/post-encode-scripts/#testlaufe","title":"Testl\u00e4ufe","text":"
  • Skript testen: POST /api/settings/scripts/:id/test
  • Kette testen: POST /api/settings/script-chains/:id/test

Ergebnisse enthalten Erfolg/Exit-Code, Laufzeit und stdout/stderr.

"},{"location":"pipeline/workflow/","title":"Workflow & Zust\u00e4nde","text":"

Ripster steuert den Ablauf als Zustandsmaschine.

"},{"location":"pipeline/workflow/#zustandsdiagramm-vereinfacht","title":"Zustandsdiagramm (vereinfacht)","text":"
flowchart LR\n    A[Bereit] --> B[Medium erkannt]\n    B --> C[Analyse]\n    C --> D[Metadatenauswahl]\n    D --> E[Startbereit]\n    E --> F[Rippen]\n    E --> G[Mediainfo-Pruefung]\n    G --> H[Warte auf Auswahl]\n    H --> G\n    G --> I[Bereit zum Encodieren]\n    I --> J[Encodieren]\n    J --> K[Fertig]\n    J --> L[Fehler]\n    F --> L\n    F --> M[Abgebrochen]
"},{"location":"pipeline/workflow/#statusliste-gui-anzeige","title":"Statusliste (GUI-Anzeige)","text":"Status in der GUI Bedeutung Bereit Wartet auf Disc Medium erkannt Disc wurde erkannt Analyse MakeMKV-Analyse l\u00e4uft Metadatenauswahl Metadaten m\u00fcssen best\u00e4tigt werden Warte auf Auswahl Playlist-Auswahl ist erforderlich Warte auf Auswahl auch f\u00fcr RAW-Entscheidung bei vorhandenen Quelldaten genutzt Startbereit kurzer \u00dcbergang vor Start Rippen MakeMKV-Rip l\u00e4uft Mediainfo-Pruefung Titel/Spuren werden ausgewertet Bereit zum Encodieren Review ist bereit Encodieren HandBrake l\u00e4uft CD-Metadatenauswahl CD-Metadaten m\u00fcssen best\u00e4tigt werden CD-Startbereit CD-Job wartet auf Start CD-Analyse CD-Track-/Strukturaufbereitung CD-Rippen Audio-CD-Rip l\u00e4uft CD-Encodieren CD-Encode l\u00e4uft Fertig erfolgreich abgeschlossen Abgebrochen manuell oder technisch abgebrochen Fehler fehlgeschlagen"},{"location":"pipeline/workflow/#typische-pfade","title":"Typische Pfade","text":""},{"location":"pipeline/workflow/#standardfall-kein-vorhandenes-raw","title":"Standardfall (kein vorhandenes RAW)","text":"
  1. Medium erkannt
  2. Analyse + Metadaten
  3. Rippen
  4. Mediainfo-Pruefung
  5. Bereit zum Encodieren
  6. Encodieren
  7. Fertig
"},{"location":"pipeline/workflow/#vorhandenes-raw","title":"Vorhandenes RAW","text":"

Startbereit springt direkt zu Mediainfo-Pruefung (kein neuer Rip).

"},{"location":"pipeline/workflow/#mehrdeutige-blu-ray-playlist","title":"Mehrdeutige Blu-ray-Playlist","text":"

Mediainfo-Pruefung -> Warte auf Auswahl bis Playlist best\u00e4tigt wurde.

"},{"location":"pipeline/workflow/#vorhandenes-raw-mit-nutzerentscheidung","title":"Vorhandenes RAW mit Nutzerentscheidung","text":"

Metadatenauswahl -> Warte auf Auswahl bis Entscheidung f\u00fcr Weiterverarbeitung (continue) oder Neustart getroffen wurde.

"},{"location":"pipeline/workflow/#cd-flow","title":"CD-Flow","text":"

CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig

"},{"location":"pipeline/workflow/#queue-verhalten","title":"Queue-Verhalten","text":"

Wenn der Wert Parallele Jobs erreicht ist:

  • neue Starts werden als Queue-Eintr\u00e4ge abgelegt
  • die Queue kann zus\u00e4tzlich Nicht-Job-Eintr\u00e4ge enthalten (Skript, Kette, Warten)
  • Reihenfolge ist per UI/API \u00e4nderbar
"},{"location":"pipeline/workflow/#abbruch-wiederaufnahme-neustart","title":"Abbruch, Wiederaufnahme, Neustart","text":"
  • Abbrechen: laufenden Job stoppen oder Queue-Eintrag entfernen
  • Retry Rippen: Fehler-/Abbruch-Job erneut starten
  • RAW neu encodieren: aus vorhandenem RAW neu encodieren
  • Review neu starten: Review aus RAW neu aufbauen
  • Encode neu starten: Encoding mit letzter best\u00e4tigter Auswahl neu starten
"},{"location":"tools/","title":"Anhang: Externe Tools","text":"

Ripster orchestriert externe CLI-Tools. Dieser Abschnitt erkl\u00e4rt deren Rolle im Gesamtsystem.

  • MakeMKV

    Disc-Analyse und Ripping.

    MakeMKV

  • HandBrake

    Video-Encoding inklusive Preset-Logik.

    HandBrake

  • MediaInfo

    Track-/Containeranalyse f\u00fcr Review und Auswahl.

    MediaInfo

"},{"location":"tools/handbrake/","title":"HandBrake","text":"

Ripster verwendet HandBrakeCLI f\u00fcr Scan und Encode.

"},{"location":"tools/handbrake/#verwendete-aufrufe","title":"Verwendete Aufrufe","text":""},{"location":"tools/handbrake/#scan-review-aufbau","title":"Scan (Review-Aufbau)","text":"
HandBrakeCLI --scan --json -i <input> -t 0\n
"},{"location":"tools/handbrake/#encode-vereinfacht","title":"Encode (vereinfacht)","text":"
HandBrakeCLI \\\n  -i <input> \\\n  -o <output> \\\n  -t <titleId> \\\n  -Z \"<preset>\" \\\n  <extra-args> \\\n  -a <audioTrackIds|none> \\\n  -s <subtitleTrackIds|none>\n

Optional erg\u00e4nzt Ripster:

  • --subtitle-burned=<id>
  • --subtitle-default=<id>
  • --subtitle-forced=<id> oder --subtitle-forced
"},{"location":"tools/handbrake/#presets-auslesen","title":"Presets auslesen","text":"

Ripster liest Presets mit:

HandBrakeCLI -z\n
"},{"location":"tools/handbrake/#relevante-felder-in-settings","title":"Relevante Felder in Settings","text":"Feldname in der GUI Bedeutung HandBrake Kommando CLI-Binary HandBrake Preset (Blu-ray/DVD) profilspezifisches Preset HandBrake Extra Args (Blu-ray/DVD) profilspezifische Zusatzargumente Ausgabeformat (Blu-ray/DVD) Dateiendung der finalen Datei Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen unvollst\u00e4ndige Ausgabe bei Neustart l\u00f6schen"},{"location":"tools/handbrake/#fortschritts-parsing","title":"Fortschritts-Parsing","text":"

Ripster parst HandBrake-Stderr (Prozent/ETA/Detail) und sendet WebSocket-Progress (PIPELINE_PROGRESS).

"},{"location":"tools/handbrake/#troubleshooting","title":"Troubleshooting","text":"
  • Preset nicht gefunden: Preset-Namen mit HandBrakeCLI -z pr\u00fcfen
  • sehr langsames Encoding: Preset/Extra-Args pr\u00fcfen (z. B. --encoder-preset)

Das Produktions-Installer-Script install.sh bietet eine Option zur Installation eines geb\u00fcndelten HandBrakeCLI-Binaries mit NVDEC-Unterst\u00fctzung (NVIDIA GPU-Dekodierung). Diese Option erscheint interaktiv w\u00e4hrend der Installation.

"},{"location":"tools/makemkv/","title":"MakeMKV","text":"

Ripster nutzt makemkvcon f\u00fcr Disc-Analyse und Rip.

"},{"location":"tools/makemkv/#verwendete-aufrufe","title":"Verwendete Aufrufe","text":""},{"location":"tools/makemkv/#analyse","title":"Analyse","text":"
makemkvcon -r info <source>\n

<source> ist typischerweise:

  • disc:<index> (Auto-Modus)
  • dev:/dev/sr0 (explicit)
  • file:<path> (Datei/Ordner-Analyse)
"},{"location":"tools/makemkv/#rip-mkv-modus","title":"Rip (MKV-Modus)","text":"
makemkvcon mkv <source> <title-or-all> <rawDir> [--minlength=...] [...extraArgs]\n
"},{"location":"tools/makemkv/#rip-backup-modus","title":"Rip (Backup-Modus)","text":"
makemkvcon backup <source> <rawDir> --decrypt\n
"},{"location":"tools/makemkv/#registrierungsschlussel-optional","title":"Registrierungsschl\u00fcssel (optional)","text":"

Wenn in Settings ein MakeMKV Key gesetzt ist, synchronisiert Ripster ihn nach:

~/.MakeMKV/settings.conf\n

Format:

app_Key = \"product-key\"\n

Zus\u00e4tzlich zeigt die UI unterhalb des Feldes den aktuellen Betakey an, der per Button in das Eingabefeld \u00fcbernommen werden kann.

"},{"location":"tools/makemkv/#relevante-felder-in-settings","title":"Relevante Felder in Settings","text":"Feldname in der GUI Bedeutung MakeMKV Kommando CLI-Binary MakeMKV Source Index Source-Index im Auto-Modus Minimale Titellaenge (Minuten) Mindestlaufzeitfilter MakeMKV Rip Modus (Blu-ray/DVD) mkv oder backup MakeMKV Analyze Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Analyse MakeMKV Rip Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Rip"},{"location":"tools/makemkv/#hinweise","title":"Hinweise","text":"
  • Blu-ray-Backups werden oft f\u00fcr robuste Playlist-Analyse genutzt.
  • MakeMKV-Ausgaben werden geparst und als makemkvInfo im Job gespeichert.
"},{"location":"tools/mediainfo/","title":"MediaInfo","text":"

Ripster nutzt mediainfo zur JSON-Analyse von Medien-Dateien.

"},{"location":"tools/mediainfo/#aufruf","title":"Aufruf","text":"
mediainfo --Output=JSON <input>\n

Der Input ist typischerweise eine RAW-Datei oder ein vom Workflow gew\u00e4hlter Inputpfad.

"},{"location":"tools/mediainfo/#verwendung-in-ripster","title":"Verwendung in Ripster","text":"
  • Track-/Codec-Metadaten f\u00fcr Review-Plan
  • Fallback-Informationen in bestimmten Analysepfaden
  • Persistenz als mediainfoInfo im Job
"},{"location":"tools/mediainfo/#relevante-settings","title":"Relevante Settings","text":"Key Bedeutung mediainfo_command CLI-Binary mediainfo_extra_args_bluray / _dvd profilspezifische Zusatzargumente"},{"location":"tools/mediainfo/#troubleshooting","title":"Troubleshooting","text":"
  • JSON-Test: mediainfo --Output=JSON <datei>
  • unbekannte Sprache erscheint oft als und (undetermined)
"},{"location":"workflows/","title":"Workflows aus Nutzersicht","text":"

Diese Seite beschreibt die produktiven Abl\u00e4ufe aus Sicht der Benutzer: welche Entscheidung wann anf\u00e4llt, welche Jobs oder Container entstehen und welche Settings den Ablauf sichtbar beeinflussen.

"},{"location":"workflows/#gemeinsame-grundlagen","title":"Gemeinsame Grundlagen","text":""},{"location":"workflows/#typische-statuskette","title":"Typische Statuskette","text":"

Medium erkannt -> Analyse -> Metadatenauswahl -> Startbereit -> Rippen -> Mediainfo-Pr\u00fcfung -> Bereit zum Encodieren -> Encodieren -> Fertig

Wichtige Abweichungen:

  • bei vorhandenem RAW: Sprung direkt in RAW-Entscheidung oder Review
  • bei mehrdeutigen Blu-rays/DVDs: Warte auf Auswahl f\u00fcr Playlist- oder Titelauswahl
  • bei Fehler oder Abbruch: Fehler oder Abgebrochen mit Folgeaktionen
  • bei Audio-CDs und Audiobooks: eigener Spezialflow innerhalb derselben Gesamtpipeline
"},{"location":"workflows/#welche-settings-fast-uberall-hineinspielen","title":"Welche Settings fast \u00fcberall hineinspielen","text":"

Die wichtigsten globalen Einflussfaktoren:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabh\u00e4ngig)
  • Audio CDs: Queue-Reihenfolge \u00fcberspringen
  • PushOver-Ereignisse
  • Pfade, Templates und Owner-Felder

F\u00fcr Disc-Video zus\u00e4tzlich:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Standard-Zuordnungen aus Settings -> Encode-Presets
"},{"location":"workflows/#workflow-a-film-von-disc-blu-ray-dvd","title":"Workflow A: Film von Disc (Blu-ray / DVD)","text":""},{"location":"workflows/#1-disc-analysieren-und-tmdb-metadaten-wahlen","title":"1. Disc analysieren und TMDb-Metadaten w\u00e4hlen","text":"
  1. Im Ripper Analyse starten
  2. im Metadaten-Dialog Film ausw\u00e4hlen
  3. Auswahl \u00fcbernehmen

Wirkung:

  • der Job wird als Film-Workflow gef\u00fchrt
  • Film-Metadaten, Poster und Fingerprint werden gesetzt

Relevante Settings:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache
"},{"location":"workflows/#2-duplikatfall-entscheiden","title":"2. Duplikatfall entscheiden","text":"

Wenn ein Film mit gleichem Fingerprint bereits existiert:

  1. \u00dcbernahme erzwingen: neuer unabh\u00e4ngiger Film-Job
  2. Multipart movie: neuer Job wird mit bestehendem Film zu einem Multipart-Container verkn\u00fcpft

Bei Multipart gilt:

  • beide Discs brauchen unterschiedliche Disc-Nummern
  • gleiche Disc-Nummern blockieren den Vorgang
"},{"location":"workflows/#3-raw-verzeichnis-und-raw-entscheidung","title":"3. RAW-Verzeichnis und RAW-Entscheidung","text":"

Wenn noch kein passendes RAW vorhanden ist:

  • Ripster legt ein neues RAW-Verzeichnis an

Wenn bereits ein passendes RAW gefunden wird:

  • der Job geht in Warte auf Auswahl
  • du entscheidest, ob das vorhandene RAW weiterverwendet oder neu gerippt wird

Relevante Settings:

  • raw_dir_bluray, raw_dir_dvd
  • raw_dir_bluray_owner, raw_dir_dvd_owner
"},{"location":"workflows/#4-playlist-oder-titelauswahl","title":"4. Playlist- oder Titelauswahl","text":"

Bei bestimmten Discs ist nach der Metadatenphase eine manuelle Auswahl n\u00f6tig:

  • Playlist-Auswahl
  • HandBrake-Titelauswahl
  • bei Serien-Grenzf\u00e4llen PlayAll- oder Doppelfolgen-Entscheidung

Das ist der aktuelle playlistflow.

Relevante Settings:

  • Minimale Titell\u00e4nge (Minuten)
  • TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)
  • Bei manueller Auswahl senden

Praxis:

  • zu hoher Mindestwert blendet legitime Alternativfassungen aus
  • ein kleiner Runtime-Abzug hilft bei Discs, deren Hauptfilm minimal unter der TMDb-Laufzeit liegt
"},{"location":"workflows/#5-review-und-encode","title":"5. Review und Encode","text":"

Im Zustand Bereit zum Encodieren entscheidest du:

  • welcher Titel encodiert wird
  • welche Audio-Spuren \u00fcbernommen werden
  • welche Untertitel \u00fcbernommen, erzwungen oder eingebrannt werden
  • welches Preset gilt
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen

Relevante Settings:

  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (Blu-ray Film) oder Review Audio-Sprachen (DVD Film)
  • Review UT-Sprachen (Blu-ray Film) oder Review UT-Sprachen (DVD Film)
  • Ausgabeformat
  • Standard-Userpreset f\u00fcr Film unter Settings -> Encode-Presets
"},{"location":"workflows/#6-finale-ausgabe","title":"6. Finale Ausgabe","text":"

Finale Ausgabe:

  • Zielordner: movie_dir_bluray oder movie_dir_dvd
  • Dateiname und Ordner: output_template_bluray oder output_template_dvd

Optional:

  • .nfo direkt nach Encode

Relevante Settings:

  • movie_dir_bluray, movie_dir_dvd
  • movie_dir_bluray_owner, movie_dir_dvd_owner
  • output_template_bluray, output_template_dvd
  • generate_nfo_after_encode
"},{"location":"workflows/#workflow-b-serie-von-disc-blu-ray-dvd","title":"Workflow B: Serie von Disc (Blu-ray / DVD)","text":""},{"location":"workflows/#1-serienmodus-festlegen","title":"1. Serienmodus festlegen","text":"
  1. Disc analysieren
  2. im Metadaten-Dialog Serienmetadaten w\u00e4hlen
  3. Disc-Nummer setzen

Wirkung:

  • Ripster arbeitet als Serien-Workflow
  • Seriencontainer wird gesucht oder angelegt
  • der Job wird als Child unter diesem Container gef\u00fchrt
"},{"location":"workflows/#2-serien-raw-und-staffelkontext","title":"2. Serien-RAW und Staffelkontext","text":"

F\u00fcr Serien bevorzugt Ripster eigene Serien-RAW-Verzeichnisse:

  • raw_dir_bluray_series
  • raw_dir_dvd_series

Falls leer:

  • Fallback auf raw_dir_bluray bzw. raw_dir_dvd
"},{"location":"workflows/#3-episodenprufung-und-multi-episode-falle","title":"3. Episodenpr\u00fcfung und Multi-Episode-F\u00e4lle","text":"

In der Review werden Episoden oder Mehrfachfolgen aufgel\u00f6st.

Ausgabevarianten:

  • Einzel-Episode
  • Multi-Episode-Datei

Relevante Settings:

  • output_template_bluray_series_episode
  • output_template_bluray_series_multi_episode
  • output_template_dvd_series_episode
  • output_template_dvd_series_multi_episode
  • series_dir_bluray
  • series_dir_dvd
"},{"location":"workflows/#4-playlistflow-auch-bei-serien","title":"4. Playlistflow auch bei Serien","text":"

Auch Serien k\u00f6nnen vor der Review in eine Playlist- oder Titelauswahl laufen.

Zus\u00e4tzlich wirken:

  • Review Audio-Sprachen (Blu-ray Serie) / Review Audio-Sprachen (DVD Serie)
  • Review UT-Sprachen (Blu-ray Serie) / Review UT-Sprachen (DVD Serie)
  • Serien-Default-Presets unter Settings -> Encode-Presets
"},{"location":"workflows/#workflow-c-multipart-film","title":"Workflow C: Multipart-Film","text":""},{"location":"workflows/#wann-der-flow-gedacht-ist","title":"Wann der Flow gedacht ist","text":"
  • gleicher Film auf mehreren Discs
  • die Discs sollen in Historie und Detailansichten zusammengeh\u00f6ren
"},{"location":"workflows/#ablauf","title":"Ablauf","text":"
  1. Film-Metadaten w\u00e4hlen
  2. Duplikatdialog Multipart movie
  3. Disc-Nummern f\u00fcr bestehenden und neuen Job festlegen

Wirkung:

  • multipart_movie_container wird angelegt oder wiederverwendet
  • die Discs werden als Child-Jobs darunter gef\u00fchrt
  • zus\u00e4tzlich wird ein Merge-Job vorbereitet

Relevante Settings:

  • mkvmerge_command
  • Film-Output-Templates
  • Queue-Limits, falls mehrere Discs parallel weiterverarbeitet werden
"},{"location":"workflows/#workflow-d-audio-cd","title":"Workflow D: Audio-CD","text":""},{"location":"workflows/#1-toc-lesen-und-metadaten-wahlen","title":"1. TOC lesen und Metadaten w\u00e4hlen","text":"
  1. Audio-CD analysieren
  2. Tracks pr\u00fcfen
  3. Metadaten aus MusicBrainz \u00fcbernehmen oder manuell anpassen
"},{"location":"workflows/#2-trackauswahl-und-format","title":"2. Trackauswahl und Format","text":"

Vor dem Start legst du fest:

  • welche Tracks \u00fcbernommen werden
  • welches Ausgabeformat gilt
  • welche Formatoptionen genutzt werden
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen
"},{"location":"workflows/#3-rip-und-encode","title":"3. Rip und Encode","text":"

Die CD l\u00e4uft anschlie\u00dfend als Track-f\u00fcr-Track-Flow:

CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig

Relevante Settings:

  • raw_dir_cd
  • movie_dir_cd
  • raw_dir_cd_owner
  • movie_dir_cd_owner
  • cd_output_template
  • cdparanoia_command
  • Max. parallele Audio CD Jobs
  • Audio CDs: Queue-Reihenfolge \u00fcberspringen
"},{"location":"workflows/#workflow-e-converter","title":"Workflow E: Converter","text":""},{"location":"workflows/#1-dateien-bereitstellen","title":"1. Dateien bereitstellen","text":"

Dateien gelangen in den Converter \u00fcber:

  • Upload
  • bestehende Ordner im converter_raw_dir
  • manuelle Dateiverwaltung im Explorer
"},{"location":"workflows/#2-jobs-aus-auswahl-erzeugen","title":"2. Jobs aus Auswahl erzeugen","text":"
  • Video und ISO: immer ein Job pro Datei
  • Audio: ein Job pro Datei oder gemeinsamer Audio-Job
"},{"location":"workflows/#3-job-konfigurieren-und-starten","title":"3. Job konfigurieren und starten","text":"

Je nach Medium:

  • Video/ISO: Review mit Track- und Preset-Auswahl
  • Audio: direkte Format- und Zielkonfiguration

Relevante Settings:

  • converter_scan_extensions
  • converter_polling_enabled
  • converter_polling_interval
  • converter_raw_dir
  • converter_movie_dir
  • converter_audio_dir
  • converter_output_template_video
  • converter_output_template_audio
  • globale Queue-Limits
"},{"location":"workflows/#workflow-f-audiobooks","title":"Workflow F: Audiobooks","text":""},{"location":"workflows/#1-aax-hochladen","title":"1. AAX hochladen","text":"
  1. Datei hochladen
  2. Metadaten und Kapitel aufbauen lassen
  3. bei Bedarf Activation Bytes kl\u00e4ren
"},{"location":"workflows/#2-ausgabeformat-wahlen","title":"2. Ausgabeformat w\u00e4hlen","text":"
  • m4b: eine Datei
  • mp3: eine Datei pro Kapitel
  • flac: eine Datei pro Kapitel
"},{"location":"workflows/#3-kapitel-und-skripte-prufen","title":"3. Kapitel und Skripte pr\u00fcfen","text":"

Vor dem Start anpassbar:

  • Kapitelnamen
  • Pre-Encode-Skripte und -Ketten
  • Post-Encode-Skripte und -Ketten

Relevante Settings:

  • raw_dir_audiobook
  • movie_dir_audiobook
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command
  • globale Queue-Limits
"},{"location":"workflows/#workflow-g-nachbearbeitung-in-der-historie","title":"Workflow G: Nachbearbeitung in der Historie","text":"

Typische Folgeaktionen:

  • TMDb neu zuweisen
  • Review neu starten
  • RAW neu encodieren
  • Encode neu starten
  • Retry Rippen
  • Download als ZIP einreihen

Besonders wichtig:

  • Encode neu starten verwendet den letzten best\u00e4tigten Plan
  • handbrake_restart_delete_incomplete_output entscheidet, ob unvollst\u00e4ndige Ausgaben vorher gel\u00f6scht werden
"},{"location":"workflows/#workflow-h-downloads-und-recovery","title":"Workflow H: Downloads und Recovery","text":""},{"location":"workflows/#downloads","title":"Downloads","text":"

Aus Historie k\u00f6nnen ZIPs f\u00fcr:

  • RAW
  • Output

erstellt werden.

Relevante Settings:

  • download_dir
  • download_dir_owner
"},{"location":"workflows/#database-expert","title":"Database (Expert)","text":"

Die Recovery-Seite hilft bei orphan RAW:

  • RAW pr\u00fcfen
  • Job anlegen

So lassen sich vorhandene RAW-Verzeichnisse wieder in einen normalen Workflow zur\u00fcckf\u00fchren.

"},{"location":"workflows/#tmdb-migration","title":"TMDb Migration","text":"

F\u00fcr \u00e4ltere Bestandsjobs gibt es die Sonderseite /tmdb-migration, um mehrere Jobs nacheinander auf den heutigen TMDb-Stand zu bringen.

"}]} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml index 07aff8a..18cdb94 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -2,182 +2,190 @@ https://mboehmlaender.github.io/ripster/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/converter/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/crons/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/downloads/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/history/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/pipeline/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/runtime-activities/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/settings/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/api/websocket/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/appendix/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/architecture/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/architecture/backend/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/architecture/database/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/architecture/frontend/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/architecture/overview/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/configuration/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/configuration/environment/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/configuration/settings-reference/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/deployment/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/deployment/development/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/deployment/production/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/getting-started/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/getting-started/configuration/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/getting-started/installation/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/getting-started/prerequisites/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/getting-started/quickstart/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/audiobooks/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/converter/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/database/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/downloads/ - 2026-05-08 + 2026-06-12 + + + https://mboehmlaender.github.io/ripster/gui/hardware/ + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/history/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/ripper/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/gui/settings/ - 2026-05-08 + 2026-06-12 + + + https://mboehmlaender.github.io/ripster/gui/tmdb-migration/ + 2026-06-12 https://mboehmlaender.github.io/ripster/pipeline/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/pipeline/encoding/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/pipeline/playlist-analysis/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/pipeline/post-encode-scripts/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/pipeline/workflow/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/tools/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/tools/handbrake/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/tools/makemkv/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/tools/mediainfo/ - 2026-05-08 + 2026-06-12 https://mboehmlaender.github.io/ripster/workflows/ - 2026-05-08 + 2026-06-12 \ No newline at end of file diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz index c2c50cc..0d7bdfd 100644 Binary files a/site/sitemap.xml.gz and b/site/sitemap.xml.gz differ diff --git a/site/tools/handbrake/index.html b/site/tools/handbrake/index.html index f323d2c..fc01b15 100644 --- a/site/tools/handbrake/index.html +++ b/site/tools/handbrake/index.html @@ -1,4 +1,4 @@ - HandBrake - Ripster

HandBrake

Ripster verwendet HandBrakeCLI für Scan und Encode.


Verwendete Aufrufe

Scan (Review-Aufbau)

HandBrakeCLI --scan --json -i <input> -t 0
+ HandBrake - Ripster      

HandBrake

Ripster verwendet HandBrakeCLI für Scan und Encode.


Verwendete Aufrufe

Scan (Review-Aufbau)

HandBrakeCLI --scan --json -i <input> -t 0
 

Encode (vereinfacht)

HandBrakeCLI \
   -i <input> \
   -o <output> \
diff --git a/site/tools/index.html b/site/tools/index.html
index 10a9a65..85e67ed 100644
--- a/site/tools/index.html
+++ b/site/tools/index.html
@@ -1 +1 @@
- Anhang: Externe Tools - Ripster      

Anhang: Externe Tools

Ripster orchestriert externe CLI-Tools. Dieser Abschnitt erklärt deren Rolle im Gesamtsystem.

  • MakeMKV


    Disc-Analyse und Ripping.

    MakeMKV

  • HandBrake


    Video-Encoding inklusive Preset-Logik.

    HandBrake

  • MediaInfo


    Track-/Containeranalyse für Review und Auswahl.

    MediaInfo

\ No newline at end of file + Anhang: Externe Tools - Ripster

Anhang: Externe Tools

Ripster orchestriert externe CLI-Tools. Dieser Abschnitt erklärt deren Rolle im Gesamtsystem.

  • MakeMKV


    Disc-Analyse und Ripping.

    MakeMKV

  • HandBrake


    Video-Encoding inklusive Preset-Logik.

    HandBrake

  • MediaInfo


    Track-/Containeranalyse für Review und Auswahl.

    MediaInfo

\ No newline at end of file diff --git a/site/tools/makemkv/index.html b/site/tools/makemkv/index.html index 77ba14e..e9e31d0 100644 --- a/site/tools/makemkv/index.html +++ b/site/tools/makemkv/index.html @@ -1,4 +1,4 @@ - MakeMKV - Ripster

MakeMKV

Ripster nutzt makemkvcon für Disc-Analyse und Rip.


Verwendete Aufrufe

Analyse

makemkvcon -r info <source>
+ MakeMKV - Ripster      

MakeMKV

Ripster nutzt makemkvcon für Disc-Analyse und Rip.


Verwendete Aufrufe

Analyse

makemkvcon -r info <source>
 

<source> ist typischerweise:

  • disc:<index> (Auto-Modus)
  • dev:/dev/sr0 (explicit)
  • file:<path> (Datei/Ordner-Analyse)

Rip (MKV-Modus)

makemkvcon mkv <source> <title-or-all> <rawDir> [--minlength=...] [...extraArgs]
 

Rip (Backup-Modus)

makemkvcon backup <source> <rawDir> --decrypt
 

Registrierungsschlüssel (optional)

Wenn in Settings ein MakeMKV Key gesetzt ist, synchronisiert Ripster ihn nach:

~/.MakeMKV/settings.conf
diff --git a/site/tools/mediainfo/index.html b/site/tools/mediainfo/index.html
index c45486e..30da38f 100644
--- a/site/tools/mediainfo/index.html
+++ b/site/tools/mediainfo/index.html
@@ -1,2 +1,2 @@
- MediaInfo - Ripster      

MediaInfo

Ripster nutzt mediainfo zur JSON-Analyse von Medien-Dateien.


Aufruf

mediainfo --Output=JSON <input>
+ MediaInfo - Ripster      

MediaInfo

Ripster nutzt mediainfo zur JSON-Analyse von Medien-Dateien.


Aufruf

mediainfo --Output=JSON <input>
 

Der Input ist typischerweise eine RAW-Datei oder ein vom Workflow gewählter Inputpfad.


Verwendung in Ripster

  • Track-/Codec-Metadaten für Review-Plan
  • Fallback-Informationen in bestimmten Analysepfaden
  • Persistenz als mediainfoInfo im Job

Relevante Settings

Key Bedeutung
mediainfo_command CLI-Binary
mediainfo_extra_args_bluray / _dvd profilspezifische Zusatzargumente

Troubleshooting

  • JSON-Test: mediainfo --Output=JSON <datei>
  • unbekannte Sprache erscheint oft als und (undetermined)
\ No newline at end of file diff --git a/site/workflows/index.html b/site/workflows/index.html index 06fdd39..6d8cbff 100644 --- a/site/workflows/index.html +++ b/site/workflows/index.html @@ -1 +1 @@ - Workflows aus Nutzersicht - Ripster

Workflows aus Nutzersicht

Diese Seite beschreibt die produktiven Abläufe als Handbuch: welche Entscheidung an welcher Stelle fällt, welche Objekte dabei entstehen (Job, Container, Child-Job) und welche Dateien in welchen Ordnern landen.

Gemeinsame Grundlagen

Statuskette im Normalfall

Medium erkannt -> Analyse -> Metadatenauswahl -> Startbereit -> Rippen -> Mediainfo-Pruefung -> Bereit zum Encodieren -> Encodieren -> Fertig

Abweichungen:

  • bei Blu-ray/DVD mit nötiger Playlistwahl: Mediainfo-Pruefung -> Warte auf Auswahl -> zurück in Mediainfo-Pruefung
  • bei vorhandenem RAW: Startbereit springt direkt in Review/Prüfung ohne neuen Laufwerks-Rip
  • bei Fehler/Abbruch: Fehler oder Abgebrochen mit Wiederanlauf-Aktionen

Job- und Container-Typen

Typ Zweck Was enthält der Typ?
Normaler Disc-Job Einzel-Film oder einzelne Disc RAW-Pfad, Output-Pfad, Logs, Review
dvd_series_container logischer Serien-Container (pro Serie/Staffel) Metadatenanker, aggregierter Status über Kinder
dvd_series_child einzelne Serien-Disc oder Serien-Episode-Job eigentliche RAW-/Encode-Arbeit
multipart_movie_container logischer Multipart-Film-Container Zusammenfassung für mehrere Film-Discs
multipart_movie_child einzelne Disc innerhalb Multipart-Film Disc-spezifische RAW-/Encode-Daten

Wichtig:

  • Container sind primär Ordnungs- und Statusobjekte.
  • Dateien (RAW/Output) hängen an den Child-Jobs.

Workflow A: Film (Blu-ray/DVD)

1) Disc analysieren und Film-Metadaten wählen

  1. Im Ripper Analyse starten.
  2. Im Metadaten-Dialog Film auswählen (OMDb bzw. manuelle Film-Metadaten).
  3. Auswahl übernehmen.

Wirkung:

  • der Job wird als Film-Workflow geführt
  • Film-Fingerprint für Duplikaterkennung wird gebildet (IMDb oder Titel/Jahr)

2) Duplikatfall entscheiden

Wenn Film mit gleichem Fingerprint bereits existiert, gibt es zwei Wege:

  1. Übernahme erzwingen (allow_new): neuer unabhängiger Film-Job
  2. Multipart movie: neuer Job wird mit bestehendem Job in einem Multipart-Container verknüpft

Bei Multipart gilt:

  • beide Discs brauchen unterschiedliche Disc-Nummer
  • gleiche Disc-Nummer blockiert den Vorgang (MULTIPART_DISC_ALREADY_EXISTS)

3) RAW-Verzeichnis entsteht

Ordnername basiert auf Metadaten plus Job-ID:

  • Incomplete_<Titel> (<Jahr>) - RAW - job-<id>

Zustandswechsel des RAW-Ordners:

  • beim Start: Incomplete_...
  • nach erfolgreichem Rip: Rip_Complete_...
  • nach erfolgreichem Encode: Prefix wird entfernt (final)

4) Review und Encode

In Bereit zum Encodieren:

  • Titel wählen
  • Audio-/Subtitle-Spuren festlegen
  • optional User-Preset
  • optional Pre-/Post-Encode-Skripte oder Ketten

Beim Start:

  • temporäre Ausgabe in Incomplete_job-<id>/<Datei>.<ext>
  • nach Erfolg Verschiebung in finalen Zielpfad aus Film-Template

Workflow B: Serie (Blu-ray/DVD)

1) Serienmodus aktivieren

  1. Disc analysieren.
  2. Im Metadaten-Dialog Serienmetadaten wählen (TMDb-basiert).
  3. Disc-Nummer setzen (Pflicht, ab 1).

Wirkung:

  • Workflow-Kind wird series
  • Seriencontainer wird gesucht/angelegt
  • aktueller Job wird als dvd_series_child darunter geführt

2) Seriencontainer und Disc-Konflikte

Beim Speichern wird geprüft:

  • existiert für Serie/Staffel bereits ein Container?
  • existiert in diesem Container bereits dieselbe Disc-Nummer?

Wenn ja, wird blockiert (SERIES_DISC_ALREADY_EXISTS).

3) Serien-RAW-Pfad

Für Serien wird ein eigener RAW-Pfad bevorzugt:

  • Blu-ray: raw_dir_bluray_series (Fallback: raw_dir_bluray)
  • DVD: raw_dir_dvd_series (Fallback: raw_dir_dvd)

RAW-Namensbasis enthält Staffel/Disc (SxDy) und wird ebenfalls mit den Prefix-Phasen geführt:

  • Incomplete_... -> Rip_Complete_... -> final

4) Serien-Review und Episoden-Ausgabe

Beim Review werden Episoden-/Titelzuordnungen genutzt. Je nach Auswahl:

  • Einzel-Episode: Episode-Template
  • Multi-Episode-Titel: Multi-Episode-Template

Ausgabepfad:

  • Root: series_dir_* (Fallback auf movie_dir_*)
  • Dateiname/Unterordner aus Serien-Template

5) Multi-Episode-Disc als Batch

Wenn mehrere Episoden-Titel aus einer Disc encodiert werden:

  • Ripster erzeugt Episode-Child-Jobs
  • der ursprüngliche Disc-Job dient als Batch-Anker
  • RAW-Finalisierung erfolgt erst, wenn alle Episode-Encodes abgeschlossen sind

Workflow C: Multipart-Film

Wann dieser Flow gedacht ist

  • gleicher Film auf mehreren Discs (z. B. Disc 1/Disc 2)
  • Zusammengehörigkeit soll in Historie und Detailansichten sichtbar sein

Ablauf

  1. Film-Metadaten wählen.
  2. Duplikatdialog -> Multipart movie.
  3. Disc-Nummern für bestehenden und neuen Job festlegen.

Wirkung:

  • multipart_movie_container wird angelegt oder wiederverwendet
  • beteiligte Jobs werden multipart_movie_child
  • Container führt gemeinsame Metadaten, Kinder führen je Disc die eigentlichen Artefakte

Workflow D: Vorhandenes RAW / RAW-Import

Fall 1: RAW bereits vorhanden bei Metadatenübernahme

Nach Metadaten-Übernahme erkennt Ripster passende RAW-Ordner und setzt den Job auf Entscheidungsstatus.

Möglichkeiten:

  • vorhandenes RAW weiterverwenden (kein neuer Rip)
  • RAW löschen/ignorieren und neu rippen

Fall 2: Orphan-RAW aus /database

  1. In Database RAW prüfen.
  2. Bei orphan RAW Job anlegen.
  3. Job wird in Historie erzeugt und wie "Disk analysieren aus RAW" weiterverarbeitet.

Workflow E: Nachbearbeitung bestehender Jobs

In Historie (Detaildialog):

Aktion Wirkung
OMDb neu zuordnen Metadaten neu schreiben, Folder-Rename wird best effort angestoßen
Review neu starten Titel-/Spurprüfung aus aktuellem RAW neu aufbauen
RAW neu encodieren Encode erneut aus vorhandenem RAW starten
Encode neu starten letzte bestätigte Review-Einstellungen wiederverwenden
Retry Rippen Rip/Analyse neu starten; alter Job-RAW kann bereinigt werden

Wo landet was? (Artefakt-Matrix)

Artefakt Film Serie Multipart
RAW raw_dir_* bevorzugt raw_dir_*_series pro Child-Job im normalen Film-RAW-Schema
Finale Ausgabe movie_dir_* + Film-Template series_dir_* (Fallback movie_dir_*) + Serien-Templates pro Child-Job normaler Film-Output
Container-Datensatz nein ja (dvd_series_container) ja (multipart_movie_container)
Löschvorschau in Historie einzelner Job oder Related Scope Container-/Child-bezogen mit Pfadauswahl Container-/Child-bezogen mit Pfadauswahl

Queue-Verhalten im Alltag

Die Startfreigabe hängt an vier Settings:

  • Max. parallele Film/Video Encodes
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt
  • Audio CDs: Queue-Reihenfolge überspringen

Praxis:

  • Film/Video- und Audio/CD laufen in getrennten Lanes
  • Gesamtlimit begrenzt beide gemeinsam
  • Queue kann neben Jobs auch Skript, Kette, Warten enthalten
\ No newline at end of file + Workflows aus Nutzersicht - Ripster

Workflows aus Nutzersicht

Diese Seite beschreibt die produktiven Abläufe aus Sicht der Benutzer: welche Entscheidung wann anfällt, welche Jobs oder Container entstehen und welche Settings den Ablauf sichtbar beeinflussen.

Gemeinsame Grundlagen

Typische Statuskette

Medium erkannt -> Analyse -> Metadatenauswahl -> Startbereit -> Rippen -> Mediainfo-Prüfung -> Bereit zum Encodieren -> Encodieren -> Fertig

Wichtige Abweichungen:

  • bei vorhandenem RAW: Sprung direkt in RAW-Entscheidung oder Review
  • bei mehrdeutigen Blu-rays/DVDs: Warte auf Auswahl für Playlist- oder Titelauswahl
  • bei Fehler oder Abbruch: Fehler oder Abgebrochen mit Folgeaktionen
  • bei Audio-CDs und Audiobooks: eigener Spezialflow innerhalb derselben Gesamtpipeline

Welche Settings fast überall hineinspielen

Die wichtigsten globalen Einflussfaktoren:

  • Parallele Jobs
  • Max. parallele Audio CD Jobs
  • Max. Encodes gesamt (medienunabhängig)
  • Audio CDs: Queue-Reihenfolge überspringen
  • PushOver-Ereignisse
  • Pfade, Templates und Owner-Felder

Für Disc-Video zusätzlich:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)
  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (...)
  • Review UT-Sprachen (...)
  • Standard-Zuordnungen aus Settings -> Encode-Presets

Workflow A: Film von Disc (Blu-ray / DVD)

1. Disc analysieren und TMDb-Metadaten wählen

  1. Im Ripper Analyse starten
  2. im Metadaten-Dialog Film auswählen
  3. Auswahl übernehmen

Wirkung:

  • der Job wird als Film-Workflow geführt
  • Film-Metadaten, Poster und Fingerprint werden gesetzt

Relevante Settings:

  • TMDb Read Access Token
  • Film-Sprache
  • Fallback Sprache

2. Duplikatfall entscheiden

Wenn ein Film mit gleichem Fingerprint bereits existiert:

  1. Übernahme erzwingen: neuer unabhängiger Film-Job
  2. Multipart movie: neuer Job wird mit bestehendem Film zu einem Multipart-Container verknüpft

Bei Multipart gilt:

  • beide Discs brauchen unterschiedliche Disc-Nummern
  • gleiche Disc-Nummern blockieren den Vorgang

3. RAW-Verzeichnis und RAW-Entscheidung

Wenn noch kein passendes RAW vorhanden ist:

  • Ripster legt ein neues RAW-Verzeichnis an

Wenn bereits ein passendes RAW gefunden wird:

  • der Job geht in Warte auf Auswahl
  • du entscheidest, ob das vorhandene RAW weiterverwendet oder neu gerippt wird

Relevante Settings:

  • raw_dir_bluray, raw_dir_dvd
  • raw_dir_bluray_owner, raw_dir_dvd_owner

4. Playlist- oder Titelauswahl

Bei bestimmten Discs ist nach der Metadatenphase eine manuelle Auswahl nötig:

  • Playlist-Auswahl
  • HandBrake-Titelauswahl
  • bei Serien-Grenzfällen PlayAll- oder Doppelfolgen-Entscheidung

Das ist der aktuelle playlistflow.

Relevante Settings:

  • Minimale Titellänge (Minuten)
  • TMDb Runtime-Abzug für Playlistfilter (%)
  • Bei manueller Auswahl senden

Praxis:

  • zu hoher Mindestwert blendet legitime Alternativfassungen aus
  • ein kleiner Runtime-Abzug hilft bei Discs, deren Hauptfilm minimal unter der TMDb-Laufzeit liegt

5. Review und Encode

Im Zustand Bereit zum Encodieren entscheidest du:

  • welcher Titel encodiert wird
  • welche Audio-Spuren übernommen werden
  • welche Untertitel übernommen, erzwungen oder eingebrannt werden
  • welches Preset gilt
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen

Relevante Settings:

  • HandBrake Preset
  • HandBrake Extra Args
  • Review Audio-Sprachen (Blu-ray Film) oder Review Audio-Sprachen (DVD Film)
  • Review UT-Sprachen (Blu-ray Film) oder Review UT-Sprachen (DVD Film)
  • Ausgabeformat
  • Standard-Userpreset für Film unter Settings -> Encode-Presets

6. Finale Ausgabe

Finale Ausgabe:

  • Zielordner: movie_dir_bluray oder movie_dir_dvd
  • Dateiname und Ordner: output_template_bluray oder output_template_dvd

Optional:

  • .nfo direkt nach Encode

Relevante Settings:

  • movie_dir_bluray, movie_dir_dvd
  • movie_dir_bluray_owner, movie_dir_dvd_owner
  • output_template_bluray, output_template_dvd
  • generate_nfo_after_encode

Workflow B: Serie von Disc (Blu-ray / DVD)

1. Serienmodus festlegen

  1. Disc analysieren
  2. im Metadaten-Dialog Serienmetadaten wählen
  3. Disc-Nummer setzen

Wirkung:

  • Ripster arbeitet als Serien-Workflow
  • Seriencontainer wird gesucht oder angelegt
  • der Job wird als Child unter diesem Container geführt

2. Serien-RAW und Staffelkontext

Für Serien bevorzugt Ripster eigene Serien-RAW-Verzeichnisse:

  • raw_dir_bluray_series
  • raw_dir_dvd_series

Falls leer:

  • Fallback auf raw_dir_bluray bzw. raw_dir_dvd

3. Episodenprüfung und Multi-Episode-Fälle

In der Review werden Episoden oder Mehrfachfolgen aufgelöst.

Ausgabevarianten:

  • Einzel-Episode
  • Multi-Episode-Datei

Relevante Settings:

  • output_template_bluray_series_episode
  • output_template_bluray_series_multi_episode
  • output_template_dvd_series_episode
  • output_template_dvd_series_multi_episode
  • series_dir_bluray
  • series_dir_dvd

4. Playlistflow auch bei Serien

Auch Serien können vor der Review in eine Playlist- oder Titelauswahl laufen.

Zusätzlich wirken:

  • Review Audio-Sprachen (Blu-ray Serie) / Review Audio-Sprachen (DVD Serie)
  • Review UT-Sprachen (Blu-ray Serie) / Review UT-Sprachen (DVD Serie)
  • Serien-Default-Presets unter Settings -> Encode-Presets

Workflow C: Multipart-Film

Wann der Flow gedacht ist

  • gleicher Film auf mehreren Discs
  • die Discs sollen in Historie und Detailansichten zusammengehören

Ablauf

  1. Film-Metadaten wählen
  2. Duplikatdialog Multipart movie
  3. Disc-Nummern für bestehenden und neuen Job festlegen

Wirkung:

  • multipart_movie_container wird angelegt oder wiederverwendet
  • die Discs werden als Child-Jobs darunter geführt
  • zusätzlich wird ein Merge-Job vorbereitet

Relevante Settings:

  • mkvmerge_command
  • Film-Output-Templates
  • Queue-Limits, falls mehrere Discs parallel weiterverarbeitet werden

Workflow D: Audio-CD

1. TOC lesen und Metadaten wählen

  1. Audio-CD analysieren
  2. Tracks prüfen
  3. Metadaten aus MusicBrainz übernehmen oder manuell anpassen

2. Trackauswahl und Format

Vor dem Start legst du fest:

  • welche Tracks übernommen werden
  • welches Ausgabeformat gilt
  • welche Formatoptionen genutzt werden
  • welche Pre-/Post-Encode-Skripte oder Ketten mitlaufen

3. Rip und Encode

Die CD läuft anschließend als Track-für-Track-Flow:

CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig

Relevante Settings:

  • raw_dir_cd
  • movie_dir_cd
  • raw_dir_cd_owner
  • movie_dir_cd_owner
  • cd_output_template
  • cdparanoia_command
  • Max. parallele Audio CD Jobs
  • Audio CDs: Queue-Reihenfolge überspringen

Workflow E: Converter

1. Dateien bereitstellen

Dateien gelangen in den Converter über:

  • Upload
  • bestehende Ordner im converter_raw_dir
  • manuelle Dateiverwaltung im Explorer

2. Jobs aus Auswahl erzeugen

  • Video und ISO: immer ein Job pro Datei
  • Audio: ein Job pro Datei oder gemeinsamer Audio-Job

3. Job konfigurieren und starten

Je nach Medium:

  • Video/ISO: Review mit Track- und Preset-Auswahl
  • Audio: direkte Format- und Zielkonfiguration

Relevante Settings:

  • converter_scan_extensions
  • converter_polling_enabled
  • converter_polling_interval
  • converter_raw_dir
  • converter_movie_dir
  • converter_audio_dir
  • converter_output_template_video
  • converter_output_template_audio
  • globale Queue-Limits

Workflow F: Audiobooks

1. AAX hochladen

  1. Datei hochladen
  2. Metadaten und Kapitel aufbauen lassen
  3. bei Bedarf Activation Bytes klären

2. Ausgabeformat wählen

  • m4b: eine Datei
  • mp3: eine Datei pro Kapitel
  • flac: eine Datei pro Kapitel

3. Kapitel und Skripte prüfen

Vor dem Start anpassbar:

  • Kapitelnamen
  • Pre-Encode-Skripte und -Ketten
  • Post-Encode-Skripte und -Ketten

Relevante Settings:

  • raw_dir_audiobook
  • movie_dir_audiobook
  • audiobook_raw_template
  • output_template_audiobook
  • output_chapter_template_audiobook
  • ffprobe_command
  • ffmpeg_command
  • globale Queue-Limits

Workflow G: Nachbearbeitung in der Historie

Typische Folgeaktionen:

  • TMDb neu zuweisen
  • Review neu starten
  • RAW neu encodieren
  • Encode neu starten
  • Retry Rippen
  • Download als ZIP einreihen

Besonders wichtig:

  • Encode neu starten verwendet den letzten bestätigten Plan
  • handbrake_restart_delete_incomplete_output entscheidet, ob unvollständige Ausgaben vorher gelöscht werden

Workflow H: Downloads und Recovery

Downloads

Aus Historie können ZIPs für:

  • RAW
  • Output

erstellt werden.

Relevante Settings:

  • download_dir
  • download_dir_owner

Database (Expert)

Die Recovery-Seite hilft bei orphan RAW:

  • RAW prüfen
  • Job anlegen

So lassen sich vorhandene RAW-Verzeichnisse wieder in einen normalen Workflow zurückführen.

TMDb Migration

Für ältere Bestandsjobs gibt es die Sonderseite /tmdb-migration, um mehrere Jobs nacheinander auf den heutigen TMDb-Stand zu bringen.

\ No newline at end of file