4.5 KiB
Converter API
Endpunkte für den Datei-Converter: Datei-Explorer, Upload, Job-Verwaltung.
Basis-Pfad: /api/converter
Scan & Explorer
GET /api/converter/tree
Vollständiger Verzeichnisbaum des converter_raw_dir (FS-basiert, keine DB).
Response:
{
"tree": [
{
"name": "filme",
"relPath": "filme",
"isDir": true,
"children": [
{
"name": "film.mkv",
"relPath": "filme/film.mkv",
"isDir": false,
"size": 10485760
}
]
}
]
}
GET /api/converter/browse?parent=relPath
DB-basierter Datei-Explorer. Gibt Einträge für einen Unterordner zurück.
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
parent |
string | Relativer Pfad zum Unterordner (leer = Root) |
Response:
{
"entries": [
{
"id": 1,
"rel_path": "filme/film.mkv",
"is_dir": false,
"size": 10485760,
"job_id": null
}
],
"rawDir": "/data/output/converter-raw"
}
POST /api/converter/scan
Manuellen Scan des converter_raw_dir auslösen. Aktualisiert converter_scan_entries in der DB.
Response:
{ "result": { "added": 3, "removed": 1 } }
Jobs erstellen
POST /api/converter/jobs/from-selection
Jobs aus im Datei-Explorer ausgewählten Dateien erstellen.
Body:
{
"relPaths": ["filme/film.mkv", "musik/track.flac"],
"audioMode": "individual"
}
| Feld | Typ | Beschreibung |
|---|---|---|
relPaths |
string[] | Relative Pfade der ausgewählten Dateien |
audioMode |
string | individual (ein Job pro Datei) oder shared (ein gemeinsamer Job) |
Response:
{ "jobs": [{ "id": 42, "status": "READY_TO_START" }] }
POST /api/converter/create-jobs
Jobs aus DB-Scan-Einträgen erstellen.
Body:
{
"entries": [
{ "relPath": "filme/film.mkv", "converterMediaType": "video" }
]
}
POST /api/converter/upload
Dateien hochladen (Multipart, max. 50 Dateien).
Form-Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
files |
File[] | Hochzuladende Dateien |
folderName |
string | (Optional) Ziel-Unterordner |
Response:
{
"folders": [{ "folderRelPath": "upload-2026-03-30", "fileCount": 2 }]
}
Job-Verwaltung
GET /api/converter/jobs
Alle Converter-Jobs zurückgeben.
Response:
{ "jobs": [{ "id": 42, "status": "READY_TO_START", "title": "film.mkv" }] }
GET /api/converter/jobs/:jobId
Einzelnen Converter-Job abrufen.
POST /api/converter/jobs/:jobId/config
Konfigurationsentwurf für einen Job speichern (persistiert in encode_plan_json).
Body: Partielles Konfig-Objekt (Ausgabeformat, Presets, Metadaten, Track-Auswahl).
POST /api/converter/jobs/:jobId/assign-files
Dateien einem bestehenden (noch nicht gestarteten) Job hinzufügen.
Body:
{ "relPaths": ["musik/track2.flac"] }
POST /api/converter/jobs/:jobId/remove-file
Datei aus einem Job entfernen (per relativer Pfad).
Body:
{ "relPath": "musik/track2.flac" }
POST /api/converter/jobs/:jobId/remove-input
Datei aus einem Job entfernen (per absolutem Eingabepfad).
Body:
{ "inputPath": "/data/output/converter-raw/musik/track2.flac" }
POST /api/converter/jobs/:jobId/start
Job mit finaler Konfiguration starten.
Body:
{
"converterMediaType": "video",
"outputFormat": "mkv",
"userPreset": "H.264 MKV 1080p30",
"trackSelection": {},
"handBrakeTitleId": 1,
"audioFormatOptions": {}
}
POST /api/converter/jobs/:jobId/cancel
Laufenden Job abbrechen.
DELETE /api/converter/jobs/:jobId
Job aus der DB löschen.
Datei-Operationen
Alle Datei-Operationen arbeiten direkt auf dem Dateisystem (ohne DB-Aktualisierung). Ein anschließender Scan-Aufruf synchronisiert die DB.
DELETE /api/converter/files
Datei oder Ordner löschen.
Body:
{ "relPath": "filme/film.mkv" }
POST /api/converter/files/rename
Datei oder Ordner umbenennen.
Body:
{ "relPath": "filme/film.mkv", "newName": "film-neu.mkv" }
POST /api/converter/files/move
Datei oder Ordner verschieben.
Body:
{ "relPath": "filme/film.mkv", "targetParentRelPath": "archiv" }
targetParentRelPath = "" verschiebt in das Root-Verzeichnis.
POST /api/converter/files/folder
Neuen Ordner anlegen.
Body:
{ "parentRelPath": "filme", "name": "neu" }