TikTok ad safe zones vs burned-in captions: anchor_ratio

TikTok says its safe zone varies with ratio, caption length and format. Sume caption design has an anchor_ratio to move a burned-in line.

4 min readSume
All posts

TikTok's ad specification page says safe zones depend on aspect ratio, caption length and format, and it links downloadable safe-zone files. It prints no numbers for them. Sume burns captions with design.placement.anchor_ratio, the centre of the line as a fraction of the frame height, so you can move captions out of the area the file marks as covered.

The method

Download the safe-zone file from TikTok's page for your ratio. Burn a test caption on a still or a short clip. Lay the file over the frame. If the line sits in a marked area, change anchor_ratio and render again. Do not copy a fraction from a blog post, including this one: the file is the authority, and the right value changes with the format and caption length that TikTok lists as variables.

What you can change per request

The caption doc lists these override groups. Sume validates each field and a value outside its range returns a 400, so a wrong override fails at request time and you do not pay for a bad render.

Caption design override groups in Sume's Video captions doc, with the TikTok safe-zone variables (read 2026-10-06)
GroupFieldsUse for safe zones
placementanchor_ratio, landscape_anchor_ratioMove the line up or down
typographyfont_size_ratio, safe_width_ratio, stroke_width_pxShrink text, keep it off the edges
phrasingmax_words, max_chars, pause_secondsShorter lines (caption length is a TikTok variable)
{
  "video_url": "https://example.com/clean.mp4",
  "style": "black-outline",
  "design": { "placement": { "anchor_ratio": 0.6 } }
}

A test frame before the batch

Burn the caption on one representative clip, not on all fifty. Take a frame from the output, open it next to TikTok's safe-zone file for the same ratio, and see whether the line is clear. If you run several languages, test the longest line you expect, since the page names caption length as a factor.

Phrasing matters as much as position. max_words, max_chars and pause_seconds set how much text sits on screen at once. Shorter chunks are easier to keep clear of the areas the file marks, and they read faster on a phone. Raise safe_width_ratio or font_size_ratio only after the first test shows room.

A caption job is cheap to repeat: the doc lists $0.20 per accepted job for clips up to 60 seconds, so two or three test renders cost less than one failed batch. Confirm the live price in the catalog before you build a budget around it.

Limits

The 0.6 above is an example of the field's shape, not a recommendation. The doc defines the value as a fraction of frame height but this post did not test which direction is up, so check one render. The punch and tiktok-green styles do not support design, so if you need to move the line, pick another style such as slam or black-outline. The caption doc also notes the job needs a public HTTPS video URL.

For why on-screen text from the model itself is a poor substitute, see readable on-screen text from Kling 3 and Seedance 2.5.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume