Video Export
POST
/v1/video-export/render202Render a Remotion composition server-side. The consumer hosts the Remotion bundle at a URL (typically their own Vercel deploy) and passes the URL + composition id + input props. DomeTech renders the MP4, uploads it to managed storage, and sends a completion webhook. Use this when you want to centralize video rendering at DomeTech rather than running Remotion in your own consumer backend.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
serve_url | string (URI) | Yes | Public URL of the Remotion bundle's index.html (e.g. https://app.domeagent.com.au/remotion). The host must be in REMOTION_BUNDLE_URL_ALLOWLIST. |
composition_id | string | Yes | Composition id registered in the bundle's RemotionRoot (e.g. "VideoProject"). |
input_props | object | Yes | Props passed to the composition. Shape is determined by the bundle — DomeTech treats this as opaque JSON. |
options.codec | string | No | Output codec (default: h264) |
options.width | integer | No | Override composition width. Default: composition's own width. |
options.height | integer | No | Override composition height. Default: composition's own height. |
options.fps | integer | No | Override composition frame rate. Default: composition's own fps. |
options.duration_in_frames | integer | No | Override the composition's total duration in frames. Set this for dynamic-length timelines — most bundles register a placeholder duration in Root.tsx and the real length lives in props. If omitted, the renderer falls back to `input_props.totalDurationInFrames` (the consumer convention for dynamic timelines) and finally to the composition's registered default. |
options.crf | integer (0-51) | No | H.264 quality (Constant Rate Factor). 0=lossless, 23=default, 51=worst. Lower = bigger files. |
webhook_url | string (URI) | No | URL to receive progress and completion webhooks |
callback_metadata | object | No | Opaque data returned in webhook payloads |
Request Example
{
"serve_url": "https://example.com/image.jpg",
"composition_id": "example",
"input_props": {},
"options": {
"codec": "h264",
"width": 1,
"height": 1,
"fps": 1,
"duration_in_frames": 1,
"crf": 0
},
"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"
}
}