fa6594b1636513f3167a5cafc9f35c1055de3f76
Ripster
Ripster ist eine lokale Web-Anwendung für halbautomatisches Disc-Ripping mit MakeMKV + HandBrake inklusive Metadaten-Auswahl, Titel-/Spurprüfung und Job-Historie.
Neu seit letztem Release
- Cron-Job-System – Skripte und Skript-Ketten zeitgesteuert ausführen; eigener Expression-Parser, Ausführungs-Logs, manuelle Auslösung, PushOver-Integration
- DVD-Erkennung verbessert – robuste Media-Profil-Erkennung (Blu-ray / DVD / CD) aus UDF/ISO9660-Dateisystemtyp, Laufwerk-Modell und Disc-Label
- Pre-Encode-Ausführungen – Skripte und Ketten können nun auch vor dem Encode-Schritt ausgeführt werden (zusätzlich zu Post-Encode)
- Sortierbare Skripte & Ketten – Reihenfolge über Drag & Drop festlegen; wird persistent in der Datenbank gespeichert
rip_successful-Flag in Jobs – separates Feld zur Nachverfolgung ob der Rip-Schritt abgeschlossen wurde (unabhängig vom Encode-Status)
Was Ripster kann
- Disc-Erkennung mit Pipeline-Status in Echtzeit (WebSocket)
- Robuste Erkennung von Blu-ray, DVD und CD (UDF/ISO9660-Heuristik + Laufwerk-Modell)
- Metadaten-Suche und Zuordnung über OMDb
- MakeMKV-Analyse und Rip (MKV oder Backup-Modus)
- HandBrake-Encode mit Preset + Extra-Args + Track-Override
- Manuelle Playlist-/Titel-Auswahl bei komplexen Blu-rays
- Pre- und Post-Encode-Skripte & Skript-Ketten (inkl. Drag-and-Drop-Sortierung)
- Cron-Jobs: Skripte und Ketten zeitgesteuert ausführen (eigener Expression-Parser, Logs, PushOver)
- Historie mit Re-Encode, Löschfunktionen und Detailansicht
- Dateibasierte Logs (Backend + Job-Prozesslogs)
Tech-Stack
- Backend: Node.js, Express, SQLite, WebSocket (
ws) - Frontend: React, Vite, PrimeReact
- Externe Tools:
makemkvcon,HandBrakeCLI,mediainfo
Voraussetzungen
- Linux-System mit optischem Laufwerk (oder gemountete Quelle)
- Node.js
>= 20.19.0(siehe .nvmrc) - Installierte CLI-Tools im
PATH:makemkvconHandBrakeCLImediainfo
Schnellstart
./start.sh
start.sh erledigt:
- Node-Version prüfen/umschalten (inkl.
nvm/node@20-Fallback) - Dependencies installieren (Root, Backend, Frontend)
- Dev-Umgebung starten (
backend+frontend)
Danach:
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:3001/api
Stoppen:
./kill.sh
Manueller Start
npm install
npm --prefix backend install
npm --prefix frontend install
npm run dev
Einzeln starten:
npm run dev:backend
npm run dev:frontend
Frontend Build:
npm run build:frontend
Backend (ohne Dev-Mode):
npm run start
Konfiguration
1) UI-Settings (empfohlen)
Die meisten Einstellungen werden in der App unter Settings gepflegt und in SQLite gespeichert:
- Pfade:
raw_dir,movie_dir,log_dir - Tools:
makemkv_command,handbrake_command,mediainfo_command - Encode:
handbrake_preset,handbrake_extra_args,output_extension,filename_template - Laufwerk/Scan:
drive_mode,drive_device, Polling - Benachrichtigungen: PushOver
2) Umgebungsvariablen
Backend (backend/src/config.js):
PORT(Default:3001)DB_PATH(Default:backend/data/ripster.db)LOG_DIR(Fallback-Logpfad, 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)VITE_PUBLIC_ORIGIN,VITE_ALLOWED_HOSTS,VITE_HMR_*(Remote-Dev/HMR)
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(inkl. Job-/Settings-Daten)
Hinweis: Beim DB-Init wird das Schema gegen die Soll-Struktur abgeglichen und migriert.
Projektstruktur
ripster/
backend/
src/
routes/
services/
db/
utils/
frontend/
src/
pages/
components/
api/
start.sh
kill.sh
deploy-ripster.sh
API-Überblick
Pipeline
GET /api/pipeline/statePOST /api/pipeline/analyzePOST /api/pipeline/start/:jobIdPOST /api/pipeline/confirm-encode/:jobId
History
GET /api/historyGET /api/history/:id
Settings
GET /api/settingsPUT /api/settings
Cron-Jobs (neu)
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
Troubleshooting
- WebSocket verbindet nicht:
- prüfen, ob Frontend über Vite-Proxy läuft (
/ws-> Backend) - bei Reverse-Proxy
VITE_PUBLIC_ORIGIN/HMR korrekt setzen
- prüfen, ob Frontend über Vite-Proxy läuft (
- Keine Disc erkannt:
drive_mode=explicittesten unddrive_devicesetzen (z. B./dev/sr0)
- HandBrake/MakeMKV Fehler:
- CLI-Binaries im
PATHprüfen - Preset-Name exakt wie in
HandBrakeCLI -zhinterlegen
- CLI-Binaries im
- Startfehler wegen Schema:
- sicherstellen, dass die erwartete Schema-Datei vorhanden ist (
db/schema.sql)
- sicherstellen, dass die erwartete Schema-Datei vorhanden ist (
Sicherheit
- Keine echten Tokens/Passwörter ins Repository committen.
- Lokale Secrets in
.envoder in Settings pflegen, aber nicht versionieren.
Description
Languages
HTML
55%
JavaScript
40.7%
Shell
2.2%
CSS
2.1%