This commit is contained in:
2026-03-11 15:20:20 +00:00
parent 5576a92c5c
commit e14599fa4d
37 changed files with 331 additions and 333 deletions

View File

@@ -66,7 +66,7 @@ In `App.jsx` werden u. a. verarbeitet:
- `PIPELINE_STATE_CHANGED`
- `PIPELINE_PROGRESS`
- `PIPELINE_QUEUE_CHANGED`
- `DISC_DETECTED` / `DISC_REMOVED`
- Disk erkannt / Disk entfernt
- `HARDWARE_MONITOR_UPDATE`
---

View File

@@ -33,7 +33,7 @@ WebSocket läuft auf `/ws`.
Wichtige Events:
- `PIPELINE_STATE_CHANGED`, `PIPELINE_PROGRESS`, `PIPELINE_QUEUE_CHANGED`
- `DISC_DETECTED`, `DISC_REMOVED`
- Disk erkannt, Disk entfernt
- `HARDWARE_MONITOR_UPDATE`
- `SETTINGS_UPDATED`, `SETTINGS_BULK_UPDATED`
- `SETTINGS_SCRIPTS_UPDATED`, `SETTINGS_SCRIPT_CHAINS_UPDATED`, `USER_PRESETS_UPDATED`
@@ -83,7 +83,7 @@ Zentrales Error-Handling liefert:
}
```
Fehlgeschlagene Jobs bleiben in der Historie (`ERROR` oder `CANCELLED`) und können erneut gestartet werden.
Fehlgeschlagene Jobs bleiben in der Historie (`Fehler` oder `Abgebrochen`) und können erneut gestartet werden.
---

View File

@@ -1,23 +1,18 @@
# Einstellungsreferenz
Alle Settings liegen in `settings_schema`/`settings_values` und werden über die UI verwaltet.
Diese Seite listet die Felder so, wie sie in der GUI unter `Settings` angezeigt werden.
Hinweis: Interne Schlüsselnamen werden hier bewusst nicht verwendet. Falls du sie für Integrationen brauchst, nutze die API-Dokumentation.
---
## Profil-System
Ripster arbeitet mit Media-Profilen:
Viele Felder sind pro Medientyp getrennt vorhanden:
- `bluray`
- `dvd`
- `other`
Viele Tool-/Pfad-Settings existieren als Profil-Varianten (`*_bluray`, `*_dvd`, `*_other`).
Wichtig:
- Für `raw_dir`, `movie_dir` und die zugehörigen `*_owner`-Keys gibt es **kein Cross-Profil-Fallback**.
- Für viele Tool-Keys werden profilspezifische Varianten bevorzugt.
- Blu-ray
- DVD
- Sonstiges
---
@@ -35,131 +30,113 @@ Nicht gesetzte Werte werden zu `unknown`.
## Kategorie: Pfade
| Key | Typ | Default |
|-----|-----|---------|
| `raw_dir` | path | `data/output/raw` |
| `raw_dir_bluray` | path | `null` |
| `raw_dir_dvd` | path | `null` |
| `raw_dir_other` | path | `null` |
| `raw_dir_bluray_owner` | string | `null` |
| `raw_dir_dvd_owner` | string | `null` |
| `raw_dir_other_owner` | string | `null` |
| `movie_dir` | path | `data/output/movies` |
| `movie_dir_bluray` | path | `null` |
| `movie_dir_dvd` | path | `null` |
| `movie_dir_other` | path | `null` |
| `movie_dir_bluray_owner` | string | `null` |
| `movie_dir_dvd_owner` | string | `null` |
| `movie_dir_other_owner` | string | `null` |
| `log_dir` | path | `data/logs` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `Raw Ausgabeordner` | path | `data/output/raw` |
| `Raw Ausgabeordner (Blu-ray)` | path | `null` |
| `Raw Ausgabeordner (DVD)` | path | `null` |
| `Raw Ausgabeordner (Sonstiges)` | path | `null` |
| `Eigentümer Raw-Ordner (Blu-ray)` | string | `null` |
| `Eigentümer Raw-Ordner (DVD)` | string | `null` |
| `Eigentümer Raw-Ordner (Sonstiges)` | string | `null` |
| `Film Ausgabeordner` | path | `data/output/movies` |
| `Film Ausgabeordner (Blu-ray)` | path | `null` |
| `Film Ausgabeordner (DVD)` | path | `null` |
| `Film Ausgabeordner (Sonstiges)` | path | `null` |
| `Eigentümer Film-Ordner (Blu-ray)` | string | `null` |
| `Eigentümer Film-Ordner (DVD)` | string | `null` |
| `Eigentümer Film-Ordner (Sonstiges)` | string | `null` |
| `Log Ordner` | path | `data/logs` |
---
## Kategorie: Laufwerk
| Key | Typ | Default | Hinweis |
|-----|-----|---------|--------|
| `drive_mode` | select | `auto` | `auto` oder `explicit` |
| `drive_device` | path | `/dev/sr0` | bei `explicit` relevant |
| `makemkv_source_index` | number | `0` | MakeMKV Source-Index |
| `disc_poll_interval_ms` | number | `4000` | 1000..60000 |
| Feldname in der GUI | Typ | Default | Hinweis |
|---|---|---|---|
| `Laufwerksmodus` | select | `auto` | `Auto Discovery` oder `Explizites Device` |
| `Device Pfad` | path | `/dev/sr0` | relevant bei `Explizites Device` |
| `MakeMKV Source Index` | number | `0` | Disc-Index im Auto-Modus |
| `Polling Intervall (ms)` | number | `4000` | 1000..60000 |
---
## Kategorie: Monitoring
| Key | Typ | Default |
|-----|-----|---------|
| `hardware_monitoring_enabled` | boolean | `true` |
| `hardware_monitoring_interval_ms` | number | `5000` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `Hardware Monitoring aktiviert` | boolean | `true` |
| `Hardware Monitoring Intervall (ms)` | number | `5000` |
---
## Kategorie: Tools (global)
| Key | Typ | Default |
|-----|-----|---------|
| `makemkv_command` | string | `makemkvcon` |
| `makemkv_registration_key` | string | `null` |
| `mediainfo_command` | string | `mediainfo` |
| `makemkv_min_length_minutes` | number | `60` |
| `handbrake_command` | string | `HandBrakeCLI` |
| `handbrake_restart_delete_incomplete_output` | boolean | `true` |
| `pipeline_max_parallel_jobs` | number | `1` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `MakeMKV Kommando` | string | `makemkvcon` |
| `MakeMKV Key` | string | `null` |
| `Mediainfo Kommando` | string | `mediainfo` |
| `Minimale Titellaenge (Minuten)` | number | `60` |
| `HandBrake Kommando` | string | `HandBrakeCLI` |
| `Encode-Neustart: unvollständige Ausgabe löschen` | boolean | `true` |
| `Parallele Jobs` | number | `1` |
### Blu-ray-spezifisch
| Key | Typ | Default |
|-----|-----|---------|
| `mediainfo_extra_args_bluray` | string | `null` |
| `makemkv_rip_mode_bluray` | select | `backup` |
| `makemkv_analyze_extra_args_bluray` | string | `null` |
| `makemkv_rip_extra_args_bluray` | string | `null` |
| `handbrake_preset_bluray` | string | `H.264 MKV 1080p30` |
| `handbrake_extra_args_bluray` | string | `null` |
| `output_extension_bluray` | select | `mkv` |
| `filename_template_bluray` | string | `${title} (${year})` |
| `output_folder_template_bluray` | string | `null` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `Mediainfo Extra Args` (Blu-ray) | string | `null` |
| `MakeMKV Rip Modus` (Blu-ray) | select | `backup` |
| `MakeMKV Analyze Extra Args` (Blu-ray) | string | `null` |
| `MakeMKV Rip Extra Args` (Blu-ray) | string | `null` |
| `HandBrake Preset` (Blu-ray) | string | `H.264 MKV 1080p30` |
| `HandBrake Extra Args` (Blu-ray) | string | `null` |
| `Ausgabeformat` (Blu-ray) | select | `mkv` |
| `Dateiname Template` (Blu-ray) | string | `${title} (${year})` |
| `Ordnername Template` (Blu-ray) | string | `null` |
### DVD-spezifisch
| Key | Typ | Default |
|-----|-----|---------|
| `mediainfo_extra_args_dvd` | string | `null` |
| `makemkv_rip_mode_dvd` | select | `mkv` |
| `makemkv_analyze_extra_args_dvd` | string | `null` |
| `makemkv_rip_extra_args_dvd` | string | `null` |
| `handbrake_preset_dvd` | string | `H.264 MKV 480p30` |
| `handbrake_extra_args_dvd` | string | `null` |
| `output_extension_dvd` | select | `mkv` |
| `filename_template_dvd` | string | `${title} (${year})` |
| `output_folder_template_dvd` | string | `null` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `Mediainfo Extra Args` (DVD) | string | `null` |
| `MakeMKV Rip Modus` (DVD) | select | `mkv` |
| `MakeMKV Analyze Extra Args` (DVD) | string | `null` |
| `MakeMKV Rip Extra Args` (DVD) | string | `null` |
| `HandBrake Preset` (DVD) | string | `H.264 MKV 480p30` |
| `HandBrake Extra Args` (DVD) | string | `null` |
| `Ausgabeformat` (DVD) | select | `mkv` |
| `Dateiname Template` (DVD) | string | `${title} (${year})` |
| `Ordnername Template` (DVD) | string | `null` |
---
## Kategorie: Metadaten
| Key | Typ | Default |
|-----|-----|---------|
| `omdb_api_key` | string | `null` |
| `omdb_default_type` | select | `movie` |
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `OMDb API Key` | string | `null` |
| `OMDb Typ` | select | `movie` |
---
## Kategorie: Benachrichtigungen (PushOver)
| Key | Typ | Default |
|-----|-----|---------|
| `pushover_enabled` | boolean | `false` |
| `pushover_token` | string | `null` |
| `pushover_user` | string | `null` |
| `pushover_device` | string | `null` |
| `pushover_title_prefix` | string | `Ripster` |
| `pushover_priority` | number | `0` |
| `pushover_timeout_ms` | number | `7000` |
| `pushover_notify_metadata_ready` | boolean | `true` |
| `pushover_notify_rip_started` | boolean | `true` |
| `pushover_notify_encoding_started` | boolean | `true` |
| `pushover_notify_job_finished` | boolean | `true` |
| `pushover_notify_job_error` | boolean | `true` |
| `pushover_notify_job_cancelled` | boolean | `true` |
| `pushover_notify_reencode_started` | boolean | `true` |
| `pushover_notify_reencode_finished` | boolean | `true` |
---
## Entfernte Legacy-Keys
Diese Legacy-Keys werden bei Migration entfernt und sollten nicht mehr genutzt werden:
- `makemkv_backup_mode`
- `mediainfo_extra_args`
- `makemkv_rip_mode`
- `makemkv_analyze_extra_args`
- `makemkv_rip_extra_args`
- `handbrake_preset`
- `handbrake_extra_args`
- `output_extension`
- `filename_template`
- `output_folder_template`
- `pushover_notify_disc_detected`
| Feldname in der GUI | Typ | Default |
|---|---|---|
| `PushOver aktiviert` | boolean | `false` |
| `PushOver Token` | string | `null` |
| `PushOver User` | string | `null` |
| `PushOver Device (optional)` | string | `null` |
| `PushOver Titel-Präfix` | string | `Ripster` |
| `PushOver Priority` | number | `0` |
| `PushOver Timeout (ms)` | number | `7000` |
| `Bei Metadaten-Auswahl senden` | boolean | `true` |
| `Bei Rip-Start senden` | boolean | `true` |
| `Bei Encode-Start senden` | boolean | `true` |
| `Bei Erfolg senden` | boolean | `true` |
| `Bei Fehler senden` | boolean | `true` |
| `Bei Abbruch senden` | boolean | `true` |
| `Bei Re-Encode Start senden` | boolean | `true` |
| `Bei Re-Encode Erfolg senden` | boolean | `true` |

View File

@@ -4,9 +4,9 @@
## Automatische Installation (empfohlen)
Das mitgelieferte `install.sh` richtet Ripster vollautomatisch auf Debian/Ubuntu ein inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.
Das mitgelieferte `install.sh` richtet Ripster vollautomatisch ein inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.
**Unterstützte Systeme:** Debian 11/12, Ubuntu 22.04/24.04
**Unterstützte Systeme laut Script:** Debian, Ubuntu, Linux Mint, Pop!_OS
**Voraussetzung:** root-Rechte, Internetzugang
### Schnellstart via curl
@@ -28,7 +28,7 @@ wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.s
| Option | Standard | Beschreibung |
|--------|----------|--------------|
| `--branch <branch>` | `main` | Git-Branch für die Installation |
| `--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 |
@@ -67,14 +67,16 @@ sudo bash install.sh --no-nginx --host mein-server.local
5. **HandBrake** interaktive Auswahl:
- **Option 1**: Standard (`apt install handbrake-cli`)
- **Option 2**: Gebündelte GPU-Version mit NVDEC aus `bin/HandBrakeCLI`
6. **Systembenutzer** `ripster` ohne Login-Shell, Gruppen: `cdrom`, `optical`, `disk`, `video`, `render`
7. **Repository** klont Branch nach `--dir` (bei `--reinstall`: sichert DB, pullt, stellt DB wieder her)
8. **npm-Abhängigkeiten** Root, Backend (nur production), Frontend
9. **Frontend-Build** `npm run build` mit relativen API-URLs (nginx-kompatibel)
10. **Backend `.env`** wird automatisch generiert (bei `--reinstall` bleibt bestehende erhalten)
11. **Berechtigungen** `ripster:ripster` auf Installationsverzeichnis, `600` auf `.env`
12. **systemd-Dienst** `ripster-backend.service` erstellt, aktiviert und gestartet
13. **nginx** konfiguriert als Reverse-Proxy für Frontend, `/api/` und `/ws` (kann mit `--no-nginx` übersprungen werden)
6. **Systembenutzer** `ripster` ohne Login-Shell und ohne Home-Verzeichnis; Gruppen werden (falls vorhanden) ergänzt: `cdrom`, `optical`, `disk`, `video`, `render`
7. **Repository** klont Branch nach `--dir` (bei `--reinstall`: sichert `backend/data`, aktualisiert Repo, stellt Daten wieder her)
8. **Verzeichnisse** stellt u. a. sicher: `backend/data`, `backend/logs`, `backend/data/output/raw`, `backend/data/output/movies`, `backend/data/logs`
9. **npm-Abhängigkeiten** Root, Backend (nur production), Frontend
10. **Frontend-Build** `npm run build` mit relativen API-URLs (nginx-kompatibel)
11. **Backend `.env`** wird automatisch generiert (bei `--reinstall` bleibt bestehende `.env` erhalten)
12. **Berechtigungen** zunächst `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** erstellt bei sudo-Aufruf `~/.MakeMKV` für den aufrufenden Benutzer
14. **systemd-Dienst** `ripster-backend.service` erstellt, aktiviert und gestartet
15. **nginx** konfiguriert als Reverse-Proxy für Frontend, `/api/` und `/ws` (kann mit `--no-nginx` übersprungen werden)
### Nach der Installation

View File

@@ -14,9 +14,9 @@ Setze zuerst diese Pflichtwerte:
| Bereich | Wichtige Felder |
|---|---|
| Pfade | `raw_dir`, `movie_dir`, `log_dir` |
| Tools | `makemkv_command`, `handbrake_command`, `mediainfo_command` |
| Metadaten | `omdb_api_key`, optional `omdb_default_type` |
| Pfade | `Raw Ausgabeordner`, `Film Ausgabeordner`, `Log Ordner` |
| Tools | `MakeMKV Kommando`, `HandBrake Kommando`, `Mediainfo Kommando` |
| Metadaten | `OMDb API Key`, optional `OMDb Typ` |
Danach `Änderungen speichern`.
@@ -30,22 +30,22 @@ Wenn du Blu-ray und DVD unterschiedlich behandeln willst, pflege die profilbezog
Typische Beispiele:
- `handbrake_preset_bluray` und `handbrake_preset_dvd`
- `raw_dir_bluray` und `raw_dir_dvd`
- `filename_template_bluray` und `filename_template_dvd`
- `HandBrake Preset` (Blu-ray und DVD)
- `Raw Ausgabeordner` (Blu-ray und DVD)
- `Dateiname Template` (Blu-ray und DVD)
### 3. Queue und Monitoring festlegen
- `pipeline_max_parallel_jobs` für parallele Jobs
- `hardware_monitoring_enabled` und Intervall für Live-Metriken im Dashboard
- `Parallele Jobs` für den gleichzeitigen Durchsatz
- `Hardware Monitoring aktiviert` + `Hardware Monitoring Intervall (ms)` für Live-Metriken im Dashboard
### 4. Optional: Push-Benachrichtigungen
In den Benachrichtigungsfeldern setzen:
- `pushover_enabled`
- `pushover_token`
- `pushover_user`
- `PushOver aktiviert`
- `PushOver Token`
- `PushOver User`
Dann über `PushOver Test` direkt prüfen.
@@ -55,7 +55,7 @@ Dann über `PushOver Test` direkt prüfen.
2. Disc einlegen
3. `Analyse starten`
4. Metadaten übernehmen
5. Bis `READY_TO_ENCODE` laufen lassen
5. Bis `Bereit zum Encodieren` laufen lassen
Wenn diese Schritte funktionieren, ist die Grundkonfiguration korrekt.

View File

@@ -2,13 +2,13 @@
Die empfohlene Installation läuft über `install.sh` und richtet Ripster vollständig ein.
Du musst dafür **keine Tools manuell vorinstallieren**. `install.sh` installiert die benötigten Abhängigkeiten automatisch (außer du überspringst sie mit `--no-*`).
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.
## Zielbild nach der Installation
## Unterstützte Systeme und Anforderungen
- Ripster-Backend als `systemd`-Dienst
- Frontend über nginx erreichbar
- UI auf `http://<Server-IP>`
- unterstützt laut Script: `debian`, `ubuntu`, `linuxmint`, `pop`
- Ausführung als `root` (oder via `sudo`)
- Internetzugang während der Installation
## Schritt-für-Schritt
@@ -24,9 +24,9 @@ wget -qO install.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main
sudo bash install.sh
```
Während der Installation wirst du nach dem HandBrake-Modus gefragt:
Während der Installation wählst du den HandBrake-Modus:
- `1` Standard (`apt`)
- `1` Standard (Paketinstallation)
- `2` GPU/NVDEC (gebündeltes Binary)
### 3. Dienststatus prüfen
@@ -37,21 +37,44 @@ sudo systemctl status ripster-backend
### 4. Weboberfläche öffnen
- Mit nginx: `http://<Server-IP>`
- Ohne nginx (`--no-nginx`): API auf `http://<Server-IP>:3001/api`
- 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:
- `/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 | Zweck |
|---|---|
| `--branch <branch>` | anderen Branch installieren |
| `--dir <pfad>` | Installationsverzeichnis ändern |
| `--port <port>` | Backend-Port setzen |
| `--host <hostname>` | Hostname/IP für nginx/CORS |
| `--no-makemkv` | MakeMKV nicht installieren |
| `--no-handbrake` | HandBrake nicht installieren |
| `--no-nginx` | nginx-Konfiguration überspringen |
| `--reinstall` | Update einer bestehenden Installation |
| 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:
@@ -76,9 +99,9 @@ sudo bash /opt/ripster/install.sh --reinstall
## Häufige Stolperstellen
- `Permission denied` am Laufwerk: Laufwerksrechte/Gruppen prüfen
- Tools nicht gefunden: `makemkvcon`, `HandBrakeCLI`, `mediainfo` im `PATH` prüfen
- UI nicht erreichbar: nginx-Status und Port/Firewall prüfen
- 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

View File

@@ -8,7 +8,7 @@ Für den normalen Betrieb sind nur wenige Punkte vorab nötig.
### Pflicht
- unterstütztes Linux-System (Debian/Ubuntu)
- 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

View File

@@ -6,7 +6,7 @@ Dieser Ablauf zeigt einen vollständigen Job aus Anwendersicht: von Disc-Erkennu
Erwartung:
- Status wechselt auf `DISC_DETECTED` bzw. `Medium erkannt`
- Status wechselt auf `Medium erkannt`
- im Bereich `Disk-Information` sind Laufwerksdaten sichtbar
Wenn nichts passiert: `Laufwerk neu lesen`.
@@ -19,7 +19,7 @@ Aktion im Dashboard:
Erwartung:
- Status `ANALYZING`
- Status `Analyse`
- danach Metadaten-Dialog
## 3. Metadaten auswählen
@@ -32,11 +32,11 @@ Im Dialog `Metadaten auswählen`:
## 4. Auf den nächsten Zustand reagieren
- Normalfall ohne vorhandenes RAW: `RIPPING` -> `MEDIAINFO_CHECK` -> `READY_TO_ENCODE`
- bei vorhandenem RAW: direkt `MEDIAINFO_CHECK` -> `READY_TO_ENCODE`
- bei unklarer Blu-ray-Playlist: `WAITING_FOR_USER_DECISION` (Playlist auswählen und übernehmen)
- Normalfall ohne vorhandenes RAW: `Rippen` -> `Mediainfo-Pruefung` -> `Bereit zum Encodieren`
- bei vorhandenem RAW: direkt `Mediainfo-Pruefung` -> `Bereit zum Encodieren`
- bei unklarer Blu-ray-Playlist: `Warte auf Auswahl` (Playlist auswählen und übernehmen)
## 5. Review in `READY_TO_ENCODE`
## 5. Review in `Bereit zum Encodieren`
Im aufgeklappten Job (`Pipeline-Status`):
@@ -49,7 +49,7 @@ Dann `Encoding starten`.
## 6. Encoding überwachen
Während `ENCODING`:
Während `Encodieren`:
- Fortschritt + ETA im Dashboard
- Live-Log im `Pipeline-Status`
@@ -57,7 +57,7 @@ Während `ENCODING`:
## 7. Ergebnis prüfen
Bei `FINISHED`:
Bei `Fertig`:
1. Seite `Historie` öffnen
2. Job in Details öffnen

View File

@@ -26,7 +26,7 @@ Zeigt live:
Wichtig für den Betrieb:
- Hohe Speicherauslastung oder fast volle Zielpfade früh erkennen
- über `Settings` aktivierbar/deaktivierbar (`hardware_monitoring_*`)
- über `Settings` aktivierbar/deaktivierbar (`Hardware Monitoring aktiviert`)
## 2) Job Queue
@@ -46,7 +46,7 @@ Mögliche Aktionen:
Hinweis:
- `Parallel` zeigt das aktuell konfigurierte Parallel-Limit (`pipeline_max_parallel_jobs`).
- `Parallel` zeigt den Wert aus `Settings` -> `Parallele Jobs`.
## 3) Skript- / Cron-Status
@@ -71,13 +71,13 @@ Im aufgeklappten Zustand erscheint die Karte `Pipeline-Status` mit allen zustand
| Zustand | Typische Aktion |
|---|---|
| `DISC_DETECTED` / `IDLE` | `Analyse starten` |
| `METADATA_SELECTION` | `Metadaten öffnen` |
| `WAITING_FOR_USER_DECISION` | Playlist wählen und `Playlist übernehmen` |
| `READY_TO_START` | `Job starten` |
| `READY_TO_ENCODE` | Tracks/Skripte prüfen, dann `Encoding starten` |
| laufend (`ANALYZING`/`RIPPING`/`ENCODING`) | `Abbrechen` |
| `ERROR` / `CANCELLED` | `Retry Rippen`, `Disk-Analyse neu starten` |
| `Medium erkannt` / `Bereit` | `Analyse starten` |
| `Metadatenauswahl` | `Metadaten öffnen` |
| `Warte auf Auswahl` | Playlist wählen und `Playlist übernehmen` |
| `Startbereit` | `Job starten` |
| `Bereit zum Encodieren` | Tracks/Skripte prüfen, dann `Encoding starten` |
| laufend (`Analyse`/`Rippen`/`Encodieren`) | `Abbrechen` |
| `Fehler` / `Abgebrochen` | `Retry Rippen`, `Disk-Analyse neu starten` |
Zusätzlich je nach Job:
@@ -85,7 +85,7 @@ Zusätzlich je nach Job:
- `Encode neu starten`
- `Aus Queue löschen`
### Titel-/Spurprüfung (`READY_TO_ENCODE`)
### Titel-/Spurprüfung (`Bereit zum Encodieren`)
Im selben Block siehst du:

View File

@@ -65,7 +65,7 @@ Ein Preset bündelt:
Verwendung:
- Diese Presets erscheinen später im Dashboard im Review (`READY_TO_ENCODE`).
- Diese Presets erscheinen später im Dashboard im Review (`Bereit zum Encodieren`).
## Tab `Cronjobs`

View File

@@ -1,6 +1,6 @@
# Encode-Planung & Track-Auswahl
Ripster erzeugt vor dem Encode einen `encodePlan` und lässt ihn im Review-Panel bestätigen.
Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.
---
@@ -10,27 +10,27 @@ Ripster erzeugt vor dem Encode einen `encodePlan` und lässt ihn im Review-Panel
Quelle bestimmen (Disc/RAW)
-> HandBrake-Scan (--scan --json)
-> Plan erstellen (Titel, Audio, Untertitel)
-> READY_TO_ENCODE
-> Benutzer bestätigt Auswahl
-> Status: Bereit zum Encodieren
-> Benutzer bestaetigt Auswahl
-> finaler HandBrake-Aufruf
```
---
## Review-Inhalt (`READY_TO_ENCODE`)
## Review-Inhalt (Status: `Bereit zum Encodieren`)
- auswählbarer Encode-Titel
- Audio-Track-Selektion
- Untertitel-Track-Selektion inkl. Flags
- Audio-Track-Auswahl
- Untertitel-Track-Auswahl inkl. Flags
- `burnIn`
- `forced`
- `defaultTrack`
- optionale User-Presets (HandBrake-Preset + Extra-Args)
- optionale User-Presets (HandBrake Preset + Extra Args)
- optionale Pre-/Post-Skripte und Ketten
---
## Bestätigung (`confirm-encode`)
## Bestaetigung (`confirm-encode`)
Typischer Payload:
@@ -51,7 +51,7 @@ Typischer Payload:
}
```
Ripster speichert die bestätigte Auswahl in `jobs.encode_plan_json` und markiert `encode_review_confirmed = 1`.
Die bestätigte Auswahl wird im Job gespeichert und für Neustarts wiederverwendet.
---
@@ -83,16 +83,16 @@ Untertitel-Flags werden bei Bedarf ergänzt:
- Pre-Encode läuft vor HandBrake
- Post-Encode läuft nach HandBrake
Verhalten bei Fehlern:
Fehlerverhalten:
- Pre-Encode-Fehler: Job wird als `ERROR` beendet (Encode startet nicht)
- Post-Encode-Fehler: Job kann `FINISHED` bleiben, enthält aber Fehlerhinweis/Script-Summary
- Pre-Encode-Fehler: Job endet mit Status `Fehler` (Encode startet nicht)
- Post-Encode-Fehler: Job kann `Fertig` bleiben, enthält aber Fehlerhinweis/Script-Summary
---
## Dateinamen/Ordner
Der finale Outputpfad wird aus Settings-Templates aufgebaut.
Der finale Outputpfad wird aus den Templates in den Settings aufgebaut.
Platzhalter:
@@ -100,4 +100,4 @@ Platzhalter:
- `${year}`
- `${imdbId}`
Ungültige Dateizeichen werden sanitisiert.
Ungültige Dateizeichen werden bereinigt.

View File

@@ -6,7 +6,7 @@ Ripster analysiert bei Blu-ray-ähnlichen Quellen Playlists und fordert bei Mehr
## Ziel
Erkennen, welche Playlist wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.
Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.
---
@@ -26,20 +26,15 @@ Für Kandidaten werden u. a. berücksichtigt:
- Kohärenz linearer Segmentfolgen
- Duplikatgruppen mit ähnlicher Laufzeit
Daraus entstehen:
- `candidates`
- `evaluatedCandidates` (inkl. Score/Label)
- `recommendation`
- `manualDecisionRequired`
Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.
---
## Wann muss der Benutzer entscheiden?
Wenn nach Filterung mehr als ein relevanter Kandidat übrig bleibt, setzt Ripster `manualDecisionRequired = true` und wechselt auf:
Wenn nach Filterung mehr als ein relevanter Kandidat übrig bleibt, wechselt der Job in der GUI auf:
- `WAITING_FOR_USER_DECISION`
- `Warte auf Auswahl`
Dann muss eine Playlist bestätigt werden, bevor der Workflow weiterläuft.
@@ -47,9 +42,9 @@ Dann muss eine Playlist bestätigt werden, bevor der Workflow weiterläuft.
## Konfigurationseinfluss
| Key | Wirkung |
|-----|---------|
| `makemkv_min_length_minutes` | Mindestlaufzeit für Kandidaten |
| Feld in `Settings` | Wirkung |
|---|---|
| `Minimale Titellaenge (Minuten)` | Mindestlaufzeit für Kandidaten |
Default ist aktuell `60` Minuten.
@@ -61,5 +56,5 @@ Bei manueller Entscheidung zeigt das Dashboard Kandidaten inkl. Score/Bewertung
Nach Bestätigung:
- mit vorhandenem RAW -> zurück zu `MEDIAINFO_CHECK`
- ohne RAW -> Startpfad über `READY_TO_START`/`RIPPING`
- mit vorhandenem RAW -> zurück zu `Mediainfo-Pruefung`
- ohne RAW -> Startpfad über `Startbereit` / `Rippen`

View File

@@ -7,11 +7,11 @@ Ripster kann Skripte und Skript-Ketten vor und nach dem Encode ausführen.
## Ablauf
```text
READY_TO_ENCODE
Bereit zum Encodieren
-> Pre-Encode Skripte/Ketten
-> HandBrake Encoding
-> Post-Encode Skripte/Ketten
-> FINISHED oder ERROR
-> Fertig oder Fehler
```
---
@@ -29,8 +29,8 @@ Im Review-Panel kannst du getrennt wählen:
## Fehlerverhalten
- Pre-Encode-Fehler stoppen die Kette und führen zu `ERROR`.
- Post-Encode-Fehler stoppen die restlichen Post-Schritte; Job kann dennoch `FINISHED` sein (mit Fehlerzusatz im Status/Log).
- Pre-Encode-Fehler stoppen die Kette und führen zu `Fehler`.
- Post-Encode-Fehler stoppen die restlichen Post-Schritte; Job kann dennoch `Fertig` sein (mit Fehlerzusatz im Status/Log).
---

View File

@@ -1,6 +1,6 @@
# Workflow & Zustände
Ripster steuert den Ablauf als State-Machine im `pipelineService`.
Ripster steuert den Ablauf als Zustandsmaschine.
---
@@ -8,41 +8,41 @@ Ripster steuert den Ablauf als State-Machine im `pipelineService`.
```mermaid
flowchart LR
IDLE --> DISC_DETECTED
DISC_DETECTED --> ANALYZING
ANALYZING --> METADATA_SELECTION
METADATA_SELECTION --> READY_TO_START
READY_TO_START --> RIPPING
READY_TO_START --> MEDIAINFO_CHECK
MEDIAINFO_CHECK --> WAITING_FOR_USER_DECISION
WAITING_FOR_USER_DECISION --> MEDIAINFO_CHECK
MEDIAINFO_CHECK --> READY_TO_ENCODE
READY_TO_ENCODE --> ENCODING
ENCODING --> FINISHED
ENCODING --> ERROR
RIPPING --> ERROR
RIPPING --> CANCELLED
A[Bereit] --> B[Medium erkannt]
B --> C[Analyse]
C --> D[Metadatenauswahl]
D --> E[Startbereit]
E --> F[Rippen]
E --> G[Mediainfo-Pruefung]
G --> H[Warte auf Auswahl]
H --> G
G --> I[Bereit zum Encodieren]
I --> J[Encodieren]
J --> K[Fertig]
J --> L[Fehler]
F --> L
F --> M[Abgebrochen]
```
---
## State-Liste
## Statusliste (GUI-Anzeige)
| State | Bedeutung |
|------|-----------|
| `IDLE` | Wartet auf Disc |
| `DISC_DETECTED` | Disc erkannt |
| `ANALYZING` | MakeMKV-Analyse läuft |
| `METADATA_SELECTION` | Benutzer wählt Metadaten |
| `WAITING_FOR_USER_DECISION` | Playlist-Auswahl nötig |
| `READY_TO_START` | Übergangszustand vor Start |
| `RIPPING` | MakeMKV-Rip läuft |
| `MEDIAINFO_CHECK` | Quelle/Tracks werden ausgewertet |
| `READY_TO_ENCODE` | Review ist bereit |
| `ENCODING` | HandBrake läuft |
| `FINISHED` | erfolgreich abgeschlossen |
| `CANCELLED` | abgebrochen |
| `ERROR` | fehlgeschlagen |
| Status in der GUI | Bedeutung |
|---|---|
| `Bereit` | Wartet auf Disc |
| `Medium erkannt` | Disc wurde erkannt |
| `Analyse` | MakeMKV-Analyse läuft |
| `Metadatenauswahl` | Metadaten müssen bestätigt werden |
| `Warte auf Auswahl` | Playlist-Auswahl ist erforderlich |
| `Startbereit` | kurzer Übergang vor Start |
| `Rippen` | MakeMKV-Rip läuft |
| `Mediainfo-Pruefung` | Titel/Spuren werden ausgewertet |
| `Bereit zum Encodieren` | Review ist bereit |
| `Encodieren` | HandBrake läuft |
| `Fertig` | erfolgreich abgeschlossen |
| `Abgebrochen` | manuell oder technisch abgebrochen |
| `Fehler` | fehlgeschlagen |
---
@@ -50,38 +50,38 @@ flowchart LR
### Standardfall (kein vorhandenes RAW)
1. Disc erkannt
1. Medium erkannt
2. Analyse + Metadaten
3. `RIPPING`
4. `MEDIAINFO_CHECK`
5. `READY_TO_ENCODE`
6. `ENCODING`
7. `FINISHED`
3. Rippen
4. Mediainfo-Pruefung
5. Bereit zum Encodieren
6. Encodieren
7. Fertig
### Vorhandenes RAW
`READY_TO_START` springt direkt zu `MEDIAINFO_CHECK` (kein neuer Rip).
`Startbereit` springt direkt zu `Mediainfo-Pruefung` (kein neuer Rip).
### Mehrdeutige Blu-ray-Playlist
`MEDIAINFO_CHECK` -> `WAITING_FOR_USER_DECISION` bis Benutzer Playlist bestätigt.
`Mediainfo-Pruefung` -> `Warte auf Auswahl` bis Playlist bestätigt wurde.
---
## Queue-Verhalten
Wenn `pipeline_max_parallel_jobs` erreicht ist:
Wenn der Wert `Parallele Jobs` erreicht ist:
- Job-Aktionen werden als Queue-Einträge abgelegt
- Queue kann zusätzlich Nicht-Job-Einträge enthalten (`script`, `chain`, `wait`)
- Reihenfolge ist per API/UI änderbar
- neue Starts werden als Queue-Einträge abgelegt
- die Queue kann zusätzlich Nicht-Job-Einträge enthalten (`Skript`, `Kette`, `Warten`)
- Reihenfolge ist per UI/API änderbar
---
## Abbruch, Retry, Restart
## Abbruch, Wiederaufnahme, Neustart
- `cancel`: laufenden Job abbrechen oder Queue-Eintrag entfernen
- `retry`: Fehler-/Abbruch-Job neu starten
- `reencode`: aus vorhandenem RAW neu encodieren
- `restart-review`: Review aus RAW neu aufbauen
- `restart-encode`: Encoding mit letzter bestätigter Auswahl neu starten
- `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ätigter Auswahl neu starten

View File

@@ -43,15 +43,15 @@ HandBrakeCLI -z
---
## Relevante Settings
## Relevante Felder in `Settings`
| Key | Bedeutung |
| Feldname in der GUI | Bedeutung |
|-----|-----------|
| `handbrake_command` | CLI-Binary |
| `handbrake_preset_bluray` / `handbrake_preset_dvd` | profilspezifisches Preset |
| `handbrake_extra_args_bluray` / `handbrake_extra_args_dvd` | profilspezifische Zusatzargumente |
| `output_extension_bluray` / `output_extension_dvd` | Ausgabeformat |
| `handbrake_restart_delete_incomplete_output` | unvollständige Ausgabe bei Neustart löschen |
| `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ändige Ausgabe löschen` | unvollständige Ausgabe bei Neustart löschen |
---

View File

@@ -34,7 +34,7 @@ makemkvcon backup <source> <rawDir> --decrypt
## Registrierungsschlüssel (optional)
Wenn `makemkv_registration_key` gesetzt ist, führt Ripster vor Analyse/Rip aus:
Wenn in `Settings` ein `MakeMKV Key` gesetzt ist, führt Ripster vor Analyse/Rip aus:
```bash
makemkvcon reg <key>
@@ -42,16 +42,16 @@ makemkvcon reg <key>
---
## Relevante Settings
## Relevante Felder in `Settings`
| Key | Bedeutung |
| Feldname in der GUI | Bedeutung |
|-----|-----------|
| `makemkv_command` | CLI-Binary |
| `makemkv_source_index` | Source-Index im Auto-Modus |
| `makemkv_min_length_minutes` | Mindestlaufzeitfilter |
| `makemkv_rip_mode_bluray` / `makemkv_rip_mode_dvd` | `mkv` oder `backup` |
| `makemkv_analyze_extra_args_bluray` / `_dvd` | Zusatzargs Analyse |
| `makemkv_rip_extra_args_bluray` / `_dvd` | Zusatzargs Rip |
| `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ür Analyse |
| `MakeMKV Rip Extra Args` (Blu-ray/DVD) | Zusatzargumente für Rip |
---

View File

@@ -6,21 +6,21 @@ Diese Seite beschreibt typische Abläufe mit den passenden UI-Aktionen.
1. `Dashboard`: Disc einlegen, `Analyse starten`
2. Metadaten im Dialog übernehmen
3. bei `READY_TO_ENCODE` Titel/Tracks prüfen
3. bei `Bereit zum Encodieren` Titel/Tracks prüfen
4. `Encoding starten`
5. Ergebnis in `Historie` kontrollieren
## Workflow 2: Playlist-Entscheidung bei Blu-ray
1. Job landet in `WAITING_FOR_USER_DECISION`
1. Job landet in `Warte auf Auswahl`
2. im `Pipeline-Status` Playlist-Kandidaten vergleichen
3. gewünschte Playlist auswählen
4. `Playlist übernehmen`
5. danach normal weiter bis `READY_TO_ENCODE`
5. danach normal weiter bis `Bereit zum Encodieren`
## Workflow 3: Mehrere Jobs mit Queue
1. Parallel-Limit in `Settings` setzen (`pipeline_max_parallel_jobs`)
1. Parallel-Limit in `Settings` über `Parallele Jobs` setzen
2. neue Jobs starten; überschüssige Starts gehen in `Job Queue`
3. Reihenfolge per Drag-and-Drop anpassen
4. bei Bedarf Skript/Kette/Warten als Queue-Eintrag ergänzen
@@ -49,7 +49,7 @@ In `Historie` -> Detaildialog:
- im Dashboard optional erzeugte RAW/Movie-Datei bereinigen
- anschließend je nach Ziel: `Retry Rippen` oder `Disk-Analyse neu starten`
### Fall B: Job steht in `READY_TO_ENCODE`, ist aber nicht aktive Session
### Fall B: Job steht in `Bereit zum Encodieren`, ist aber nicht aktive Session
- in `Historie` oder `Database`: `Im Dashboard öffnen`
- im Dashboard Review erneut prüfen und starten