POST /api/v1/file/:file_uuid/processAuth: Required Scope: file-level
Trigger the processing pipeline for a registered file. Creates a monitor job that the worker picks up and processes sequentially. Returns immediately with the job info—processing runs asynchronously in the background.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
processors |
string[] | No | all | Specific processors to run: ["cut","asr","asrx","yolo","ocr","face","pose","visual_chunk","story","5w1h"] |
rules |
string[] | No | all | Rule names to apply (currently unused) |
# Run all processors
curl -s -X POST "$API/api/v1/file/$FILE_UUID/process" \
-H "Content-Type: application/json" \
-H "X-API-Key: $KEY" -d '{}'
# Run specific processors only
curl -s -X POST "$API/api/v1/file/$FILE_UUID/process" \
-H "Content-Type: application/json" \
-H "X-API-Key: $KEY" \
-d '{"processors": ["asr", "face", "yolo"]}'
{
"success": true,
"job_id": 42,
"file_uuid": "3a6c1865...",
"status": "processing",
"pids": [12345, 12346],
"message": "Processing triggered for video.mp4"
}
| Field | Type | Description |
|---|---|---|
success |
boolean | Always true on 200 |
job_id |
integer | Monitor job ID (for job tracking) |
file_uuid |
string | 32-char hex UUID of the file |
status |
string | "processing" |
pids |
integer[] | Process IDs of started processors |
message |
string | Human-readable status |
| HTTP | When |
|---|---|
404 |
File UUID not found |
401 |
Missing or invalid API key |
GET /api/v1/file/:file_uuid/probeAuth: Required Scope: file-level
Get ffprobe metadata for a registered file. Returns video/audio stream info, codec details, duration, resolution, and frame rate.
curl -s "$API/api/v1/file/$FILE_UUID/probe" -H "X-API-Key: $KEY"
{
"file_uuid": "3a6c1865...",
"file_name": "video.mp4",
"file_size": 794863677,
"duration": 120.5,
"width": 1920,
"height": 1080,
"fps": 24.0,
"total_frames": 2892,
"cached": true,
"format": {
"filename": "/path/to/video.mp4",
"format_name": "mov,mp4,m4a,3gp",
"duration": "120.5",
"size": "12345678",
"bit_rate": "819200"
},
"streams": [
{
"index": 0,
"codec_name": "h264",
"codec_type": "video",
"width": 1920,
"height": 1080,
"r_frame_rate": "24/1",
"duration": "120.5"
}
]
}
| Field | Type | Description |
|---|---|---|
file_uuid |
string | 32-char hex UUID |
file_name |
string | File name |
file_size |
integer | File size in bytes (from filesystem) |
duration |
float | Duration in seconds |
width |
integer | Video width in pixels |
height |
integer | Video height in pixels |
fps |
float | Frames per second |
total_frames |
integer | Estimated total frames |
cached |
boolean | True if result was from cached probe JSON |
format |
object | Container format info (ffprobe format section) |
streams |
array | Array of stream info objects |
GET /api/v1/progress/:file_uuidAuth: Required Scope: file-level
Get real-time processing progress for a file via Redis pub/sub. Includes per-processor status, current/total frames, ETA, and system resource stats.
| Order | Processor | Dependencies | Description |
|---|---|---|---|
| 1 | cut |
— | Scene detection |
| 2 | asr |
cut | Speech-to-text (per scene) |
| 3 | asrx |
asr | Speaker diarization |
| 4 | yolo |
— | Object detection |
| 5 | ocr |
— | Text recognition |
| 6 | face |
— | Face detection & embedding |
| 7 | pose |
— | Pose estimation |
| 8 | visual_chunk |
yolo | Visual scene chunks |
| 9 | story |
asr, asrx, cut, yolo, face | Scene summaries (template) |
| 10 | 5w1h |
story | 5W1H analysis (Gemma4 LLM) |
All processors except story and 5w1h run concurrently when their dependencies are met. Story and 5W1H run sequentially after their prerequisites.
curl -s "$API/api/v1/progress/$FILE_UUID" -H "X-API-Key: $KEY" | jq '{overall_progress, processors: [.processors[] | {processor_type, status}]}'
{
"file_uuid": "3a6c1865...",
"overall_progress": 71,
"cpu_percent": 45.2,
"gpu_percent": 30.1,
"memory_percent": 62.4,
"processors": [
{"processor_type": "asr", "status": "complete", "progress": 100},
{"processor_type": "yolo", "status": "running", "progress": 65},
{"processor_type": "face", "status": "pending", "progress": 0}
]
}
| Field | Type | Description |
|---|---|---|
file_uuid |
string | 32-char hex UUID |
overall_progress |
integer | Overall progress percentage (0–100) |
processors |
array | Per-processor status list |
processors[].processor_type |
string | Processor name (asr, cut, yolo, etc.) |
processors[].status |
string | "pending", "running", "complete", or "failed" |
processors[].progress |
integer | Per-processor progress (0–100) |
processors[].eta_seconds |
integer | Estimated seconds remaining (running processors) |
processors[].current |
integer | Current frame count |
processors[].total |
integer | Total frame count |
cpu_percent |
float | Current CPU usage |
gpu_percent |
float | Current GPU utilization |
memory_percent |
float | Current memory usage |
GET /api/v1/jobsAuth: Required Scope: system-level
List all processing jobs (monitor jobs) in the system. Shows job status, which file each job is processing, and current processor info.
curl -s "$API/api/v1/jobs" -H "X-API-Key: $KEY" | jq '{count, jobs: [.jobs[] | {uuid, status}]}'
{
"jobs": [
{
"id": 42,
"uuid": "3a6c1865...",
"status": "running",
"current_processor": "yolo",
"created_at": "2026-05-16T12:00:00Z",
"started_at": "2026-05-16T12:01:00Z"
}
],
"count": 15,
"page": 1,
"page_size": 20
}
| Field | Type | Description |
|---|---|---|
jobs |
array | Array of job info objects |
jobs[].id |
integer | Job ID |
jobs[].uuid |
string | File UUID being processed |
jobs[].status |
string | "pending", "running", "completed", "failed" |
jobs[].current_processor |
string | Currently active processor, or null |
count |
integer | Total job count |
page |
integer | Current page number |
page_size |
integer | Jobs per page |