Zum Inhalt

Pipeline API

Alle Endpunkte zur Steuerung des Ripster-Workflows.


GET /api/pipeline/state

Liefert den aktuellen Pipeline-Snapshot.

Response:

{
  "pipeline": {
    "state": "READY_TO_ENCODE",
    "activeJobId": 42,
    "progress": 0,
    "eta": null,
    "statusText": "Mediainfo geladen - bitte bestätigen",
    "context": {
      "jobId": 42
    },
    "queue": {
      "maxParallelJobs": 1,
      "runningCount": 0,
      "queuedCount": 0,
      "runningJobs": [],
      "queuedJobs": []
    }
  }
}

Pipeline-Zustände:

Wert Beschreibung
IDLE Wartet auf Medium
DISC_DETECTED Medium erkannt, wartet auf Analyse-Start
METADATA_SELECTION Metadaten-Dialog aktiv
WAITING_FOR_USER_DECISION Manuelle Playlist-Auswahl erforderlich
READY_TO_START Übergang/Fallback vor Start
RIPPING MakeMKV läuft
MEDIAINFO_CHECK HandBrake-Scan + Plan-Erstellung
READY_TO_ENCODE Review bereit
ENCODING HandBrake-Encoding läuft (inkl. Post-Skripte)
FINISHED Abgeschlossen
CANCELLED Vom Benutzer abgebrochen
ERROR Fehler

POST /api/pipeline/analyze

Startet die Analyse für die aktuell erkannte Disc.

Request: kein Body

Response:

{
  "result": {
    "jobId": 42,
    "detectedTitle": "INCEPTION",
    "omdbCandidates": []
  }
}

POST /api/pipeline/rescan-disc

Erzwingt eine erneute Laufwerksprüfung.

Response (Beispiel):

{
  "result": {
    "emitted": "discInserted"
  }
}

GET /api/pipeline/omdb/search?q=

Sucht OMDb-Titel.

Response:

{
  "results": [
    {
      "imdbId": "tt1375666",
      "title": "Inception",
      "year": "2010",
      "type": "movie",
      "poster": "https://..."
    }
  ]
}

POST /api/pipeline/select-metadata

Setzt Metadaten (und optional Playlist-Entscheidung).

Request:

{
  "jobId": 42,
  "title": "Inception",
  "year": 2010,
  "imdbId": "tt1375666",
  "poster": "https://...",
  "fromOmdb": true,
  "selectedPlaylist": "00800"
}

Response: { "job": { ... } }

Startlogik

Nach Metadaten-Bestätigung wird der nächste Schritt automatisch ausgelöst (startPreparedJob). Der Job startet direkt oder wird in die Queue eingereiht.


POST /api/pipeline/start/:jobId

Startet einen vorbereiteten Job manuell (z. B. Fallback/Queue-Szenario).

Response (Beispiel):

{
  "result": {
    "started": true,
    "stage": "RIPPING"
  }
}

Mögliche stage-Werte sind u. a. RIPPING, MEDIAINFO_CHECK, ENCODING.


POST /api/pipeline/confirm-encode/:jobId

Bestätigt Review-Auswahl (Titel/Tracks/Post-Skripte).

Request:

{
  "selectedEncodeTitleId": 1,
  "selectedTrackSelection": {
    "1": {
      "audioTrackIds": [1, 2],
      "subtitleTrackIds": [3]
    }
  },
  "selectedPostEncodeScriptIds": [2, 7],
  "skipPipelineStateUpdate": false
}

Response: { "job": { ... } }


POST /api/pipeline/cancel

Bricht laufenden Job ab oder entfernt einen Queue-Eintrag.

Request (optional):

{
  "jobId": 42
}

Response (Beispiel):

{
  "result": {
    "cancelled": true,
    "queuedOnly": false,
    "jobId": 42
  }
}

POST /api/pipeline/retry/:jobId

Startet einen Job aus ERROR/CANCELLED erneut (oder reiht ihn in die Queue ein).

Response: { "result": { ... } }


POST /api/pipeline/resume-ready/:jobId

Lädt einen READY_TO_ENCODE-Job nach Neustart wieder in die aktive Session.

Response: { "job": { ... } }


POST /api/pipeline/reencode/:jobId

Startet Re-Encode aus bestehendem RAW.

Response: { "result": { ... } }


POST /api/pipeline/restart-review/:jobId

Berechnet die Review aus vorhandenem RAW neu.

Response: { "result": { ... } }


POST /api/pipeline/restart-encode/:jobId

Startet Encoding mit der zuletzt bestätigten Auswahl neu.

Response: { "result": { ... } }


Queue-Endpunkte

GET /api/pipeline/queue

Liefert den aktuellen Queue-Status.

Response: { "queue": { ... } }

POST /api/pipeline/queue/reorder

Sortiert Queue-Einträge neu.

Request:

{
  "orderedJobIds": [42, 43, 41]
}

Response: { "queue": { ... } }