DOcs
This commit is contained in:
1 parent
3b66ca64f8
commit
aabb28ee06
66 files changed
+1199
-904
No files matched your search
@@ -1 +1 @@
|
||||
{"config":{"lang":["de"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Ripster","text":"<p>Halbautomatische Disc-Ripping-Plattform f\u00fcr DVDs und Blu-rays</p> <ul> <li> <p> Automatisiertes Ripping</p> <p>Disc einlegen \u2013 Ripster erkennt sie automatisch und startet den Analyse-Workflow mit MakeMKV.</p> <p> Workflow verstehen</p> </li> <li> <p> Metadata-Integration</p> <p>Automatische Suche in der OMDb-Datenbank f\u00fcr Filmtitel, Poster und IMDb-IDs.</p> <p> Konfiguration</p> </li> <li> <p> Flexibles Encoding</p> <p>HandBrake-Encoding mit individueller Track-Auswahl f\u00fcr Audio- und Untertitelspuren.</p> <p> Encode-Planung</p> </li> <li> <p> Job-Historie</p> <p>Vollst\u00e4ndiges Audit-Trail aller Ripping-Jobs mit Logs und Re-Encode-Funktion.</p> <p> History API</p> </li> </ul>"},{"location":"#was-ist-ripster","title":"Was ist Ripster?","text":"<p>Ripster ist eine webbasierte Anwendung zur halbautomatischen Digitalisierung von DVDs und Blu-rays. Die Anwendung kombiniert bew\u00e4hrte Open-Source-Tools zu einem durchg\u00e4ngigen, komfortablen Workflow:</p> <pre><code>Disc einlegen \u2192 Erkennung \u2192 Analyse \u2192 Metadaten w\u00e4hlen \u2192 Rippen \u2192 Encodieren \u2192 Fertig\n</code></pre>"},{"location":"#kernfunktionen","title":"Kernfunktionen","text":"Feature Beschreibung Echtzeit-Updates WebSocket-basierte Live-Statusanzeige ohne Reload Intelligente Playlist-Analyse Erkennt Blu-ray Playlist-Verschleierung (Fake-Playlists) Track-Auswahl Individuelle Auswahl von Audio- und Untertitelspuren Orphan-Recovery Import von bereits gerippten Dateien als Jobs PushOver-Benachrichtigungen Mobile Alerts bei Fertigstellung oder Fehlern DB-Korruptions-Recovery Automatische Quarant\u00e4ne bei korrupten SQLite-Dateien Re-Encoding Erneutes Encodieren ohne neu rippen"},{"location":"#technologie-stack","title":"Technologie-Stack","text":"BackendFrontendExterne Tools <ul> <li>Node.js >= 20.19.0 mit Express.js</li> <li>SQLite3 mit automatischen Schema-Migrationen</li> <li>WebSocket (<code>ws</code>) f\u00fcr Echtzeit-Kommunikation</li> <li>Externe CLI-Tools: <code>makemkvcon</code>, <code>HandBrakeCLI</code>, <code>mediainfo</code></li> </ul> <ul> <li>React 18.3.1 mit React Router</li> <li>Vite 5.4.12 als Build-Tool</li> <li>PrimeReact 10.9.2 als UI-Bibliothek</li> <li>WebSocket-Client f\u00fcr Live-Updates</li> </ul> Tool Zweck <code>makemkvcon</code> Disc-Analyse & MKV/Backup-Ripping <code>HandBrakeCLI</code> Video-Encoding <code>mediainfo</code> Track-Informationen aus gerippten Dateien OMDb API Filmmetadaten (Titel, Poster, IMDb-ID)"},{"location":"#schnellstart","title":"Schnellstart","text":"<pre><code># 1. Repository klonen\ngit clone https://github.com/YOUR_GITHUB_USERNAME/ripster.git\ncd ripster\n\n# 2. Starten (Node.js >= 20 erforderlich)\n./start.sh\n\n# 3. Browser \u00f6ffnen\nopen http://localhost:5173\n</code></pre> <p>Erste Schritte</p> <p>Die vollst\u00e4ndige Installationsanleitung mit allen Voraussetzungen findest du unter Erste Schritte.</p>"},{"location":"#pipeline-uberblick","title":"Pipeline-\u00dcberblick","text":"<pre><code>flowchart LR\n IDLE --> DD[DISC_DETECTED]\n DD --> META[METADATA\\nSELECTION]\n META --> RTS[READY_TO\\nSTART]\n RTS -->|Auto-Start| RIP[RIPPING]\n RTS -->|Auto-Start mit RAW| MIC\n RIP --> MIC[MEDIAINFO\\nCHECK]\n MIC -->|Playlist offen (Backup)| WUD[WAITING_FOR\\nUSER_DECISION]\n WUD --> MIC\n MIC --> RTE[READY_TO\\nENCODE]\n RTE --> ENC[ENCODING]\n ENC -->|inkl. Post-Skripte| FIN([FINISHED])\n ENC --> ERR([ERROR])\n RIP --> ERR\n\n style FIN fill:#e8f5e9,stroke:#66bb6a,color:#2e7d32\n style ERR fill:#ffebee,stroke:#ef5350,color:#c62828\n style WUD fill:#fff8e1,stroke:#ffa726,color:#e65100\n style ENC fill:#f3e5f5,stroke:#ab47bc,color:#6a1b9a</code></pre> <p><code>READY_TO_START</code> ist in der Praxis meist ein kurzer \u00dcbergangszustand: der Job wird nach Metadaten-Auswahl automatisch gestartet oder in die Queue eingeplant.</p>"},{"location":"api/","title":"API-Referenz","text":"<p>Ripster bietet eine REST-API f\u00fcr Steuerung/Verwaltung sowie einen WebSocket-Endpunkt f\u00fcr Echtzeit-Updates.</p>"},{"location":"api/#basis-url","title":"Basis-URL","text":"<pre><code>http://localhost:3001\n</code></pre> <p>API-Prefix: <code>/api</code></p> <p>Beispiele:</p> <ul> <li><code>GET /api/health</code></li> <li><code>GET /api/pipeline/state</code></li> </ul>"},{"location":"api/#api-gruppen","title":"API-Gruppen","text":"<ul> <li> <p> Health</p> <p>Service-Liveness.</p> <p><code>GET /api/health</code></p> </li> <li> <p> Pipeline API</p> <p>Analyse, Start/Retry/Cancel, Queue, Re-Encode.</p> <p> Pipeline API</p> </li> <li> <p> Settings API</p> <p>Einstellungen, Skripte/Ketten, User-Presets.</p> <p> Settings API</p> </li> <li> <p> History API</Line truncated
|
||||
{"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":"<p>Dieses Dokumentationsset ist als Benutzerhandbuch aufgebaut: erst Bedienung und Alltag, dann Technik im Anhang.</p>"},{"location":"#schnellstart-in-3-schritten","title":"Schnellstart in 3 Schritten","text":"<ol> <li>Voraussetzungen pr\u00fcfen und installieren: Installation</li> <li>Grundkonfiguration in der UI setzen: Ersteinrichtung</li> <li>Ersten vollst\u00e4ndigen Job durchlaufen: Erster Lauf</li> </ol>"},{"location":"#was-du-hier-findest","title":"Was du hier findest","text":"<ul> <li>Benutzerhandbuch</li> <li>Installation</li> <li>GUI-Seiten im Detail (<code>Dashboard</code>, <code>Settings</code>, <code>Historie</code>, <code>Database</code>)</li> <li>typische Arbeitsabl\u00e4ufe aus Anwendersicht</li> <li>Technischer Anhang</li> <li>vollst\u00e4ndige Einstellungsreferenz</li> <li>Pipeline-/API-/Architekturdetails</li> <li>Deployment und Tool-Hintergr\u00fcnde</li> </ul>"},{"location":"#empfohlene-lesereihenfolge","title":"Empfohlene Lesereihenfolge","text":"<ol> <li>Benutzerhandbuch \u00dcberblick</li> <li>GUI-Seiten</li> <li>Workflows aus Nutzersicht</li> <li>Bei Bedarf: Technischer Anhang</li> </ol>"},{"location":"api/","title":"Anhang: API-Referenz","text":"<p>REST- und WebSocket-Schnittstellen f\u00fcr Integration, Automatisierung und Debugging.</p>"},{"location":"api/#basis-url","title":"Basis-URL","text":"<pre><code>http://localhost:3001\n</code></pre> <p>API-Prefix: <code>/api</code></p>"},{"location":"api/#api-gruppen","title":"API-Gruppen","text":"<ul> <li> <p> Health</p> <p>Service-Liveness.</p> <p><code>GET /api/health</code></p> </li> <li> <p> Pipeline API</p> <p>Analyse, Start/Retry/Cancel, Queue, Re-Encode.</p> <p> Pipeline API</p> </li> <li> <p> Settings API</p> <p>Einstellungen, Skripte/Ketten, User-Presets.</p> <p> Settings API</p> </li> <li> <p> History API</p> <p>Job-Historie, Orphan-Import, L\u00f6schoperationen.</p> <p> History API</p> </li> <li> <p> Cron API</p> <p>Zeitgesteuerte Skript-/Kettenausf\u00fchrung.</p> <p> Cron API</p> </li> <li> <p> WebSocket Events</p> <p>Pipeline-, Queue-, Disk-, Settings-, Cron- und Monitoring-Events.</p> <p> WebSocket</p> </li> </ul>"},{"location":"api/#hinweis","title":"Hinweis","text":"<p>Ripster hat keine eingebaute Authentifizierung und ist f\u00fcr lokalen, gesch\u00fctzten Betrieb gedacht.</p>"},{"location":"api/crons/","title":"Cron API","text":"<p>Ripster enth\u00e4lt ein eingebautes Cron-System f\u00fcr Skripte und Skript-Ketten (<code>sourceType: script|chain</code>).</p>"},{"location":"api/crons/#get-apicrons","title":"GET /api/crons","text":"<p>Listet alle Cron-Jobs.</p> <pre><code>{\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</code></pre>"},{"location":"api/crons/#post-apicrons","title":"POST /api/crons","text":"<p>Erstellt Cron-Job.</p> <pre><code>{\n \"name\": \"Nachtlauf Backup\",\n \"cronExpression\": \"0 2 * * *\",\n \"sourceType\": \"script\",\n \"sourceId\": 3,\n \"enabled\": true,\n \"pushoverEnabled\": true\n}\n</code></pre> <p>Response: <code>201</code> mit <code>{ \"job\": { ... } }</code></p>"},{"location":"api/crons/#get-apicronsid","title":"GET /api/crons/:id","text":"<p>Response:</p> <pre><code>{ \"job\": { \"id\": 1, \"name\": \"...\" } }\n</code></pre>"},{"location":"api/crons/#put-apicronsid","title":"PUT /api/crons/:id","text":"<p>Aktualisiert Cron-Job. Felder wie bei <code>POST</code>.</p> <p>Response:</p> <pre><code>{ \"job\": { ... } }\n</code></pre>"},{"location":"api/crons/#delete-apicronsid","title":"DELETE /api/crons/:id","text":"<p>Response:</p> <pre><code>{ \"removed\": { \"id\": 1, \"name\": \"Nachtlauf Backup\" } }\n</code></pre>"},{"location":"api/crons/#get-apicronsidlogs","title":"GET /api/crons/:id/logs","text":"<p>Liefert Ausf\u00fchrungs-Logs.</p> <p>Query-Parameter:</p> Parameter Typ Default Beschreibung <code>limit</code> number <code>20</code> Anzahl Eintr\u00e4ge, max. <code>100</code> <p>Response:</p> <pre><code>{\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</code></pre> <p><code>status</code>: <code>running</code> | <code>suLine truncated
|
||||
Reference in new issue
Block a user