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

1
.gitignore vendored
View File

@@ -51,6 +51,7 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
debug/
DATABASE_BLA
# ----------------------------
# Env / secrets (keep examples)
# ----------------------------

View File

@@ -7,7 +7,7 @@ Ripster ist eine lokale Web-Anwendung für halbautomatisches Disc-Ripping mit Ma
## Was Ripster kann
- Disc-Erkennung mit Pipeline-Status in Echtzeit (WebSocket)
- Medienprofil-Erkennung (`bluray`/`dvd`/`other`) aus Device-/Filesystem-Heuristik
- Medienprofil-Erkennung (Blu-ray/DVD/Sonstiges) aus Device-/Filesystem-Heuristik
- Metadaten-Suche und Zuordnung über OMDb
- MakeMKV-Analyse und Rip (`mkv` oder `backup`) mit profilspezifischen Settings
- HandBrake-Review und Encoding mit Track-Auswahl, User-Presets, Extra-Args
@@ -114,10 +114,10 @@ npm run start
Die meisten Einstellungen werden in der App unter `Settings` gepflegt und in SQLite gespeichert:
- Pfade: `raw_dir[_bluray/_dvd/_other]`, `movie_dir[_bluray/_dvd/_other]`, `log_dir`
- Tools: `makemkv_command`, `handbrake_command`, `mediainfo_command`
- Profile: `*_bluray` / `*_dvd` Varianten für Rip-/Encode-Verhalten
- Queue/Monitoring: `pipeline_max_parallel_jobs`, `hardware_monitoring_*`
- Pfade: `Raw Ausgabeordner`, `Film Ausgabeordner`, `Log Ordner` (jeweils mit Blu-ray/DVD/Sonstiges-Varianten)
- Tools: `MakeMKV Kommando`, `HandBrake Kommando`, `Mediainfo Kommando`
- Profile: medientyp-spezifische Felder für Blu-ray/DVD/Sonstiges (z. B. Preset, Zusatzargumente, Ausgabeformat)
- Queue/Monitoring: `Parallele Jobs`, `Hardware Monitoring aktiviert`, `Hardware Monitoring Intervall (ms)`
- Benachrichtigungen: PushOver
### Umgebungsvariablen
@@ -231,7 +231,7 @@ ripster/
- prüfen, ob Frontend über Vite-Proxy läuft (`/ws` -> Backend)
- bei Reverse-Proxy Upgrade-Header für `/ws` setzen
- Keine Disc erkannt:
- `drive_mode=explicit` testen und `drive_device` setzen (z. B. `/dev/sr0`)
- in den Settings `Laufwerksmodus` auf `Explizites Device` stellen und `Device Pfad` setzen (z. B. `/dev/sr0`)
- HandBrake/MakeMKV Fehler:
- CLI-Binaries im `PATH` prüfen
- Preset-Name mit `HandBrakeCLI -z` prüfen

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long