TikTok

Render a 9:16 film for TikTok, with the post and ad limits, the safe-zone templates and the vawe commands.

At the end of this page you have a 1080 × 1920 film for a TikTok post or ad. TikTok publishes limits for ads on ads.tiktok.com and for posts on support.tiktok.com. The two sets differ.

The limits

The sourced table is in Video specs by platform. Read on 2026-10-31 and 2026-11-01:

  • In-feed ad: 9:16 at 540 × 960 or more is recommended. 16:9 needs 960 × 540 or more, and 1:1 needs 640 × 640 or more. Up to 10 minutes, 500 MB or less, formats .mp4, .mov, .mpeg, .3gp and .avi.
  • Post: not verified. support.tiktok.com answered 503 on 2026-10-31 and 2026-11-01. Search excerpts give 720 × 1280 or more and up to 10 GB, and disagree on length (10 or 60 minutes). Read the TikTok upload screen before you rely on a length.
  • TikTok publishes no frame rate and no loudness target on the pages read.

Safe zone

TikTok publishes safe-zone templates for ads, as downloadable files. The Ads help page says the zone depends on the dimension, the caption length and any added formats. It gives no pixel list. There are files for left-to-right regions, files for Arabic, and files that include anchors. Download the template that fits your ad from the TikTok Ads help page.

For a post, TikTok publishes no pixels. As an estimate, use the Meta numbers for Reels ads on Instagram Reels. They are not a TikTok rule.

Make the film

Start a 9:16 page

bin/vawe new my-tiktok --request "a 15 second hook with captions" --aspect 9:16 --length 15

The page gets <meta name="aspect" content="9:16"> and <meta name="duration" content="15">.

Look at the frame

bin/vawe still films/my-tiktok/page.html --at 2 --aspect 9:16

Compare the PNG in out/still/ with the TikTok template for ads, or with the estimate above for posts.

Draft, then ship

bin/vawe dev films/my-tiktok/page.html --aspect 9:16
bin/vawe ship films/my-tiktok/page.html --aspect 9:16
bin/vawe ship --status --wait

ship needs a fresh critique and the owner approval. See Ship. The final is an .mp4, a format on both TikTok lists.

Many films from one page

To render one film per row of data, read Batch from data. ship takes --param key=value and puts it in the file name.

Limits

  • A final is 60 fps. ship has no fps flag. TikTok publishes no frame rate on the pages read.
  • The ad page lists a bitrate of 516 kbps or more. ship encodes with -crf 16 and sets no bitrate, so check the bitrate of a final before you upload.
  • Loudness: TikTok publishes no target. See Loudness and the mix.

From the blogHTML video aspect ratio: 16:9, 9:16 and 1:1

On this page