2026-03-09 12:49:58 +00:00
2026-03-08 21:52:21 +00:00
2026-03-05 11:04:20 +00:00
2026-03-09 12:49:58 +00:00
2026-03-09 12:08:36 +00:00
2026-03-06 11:21:25 +00:00
2026-03-09 12:08:36 +00:00
2026-03-05 19:34:01 +00:00
2026-03-04 14:18:33 +00:00
2026-03-09 05:47:21 +00:00
2026-03-09 05:47:21 +00:00
2026-03-09 12:25:40 +00:00

Ripster

Ripster ist eine lokale Web-Anwendung für halbautomatisches Disc-Ripping mit MakeMKV + HandBrake inklusive Metadaten-Auswahl, Titel-/Spurprüfung und Job-Historie.

Was Ripster kann

  • Disc-Erkennung mit Pipeline-Status in Echtzeit (WebSocket)
  • 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
  • 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:
    • makemkvcon
    • HandBrakeCLI
    • mediainfo

Schnellstart

./start.sh

start.sh erledigt:

  1. Node-Version prüfen/umschalten (inkl. nvm/node@20-Fallback)
  2. Dependencies installieren (Root, Backend, Frontend)
  3. 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.log und 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

  • GET /api/pipeline/state
  • POST /api/pipeline/analyze
  • POST /api/pipeline/start/:jobId
  • POST /api/pipeline/confirm-encode/:jobId
  • GET /api/history
  • GET /api/history/:id
  • GET /api/settings
  • PUT /api/settings

Troubleshooting

  • WebSocket verbindet nicht:
    • prüfen, ob Frontend über Vite-Proxy läuft (/ws -> Backend)
    • bei Reverse-Proxy VITE_PUBLIC_ORIGIN/HMR korrekt setzen
  • Keine Disc erkannt:
    • drive_mode=explicit testen und drive_device setzen (z. B. /dev/sr0)
  • HandBrake/MakeMKV Fehler:
    • CLI-Binaries im PATH prüfen
    • Preset-Name exakt wie in HandBrakeCLI -z hinterlegen
  • Startfehler wegen Schema:
    • sicherstellen, dass die erwartete Schema-Datei vorhanden ist (db/schema.sql)

Sicherheit

  • Keine echten Tokens/Passwörter ins Repository committen.
  • Lokale Secrets in .env oder in Settings pflegen, aber nicht versionieren.
Description
No description provided
Readme 18 MiB
Languages
HTML 55%
JavaScript 40.7%
Shell 2.2%
CSS 2.1%