← Back to index Logout

Processing Pipeline

POST /api/v1/file/:file_uuid/process

Auth: 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.

Request Parameters

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)

Example

# 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"]}'

Response (200)

{
  "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

Error Responses

HTTP When
404 File UUID not found
401 Missing or invalid API key

GET /api/v1/file/:file_uuid/probe

Auth: Required Scope: file-level

Get ffprobe metadata for a registered file. Returns video/audio stream info, codec details, duration, resolution, and frame rate.

Example

curl -s "$API/api/v1/file/$FILE_UUID/probe" -H "X-API-Key: $KEY"

Response (200)

{
  "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_uuid

Auth: 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.

Pipeline Order

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.

Example

curl -s "$API/api/v1/progress/$FILE_UUID" -H "X-API-Key: $KEY" | jq '{overall_progress, processors: [.processors[] | {processor_type, status}]}'

Response (200)

{
  "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/jobs

Auth: 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.

Example

curl -s "$API/api/v1/jobs" -H "X-API-Key: $KEY" | jq '{count, jobs: [.jobs[] | {uuid, status}]}'

Response (200)

{
  "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