Render a vertical 1080x1920 video from clips with an API

Timeline 1.0 defaults to a 1080x1920 MP4. Set output width, height and fps, and pick fit cover, contain, stretch or blur for clips that do not match the frame.

4 min readSume
All posts

A POST /v1/timeline-1.0/render already outputs a vertical 1080x1920 MP4 unless you say otherwise, so for a Reels, Shorts or TikTok cut you can leave output out. Set output.width and output.height (even integers from 256 to 2160) and output.fps (24, 25, 30 or 60) only when you need a different frame.

Details are from Timeline 1.0, read 2026-09-29. Platform upload specs change, so check the platform's own page for the current limits.

How do clips that are not vertical fit the frame?

Each video[] slot has a fit: cover (default) crops to fill, contain letterboxes, stretch distorts, and blur fills the empty area with a blurred version of the clip. A landscape clip in a vertical frame is the classic case for blur.

{
  "audio": { "mode": "silence", "duration_seconds": 8 },
  "output": { "width": 1080, "height": 1920, "fps": 30 },
  "video": [
    { "source_url": "https://media.sume.com/artifacts/artf_demo/wide.mp4",
      "start": 0, "duration": 8, "fit": "blur" }
  ]
}

What happens to frame rate?

Omit output.fps and the render runs at the rate the sources already use (the longest video sources decide; stills have none; 30 only when nothing has one). A rate that differs from a source's is met by repeating or dropping frames, which can judder on motion, and Sume reports it as the output_fps_resamples_sources warning.

What are the output options?

Output fields, from Timeline 1.0, read 2026-09-29.
FieldValue
output.width, output.heightEven integers 256 to 2160; default 1080x1920
output.fps24, 25, 30 or 60; omit to match sources
output.fade_in_seconds, fade_out_seconds0 to 5 each; sum no more than the output length
video[].fitcover, contain, stretch, blur

What if I need a still above a clip?

That is a different job: compose a still and a video into one shot first, set its output.width and output.height to match this render so it is not rescaled twice, then use the result as a slot. Price: $0.10 per output minute.

How do I render landscape or square instead?

Set both sides in output. The docs give the same range for each, even integers from 256 to 2160, so 1920x1080 and 1080x1080 are both valid, while a 3840 side is outside the range.

{
  "audio": { "mode": "silence", "duration_seconds": 8 },
  "output": { "width": 1920, "height": 1080, "fps": 30 },
  "video": [
    { "source_url": "https://media.sume.com/artifacts/artf_demo/wide.mp4",
      "start": 0, "duration": 8 }
  ]
}

Sources

Related posts

More in Developers

All Developers posts

Written by Sume