Export one video as 9:16, 1:1 and 16:9 with the API
Call Timeline 1.0 three times with the same clip and a different output.width and height each time. Three renders cost $0.30 for a clip under a minute.

Send the same video[].source_url to Timeline 1.0 three times, changing only output.width and output.height: 1080 by 1920 for 9:16, 1080 by 1080 for 1:1 and 1920 by 1080 for 16:9. Each render is its own job, billed at $0.10 per output minute rounded up, so a clip under a minute costs $0.30 for all three.
Resolve 21.1 added output sizing that can be overridden per trim so each aspect ratio gets its own framing. Sume has no multi-output call; the equivalent is one render request per size. Details are in the Timeline docs, read 2026-10-01.
Which sizes should I send?
output.width and output.height must be even integers from 256 to 2160. If you send neither, the default output is 1080 by 1920, which is already 9:16.
| Aspect ratio | width x height | Cost for a clip under 1 min |
|---|---|---|
| 9:16 | 1080 x 1920 (default) | $0.10 |
| 1:1 | 1080 x 1080 | $0.10 |
| 16:9 | 1920 x 1080 | $0.10 |
What happens when the source ratio does not match?
Each slot has a fit value. cover is the default, contain, stretch and blur are the others. With cover a 16:9 source rendered at 9:16 is filled edge to edge, so the sides are cut. With contain the whole frame stays visible and the rest is padded. See cover, contain, stretch and blur.
Timeline has no field for choosing which part of the frame to keep. For a crop rectangle, run the clip through video filter first: its crop op takes x, y, width and height as fractions of the source frame, and returns a new MP4.
How do I run the three renders?
The source must already be a media.sume.com URL (import with POST /v1/media-imports). Idempotency-Key is required, and each size needs its own key.
const SOURCE = "https://media.sume.com/artifacts/artf_demo/clip.mp4";
const sizes = { "9x16": [1080, 1920], "1x1": [1080, 1080], "16x9": [1920, 1080] };
for (const [name, [width, height]] of Object.entries(sizes)) {
const res = await fetch("https://api.sume.com/v1/timeline-1.0/render", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.SUME_API_KEY,
"Content-Type": "application/json",
"Idempotency-Key": "clip-001-" + name,
},
body: JSON.stringify({
audio: { mode: "silence", duration_seconds: 20 },
video: [{ source_url: SOURCE, start: 0, duration: 20 }],
output: { width, height },
}),
});
console.log(name, res.status, (await res.json()).id);
}Can I check the cost first?
Yes. The unbilled plan call returns billable_minutes and estimated_cost_usd_micros without creating a job; see the Timeline docs. The reserve for a render is ceil(audio.duration_seconds / 60) minutes, so three 20-second renders reserve three minutes in total.
Sources
Related posts
More in Use cases
- Pinterest ad image size: 2:3, 1000x1500, 40-character title
Pinterest ad images: PNG or JPEG, 2:3 (1000x1500), 100-character title with about 40 showing. Why 1000x1500 clashes with Sume's x16 pixels rule.
- Pinterest Collections ads specs: one hero, up to 24 secondaries
A Pinterest Collections ad shows one hero and three secondaries, then up to 24 secondaries fullscreen. No GIFs, desktop only. A batching plan for the assets.
- Pinterest white-background Pins get a 4% overlay: what to do
Pinterest puts a faint #000000 layer at 4% opacity on white-background image Pins in light mode. Choose your generated background tone on purpose.
- Pinterest Showcase ads specs: title Pin plus four cards
A Pinterest Showcase ad is one 2:3 title Pin plus up to four static cards, with up to three features per card. Plan it as one generated image set.
Written by Sume