{"config":{"lang":["de"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Ripster Handbuch","text":"
Diese Dokumentation ist als vollst\u00e4ndiges Benutzerhandbuch aufgebaut: t\u00e4gliche Bedienung zuerst, technische Referenz danach.
"},{"location":"#einstieg-in-3-schritten","title":"Einstieg in 3 Schritten","text":"REST- und WebSocket-Schnittstellen f\u00fcr Integration, Automatisierung und Debugging.
"},{"location":"api/#basis-url","title":"Basis-URL","text":"http://localhost:3001\n API-Prefix: /api
Health
Service-Liveness.
GET /api/health
Pipeline API
Analyse, Start/Retry/Cancel, Queue, Re-Encode.
Pipeline API
Settings API
Einstellungen, Skripte/Ketten, User-Presets.
Settings API
History API
Job-Historie, Orphan-Import, L\u00f6schoperationen.
History API
Cron API
Zeitgesteuerte Skript-/Kettenausf\u00fchrung.
Cron API
Converter API
Datei-Explorer, Upload, Job-Verwaltung f\u00fcr den Converter.
Converter API
Downloads API
Download-Queue f\u00fcr Ausgabedateien aus der Job-Historie.
Downloads API
Runtime Activities API
Laufende und abgeschlossene Aktivit\u00e4ten (Skripte, Ketten, Cron, Tasks).
Runtime Activities
:material-websocket: WebSocket Events
Pipeline-, Queue-, Disk-, Settings-, Cron-, Converter- und Download-Events.
WebSocket
Ripster hat keine eingebaute Authentifizierung und ist f\u00fcr lokalen, gesch\u00fctzten Betrieb gedacht.
"},{"location":"api/converter/","title":"Converter API","text":"Endpunkte f\u00fcr den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.
Basis-Pfad: /api/converter
GET /api/converter/tree","text":"Vollst\u00e4ndiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).
Response:
{\n \"tree\": [\n {\n \"name\": \"filme\",\n \"relPath\": \"filme\",\n \"isDir\": true,\n \"children\": [\n {\n \"name\": \"film.mkv\",\n \"relPath\": \"filme/film.mkv\",\n \"isDir\": false,\n \"size\": 10485760\n }\n ]\n }\n ]\n}\n"},{"location":"api/converter/#get-apiconverterbrowseparentrelpath","title":"GET /api/converter/browse?parent=relPath","text":"DB-basierter Datei-Explorer. Gibt Eintr\u00e4ge f\u00fcr einen Unterordner zur\u00fcck.
Query-Parameter:
Parameter Typ Beschreibungparent string Relativer Pfad zum Unterordner (leer = Root) Response:
{\n \"entries\": [\n {\n \"id\": 1,\n \"rel_path\": \"filme/film.mkv\",\n \"is_dir\": false,\n \"size\": 10485760,\n \"job_id\": null\n }\n ],\n \"rawDir\": \"/data/output/converter-raw\"\n}\n"},{"location":"api/converter/#post-apiconverterscan","title":"POST /api/converter/scan","text":"Manuellen Scan des converter_raw_dir ausl\u00f6sen. Aktualisiert converter_scan_entries in der DB.
Response:
{ \"result\": { \"added\": 3, \"removed\": 1 } }\n"},{"location":"api/converter/#jobs-erstellen","title":"Jobs erstellen","text":""},{"location":"api/converter/#post-apiconverterjobsfrom-selection","title":"POST /api/converter/jobs/from-selection","text":"Jobs aus im Datei-Explorer ausgew\u00e4hlten Dateien erstellen.
Body:
{\n \"relPaths\": [\"filme/film.mkv\", \"musik/track.flac\"],\n \"audioMode\": \"individual\"\n}\n Feld Typ Beschreibung relPaths string[] Relative Pfade der ausgew\u00e4hlten Dateien audioMode string individual (ein Job pro Datei) oder shared (ein gemeinsamer Job) Response:
{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\" }] }\n"},{"location":"api/converter/#post-apiconvertercreate-jobs","title":"POST /api/converter/create-jobs","text":"Jobs aus DB-Scan-Eintr\u00e4gen erstellen.
Body:
{\n \"entries\": [\n { \"relPath\": \"filme/film.mkv\", \"converterMediaType\": \"video\" }\n ]\n}\n"},{"location":"api/converter/#post-apiconverterupload","title":"POST /api/converter/upload","text":"Dateien hochladen (Multipart, max. 50 Dateien).
Form-Felder:
Feld Typ Beschreibungfiles File[] Hochzuladende Dateien folderName string (Optional) Ziel-Unterordner Response:
{\n \"folders\": [{ \"folderRelPath\": \"upload-2026-03-30\", \"fileCount\": 2 }]\n}\n"},{"location":"api/converter/#job-verwaltung","title":"Job-Verwaltung","text":""},{"location":"api/converter/#get-apiconverterjobs","title":"GET /api/converter/jobs","text":"Alle Converter-Jobs zur\u00fcckgeben.
Response:
{ \"jobs\": [{ \"id\": 42, \"status\": \"READY_TO_START\", \"title\": \"film.mkv\" }] }\n"},{"location":"api/converter/#get-apiconverterjobsjobid","title":"GET /api/converter/jobs/:jobId","text":"Einzelnen Converter-Job abrufen.
"},{"location":"api/converter/#post-apiconverterjobsjobidconfig","title":"POST /api/converter/jobs/:jobId/config","text":"Konfigurationsentwurf f\u00fcr einen Job speichern (persistiert in encode_plan_json).
Body: Partielles Konfig-Objekt (Ausgabeformat, Presets, Metadaten, Track-Auswahl).
"},{"location":"api/converter/#post-apiconverterjobsjobidassign-files","title":"POST /api/converter/jobs/:jobId/assign-files","text":"Dateien einem bestehenden (noch nicht gestarteten) Job hinzuf\u00fcgen.
Body:
{ \"relPaths\": [\"musik/track2.flac\"] }\n"},{"location":"api/converter/#post-apiconverterjobsjobidremove-file","title":"POST /api/converter/jobs/:jobId/remove-file","text":"Datei aus einem Job entfernen (per relativer Pfad).
Body:
{ \"relPath\": \"musik/track2.flac\" }\n"},{"location":"api/converter/#post-apiconverterjobsjobidremove-input","title":"POST /api/converter/jobs/:jobId/remove-input","text":"Datei aus einem Job entfernen (per absolutem Eingabepfad).
Body:
{ \"inputPath\": \"/data/output/converter-raw/musik/track2.flac\" }\n"},{"location":"api/converter/#post-apiconverterjobsjobidstart","title":"POST /api/converter/jobs/:jobId/start","text":"Job mit finaler Konfiguration starten.
Body:
{\n \"converterMediaType\": \"video\",\n \"outputFormat\": \"mkv\",\n \"userPreset\": \"H.264 MKV 1080p30\",\n \"trackSelection\": {},\n \"handBrakeTitleId\": 1,\n \"audioFormatOptions\": {}\n}\n"},{"location":"api/converter/#post-apiconverterjobsjobidcancel","title":"POST /api/converter/jobs/:jobId/cancel","text":"Laufenden Job abbrechen.
"},{"location":"api/converter/#delete-apiconverterjobsjobid","title":"DELETE /api/converter/jobs/:jobId","text":"Job aus der DB l\u00f6schen.
"},{"location":"api/converter/#datei-operationen","title":"Datei-Operationen","text":"Alle Datei-Operationen arbeiten direkt auf dem Dateisystem (ohne DB-Aktualisierung). Ein anschlie\u00dfender Scan-Aufruf synchronisiert die DB.
"},{"location":"api/converter/#delete-apiconverterfiles","title":"DELETE /api/converter/files","text":"Datei oder Ordner l\u00f6schen.
Body:
{ \"relPath\": \"filme/film.mkv\" }\n"},{"location":"api/converter/#post-apiconverterfilesrename","title":"POST /api/converter/files/rename","text":"Datei oder Ordner umbenennen.
Body:
{ \"relPath\": \"filme/film.mkv\", \"newName\": \"film-neu.mkv\" }\n"},{"location":"api/converter/#post-apiconverterfilesmove","title":"POST /api/converter/files/move","text":"Datei oder Ordner verschieben.
Body:
{ \"relPath\": \"filme/film.mkv\", \"targetParentRelPath\": \"archiv\" }\n targetParentRelPath = \"\" verschiebt in das Root-Verzeichnis.
POST /api/converter/files/folder","text":"Neuen Ordner anlegen.
Body:
{ \"parentRelPath\": \"filme\", \"name\": \"neu\" }\n"},{"location":"api/crons/","title":"Cron API","text":"Ripster enth\u00e4lt ein eingebautes Cron-System f\u00fcr Skripte und Skript-Ketten (sourceType: script|chain).
Listet alle Cron-Jobs.
{\n \"jobs\": [\n {\n \"id\": 1,\n \"name\": \"Nachtlauf Backup\",\n \"cronExpression\": \"0 2 * * *\",\n \"sourceType\": \"script\",\n \"sourceId\": 3,\n \"sourceName\": \"Backup-Skript\",\n \"enabled\": true,\n \"pushoverEnabled\": true,\n \"lastRunAt\": \"2026-03-10T02:00:00.000Z\",\n \"lastRunStatus\": \"success\",\n \"nextRunAt\": \"2026-03-11T02:00:00.000Z\",\n \"createdAt\": \"2026-03-01T10:00:00.000Z\",\n \"updatedAt\": \"2026-03-10T02:00:05.000Z\"\n }\n ]\n}\n"},{"location":"api/crons/#post-apicrons","title":"POST /api/crons","text":"Erstellt Cron-Job.
{\n \"name\": \"Nachtlauf Backup\",\n \"cronExpression\": \"0 2 * * *\",\n \"sourceType\": \"script\",\n \"sourceId\": 3,\n \"enabled\": true,\n \"pushoverEnabled\": true\n}\n Response: 201 mit { \"job\": { ... } }
Response:
{ \"job\": { \"id\": 1, \"name\": \"...\" } }\n"},{"location":"api/crons/#put-apicronsid","title":"PUT /api/crons/:id","text":"Aktualisiert Cron-Job. Felder wie bei POST.
Response:
{ \"job\": { ... } }\n"},{"location":"api/crons/#delete-apicronsid","title":"DELETE /api/crons/:id","text":"Response:
{ \"removed\": { \"id\": 1, \"name\": \"Nachtlauf Backup\" } }\n"},{"location":"api/crons/#get-apicronsidlogs","title":"GET /api/crons/:id/logs","text":"Liefert Ausf\u00fchrungs-Logs.
Query-Parameter:
Parameter Typ Default Beschreibunglimit number 20 Anzahl Eintr\u00e4ge, max. 100 Response:
{\n \"logs\": [\n {\n \"id\": 42,\n \"cronJobId\": 1,\n \"startedAt\": \"2026-03-10T02:00:01.000Z\",\n \"finishedAt\": \"2026-03-10T02:00:05.000Z\",\n \"status\": \"success\",\n \"output\": \"Backup abgeschlossen.\",\n \"errorMessage\": null\n }\n ]\n}\n status: running | success | error
Triggert Job manuell (asynchron).
Response:
{ \"triggered\": true, \"cronJobId\": 1 }\n Wenn Job bereits l\u00e4uft: 409.
Validiert 5-Felder-Cron-Ausdruck und berechnet n\u00e4chsten Lauf.
Request:
{ \"cronExpression\": \"*/15 * * * *\" }\n G\u00fcltige Response:
{\n \"valid\": true,\n \"nextRunAt\": \"2026-03-10T14:15:00.000Z\"\n}\n Ung\u00fcltige Response:
{\n \"valid\": false,\n \"error\": \"Cron-Ausdruck muss genau 5 Felder haben (Minute Stunde Tag Monat Wochentag).\",\n \"nextRunAt\": null\n}\n"},{"location":"api/crons/#cron-format","title":"Cron-Format","text":"Ripster unterst\u00fctzt 5 Felder:
Minute Stunde Tag Monat Wochentag\n Beispiele:
0 2 * * * t\u00e4glich 02:00*/15 * * * * alle 15 Minuten0 6 * * 1-5 Mo-Fr 06:00CRON_JOBS_UPDATED bei Create/Update/DeleteCRON_JOB_UPDATED bei Laufzeitstatus (running -> success|error)Endpunkte f\u00fcr die Download-Queue. Ausgabedateien aus der Job-Historie k\u00f6nnen als ZIP heruntergeladen werden.
Basis-Pfad: /api/downloads
GET /api/downloads","text":"Liste aller Download-Eintr\u00e4ge plus Zusammenfassung.
Response:
{\n \"items\": [\n {\n \"id\": \"dl-42-raw\",\n \"jobId\": 42,\n \"target\": \"raw\",\n \"status\": \"ready\",\n \"archiveName\": \"Job_42_raw.zip\",\n \"outputPath\": null,\n \"createdAt\": \"2026-03-30T10:00:00.000Z\",\n \"updatedAt\": \"2026-03-30T10:01:00.000Z\",\n \"errorMessage\": null\n }\n ],\n \"summary\": {\n \"total\": 3,\n \"pending\": 1,\n \"processing\": 0,\n \"ready\": 1,\n \"failed\": 1\n }\n}\n Status-Werte:
Status Beschreibungpending In der Queue, noch nicht gestartet processing ZIP wird gerade erstellt ready ZIP fertig, Download verf\u00fcgbar failed Fehler bei der Erstellung"},{"location":"api/downloads/#get-apidownloadssummary","title":"GET /api/downloads/summary","text":"Nur die Zusammenfassung der Download-Queue (ohne Item-Liste).
Response:
{\n \"summary\": {\n \"total\": 3,\n \"pending\": 1,\n \"processing\": 0,\n \"ready\": 1,\n \"failed\": 1\n }\n}\n"},{"location":"api/downloads/#post-apidownloadshistoryjobid","title":"POST /api/downloads/history/:jobId","text":"Job-Ausgabe in die Download-Queue einreihen.
Parameter:
Parameter Typ BeschreibungjobId number ID des Jobs in der Historie Body:
{\n \"target\": \"raw\",\n \"outputPath\": null\n}\n Feld Typ Default Beschreibung target string raw raw (RAW-Dateien) oder movie (Ausgabedateien) outputPath string null Optionaler expliziter Ausgabepfad Response (201 Created):
{\n \"created\": true,\n \"id\": \"dl-42-raw\",\n \"status\": \"pending\",\n \"summary\": { \"total\": 1, \"pending\": 1, \"processing\": 0, \"ready\": 0, \"failed\": 0 }\n}\n Ist der Eintrag bereits vorhanden, wird 201 durch 200 ersetzt und created: false zur\u00fcckgegeben.
GET /api/downloads/:id/file","text":"Fertige ZIP-Datei herunterladen.
Parameter:
Parameter Typ Beschreibungid string Download-ID (z. B. dl-42-raw) Response: Datei-Download (Content-Disposition: attachment).
Schl\u00e4gt fehl mit 404, wenn kein Download-Eintrag mit dieser ID existiert oder die Datei noch nicht bereit ist.
DELETE /api/downloads/:id","text":"Download-Eintrag l\u00f6schen (auch fertige ZIP-Dateien werden vom Dateisystem entfernt).
Response:
{\n \"ok\": true,\n \"summary\": { \"total\": 2, \"pending\": 0, \"processing\": 0, \"ready\": 2, \"failed\": 0 }\n}\n"},{"location":"api/downloads/#websocket","title":"WebSocket","text":"Status\u00e4nderungen werden \u00fcber DOWNLOADS_UPDATED in Echtzeit gemeldet. Vollst\u00e4ndige Dokumentation: WebSocket Events.
Endpunkte f\u00fcr Job-Historie, Metadaten-Nachpflege, Orphan-Import und L\u00f6schoperationen.
"},{"location":"api/history/#get-apihistory","title":"GET /api/history","text":"Liefert Jobs mit optionalen Filtern.
Query-Parameter:
Parameter Typ Beschreibungstatus string Einzelstatus-Filter (legacy-kompatibel). statuses string Mehrfachstatus als CSV, z. B. FINISHED,ERROR. search string Suche in Titel-/IMDb-Feldern. limit number Maximale Anzahl Ergebnisse. lite bool Ohne Dateisystem-Checks (schneller). includeChildren bool Child-Jobs (z. B. Serien-/Multipart-Kinder) explizit einbeziehen. Beispiel:
GET /api/history?statuses=FINISHED,ERROR&search=Inception&limit=50&lite=1\n Response (Beispiel):
{\n \"jobs\": [\n {\n \"id\": 42,\n \"status\": \"FINISHED\",\n \"title\": \"Inception\",\n \"job_kind\": \"bluray\",\n \"raw_path\": \"/mnt/raw/Inception - RAW - job-42\",\n \"output_path\": \"/mnt/movies/Inception (2010)/Inception (2010).mkv\",\n \"mediaType\": \"bluray\",\n \"ripSuccessful\": true,\n \"encodeSuccess\": true,\n \"created_at\": \"2026-03-10T08:00:00.000Z\",\n \"updated_at\": \"2026-03-10T10:00:00.000Z\"\n }\n ]\n}\n"},{"location":"api/history/#get-apihistoryid","title":"GET /api/history/:id","text":"Liefert Job-Detail.
Query-Parameter:
Parameter Typ Standard BeschreibungincludeLogs bool false Prozesslog laden. includeLiveLog bool false Live-/Tail-Log laden. includeAllLogs bool false vollst\u00e4ndiges Log statt Tail. logTailLines number 800 Tail-L\u00e4nge falls nicht includeAllLogs. lite bool false Detailantwort ohne FS-Checks. Response (Beispiel):
{\n \"job\": {\n \"id\": 42,\n \"status\": \"FINISHED\",\n \"makemkvInfo\": {},\n \"mediainfoInfo\": {},\n \"handbrakeInfo\": {},\n \"encodePlan\": {},\n \"log\": \"...\",\n \"log_count\": 1,\n \"logMeta\": {\n \"loaded\": true,\n \"total\": 800,\n \"returned\": 800,\n \"truncated\": true\n }\n }\n}\n"},{"location":"api/history/#get-apihistoryorphan-raw","title":"GET /api/history/orphan-raw","text":"Sucht RAW-Ordner ohne zugeh\u00f6rigen Job.
"},{"location":"api/history/#post-apihistoryorphan-rawimport","title":"POST /api/history/orphan-raw/import","text":"Importiert einen RAW-Ordner als Job und triggert optional die Analyse des Imports.
Request:
{ \"rawPath\": \"/mnt/raw/Inception (2010) [tt1375666] - RAW - job-99\" }\n Response (Beispiel):
{\n \"job\": { \"id\": 77, \"status\": \"FINISHED\" },\n \"activation\": { \"started\": true },\n \"activationError\": null\n}\n"},{"location":"api/history/#post-apihistoryidmetadataassign","title":"POST /api/history/:id/metadata/assign","text":"Weist TMDb-Metadaten nachtr\u00e4glich zu oder aktualisiert bestehende Film-/Serien-Metadaten eines Jobs.
"},{"location":"api/history/#post-apihistoryidcdassign","title":"POST /api/history/:id/cd/assign","text":"Weist CD-Metadaten (z. B. MusicBrainz) nachtr\u00e4glich zu.
"},{"location":"api/history/#post-apihistoryiderrorack","title":"POST /api/history/:id/error/ack","text":"Quittiert einen Fehlerzustand im Historieneintrag.
"},{"location":"api/history/#get-apihistoryiddelete-preview","title":"GET /api/history/:id/delete-preview","text":"Liefert eine Vorschau der l\u00f6schbaren Pfade (inkl. Scope auf verkn\u00fcpfte Jobs).
Query-Parameter:
Parameter Typ Standard BeschreibungincludeRelated bool true Verkn\u00fcpfte Jobs in die Vorschau einbeziehen. Response (Beispiel):
{\n \"preview\": {\n \"jobId\": 42,\n \"relatedJobs\": [{ \"id\": 42 }, { \"id\": 73 }],\n \"pathCandidates\": {\n \"raw\": [{ \"path\": \"/mnt/raw/...\", \"exists\": true, \"isDirectory\": true }],\n \"movie\": [{ \"path\": \"/mnt/movies/...\", \"exists\": true, \"isDirectory\": true }]\n }\n }\n}\n"},{"location":"api/history/#post-apihistoryiddelete-files","title":"POST /api/history/:id/delete-files","text":"L\u00f6scht Dateien eines Jobs, beh\u00e4lt DB-Eintrag.
Request:
{\n \"target\": \"both\",\n \"includeRelated\": true,\n \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n target: raw | movie | both
selectedRawPaths / selectedMoviePaths sind optional und begrenzen die L\u00f6schung auf ausgew\u00e4hlte Pfade aus der Vorschau.
L\u00f6scht Job aus DB; optional auch Dateien.
Request:
{\n \"target\": \"both\",\n \"includeRelated\": true,\n \"resetDriveState\": false,\n \"keepDetectedDevice\": true,\n \"preserveRawForImportJobs\": false,\n \"selectedRawPaths\": [\"/mnt/raw/Inception - RAW - Disc1\"],\n \"selectedMoviePaths\": [\"/mnt/movies/Inception (2010)\"]\n}\n target: none | raw | movie | both
Response (Beispiel):
{\n \"deleted\": true,\n \"jobId\": 42,\n \"fileTarget\": \"both\",\n \"fileSummary\": {\n \"target\": \"both\",\n \"raw\": { \"filesDeleted\": 10 },\n \"movie\": { \"filesDeleted\": 1 }\n },\n \"uiReset\": {\n \"reset\": true,\n \"state\": \"IDLE\"\n },\n \"safeguards\": {\n \"containsOrphanRawImportJob\": false,\n \"resetDriveStateApplied\": false,\n \"keepDetectedDeviceApplied\": true\n }\n}\n"},{"location":"api/history/#hinweise","title":"Hinweise","text":"409).includeRelated und Pfadselektionen den genauen Scope.Endpunkte zur Steuerung des Pipeline-Workflows.
"},{"location":"api/pipeline/#get-apipipelinestate","title":"GET /api/pipeline/state","text":"Liefert aktuellen Pipeline- und Hardware-Monitoring-Snapshot.
Response (Beispiel):
{\n \"pipeline\": {\n \"state\": \"READY_TO_ENCODE\",\n \"activeJobId\": 42,\n \"progress\": 0,\n \"eta\": null,\n \"statusText\": \"Mediainfo best\u00e4tigt - Encode manuell starten\",\n \"context\": {\n \"jobId\": 42\n },\n \"jobProgress\": {\n \"42\": {\n \"state\": \"MEDIAINFO_CHECK\",\n \"progress\": 68.5,\n \"eta\": null,\n \"statusText\": \"MEDIAINFO_CHECK 68.50%\"\n }\n },\n \"queue\": {\n \"maxParallelJobs\": 1,\n \"runningCount\": 1,\n \"queuedCount\": 2,\n \"runningJobs\": [],\n \"queuedJobs\": []\n }\n },\n \"hardwareMonitoring\": {\n \"enabled\": true,\n \"intervalMs\": 5000,\n \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n \"sample\": {\n \"cpu\": {},\n \"memory\": {},\n \"gpu\": {},\n \"storage\": {}\n },\n \"error\": null\n }\n}\n"},{"location":"api/pipeline/#post-apipipelineanalyze","title":"POST /api/pipeline/analyze","text":"Startet Disc-Analyse und legt Job an.
Response:
{\n \"result\": {\n \"jobId\": 42,\n \"detectedTitle\": \"INCEPTION\",\n \"omdbCandidates\": []\n }\n}\n"},{"location":"api/pipeline/#post-apipipelinerescan-disc","title":"POST /api/pipeline/rescan-disc","text":"Erzwingt erneute Laufwerkspr\u00fcfung.
Response (Beispiel):
{\n \"result\": {\n \"present\": true,\n \"changed\": true,\n \"emitted\": \"discInserted\",\n \"device\": {\n \"path\": \"/dev/sr0\",\n \"discLabel\": \"INCEPTION\",\n \"mediaProfile\": \"bluray\"\n }\n }\n}\n"},{"location":"api/pipeline/#post-apipipelinerescan-drive","title":"POST /api/pipeline/rescan-drive","text":"Erzwingt Rescan f\u00fcr ein konkretes Laufwerk.
Request:
{ \"devicePath\": \"/dev/sr0\" }\n"},{"location":"api/pipeline/#get-apipipelinetmdbmoviesearchq","title":"GET /api/pipeline/tmdb/movie/search?q= TMDb-Filmsuche.
Response:
{\n \"results\": [\n {\n \"imdbId\": \"tt1375666\",\n \"title\": \"Inception\",\n \"year\": \"2010\",\n \"type\": \"movie\",\n \"poster\": \"https://...\"\n }\n ]\n}\n","text":""},{"location":"api/pipeline/#get-apipipelinetmdbseriessearchqseason","title":"GET /api/pipeline/tmdb/series/search?q=&season= TMDb-Seriensuche (f\u00fcr Serien-Workflow bei DVD/Blu-ray).
","text":""},{"location":"api/pipeline/#get-apipipelinecddrives","title":"GET /api/pipeline/cd/drivesLiefert Snapshot der aktuell bekannten CD-Laufwerke.
","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzsearchq","title":"GET /api/pipeline/cd/musicbrainz/search?q=MusicBrainz-Suche f\u00fcr CD-Metadaten.
","text":""},{"location":"api/pipeline/#get-apipipelinecdmusicbrainzreleasembid","title":"GET /api/pipeline/cd/musicbrainz/release/:mbIdL\u00e4dt Release-Details zu einer MusicBrainz-ID.
","text":""},{"location":"api/pipeline/#post-apipipelinecdselect-metadata","title":"POST /api/pipeline/cd/select-metadata\u00dcbernimmt CD-Metadaten f\u00fcr einen Job.
Request (Beispiel):
{\n \"jobId\": 91,\n \"title\": \"Album\",\n \"artist\": \"Artist\",\n \"year\": 2020,\n \"mbId\": \"f5093c06-23e3-404f-aeaa-40f72885ee3a\",\n \"coverUrl\": \"https://...\",\n \"tracks\": []\n}\n","text":""},{"location":"api/pipeline/#post-apipipelinecdstartjobid","title":"POST /api/pipeline/cd/start/:jobId Startet/queued CD-Rip mit Format-/Script-/Chain-Konfiguration.
","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookupload","title":"POST /api/pipeline/audiobook/uploadUpload von AAX-Datei (Multipart/FormData).
FormData-Felder:
file (Pflicht)format (optional)startImmediately (optional)Zeigt AAX-Jobs mit fehlenden Activation-Bytes.
","text":""},{"location":"api/pipeline/#post-apipipelineaudiobookstartjobid","title":"POST /api/pipeline/audiobook/start/:jobIdStartet Audiobook-Job mit optionaler Konfiguration.
","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookjobs","title":"GET /api/pipeline/audiobook/jobsLiefert Audiobook-Jobliste.
","text":""},{"location":"api/pipeline/#get-apipipelineaudiobookoutput-tree","title":"GET /api/pipeline/audiobook/output-treeRead-only Baumansicht des Audiobook-Ausgabeordners.
","text":""},{"location":"api/pipeline/#post-apipipelineselect-metadata","title":"POST /api/pipeline/select-metadataSetzt Metadaten (und optional Playlist) f\u00fcr einen Job.
Request:
{\n \"jobId\": 42,\n \"title\": \"Inception\",\n \"year\": 2010,\n \"imdbId\": \"tt1375666\",\n \"poster\": \"https://...\",\n \"fromOmdb\": true,\n \"selectedPlaylist\": \"00800\"\n}\n Wichtige optionale Felder:
selectedHandBrakeTitleId / selectedHandBrakeTitleIds: Titel-Auswahl f\u00fcr Review/MediaInfo.metadataProvider: omdb oder tmdb.workflowKind: bei Disc-Jobs typischerweise film oder series.discNumber: Pflicht f\u00fcr Serien-Disc-Zuordnung (workflowKind=series).duplicateAction: Duplikatverhalten bei Film-Metadaten (allow_new oder multipart_movie).existingJobId: optionaler Referenzjob f\u00fcr multipart_movie.existingDiscNumber: Disc-Nummer des bestehenden Jobs f\u00fcr multipart_movie.Response:
{ \"job\": { \"id\": 42, \"status\": \"READY_TO_START\" } }\n Konflikt-Response (Beispiel, HTTP 409):
{\n \"message\": \"Metadaten bereits in der Historie gefunden. Bitte Auswahl \u00fcbernehmen oder Multipart movie w\u00e4hlen.\",\n \"details\": [\n {\n \"code\": \"METADATA_DUPLICATE_FOUND\",\n \"mediaProfile\": \"bluray\",\n \"existingJob\": {\n \"id\": 17,\n \"title\": \"Inception\",\n \"year\": 2010,\n \"status\": \"FINISHED\",\n \"jobKind\": \"bluray\",\n \"discNumber\": 1,\n \"isMultipartMovie\": false\n }\n }\n ]\n}\n Relevante Fehlercodes (POST /api/pipeline/select-metadata):
METADATA_DUPLICATE_FOUND Film-Metadaten existieren bereits in der Historie (Konfliktdialog im UI). MULTIPART_DISC_REQUIRED F\u00fcr Multipart fehlen Disc-Nummern (discNumber/existingDiscNumber). MULTIPART_DISC_ALREADY_EXISTS Disc-Nummer im Multipart-Container bereits vergeben oder doppelt. MULTIPART_MEDIA_MISMATCH Multipart nur bei gleichem Medientyp (DVD oder Blu-ray). MULTIPART_SERIES_NOT_ALLOWED Multipart ist nur f\u00fcr Film-Jobs erlaubt, nicht f\u00fcr Serien-Workflow. MULTIPART_METADATA_MISMATCH Ausgew\u00e4hlter bestehender Job passt nicht zu den Film-Metadaten. SERIES_DISC_ALREADY_EXISTS Serien-Disc-Nummer innerhalb einer Staffel bereits vorhanden.","text":""},{"location":"api/pipeline/#post-apipipelinejobsjobidraw-decision","title":"POST /api/pipeline/jobs/:jobId/raw-decision Trifft Entscheidung bei vorhandenem RAW (continue oder restart je nach Dialogfluss).
Request:
{ \"decision\": \"continue\" }\n","text":""},{"location":"api/pipeline/#post-apipipelinestartjobid","title":"POST /api/pipeline/start/:jobId Startet vorbereiteten Job oder queued ihn (je nach Parallel-Limit).
M\u00f6gliche Responses:
{ \"result\": { \"started\": true, \"stage\": \"RIPPING\" } }\n { \"result\": { \"queued\": true, \"started\": false, \"queuePosition\": 2, \"action\": \"START_PREPARED\" } }\n","text":""},{"location":"api/pipeline/#post-apipipelineconfirm-encodejobid","title":"POST /api/pipeline/confirm-encode/:jobId Best\u00e4tigt Review-Auswahl (Tracks, Pre/Post-Skripte/Ketten, User-Preset).
Request (typisch):
{\n \"selectedEncodeTitleId\": 1,\n \"selectedTrackSelection\": {\n \"1\": {\n \"audioTrackIds\": [1, 2],\n \"subtitleTrackIds\": [3]\n }\n },\n \"selectedPreEncodeScriptIds\": [1],\n \"selectedPostEncodeScriptIds\": [2, 7],\n \"selectedPreEncodeChainIds\": [3],\n \"selectedPostEncodeChainIds\": [4],\n \"selectedUserPresetId\": 5,\n \"skipPipelineStateUpdate\": false\n}\n Response:
{ \"job\": { \"id\": 42, \"encode_review_confirmed\": 1 } }\n","text":""},{"location":"api/pipeline/#post-apipipelinecancel","title":"POST /api/pipeline/cancel Bricht laufenden Job ab oder entfernt Queue-Eintrag.
Request (optional):
{ \"jobId\": 42 }\n M\u00f6gliche Responses:
{ \"result\": { \"cancelled\": true, \"queuedOnly\": true, \"jobId\": 42 } }\n { \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"jobId\": 42 } }\n { \"result\": { \"cancelled\": true, \"queuedOnly\": false, \"pending\": true, \"jobId\": 42 } }\n","text":""},{"location":"api/pipeline/#post-apipipelineretryjobid","title":"POST /api/pipeline/retry/:jobId Retry f\u00fcr ERROR/CANCELLED-Jobs (oder Queue-Einreihung).
Startet Re-Encode aus bestehendem RAW.
","text":""},{"location":"api/pipeline/#post-apipipelinerestart-reviewjobid","title":"POST /api/pipeline/restart-review/:jobIdBerechnet Review aus RAW neu.
","text":""},{"location":"api/pipeline/#post-apipipelinerestart-encodejobid","title":"POST /api/pipeline/restart-encode/:jobIdStartet Encoding mit letzter best\u00e4tigter Review neu.
","text":""},{"location":"api/pipeline/#post-apipipelinerestart-cd-reviewjobid","title":"POST /api/pipeline/restart-cd-review/:jobIdBerechnet CD-Review aus vorhandenem RAW neu.
","text":""},{"location":"api/pipeline/#post-apipipelineresume-readyjobid","title":"POST /api/pipeline/resume-ready/:jobIdL\u00e4dt READY_TO_ENCODE-Job nach Neustart wieder in aktive Session.
Liefert bekannte Output-Ordner entlang der Job-Lineage.
","text":""},{"location":"api/pipeline/#post-apipipelinedelete-output-foldersjobid","title":"POST /api/pipeline/delete-output-folders/:jobIdL\u00f6scht ausgew\u00e4hlte Output-Ordner.
Request:
{ \"folderPaths\": [\"/mnt/movies/Inception (2010)\"] }\n Alle Endpunkte liefern { result: ... } bzw. { job: ... }.
Liefert Queue-Snapshot.
{\n \"queue\": {\n \"maxParallelJobs\": 1,\n \"runningCount\": 1,\n \"queuedCount\": 3,\n \"runningJobs\": [\n {\n \"jobId\": 41,\n \"title\": \"Inception\",\n \"status\": \"ENCODING\",\n \"lastState\": \"ENCODING\"\n }\n ],\n \"queuedJobs\": [\n {\n \"entryId\": 11,\n \"position\": 1,\n \"type\": \"job\",\n \"jobId\": 42,\n \"action\": \"START_PREPARED\",\n \"actionLabel\": \"Start\",\n \"title\": \"Matrix\",\n \"status\": \"READY_TO_ENCODE\",\n \"lastState\": \"READY_TO_ENCODE\",\n \"hasScripts\": true,\n \"hasChains\": false,\n \"enqueuedAt\": \"2026-03-10T09:00:00.000Z\"\n },\n {\n \"entryId\": 12,\n \"position\": 2,\n \"type\": \"wait\",\n \"waitSeconds\": 30,\n \"title\": \"Warten 30s\",\n \"status\": \"QUEUED\",\n \"enqueuedAt\": \"2026-03-10T09:01:00.000Z\"\n }\n ],\n \"updatedAt\": \"2026-03-10T09:01:02.000Z\"\n }\n}\n"},{"location":"api/pipeline/#post-apipipelinequeuereorder","title":"POST /api/pipeline/queue/reorder","text":"Sortiert Queue-Eintr\u00e4ge neu.
Request:
{\n \"orderedEntryIds\": [12, 11]\n}\n Legacy fallback wird akzeptiert:
{\n \"orderedJobIds\": [42, 43]\n}\n"},{"location":"api/pipeline/#post-apipipelinequeueentry","title":"POST /api/pipeline/queue/entry","text":"F\u00fcgt Nicht-Job-Queue-Eintrag hinzu (script, chain, wait).
Request-Beispiele:
{ \"type\": \"script\", \"scriptId\": 3 }\n { \"type\": \"chain\", \"chainId\": 2, \"insertAfterEntryId\": 11 }\n { \"type\": \"wait\", \"waitSeconds\": 45 }\n Response:
{\n \"result\": { \"entryId\": 12, \"type\": \"wait\", \"position\": 2 },\n \"queue\": { \"...\": \"...\" }\n}\n"},{"location":"api/pipeline/#delete-apipipelinequeueentryentryid","title":"DELETE /api/pipeline/queue/entry/:entryId","text":"Entfernt Queue-Eintrag.
Response:
{ \"queue\": { \"...\": \"...\" } }\n"},{"location":"api/pipeline/#pipeline-zustande","title":"Pipeline-Zust\u00e4nde State Bedeutung IDLE Wartet auf Medium DISC_DETECTED Medium erkannt ANALYZING MakeMKV-Analyse l\u00e4uft METADATA_SELECTION Metadaten-Auswahl WAITING_FOR_USER_DECISION Nutzerentscheidung erforderlich (Playlist-Auswahl oder RAW-Entscheidung) READY_TO_START \u00dcbergang vor Start RIPPING MakeMKV-Rip l\u00e4uft MEDIAINFO_CHECK Titel-/Track-Auswertung READY_TO_ENCODE Review bereit ENCODING HandBrake-Encoding l\u00e4uft CD_METADATA_SELECTION CD-Metadatenauswahl aktiv CD_READY_TO_RIP CD-Job ist startbereit CD_ANALYZING CD-Struktur/Tracks werden vorbereitet CD_RIPPING CD-Ripping l\u00e4uft CD_ENCODING CD-Encode l\u00e4uft FINISHED Abgeschlossen DONE Abgeschlossen (v. a. Audiobook/Converter/CD-Varianten) CANCELLED Abgebrochen ERROR Fehler","text":""},{"location":"api/runtime-activities/","title":"Runtime Activities API","text":"Ripster verfolgt alle laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Skript-Ketten, Cron-Jobs, interne Tasks) in Echtzeit \u00fcber den RuntimeActivityService.
Aktivit\u00e4ten entstehen, wenn Ripster intern Aktionen ausf\u00fchrt \u2013 z. B. beim Start eines Cron-Jobs, beim Ausf\u00fchren einer Skript-Kette oder beim Durchlaufen von Pipeline-Schritten. Sie sind nicht persistent (kein DB-Speicher) und werden nur im Arbeitsspeicher gehalten.
active): Laufen gerade.recent): Abgeschlossen, max. 120 Eintr\u00e4ge.\u00c4nderungen werden \u00fcber WebSocket (RUNTIME_ACTIVITY_CHANGED) in Echtzeit gesendet.
{\n \"id\": 7,\n \"type\": \"chain\",\n \"name\": \"Post-Encode Aufr\u00e4umen\",\n \"status\": \"running\",\n \"source\": \"cron\",\n \"message\": \"Schritt 2 von 3\",\n \"currentStep\": \"cleanup.sh\",\n \"currentStepType\": \"script\",\n \"currentScriptName\": \"cleanup.sh\",\n \"stepIndex\": 2,\n \"stepTotal\": 3,\n \"parentActivityId\": null,\n \"jobId\": 42,\n \"cronJobId\": 3,\n \"chainId\": 5,\n \"scriptId\": null,\n \"canCancel\": true,\n \"canNextStep\": false,\n \"outcome\": \"running\",\n \"errorMessage\": null,\n \"output\": null,\n \"stdout\": null,\n \"stderr\": null,\n \"stdoutTruncated\": false,\n \"stderrTruncated\": false,\n \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n \"finishedAt\": null,\n \"durationMs\": null,\n \"exitCode\": null,\n \"success\": null\n}\n"},{"location":"api/runtime-activities/#felder","title":"Felder","text":"Feld Typ Beschreibung id number Eindeutige ID (Laufz\u00e4hler, nicht persistent) type string Art der Aktivit\u00e4t: script | chain | cron | task name string \\| null Anzeigename der Aktivit\u00e4t status string Aktueller Status: running | success | error source string \\| null Ausl\u00f6ser (z. B. cron, pipeline, manual) message string \\| null Kurztext zum aktuellen Zustand currentStep string \\| null Name des aktuell ausgef\u00fchrten Schritts currentStepType string \\| null Typ des Schritts (z. B. script, wait) currentScriptName string \\| null Name des Skripts im aktuellen Schritt stepIndex number \\| null Aktueller Schritt (1-basiert) stepTotal number \\| null Gesamtanzahl Schritte parentActivityId number \\| null ID der \u00fcbergeordneten Aktivit\u00e4t jobId number \\| null Verkn\u00fcpfte Job-ID cronJobId number \\| null Verkn\u00fcpfte Cron-Job-ID chainId number \\| null Verkn\u00fcpfte Skript-Ketten-ID scriptId number \\| null Verkn\u00fcpfte Skript-ID canCancel boolean Abbrechen \u00fcber API m\u00f6glich canNextStep boolean N\u00e4chster Schritt \u00fcber API ausl\u00f6sbar outcome string \\| null Abschluss-Ergebnis: success | error | cancelled | skipped | running errorMessage string \\| null Fehlermeldung (max. 2.000 Zeichen) output string \\| null Allgemeine Ausgabe (max. 12.000 Zeichen) stdout string \\| null Standardausgabe des Prozesses (max. 12.000 Zeichen) stderr string \\| null Fehlerausgabe des Prozesses (max. 12.000 Zeichen) stdoutTruncated boolean true, wenn stdout gek\u00fcrzt wurde stderrTruncated boolean true, wenn stderr gek\u00fcrzt wurde startedAt string ISO-8601-Zeitstempel des Starts finishedAt string \\| null ISO-8601-Zeitstempel des Endes durationMs number \\| null Laufzeit in Millisekunden exitCode number \\| null Exit-Code des Prozesses success boolean \\| null Erfolgsstatus (null bei laufender Aktivit\u00e4t)"},{"location":"api/runtime-activities/#snapshot-objekt","title":"Snapshot-Objekt","text":"Alle Aktivit\u00e4ts-Endpunkte geben einen Snapshot zur\u00fcck:
{\n \"active\": [ /* laufende Aktivit\u00e4ten, nach startedAt absteigend */ ],\n \"recent\": [ /* abgeschlossene Aktivit\u00e4ten, nach finishedAt absteigend, max. 120 */ ],\n \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n"},{"location":"api/runtime-activities/#endpunkte","title":"Endpunkte","text":""},{"location":"api/runtime-activities/#get-apiruntimeactivities","title":"GET /api/runtime/activities","text":"Aktuellen Aktivit\u00e4ts-Snapshot abrufen.
Antwort:
{\n \"active\": [],\n \"recent\": [\n {\n \"id\": 5,\n \"type\": \"script\",\n \"name\": \"notify.sh\",\n \"status\": \"success\",\n \"outcome\": \"success\",\n \"startedAt\": \"2026-03-10T09:58:00.000Z\",\n \"finishedAt\": \"2026-03-10T09:58:02.000Z\",\n \"durationMs\": 2100,\n \"exitCode\": 0,\n \"success\": true,\n \"canCancel\": false,\n \"canNextStep\": false\n }\n ],\n \"updatedAt\": \"2026-03-10T10:05:00.000Z\"\n}\n"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidcancel","title":"POST /api/runtime/activities/:id/cancel","text":"Aktive Aktivit\u00e4t abbrechen (nur wenn canCancel: true).
Parameter:
Name In Typ Beschreibungid path number Aktivit\u00e4ts-ID reason body string Optionaler Abbruchgrund Request Body:
{ \"reason\": \"Manueller Abbruch durch Benutzer\" }\n Antwort (Erfolg):
{\n \"ok\": true,\n \"action\": null,\n \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n Fehlercodes:
HTTP Bedeutung404 Aktivit\u00e4t nicht gefunden oder bereits abgeschlossen 409 Abbrechen wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesidnext-step","title":"POST /api/runtime/activities/:id/next-step","text":"N\u00e4chsten Schritt einer Aktivit\u00e4t ausl\u00f6sen (nur wenn canNextStep: true).
Parameter:
Name In Typ Beschreibungid path number Aktivit\u00e4ts-ID Antwort (Erfolg):
{\n \"ok\": true,\n \"action\": null,\n \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n Fehlercodes:
HTTP Bedeutung404 Aktivit\u00e4t nicht gefunden 409 N\u00e4chster Schritt wird von dieser Aktivit\u00e4t nicht unterst\u00fctzt"},{"location":"api/runtime-activities/#post-apiruntimeactivitiesclear-recent","title":"POST /api/runtime/activities/clear-recent","text":"Alle abgeschlossenen Aktivit\u00e4ten aus recent l\u00f6schen.
Antwort:
{\n \"ok\": true,\n \"removed\": 14,\n \"snapshot\": { \"active\": [], \"recent\": [], \"updatedAt\": \"...\" }\n}\n"},{"location":"api/runtime-activities/#grenzwerte","title":"Grenzwerte","text":"Wert Limit Maximale recent-Eintr\u00e4ge 120 Maximale L\u00e4nge stdout / stderr / output 12.000 Zeichen Maximale L\u00e4nge errorMessage / message 2.000 Zeichen Maximale L\u00e4nge outcome 40 Zeichen Gek\u00fcrzte Ausgaben erhalten den Suffix ...[gek\u00fcrzt] (bei Inline-Text) bzw. \\n...[gek\u00fcrzt] (bei mehrzeiligem Output).
\u00c4nderungen werden automatisch als RUNTIME_ACTIVITY_CHANGED WebSocket-Event gesendet. Die Frontend-Komponente braucht GET /api/runtime/activities nur beim initialen Laden aufzurufen.
Endpunkte f\u00fcr Einstellungen, Skripte, Skript-Ketten und User-Presets.
"},{"location":"api/settings/#get-apisettings","title":"GET /api/settings","text":"Liefert alle Einstellungen kategorisiert.
Response (Struktur):
{\n \"categories\": [\n {\n \"category\": \"Pfade\",\n \"settings\": [\n {\n \"key\": \"raw_dir\",\n \"label\": \"Raw Ausgabeordner\",\n \"type\": \"path\",\n \"required\": true,\n \"description\": \"...\",\n \"defaultValue\": \"data/output/raw\",\n \"options\": [],\n \"validation\": { \"minLength\": 1 },\n \"value\": \"data/output/raw\",\n \"orderIndex\": 100\n }\n ]\n }\n ]\n}\n"},{"location":"api/settings/#put-apisettingskey","title":"PUT /api/settings/:key","text":"Aktualisiert eine einzelne Einstellung.
Request:
{ \"value\": \"/mnt/storage/raw\" }\n Response:
{\n \"setting\": {\n \"key\": \"raw_dir\",\n \"value\": \"/mnt/storage/raw\"\n },\n \"reviewRefresh\": {\n \"triggered\": false,\n \"reason\": \"not_ready\"\n }\n}\n reviewRefresh ist null oder ein Objekt mit Status der optionalen Review-Neuberechnung.
Aktualisiert mehrere Einstellungen atomar.
Request:
{\n \"settings\": {\n \"raw_dir\": \"/mnt/storage/raw\",\n \"movie_dir\": \"/mnt/storage/movies\",\n \"handbrake_preset_bluray\": \"H.264 MKV 1080p30\"\n }\n}\n Response:
{\n \"changes\": [\n { \"key\": \"raw_dir\", \"value\": \"/mnt/storage/raw\" },\n { \"key\": \"movie_dir\", \"value\": \"/mnt/storage/movies\" }\n ],\n \"reviewRefresh\": {\n \"triggered\": true,\n \"jobId\": 42,\n \"relevantKeys\": [\"handbrake_preset_bluray\"]\n }\n}\n Bei Validierungsfehlern kommt 400 mit error.details[].
Liest Preset-Liste via HandBrakeCLI -z (mit Fallback auf konfigurierte Presets).
Response (Beispiel):
{\n \"source\": \"handbrake-cli\",\n \"message\": null,\n \"options\": [\n { \"label\": \"General/\", \"value\": \"__group__general\", \"disabled\": true, \"category\": \"General\" },\n { \"label\": \" Fast 1080p30\", \"value\": \"Fast 1080p30\", \"category\": \"General\" }\n ]\n}\n"},{"location":"api/settings/#post-apisettingspushovertest","title":"POST /api/settings/pushover/test","text":"Sendet Testnachricht \u00fcber aktuelle PushOver-Settings.
Request (optional):
{\n \"title\": \"Test\",\n \"message\": \"Ripster Test\"\n}\n Response:
{\n \"result\": {\n \"sent\": true,\n \"eventKey\": \"test\",\n \"requestId\": \"...\"\n }\n}\n Wenn PushOver deaktiviert ist oder Credentials fehlen, kommt i. d. R. ebenfalls 200 mit sent: false + reason.
Basis: /api/settings/scripts
{ \"scripts\": [ { \"id\": 1, \"name\": \"...\", \"scriptBody\": \"...\", \"orderIndex\": 1, \"createdAt\": \"...\", \"updatedAt\": \"...\" } ] }\n"},{"location":"api/settings/#post-apisettingsscripts","title":"POST /api/settings/scripts","text":"{ \"name\": \"Move\", \"scriptBody\": \"mv \\\"$RIPSTER_OUTPUT_PATH\\\" /mnt/movies/\" }\n Response: 201 mit { \"script\": { ... } }
Body wie POST, Response { \"script\": { ... } }.
Response { \"removed\": { ... } }.
{ \"orderedScriptIds\": [3, 1, 2] }\n Response { \"scripts\": [ ... ] }.
F\u00fchrt Skript als Testlauf aus.
{\n \"result\": {\n \"scriptId\": 1,\n \"scriptName\": \"Move\",\n \"success\": true,\n \"exitCode\": 0,\n \"signal\": null,\n \"timedOut\": false,\n \"durationMs\": 120,\n \"stdout\": \"...\",\n \"stderr\": \"...\",\n \"stdoutTruncated\": false,\n \"stderrTruncated\": false\n }\n}\n"},{"location":"api/settings/#umgebungsvariablen-fur-skripte","title":"Umgebungsvariablen f\u00fcr Skripte","text":"Diese Variablen werden beim Ausf\u00fchren gesetzt:
RIPSTER_SCRIPT_RUN_ATRIPSTER_JOB_IDRIPSTER_JOB_TITLERIPSTER_MODERIPSTER_INPUT_PATHRIPSTER_OUTPUT_PATHRIPSTER_RAW_PATHRIPSTER_SCRIPT_IDRIPSTER_SCRIPT_NAMERIPSTER_SCRIPT_SOURCEBasis: /api/settings/script-chains
Eine Kette hat Schritte vom Typ:
script (scriptId erforderlich)wait (waitSeconds 1..3600)Response { \"chains\": [ ... ] } (inkl. steps[]).
Response { \"chain\": { ... } }.
{\n \"name\": \"After Encode\",\n \"steps\": [\n { \"stepType\": \"script\", \"scriptId\": 1 },\n { \"stepType\": \"wait\", \"waitSeconds\": 15 },\n { \"stepType\": \"script\", \"scriptId\": 2 }\n ]\n}\n Response: 201 mit { \"chain\": { ... } }
Body wie POST, Response { \"chain\": { ... } }.
Response { \"removed\": { ... } }.
{ \"orderedChainIds\": [2, 1, 3] }\n Response { \"chains\": [ ... ] }.
Response:
{\n \"result\": {\n \"chainId\": 2,\n \"chainName\": \"After Encode\",\n \"steps\": 3,\n \"succeeded\": 3,\n \"failed\": 0,\n \"aborted\": false,\n \"results\": []\n }\n}\n"},{"location":"api/settings/#user-presets","title":"User-Presets","text":"Basis: /api/settings/user-presets
Optionaler Query-Parameter: media_type=bluray|dvd|other|all
{\n \"presets\": [\n {\n \"id\": 1,\n \"name\": \"Blu-ray HQ\",\n \"mediaType\": \"bluray\",\n \"handbrakePreset\": \"H.264 MKV 1080p30\",\n \"extraArgs\": \"--encoder-preset slow\",\n \"description\": \"...\",\n \"createdAt\": \"...\",\n \"updatedAt\": \"...\"\n }\n ]\n}\n"},{"location":"api/settings/#post-apisettingsuser-presets","title":"POST /api/settings/user-presets","text":"{\n \"name\": \"Blu-ray HQ\",\n \"mediaType\": \"bluray\",\n \"handbrakePreset\": \"H.264 MKV 1080p30\",\n \"extraArgs\": \"--encoder-preset slow\",\n \"description\": \"optional\"\n}\n Response: 201 mit { \"preset\": { ... } }
Body mit beliebigen Feldern aus POST, Response { \"preset\": { ... } }.
Response { \"removed\": { ... } }.
Liefert aufgel\u00f6ste, effektiv genutzte Pfade aus den Settings (f\u00fcr UI- und Diagnosezwecke).
"},{"location":"api/settings/#post-apisettingscoverartrecover","title":"POST /api/settings/coverart/recover","text":"Startet eine manuelle Coverart-Recovery.
Response (Beispiel):
{\n \"result\": { \"started\": true },\n \"scheduler\": { \"enabled\": true }\n}\n"},{"location":"api/settings/#activation-bytes-aax","title":"Activation Bytes (AAX)","text":""},{"location":"api/settings/#get-apisettingsactivation-bytes","title":"GET /api/settings/activation-bytes","text":"Liest gecachte AAX-Activation-Bytes.
"},{"location":"api/settings/#post-apisettingsactivation-bytes","title":"POST /api/settings/activation-bytes","text":"Speichert Activation-Bytes.
Request:
{\n \"checksum\": \"abc123...\",\n \"activationBytes\": \"1a2b3c4d\"\n}\n"},{"location":"api/settings/#laufwerke","title":"Laufwerke","text":""},{"location":"api/settings/#get-apisettingsdrives","title":"GET /api/settings/drives","text":"Liefert erkannte optische Laufwerke (/dev/...) inkl. MakeMKV-Disc-Index.
Erzwingt Entsperren aktiver Laufwerkslocks.
Hinweis: Expertenmodus (ui_expert_mode) ist erforderlich, sonst 403.
Request (ein Laufwerk):
{ \"devicePath\": \"/dev/sr0\" }\n Request (alle):
{ \"all\": true }\n"},{"location":"api/settings/#ui-preferences","title":"UI Preferences","text":""},{"location":"api/settings/#get-apisettingsprefskey","title":"GET /api/settings/prefs/:key","text":"Liest einen persistierten UI-Preference-Wert.
"},{"location":"api/settings/#put-apisettingsprefskey","title":"PUT /api/settings/prefs/:key","text":"Speichert einen persistierten UI-Preference-Wert.
Request:
{ \"value\": \"{\\\"columns\\\":[\\\"id\\\",\\\"status\\\"]}\" }\n"},{"location":"api/websocket/","title":"WebSocket Events","text":"Ripster sendet Echtzeit-Updates \u00fcber /ws.
const ws = new WebSocket('ws://localhost:3001/ws');\n\nws.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n console.log(msg.type, msg.payload);\n};\n"},{"location":"api/websocket/#nachrichtenformat","title":"Nachrichtenformat","text":"Die meisten Broadcasts haben dieses Schema:
{\n \"type\": \"EVENT_TYPE\",\n \"payload\": {},\n \"timestamp\": \"2026-03-10T09:00:00.000Z\"\n}\n Ausnahme: WS_CONNECTED beim Verbindungsaufbau enth\u00e4lt kein timestamp.
Sofort nach erfolgreicher Verbindung.
{\n \"type\": \"WS_CONNECTED\",\n \"payload\": {\n \"connectedAt\": \"2026-03-10T09:00:00.000Z\"\n }\n}\n"},{"location":"api/websocket/#pipeline_state_changed","title":"PIPELINE_STATE_CHANGED","text":"Neuer Pipeline-Snapshot.
{\n \"type\": \"PIPELINE_STATE_CHANGED\",\n \"payload\": {\n \"state\": \"ENCODING\",\n \"activeJobId\": 42,\n \"progress\": 62.5,\n \"eta\": \"00:12:34\",\n \"statusText\": \"ENCODING 62.50%\",\n \"context\": {},\n \"jobProgress\": {\n \"42\": {\n \"state\": \"ENCODING\",\n \"progress\": 62.5,\n \"eta\": \"00:12:34\",\n \"statusText\": \"ENCODING 62.50%\"\n }\n },\n \"queue\": {\n \"maxParallelJobs\": 1,\n \"runningCount\": 1,\n \"queuedCount\": 2,\n \"runningJobs\": [],\n \"queuedJobs\": []\n }\n }\n}\n"},{"location":"api/websocket/#pipeline_progress","title":"PIPELINE_PROGRESS","text":"Laufende Fortschrittsupdates.
{\n \"type\": \"PIPELINE_PROGRESS\",\n \"payload\": {\n \"state\": \"ENCODING\",\n \"activeJobId\": 42,\n \"progress\": 62.5,\n \"eta\": \"00:12:34\",\n \"statusText\": \"ENCODING 62.50%\"\n }\n}\n"},{"location":"api/websocket/#pipeline_queue_changed","title":"PIPELINE_QUEUE_CHANGED","text":"Queue-Snapshot aktualisiert.
"},{"location":"api/websocket/#disc_detected-disc_removed","title":"DISC_DETECTED / DISC_REMOVED","text":"Disc-Insertion/-Removal.
{\n \"type\": \"DISC_DETECTED\",\n \"payload\": {\n \"device\": {\n \"path\": \"/dev/sr0\",\n \"discLabel\": \"INCEPTION\",\n \"model\": \"ASUS BW-16D1HT\",\n \"fstype\": \"udf\",\n \"mountpoint\": null,\n \"mediaProfile\": \"bluray\"\n }\n }\n}\n mediaProfile: bluray | dvd | other | null
Snapshot aus Hardware-Monitoring.
{\n \"type\": \"HARDWARE_MONITOR_UPDATE\",\n \"payload\": {\n \"enabled\": true,\n \"intervalMs\": 5000,\n \"updatedAt\": \"2026-03-10T09:00:00.000Z\",\n \"sample\": {\n \"cpu\": {},\n \"memory\": {},\n \"gpu\": {},\n \"storage\": {}\n },\n \"error\": null\n }\n}\n"},{"location":"api/websocket/#pipeline_error","title":"PIPELINE_ERROR","text":"Fehler bei Disc-Event-Verarbeitung in Pipeline.
"},{"location":"api/websocket/#disk_detection_error","title":"DISK_DETECTION_ERROR","text":"Fehler in Laufwerkserkennung.
"},{"location":"api/websocket/#settings_updated","title":"SETTINGS_UPDATED","text":"Einzelnes Setting wurde gespeichert.
"},{"location":"api/websocket/#settings_bulk_updated","title":"SETTINGS_BULK_UPDATED","text":"Bulk-Settings gespeichert.
{\n \"type\": \"SETTINGS_BULK_UPDATED\",\n \"payload\": {\n \"count\": 3,\n \"keys\": [\"raw_dir\", \"movie_dir\", \"handbrake_preset_bluray\"]\n }\n}\n"},{"location":"api/websocket/#settings_scripts_updated","title":"SETTINGS_SCRIPTS_UPDATED","text":"Skript ge\u00e4ndert (created|updated|deleted|reordered).
Skript-Kette ge\u00e4ndert (created|updated|deleted|reordered).
User-Preset ge\u00e4ndert (created|updated|deleted).
Cron-Config ge\u00e4ndert (created|updated|deleted).
Laufzeitstatus eines Cron-Jobs ge\u00e4ndert.
{\n \"type\": \"CRON_JOB_UPDATED\",\n \"payload\": {\n \"id\": 1,\n \"lastRunStatus\": \"running\",\n \"lastRunAt\": \"2026-03-10T10:00:00.000Z\",\n \"nextRunAt\": null\n }\n}\n"},{"location":"api/websocket/#runtime_activity_changed","title":"RUNTIME_ACTIVITY_CHANGED","text":"Vollst\u00e4ndiger Snapshot aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten.
Wird ausgel\u00f6st, wenn eine Aktivit\u00e4t gestartet, aktualisiert oder abgeschlossen wird sowie nach clear-recent.
{\n \"type\": \"RUNTIME_ACTIVITY_CHANGED\",\n \"payload\": {\n \"active\": [\n {\n \"id\": 7,\n \"type\": \"chain\",\n \"name\": \"Post-Encode Aufr\u00e4umen\",\n \"status\": \"running\",\n \"source\": \"cron\",\n \"message\": \"Schritt 2 von 3\",\n \"currentStep\": \"cleanup.sh\",\n \"currentStepType\": \"script\",\n \"stepIndex\": 2,\n \"stepTotal\": 3,\n \"canCancel\": true,\n \"canNextStep\": false,\n \"outcome\": \"running\",\n \"startedAt\": \"2026-03-10T10:00:00.000Z\",\n \"finishedAt\": null,\n \"durationMs\": null\n }\n ],\n \"recent\": [],\n \"updatedAt\": \"2026-03-10T10:00:05.000Z\"\n }\n}\n Vollst\u00e4ndige Feldbeschreibung: Runtime Activities API.
"},{"location":"api/websocket/#converter_scan_update","title":"CONVERTER_SCAN_UPDATE","text":"Wird nach einem Scan des Converter-Eingangsordners gesendet (manuell oder per Polling).
{\n \"type\": \"CONVERTER_SCAN_UPDATE\",\n \"payload\": {\n \"entryCount\": 12\n }\n}\n"},{"location":"api/websocket/#downloads_updated","title":"DOWNLOADS_UPDATED","text":"Wird bei jeder Status\u00e4nderung in der Download-Queue gesendet.
{\n \"type\": \"DOWNLOADS_UPDATED\",\n \"payload\": {\n \"reason\": \"ready\",\n \"item\": {\n \"id\": \"dl-1\",\n \"jobId\": 42,\n \"status\": \"ready\",\n \"archiveName\": \"Job_42_movie.zip\",\n \"createdAt\": \"2026-03-30T10:00:00.000Z\"\n },\n \"summary\": {\n \"total\": 3,\n \"pending\": 1,\n \"processing\": 0,\n \"ready\": 1,\n \"failed\": 1\n }\n }\n}\n M\u00f6gliche reason-Werte: queued, processing, ready, failed, deleted.
useWebSocket verbindet bei Abbruch automatisch neu:
1500msDieser Bereich enth\u00e4lt die technische Referenz hinter dem Benutzerhandbuch.
"},{"location":"appendix/#inhalt","title":"Inhalt","text":"Ripster ist eine Client-Server-Anwendung mit REST + WebSocket und externen CLI-Tools.
"},{"location":"architecture/#systemuberblick","title":"System\u00fcberblick","text":"graph TB\n subgraph Browser[\"Browser (React)\"]\n Ripper[Ripper]\n Settings[Einstellungen]\n History[Historie]\n end\n\n subgraph Backend[\"Node.js Backend\"]\n API[REST API\\nExpress]\n WS[WebSocket\\n/ws]\n Pipeline[pipelineService]\n Cron[cronService]\n DB[(SQLite)]\n end\n\n subgraph Tools[\"Externe Tools\"]\n MakeMKV[makemkvcon]\n HandBrake[HandBrakeCLI]\n MediaInfo[mediainfo]\n end\n\n Browser <-->|HTTP| API\n Browser <-->|WebSocket| WS\n Pipeline --> MakeMKV\n Pipeline --> HandBrake\n Pipeline --> MediaInfo\n API --> DB\n Pipeline --> DB\n Cron --> DB"},{"location":"architecture/#details","title":"Details","text":"Das Backend ist in Services aufgeteilt, die von Express-Routen orchestriert werden. Seit v0.12.0 erfolgt die Medienverarbeitung \u00fcber ein Plugin-System.
"},{"location":"architecture/backend/#plugin-system-srcplugins","title":"Plugin-System (src/plugins/)","text":"Ab v0.12.0 ist die Pipeline modular aufgebaut. Jeder Medientyp wird von einem eigenen Plugin verwaltet.
"},{"location":"architecture/backend/#basisklassen","title":"Basisklassen","text":"PluginBase.js \u2014 Abstrakte Basisklasse SourcePlugin mit Lifecycle-MethodenPluginRegistry.js \u2014 Dynamische Plugin-Erkennung, priorit\u00e4tsbasierte Auswahl, Settings-Schema-AggregationPluginContext.js \u2014 Ausf\u00fchrungskontext (Logger, Callbacks, Signals) f\u00fcr Plugin-AufrufeJedes Plugin implementiert die folgenden Methoden:
Methode Beschreibungdetect(discInfo) Medientyp-Erkennung analyze(devicePath, job, ctx) Analyse / Metadaten-Extraktion rip(job, ctx) Rohdaten-Extraktion review(job, ctx) Optionale Vorschau-Vorbereitung encode(job, ctx) Finales Encoding/Konvertierung finalize(job, ctx) Nachbearbeitung onCancel(job, ctx) Bereinigung bei Abbruch onRetry(job, ctx) Zustand-Reset vor Retry"},{"location":"architecture/backend/#implementierte-plugins","title":"Implementierte Plugins","text":"BluRayPlugin.js \u2014 Blu-ray via MakeMKV (Backup-Modus)DVDPlugin.js \u2014 DVD via MakeMKV (MKV-Modus)CdPlugin.js \u2014 Audio-CD via cdparanoia + FFmpeg (experimentell)AudiobookPlugin.js \u2014 AAX/M4B via FFmpeg mit Kapitel-SplittingConverterPlugin.js \u2014 Generische Audio/Video-Konvertierung via FFmpegVideoDiscPlugin.js \u2014 Gemeinsame Basis f\u00fcr Blu-ray/DVD (MediaInfo-Parsing)pipelineService.js","text":"Zentrale Workflow-Orchestrierung.
Aufgaben:
pipeline_state)script|chain|wait Eintr\u00e4ge)createConverterJobFromEntry, uploadConverterFiles, startConverterJob)Wichtige Methoden:
analyzeDisc()selectMetadata()startPreparedJob()confirmEncodeReview()cancel()retry()reencodeFromRaw()restartReviewFromRaw()restartEncodeWithLastSettings()resumeReadyToEncodeJob()enqueueNonJobEntry(), reorderQueue(), removeQueueEntry()createConverterJobFromEntry(), createConverterJobsFromSelection()uploadConverterFiles(), startConverterJob()diskDetectionService.js","text":"Pollt Laufwerk(e) und emittiert:
discInserteddiscRemovederrorZusatz:
auto oder explicitmediaProfile-Erkennung (bluray/dvd/other)rescanAndEmit() f\u00fcr manuellen TriggersettingsService.js","text":"Settings-Layer mit Validation/Serialisierung.
Features:
getCategorizedSettings() f\u00fcr UI-FormsetSettingValue() / setSettingsBulk()resolveEffectiveToolSettings)HandBrakeCLI -zmakemkv_registration_key nach ~/.MakeMKV/settings.confhistoryService.js","text":"Historie + Dateioperationen.
Features:
raw|movie|both)none|raw|movie|both)audiobookService.js","text":"Audiobook-Verarbeitung (AAX/M4B).
Features:
{author}, {title}, {year}, {narrator}, {series}, {part})activationBytesService.js","text":"Verwaltung von Audible-Activation-Bytes f\u00fcr AAX-DRM-Handling.
Features:
aax_activation_bytes-Tabelle cachenaudnexService (wenn konfiguriert)converterScanService.js","text":"Dateisystem-\u00dcberwachung des Converter-Eingangsordners.
Features:
getTree())getEntries())CONVERTER_SCAN_UPDATEdownloadService.js","text":"Download-Queue f\u00fcr Ausgabedateien aus der Historie.
Features:
enqueueHistoryJob)archiver)res.download()DOWNLOADS_UPDATED bei Status-\u00c4nderungencronService.js","text":"Integriertes Cron-System ohne externe Parser-Library.
Features:
nextRun-Berechnungscript oder chaincron_run_logs)CRON_JOBS_UPDATED, CRON_JOB_UPDATEDruntimeActivityService.js","text":"In-Memory-Tracking aller laufenden und k\u00fcrzlich abgeschlossenen Aktivit\u00e4ten (Skripte, Ketten, Cron-Jobs, Tasks).
Features:
startActivity(type, payload) \u2192 Aktivit\u00e4t registrieren, ID zur\u00fcckgebenupdateActivity(id, patch) \u2192 Laufende Aktivit\u00e4t aktualisierencompleteActivity(id, payload) \u2192 Aktivit\u00e4t abschlie\u00dfen und in recent verschiebensetControls(id, { cancel, nextStep }) \u2192 Steuer-Handler registrieren (f\u00fcr canCancel/canNextStep)requestCancel(id) / requestNextStep(id) \u2192 Steuer-Handler aufrufenclearRecent() \u2192 Abgeschlossene Aktivit\u00e4ten l\u00f6schengetSnapshot() \u2192 Snapshot mit active + recent + updatedAtRUNTIME_ACTIVITY_CHANGED \u00fcber WebSocket bei jeder \u00c4nderungLimits:
recent max. 120 Eintr\u00e4gestdout/stderr/output max. 12.000 Zeichenmessage/errorMessage max. 2.000 ZeichenVollst\u00e4ndige API-Dokumentation: Runtime Activities API
"},{"location":"architecture/backend/#weitere-services","title":"Weitere Services","text":"scriptService.js (CRUD + Test + Wrapper-Ausf\u00fchrung)scriptChainService.js (CRUD + Step-Execution)userPresetService.js (HandBrake User-Presets)hardwareMonitorService.js (CPU/RAM/GPU/Storage)websocketService.js (Client-Registry + Broadcast)notificationService.js (PushOver)cdRipService.js (CD-Ripping mit cdparanoia)musicBrainzService.js (MusicBrainz-Metadaten-Lookup)audnexService.js (Audnex-API f\u00fcr Audiobook-Metadaten)coverArtRecoveryService.js (Cover-Art-Wiederherstellung)thumbnailService.js (Vorschaubild-Generierung)tmdbService.js (Film-/Serien-Metadaten-Suche)logger.js (rotierende Datei-Logs)src/index.js)","text":"Beim Start:
/wsRipster verwendet SQLite (backend/data/ripster.db).
settings_schema\nsettings_values\njobs\njob_lineage_artifacts\njob_output_folders\npipeline_state\nscripts\nscript_chains\nscript_chain_steps\nuser_presets\ncron_jobs\ncron_run_logs\naax_activation_bytes\nuser_prefs\nconverter_scan_entries\n"},{"location":"architecture/database/#jobs","title":"jobs","text":"Speichert Pipeline-Lifecycle und Artefakte pro Job.
Zentrale Felder:
title, year, imdb_id, poster_url, omdb_json, selected_from_omdbstart_time, end_time, status, last_stateraw_path, output_path, encode_input_pathmakemkv_info_json, handbrake_info_json, mediainfo_info_json, encode_plan_jsonencode_review_confirmed, rip_successful, error_messagemedia_type (bluray|dvd|cd|audiobook|converter)job_kind, parent_job_idis_multipart_movie, disc_number, metadata_fingerprintaax_checksum (f\u00fcr AAX-Dateien)created_at, updated_atTypische job_kind-Werte:
bluray, dvd, cd, audiobook, converter_audio, converter_video, converter_isodvd_series_container, dvd_series_childmultipart_movie_container, multipart_movie_childWichtige Indizes:
idx_jobs_statusidx_jobs_parent_job_ididx_jobs_job_kindidx_jobs_disc_numberidx_jobs_metadata_fingerprintjob_lineage_artifacts","text":"Verkn\u00fcpft Jobs mit ihren Quell-Jobs (z. B. Re-Encode aus einem vorherigen Rip).
Felder:
job_id \u2014 der abgeleitete Jobsource_job_id \u2014 der Quell-Jobartifact_type \u2014 Art der Verkn\u00fcpfung (z. B. reencode, restart_review)created_atjob_output_folders","text":"Verfolgt Ausgabepfade pro Job (mehrere Ausgaben m\u00f6glich, z. B. bei Kapitel-Splitting).
Felder:
job_idfolder_pathlabel \u2014 optionaler Bezeichnercreated_atpipeline_state","text":"Singleton-Tabelle (id = 1) f\u00fcr aktiven Snapshot:
stateactive_job_idprogressetastatus_textcontext_jsonupdated_atsettings_schema + settings_values","text":"settings_schema: Definition (Typ, Default, Validation, Reihenfolge)settings_values: aktueller Wert pro Keyscripts, script_chains, script_chain_steps","text":"scripts: Shell-Skripte (name, script_body, order_index)script_chains: Ketten (name, order_index)script_chain_steps: Schritte je Kettestep_type: script oder waitscript_id oder wait_secondsuser_presets","text":"Benannte HandBrake-Preset-Sets:
namemedia_type (bluray|dvd|other|all)handbrake_presetextra_argsdescriptioncron_jobs + cron_run_logs","text":"cron_jobs: Zeitplan + Statuscron_run_logs: einzelne L\u00e4ufestatus: running|success|erroroutputerror_messageaax_activation_bytes","text":"Cache f\u00fcr Audible-Activation-Bytes (AAX-DRM).
Felder:
checksum \u2014 SHA-1-Pr\u00fcfsumme der AAX-Datei (Prim\u00e4rschl\u00fcssel)activation_bytes \u2014 Hex-String der Activation Bytescreated_atuser_prefs","text":"Benutzer-spezifische Einstellungen (Key-Value).
Felder:
keyvalueupdated_atconverter_scan_entries","text":"DB-seitige Erfassung gescannter Dateien im Converter-Eingangsordner.
Felder:
rel_path \u2014 relativer Pfad zum converter_raw_diris_dir \u2014 Verzeichnis-Flagsize \u2014 Dateigr\u00f6\u00dfe in Bytesmodified_at \u2014 Datei-\u00c4nderungsdatumjob_id \u2014 zugewiesener Converter-Job (falls vorhanden)scanned_atBeim Start werden Schema und Settings-Metadaten automatisch abgeglichen.
Bei korruptem SQLite-File:
backend/data/corrupt-backups/ verschobensqlite3 backend/data/ripster.db\n\n.mode table\nSELECT id, status, title, media_type, created_at FROM jobs ORDER BY created_at DESC;\nSELECT id, parent_job_id, job_kind, is_multipart_movie, disc_number FROM jobs ORDER BY created_at DESC;\nSELECT key, value FROM settings_values ORDER BY key;\nSELECT checksum, activation_bytes FROM aax_activation_bytes;\nSELECT rel_path, job_id FROM converter_scan_entries;\n"},{"location":"architecture/frontend/","title":"Frontend-Komponenten","text":"Frontend: React + PrimeReact + Vite.
"},{"location":"architecture/frontend/#hauptseiten","title":"Hauptseiten","text":""},{"location":"architecture/frontend/#ripperpagejsx","title":"RipperPage.jsx","text":"Pipeline-Steuerung:
SettingsPage.jsx","text":"Konfiguration:
DynamicSettingsForm)CronJobsTab)HistoryPage.jsx","text":"Historie:
ConverterPage.jsx","text":"Datei-Converter:
AudiobooksPage.jsx","text":"Dedizierter AAX-/Audiobook-Flow:
DownloadsPage.jsx","text":"Download-Queue:
DatabasePage.jsx","text":"Expert-Modus:
PipelineStatusCard.jsx \u2014 Pipeline-Status-Anzeige mit ProgressMetadataSelectionDialog.jsx \u2014 TMDb-Metadaten-AuswahlMediaInfoReviewPanel.jsx \u2014 Track-Auswahl-Interface (Video/Audio/Untertitel)JobDetailDialog.jsx \u2014 Job-Detailansicht mit LogsCronJobsTab.jsx \u2014 Cron-Job-VerwaltungDynamicSettingsForm.jsx \u2014 Schema-gesteuertes EinstellungsformularConverterJobCard.jsx \u2014 Converter-Job-DarstellungCdRipConfigPanel.jsx \u2014 Konfiguration f\u00fcr Audio-CD-Rippingapi/client.js)","text":"request() mit JSON-HandlingError(message) gemapptVITE_API_BASE default /apihooks/useWebSocket.js)","text":"VITE_WS_URL oder automatisch ws(s)://<host>/wsIn App.jsx werden u. a. verarbeitet:
PIPELINE_STATE_CHANGEDPIPELINE_PROGRESSPIPELINE_QUEUE_CHANGEDHARDWARE_MONITOR_UPDATEDOWNLOADS_UPDATEDCONVERTER_SCAN_UPDATERUNTIME_ACTIVITY_CHANGED# dev\nnpm run dev --prefix frontend\n\n# prod build\nnpm run build --prefix frontend\n"},{"location":"architecture/overview/","title":"Architektur-\u00dcbersicht","text":""},{"location":"architecture/overview/#kernprinzipien","title":"Kernprinzipien","text":""},{"location":"architecture/overview/#event-getriebene-pipeline","title":"Event-getriebene Pipeline","text":"pipelineService h\u00e4lt einen Snapshot der State-Machine und broadcastet \u00c4nderungen sofort via WebSocket.
State-\u00c4nderung -> PIPELINE_STATE_CHANGED/PIPELINE_PROGRESS -> Frontend-Update\n"},{"location":"architecture/overview/#service-layer","title":"Service-Layer","text":"Route -> Service -> DB/Tool-Execution\n Routes enthalten kaum Business-Logik.
"},{"location":"architecture/overview/#schema-getriebene-settings","title":"Schema-getriebene Settings","text":"Settings sind DB-schema-getrieben (settings_schema + settings_values), UI rendert dynamisch aus diesen Daten.
WebSocket l\u00e4uft auf /ws.
Wichtige Events:
PIPELINE_STATE_CHANGED, PIPELINE_PROGRESS, PIPELINE_QUEUE_CHANGEDHARDWARE_MONITOR_UPDATESETTINGS_UPDATED, SETTINGS_BULK_UPDATEDSETTINGS_SCRIPTS_UPDATED, SETTINGS_SCRIPT_CHAINS_UPDATED, USER_PRESETS_UPDATEDCRON_JOBS_UPDATED, CRON_JOB_UPDATEDPIPELINE_ERROR, DISK_DETECTION_ERRORExterne Tools werden als Child-Processes gestartet (processRunner):
progressParsers.js)SQLite-Datei: backend/data/ripster.db
Kern-Tabellen:
jobs, pipeline_statesettings_schema, settings_valuesscripts, script_chains, script_chain_stepsuser_presetscron_jobs, cron_run_logsBeim Start werden Schema und Settings-Migrationen automatisch ausgef\u00fchrt.
"},{"location":"architecture/overview/#fehlerbehandlung","title":"Fehlerbehandlung","text":"Zentrales Error-Handling liefert:
{\n \"error\": {\n \"message\": \"...\",\n \"statusCode\": 400,\n \"reqId\": \"...\",\n \"details\": []\n }\n}\n Fehlgeschlagene Jobs bleiben in der Historie (Fehler oder Abgebrochen) und k\u00f6nnen erneut gestartet werden.
CORS_ORIGIN default: *LOG_LEVEL default: infoDB_PATH/LOG_DIR konfigurierbarDieser Abschnitt ist die technische Referenz zu allen Konfigurationsarten in Ripster.
"},{"location":"configuration/#inhalte","title":"Inhalte","text":"Einstellungsreferenz
Vollst\u00e4ndige Liste aller UI-Settings (Typ, Default, Hinweise).
Einstellungsreferenz
Umgebungsvariablen
backend/.env und frontend/.env inkl. Priorit\u00e4ten.
Umgebungsvariablen
Umgebungsvariablen steuern Backend/Vite au\u00dferhalb der DB-basierten UI-Settings.
"},{"location":"configuration/environment/#backend-backendenv","title":"Backend (backend/.env)","text":"Variable Default (Code) Beschreibung PORT 3001 Express-Port DB_PATH backend/data/ripster.db SQLite-Datei (relativ zu backend/) LOG_DIR backend/logs Fallback-Logverzeichnis (wenn log_dir-Setting nicht gesetzt/lesbar) CORS_ORIGIN * CORS-Origin f\u00fcr API LOG_LEVEL info debug, info, warn, error Beispiel:
PORT=3001\nDB_PATH=/var/lib/ripster/ripster.db\nLOG_DIR=/var/log/ripster\nCORS_ORIGIN=http://192.168.1.50:5173\nLOG_LEVEL=info\n Hinweis: backend/.env.example enth\u00e4lt bewusst dev-freundliche Werte (z. B. lokaler CORS_ORIGIN).
frontend/.env)","text":"Variable Default Beschreibung VITE_API_BASE /api API-Basis f\u00fcr Fetch-Client VITE_WS_URL automatisch aus window.location + /ws Optional explizite WebSocket-URL VITE_PUBLIC_ORIGIN leer \u00d6ffentliche Vite-Origin (Remote-Dev) VITE_ALLOWED_HOSTS true Komma-separierte Hostliste f\u00fcr Vite allowedHosts VITE_HMR_PROTOCOL abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Protokoll (ws/wss) VITE_HMR_HOST abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Host VITE_HMR_CLIENT_PORT abgeleitet aus VITE_PUBLIC_ORIGIN HMR-Client-Port Beispiele:
# lokal (mit Vite-Proxy)\nVITE_API_BASE=/api\n # remote dev\nVITE_API_BASE=http://192.168.1.50:3001/api\nVITE_WS_URL=ws://192.168.1.50:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.50:5173\nVITE_ALLOWED_HOSTS=192.168.1.50,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.50\nVITE_HMR_CLIENT_PORT=5173\n"},{"location":"configuration/environment/#prioritat","title":"Priorit\u00e4t","text":".envDiese Seite beschreibt jedes Feld aus Settings -> Konfiguration aus Anwendersicht: was du dort steuerst, wann die Einstellung greift und welchen Einfluss sie auf Review, Queue, Pfade oder Automatisierung hat.
Standard nennt den voreingestellten Wert oder den \u00fcblichen Leerzustand.Greift in sagt dir, in welchem Ablauf du die Wirkung besonders merkst.Praxis erkl\u00e4rt, warum du das Feld im Alltag bewusst setzen solltest.Standard: Aus
Der Schalter blendet zus\u00e4tzliche technische Felder in der gesamten Settings-Oberfl\u00e4che ein, zum Beispiel f\u00fcr Logging, Polling-Intervalle oder CLI-Feinjustierung. Er wird sofort gespeichert und wirkt ohne extra Speichern der ganzen Seite.
Greift in: - die Sichtbarkeit von Expertenfeldern in Settings - zus\u00e4tzliche Navigations- und Wartungsbereiche
Praxis: - Aktiviere ihn, wenn du Ripster genauer steuern oder Fehler analysieren willst. - Lass ihn aus, wenn die Oberfl\u00e4che bewusst schlank bleiben soll.
"},{"location":"configuration/settings-reference/#pushover-aktiviert","title":"PushOver aktiviert","text":"Standard: Aus
Das ist der Master-Schalter f\u00fcr alle PushOver-Nachrichten. Ist er aus, sendet Ripster unabh\u00e4ngig von den einzelnen Ereignis-Toggles nichts.
Greift in: - Push-Benachrichtigungen zu Auswahl, Start, Erfolg, Fehler und Re-Encode
Praxis: - Aktiviere den Schalter nur zusammen mit g\u00fcltigem Token und User-Key.
"},{"location":"configuration/settings-reference/#pushover-token","title":"PushOver Token","text":"Standard: leer
Hier hinterlegst du den Application Token deiner PushOver-Anwendung. Ohne diesen Wert kann Ripster keine Nachricht zustellen.
Greift in: - jeden PushOver-Versand
Praxis: - Der Wert stammt aus deiner PushOver-App-Konfiguration.
"},{"location":"configuration/settings-reference/#pushover-user","title":"PushOver User","text":"Standard: leer
Hier steht der User-Key des PushOver-Kontos, an das Ripster senden soll.
Greift in: - jeden PushOver-Versand
Praxis: - Trage hier den Zielaccount ein, der die Meldungen wirklich erhalten soll.
"},{"location":"configuration/settings-reference/#pushover-device-optional","title":"PushOver Device (optional)","text":"Standard: leer
Mit diesem Feld begrenzt du PushOver-Nachrichten auf ein bestimmtes Ger\u00e4t. Bleibt es leer, gehen die Nachrichten an alle Ger\u00e4te des PushOver-Users.
Greift in: - die Zielauswahl beim Versand
Praxis: - Sinnvoll, wenn Ripster nur ein bestimmtes Telefon oder Tablet benachrichtigen soll.
"},{"location":"configuration/settings-reference/#pushover-titel-prafix","title":"PushOver Titel-Pr\u00e4fix","text":"Standard: Ripster
Das Pr\u00e4fix wird vor den eigentlichen Titel jeder PushOver-Nachricht gesetzt. So kannst du mehrere Instanzen oder Systeme leichter auseinanderhalten.
Greift in: - die Betreffzeile aller PushOver-Nachrichten
Praxis: - Typische Werte sind zum Beispiel Ripster Keller, Wohnzimmer-Ripper oder der Hostname.
Standard: 0
Die Priorit\u00e4t steuert, wie dringend PushOver die Nachricht behandelt. Niedrigere Werte sind leiser, h\u00f6here Werte auff\u00e4lliger.
Greift in: - die Zustellungsart auf der PushOver-Seite
Praxis: - F\u00fcr normale Statusmeldungen reicht meist 0. - H\u00f6here Priorit\u00e4ten sind eher f\u00fcr Fehler oder manuelle Eingriffe gedacht.
Standard: 7000
Dieser Wert legt fest, wie lange Ripster auf eine Antwort von PushOver wartet, bevor der Versand als fehlgeschlagen gilt.
Greift in: - die HTTP-Verbindung zu PushOver
Praxis: - Ein h\u00f6herer Wert kann bei langsamen Verbindungen helfen. - Ein niedrigerer Wert sorgt daf\u00fcr, dass H\u00e4nger schneller abgebrochen werden.
"},{"location":"configuration/settings-reference/#bei-manueller-auswahl-senden","title":"Bei manueller Auswahl senden","text":"Standard: An
Ripster sendet eine Nachricht, wenn ein Job auf eine Benutzerentscheidung wartet, zum Beispiel bei Metadatenauswahl, RAW-Entscheidung, Playlist-Auswahl oder Titelwahl vor dem Review.
Greift in: - Playlistflow - RAW-Wiederverwendung - manuelle Review-Vorbereitung
Praxis: - Das ist eines der wichtigsten Events, wenn Ripster unbeaufsichtigt laufen soll.
"},{"location":"configuration/settings-reference/#bei-rip-start-senden","title":"Bei Rip-Start senden","text":"Standard: An
Sendet eine Nachricht in dem Moment, in dem der eigentliche MakeMKV-Rip startet.
Greift in: - Disc-Workflows im Ripper
Praxis: - N\u00fctzlich, wenn du wissen willst, dass die Wartephase beendet ist und das Laufwerk jetzt wirklich arbeitet.
"},{"location":"configuration/settings-reference/#bei-encode-start-senden","title":"Bei Encode-Start senden","text":"Standard: An
Sendet eine Nachricht beim Start von HandBrake oder eines anderen Encode-Schritts.
Greift in: - Film-, Serien-, Converter- und Audiobook-Encodes
Praxis: - Hilfreich, wenn Rip und Encode auf unterschiedlichen Systemlasten beruhen und du den eigentlichen Rechenstart mitbekommen willst.
"},{"location":"configuration/settings-reference/#bei-erfolg-senden","title":"Bei Erfolg senden","text":"Standard: An
Sendet eine Nachricht nach erfolgreichem Abschluss eines Jobs.
Greift in: - alle erfolgreichen Pipeline-L\u00e4ufe
Praxis: - Gut f\u00fcr lange Nachtl\u00e4ufe oder Stapelverarbeitung.
"},{"location":"configuration/settings-reference/#bei-fehler-senden","title":"Bei Fehler senden","text":"Standard: An
Sendet eine Nachricht, sobald ein Job in einen Fehlerzustand l\u00e4uft.
Greift in: - Fehler in Rip, Analyse, Review-Aufbau, Encode oder Folgeaktionen
Praxis: - Dieses Event sollte in produktiven Umgebungen fast immer aktiv bleiben.
"},{"location":"configuration/settings-reference/#bei-abbruch-senden","title":"Bei Abbruch senden","text":"Standard: An
Sendet eine Nachricht, wenn ein Job manuell abgebrochen wurde.
Greift in: - Benutzerabbr\u00fcche im laufenden Workflow
Praxis: - Vor allem n\u00fctzlich, wenn mehrere Personen mit derselben Instanz arbeiten.
"},{"location":"configuration/settings-reference/#bei-re-encode-start-senden","title":"Bei Re-Encode Start senden","text":"Standard: An
Sendet eine Nachricht beim Start eines Re-Encodes aus vorhandenem RAW.
Greift in: - RAW neu encodieren - Review neu starten mit erneutem Encode
Praxis: - Praktisch, wenn du bestehende RAWs sp\u00e4ter gesammelt neu verarbeitest.
"},{"location":"configuration/settings-reference/#bei-re-encode-erfolg-senden","title":"Bei Re-Encode Erfolg senden","text":"Standard: An
Sendet eine Nachricht, wenn ein Re-Encode erfolgreich abgeschlossen wurde.
Greift in: - Nachbearbeitung aus der Historie
Praxis: - Besonders hilfreich bei Korrekturl\u00e4ufen auf Basis alter RAWs.
"},{"location":"configuration/settings-reference/#converter","title":"Converter","text":""},{"location":"configuration/settings-reference/#erlaubte-datei-endungen","title":"Erlaubte Datei-Endungen","text":"Standard: mkv,mp4,m2ts,iso,avi,mov,flac,mp3,aac,wav,m4a,ogg,opus
Die Liste bestimmt, welche Dateitypen der Converter-Upload akzeptiert und welche Dateien beim Scannen des Converter-Eingangsordners ber\u00fccksichtigt werden. Die Eintr\u00e4ge werden kommagetrennt und ohne Punkt gepflegt.
Greift in: - Upload im Converter - manueller Scan - Auto-Scan
Praxis: - Entferne Formate, die in deiner Umgebung nie verarbeitet werden sollen. - Erg\u00e4nze nur Formate, die Ripster sp\u00e4ter auch sinnvoll als Job behandeln kann.
"},{"location":"configuration/settings-reference/#auto-scan-polling","title":"Auto-Scan (Polling)","text":"Standard: Aus
Wenn dieser Schalter aktiv ist, scannt Ripster den Converter-Eingangsordner in festen Abst\u00e4nden automatisch neu. Neue oder verschobene Dateien tauchen dann ohne manuellen Klick auf.
Greift in: - die Dateiansicht des Converters - automatisches Erkennen externer Dateiimporte
Praxis: - Sinnvoll, wenn Dateien per Netzfreigabe, Script oder anderer Software in den Converter gelegt werden.
"},{"location":"configuration/settings-reference/#polling-intervall-sekunden","title":"Polling-Intervall (Sekunden)","text":"Standard: 300
Der Wert bestimmt, wie oft der Converter-Eingangsordner bei aktivem Auto-Scan gepr\u00fcft wird.
Greift in: - Reaktionsgeschwindigkeit des Converter-Scans - Systemlast durch wiederholte Verzeichnispr\u00fcfungen
Praxis: - Kleinere Werte aktualisieren schneller, erzeugen aber mehr Dateisystemzugriffe.
"},{"location":"configuration/settings-reference/#laufwerk","title":"Laufwerk","text":""},{"location":"configuration/settings-reference/#laufwerksmodus","title":"Laufwerksmodus","text":"Standard: auto
Hier legst du fest, ob Ripster optische Laufwerke automatisch erkennen soll oder ob du feste Laufwerke manuell definierst.
Greift in: - Laufwerkserkennung - Disc-Monitoring - Zuordnung von Laufwerk und MakeMKV-Quelle
Praxis: - auto passt f\u00fcr die meisten Einzel-Laufwerke. - Ein expliziter Modus ist besser, wenn mehrere Laufwerke stabil an bestimmte Ger\u00e4te gebunden werden sollen.
Standard: leer
In diesem Editor legst du pro Laufwerk einen Ger\u00e4tepfad und den passenden MakeMKV-Index fest. Diese Liste wird nur verwendet, wenn der Laufwerksmodus auf einen expliziten Betrieb gestellt ist.
Greift in: - Multi-Drive-Setups - stabile Zuordnung zwischen Linux-Ger\u00e4t und MakeMKV-Quelle
Praxis: - Besonders hilfreich bei zwei oder mehr Laufwerken oder bei wechselnden USB-Adaptern.
"},{"location":"configuration/settings-reference/#device-pfad","title":"Device Pfad","text":"Standard: /dev/sr0
Dieses Feld ist normalerweise ausgeblendet und dient nur als \u00e4lterer Einzelwert f\u00fcr feste Laufwerkskonfigurationen. In der Praxis solltest du stattdessen den Editor Explizite Laufwerke verwenden.
Greift in: - interne Fallbacks bei expliziter Laufwerkskonfiguration
Praxis: - Nur relevant f\u00fcr Sonderf\u00e4lle oder Altdaten.
"},{"location":"configuration/settings-reference/#makemkv-source-index","title":"MakeMKV Source Index","text":"Standard: 0
Dieses normalerweise ausgeblendete Feld legt den MakeMKV-Quellindex fest, wenn kein expliziter Laufwerks-Eintrag greift.
Greift in: - interne Quellaufl\u00f6sung f\u00fcr MakeMKV
Praxis: - Im Alltag wird dieser Wert meist automatisch aus der Laufwerkskonfiguration abgeleitet.
"},{"location":"configuration/settings-reference/#automatische-disk-erkennung","title":"Automatische Disk-Erkennung","text":"Standard: An
Wenn der Schalter aktiv ist, pr\u00fcft Ripster regelm\u00e4\u00dfig, ob neue Discs eingelegt wurden. Ist er aus, musst du Laufwerke manuell neu einlesen.
Greift in: - automatisches Erkennen neu eingelegter Discs
Praxis: - Deaktiviere die Automatik nur, wenn sie in deiner Umgebung st\u00f6rt oder du volle manuelle Kontrolle willst.
"},{"location":"configuration/settings-reference/#polling-intervall-ms","title":"Polling Intervall (ms)","text":"Standard: 4000
Der Wert bestimmt, wie h\u00e4ufig Ripster nach neuen oder entfernten Discs sucht.
Greift in: - Reaktionsgeschwindigkeit der Disc-Erkennung - H\u00e4ufigkeit der Laufwerksabfragen
Praxis: - Ein kleinerer Wert reagiert schneller. - Ein gr\u00f6\u00dferer Wert reduziert die Polling-Last.
"},{"location":"configuration/settings-reference/#laufwerk-nach-rip-auswerfen","title":"Laufwerk nach Rip auswerfen","text":"Standard: Aus
Wenn aktiv, wirft Ripster das beteiligte Laufwerk nach einem erfolgreich abgeschlossenen Rip automatisch aus.
Greift in: - Disc-Workflows nach erfolgreichem Rip
Praxis: - N\u00fctzlich bei Stapelbetrieb, damit du sofort siehst, welches Laufwerk fertig ist.
"},{"location":"configuration/settings-reference/#logging","title":"Logging","text":""},{"location":"configuration/settings-reference/#terminal-ausgabe-aktiv","title":"Terminal-Ausgabe aktiv","text":"Standard: An
Dieser Schalter steuert die Konsolenausgabe des Servers im Terminal. Die Log-Dateien auf Platte bleiben davon unber\u00fchrt.
Greift in: - start.sh - Service-Diagnose im Terminal
Praxis: - Deaktiviere die Ausgabe, wenn die Konsole bewusst ruhig bleiben soll.
"},{"location":"configuration/settings-reference/#http-logs-im-terminal","title":"HTTP-Logs im Terminal","text":"Standard: An
Zeigt oder unterdr\u00fcckt eingehende HTTP-Requests in der Konsolenausgabe.
Greift in: - API-Debugging - Analyse von Frontend-/Backend-Kommunikation
Praxis: - Besonders bei Fehlersuche im Webinterface n\u00fctzlich.
"},{"location":"configuration/settings-reference/#debug-im-terminal","title":"DEBUG im Terminal","text":"Standard: An
Steuert, ob sehr detaillierte Debug-Meldungen im Terminal mitlaufen.
Greift in: - tiefes Troubleshooting
Praxis: - Gut f\u00fcr Fehlersuche, oft zu ausf\u00fchrlich f\u00fcr den Dauerbetrieb.
"},{"location":"configuration/settings-reference/#info-im-terminal","title":"INFO im Terminal","text":"Standard: An
Steuert normale Statusmeldungen in der Konsolenausgabe.
Greift in: - allt\u00e4gliche Laufzeitbeobachtung
Praxis: - F\u00fcr normale Bedienung meist sinnvoll aktiviert.
"},{"location":"configuration/settings-reference/#warn-im-terminal","title":"WARN im Terminal","text":"Standard: An
Steuert Warnmeldungen in der Konsole.
Greift in: - Hinweise auf ungew\u00f6hnliche, aber nicht sofort kritische Situationen
Praxis: - Sollte fast immer sichtbar bleiben.
"},{"location":"configuration/settings-reference/#error-im-terminal","title":"ERROR im Terminal","text":"Standard: An
Steuert Fehlermeldungen in der Konsole.
Greift in: - alle ernsthaften Laufzeitfehler
Praxis: - Sollte im Regelfall immer aktiviert bleiben.
"},{"location":"configuration/settings-reference/#metadaten","title":"Metadaten","text":""},{"location":"configuration/settings-reference/#tmdb-read-access-token","title":"TMDb Read Access Token","text":"Standard: leer
Ohne diesen Token kann Ripster keine regul\u00e4re TMDb-Metadatensuche f\u00fcr Filme und Serien durchf\u00fchren. Der Wert wird f\u00fcr Suche, Zuordnung und sp\u00e4tere Neu-Zuweisungen verwendet.
Greift in: - Metadatenauswahl nach der Analyse - Serienzuordnung - TMDb neu zuweisen - Poster- und Titellookups
Praxis: - Dieses Feld geh\u00f6rt zu den wichtigsten Grundeinstellungen f\u00fcr Disc-Workflows.
"},{"location":"configuration/settings-reference/#film-sprache","title":"Film-Sprache","text":"Standard: de-DE
Hier legst du fest, in welcher TMDb-Sprache Ripster Titel, Beschreibungen, Staffelnamen und \u00e4hnliche Daten zuerst abruft.
Greift in: - Film- und Serienmetadaten in der Auswahl - Sprache der zur\u00fcckgegebenen TMDb-Daten
Praxis: - W\u00e4hle die Sprache, in der du Titel und Episodennamen sp\u00e4ter auch in Ordnern und Historie sehen willst.
"},{"location":"configuration/settings-reference/#fallback-sprache","title":"Fallback Sprache","text":"Standard: de-DE,en-US
Wenn in der Hauptsprache keine brauchbaren Daten vorhanden sind, versucht Ripster nacheinander diese Fallback-Sprachen.
Greift in: - Trefferqualit\u00e4t bei seltenen oder schlecht lokalisierten Titeln
Praxis: - Eine Kombination aus lokaler Sprache und en-US ist oft am robustesten.
Standard: An
Wenn bei Jobs oder Containern Cover fehlen, pr\u00fcft Ripster in Intervallen automatisch nach und versucht das Material sp\u00e4ter nachzuladen.
Greift in: - nachtr\u00e4gliche Pflege von Postern und Covern
Praxis: - Sinnvoll, wenn beim ersten Lauf gelegentlich noch keine vollst\u00e4ndigen Bilder verf\u00fcgbar waren.
"},{"location":"configuration/settings-reference/#coverart-prufintervall-stunden","title":"Coverart-Pr\u00fcfintervall (Stunden)","text":"Standard: 6
Legt fest, wie oft die automatische Cover-Pr\u00fcfung laufen darf.
Greift in: - H\u00e4ufigkeit des Cover-Nachladens
Praxis: - Kleinere Werte aktualisieren schneller, gr\u00f6\u00dfere Werte reduzieren Hintergrundaktivit\u00e4t.
"},{"location":"configuration/settings-reference/#nfo-nach-encode-erzeugen","title":"NFO nach Encode erzeugen","text":"Standard: Aus
Wenn dieser Schalter aktiv ist, legt Ripster nach erfolgreichem Encode eine .nfo-Datei neben der finalen Ausgabedatei an.
Greift in: - Film- und Serienausgabe - Nachbearbeitung in Media-Centern
Praxis: - Hilfreich f\u00fcr Setups mit Kodi, Jellyfin-Begleitdateien oder eigener Archivierung.
"},{"location":"configuration/settings-reference/#monitoring","title":"Monitoring","text":""},{"location":"configuration/settings-reference/#hardware-monitoring-aktiviert","title":"Hardware Monitoring aktiviert","text":"Standard: An
Das ist der Master-Schalter f\u00fcr CPU-, RAM-, GPU- und Speicher-Monitoring. Ist er aus, stoppt Ripster Polling und Live-Updates f\u00fcr diese Daten.
Greift in: - die kompakte Anzeige im Ripper - die Seite Hardware
Praxis: - Deaktiviere das Monitoring nur, wenn du die Werte nicht brauchst oder die Abfragen in deiner Umgebung unerw\u00fcnscht sind.
"},{"location":"configuration/settings-reference/#hardware-monitoring-intervall-ms","title":"Hardware Monitoring Intervall (ms)","text":"Standard: 5000
Hier stellst du ein, wie oft Hardware- und Speicherwerte neu ermittelt werden.
Greift in: - Aktualit\u00e4t der Hardware-Daten - Polling-Last
Praxis: - K\u00fcrzere Intervalle f\u00fchlen sich live an, erzeugen aber mehr Messaufrufe.
"},{"location":"configuration/settings-reference/#pfade","title":"Pfade","text":""},{"location":"configuration/settings-reference/#grundregeln-fur-pfade-besitzer-und-templates","title":"Grundregeln f\u00fcr Pfade, Besitzer und Templates","text":"Benutzer:Gruppe oder UID:GID, zum Beispiel media:media oder 1000:1000./ Unterordner.Standard: leer
Hier landet das von Blu-ray-Discs erzeugte RAW-Material, sofern kein spezieller Serien-RAW-Ordner greift.
Greift in: - Film- und Disc-Vorbereitung f\u00fcr Blu-ray - Wiederverwendung vorhandener RAWs
Praxis: - Lege RAW-Material gern auf ein gro\u00dfes, schnelles Laufwerk.
"},{"location":"configuration/settings-reference/#raw-ausgabeordner-dvd","title":"Raw Ausgabeordner (DVD)","text":"Standard: leer
Hier landet das von DVD-Discs erzeugte RAW-Material, sofern kein spezieller Serien-RAW-Ordner greift.
Greift in: - DVD-Rip-Phase - RAW-Wiederverwendung bei DVDs
Praxis: - Trenne Blu-ray- und DVD-RAW, wenn du unterschiedliche Speicherorte oder Aufbewahrungsstrategien willst.
"},{"location":"configuration/settings-reference/#cd-raw-ordner","title":"CD RAW-Ordner","text":"Standard: leer
In diesem Ordner legt Ripster die rohen CD-Dateien aus dem Audio-CD-Rip ab, bevor das endg\u00fcltige Ausgabeformat erzeugt wird.
Greift in: - Audio-CD-Rip
Praxis: - Sinnvoll auf einem lokalen Datentr\u00e4ger mit genug Platz f\u00fcr WAV-Zwischendaten.
"},{"location":"configuration/settings-reference/#audiobook-raw-ordner","title":"Audiobook RAW-Ordner","text":"Standard: leer
Das ist der Basisordner f\u00fcr hochgeladene Audiobook-Quelldateien und deren vorbereitete Rohdaten.
Greift in: - AAX-Upload - Audiobook-Vorbereitung
Praxis: - Gut geeignet f\u00fcr einen Bereich, in dem auch gr\u00f6\u00dfere tempor\u00e4re Quelldateien liegen d\u00fcrfen.
"},{"location":"configuration/settings-reference/#serien-ordner-blu-ray","title":"Serien-Ordner (Blu-ray)","text":"Standard: leer
Das ist der Zielordner f\u00fcr fertige Blu-ray-Serienepisoden.
Greift in: - Ausgabe von Blu-ray-Serien
Praxis: - Typisch ist eine Trennung von Serien und Filmen auf Verzeichnisebene.
"},{"location":"configuration/settings-reference/#film-ausgabeordner-blu-ray","title":"Film Ausgabeordner (Blu-ray)","text":"Standard: leer
Hierhin schreibt Ripster fertige Blu-ray-Filme.
Greift in: - finale Film-Ausgabe f\u00fcr Blu-ray
Praxis: - Wenn leer, greift Ripster auf den allgemeinen Film-Output zur\u00fcck.
"},{"location":"configuration/settings-reference/#film-ausgabeordner-dvd","title":"Film Ausgabeordner (DVD)","text":"Standard: leer
Hierhin schreibt Ripster fertige DVD-Filme.
Greift in: - finale Film-Ausgabe f\u00fcr DVD
Praxis: - Praktisch, wenn DVD- und Blu-ray-Filme getrennt archiviert werden sollen.
"},{"location":"configuration/settings-reference/#serien-ordner-dvd","title":"Serien-Ordner (DVD)","text":"Standard: leer
Das ist der Zielordner f\u00fcr fertige DVD-Serienepisoden.
Greift in: - Ausgabe von DVD-Serien
Praxis: - Kann bewusst getrennt vom Blu-ray-Serienordner gef\u00fchrt werden.
"},{"location":"configuration/settings-reference/#cd-output-ordner","title":"CD Output-Ordner","text":"Standard: leer
Hier landen die final encodierten Audio-CD-Dateien. Wenn das Feld leer ist, nutzt Ripster denselben Bereich wie f\u00fcr die CD-RAW-Daten oder den eingebauten Standard.
Greift in: - finale Audio-CD-Ausgabe
Praxis: - Trenne RAW und Ausgabe, wenn du Rohdaten nur kurzfristig behalten willst.
"},{"location":"configuration/settings-reference/#audiobook-output-ordner","title":"Audiobook Output-Ordner","text":"Standard: leer
Hier landen die fertigen Audiobook-Dateien.
Greift in: - m4b - kapitelweises mp3 - kapitelweises flac
Praxis: - Lege diesen Ordner dort an, wo dein H\u00f6rbuch-Archiv liegen soll.
"},{"location":"configuration/settings-reference/#download-zip-ordner","title":"Download ZIP-Ordner","text":"Standard: leer
Ripster erstellt hier vorbereitete ZIP-Downloads aus RAW oder Output und legt auch die zugeh\u00f6rigen Metadateien dort ab.
Greift in: - Download-Aktionen aus der Historie
Praxis: - Gut geeignet f\u00fcr einen Bereich mit genug tempor\u00e4rem Platz f\u00fcr Archive.
"},{"location":"configuration/settings-reference/#externe-speicher","title":"Externe Speicher","text":"Standard: leer
Hier hinterlegst du zus\u00e4tzliche Speicherorte, die Ripster in der Oberfl\u00e4che unter den freien Speichern anzeigen soll. Diese Liste ist f\u00fcr die \u00dcberwachung gedacht, nicht als Schreibziel.
Greift in: - Speicheranzeige im Monitoring
Praxis: - N\u00fctzlich f\u00fcr USB-Platten, NAS-Mounts oder andere Zielmedien, deren freien Platz du im Blick behalten willst.
"},{"location":"configuration/settings-reference/#log-ordner","title":"Log Ordner","text":"Standard: installationsabh\u00e4ngig
Das ist der Basisordner f\u00fcr die Log-Dateien von Ripster. Wenn der Pfad ung\u00fcltig ist, f\u00e4llt Ripster auf einen internen Fallback zur\u00fcck.
Greift in: - Backend-Logs - Job-Logs
Praxis: - Lege Logs auf persistenten Speicher, wenn du Fehlerverl\u00e4ufe langfristig aufbewahren willst.
"},{"location":"configuration/settings-reference/#cd-output-template","title":"CD Output Template","text":"Standard: {artist} - {album} ({year})/{trackNr} {artist} - {title}
Dieses Template steuert Ordnerstruktur und Dateinamen der finalen Audio-CD-Ausgabe. Der letzte Abschnitt wird Dateiname, alles davor Unterordner.
Greift in: - Audio-CD-Ordnerstruktur - Track-Dateinamen
Praxis: - Beispiel: Mit dem Standard entsteht typischerweise Interpret - Album (2024)/01 Interpret - Titel.flac.
Standard: ${title} (${year})/${title} (${year})
Dieses Template bestimmt Ordner und Dateiname f\u00fcr fertige Blu-ray-Filme.
Greift in: - finale Blu-ray-Filmausgabe
Praxis: - Das Standardtemplate erzeugt einen Filmordner und darin eine gleichnamige Datei.
"},{"location":"configuration/settings-reference/#output-template-blu-ray-serie-episode","title":"Output Template (Blu-ray Serie, Episode)","text":"Standard: {seriesTitle}/Staffel {seasonNr}/S{seasonNr}E{episodeNr} - {episodeTitle}
Dieses Template bestimmt den Pfad f\u00fcr einzelne Blu-ray-Serienfolgen.
Greift in: - Serien-Workflow mit Einzel-Episoden
Praxis: - Beispiel: Serie/Staffel 02/S02E05 - Episodentitel.mkv.
Standard: {seriesTitle}/Staffel {seasonNr}/S{0:seasonNr}E{episodeRange} - {episodeTitle} (Teil {parts})
Dieses Template greift, wenn mehrere Folgen in einer Datei zusammengefasst bleiben.
Greift in: - Serien-Workflow mit Doppelfolgen oder Play-All-F\u00e4llen
Praxis: - So bleibt direkt im Dateinamen sichtbar, dass mehrere Episoden in einer Datei liegen.
"},{"location":"configuration/settings-reference/#output-template-dvd","title":"Output Template (DVD)","text":"Standard: ${title} (${year})/${title} (${year})
Dieses Template bestimmt Ordner und Dateiname f\u00fcr fertige DVD-Filme.
Greift in: - finale DVD-Filmausgabe
Praxis: - Das Verhalten entspricht dem Blu-ray-Filmtemplate, nur f\u00fcr das DVD-Profil.
"},{"location":"configuration/settings-reference/#output-template-dvd-serie-episode","title":"Output Template (DVD Serie, Episode)","text":"Standard: {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeNo} - {episodeTitle}
Dieses Template steuert den Pfad f\u00fcr einzelne DVD-Serienfolgen.
Greift in: - DVD-Serien mit einzelner Episodenausgabe
Praxis: - Nutze es, um dein bevorzugtes Serien-Schema exakt abzubilden.
"},{"location":"configuration/settings-reference/#output-template-dvd-serie-multi-episode","title":"Output Template (DVD Serie, Multi-Episode)","text":"Standard: {seriesTitle}/Season {seasonNr}/{seriesTitle} - S{seasonNo}E{episodeRange}
Dieses Template greift f\u00fcr zusammengefasste DVD-Folgen in einer Datei.
Greift in: - Multi-Episode-Ausgabe im DVD-Serienworkflow
Praxis: - Besonders relevant bei TV-DVDs mit Play-All-Titeln oder Doppelfolgen.
"},{"location":"configuration/settings-reference/#output-template-audiobook","title":"Output Template (Audiobook)","text":"Standard: {author}/{author} - {title} ({year})
Dieses Template bestimmt den Dateipfad f\u00fcr die Ein-Datei-Ausgabe von Audiobooks, also vor allem f\u00fcr m4b.
Greift in: - Audiobook-Ausgabe als Einzeltitel
Praxis: - Beispiel: Autor/Autor - Titel (2023).m4b.
Standard: {author} - {title} ({year})
Dieses Template steuert den Namen des relativen RAW-Unterordners, in den die Audiobook-Quelldaten gelegt werden.
Greift in: - Audiobook-Upload und RAW-Ablage
Praxis: - Es hilft dabei, AAX-Rohdaten sauber nach Titel und Jahr zu organisieren.
"},{"location":"configuration/settings-reference/#converter-raw-ordner","title":"Converter Raw-Ordner","text":"Standard: leer
Das ist der Eingangsordner des Converters. Uploads, neue Unterordner und externe Dateiimporte landen hier.
Greift in: - gesamte Converter-Dateiverwaltung
Praxis: - Dieser Ordner sollte gut erreichbar und gro\u00df genug f\u00fcr Rohdateien sein.
"},{"location":"configuration/settings-reference/#converter-ausgabe-video","title":"Converter Ausgabe (Video)","text":"Standard: leer
Hierhin schreibt Ripster final konvertierte Video- oder ISO-Ergebnisse aus dem Converter.
Greift in: - Converter-Videojobs
Praxis: - Lege hier den Zielbereich f\u00fcr fertige Video-Transcodes fest.
"},{"location":"configuration/settings-reference/#converter-ausgabe-audio","title":"Converter Ausgabe (Audio)","text":"Standard: leer
Hierhin schreibt Ripster die finalen Audio-Ergebnisse aus dem Converter.
Greift in: - Converter-Audiojobs
Praxis: - Sinnvoll getrennt vom Video-Ausgabeordner.
"},{"location":"configuration/settings-reference/#output-template-video","title":"Output-Template (Video)","text":"Standard: {title}
Dieses Template bestimmt den Dateinamen von Converter-Videojobs. Unterordner sind ebenfalls m\u00f6glich.
Greift in: - Converter-Videoausgabe
Praxis: - Beispiel: {title}/{title} erzeugt einen Unterordner pro Titel.
Standard: {artist} - {title}
Dieses Template bestimmt Dateiname und bei Bedarf Ordnerstruktur von Converter-Audiojobs.
Greift in: - einzelne Audio-Dateien - gemeinsame Audio-Jobs - Ordnerjobs
Praxis: - Bei gemeinsamen Audio-Jobs kann der vordere Teil des Templates als Ordner dienen, der hintere Teil als Track-Schema.
"},{"location":"configuration/settings-reference/#raw-ordner-blu-ray-serie","title":"RAW-Ordner (Blu-ray Serie)","text":"Standard: leer
Hier kannst du Blu-ray-Serien-RAW bewusst getrennt vom allgemeinen Blu-ray-RAW ablegen.
Greift in: - Serien-RAW-Erzeugung bei Blu-ray
Praxis: - Sinnvoll, wenn Serien deutlich andere Speicher- oder Aufbewahrungsregeln haben als Filme.
"},{"location":"configuration/settings-reference/#eigentumer-raw-ordner-blu-ray-serie","title":"Eigent\u00fcmer RAW-Ordner (Blu-ray Serie)","text":"Standard: leer
Legt den Besitzer f\u00fcr Blu-ray-Serien-RAW fest. Ripster versucht neue Dateien und Ordner nach dem Schreiben entsprechend zu \u00fcbernehmen.
Greift in: - Dateirechte auf Serien-RAW
Praxis: - Typisch f\u00fcr NAS-Freigaben oder Docker-Setups mit getrennten Nutzern.
"},{"location":"configuration/settings-reference/#eigentumer-raw-ordner-blu-ray","title":"Eigent\u00fcmer Raw-Ordner (Blu-ray)","text":"Standard: leer
Legt den Besitzer f\u00fcr allgemeine Blu-ray-RAW-Daten fest.
Greift in: - Dateirechte auf Blu-ray-RAW
Praxis: - Relevant, wenn der Ripster-Dienst nicht als Zielnutzer schreiben soll.
"},{"location":"configuration/settings-reference/#raw-ordner-dvd-serie","title":"RAW-Ordner (DVD Serie)","text":"Standard: leer
Hier kannst du DVD-Serien-RAW getrennt vom allgemeinen DVD-RAW ablegen.
Greift in: - Serien-RAW-Erzeugung bei DVD
Praxis: - Sinnvoll, wenn Serienmaterial getrennt verwaltet werden soll.
"},{"location":"configuration/settings-reference/#eigentumer-raw-ordner-dvd-serie","title":"Eigent\u00fcmer RAW-Ordner (DVD Serie)","text":"Standard: leer
Legt den Besitzer f\u00fcr DVD-Serien-RAW fest.
Greift in: - Dateirechte auf DVD-Serien-RAW
Praxis: - Besonders wichtig in Mehrbenutzer- oder NAS-Umgebungen.
"},{"location":"configuration/settings-reference/#eigentumer-raw-ordner-dvd","title":"Eigent\u00fcmer Raw-Ordner (DVD)","text":"Standard: leer
Legt den Besitzer f\u00fcr allgemeine DVD-RAW-Daten fest.
Greift in: - Dateirechte auf DVD-RAW
Praxis: - Nutze das Feld, wenn finale Rechte nicht beim Service-User liegen sollen.
"},{"location":"configuration/settings-reference/#eigentumer-cd-raw-ordner","title":"Eigent\u00fcmer CD RAW-Ordner","text":"Standard: leer
Legt den Besitzer f\u00fcr Rohdaten aus Audio-CD-Rips fest.
Greift in: - Rechte auf CD-Zwischendaten
Praxis: - Hilfreich, wenn andere Tools oder Nutzer auf die Rohdaten zugreifen sollen.
"},{"location":"configuration/settings-reference/#eigentumer-audiobook-raw-ordner","title":"Eigent\u00fcmer Audiobook RAW-Ordner","text":"Standard: leer
Legt den Besitzer f\u00fcr Audiobook-Rohdaten fest.
Greift in: - Rechte auf AAX- und Vorbereitungsdaten
Praxis: - Relevant, wenn Audiobook-RAW nicht beim Dienstbenutzer verbleiben soll.
"},{"location":"configuration/settings-reference/#eigentumer-converter-raw-ordner","title":"Eigent\u00fcmer Converter RAW-Ordner","text":"Standard: leer
Legt den Besitzer f\u00fcr Dateien im Converter-Eingangsbereich fest.
Greift in: - Rechte auf Uploads und importierte Converter-Dateien
Praxis: - Praktisch, wenn Dateien nach dem Upload auch au\u00dferhalb von Ripster bearbeitet werden.
"},{"location":"configuration/settings-reference/#eigentumer-serien-ordner-blu-ray","title":"Eigent\u00fcmer Serien-Ordner (Blu-ray)","text":"Standard: leer
Legt den Besitzer f\u00fcr fertige Blu-ray-Serienausgaben fest.
Greift in: - finale Rechte auf Blu-ray-Serien
Praxis: - Sinnvoll f\u00fcr Media-Center-Freigaben.
"},{"location":"configuration/settings-reference/#eigentumer-film-ordner-blu-ray","title":"Eigent\u00fcmer Film-Ordner (Blu-ray)","text":"Standard: leer
Legt den Besitzer f\u00fcr fertige Blu-ray-Filmdateien fest.
Greift in: - finale Rechte auf Blu-ray-Filme
Praxis: - Nutze das Feld, wenn Filme auf einem NAS oder von anderen Diensten gelesen werden.
"},{"location":"configuration/settings-reference/#eigentumer-film-ordner-dvd","title":"Eigent\u00fcmer Film-Ordner (DVD)","text":"Standard: leer
Legt den Besitzer f\u00fcr fertige DVD-Filmdateien fest.
Greift in: - finale Rechte auf DVD-Filme
Praxis: - Gleiches Prinzip wie beim Blu-ray-Filmordner, nur f\u00fcr DVD.
"},{"location":"configuration/settings-reference/#eigentumer-serien-ordner-dvd","title":"Eigent\u00fcmer Serien-Ordner (DVD)","text":"Standard: leer
Legt den Besitzer f\u00fcr fertige DVD-Serienausgaben fest.
Greift in: - finale Rechte auf DVD-Serien
Praxis: - Hilfreich f\u00fcr gemeinsame Medienarchive.
"},{"location":"configuration/settings-reference/#eigentumer-cd-output-ordner","title":"Eigent\u00fcmer CD Output-Ordner","text":"Standard: leer
Legt den Besitzer der finalen Audio-CD-Ausgabe fest.
Greift in: - Rechte auf FLAC-, MP3- oder andere CD-Endformate
Praxis: - Wichtig, wenn Musik sp\u00e4ter durch andere Anwendungen verwaltet wird.
"},{"location":"configuration/settings-reference/#eigentumer-audiobook-output-ordner","title":"Eigent\u00fcmer Audiobook Output-Ordner","text":"Standard: leer
Legt den Besitzer der finalen Audiobook-Dateien fest.
Greift in: - Rechte auf m4b, mp3 und flac
Praxis: - Sinnvoll f\u00fcr Bibliotheken, die von separaten Diensten gelesen werden.
"},{"location":"configuration/settings-reference/#eigentumer-converter-video-output-ordner","title":"Eigent\u00fcmer Converter Video Output-Ordner","text":"Standard: leer
Legt den Besitzer der finalen Converter-Videoausgabe fest.
Greift in: - Rechte auf konvertierte Video-Dateien
Praxis: - N\u00fctzlich bei geteilten Medienordnern.
"},{"location":"configuration/settings-reference/#eigentumer-converter-audio-output-ordner","title":"Eigent\u00fcmer Converter Audio Output-Ordner","text":"Standard: leer
Legt den Besitzer der finalen Converter-Audioausgabe fest.
Greift in: - Rechte auf konvertierte Audio-Dateien
Praxis: - Hilfreich, wenn Audio-Dateien sp\u00e4ter von anderen Diensten verschoben oder indiziert werden.
"},{"location":"configuration/settings-reference/#eigentumer-download-zip-ordner","title":"Eigent\u00fcmer Download ZIP-Ordner","text":"Standard: leer
Legt den Besitzer der erzeugten Download-Archive und Begleitdateien fest.
Greift in: - Rechte auf ZIP-Downloads aus der Historie
Praxis: - Besonders relevant, wenn Downloads \u00fcber Freigaben oder einen anderen Webserver bereitgestellt werden.
"},{"location":"configuration/settings-reference/#kapitel-template-audiobook","title":"Kapitel Template (Audiobook)","text":"Standard: {author}/{author} - {title} ({year})/{chapterNr} {chapterTitle}
Dieses Template steuert die Zielstruktur f\u00fcr kapitelweise Audiobook-Ausgaben wie mp3 oder flac.
Greift in: - Kapiteldateien im Audiobook-Workflow
Praxis: - Beispiel: Autor/Autor - Titel (2023)/01 Kapitelname.mp3.
Preset und Extra Args bestimmen das Verhalten der jeweiligen CLI.Standard: makemkvcon
Hier gibst du den Befehl oder den vollst\u00e4ndigen Pfad zur MakeMKV-CLI an.
Greift in: - Disc-Analyse - Rip von Blu-ray und DVD
Praxis: - Trage einen absoluten Pfad ein, wenn das Tool nicht im PATH des Dienstes liegt.
Standard: leer
Hier hinterlegst du den Registrierungsschl\u00fcssel f\u00fcr MakeMKV. Ripster synchronisiert ihn beim Speichern in die MakeMKV-Konfiguration und kann au\u00dferdem den aktuellen Betakey \u00fcbernehmen.
Greift in: - MakeMKV-Nutzung ohne Trial-Einschr\u00e4nkungen
Praxis: - Sinnvoll, wenn die CLI dauerhaft und ohne manuelle Host-Pflege nutzbar bleiben soll.
"},{"location":"configuration/settings-reference/#mediainfo-kommando","title":"Mediainfo Kommando","text":"Standard: mediainfo
Hier gibst du den Befehl oder Pfad zu mediainfo an.
Greift in: - Mediainfo-Pr\u00fcfung - Review-Aufbau - Analyse vorhandener Dateien
Praxis: - Wichtig f\u00fcr alle Workflows, die Track- und Streaminformationen zuverl\u00e4ssig aufbauen sollen.
"},{"location":"configuration/settings-reference/#minimale-titellange-minuten","title":"Minimale Titell\u00e4nge (Minuten)","text":"Standard: 60
Diese Einstellung wirkt doppelt: Ripster h\u00e4ngt den Wert bei der MakeMKV-Analyse als Mindestl\u00e4nge an, sofern du nicht schon selbst eine explizite Mindestl\u00e4nge in den Extra-Args gesetzt hast. Zus\u00e4tzlich markiert Ripster Titel unterhalb dieser Schwelle sp\u00e4ter im Review als nicht encodierw\u00fcrdig.
Greift in: - Titel- und Playlist-Vorfilterung - Disc-Analyse - Review-Aufbau
Praxis: - Ein hoher Wert blendet Bonusmaterial und Trailer aus. - Ein zu hoher Wert kann aber auch k\u00fcrzere Haupttitel oder Episoden verdr\u00e4ngen.
"},{"location":"configuration/settings-reference/#tmdb-runtime-abzug-fur-playlistfilter","title":"TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)","text":"Standard: 0
Ripster vergleicht bei problematischen Blu-rays die Disc-Playlists mit der Laufzeit aus TMDb. Dieser Wert wird prozentual von der TMDb-Laufzeit abgezogen und bildet damit eine lockerere Untergrenze f\u00fcr akzeptable Playlist-Kandidaten. Zus\u00e4tzlich bleibt immer eine Mindesttoleranz von zwei Minuten nach unten erhalten.
Greift in: - Playlistflow vor der Review - Kandidatenauswahl bei Hauptfilm-Playlists
Praxis: - Beispiel: Steht ein Film in TMDb mit 120 Minuten und du tr\u00e4gst 5 ein, arbeitet Ripster f\u00fcr die Kandidatensuche mit rund 114 Minuten als Untergrenze, solange die feste Zweiminuten-Toleranz nicht ohnehin h\u00f6her w\u00e4re. - Das hilft bei Discs, deren korrekte Hauptfassung etwas k\u00fcrzer gemeldet wird als in TMDb.
Standard: HandBrakeCLI
Hier gibst du den Befehl oder Pfad zu HandBrakeCLI an.
Greift in: - alle Video-Encodes - Re-Encode aus RAW - Converter-Videojobs
Praxis: - Bei mehreren HandBrake-Installationen kannst du hier gezielt eine bestimmte Binary verwenden.
"},{"location":"configuration/settings-reference/#encode-neustart-unvollstandige-ausgabe-loschen","title":"Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen","text":"Standard: An
Wenn du einen Encode aus der Historie neu startest und der vorherige Lauf nicht erfolgreich war, entfernt Ripster den unvollst\u00e4ndigen Output vor dem Neustart automatisch. Erfolgreiche Ausgaben bleiben davon unber\u00fchrt.
Greift in: - Encode neu starten
Praxis: - Aktiviert verhindert diese Option, dass alte Teil-Dateien mit dem neuen Lauf kollidieren.
"},{"location":"configuration/settings-reference/#parallele-jobs","title":"Parallele Jobs","text":"Standard: 1
Das ist das allgemeine Startlimit f\u00fcr gleichzeitig laufende Jobs in der Pipeline. Alles dar\u00fcber wird in die Warteschlange gestellt.
Greift in: - Ripper - Converter - Audiobooks - Queue-Pumpe im Hintergrund
Praxis: - Ein h\u00f6herer Wert erh\u00f6ht den Durchsatz, belastet aber CPU, I/O und ggf. mehrere Laufwerke st\u00e4rker.
"},{"location":"configuration/settings-reference/#script-test-timeout-ms","title":"Script-Test Timeout (ms)","text":"Standard: 0
Dieser Wert gilt nur f\u00fcr den Testlauf von Skripten in Settings. 0 bedeutet: kein Timeout.
Greift in: - Scripte-Tab - Tests einzelner Skripte oder Kettenbausteine
Praxis: - Setze hier einen festen Wert, wenn du h\u00e4ngende Testskripte automatisch abbrechen willst.
"},{"location":"configuration/settings-reference/#max-parallele-audio-cd-jobs","title":"Max. parallele Audio CD Jobs","text":"Standard: 2
Diese Einstellung begrenzt speziell, wie viele Audio-CD-Jobs gleichzeitig laufen d\u00fcrfen. Sie wirkt zus\u00e4tzlich zum allgemeinen Joblimit.
Greift in: - Audio-CD-Queue - Start mehrerer CDs hintereinander
Praxis: - So kannst du mehrere CDs parallel zulassen, ohne den Videobereich freizugeben.
"},{"location":"configuration/settings-reference/#max-encodes-gesamt-medienunabhangig","title":"Max. Encodes gesamt (medienunabh\u00e4ngig)","text":"Standard: 3
Das ist der harte Deckel f\u00fcr alle gleichzeitig laufenden Encodes zusammen, unabh\u00e4ngig davon, ob sie von Film, Serie, Converter, CD oder Audiobook stammen.
Greift in: - alle Encode-Starts - Gesamtlast der Maschine
Praxis: - Diese Grenze sticht die Einzellimits aus, wenn zu viele Medienarten gleichzeitig starten wollen.
"},{"location":"configuration/settings-reference/#audio-cds-queue-reihenfolge-uberspringen","title":"Audio CDs: Queue-Reihenfolge \u00fcberspringen","text":"Standard: Aus
Wenn aktiviert, d\u00fcrfen Audio-CD-Jobs vor normalen Film- oder Videojobs starten, auch wenn diese fr\u00fcher in der Queue stehen. Die Parallelit\u00e4ts- und Gesamtlimits gelten trotzdem weiter.
Greift in: - Reihenfolge der Queue - Audio-CD-Durchsatz in gemischten Warteschlangen
Praxis: - Sinnvoll, wenn CDs schnell abgearbeitet werden sollen und nicht hinter langen Videoencodes h\u00e4ngen bleiben sollen.
"},{"location":"configuration/settings-reference/#cdparanoia-kommando","title":"cdparanoia Kommando","text":"Standard: cdparanoia
Hier gibst du den Befehl oder Pfad zu cdparanoia an.
Greift in: - Audio-CD-Rip
Praxis: - Wichtig, wenn cdparanoia nicht im Standardpfad des Systems liegt.
Standard: ffmpeg
Hier gibst du den Befehl oder Pfad zu ffmpeg an.
Greift in: - Audiobook-Encodes - Audio-Nachbearbeitung
Praxis: - Ohne korrektes ffmpeg schlagen Audiobook-Ausgaben fehl.
Standard: ffprobe
Hier gibst du den Befehl oder Pfad zu ffprobe an.
Greift in: - Analyse von Audiobooks - Kapitel- und Metadatenaufbau
Praxis: - Ohne ffprobe kann Ripster Kapitel und Dateidetails nicht zuverl\u00e4ssig auslesen.
Standard: leer
Diese zus\u00e4tzlichen Argumente h\u00e4ngt Ripster bei Blu-ray-Mediainfo-Aufrufen an den Befehl an.
Greift in: - Mediainfo-Pr\u00fcfung f\u00fcr Blu-ray - Review-Aufbau aus bestehenden Dateien
Praxis: - Nur f\u00fcr gezielte Spezialf\u00e4lle anpassen, wenn du das CLI-Verhalten bewusst \u00fcberschreiben willst.
"},{"location":"configuration/settings-reference/#makemkv-rip-modus-blu-ray","title":"MakeMKV Rip Modus (Blu-ray)","text":"Standard: backup
Dieses normalerweise ausgeblendete Systemfeld bestimmt, ob Blu-rays als vollst\u00e4ndige Disc-Struktur oder direkt als MKV gerippt werden.
Greift in: - technische RAW-Erzeugung bei Blu-ray
Praxis: - F\u00fcr normale Nutzung bleibt dieser Wert unver\u00e4ndert.
"},{"location":"configuration/settings-reference/#makemkv-analyze-extra-args-blu-ray","title":"MakeMKV Analyze Extra Args (Blu-ray)","text":"Standard: leer
Diese zus\u00e4tzlichen Argumente werden an den Blu-ray-Analyseaufruf von MakeMKV angeh\u00e4ngt.
Greift in: - Disc-Analyse - Titel- und Playlist-Erkennung
Praxis: - Beachte, dass eine selbst gesetzte Mindestl\u00e4nge in diesen Args die allgemeine Einstellung zur minimalen Titell\u00e4nge \u00fcbersteuert.
"},{"location":"configuration/settings-reference/#makemkv-rip-extra-args-blu-ray","title":"MakeMKV Rip Extra Args (Blu-ray)","text":"Standard: leer
Diese zus\u00e4tzlichen Argumente werden an den eigentlichen Blu-ray-Rip angeh\u00e4ngt.
Greift in: - RAW-Erzeugung bei Blu-ray
Praxis: - Nur anpassen, wenn du das MakeMKV-Verhalten sehr gezielt erweitern oder \u00fcberschreiben willst.
"},{"location":"configuration/settings-reference/#handbrake-preset-blu-ray","title":"HandBrake Preset (Blu-ray)","text":"Standard: H.264 MKV 1080p30
Dieses Feld setzt den technischen HandBrake-Standard f\u00fcr Blu-ray-Jobs, sofern im konkreten Job nichts anderes gew\u00e4hlt wird.
Greift in: - Review-Vorgaben - Encode-Start bei Blu-ray
Praxis: - Das Preset ist deine Grundlinie; im Review oder \u00fcber User-Presets kann sp\u00e4ter bewusst davon abgewichen werden.
"},{"location":"configuration/settings-reference/#handbrake-extra-args-blu-ray","title":"HandBrake Extra Args (Blu-ray)","text":"Standard: sprach- und codecbezogene Standardargumente
Hier definierst du zus\u00e4tzliche HandBrake-CLI-Argumente f\u00fcr Blu-ray-Jobs. Sie steuern zum Beispiel Audio-Sprachauswahl, Untertitelvorgaben, Encoder-Profil und Qualit\u00e4tsparameter.
Greift in: - finalen HandBrake-Aufruf bei Blu-ray - Vorauswahl von Audio und Untertiteln
Praxis: - Diese Einstellung ist sehr m\u00e4chtig: Ein expliziter Audio- oder Untertitel-Selektor hier kann die separaten Review-Sprachfelder faktisch \u00fcberstimmen.
"},{"location":"configuration/settings-reference/#review-audio-sprachen-blu-ray-film","title":"Review Audio-Sprachen (Blu-ray Film)","text":"Standard: leer
Hier definierst du, welche Audiosprachen in der Review eines Blu-ray-Films automatisch vorausgew\u00e4hlt werden sollen. Ripster normalisiert \u00fcbliche Schreibweisen wie de, deu, en oder eng.
Greift in: - Bereit zum Encodieren bei Blu-ray-Filmen
Praxis: - Beispiel: de, en. - Bleibt das Feld leer, entscheidet Ripster st\u00e4rker aus Preset und vorhandenen Tracks heraus.
Standard: leer
Hier definierst du die Untertitelsprachen, die in der Review eines Blu-ray-Films vorselektiert werden.
Greift in: - Untertitelvorauswahl im Film-Review
Praxis: - Gut f\u00fcr feste Standards wie nur Deutsch und Englisch.
"},{"location":"configuration/settings-reference/#review-audio-sprachen-blu-ray-serie","title":"Review Audio-Sprachen (Blu-ray Serie)","text":"Standard: leer
Dieses Feld funktioniert wie das Film-Pendant, greift aber nur bei Blu-ray-Serien.
Greift in: - Audio-Vorauswahl im Serien-Review
Praxis: - Praktisch, wenn du f\u00fcr Serien andere Sprachregeln als f\u00fcr Filme nutzt.
"},{"location":"configuration/settings-reference/#review-ut-sprachen-blu-ray-serie","title":"Review UT-Sprachen (Blu-ray Serie)","text":"Standard: leer
Dieses Feld funktioniert wie das Film-Pendant, greift aber nur bei Blu-ray-Serien.
Greift in: - Untertitel-Vorauswahl im Serien-Review
Praxis: - So lassen sich Serien-Defaults getrennt von Film-Defaults pflegen.
"},{"location":"configuration/settings-reference/#ausgabeformat-blu-ray","title":"Ausgabeformat (Blu-ray)","text":"Standard: mkv
Hier legst du die Dateiendung der finalen Blu-ray-Ausgabe fest.
Greift in: - finalen Dateinamen - Containerformat der Ausgabe
Praxis: - W\u00e4hle das Format, das zu deinem Player- oder Archiv-Setup passt.
"},{"location":"configuration/settings-reference/#mediainfo-extra-args-dvd","title":"Mediainfo Extra Args (DVD)","text":"Standard: leer
Diese zus\u00e4tzlichen Argumente h\u00e4ngen an den Mediainfo-Aufrufen f\u00fcr DVD-Jobs.
Greift in: - Mediainfo-Pr\u00fcfung f\u00fcr DVD
Praxis: - Nur f\u00fcr gezielte technische Sonderf\u00e4lle anpassen.
"},{"location":"configuration/settings-reference/#makemkv-rip-modus-dvd","title":"MakeMKV Rip Modus (DVD)","text":"Standard: mkv
Dieses normalerweise ausgeblendete Systemfeld legt fest, ob DVDs direkt als MKV oder als Disc-Struktur gerippt werden.
Greift in: - technische RAW-Erzeugung bei DVD
Praxis: - Im Normalfall unver\u00e4ndert lassen.
"},{"location":"configuration/settings-reference/#makemkv-analyze-extra-args-dvd","title":"MakeMKV Analyze Extra Args (DVD)","text":"Standard: leer
Diese zus\u00e4tzlichen Argumente werden an den DVD-Analyseaufruf von MakeMKV angeh\u00e4ngt.
Greift in: - DVD-Titelerkennung - sp\u00e4tere Review-Vorbereitung
Praxis: - Wie bei Blu-ray gilt: eigene Mindestl\u00e4ngen-Args k\u00f6nnen die allgemeine Mindestl\u00e4nge \u00fcbersteuern.
"},{"location":"configuration/settings-reference/#makemkv-rip-extra-args-dvd","title":"MakeMKV Rip Extra Args (DVD)","text":"Standard: leer
Diese zus\u00e4tzlichen Argumente werden beim eigentlichen DVD-Rip an MakeMKV angeh\u00e4ngt.
Greift in: - RAW-Erzeugung bei DVD
Praxis: - Nur bewusst \u00e4ndern, wenn du das CLI-Verhalten genau kennst.
"},{"location":"configuration/settings-reference/#handbrake-preset-dvd","title":"HandBrake Preset (DVD)","text":"Standard: H.264 MKV 480p30
Dieses Feld setzt den technischen HandBrake-Standard f\u00fcr DVD-Jobs.
Greift in: - Review-Vorgaben - Encode-Start bei DVD
Praxis: - Eine gute Basis f\u00fcr DVD kann sich deutlich von Blu-ray unterscheiden, deshalb gibt es ein eigenes Feld.
"},{"location":"configuration/settings-reference/#handbrake-extra-args-dvd","title":"HandBrake Extra Args (DVD)","text":"Standard: sprach- und codecbezogene Standardargumente
Hier definierst du die zus\u00e4tzlichen HandBrake-CLI-Argumente f\u00fcr DVD-Jobs.
Greift in: - finalen HandBrake-Aufruf bei DVD - Audio- und Untertitelvorauswahl
Praxis: - Wie bei Blu-ray k\u00f6nnen explizite Selektionsargumente in diesen Args separate Review-Sprachfelder aushebeln.
"},{"location":"configuration/settings-reference/#review-audio-sprachen-dvd-film","title":"Review Audio-Sprachen (DVD Film)","text":"Standard: leer
Definiert die Audio-Vorauswahl f\u00fcr DVD-Filme in der Review.
Greift in: - Film-Review bei DVD
Praxis: - Beispiel: de, en.
Standard: leer
Definiert die Untertitel-Vorauswahl f\u00fcr DVD-Filme in der Review.
Greift in: - Untertitel-Review bei DVD-Filmen
Praxis: - Gut f\u00fcr feste Disc-Standards in deiner Sammlung.
"},{"location":"configuration/settings-reference/#review-audio-sprachen-dvd-serie","title":"Review Audio-Sprachen (DVD Serie)","text":"Standard: leer
Definiert die Audio-Vorauswahl f\u00fcr DVD-Serien in der Review.
Greift in: - Serien-Review bei DVD
Praxis: - Trenne Serien-Defaults bewusst von Film-Defaults, wenn n\u00f6tig.
"},{"location":"configuration/settings-reference/#review-ut-sprachen-dvd-serie","title":"Review UT-Sprachen (DVD Serie)","text":"Standard: leer
Definiert die Untertitel-Vorauswahl f\u00fcr DVD-Serien in der Review.
Greift in: - Untertitel-Review bei DVD-Serien
Praxis: - Besonders n\u00fctzlich bei Serien mit vielen redundanten UT-Spuren.
"},{"location":"configuration/settings-reference/#ausgabeformat-dvd","title":"Ausgabeformat (DVD)","text":"Standard: mkv
Hier legst du die Dateiendung der finalen DVD-Ausgabe fest.
Greift in: - finalen Dateinamen - Containerformat der DVD-Ausgabe
Praxis: - Dieses Feld ist vom Blu-ray-Format getrennt, damit beide Profile unabh\u00e4ngig voneinander arbeiten k\u00f6nnen.
"},{"location":"configuration/settings-reference/#mkvmerge-kommando","title":"mkvmerge Kommando","text":"Standard: mkvmerge
Hier gibst du den Befehl oder Pfad zu mkvmerge an.
Greift in: - Multipart-Film-Zusammenf\u00fchrungen
Praxis: - Relevant, wenn du mehrteilige Filme oder Disc-Splits sp\u00e4ter in eine zusammenh\u00e4ngende Ausgabe \u00fcberf\u00fchren willst.
"},{"location":"configuration/settings-reference/#ausgeblendete-felder","title":"Ausgeblendete Felder","text":"Einige technische Systemfelder sind im Schema vorhanden, werden aber im normalen Formular nicht aktiv angeboten oder nur intern benutzt. In der Doku sind sie oben trotzdem erkl\u00e4rt, damit auch Altdaten, API-F\u00e4lle und Spezialsetups nachvollziehbar bleiben.
"},{"location":"deployment/","title":"Anhang: Deployment","text":"Technische Betriebsdokumentation f\u00fcr Entwicklung und Produktion.
Entwicklungsumgebung
Lokale Entwicklung mit Hot-Reload.
Entwicklung
Produktion
Installation und Betrieb auf Servern.
Produktion
makemkvcon, HandBrakeCLI, mediainfo)./start.sh\n Startet:
http://localhost:3001, mit nodemon)http://localhost:5173, mit Vite HMR)Stoppen: Ctrl+C.
cd backend\nnpm install\nnpm run dev\n"},{"location":"deployment/development/#frontend","title":"Frontend","text":"cd frontend\nnpm install\nnpm run dev\n"},{"location":"deployment/development/#vite-proxy-dev","title":"Vite-Proxy (Dev)","text":"frontend/vite.config.js proxied standardm\u00e4\u00dfig:
/api -> http://127.0.0.1:3001/ws -> ws://127.0.0.1:3001Beispiel frontend/.env.local:
VITE_API_BASE=http://192.168.1.100:3001/api\nVITE_WS_URL=ws://192.168.1.100:3001/ws\nVITE_PUBLIC_ORIGIN=http://192.168.1.100:5173\nVITE_ALLOWED_HOSTS=192.168.1.100,ripster.local\nVITE_HMR_PROTOCOL=ws\nVITE_HMR_HOST=192.168.1.100\nVITE_HMR_CLIENT_PORT=5173\n"},{"location":"deployment/development/#nutzliche-kommandos","title":"N\u00fctzliche Kommandos","text":"# Root dev (backend + frontend)\nnpm run dev\n\n# einzeln\nnpm run dev:backend\nnpm run dev:frontend\n\n# Frontend Build\nnpm run build:frontend\n"},{"location":"deployment/production/","title":"Produktions-Deployment","text":""},{"location":"deployment/production/#automatische-installation-empfohlen","title":"Automatische Installation (empfohlen)","text":"Das mitgelieferte install.sh richtet Ripster vollautomatisch ein \u2013 inklusive Node.js, MakeMKV, HandBrake, nginx und systemd-Dienst.
Unterst\u00fctzte Systeme laut Script: Debian, Ubuntu, Linux Mint, Pop!_OS Voraussetzung: root-Rechte, Internetzugang
"},{"location":"deployment/production/#schnellstart-via-curl","title":"Schnellstart via curl","text":"curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n Oder mit wget:
wget -qO- https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash\n Optionen nur via Datei
Beim Pipen von curl/wget k\u00f6nnen keine Argumente \u00fcbergeben werden. F\u00fcr benutzerdefinierte Optionen zuerst herunterladen und dann mit sudo bash install.sh [Optionen] ausf\u00fchren.
--branch <branch> dev Git-Branch f\u00fcr die Installation --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Systembenutzer f\u00fcr den Dienst --port <port> 3001 Backend-Port --host <hostname> Auto (Maschinen-IP) Hostname/IP f\u00fcr die Weboberfl\u00e4che --no-makemkv \u2013 MakeMKV-Installation \u00fcberspringen --no-handbrake \u2013 HandBrake-Installation \u00fcberspringen --no-nginx \u2013 nginx-Einrichtung \u00fcberspringen --reinstall \u2013 Bestehende Installation aktualisieren (Daten bleiben erhalten) -h, --help \u2013 Hilfe anzeigen"},{"location":"deployment/production/#beispiele","title":"Beispiele","text":"# Standard-Installation\nsudo bash install.sh\n\n# Anderen Branch und Port verwenden\nsudo bash install.sh --branch dev --port 8080\n\n# Ohne MakeMKV (bereits installiert)\nsudo bash install.sh --no-makemkv\n\n# Bestehende Installation aktualisieren\nsudo bash install.sh --reinstall\n\n# Ohne nginx (eigener Reverse-Proxy)\nsudo bash install.sh --no-nginx --host mein-server.local\n"},{"location":"deployment/production/#was-das-skript-erledigt","title":"Was das Skript erledigt","text":"curl, wget, git, mediainfo, udev u. a.--no-makemkv \u00fcbersprungen werden)apt install handbrake-cli)bin/HandBrakeCLIripster \u2013 ohne Login-Shell und ohne Home-Verzeichnis; Gruppen werden (falls vorhanden) erg\u00e4nzt: cdrom, optical, disk, video, render--dir (bei --reinstall: sichert backend/data, aktualisiert Repo, stellt Daten wieder her)backend/data, backend/logs, backend/data/output/raw, backend/data/output/movies, backend/data/logsnpm run build mit relativen API-URLs (nginx-kompatibel).env \u2013 wird automatisch generiert (bei --reinstall bleibt bestehende .env erhalten)ripster:ripster auf Installationsverzeichnis; bei sudo-Aufruf werden Output-/Log-Ordner auf <aufrufender user>:ripster mit 775 gesetzt; .env wird auf 600 gesetzt~/.MakeMKV f\u00fcr den aufrufenden Benutzerripster-backend.service erstellt, aktiviert und gestartet/api/ und /ws (kann mit --no-nginx \u00fcbersprungen werden)# Status pr\u00fcfen\nsudo systemctl status ripster-backend\n\n# Logs verfolgen\nsudo journalctl -u ripster-backend -f\n\n# Neustart\nsudo systemctl restart ripster-backend\n\n# Aktualisieren\nsudo bash /opt/ripster/install.sh --reinstall\n Zugriff: http://<Maschinen-IP> (oder der mit --host angegebene Hostname)
Bei nicht-interaktiver Ausf\u00fchrung (Pipe von curl) wird automatisch die Standard-Version gew\u00e4hlt. F\u00fcr die GPU-Version zuerst herunterladen:
curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh -o install.sh\nsudo bash install.sh\n# \u2192 Interaktive Auswahl: Option 2 f\u00fcr NVDEC\n Das geb\u00fcndelte Binary liegt unter bin/HandBrakeCLI und wird nach /usr/local/bin/HandBrakeCLI kopiert.
Die folgenden Abschnitte beschreiben die einzelnen Schritte f\u00fcr manuelle oder angepasste Setups.
"},{"location":"deployment/production/#empfohlene-architektur","title":"Empfohlene Architektur","text":"Client\n -> nginx (Reverse Proxy + statisches Frontend)\n -> Backend API/WebSocket (Node.js, Port 3001)\n Wichtig: Das Backend serviert im aktuellen Stand keine frontend/dist-Dateien automatisch.
cd frontend\nnpm install\nnpm run build\n Artefakte liegen in frontend/dist/.
Beispiel /etc/systemd/system/ripster-backend.service:
[Unit]\nDescription=Ripster Backend\nAfter=network.target\n\n[Service]\nType=simple\nUser=ripster\nWorkingDirectory=/opt/ripster/backend\nExecStart=/usr/bin/env node src/index.js\nRestart=on-failure\nRestartSec=5\nEnvironment=NODE_ENV=production\nEnvironment=PORT=3001\nEnvironment=LOG_LEVEL=info\n\n[Install]\nWantedBy=multi-user.target\n Aktivieren:
sudo systemctl daemon-reload\nsudo systemctl enable --now ripster-backend\nsudo systemctl status ripster-backend\n"},{"location":"deployment/production/#3-nginx-konfigurieren","title":"3) nginx konfigurieren","text":"Beispiel /etc/nginx/sites-available/ripster:
server {\n listen 80;\n server_name ripster.local;\n client_max_body_size 8G;\n\n root /opt/ripster/frontend/dist;\n index index.html;\n\n location / {\n try_files $uri $uri/ /index.html;\n }\n\n location /api/ {\n proxy_pass http://127.0.0.1:3001;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n }\n\n location /ws {\n proxy_pass http://127.0.0.1:3001;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n proxy_set_header Host $host;\n }\n}\n Aktivieren:
sudo ln -s /etc/nginx/sites-available/ripster /etc/nginx/sites-enabled/\nsudo nginx -t\nsudo systemctl reload nginx\n Hinweis: Fuer groessere Uploads wie .aax-Audiobooks muss client_max_body_size ausreichend hoch gesetzt sein. Im mitgelieferten Beispiel sind 8G hinterlegt.
sqlite3 /opt/ripster/backend/data/ripster.db \\\n \".backup '/var/backups/ripster-$(date +%Y%m%d).db'\"\n"},{"location":"deployment/production/#sicherheit","title":"Sicherheit","text":".env, Settings-Felder).Dieses Kapitel ist f\u00fcr den Betrieb von Ripster im Alltag geschrieben.
"},{"location":"getting-started/#zielgruppe","title":"Zielgruppe","text":"Diese Seite ist die Betriebs-Checkliste vor dem ersten produktiven Lauf.
"},{"location":"getting-started/configuration/#ziel-der-ersteinrichtung","title":"Ziel der Ersteinrichtung","text":"Vor dem ersten Job sollten f\u00fcnf Bereiche sauber gesetzt sein:
Settings -> Konfiguration","text":"Pr\u00fcfe zuerst diese Kernfelder:
Log OrdnerTMDb Read Access TokenMakeMKV Kommando, HandBrake Kommando, Mediainfo KommandoFFmpeg Kommando, FFprobe Kommando, cdparanoia Kommando, mkvmerge Kommando, falls du die jeweiligen Workflows nutztDanach speichern.
"},{"location":"getting-started/configuration/#2-pfade-und-templates-bewusst-festlegen","title":"2. Pfade und Templates bewusst festlegen","text":"Wichtig f\u00fcr den Alltag:
Audiobook RAW-Ordner, Audiobook Output-Ordner, Audiobook RAW Template, Output Template (Audiobook) und Kapitel Template (Audiobook)Converter Raw-Ordner, Converter Ausgabe (Video), Converter Ausgabe (Audio) sowie Output-Template (Video) und Output-Template (Audio)Download ZIP-OrdnerWenn du auf NAS, USB oder mit anderen Benutzern/Gruppen schreiben willst, pr\u00fcfe auch die jeweils zugeh\u00f6rigen Eigent\u00fcmer ...-Felder.
Relevant:
LaufwerksmodusExplizite Laufwerke, falls du nicht mit Auto-Discovery arbeiten willstAutomatische Disk-ErkennungPolling Intervall (ms) im ExpertenmodusLaufwerk nach Rip auswerfenEmpfehlung:
autoExplizite LaufwerkeRelevant:
TMDb Read Access TokenFilm-SpracheFallback SpracheCoverart-Nachladen aktivCoverart-Pr\u00fcfintervall (Stunden)NFO nach Encode erzeugenDiese Einstellungen wirken direkt in Metadatensuche, Serienzuordnung, Nachpflege von Covern und im finalen Output.
"},{"location":"getting-started/configuration/#5-encode-und-review-standards-festlegen","title":"5. Encode- und Review-Standards festlegen","text":"F\u00fcr Video-Workflows besonders wichtig:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)HandBrake Preset und HandBrake Extra Args je MediumReview Audio-Sprachen (...)Review UT-Sprachen (...)AusgabeformatPraxis:
Minimale Titell\u00e4nge filtert Bonusmaterial fr\u00fch wegTMDb Runtime-Abzug ... lockert bei problematischen Blu-rays die Laufzeitpr\u00fcfung der Playlist-KandidatenStelle diese vier Felder bewusst ein:
Parallele JobsMax. parallele Audio CD JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Audio CDs: Queue-Reihenfolge \u00fcberspringenDamit steuerst du, wie aggressiv Ripster mehrere Jobs gleichzeitig startet.
"},{"location":"getting-started/configuration/#7-optional-user-presets-und-standard-zuordnungen","title":"7. Optional: User-Presets und Standard-Zuordnungen","text":"Unter Settings -> Encode-Presets kannst du:
Blu-ray Film, Blu-ray Serie, DVD Film, DVD Serie setzenDiese Defaults wirken sp\u00e4ter in der Review automatisch vorbef\u00fcllend.
"},{"location":"getting-started/configuration/#8-optional-benachrichtigungen","title":"8. Optional: Benachrichtigungen","text":"Pr\u00fcfe:
PushOver aktiviertBei manueller Auswahl senden, Bei Rip-Start senden, Bei Erfolg sendenDanach in Settings den Button PushOver Test ausf\u00fchren.
Erst wenn die Grundkonfiguration stabil ist:
Ein sinnvoller Kurztest:
Ripper erkennen lassenAnalyse startenBereit zum Encodieren kommenHistorie pr\u00fcfenMinimale Titell\u00e4nge oder TMDb Runtime-Abzug ... ist zu streng/zu locker falsche Spuren sind in der Review vorausgew\u00e4hlt Review-Sprachfilter oder HandBrake-Args greifen unerwartet Ausgabe landet am falschen Ort Profilpfade oder Templates greifen \u00fcber Fallback Queue verh\u00e4lt sich unerwartet Parallele Jobs, CD-Limit und Gesamtlimit widersprechen sich"},{"location":"getting-started/configuration/#weiter","title":"Weiter","text":"Die empfohlene Installation startet immer \u00fcber setup.sh. setup.sh l\u00e4dt das passende install.sh aus dem gew\u00fcnschten Branch und \u00fcbergibt alle weiteren Parameter unver\u00e4ndert an den eigentlichen Installer.
Wichtig:
setup.shcurl | bash--no-* ausl\u00e4sstsudoDer Installer erkennt aktuell:
wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh\nbash setup.sh\n Ohne --branch fragt setup.sh interaktiv nach dem gew\u00fcnschten Branch.
Die typischen Branches sind:
main: stabiles Releasedev: aktueller EntwicklungsstandBeispiele:
bash setup.sh --branch main\nbash setup.sh --branch dev\nbash setup.sh --branch dev --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10\n setup.sh wertet selbst nur --branch aus. Alles andere \u00fcbernimmt install.sh.
install.sh","text":"Option Default Zweck --branch <branch> dev installiert genau diesen Git-Branch --dir <pfad> /opt/ripster Installationsverzeichnis --user <benutzer> ripster Systembenutzer f\u00fcr den Dienst --port <port> 3001 Backend-Port --host <hostname|ip> automatisch ermittelte Host-IP Hostname/IP f\u00fcr Webzugriff und CORS --no-makemkv aus MakeMKV nicht installieren --no-handbrake aus HandBrake nicht installieren --no-nginx aus nginx-Setup \u00fcberspringen --no-system-deps aus Systemabh\u00e4ngigkeiten nicht nachinstallieren --reinstall aus bestehende Installation aktualisieren"},{"location":"getting-started/installation/#was-der-installer-einrichtet","title":"Was der Installer einrichtet","text":"Typischer Ablauf:
--dir klonen oder aktualisierenbackend/.env und Laufzeitverzeichnisse vorbereitenripster-backend.service anlegen und startensudo systemctl status ripster-backend\n Typische Aufrufe im Betrieb:
sudo journalctl -u ripster-backend -f\nsudo systemctl restart ripster-backend\n"},{"location":"getting-started/installation/#update-einer-bestehenden-installation","title":"Update einer bestehenden Installation","text":"Standard:
sudo bash /opt/ripster/install.sh --reinstall\n Wenn die Installation mit abweichenden Kernparametern eingerichtet wurde, dieselben Parameter wieder mitgeben:
sudo bash /opt/ripster/install.sh --reinstall --dir /opt/ripster --user ripster --port 3001 --host 192.168.1.10\n Alternativ kannst du auch erneut \u00fcber setup.sh gehen:
sudo bash /opt/ripster/setup.sh --reinstall\n --reinstall aktualisiert die Installation, beh\u00e4lt aber die persistenten Daten der bestehenden Instanz.
Die Voraussetzungen h\u00e4ngen davon ab, ob du Ripster produktiv installieren oder lokal entwickeln willst.
"},{"location":"getting-started/prerequisites/#produktionsbetrieb-mit-setupsh","title":"Produktionsbetrieb mitsetup.sh","text":"F\u00fcr den normalen Betrieb brauchst du nur die Basisvoraussetzungen. Die eigentlichen Tools werden vom Installer eingerichtet, sofern du sie nicht bewusst mit --no-* \u00fcberspringst.
sudoDer Installer unterst\u00fctzt aktuell:
Standard-Einstieg:
wget -qO setup.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/setup.sh\nbash setup.sh\n"},{"location":"getting-started/prerequisites/#laufwerk-kurz-prufen","title":"Laufwerk kurz pr\u00fcfen","text":"ls /dev/sr*\nlsblk | grep rom\n"},{"location":"getting-started/prerequisites/#optional-vorab","title":"Optional vorab","text":"Beides kann auch erst nach der Installation in Settings gesetzt werden.
Wenn du lokal entwickelst (./start.sh, npm run dev), gelten zus\u00e4tzliche Voraussetzungen:
>= 20.19.0makemkvcon, HandBrakeCLI, mediainfo im PATHDetails: Entwicklungsumgebung
"},{"location":"getting-started/prerequisites/#abschluss-checkliste","title":"Abschluss-Checkliste","text":"Dieser Ablauf f\u00fchrt einen typischen Disc-Job von Erkennung bis fertiger Datei durch.
"},{"location":"getting-started/quickstart/#1-disc-erkennen","title":"1. Disc erkennen","text":"Ripper \u00f6ffnenMedium erkannt wartenPr\u00fcfen:
Disk-Information zeigt Device, Label und LaufwerksstatusLaufwerk neu lesenRelevante Settings:
LaufwerksmodusAutomatische Disk-ErkennungPolling Intervall (ms)Aktion:
Analyse startenErwartung:
AnalyseRelevantes Setting:
Minimale Titell\u00e4nge (Minuten) beeinflusst bereits, welche Titel/Playlists Ripster sp\u00e4ter als relevant betrachtetIm Dialog:
Disc-Nummer setzenAuswahl \u00fcbernehmenM\u00f6gliche Abzweigungen:
\u00dcbernahme erzwingen oder Multipart movieweiterverwenden oder neu rippenRelevante Settings:
TMDb Read Access TokenFilm-SpracheFallback SpracheJe nach Disc-Situation geht es jetzt unterschiedlich weiter.
"},{"location":"getting-started/quickstart/#normalfall","title":"Normalfall","text":"Startbereit -> Rippen -> Mediainfo-Pr\u00fcfung
Kein neuer Rip, sondern erst eine Entscheidung:
Bei bestimmten Blu-ray-/DVD-F\u00e4llen erscheint Warte auf Auswahl.
Dann best\u00e4tigst du:
Relevante Settings:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)Bei Bereit zum Encodieren pr\u00fcfst du:
Dann:
Encoding startenRelevante Settings:
HandBrake Preset und HandBrake Extra Args je MediumReview Audio-Sprachen (...)Review UT-Sprachen (...)AusgabeformatSettings -> Encode-PresetsW\u00e4hrend Encodieren:
Hardware-Ansicht \u00f6ffnenRelevante Settings:
Parallele JobsMax. parallele Audio CD JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Hardware Monitoring aktiviertHardware Monitoring Intervall (ms)Nach Fertig:
Historie \u00f6ffnenKontrollpunkte:
.nfo wurde erzeugt, falls aktiviertRelevante Settings:
Serien-Ordner (Blu-ray) und Serien-Ordner (DVD) plus die Episode-/Multi-Episode-TemplatesNFO nach Encode erzeugenTMDb neu zuweisenReview neu startenRAW neu encodierenEncode neu startenRetry RippenDieses Kapitel ist das Bedienhandbuch f\u00fcr die Oberfl\u00e4chen im Alltag.
"},{"location":"gui/#seitenuberblick","title":"Seiten\u00fcberblick","text":"Seite Rolle im Betrieb Typischer Einsatz Ripper Live-Steuerung der Disc-Pipeline Disc erkennen, Analyse starten, Entscheidungen treffen, Queue steuern Hardware Detailansicht f\u00fcr Live-Monitoring CPU/RAM/GPU und Verlauf pr\u00fcfen Audiobooks AAX-Spezialflow Upload, Kapitelpr\u00fcfung und Encode von Audiobooks Settings Konfiguration und Automatisierung Pfade, Tools, Queue, Presets, Skripte, Cron Historie Nachbearbeitung und Kontrolle Logs, Re-Encode, TMDb-Neuzuordnung, L\u00f6schvorschau Converter dateibasierte Konvertierung Video/Audio/ISO ohne Disc-Rip verarbeiten Downloads ZIP-Exports RAW/Output aus der Historie bereitstellen Database (Expert) Recovery-Sicht orphan RAW finden, pr\u00fcfen und importieren TMDb Migration Sonderseite f\u00fcr Altbest\u00e4nde alte Jobs gesammelt auf TMDb umstellen"},{"location":"gui/#empfohlener-tagesablauf","title":"Empfohlener Tagesablauf","text":"Ripper, Converter oder Audiobooks: neue Arbeit startenHistorie: Ergebnisse kontrollieren und ggf. nachbearbeitenDownloads: Artefakte f\u00fcr externe \u00dcbergabe vorbereitenSettings: Regeln, Presets oder Limits nur kontrolliert anpassenHardware: bei Lastspitzen oder Batch-L\u00e4ufen den Verlauf pr\u00fcfenDirekt in der Top-Navigation:
RipperConverterAudiobooksSettingsHistorieDownloadsZusatzansichten:
Hardware unter /hardwareDatabase unter /database und im Expertenmodus zus\u00e4tzlich in der NavigationTMDb Migration unter /tmdb-migration als DirektlinkDie Seite Audiobooks ist der spezialisierte Workflow f\u00fcr Audible-*.aax-Dateien.
Die Oberfl\u00e4che besteht aus zwei Hauptbereichen:
Audiobooks UploadAudiobook JobsDer Upload akzeptiert ausschlie\u00dflich .aax.
W\u00e4hrend des Uploads zeigt die UI:
Die Seite zeigt aktive Jobs. Abgeschlossene Jobs findest du in der Historie.
Ein Job kann eingeklappt oder ausgeklappt werden und zeigt:
Im ausgeklappten Job kannst du setzen:
m4b, mp3 oder flacm4b: eine Datei mit Kapitelmarkenmp3: eine Datei pro Kapitelflac: eine Datei pro KapitelWenn du mp3 oder flac w\u00e4hlst, zeigt die UI zus\u00e4tzlich eine Kapitel-Status-Tabelle.
Wenn Ripster f\u00fcr eine Datei keine Activation Bytes verwenden kann, wird im Workflow eine manuelle Eingabe n\u00f6tig.
Wichtig:
Settings zeigt bekannte Cache-Eintr\u00e4ge anAudiobook RAW-OrdnerAudiobook Output-OrdnerEigent\u00fcmer Audiobook RAW-OrdnerEigent\u00fcmer Audiobook Output-OrdnerAudiobook RAW TemplateOutput Template (Audiobook)Kapitel Template (Audiobook)FFprobe KommandoFFmpeg KommandoAudiobook RAW Template bestimmt den Namen des AAX-RAW-OrdnersOutput Template (Audiobook) bestimmt die Einzeldatei f\u00fcr m4bKapitel Template (Audiobook) bestimmt Zielstruktur und Dateinamen f\u00fcr mp3/flacFFprobe Kommando liest Kapitel und MetadatenFFmpeg Kommando erzeugt die finalen DateienAudiobook-Jobs nutzen dieselbe globale Pipeline wie die anderen Bereiche.
Relevante Settings:
Parallele JobsMax. Encodes gesamt (medienunabh\u00e4ngig)*.aaxffprobe ist nicht erreichbarffmpeg ist nicht erreichbarDie Seite Converter verarbeitet vorhandene Dateien ohne Laufwerks-Rip. Sie ist f\u00fcr Video-, Audio- und ISO-Dateien gedacht, die bereits auf dem System liegen oder hochgeladen werden.
Der Converter arbeitet auf dem in Settings festgelegten Converter Raw-Ordner.
Dort landen:
Wichtig:
Der Explorer zeigt den kompletten Baum unter Converter Raw-Ordner.
Aktionen:
Aktion WirkungUpload schreibt neue Dateien in den Converter-RAW-Baum Ordner erstellen legt Unterordner an Umbenennen benennt Datei oder Ordner um Verschieben verschiebt Eintr\u00e4ge innerhalb des Raw-Baums L\u00f6schen entfernt Datei oder Ordner dauerhaft Scannen synchronisiert Dateisystem und Converter-Datenbank"},{"location":"gui/converter/#upload-und-scan-regeln","title":"Upload- und Scan-Regeln","text":"Erlaubte Datei-Endungen enthalten seinRelevante Settings:
Erlaubte Datei-EndungenAuto-Scan (Polling)Polling-Intervall (Sekunden)Es gibt zwei Audio-Strategien:
Ein Job pro DateiGemeinsamer Job (Audio)Verhalten:
Shared-Audio-Job:
inputPathsVor dem Start je Job einstellbar:
converterMediaTypeoutputFormatSpezifika:
Converter Ausgabe (Video)Output-Template (Video)Converter Ausgabe (Audio)Output-Template (Audio)Relevante Settings:
Converter Ausgabe (Video)Converter Ausgabe (Audio)Output-Template (Video)Output-Template (Audio)Eigent\u00fcmer Converter Video Output-OrdnerEigent\u00fcmer Converter Audio Output-OrdnerConverter-Jobs laufen \u00fcber dieselbe globale Pipeline-Queue wie Ripper und Audiobooks.
Das bedeutet:
Relevante Settings:
Parallele JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Converter: beliebige Audio-, Video- und ISO-DateienAudiobooks: spezialisierter AAX-Workflow mit Activation Bytes, Kapitelmetadaten und Kapiteltemplates/database ist die Recovery- und Expertensicht f\u00fcr F\u00e4lle, in denen Dateisystem und Historie nicht mehr sauber zusammenpassen.
/databaseGefundene RAW-Eintr\u00e4ge","text":"Dieser Bereich listet RAW-Verzeichnisse ohne zugeordneten Historie-Job.
Aktionen:
RAW pr\u00fcfen: scannt konfigurierte RAW-WurzelnJob anlegen: erstellt aus einem orphan RAW einen neuen Historie-JobJob anlegen passiert","text":"Typischer Einsatz:
Auf Downloads werden ZIP-Archive f\u00fcr Historie-Artefakte erstellt und bereitgestellt.
Ein Download-Eintrag referenziert immer einen Historie-Job und genau ein Ziel:
RAWOutputErzeugt wird ein ZIP-Archiv im Download-Verzeichnis des Backends.
"},{"location":"gui/downloads/#statusmodell","title":"Statusmodell","text":"Status Bedeutungqueued Eintrag erstellt, wartet auf Verarbeitung processing ZIP wird gerade gebaut ready Archiv fertig, Download-Link aktiv failed Erzeugung oder Zugriff fehlgeschlagen"},{"location":"gui/downloads/#eintrag-anlegen","title":"Eintrag anlegen","text":"Startpunkt ist die Historie:
RAW oder Output) w\u00e4hlen.Downloads verfolgen.queued/processing-Eintr\u00e4ge gepr\u00fcft und fortgesetzt.ready, wird der Eintrag auf failed gesetzt.Bei Status ready:
/api/downloads/:id/file.L\u00f6schen entfernt:
Nicht erlaubt:
queued/processingDie Seite reagiert auf DOWNLOADS_UPDATED per WebSocket. Dadurch sind Statuswechsel ohne Reload sichtbar.
Die Seite Hardware ist die ausf\u00fchrliche Detailansicht f\u00fcr das Live-Monitoring aus dem Ripper.
1h, 6h, 24h, 4dOben zeigt die Seite:
Wenn Monitoring deaktiviert ist, f\u00fchrt die Seite direkt zu Settings.
Die Historie l\u00e4dt Messpunkte aus dem Backend und zeigt:
Das ist besonders n\u00fctzlich bei:
Hardware Monitoring aktiviertHardware Monitoring Intervall (ms)Au\u00dferdem sinnvoll:
Externe Speicher, damit Speicherst\u00e4nde im Ripper sinnvoll angezeigt werdenHistorie ist die Kontroll- und Nachbearbeitungsoberfl\u00e4che f\u00fcr alle bereits angelegten Jobs.
Filter und Arbeitsmittel:
Jeder Eintrag zeigt auf einen Blick:
Der Detaildialog b\u00fcndelt:
Bei Seriencontainern und Multipart-Jobs wird container- und child-orientiert dargestellt.
"},{"location":"gui/history/#nachbearbeitungsaktionen","title":"Nachbearbeitungsaktionen","text":"Aktion Typischer Einsatz Technische WirkungTMDb neu zuweisen falsches Match, anderer Film, andere Staffel Metadaten werden neu geschrieben; Poster, Jahr und ggf. Ordnername werden best effort aktualisiert Review neu starten neue Track-/Titelbewertung n\u00f6tig Review wird aus vorhandenem RAW neu aufgebaut RAW neu encodieren neuer Encode mit vorhandenem RAW startet Encode ohne neuen Disc-Rip Encode neu starten gleiche best\u00e4tigte Auswahl erneut fahren letzter best\u00e4tigter Plan wird geladen Retry Rippen Rip oder Analyse erneut ansto\u00dfen neuer Rip-Lauf inklusive RAW-Phase Relevante Settings:
Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schenNFO nach Encode erzeugenVor dem endg\u00fcltigen L\u00f6schen zeigt Ripster eine Vorschau mit:
Wichtige Punkte:
Im Ripper \u00f6ffnen hilft bei offenen ReviewsTail laden f\u00fcr schnellen FehlerkontextVollst\u00e4ndiges Log laden f\u00fcr tiefe AnalyseEmpfehlung:
Die Seite Ripper ist die Live-Steuerung der Disc-Pipeline. Hier laufen Disc-Erkennung, Queue, manuelle Entscheidungen, Review und aktive Jobs zusammen.
Die wichtigsten Bereiche:
HardwareJob QueueSkript- / Cron-StatusJob \u00dcbersichtDisk-InformationDie Hardware-Karte zeigt live:
Aktionen:
Relevante Settings:
Hardware Monitoring aktiviertHardware Monitoring Intervall (ms)Externe SpeicherEs gibt zwei operative Zonen:
M\u00f6gliche Queue-Eintr\u00e4ge:
Retry RippenRAW neu encodierenEncode neu startenReview neu startenAudio CD startenSkriptSkriptketteWartenWichtige Regeln:
Warten blockiert nachfolgende Starts, bis keine aktive Verarbeitung mehr l\u00e4uftRelevante Settings:
Parallele JobsMax. parallele Audio CD JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Audio CDs: Queue-Reihenfolge \u00fcberspringenZeigt Runtime-Aktivit\u00e4ten:
Aktionen:
N\u00e4chster Schritt bei KettenAbbrechenListe leerenDie Jobliste ist der zentrale Arbeitsbereich. Ein Klick \u00f6ffnet den jeweiligen Pipeline-Status.
Medium erkannt Analyse starten MakeMKV-Analyse beginnt Metadatenauswahl Metadaten \u00f6ffnen TMDb-Dialog f\u00fcr Film/Serie Warte auf Auswahl Entscheidung best\u00e4tigen Flow geht an die passende Stelle weiter Startbereit Job starten Rip oder RAW-basierte Pr\u00fcfung startet Bereit zum Encodieren Encoding starten HandBrake startet mit best\u00e4tigter Auswahl laufend Abbrechen Job wird gestoppt Fehler / Abgebrochen Retry Rippen neuer Rip-Anlauf"},{"location":"gui/ripper/#was-warte-auf-auswahl-heute-bedeuten-kann","title":"Was Warte auf Auswahl heute bedeuten kann","text":"Der Status ist nicht nur f\u00fcr eine einzige Entscheidung da. Im aktuellen Stand gibt es drei typische F\u00e4lle:
"},{"location":"gui/ripper/#vorhandenes-raw","title":"Vorhandenes RAW","text":"Ripster hat zu den Metadaten bereits ein passendes RAW gefunden. Dann entscheidest du:
Bei mehrdeutigen Blu-rays oder bestimmten DVD-F\u00e4llen musst du eine Playlist best\u00e4tigen. Die Liste zeigt unter anderem:
Relevante Settings:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)Bei manueller Auswahl senden f\u00fcr PushOverWenn Ripster mehrere HandBrake-Titel als plausibel erkannt hat, musst du einen oder mehrere Titel best\u00e4tigen. Bei Serien kann das der Grenzfall PlayAll oder Doppelfolge? sein.
Bereit zum Encodieren)","text":"Hier triffst du die eigentliche Encode-Entscheidung.
Du legst fest:
Wichtig:
HandBrake PresetHandBrake Extra ArgsReview Audio-Sprachen (...)Review UT-Sprachen (...)AusgabeformatSettings -> Encode-PresetsDer Ripper arbeitet mit drei RAW-Zust\u00e4nden:
Incomplete_... w\u00e4hrend eines unvollst\u00e4ndigen RipsRip_Complete_... nach erfolgreichem Rip, vor dem finalen EncodeDas ist wichtig f\u00fcr:
HistorieZeigt aktuelle Laufwerksdaten:
Aktionen:
Laufwerk neu lesenDisk neu analysierenHinweis:
Laufwerk neu lesen ist nicht mehr an einen festen Pipeline-State gebundenIm Dialog best\u00e4tigst du Film- oder Serienmetadaten aus TMDb.
Sonderf\u00e4lle:
\u00dcbernahme erzwingen oder Multipart movieDisc-Nummer ist PflichtWenn zu den Metadaten bereits RAW existiert, fordert Ripster eine explizite Entscheidung:
Du kannst gezielt ab Position einf\u00fcgen:
Wenn f\u00fcr eine AAX-Datei keine Activation Bytes verf\u00fcgbar sind, \u00f6ffnet Ripster einen Dialog zur manuellen Eingabe.
1a2b3c4dDie Seite Settings ist das Kontrollzentrum f\u00fcr Laufzeitverhalten, Standardwerte und Automatisierung. Alles, was sp\u00e4tere Jobs automatisch tun oder vorschlagen, wird hier vorbereitet.
Konfiguration alle fachlichen Einstellungen aus der GUI Scripte einzelne Bash-Skripte anlegen, testen und sortieren Skriptketten mehrstufige Abl\u00e4ufe aus Skript- und Warte-Schritten bauen Encode-Presets eigene Video-Presets und Standard-Zuordnungen pflegen Cronjobs zeitgesteuerte Ausf\u00fchrung von Skripten oder Ketten"},{"location":"gui/settings/#tab-konfiguration","title":"Tab Konfiguration","text":""},{"location":"gui/settings/#bedienlogik","title":"Bedienlogik","text":"\u00c4nderungen speichern klickenAusnahmen:
Expertenmodus wird sofort gespeichertPushOver Test, Coverarts pr\u00fcfen oder der MakeMKV-Betakey-Import l\u00f6sen direkte Aktionen aus\u00c4nderungen speichern: schreibt nur ge\u00e4nderte Felder\u00c4nderungen verwerfen: setzt den Formularzustand zur\u00fcckNeu laden: l\u00e4dt Schema und Werte neuPushOver Test: sendet eine Testnachricht mit den aktuellen PushOver-WertenCoverarts pr\u00fcfen: startet den Coverart-Recovery-Lauf sofortHier steuerst du zwei Dinge:
Wichtig:
PushOver aktiviert ist der Master-SchalterBei manueller Auswahl senden ist besonders relevant f\u00fcr Playlist-, RAW- oder TitelentscheidungenExpertenmodus blendet zus\u00e4tzliche technische Felder in der gesamten Settings-Seite einDiese Kategorie beeinflusst, wie Ripster optische Laufwerke findet und \u00fcberwacht.
Typische Fragen:
Das ist vor allem wichtig bei:
Diese Felder \u00e4ndern nicht die Job-Logs auf Platte, sondern die Ausgabe im Server-Terminal.
Damit steuerst du zum Beispiel:
start.sh oder ein Terminal-Run sehr gespr\u00e4chig sein darfHier legst du fest, wie Ripster mit TMDb, Covern und NFO-Dateien umgeht.
Besonders wichtig:
TMDb Read Access Token funktionieren Film-/Seriensuche und Neu-Zuordnung nur eingeschr\u00e4nkt oder gar nichtFilm-Sprache und Fallback Sprache bestimmen, welche Titel, Beschreibungen und Staffelinformationen bevorzugt werdenCoverart-Nachladen aktiv hilft bei nachtr\u00e4glich fehlenden Postern/CovernSteuert das Hardware-Monitoring f\u00fcr:
Diese Werte erscheinen:
RipperHardwareHier legst du fest, wohin Ripster schreibt und wie Dateien benannt werden.
Die Felder steuern:
user:gruppePraxisbeispiele:
Diese Kategorie wirkt nur auf die Seite Converter.
Sie steuert:
Diese Kategorie entscheidet \u00fcber das technische Verhalten der eigentlichen Pipeline.
Dazu geh\u00f6ren:
F\u00fcr die Nutzer-Workflows besonders relevant:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)HandBrake Preset und HandBrake Extra ArgsReview Audio-Sprachen (...)Review UT-Sprachen (...)Parallele JobsMax. parallele Audio CD JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Pfade: Besondere Interaktion","text":"Die Pfad-Kategorie hat eine eigene Darstellung:
Effektive Pfade: zeigt die aktuell wirklich verwendeten Laufzeitpfade inklusive FallbacksBlu-ray, DVD, CD / Audio, Audiobook, Converter, Downloads, Logs*_owner) erscheinen direkt beim zugeh\u00f6rigen PfadExplizite Laufwerke: Editor f\u00fcr mehrere Laufwerke mit Pfad und MakeMKV-IndexExterne Speicher: Liste aus Anzeigename und Pfad f\u00fcr die SpeicheranzeigeErlaubte Datei-Endungen: Auswahl der erlaubten Upload-/Scan-EndungenMakeMKV Key: inkl. Betakey-Hinweis und \u00dcbernahme-ButtonDie Seite Settings bestimmt direkt, was Nutzer sp\u00e4ter im Workflow sehen:
Minimale Titell\u00e4nge und TMDb Runtime-Abzug ... beeinflusstBereit zum Encodieren h\u00e4ngen an den Review-SprachfeldernEncode-PresetsRipper h\u00e4ngt an den drei Parallelit\u00e4tsfeldern plus Audio CDs: Queue-Reihenfolge \u00fcberspringenF\u00fcr die detaillierte Feld-f\u00fcr-Feld-Erkl\u00e4rung jeder einzelnen Einstellung nutze die Seite Einstellungsreferenz. Dort ist jedes sichtbare Feld aus der GUI mit Wirkung, Workflow-Bezug und typischem Einsatz beschrieben.
"},{"location":"gui/settings/#tab-scripte","title":"TabScripte","text":"Funktionen:
Das Testergebnis zeigt:
Script-Test Timeout (ms) greiftSkriptketten","text":"Skriptketten bestehen aus Schritten:
SkriptWarten (Sekunden)Funktionen:
Wichtig:
Encode-Presets","text":"Hier werden Video-Standards f\u00fcr Disc- und Converter-Workflows verwaltet.
"},{"location":"gui/settings/#standard-zuordnungen","title":"Standard-Zuordnungen","text":"Es gibt vier feste Slots:
Blu-ray FilmBlu-ray SerieDVD FilmDVD SerieWenn f\u00fcr einen Workflow hier ein Default gesetzt ist, erscheint dieses User-Preset sp\u00e4ter in der Review bereits vorausgew\u00e4hlt.
"},{"location":"gui/settings/#preset-inhalt","title":"Preset-Inhalt","text":"Ein User-Preset besteht aus:
all, bluray, dvd)Cronjobs","text":"Funktionen:
Skript oder SkriptketteJetzt ausf\u00fchrenDie Runtime-Aktivit\u00e4ten der laufenden Cronjobs werden zus\u00e4tzlich live angezeigt.
"},{"location":"gui/settings/#expertenbereich-activation-bytes-cache","title":"Expertenbereich: Activation Bytes Cache","text":"Dieser Block wird nur im Expertenmodus angezeigt.
Er zeigt lokal bekannte AAX-Activation-Bytes mit:
Das hilft bei Audiobook-Workflows, wenn dieselbe Datei oder derselbe Hash sp\u00e4ter erneut auftaucht.
"},{"location":"gui/settings/#validierung-von-template-feldern","title":"Validierung von Template-Feldern","text":"Template-Felder akzeptieren nur:
_ und -{...} oder ${...}/ f\u00fcr UnterordnerDamit verhindert Ripster fehlerhafte Dateinamen schon beim Speichern.
"},{"location":"gui/settings/#siehe-auch","title":"Siehe auch","text":"Die Seite TMDb Migration ist eine Sonderansicht f\u00fcr \u00e4ltere Bestandsjobs, die noch nicht als auf TMDb migriert markiert sind.
/tmdb-migrationTypische Einsatzf\u00e4lle:
Die Seite l\u00e4dt offene Migrationskandidaten und zeigt:
Aktionen:
Liste neu ladenStartStopStartWichtig:
TMDb Read Access TokenFilm-SpracheFallback SpracheOhne diese Einstellungen ist die Migration nicht sinnvoll nutzbar.
"},{"location":"pipeline/","title":"Anhang: Pipeline intern","text":"Dieser Abschnitt beschreibt die technische Pipeline-Logik hinter den UI-Workflows.
Workflow & Zust\u00e4nde
Zustandsmodell, \u00dcberg\u00e4nge, Queue-Verhalten.
Workflow
Encode-Planung
Aufbereitung von Titeln/Tracks und Best\u00e4tigungslogik.
Encoding
Playlist-Analyse
Bewertung mehrdeutiger Blu-ray-Playlists.
Playlist-Analyse
Pre-/Post-Encode-Ausf\u00fchrungen
Skript- und Kettenlauf vor/nach dem Encoding.
Encode-Skripte
Vor dem eigentlichen Encoding erstellt Ripster einen Encode-Plan und zeigt ihn im Review an.
"},{"location":"pipeline/encoding/#ablauf","title":"Ablauf","text":"Quelle bestimmen (Disc/RAW)\n -> HandBrake-Scan (--scan --json)\n -> Plan erstellen (Titel, Audio, Untertitel)\n -> Status: Bereit zum Encodieren\n -> Benutzer bestaetigt Auswahl\n -> finaler HandBrake-Aufruf\n"},{"location":"pipeline/encoding/#review-inhalt-status-bereit-zum-encodieren","title":"Review-Inhalt (Status: Bereit zum Encodieren)","text":"burnInforceddefaultTrackconfirm-encode)","text":"Typischer Payload:
{\n \"selectedEncodeTitleId\": 1,\n \"selectedTrackSelection\": {\n \"1\": {\n \"audioTrackIds\": [1, 2],\n \"subtitleTrackIds\": [3]\n }\n },\n \"selectedPreEncodeScriptIds\": [1],\n \"selectedPostEncodeScriptIds\": [2],\n \"selectedPreEncodeChainIds\": [3],\n \"selectedPostEncodeChainIds\": [4],\n \"selectedUserPresetId\": 5\n}\n Die best\u00e4tigte Auswahl wird im Job gespeichert und f\u00fcr Neustarts wiederverwendet.
"},{"location":"pipeline/encoding/#handbrake-aufruf","title":"HandBrake-Aufruf","text":"Grundstruktur:
HandBrakeCLI \\\n -i <input> \\\n -o <output> \\\n -t <titleId> \\\n -Z \"<preset>\" \\\n <extra-args> \\\n -a <audioTrackIds|none> \\\n -s <subtitleTrackIds|none>\n Untertitel-Flags werden bei Bedarf erg\u00e4nzt:
--subtitle-burned=<id>--subtitle-default=<id>--subtitle-forced=<id> oder --subtitle-forcedFehlerverhalten:
Fehler (Encode startet nicht)Fertig bleiben, enth\u00e4lt aber Fehlerhinweis/Script-SummaryDer finale Outputpfad wird aus den Templates in den Settings aufgebaut.
Platzhalter:
${title}${year}${imdbId}Ung\u00fcltige Dateizeichen werden bereinigt.
"},{"location":"pipeline/playlist-analysis/","title":"Playlist-Analyse","text":"Ripster analysiert bei Blu-ray-\u00e4hnlichen Quellen Playlists und fordert bei Mehrdeutigkeit eine manuelle Auswahl an.
"},{"location":"pipeline/playlist-analysis/#ziel","title":"Ziel","text":"Erkennen, welche Playlist sehr wahrscheinlich der Hauptfilm ist, statt versehentlich eine Fake-/Dummy-Playlist zu verwenden.
"},{"location":"pipeline/playlist-analysis/#eingabedaten","title":"Eingabedaten","text":"Die Analyse basiert auf MakeMKV-Infos (u. a. Playlist-/Segment-Struktur, Laufzeiten, Titelzuordnung).
"},{"location":"pipeline/playlist-analysis/#auswertung-vereinfacht","title":"Auswertung (vereinfacht)","text":"F\u00fcr Kandidaten werden u. a. ber\u00fccksichtigt:
Daraus entstehen intern Kandidatenlisten, Bewertungen und eine Empfehlung.
"},{"location":"pipeline/playlist-analysis/#wann-muss-der-benutzer-entscheiden","title":"Wann muss der Benutzer entscheiden?","text":"Wenn nach Filterung mehr als ein relevanter Kandidat \u00fcbrig bleibt, wechselt der Job in der GUI auf:
Warte auf AuswahlDann muss eine Playlist best\u00e4tigt werden, bevor der Workflow weiterl\u00e4uft.
"},{"location":"pipeline/playlist-analysis/#konfigurationseinfluss","title":"Konfigurationseinfluss","text":"Feld inSettings Wirkung Minimale Titell\u00e4nge (Minuten) Mindestlaufzeit f\u00fcr Kandidaten aus MakeMKV/Playlist-Analyse TMDb Runtime-Abzug f\u00fcr Playlistfilter (%) lockert bei Bedarf die untere Laufzeitgrenze relativ zur TMDb-Laufzeit, damit leicht k\u00fcrzere Hauptfassungen Kandidaten bleiben Default ist aktuell 60 Minuten.
Bei manueller Entscheidung zeigt der Ripper Kandidaten mit:
Nach Best\u00e4tigung:
Mediainfo-PruefungStartbereit / RippenRipster kann Skripte und Skript-Ketten vor und nach dem Encode ausf\u00fchren.
"},{"location":"pipeline/post-encode-scripts/#ablauf","title":"Ablauf","text":"Bereit zum Encodieren\n -> Pre-Encode Skripte/Ketten\n -> HandBrake Encoding\n -> Post-Encode Skripte/Ketten\n -> Fertig oder Fehler\n"},{"location":"pipeline/post-encode-scripts/#auswahl-im-review","title":"Auswahl im Review","text":"Im Review-Panel kannst du getrennt w\u00e4hlen:
selectedPreEncodeScriptIdsselectedPostEncodeScriptIdsselectedPreEncodeChainIdsselectedPostEncodeChainIdsFehler.Fertig sein (mit Fehlerzusatz im Status/Log).Beim Script-Run werden gesetzt:
RIPSTER_SCRIPT_RUN_ATRIPSTER_JOB_IDRIPSTER_JOB_TITLERIPSTER_MODERIPSTER_INPUT_PATHRIPSTER_OUTPUT_PATHRIPSTER_RAW_PATHRIPSTER_SCRIPT_IDRIPSTER_SCRIPT_NAMERIPSTER_SCRIPT_SOURCEKetten unterst\u00fctzen zwei Step-Typen:
script (f\u00fchrt ein hinterlegtes Skript aus)wait (wartet waitSeconds)Bei Fehler in einem Script-Step wird die Kette abgebrochen.
"},{"location":"pipeline/post-encode-scripts/#testlaufe","title":"Testl\u00e4ufe","text":"POST /api/settings/scripts/:id/testPOST /api/settings/script-chains/:id/testErgebnisse enthalten Erfolg/Exit-Code, Laufzeit und stdout/stderr.
"},{"location":"pipeline/workflow/","title":"Workflow & Zust\u00e4nde","text":"Ripster steuert den Ablauf als Zustandsmaschine.
"},{"location":"pipeline/workflow/#zustandsdiagramm-vereinfacht","title":"Zustandsdiagramm (vereinfacht)","text":"flowchart LR\n A[Bereit] --> B[Medium erkannt]\n B --> C[Analyse]\n C --> D[Metadatenauswahl]\n D --> E[Startbereit]\n E --> F[Rippen]\n E --> G[Mediainfo-Pruefung]\n G --> H[Warte auf Auswahl]\n H --> G\n G --> I[Bereit zum Encodieren]\n I --> J[Encodieren]\n J --> K[Fertig]\n J --> L[Fehler]\n F --> L\n F --> M[Abgebrochen]"},{"location":"pipeline/workflow/#statusliste-gui-anzeige","title":"Statusliste (GUI-Anzeige)","text":"Status in der GUI Bedeutung Bereit Wartet auf Disc Medium erkannt Disc wurde erkannt Analyse MakeMKV-Analyse l\u00e4uft Metadatenauswahl Metadaten m\u00fcssen best\u00e4tigt werden Warte auf Auswahl Playlist-Auswahl ist erforderlich Warte auf Auswahl auch f\u00fcr RAW-Entscheidung bei vorhandenen Quelldaten genutzt Startbereit kurzer \u00dcbergang vor Start Rippen MakeMKV-Rip l\u00e4uft Mediainfo-Pruefung Titel/Spuren werden ausgewertet Bereit zum Encodieren Review ist bereit Encodieren HandBrake l\u00e4uft CD-Metadatenauswahl CD-Metadaten m\u00fcssen best\u00e4tigt werden CD-Startbereit CD-Job wartet auf Start CD-Analyse CD-Track-/Strukturaufbereitung CD-Rippen Audio-CD-Rip l\u00e4uft CD-Encodieren CD-Encode l\u00e4uft Fertig erfolgreich abgeschlossen Abgebrochen manuell oder technisch abgebrochen Fehler fehlgeschlagen"},{"location":"pipeline/workflow/#typische-pfade","title":"Typische Pfade","text":""},{"location":"pipeline/workflow/#standardfall-kein-vorhandenes-raw","title":"Standardfall (kein vorhandenes RAW)","text":"Startbereit springt direkt zu Mediainfo-Pruefung (kein neuer Rip).
Mediainfo-Pruefung -> Warte auf Auswahl bis Playlist best\u00e4tigt wurde.
Metadatenauswahl -> Warte auf Auswahl bis Entscheidung f\u00fcr Weiterverarbeitung (continue) oder Neustart getroffen wurde.
CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig
Wenn der Wert Parallele Jobs erreicht ist:
Skript, Kette, Warten)Abbrechen: laufenden Job stoppen oder Queue-Eintrag entfernenRetry Rippen: Fehler-/Abbruch-Job erneut startenRAW neu encodieren: aus vorhandenem RAW neu encodierenReview neu starten: Review aus RAW neu aufbauenEncode neu starten: Encoding mit letzter best\u00e4tigter Auswahl neu startenRipster orchestriert externe CLI-Tools. Dieser Abschnitt erkl\u00e4rt deren Rolle im Gesamtsystem.
MakeMKV
Disc-Analyse und Ripping.
MakeMKV
HandBrake
Video-Encoding inklusive Preset-Logik.
HandBrake
MediaInfo
Track-/Containeranalyse f\u00fcr Review und Auswahl.
MediaInfo
Ripster verwendet HandBrakeCLI f\u00fcr Scan und Encode.
HandBrakeCLI --scan --json -i <input> -t 0\n"},{"location":"tools/handbrake/#encode-vereinfacht","title":"Encode (vereinfacht)","text":"HandBrakeCLI \\\n -i <input> \\\n -o <output> \\\n -t <titleId> \\\n -Z \"<preset>\" \\\n <extra-args> \\\n -a <audioTrackIds|none> \\\n -s <subtitleTrackIds|none>\n Optional erg\u00e4nzt Ripster:
--subtitle-burned=<id>--subtitle-default=<id>--subtitle-forced=<id> oder --subtitle-forcedRipster liest Presets mit:
HandBrakeCLI -z\n"},{"location":"tools/handbrake/#relevante-felder-in-settings","title":"Relevante Felder in Settings","text":"Feldname in der GUI Bedeutung HandBrake Kommando CLI-Binary HandBrake Preset (Blu-ray/DVD) profilspezifisches Preset HandBrake Extra Args (Blu-ray/DVD) profilspezifische Zusatzargumente Ausgabeformat (Blu-ray/DVD) Dateiendung der finalen Datei Encode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen unvollst\u00e4ndige Ausgabe bei Neustart l\u00f6schen"},{"location":"tools/handbrake/#fortschritts-parsing","title":"Fortschritts-Parsing","text":"Ripster parst HandBrake-Stderr (Prozent/ETA/Detail) und sendet WebSocket-Progress (PIPELINE_PROGRESS).
HandBrakeCLI -z pr\u00fcfen--encoder-preset)Das Produktions-Installer-Script install.sh bietet eine Option zur Installation eines geb\u00fcndelten HandBrakeCLI-Binaries mit NVDEC-Unterst\u00fctzung (NVIDIA GPU-Dekodierung). Diese Option erscheint interaktiv w\u00e4hrend der Installation.
Ripster nutzt makemkvcon f\u00fcr Disc-Analyse und Rip.
makemkvcon -r info <source>\n <source> ist typischerweise:
disc:<index> (Auto-Modus)dev:/dev/sr0 (explicit)file:<path> (Datei/Ordner-Analyse)makemkvcon mkv <source> <title-or-all> <rawDir> [--minlength=...] [...extraArgs]\n"},{"location":"tools/makemkv/#rip-backup-modus","title":"Rip (Backup-Modus)","text":"makemkvcon backup <source> <rawDir> --decrypt\n"},{"location":"tools/makemkv/#registrierungsschlussel-optional","title":"Registrierungsschl\u00fcssel (optional)","text":"Wenn in Settings ein MakeMKV Key gesetzt ist, synchronisiert Ripster ihn nach:
~/.MakeMKV/settings.conf\n Format:
app_Key = \"product-key\"\n Zus\u00e4tzlich zeigt die UI unterhalb des Feldes den aktuellen Betakey an, der per Button in das Eingabefeld \u00fcbernommen werden kann.
"},{"location":"tools/makemkv/#relevante-felder-in-settings","title":"Relevante Felder inSettings","text":"Feldname in der GUI Bedeutung MakeMKV Kommando CLI-Binary MakeMKV Source Index Source-Index im Auto-Modus Minimale Titellaenge (Minuten) Mindestlaufzeitfilter MakeMKV Rip Modus (Blu-ray/DVD) mkv oder backup MakeMKV Analyze Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Analyse MakeMKV Rip Extra Args (Blu-ray/DVD) Zusatzargumente f\u00fcr Rip"},{"location":"tools/makemkv/#hinweise","title":"Hinweise","text":"makemkvInfo im Job gespeichert.Ripster nutzt mediainfo zur JSON-Analyse von Medien-Dateien.
mediainfo --Output=JSON <input>\n Der Input ist typischerweise eine RAW-Datei oder ein vom Workflow gew\u00e4hlter Inputpfad.
"},{"location":"tools/mediainfo/#verwendung-in-ripster","title":"Verwendung in Ripster","text":"mediainfoInfo im Jobmediainfo_command CLI-Binary mediainfo_extra_args_bluray / _dvd profilspezifische Zusatzargumente"},{"location":"tools/mediainfo/#troubleshooting","title":"Troubleshooting","text":"mediainfo --Output=JSON <datei>und (undetermined)Diese Seite beschreibt die produktiven Abl\u00e4ufe aus Sicht der Benutzer: welche Entscheidung wann anf\u00e4llt, welche Jobs oder Container entstehen und welche Settings den Ablauf sichtbar beeinflussen.
"},{"location":"workflows/#gemeinsame-grundlagen","title":"Gemeinsame Grundlagen","text":""},{"location":"workflows/#typische-statuskette","title":"Typische Statuskette","text":"Medium erkannt -> Analyse -> Metadatenauswahl -> Startbereit -> Rippen -> Mediainfo-Pr\u00fcfung -> Bereit zum Encodieren -> Encodieren -> Fertig
Wichtige Abweichungen:
Warte auf Auswahl f\u00fcr Playlist- oder TitelauswahlFehler oder Abgebrochen mit FolgeaktionenDie wichtigsten globalen Einflussfaktoren:
Parallele JobsMax. parallele Audio CD JobsMax. Encodes gesamt (medienunabh\u00e4ngig)Audio CDs: Queue-Reihenfolge \u00fcberspringenPushOver-EreignisseF\u00fcr Disc-Video zus\u00e4tzlich:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)HandBrake PresetHandBrake Extra ArgsReview Audio-Sprachen (...)Review UT-Sprachen (...)Settings -> Encode-PresetsRipper Analyse startenAuswahl \u00fcbernehmenWirkung:
Relevante Settings:
TMDb Read Access TokenFilm-SpracheFallback SpracheWenn ein Film mit gleichem Fingerprint bereits existiert:
\u00dcbernahme erzwingen: neuer unabh\u00e4ngiger Film-JobMultipart movie: neuer Job wird mit bestehendem Film zu einem Multipart-Container verkn\u00fcpftBei Multipart gilt:
Wenn noch kein passendes RAW vorhanden ist:
Wenn bereits ein passendes RAW gefunden wird:
Warte auf AuswahlRelevante Settings:
Raw Ausgabeordner (Blu-ray) und Raw Ausgabeordner (DVD)Eigent\u00fcmer Raw-Ordner (Blu-ray) und Eigent\u00fcmer Raw-Ordner (DVD)Bei bestimmten Discs ist nach der Metadatenphase eine manuelle Auswahl n\u00f6tig:
Das ist der aktuelle playlistflow.
Relevante Settings:
Minimale Titell\u00e4nge (Minuten)TMDb Runtime-Abzug f\u00fcr Playlistfilter (%)Bei manueller Auswahl sendenPraxis:
Im Zustand Bereit zum Encodieren entscheidest du:
Relevante Settings:
HandBrake PresetHandBrake Extra ArgsReview Audio-Sprachen (Blu-ray Film) oder Review Audio-Sprachen (DVD Film)Review UT-Sprachen (Blu-ray Film) oder Review UT-Sprachen (DVD Film)AusgabeformatSettings -> Encode-PresetsFinale Ausgabe:
Film Ausgabeordner (Blu-ray) oder Film Ausgabeordner (DVD)Output Template (Blu-ray) oder Output Template (DVD)Optional:
.nfo direkt nach EncodeRelevante Settings:
Film Ausgabeordner (Blu-ray) und Film Ausgabeordner (DVD)Eigent\u00fcmer Film-Ordner (Blu-ray) und Eigent\u00fcmer Film-Ordner (DVD)Output Template (Blu-ray) und Output Template (DVD)NFO nach Encode erzeugenDisc-Nummer setzenWirkung:
F\u00fcr Serien bevorzugt Ripster eigene Serien-RAW-Verzeichnisse:
RAW-Ordner (Blu-ray Serie)RAW-Ordner (DVD Serie)Falls leer:
Raw Ausgabeordner (Blu-ray) bzw. Raw Ausgabeordner (DVD)In der Review werden Episoden oder Mehrfachfolgen aufgel\u00f6st.
Ausgabevarianten:
Relevante Settings:
Output Template (Blu-ray Serie, Episode)Output Template (Blu-ray Serie, Multi-Episode)Output Template (DVD Serie, Episode)Output Template (DVD Serie, Multi-Episode)Serien-Ordner (Blu-ray)Serien-Ordner (DVD)Auch Serien k\u00f6nnen vor der Review in eine Playlist- oder Titelauswahl laufen.
Zus\u00e4tzlich wirken:
Review Audio-Sprachen (Blu-ray Serie) / Review Audio-Sprachen (DVD Serie)Review UT-Sprachen (Blu-ray Serie) / Review UT-Sprachen (DVD Serie)Settings -> Encode-PresetsMultipart movieWirkung:
multipart_movie_container wird angelegt oder wiederverwendetRelevante Settings:
mkvmerge_commandVor dem Start legst du fest:
Die CD l\u00e4uft anschlie\u00dfend als Track-f\u00fcr-Track-Flow:
CD-Metadatenauswahl -> CD-Startbereit -> CD-Rippen -> CD-Encodieren -> Fertig
Relevante Settings:
CD RAW-OrdnerCD Output-OrdnerEigent\u00fcmer CD RAW-OrdnerEigent\u00fcmer CD Output-OrdnerCD Output Templatecdparanoia KommandoMax. parallele Audio CD JobsAudio CDs: Queue-Reihenfolge \u00fcberspringenDateien gelangen in den Converter \u00fcber:
Converter Raw-OrdnerJe nach Medium:
Relevante Settings:
Erlaubte Datei-EndungenAuto-Scan (Polling)Polling-Intervall (Sekunden)Converter Raw-OrdnerConverter Ausgabe (Video)Converter Ausgabe (Audio)Output-Template (Video)Output-Template (Audio)m4b: eine Dateimp3: eine Datei pro Kapitelflac: eine Datei pro KapitelVor dem Start anpassbar:
Relevante Settings:
Audiobook RAW-OrdnerAudiobook Output-OrdnerAudiobook RAW TemplateOutput Template (Audiobook)Kapitel Template (Audiobook)FFprobe KommandoFFmpeg KommandoTypische Folgeaktionen:
TMDb neu zuweisenReview neu startenRAW neu encodierenEncode neu startenRetry RippenDownload als ZIP einreihenBesonders wichtig:
Encode neu starten verwendet den letzten best\u00e4tigten PlanEncode-Neustart: unvollst\u00e4ndige Ausgabe l\u00f6schen entscheidet, ob unvollst\u00e4ndige Ausgaben vorher gel\u00f6scht werdenAus Historie k\u00f6nnen ZIPs f\u00fcr:
RAWOutputerstellt werden.
Relevante Settings:
Download ZIP-OrdnerEigent\u00fcmer Download ZIP-OrdnerDie Recovery-Seite hilft bei orphan RAW:
RAW pr\u00fcfenJob anlegenSo lassen sich vorhandene RAW-Verzeichnisse wieder in einen normalen Workflow zur\u00fcckf\u00fchren.
"},{"location":"workflows/#tmdb-migration","title":"TMDb Migration","text":"F\u00fcr \u00e4ltere Bestandsjobs gibt es die Sonderseite /tmdb-migration, um mehrere Jobs nacheinander auf den heutigen TMDb-Stand zu bringen.