HandBrake
This commit is contained in:
@@ -115,11 +115,11 @@ Sendet eine Test-Benachrichtigung über PushOver.
|
||||
|
||||
## Skript-Verwaltung
|
||||
|
||||
Post-Encode-Skripte werden über eigene Endpunkte unter `/api/settings/scripts` verwaltet.
|
||||
Skripte werden über eigene Endpunkte unter `/api/settings/scripts` verwaltet. Jedes Skript hat eine `scriptBody`-Property (der Shell-Befehl oder mehrzeiliges Skript) und einen `orderIndex` für die Sortierung.
|
||||
|
||||
### GET /api/settings/scripts
|
||||
|
||||
Gibt alle konfigurierten Skripte zurück.
|
||||
Gibt alle Skripte zurück, sortiert nach `orderIndex`.
|
||||
|
||||
**Response:**
|
||||
|
||||
@@ -127,11 +127,12 @@ Gibt alle konfigurierten Skripte zurück.
|
||||
{
|
||||
"scripts": [
|
||||
{
|
||||
"id": "script-abc123",
|
||||
"id": 1,
|
||||
"name": "Zu Plex verschieben",
|
||||
"command": "/home/michael/scripts/move-to-plex.sh",
|
||||
"description": "Verschiebt die fertige Datei ins Plex-Verzeichnis",
|
||||
"createdAt": "2024-01-15T10:00:00.000Z"
|
||||
"scriptBody": "mv \"$RIPSTER_OUTPUT_PATH\" /mnt/plex/movies/",
|
||||
"orderIndex": 1,
|
||||
"createdAt": "2026-01-15T10:00:00.000Z",
|
||||
"updatedAt": "2026-01-15T10:00:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -141,75 +142,46 @@ Gibt alle konfigurierten Skripte zurück.
|
||||
|
||||
### POST /api/settings/scripts
|
||||
|
||||
Legt ein neues Post-Encode-Skript an.
|
||||
Legt ein neues Skript an.
|
||||
|
||||
**Request:**
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Zu Plex verschieben",
|
||||
"command": "/home/michael/scripts/move-to-plex.sh",
|
||||
"description": "Verschiebt die fertige Datei ins Plex-Verzeichnis"
|
||||
"scriptBody": "mv \"$RIPSTER_OUTPUT_PATH\" /mnt/plex/movies/"
|
||||
}
|
||||
```
|
||||
|
||||
| Feld | Typ | Pflicht | Beschreibung |
|
||||
|------|-----|---------|-------------|
|
||||
| `name` | string | ✅ | Anzeigename |
|
||||
| `command` | string | ✅ | Shell-Befehl oder absoluter Skriptpfad |
|
||||
| `description` | string | — | Optionale Beschreibung |
|
||||
| `name` | string | ✅ | Anzeigename (eindeutig) |
|
||||
| `scriptBody` | string | ✅ | Shell-Befehl oder mehrzeiliges Skript |
|
||||
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{
|
||||
"ok": true,
|
||||
"script": {
|
||||
"id": "script-abc123",
|
||||
"name": "Zu Plex verschieben",
|
||||
"command": "/home/michael/scripts/move-to-plex.sh"
|
||||
}
|
||||
}
|
||||
```
|
||||
**Response:** `201 Created` – `{ "script": { ... } }`
|
||||
|
||||
---
|
||||
|
||||
### PUT /api/settings/scripts/:scriptId
|
||||
### PUT /api/settings/scripts/:id
|
||||
|
||||
Aktualisiert ein vorhandenes Skript.
|
||||
|
||||
**URL-Parameter:** `scriptId`
|
||||
|
||||
**Request:** Gleiche Felder wie beim Anlegen (alle optional).
|
||||
|
||||
```json
|
||||
{ "name": "Zu Jellyfin verschieben", "command": "/home/michael/scripts/move-to-jellyfin.sh" }
|
||||
```
|
||||
|
||||
**Response:** `{ "ok": true }`
|
||||
Aktualisiert ein vorhandenes Skript. Alle Felder optional.
|
||||
|
||||
---
|
||||
|
||||
### DELETE /api/settings/scripts/:scriptId
|
||||
### DELETE /api/settings/scripts/:id
|
||||
|
||||
Löscht ein Skript.
|
||||
|
||||
**URL-Parameter:** `scriptId`
|
||||
|
||||
**Response:** `{ "ok": true }`
|
||||
|
||||
!!! warning "Referenzen in Jobs"
|
||||
Wenn das Skript in laufenden oder abgeschlossenen Jobs referenziert wird, wird es trotzdem gelöscht. In zukünftigen Encode-Reviews erscheint es nicht mehr.
|
||||
!!! warning "Referenzen"
|
||||
Das Skript wird gelöscht, auch wenn es in Job-Historien referenziert ist. In zukünftigen Reviews erscheint es nicht mehr.
|
||||
|
||||
---
|
||||
|
||||
### POST /api/settings/scripts/:scriptId/test
|
||||
### POST /api/settings/scripts/:id/test
|
||||
|
||||
Führt ein Skript mit Platzhalter-Umgebungsvariablen aus (Testlauf).
|
||||
|
||||
**URL-Parameter:** `scriptId`
|
||||
|
||||
**Response (Erfolg):**
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -221,18 +193,6 @@ Führt ein Skript mit Platzhalter-Umgebungsvariablen aus (Testlauf).
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Fehler):**
|
||||
|
||||
```json
|
||||
{
|
||||
"ok": false,
|
||||
"exitCode": 1,
|
||||
"stdout": "",
|
||||
"stderr": "Datei nicht gefunden: /home/michael/scripts/move-to-plex.sh",
|
||||
"durationMs": 12
|
||||
}
|
||||
```
|
||||
|
||||
**Platzhalter-Werte beim Testlauf:**
|
||||
|
||||
| Variable | Testwert |
|
||||
@@ -246,28 +206,149 @@ Führt ein Skript mit Platzhalter-Umgebungsvariablen aus (Testlauf).
|
||||
|
||||
---
|
||||
|
||||
### POST /api/settings/scripts/reorder
|
||||
|
||||
Ändert die Reihenfolge der Skripte (persistiert in `order_index`).
|
||||
|
||||
**Request:**
|
||||
|
||||
```json
|
||||
{ "orderedScriptIds": [3, 1, 2] }
|
||||
```
|
||||
|
||||
**Response:** `{ "scripts": [ ... ] }` – alle Skripte in neuer Reihenfolge.
|
||||
|
||||
---
|
||||
|
||||
## Skript-Ketten-Verwaltung
|
||||
|
||||
Skript-Ketten werden unter `/api/settings/script-chains` verwaltet.
|
||||
|
||||
### GET /api/settings/script-chains
|
||||
|
||||
Gibt alle Ketten zurück (inkl. Schritte).
|
||||
|
||||
### POST /api/settings/script-chains
|
||||
|
||||
Legt eine neue Kette an.
|
||||
|
||||
```json
|
||||
{ "name": "Nach Jellyfin deployen" }
|
||||
```
|
||||
|
||||
### PUT /api/settings/script-chains/:id
|
||||
|
||||
Aktualisiert eine Kette (Name, Schritte).
|
||||
|
||||
### DELETE /api/settings/script-chains/:id
|
||||
|
||||
Löscht eine Kette und alle ihre Schritte.
|
||||
|
||||
### POST /api/settings/script-chains/:id/test
|
||||
|
||||
Führt eine Kette mit Platzhalter-Umgebungsvariablen aus (Testlauf).
|
||||
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{
|
||||
"result": {
|
||||
"success": true,
|
||||
"steps": [
|
||||
{ "scriptId": 1, "scriptName": "Zu Plex verschieben", "success": true, "exitCode": 0 }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### POST /api/settings/script-chains/reorder
|
||||
|
||||
Ändert die Reihenfolge der Ketten (persistiert in `order_index`).
|
||||
|
||||
**Request:**
|
||||
|
||||
```json
|
||||
{ "orderedChainIds": [2, 1, 3] }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## User-Presets
|
||||
|
||||
Benannte HandBrake-Preset-Sammlungen, die im Encode-Review schnell angewendet werden können. Unter `/api/settings/user-presets` verwaltet.
|
||||
|
||||
### GET /api/settings/user-presets
|
||||
|
||||
Gibt alle User-Presets zurück. Optional gefiltert per Query-Parameter `mediaType`.
|
||||
|
||||
**Query-Parameter:**
|
||||
|
||||
| Parameter | Werte | Beschreibung |
|
||||
|-----------|-------|-------------|
|
||||
| `mediaType` | `bluray`, `dvd`, `other`, `all` | Filtert Presets nach Medientyp |
|
||||
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{
|
||||
"presets": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Blu-ray High Quality",
|
||||
"mediaType": "bluray",
|
||||
"handbrakePreset": "H.265 MKV 1080p30",
|
||||
"extraArgs": "--encoder-preset slow",
|
||||
"description": "Langsam, aber beste Qualität",
|
||||
"createdAt": "2026-01-15T10:00:00.000Z",
|
||||
"updatedAt": "2026-01-15T10:00:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### POST /api/settings/user-presets
|
||||
|
||||
Legt ein neues User-Preset an.
|
||||
|
||||
**Request:**
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Blu-ray High Quality",
|
||||
"mediaType": "bluray",
|
||||
"handbrakePreset": "H.265 MKV 1080p30",
|
||||
"extraArgs": "--encoder-preset slow",
|
||||
"description": "Langsam, aber beste Qualität"
|
||||
}
|
||||
```
|
||||
|
||||
| Feld | Typ | Pflicht | Beschreibung |
|
||||
|------|-----|---------|-------------|
|
||||
| `name` | string | ✅ | Anzeigename |
|
||||
| `mediaType` | string | — | `bluray`, `dvd`, `other`, `all` (Standard: `all`) |
|
||||
| `handbrakePreset` | string | — | HandBrake-Preset-Name (`-Z`) |
|
||||
| `extraArgs` | string | — | Zusatz-CLI-Argumente |
|
||||
| `description` | string | — | Optionale Beschreibung |
|
||||
|
||||
**Response:** `201 Created` – `{ "preset": { ... } }`
|
||||
|
||||
---
|
||||
|
||||
### PUT /api/settings/user-presets/:id
|
||||
|
||||
Aktualisiert ein User-Preset. Alle Felder optional.
|
||||
|
||||
---
|
||||
|
||||
### DELETE /api/settings/user-presets/:id
|
||||
|
||||
Löscht ein User-Preset.
|
||||
|
||||
---
|
||||
|
||||
## Einstellungs-Schlüssel Referenz
|
||||
|
||||
Eine vollständige Liste aller Einstellungs-Schlüssel:
|
||||
|
||||
| Schlüssel | Kategorie | Typ | Beschreibung |
|
||||
|---------|----------|-----|-------------|
|
||||
| `raw_dir` | paths | string | Raw-MKV Verzeichnis |
|
||||
| `movie_dir` | paths | string | Ausgabe-Verzeichnis |
|
||||
| `log_dir` | paths | string | Log-Verzeichnis |
|
||||
| `makemkv_command` | tools | string | MakeMKV-Befehl |
|
||||
| `handbrake_command` | tools | string | HandBrake-Befehl |
|
||||
| `mediainfo_command` | tools | string | MediaInfo-Befehl |
|
||||
| `handbrake_preset` | encoding | string | HandBrake-Preset-Name |
|
||||
| `handbrake_extra_args` | encoding | string | Zusatz-Argumente |
|
||||
| `output_extension` | encoding | string | Dateiendung (z.B. `mkv`) |
|
||||
| `filename_template` | encoding | string | Dateiname-Template |
|
||||
| `drive_mode` | drive | select | `auto` oder `explicit` |
|
||||
| `drive_device` | drive | string | Geräte-Pfad |
|
||||
| `disc_poll_interval_ms` | drive | number | Polling-Intervall (ms) |
|
||||
| `makemkv_min_length_minutes` | makemkv | number | Min. Titellänge (Minuten) |
|
||||
| `makemkv_backup_mode` | makemkv | boolean | Backup-Modus aktivieren |
|
||||
| `omdb_api_key` | omdb | string | OMDb API-Key |
|
||||
| `omdb_default_type` | omdb | select | Standard-Suchtyp |
|
||||
| `pushover_user_key` | notifications | string | PushOver User-Key |
|
||||
| `pushover_api_token` | notifications | string | PushOver API-Token |
|
||||
Eine vollständige Übersicht aller Schlüssel:
|
||||
[:octicons-arrow-right-24: Einstellungsreferenz](../configuration/settings-reference.md)
|
||||
|
||||
@@ -167,6 +167,52 @@ Fehler im Laufwerkserkennungsdienst.
|
||||
}
|
||||
```
|
||||
|
||||
### SETTINGS_SCRIPTS_UPDATED
|
||||
|
||||
Wird gesendet, wenn ein Skript angelegt, aktualisiert, gelöscht oder umsortiert wurde.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "SETTINGS_SCRIPTS_UPDATED",
|
||||
"payload": {
|
||||
"action": "reordered",
|
||||
"count": 3
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`action` ist `"created"`, `"updated"`, `"deleted"` oder `"reordered"`.
|
||||
|
||||
### SETTINGS_SCRIPT_CHAINS_UPDATED
|
||||
|
||||
Wird gesendet bei Änderungen an Skript-Ketten.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "SETTINGS_SCRIPT_CHAINS_UPDATED",
|
||||
"payload": {
|
||||
"action": "created",
|
||||
"id": 2
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### USER_PRESETS_UPDATED
|
||||
|
||||
Wird gesendet, wenn ein User-Preset angelegt, aktualisiert oder gelöscht wurde.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "USER_PRESETS_UPDATED",
|
||||
"payload": {
|
||||
"action": "created",
|
||||
"id": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`action` ist `"created"`, `"updated"` oder `"deleted"`.
|
||||
|
||||
### CRON_JOBS_UPDATED
|
||||
|
||||
Wird gesendet, wenn ein Cron-Job angelegt, aktualisiert oder gelöscht wurde.
|
||||
|
||||
@@ -46,7 +46,7 @@ flowchart LR
|
||||
WUD -->|selectMetadata(selectedPlaylist)| MIC
|
||||
MIC -->|Tracks analysiert| RTE[READY_TO\nENCODE]
|
||||
RTE -->|confirmEncodeReview() + startPreparedJob()| ENC[ENCODING]
|
||||
ENC -->|HandBrake + Post-Skripte fertig| FIN([FINISHED])
|
||||
ENC -->|Pre-Encode → HandBrake → Post-Encode fertig| FIN([FINISHED])
|
||||
ENC -->|Abbruch| CAN([CANCELLED])
|
||||
ENC -->|Fehler| ERR([ERROR])
|
||||
RIP -->|Fehler| ERR
|
||||
@@ -84,10 +84,18 @@ Der Service pollt das Laufwerk im konfigurierten Intervall (`disc_poll_interval_
|
||||
|
||||
```js
|
||||
// Ereignisse
|
||||
emit('discInserted', { path: '/dev/sr0' })
|
||||
emit('discInserted', { path: '/dev/sr0', mediaProfile: 'bluray', ... })
|
||||
emit('discRemoved', { path: '/dev/sr0' })
|
||||
```
|
||||
|
||||
### Media-Profil-Erkennung
|
||||
|
||||
Das erkannte Gerät enthält ein `mediaProfile`-Feld (`"bluray"`, `"dvd"`, `"other"` oder `null`). Die Erkennung nutzt eine Heuristik aus drei Quellen (absteigend nach Priorität):
|
||||
|
||||
1. Explizit gesetztes `media_profile` aus den Settings
|
||||
2. Disc-Label und Laufwerks-Modell (Regex gegen bekannte Begriffe)
|
||||
3. Dateisystemtyp: `udf` → bevorzugt DVD, kombiniert mit Modell; `iso9660/cdfs` → DVD oder CD
|
||||
|
||||
---
|
||||
|
||||
## processRunner.js
|
||||
@@ -170,20 +178,50 @@ Verwaltet alle Anwendungseinstellungen.
|
||||
### Features
|
||||
|
||||
- **Schema-getriebene Validierung**: Jede Einstellung hat Typ, Grenzen und Pflichtfeld-Flag
|
||||
- **Kategorisierung**: Einstellungen sind in Kategorien gruppiert (Paths, Tools, Encoding, ...)
|
||||
- **Kategorisierung**: Einstellungen sind in Kategorien gruppiert (Pfade, Tools, Metadaten, …)
|
||||
- **Persistenz**: Werte in SQLite, Schema ebenfalls in SQLite
|
||||
- **Defaults**: `defaultSettings.js` definiert Standardwerte
|
||||
- **Profil-Auflösung**: `resolveEffectiveToolSettings(settingsMap, mediaProfile)` wählt automatisch die profil-spezifischen Werte (`_bluray`/`_dvd`) und fällt auf den globalen Wert zurück
|
||||
|
||||
### Profil-Auflösung
|
||||
|
||||
```js
|
||||
// Löst alle profil-spezifischen Keys auf und gibt einen effektiven Einstellungs-Map zurück
|
||||
const effective = await settingsService.getEffectiveSettingsMap('bluray');
|
||||
// effective.handbrake_preset → Wert aus handbrake_preset_bluray (falls gesetzt)
|
||||
// effective.raw_dir → Wert aus raw_dir_bluray (kein Fallback bei Pfaden)
|
||||
```
|
||||
|
||||
### Einstellungs-Kategorien
|
||||
|
||||
| Kategorie | Einstellungen |
|
||||
|-----------|--------------|
|
||||
| `Pfade` | `raw_dir`, `movie_dir`, `log_dir` |
|
||||
| Kategorie | Ausgewählte Schlüssel |
|
||||
|-----------|----------------------|
|
||||
| `Pfade` | `raw_dir[_bluray/_dvd/_other]`, `movie_dir[_bluray/_dvd/_other]`, `log_dir` |
|
||||
| `Laufwerk` | `drive_mode`, `drive_device`, `disc_poll_interval_ms`, `makemkv_source_index` |
|
||||
| `Monitoring` | `hardware_monitoring_enabled`, `hardware_monitoring_interval_ms` |
|
||||
| `Tools` | `makemkv_command`, `handbrake_command`, `mediainfo_command`, `pipeline_max_parallel_jobs` |
|
||||
| `Tools – Blu-ray` | `handbrake_preset_bluray`, `makemkv_rip_mode_bluray`, … |
|
||||
| `Tools – DVD` | `handbrake_preset_dvd`, `makemkv_rip_mode_dvd`, … |
|
||||
| `Metadaten` | `omdb_api_key`, `omdb_default_type` |
|
||||
| `Benachrichtigungen` | `pushover_user_key`, `pushover_api_token` |
|
||||
| `Benachrichtigungen` | `pushover_enabled`, `pushover_token`, `pushover_notify_*` |
|
||||
|
||||
---
|
||||
|
||||
## userPresetService.js
|
||||
|
||||
Verwaltet benannte HandBrake-Preset-Sammlungen pro Medientyp.
|
||||
|
||||
### Methoden
|
||||
|
||||
| Methode | Beschreibung |
|
||||
|---------|-------------|
|
||||
| `listPresets(mediaType?)` | Alle Presets; optional nach Medientyp filtern (`bluray`/`dvd`/`other`/`all`) |
|
||||
| `getPresetById(id)` | Einzelnes Preset |
|
||||
| `createPreset(payload)` | Neues Preset anlegen |
|
||||
| `updatePreset(id, payload)` | Preset aktualisieren |
|
||||
| `deletePreset(id)` | Preset löschen |
|
||||
|
||||
!!! info "mediaType = 'all'"
|
||||
Presets mit `mediaType = 'all'` erscheinen bei Filterung nach jedem Medientyp.
|
||||
|
||||
---
|
||||
|
||||
@@ -204,6 +242,33 @@ Datenbankoperationen für Job-Historie.
|
||||
|
||||
---
|
||||
|
||||
## cronService.js
|
||||
|
||||
Eingebautes Cron-System ohne externe Abhängigkeiten.
|
||||
|
||||
### Features
|
||||
|
||||
- **Eigener Expression-Parser**: Unterstützt alle Standard-5-Felder-Cron-Ausdrücke (`* /n`, Bereiche, Listen)
|
||||
- **Skripte und Ketten**: Cron-Jobs können ein Skript (`sourceType: "script"`) oder eine Kette (`sourceType: "chain"`) ausführen
|
||||
- **Log-Rotation**: Max. 50 Logs pro Job, Ausgabe auf 100.000 Zeichen begrenzt
|
||||
- **PushOver-Integration**: Optionale Benachrichtigung nach jeder Ausführung
|
||||
- **Manuelle Auslösung**: `triggerJobManually(id)` – läuft unabhängig vom Zeitplan
|
||||
|
||||
### Methoden
|
||||
|
||||
| Methode | Beschreibung |
|
||||
|---------|-------------|
|
||||
| `listJobs()` | Alle Cron-Jobs |
|
||||
| `createJob(payload)` | Neuen Job anlegen |
|
||||
| `updateJob(id, payload)` | Job aktualisieren |
|
||||
| `deleteJob(id)` | Job löschen |
|
||||
| `getJobLogs(id, limit)` | Ausführungs-Logs |
|
||||
| `triggerJobManually(id)` | Sofortige Ausführung |
|
||||
| `validateExpression(expr)` | Ausdruck validieren |
|
||||
| `getNextRunTime(expr)` | Nächsten Ausführungszeitpunkt berechnen |
|
||||
|
||||
---
|
||||
|
||||
## notificationService.js
|
||||
|
||||
PushOver-Push-Benachrichtigungen.
|
||||
|
||||
@@ -14,6 +14,7 @@ pipeline_state -- Aktueller Pipeline-Zustand (Singleton)
|
||||
scripts -- Shell-Skripte für Pre-/Post-Encode-Ausführung
|
||||
script_chains -- Geordnete Ketten aus mehreren Skripten
|
||||
script_chain_steps -- Einzelschritte einer Skript-Kette
|
||||
user_presets -- Benannte HandBrake-Preset-Sammlungen pro Medientyp
|
||||
cron_jobs -- Zeitgesteuerte Aufgaben (eigener Cron-Parser)
|
||||
cron_run_logs -- Ausführungs-Protokolle für Cron-Jobs
|
||||
```
|
||||
@@ -161,6 +162,28 @@ CREATE TABLE script_chain_steps (
|
||||
|
||||
---
|
||||
|
||||
## Tabelle: user_presets
|
||||
|
||||
Speichert benannte HandBrake-Preset-Sammlungen pro Medientyp.
|
||||
|
||||
```sql
|
||||
CREATE TABLE user_presets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
media_type TEXT NOT NULL DEFAULT 'all', -- 'bluray', 'dvd', 'other', 'all'
|
||||
handbrake_preset TEXT,
|
||||
extra_args TEXT,
|
||||
description TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
!!! info "Medientyp-Filter"
|
||||
`GET /api/settings/user-presets?mediaType=bluray` gibt Presets mit `media_type = 'bluray'` **und** `media_type = 'all'` zurück.
|
||||
|
||||
---
|
||||
|
||||
## Tabellen: cron_jobs & cron_run_logs
|
||||
|
||||
Speichern den Zeitplan und die Ausführungs-Historie des eingebauten Cron-Systems.
|
||||
|
||||
@@ -1,138 +1,180 @@
|
||||
# Einstellungsreferenz
|
||||
|
||||
Vollständige Übersicht aller Ripster-Einstellungen. Alle Einstellungen werden über die Web-Oberfläche unter **Einstellungen** verwaltet.
|
||||
Vollständige Übersicht aller Ripster-Einstellungen. Alle Einstellungen werden über die Web-Oberfläche unter **Einstellungen** verwaltet und in SQLite gespeichert.
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Pfade (paths)
|
||||
## Profil-System
|
||||
|
||||
| Schlüssel | Typ | Standard | Pflicht | Beschreibung |
|
||||
|---------|-----|---------|---------|-------------|
|
||||
| `raw_dir` | string | — | ✅ | Verzeichnis für rohe MKV-Dateien nach dem Ripping |
|
||||
| `movie_dir` | string | — | ✅ | Ausgabeverzeichnis für encodierte Filme |
|
||||
| `log_dir` | string | `./logs` | — | Verzeichnis für Log-Dateien |
|
||||
Ripster erkennt den Medientyp einer eingelegten Disc (Blu-ray / DVD / CD) und wählt automatisch die passenden profil-spezifischen Einstellungen. Für viele Schlüssel gibt es zusätzlich zur globalen Einstellung eine Variante pro Profil:
|
||||
|
||||
!!! example "Beispielkonfiguration"
|
||||
```
|
||||
raw_dir = /mnt/nas/raw
|
||||
movie_dir = /mnt/nas/movies
|
||||
log_dir = /var/log/ripster
|
||||
```
|
||||
| Profil | Erkennungsmerkmale |
|
||||
|--------|--------------------|
|
||||
| `bluray` | UDF-Dateisystem, Laufwerk-Modell enthält „Blu-ray", Disc-Label wie BDMV |
|
||||
| `dvd` | ISO9660/UDF, Laufwerk-Modell enthält „DVD", VIDEO_TS-Struktur |
|
||||
| `other` | Alles andere (CD, unbekannt) |
|
||||
|
||||
**Auflösungsreihenfolge für profil-spezifische Einstellungen:**
|
||||
|
||||
1. Profil-spezifischer Wert (`_bluray` / `_dvd`) – wenn gesetzt, hat dieser Vorrang
|
||||
2. Alternativ-Profil als Fallback (Blu-ray → DVD-Wert als Fallback und umgekehrt)
|
||||
|
||||
Pfad-Einstellungen (`raw_dir`, `movie_dir`) und Besitz-Einstellungen (`raw_dir_owner`, `movie_dir_owner`) werden **ausschließlich** aus dem passenden Profil bezogen – kein Cross-Profil-Fallback.
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Tools (tools)
|
||||
## Kategorie: Pfade
|
||||
|
||||
| Schlüssel | Typ | Pflicht | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `raw_dir` | string | ✅ | Verzeichnis für rohe MKV-Dateien (Fallback wenn kein Profil-Wert) |
|
||||
| `raw_dir_bluray` | string | — | Raw-Verzeichnis für Blu-rays |
|
||||
| `raw_dir_dvd` | string | — | Raw-Verzeichnis für DVDs |
|
||||
| `raw_dir_other` | string | — | Raw-Verzeichnis für sonstige Medien |
|
||||
| `raw_dir_owner` | string | — | Besitzer für Raw-Verzeichnis (`user:group`, Fallback) |
|
||||
| `raw_dir_bluray_owner` | string | — | Besitzer für Raw-Verzeichnis (Blu-ray) |
|
||||
| `raw_dir_dvd_owner` | string | — | Besitzer für Raw-Verzeichnis (DVD) |
|
||||
| `raw_dir_other_owner` | string | — | Besitzer für Raw-Verzeichnis (Sonstiges) |
|
||||
| `movie_dir` | string | ✅ | Ausgabeverzeichnis für Filme (Fallback) |
|
||||
| `movie_dir_bluray` | string | — | Ausgabeverzeichnis für Blu-rays |
|
||||
| `movie_dir_dvd` | string | — | Ausgabeverzeichnis für DVDs |
|
||||
| `movie_dir_other` | string | — | Ausgabeverzeichnis für sonstige Medien |
|
||||
| `movie_dir_owner` | string | — | Besitzer für Ausgabeverzeichnis (Fallback) |
|
||||
| `movie_dir_bluray_owner` | string | — | Besitzer für Ausgabeverzeichnis (Blu-ray) |
|
||||
| `movie_dir_dvd_owner` | string | — | Besitzer für Ausgabeverzeichnis (DVD) |
|
||||
| `movie_dir_other_owner` | string | — | Besitzer für Ausgabeverzeichnis (Sonstiges) |
|
||||
| `log_dir` | string | — | Verzeichnis für Log-Dateien (Standard: `./logs`) |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Laufwerk
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|---------|-----|---------|-------------|
|
||||
|-----------|-----|---------|-------------|
|
||||
| `drive_mode` | select | `auto` | `auto` = automatisch erkennen, `explicit` = festes Gerät |
|
||||
| `drive_device` | string | `/dev/sr0` | Geräte-Pfad (nur bei `explicit`) |
|
||||
| `disc_poll_interval_ms` | number | `4000` | Polling-Intervall in Millisekunden (1000–60000) |
|
||||
| `makemkv_source_index` | number | `0` | Laufwerk-Index für MakeMKV (bei mehreren Laufwerken) |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Tools (global)
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `makemkv_command` | string | `makemkvcon` | Befehl oder absoluter Pfad zu MakeMKV |
|
||||
| `handbrake_command` | string | `HandBrakeCLI` | Befehl oder absoluter Pfad zu HandBrake |
|
||||
| `mediainfo_command` | string | `mediainfo` | Befehl oder absoluter Pfad zu MediaInfo |
|
||||
| `makemkv_min_length_minutes` | number | `15` | Mindest-Titellänge in Minuten (0–999) |
|
||||
| `pipeline_max_parallel_jobs` | number | `1` | Maximale Anzahl parallel laufender Jobs (1–12) |
|
||||
| `handbrake_restart_delete_incomplete_output` | boolean | `true` | Unvollständige Ausgabedatei beim Encode-Neustart löschen |
|
||||
|
||||
!!! tip "Absolute Pfade verwenden"
|
||||
Falls die Tools nicht im `PATH` des Systems sind:
|
||||
```
|
||||
makemkv_command = /usr/local/bin/makemkvcon
|
||||
handbrake_command = /usr/local/bin/HandBrakeCLI
|
||||
mediainfo_command = /usr/bin/mediainfo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Encoding (encoding)
|
||||
### Kategorie: Tools – Blu-ray
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|---------|-----|---------|-------------|
|
||||
| `handbrake_preset` | string | `H.265 MKV 1080p30` | Name des HandBrake-Presets |
|
||||
| `handbrake_extra_args` | string | _(leer)_ | Zusätzliche HandBrake CLI-Argumente |
|
||||
| `output_extension` | string | `mkv` | Dateiendung der Ausgabedatei |
|
||||
| `filename_template` | string | `{title} ({year})` | Template für den Dateinamen |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `makemkv_rip_mode_bluray` | select | `backup` | Rip-Modus: `mkv` oder `backup` |
|
||||
| `makemkv_analyze_extra_args_bluray` | string | — | Zusatz-CLI-Parameter für Analyse (Blu-ray) |
|
||||
| `makemkv_rip_extra_args_bluray` | string | — | Zusatz-CLI-Parameter für Rip (Blu-ray) |
|
||||
| `mediainfo_extra_args_bluray` | string | — | Zusatz-CLI-Parameter für mediainfo (Blu-ray) |
|
||||
| `handbrake_preset_bluray` | string | `H.264 MKV 1080p30` | HandBrake-Preset für Blu-rays |
|
||||
| `handbrake_extra_args_bluray` | string | — | Zusatz-CLI-Argumente für HandBrake (Blu-ray) |
|
||||
| `output_extension_bluray` | select | `mkv` | Ausgabeformat: `mkv` oder `mp4` |
|
||||
| `filename_template_bluray` | string | `${title} (${year})` | Dateiname-Template (Blu-ray) |
|
||||
| `output_folder_template_bluray` | string | — | Ordnername-Template (Blu-ray, leer = Dateiname-Template) |
|
||||
|
||||
### Verfügbare HandBrake-Presets
|
||||
### Kategorie: Tools – DVD
|
||||
|
||||
Eine vollständige Liste der verfügbaren Presets:
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `makemkv_rip_mode_dvd` | select | `mkv` | Rip-Modus: `mkv` oder `backup` |
|
||||
| `makemkv_analyze_extra_args_dvd` | string | — | Zusatz-CLI-Parameter für Analyse (DVD) |
|
||||
| `makemkv_rip_extra_args_dvd` | string | — | Zusatz-CLI-Parameter für Rip (DVD) |
|
||||
| `mediainfo_extra_args_dvd` | string | — | Zusatz-CLI-Parameter für mediainfo (DVD) |
|
||||
| `handbrake_preset_dvd` | string | `H.264 MKV 480p30` | HandBrake-Preset für DVDs |
|
||||
| `handbrake_extra_args_dvd` | string | — | Zusatz-CLI-Argumente für HandBrake (DVD) |
|
||||
| `output_extension_dvd` | select | `mkv` | Ausgabeformat: `mkv` oder `mp4` |
|
||||
| `filename_template_dvd` | string | `${title} (${year})` | Dateiname-Template (DVD) |
|
||||
| `output_folder_template_dvd` | string | — | Ordnername-Template (DVD, leer = Dateiname-Template) |
|
||||
|
||||
```bash
|
||||
HandBrakeCLI --preset-list
|
||||
```
|
||||
### Globale Fallback-Einstellungen für Encode
|
||||
|
||||
Häufig verwendete Presets:
|
||||
Diese Werte werden verwendet, wenn kein profil-spezifischer Wert konfiguriert ist:
|
||||
|
||||
| Preset | Beschreibung |
|
||||
|--------|-------------|
|
||||
| `H.265 MKV 1080p30` | H.265/HEVC, Full-HD, 30fps |
|
||||
| `H.265 MKV 720p30` | H.265/HEVC, HD, 30fps |
|
||||
| `H.264 MKV 1080p30` | H.264/AVC, Full-HD, 30fps |
|
||||
| `HQ 1080p30 Surround` | Hohe Qualität, Full-HD mit Surround |
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `handbrake_preset` | string | `H.265 MKV 1080p30` | Fallback HandBrake-Preset |
|
||||
| `handbrake_extra_args` | string | — | Fallback Extra-Args |
|
||||
| `makemkv_rip_mode` | select | `mkv` | Fallback Rip-Modus |
|
||||
| `makemkv_analyze_extra_args` | string | — | Fallback Analyse-Args |
|
||||
| `makemkv_rip_extra_args` | string | — | Fallback Rip-Args |
|
||||
| `mediainfo_extra_args` | string | — | Fallback MediaInfo-Args |
|
||||
| `output_extension` | select | `mkv` | Fallback Ausgabeformat |
|
||||
| `filename_template` | string | `${title} (${year})` | Fallback Dateiname-Template |
|
||||
| `output_folder_template` | string | — | Fallback Ordnername-Template |
|
||||
|
||||
### Dateiname-Template-Platzhalter
|
||||
### Template-Platzhalter
|
||||
|
||||
| Platzhalter | Beispiel |
|
||||
|------------|---------|
|
||||
| `{title}` | `Inception` |
|
||||
| `{year}` | `2010` |
|
||||
| `{imdb_id}` | `tt1375666` |
|
||||
| `{type}` | `movie` |
|
||||
| `${title}` | `Inception` |
|
||||
| `${year}` | `2010` |
|
||||
| `${imdbId}` | `tt1375666` |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Laufwerk (drive)
|
||||
|
||||
| Schlüssel | Typ | Standard | Optionen | Beschreibung |
|
||||
|---------|-----|---------|---------|-------------|
|
||||
| `drive_mode` | select | `auto` | `auto`, `explicit` | Laufwerk-Erkennungsmodus |
|
||||
| `drive_device` | string | `/dev/sr0` | — | Geräte-Pfad (nur bei `explicit`) |
|
||||
| `disc_poll_interval_ms` | number | `4000` | 1000–60000 | Polling-Intervall in Millisekunden |
|
||||
|
||||
**`drive_mode` Optionen:**
|
||||
|
||||
| Modus | Beschreibung |
|
||||
|------|-------------|
|
||||
| `auto` | Ripster erkennt das Laufwerk automatisch |
|
||||
| `explicit` | Verwendet das in `drive_device` konfigurierte Gerät |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: MakeMKV (makemkv)
|
||||
|
||||
| Schlüssel | Typ | Standard | Min | Max | Beschreibung |
|
||||
|---------|-----|---------|-----|-----|-------------|
|
||||
| `makemkv_min_length_minutes` | number | `15` | `0` | `999` | Mindest-Titellänge in Minuten |
|
||||
| `makemkv_backup_mode` | boolean | `false` | — | — | Backup-Modus statt MKV-Modus |
|
||||
|
||||
**`makemkv_min_length_minutes`:** Titel kürzer als dieser Wert werden von MakeMKV ignoriert. Verhindert das Rippen von Menü-Schleifen und kurzen Extra-Clips.
|
||||
|
||||
**`makemkv_backup_mode`:** Im Backup-Modus erstellt MakeMKV eine vollständige Disc-Kopie mit Menüs. Im Standard-Modus werden direkt MKV-Dateien erstellt.
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: OMDb (omdb)
|
||||
|
||||
| Schlüssel | Typ | Standard | Pflicht | Beschreibung |
|
||||
|---------|-----|---------|---------|-------------|
|
||||
| `omdb_api_key` | string | — | ✅ | API-Key von [omdbapi.com](https://www.omdbapi.com/) |
|
||||
| `omdb_default_type` | select | `movie` | — | Standard-Suchtyp: `movie` oder `series` |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Benachrichtigungen (notifications)
|
||||
## Kategorie: Metadaten
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|---------|-----|---------|-------------|
|
||||
| `pushover_user_key` | string | — | PushOver User-Key |
|
||||
| `pushover_api_token` | string | — | PushOver API-Token |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `omdb_api_key` | string | — | API-Key von [omdbapi.com](https://www.omdbapi.com/) |
|
||||
| `omdb_default_type` | select | `movie` | Vorauswahl für OMDb-Suche: `movie`, `series`, `episode` |
|
||||
|
||||
Beide Felder müssen konfiguriert sein, um PushOver-Benachrichtigungen zu aktivieren. Die Verbindung kann mit dem **Test-Button** in den Einstellungen geprüft werden.
|
||||
---
|
||||
|
||||
## Kategorie: Benachrichtigungen (PushOver)
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `pushover_enabled` | boolean | `false` | Master-Schalter für PushOver |
|
||||
| `pushover_token` | string | — | Application-Token |
|
||||
| `pushover_user` | string | — | User-Key |
|
||||
| `pushover_device` | string | — | Optionales Ziel-Device |
|
||||
| `pushover_title_prefix` | string | `Ripster` | Präfix im Benachrichtigungstitel |
|
||||
| `pushover_priority` | number | `0` | Priorität (-2 bis 2) |
|
||||
| `pushover_timeout_ms` | number | `7000` | HTTP-Timeout für PushOver-Requests (ms) |
|
||||
|
||||
### Granulare Event-Schalter
|
||||
|
||||
| Schlüssel | Standard | Beschreibung |
|
||||
|-----------|---------|-------------|
|
||||
| `pushover_notify_metadata_ready` | `true` | Bei Metadaten-Auswahl benachrichtigen |
|
||||
| `pushover_notify_rip_started` | `true` | Bei MakeMKV-Rip-Start |
|
||||
| `pushover_notify_encoding_started` | `true` | Bei HandBrake-Start |
|
||||
| `pushover_notify_job_finished` | `true` | Bei erfolgreichem Abschluss |
|
||||
| `pushover_notify_job_error` | `true` | Bei Fehler |
|
||||
| `pushover_notify_job_cancelled` | `true` | Bei manuellem Abbruch |
|
||||
| `pushover_notify_reencode_started` | `true` | Bei Re-Encode-Start |
|
||||
| `pushover_notify_reencode_finished` | `true` | Bei erfolgreichem Re-Encode |
|
||||
|
||||
---
|
||||
|
||||
## Kategorie: Monitoring
|
||||
|
||||
| Schlüssel | Typ | Standard | Beschreibung |
|
||||
|-----------|-----|---------|-------------|
|
||||
| `hardware_monitoring_enabled` | boolean | `false` | Hardware-Monitoring aktivieren (CPU, RAM, Temp.) |
|
||||
| `hardware_monitoring_interval_ms` | number | `5000` | Monitoring-Polling-Intervall (ms) |
|
||||
|
||||
---
|
||||
|
||||
## Standard-Einstellungen zurücksetzen
|
||||
|
||||
Über die Datenbank können Einstellungen auf Standardwerte zurückgesetzt werden:
|
||||
Einen einzelnen Wert über die Datenbank zurücksetzen:
|
||||
|
||||
```bash
|
||||
sqlite3 backend/data/ripster.db \
|
||||
"DELETE FROM settings_values WHERE key = 'handbrake_preset';"
|
||||
"DELETE FROM settings_values WHERE key = 'handbrake_preset_bluray';"
|
||||
```
|
||||
|
||||
Beim nächsten Laden der Einstellungen wird der Standardwert verwendet.
|
||||
Beim nächsten Laden wird der Standardwert aus `settings_schema.default_value` verwendet.
|
||||
|
||||
Reference in New Issue
Block a user