TikTok safe zone captions: anchor_ratio and safe_width_ratio on Sume
TikTok's ad page says safe zones vary by orientation and caption length and ships reference files. Sume's caption design fields move the line; ranges listed.

TikTok's in-feed ad page (read 2026-10-08) says safe-zone dimensions depend on video orientation, caption length and additional formats, and it provides downloadable reference files for left-to-right and right-to-left languages. It does not print the numbers on the page we could fetch, so this post gives none. What it does give is how to move burned-in captions on Sume once you have measured the zone from TikTok's files: placement.anchor_ratio and typography.safe_width_ratio.
The two fields
Sume's video captions docs list a design block that overrides a style for one request. Two groups matter for a safe zone. The docs describe placement.anchor_ratio as the center of the caption line as a fraction of the frame height. The valid ranges come from the caption renderer in the repo.
| Field | Meaning | Range |
|---|---|---|
| placement.anchor_ratio | Center of the line, as a fraction of frame height | 0.05 to 0.95 |
| placement.landscape_anchor_ratio | Same, for landscape frames | 0.05 to 0.95 |
| typography.safe_width_ratio | Width the caption may use | 0.3 to 1 |
| typography.font_size_ratio | Text size relative to the frame | See docs |
From TikTok's file to a ratio
Open TikTok's reference file for your orientation and read how far from the top the unsafe band ends and how far from the bottom the next one starts. Divide a pixel position by the frame height to get a ratio. For a 1920 pixel tall frame, a caption centered 1344 pixels from the top has anchor_ratio 1344 / 1920 = 0.7. For a 1080 pixel wide frame where the zone allows 864 pixels of width, safe_width_ratio is 864 / 1080 = 0.8. These two numbers are examples of the arithmetic, not TikTok's values.
{
"video_url": "https://example.com/clean.mp4",
"style": "black-outline",
"design": {
"placement": { "anchor_ratio": 0.7 },
"typography": { "safe_width_ratio": 0.8 }
}
}Limits of this route
The captions route reads a public HTTPS video URL and needs audible speech unless you author cues. A style of punch or tiktok-green does not take a design block. Use a style such as black-outline, or leave the style off and let the text pick one. The docs also mark standalone captions as a compatibility route and point new caption work at HyperFrames, so check the docs page for the current route before you build on it. The ad caption field rules are in this post.
A workflow that avoids guessing
Start with TikTok's reference file for your orientation, and mark the unsafe bands on a frame of your video. Convert the first safe pixel row and the last safe pixel row to fractions of the frame height. Put the anchor between them, and leave room for a second caption line, since the page says the zone depends on caption length.
Burn one test clip, look at a frame from the result, and adjust anchor_ratio in steps of 0.02 to 0.05. Because a style with a bad design number is rejected at request time with a 400, a wrong value fails before you pay for a render. The ranges are small enough that a 0.05 to 0.95 anchor covers the whole frame.
- Measure from TikTok's files, not from memory.
- Test a short clip first.
- Change one number at a time.
Sources
Related posts
More in Media tools
- TikTok trending search: 10 or 50 results, both $0.10
A Sume trending-videos search is $0.10 per accepted call whatever the limit. In production the limit runs 1 to 50 with a default of 10. Fields and a curl.
- Black Friday supercut in Timeline: 12 segments vs auto chunking
Timeline accepts up to 200 video slots. A single strategy is refused above 12 segments (render_strategy_unsafe); auto chunks the render past 12.
- Timeline refuses more than 8 chained fades: countdown cut fix
Sume Timeline 1.0 refuses more than 8 adjacent fades with too_many_chained_transitions. Alternate hard cuts and fades in a 12-clip holiday countdown.
- Timeline audio concat fails on mono plus stereo: channel mismatch
Joining a mono and a stereo file in Sume timeline audio returns audio_parts_channel_mismatch. Detach both as mono, or match layouts first.
Written by Sume