2026-10-17 · 3 min read

Keeping captions inside the safe zone on vertical video

A vertical video never plays alone. TikTok draws a right rail of buttons and a description block over the bottom, Reels and Shorts do the same with their own chrome, and anything rendered under those areas is hidden behind them. Captions that look fine in the raw MP4 can end up unreadable in the feed.

What the platform UI covers

  • The bottom strip: description text, account name, sound title and, on Shorts, the title and progress bar. Plan on losing the bottom 15 to 20 percent of the frame.
  • The right rail: like, comment, share and profile buttons stacked on top of the video.
  • The very top: status bar and tab labels. Less of a problem, but captions glued to the top edge still feel cramped.

The practical safe zone for 9:16 is the middle band of the frame: clear of the bottom strip, off the right rail, below the status bar.

Place captions by fraction, not pixels

caption.sh places the caption block with the position option. It takes top, center or bottom, or a number from 0 to 1 measured as a fraction of the video height. A value around 0.7 puts the captions above the bottom UI on every major short-form platform.

curl -X POST https://api.caption.sh/v1/videos \
  -H "Authorization: Bearer $CAPTION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source_url":"https://cdn.example.com/clip.mp4","options":{"position":0.7,"size":"medium"}}'

The same fraction thinking applies to width. The renderer lays words out inside a 90 percent width margin, so lines stay off the right rail without you measuring anything.

One payload, every aspect ratio

Because size and position are fractions of the video's own dimensions, one options payload produces proportional captions on a 9:16 short, a 1:1 feed post or a 16:9 landscape clip. The layout also clamps the caption block so it never bleeds past the top or bottom edge, whatever position you send.

Check it on a real phone

Fractions get you into the safe zone, but platforms move their chrome around. Render one representative clip, watch it inside the actual app you are posting to, and nudge position once. After that the same value works for the whole batch.

The full options reference, including size presets and the clamping behavior, is at caption.sh/docs.

Back to all articles