8.6 KiB
Ripster
Ripster ist eine lokale Web-Anwendung für halbautomatisches Disc-Ripping, Audiobook-Verarbeitung und Datei-Konvertierung. Plugin-basierte Architektur mit MakeMKV + HandBrake + FFmpeg, inklusive Metadaten-Auswahl, Track-Review, Queue, Skripten/Ketten und Job-Historie.
Was Ripster kann
Disc-Ripping & Encoding
- Disc-Erkennung mit Pipeline-Status in Echtzeit (WebSocket)
- Medienprofil-Erkennung (Blu-ray/DVD/CD/Sonstiges) aus Device-/Filesystem-Heuristik
- Metadaten-Suche und Zuordnung über OMDb
- MakeMKV-Analyse und Rip (
mkvoderbackup) mit profilspezifischen Settings - HandBrake-Review und Encoding mit Track-Auswahl, User-Presets, Extra-Args
- Audio-CD-Ripping mit cdparanoia + Encoding nach FLAC/MP3/Opus/Vorbis (experimentell)
Audiobook-Verarbeitung
- AAX/Audible-Dateien verarbeiten (Activation Bytes, DRM-Handling)
- FFmpeg-basiertes Kapitel-Splitting
- Ausgabeformate: M4B, MP3, FLAC mit Metadaten
- MusicBrainz-Metadaten-Lookup
Datei-Converter
- Generische Audio/Video-Dateien konvertieren (MKV, MP4, FLAC, MP3, u. v. m.)
- Datei-Explorer mit Upload, Umbenennen, Verschieben, Löschen
- Automatischer Verzeichnis-Scan (Polling konfigurierbar)
Automatisierung & Verwaltung
- Pre- und Post-Encode-Ausführungen (Skripte und/oder Skript-Ketten)
- Pipeline-Queue mit Job- und Nicht-Job-Einträgen (
script,chain,wait) - Cron-Jobs für Skripte/Ketten (inkl. Logs und manueller Auslösung)
- Aktivitäts-Tracking: Laufende und abgeschlossene Aktionen in Echtzeit im Dashboard
- Download-Queue: Ausgabedateien als ZIP herunterladen
- Historie mit Re-Encode, Review-Neustart, File-/Job-Löschung und Orphan-Import
- Hardware-Monitoring (CPU/RAM/GPU/Storage) im Dashboard
Tech-Stack
- Backend: Node.js, Express, SQLite, WebSocket (
ws) – Plugin-Architektur - Frontend: React, Vite, PrimeReact
- Externe Tools:
makemkvcon,HandBrakeCLI,mediainfo,ffmpeg/ffprobe,cdparanoia
Dokumentation
- Ausführliche Dokumentation: https://mboehmlaender.github.io/ripster/
Voraussetzungen
- Debian 11/12 oder Ubuntu 22.04/24.04
- root-Rechte + Internetzugang
- optisches Laufwerk (oder gemountete Quelle) für Disc-Ripping
- Netzwerk-Zugang für Audiobook-Upload und Datei-Converter optional
Schnellstart (install.sh)
Auf Debian 11/12 oder Ubuntu 22.04/24.04 (root erforderlich):
wget -qO install.sh https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh
sudo bash install.sh
Alternativ direkt per Pipe:
curl -fsSL https://raw.githubusercontent.com/Mboehmlaender/ripster/main/install.sh | sudo bash
install.sh übernimmt u. a.:
- Node.js 20 (falls nötig)
- Basistools inkl.
mediainfo,ffmpeg,ffprobe - CD-Ripping-Tools (
cdparanoia,flac,lame,opus-tools,vorbis-tools) - MakeMKV
- HandBrake CLI (Auswahl Standard/CPU oder GPU/NVDEC-Binary für HW-Encoding)
- nginx
- Repository-Checkout, npm-Install, Frontend-Build, systemd-Service (
ripster-backend)
Danach ist Ripster unter http://<Server-IP> erreichbar.
Wichtige Optionen:
sudo bash install.sh --branch dev # Branch wählen (Default im Skript: dev)
sudo bash install.sh --dir /opt/ripster # Installationspfad
sudo bash install.sh --user ripster # Service-User
sudo bash install.sh --port 3001 # Backend-Port
sudo bash install.sh --host 192.168.1.10 # Host/IP für nginx/CORS
sudo bash install.sh --no-makemkv # MakeMKV überspringen
sudo bash install.sh --no-handbrake # HandBrake überspringen
sudo bash install.sh --no-nginx # nginx-Setup überspringen
sudo bash install.sh --reinstall # Update (Daten bleiben erhalten)
sudo bash install.sh --help # Hilfe anzeigen
Konfiguration
UI-Settings (empfohlen)
Die meisten Einstellungen werden in der App unter Settings gepflegt und in SQLite gespeichert:
- Pfade:
Raw Ausgabeordner,Film Ausgabeordner,Log Ordner(jeweils mit Blu-ray/DVD/Audiobook-Varianten) - Pfade Converter:
Converter Raw-Ordner,Converter Ausgabe (Video),Converter Ausgabe (Audio) - Tools:
MakeMKV Kommando,HandBrake Kommando,Mediainfo Kommando,FFmpeg Kommando,FFprobe Kommando - Profile: medientyp-spezifische Felder für Blu-ray/DVD/Sonstiges (z. B. Preset, Zusatzargumente, Ausgabeformat)
- Audiobook: Output-Template, RAW-Template
- Converter: erlaubte Endungen, Auto-Scan-Intervall, Output-Templates
- Queue/Monitoring:
Parallele Jobs,Hardware Monitoring aktiviert,Hardware Monitoring Intervall (ms) - Benachrichtigungen: PushOver
Umgebungsvariablen
Backend (backend/src/config.js):
PORT(Default:3001)DB_PATH(Default:backend/data/ripster.db)LOG_DIR(Default:backend/logs)CORS_ORIGIN(Default:*)LOG_LEVEL(debug|info|warn|error, Default:info)
Frontend (Vite):
VITE_API_BASE(Default:/api)VITE_WS_URL(optional, überschreibt automatische WS-URL)- optional für Remote-Dev:
VITE_PUBLIC_ORIGIN,VITE_ALLOWED_HOSTS,VITE_HMR_PROTOCOL,VITE_HMR_HOST,VITE_HMR_CLIENT_PORT
Logs und Daten
Log-Ziel ist primär der in den Settings gepflegte log_dir.
- Backend-Logs:
<log_dir>/backend/backend-latest.logund Tagesdateien - Job-Logs:
<log_dir>/job-<id>.process.log - DB:
backend/data/ripster.db
Hinweis: Beim DB-Init wird das Schema geprüft und fehlende Elemente werden migriert.
Projektstruktur
ripster/
backend/
src/
plugins/ # Plugin-System (BluRay, DVD, CD, Audiobook, Converter)
routes/
services/
db/
utils/
frontend/
src/
pages/ # Dashboard, Settings, History, Converter, Downloads, Database
components/
api/
db/schema.sql
start.sh
install.sh
install-dev.sh
API-Überblick
Health
GET /api/health
Pipeline
GET /api/pipeline/statePOST /api/pipeline/analyzePOST /api/pipeline/rescan-discPOST /api/pipeline/select-metadataPOST /api/pipeline/start/:jobIdPOST /api/pipeline/confirm-encode/:jobIdPOST /api/pipeline/cancelPOST /api/pipeline/retry/:jobIdPOST /api/pipeline/reencode/:jobIdPOST /api/pipeline/restart-review/:jobIdPOST /api/pipeline/restart-encode/:jobIdPOST /api/pipeline/resume-ready/:jobIdGET /api/pipeline/queuePOST /api/pipeline/queue/reorderPOST /api/pipeline/queue/entryDELETE /api/pipeline/queue/entry/:entryId
Converter
GET /api/converter/treeGET /api/converter/browsePOST /api/converter/scanPOST /api/converter/create-jobsPOST /api/converter/uploadPOST /api/converter/jobs/from-selectionGET /api/converter/jobsGET /api/converter/jobs/:jobIdPOST /api/converter/jobs/:jobId/startPOST /api/converter/jobs/:jobId/cancelDELETE /api/converter/jobs/:jobIdDELETE /api/converter/filesPOST /api/converter/files/renamePOST /api/converter/files/movePOST /api/converter/files/folder
Downloads
GET /api/downloadsGET /api/downloads/summaryPOST /api/downloads/history/:jobIdGET /api/downloads/:id/fileDELETE /api/downloads/:id
History
GET /api/historyGET /api/history/:idGET /api/history/databaseGET /api/history/orphan-rawPOST /api/history/orphan-raw/importPOST /api/history/:id/omdb/assignPOST /api/history/:id/delete-filesPOST /api/history/:id/delete
Settings
GET /api/settingsPUT /api/settings/:keyPUT /api/settingsGET/POST/PUT/DELETE /api/settings/scripts...GET/POST/PUT/DELETE /api/settings/script-chains...GET/POST/PUT/DELETE /api/settings/user-presets...POST /api/settings/pushover/test
Cron-Jobs
GET /api/cronsPOST /api/cronsGET /api/crons/:idPUT /api/crons/:idDELETE /api/crons/:idGET /api/crons/:id/logsPOST /api/crons/:id/runPOST /api/crons/validate-expression
Runtime-Aktivitäten
GET /api/activitiesPOST /api/activities/:id/cancelPOST /api/activities/:id/next-stepPOST /api/activities/clear-recent
Troubleshooting
- WebSocket verbindet nicht:
- prüfen, ob Frontend über Vite-Proxy läuft (
/ws-> Backend) - bei Reverse-Proxy Upgrade-Header für
/wssetzen
- prüfen, ob Frontend über Vite-Proxy läuft (
- Keine Disc erkannt:
- in den Settings
LaufwerksmodusaufExplizites Devicestellen undDevice Pfadsetzen (z. B./dev/sr0)
- in den Settings
- HandBrake/MakeMKV Fehler:
- CLI-Binaries im
PATHprüfen - Preset-Name mit
HandBrakeCLI -zprüfen
- CLI-Binaries im
- Startfehler wegen Schema:
db/schema.sqlvorhanden halten
Sicherheit
- Keine echten Tokens/Passwörter ins Repository committen.
- Lokale Secrets in
.envoder in Settings pflegen, aber nicht versionieren.