Video Stabilization
Apply video stabilisation to smooth handheld-style camera drift in video clips
POST
/v1/video-stabilization/apply202Apply video stabilisation to a clip — ideal for smoothing subtle handheld-style camera drift. Use the strength preset for sensible defaults, or override individual options for fine control. Max input duration: 60 seconds.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
video_url | string (URI) | Yes | URL of the source video to stabilise. MP4 recommended. Max duration: 60 seconds. |
strength | string | No | Stabilisation preset: subtle (gentle smoothing for already-clean AI clips), standard (balanced), or strong (aggressive, for visibly shaky input). Default: standard |
options.shakiness | integer (1-10) | No | Detector sensitivity to camera shake (1=barely shaky, 10=very shaky). Overrides the strength preset. Lower values reduce false-positive correction on clean footage. |
options.smoothing | integer (1-120) | No | Smoothing window in frames (e.g. 30 ≈ 1s at 30fps). Higher = smoother but more cropping. Overrides the strength preset. |
options.optzoom | number | No | Border handling: 0=none (visible black borders), 1=auto-zoom to hide borders, 2=aggressive zoom. Default depends on strength preset. |
options.zoom | number (-50-50) | No | Additional zoom percentage on top of optzoom. Negative zooms out, positive zooms in. Default: 0 |
webhook_url | string (URI) | No | URL to receive progress and completion webhooks |
callback_metadata | object | No | Opaque data returned in webhook payloads |
Request Example
{
"video_url": "https://example.com/image.jpg",
"options": {
"shakiness": 1,
"smoothing": 1,
"optzoom": 0,
"zoom": -50
},
"webhook_url": "https://example.com/image.jpg"
}Response
{
"data": {
"job_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "queued"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-03-12T10:00:00.000Z",
"mode": "live"
}
}