One video for Reels ads, TikTok App Bundle, Shorts: what length
Reels ads allow 0 s to 15 min, TikTok App Bundle 5 to 60 s, Shorts up to 3 min. A 21 to 30 second file satisfies all three. Read from each vendor page.

A single file between 21 and 30 seconds fits all three pages I read. Meta's Reels ad page allows 0 seconds to 15 minutes, TikTok's Global App Bundle page allows 5 to 60 seconds and recommends 21 to 30, and YouTube Help allows Shorts up to 3 minutes.
Three pages, three ranges
I read each page on 2026-10-05. I did not fetch a page about organic Reels or organic TikTok length, so this post covers only the ad specs for those two and the Shorts page for YouTube.
| Platform page | Minimum | Maximum | Note |
|---|---|---|---|
| Meta Ads Guide, Instagram Reels ads | 0 s | 15 minutes | MP4 or MOV, 4 GB maximum |
| TikTok Business Help, Global App Bundle | 5 s | 60 s | Recommends 21 to 30 s |
| YouTube Help, Shorts | Not stated on the page I read | 3 minutes | Applies to Shorts |
The overlap
The tightest window is the App Bundle one: at least 5 seconds and at most 60. Inside that, TikTok's own recommended 21 to 30 seconds is the target. Any file in that band is also valid for the other two pages.
Length is only one spec
Sources: Meta Ads Guide, TikTok App Bundle specs and YouTube Help. Duration is not the only spec: the App Bundle page lists 9:16 at 720x1280 or larger and the Reels page lists 1440x2560, so a file that fits the length may still need a size check.
One master, several cuts
Make the file once, then cut variants. If a model gave you a 30-second clip, the Timeline 1.0 plan and render paths take video[] slots with start, duration and source_in. A 24-second cut from a 30-second source is one slot with source_in 3 and duration 24. A single slot needs a spine too: send audio.mode: "silence" with duration_seconds 24 if the clip's own audio is not the spine.
Check with the plan
Run the plan first. It is unbilled and returns the duration and an estimate:
curl -X POST https://api.sume.com/v1/timeline-1.0/plan \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"audio": { "mode": "silence", "duration_seconds": 24 },
"video": [{
"source_url": "https://media.sume.com/artifacts/artf_demo/clip30.mp4",
"start": 0,
"duration": 24,
"source_in": 3
}]
}'What the plan returns
The result reports duration_seconds, segment_count, billable_minutes and estimated_cost_usd_micros. The public rate is $0.10 per rounded-up output minute, so a 24 second render bills one minute.
Then check the size
Check the file's real size too. Timeline output edges are even integers from 256 to 2160, with a 1080x1920 default.
Let the narrowest page set the master
Why not just use the longest window? Because a longer file has no advantage if the placement with the shortest window rejects it. The App Bundle page is the one with a 60 second ceiling, so a 90 second ad that is valid for Reels would be rejected there. When you ship to several placements, find the placement with the narrowest range and use that as the master length, then add longer versions only for the placements that allow them.
Write down the date
Keep a short table in your campaign notes with the date you read each page. Platforms update these pages, and a table with a date lets the next person tell whether a number is current. The captions in this post carry the read date for the same reason.
Cut a long source down
For a long source, the video trim docs allow a source up to 1800 seconds and an output up to 900 seconds, with a minimum output of 0.2 seconds. So you can cut a 60 second ad from a long recording in one call at $0.02, and then the 21 to 30 second variant from that.
Test the short end too
There is a subtle trap in treating a minimum of 0 seconds as an invitation. A 3 second file can pass the Reels page but fails the App Bundle page, which starts at 5 seconds. If you test variants of different lengths, run every variant against every placement you plan to use, and record which ones pass, instead of assuming a file valid for one is valid for all.
Fork late
A simple workflow is to generate once, trim to 30 seconds, probe the file, and only then fork. After the fork, only the placement-specific parts change: the caption position, the end card, and the file name. The length and the picture stay the same, and that keeps the comparison between placements honest.
The takeaway
Aim for 21 to 30 seconds, make one master, and let the stricter page decide.
Sources
Related posts
More in Use cases
- One-minute talking photo: five H3 Max lip sync clips, $6 at 768p
H3 Max lip sync takes 5-14.8 s of audio per clip. A 60-second spoken script is five 12 s clips: $3.75 at 480p, $6.00 at 768p, $12.00 at 1080p on Sume.
- One motion clip, six colorways: Kling 3.0 Motion Control, $1.89 each
Kling 3.0 Motion Control bills $0.1575 per second. One 12-second motion clip applied to six product stills costs $11.34. The inputs and limits are inside.
- One narrator in many languages: a Sume TTS batch vs MAI-Voice-2.1
MAI-Voice-2.1 claims one voice across 23 languages. On Sume, you send the same voice.id with a language per request and audition each language.
- One Short in Korean and English: caption styles and rules
Posting a Korean and an English cut of your own AI Short? YouTube is silent on translations; Sume caption styles are not. Which style fits which script.
Written by Sume