2026-10-20 · 5 min read
Captions for short ads: burn the hook into the creative
A 15 second ad on TikTok or Reels is usually watched with the sound off. That means your hook line, the sentence that decides whether someone keeps watching, has to be readable, not just audible. Platform auto-captions are unreliable and easy to toggle off, so performance teams burn captions into the creative itself. This post covers how to do that for every variant you test, without opening a video editor.
The variant problem
Paid social runs on iteration. Ten hooks, three aspect ratios, a few lengths: captioning each export by hand is where testing velocity goes to die. caption.sh takes the video and an options object, and returns the MP4 with word-timed karaoke captions rendered into the pixels. The same options produce the same look on every variant, which is exactly what a creative test needs.
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/ad-variant-b7.mp4","options":{"font":"luckiest-guy","size":"large","position":0.8}}'Styles that hold attention
The karaoke highlight, each word lighting up as it is spoken, gives the eye something to chase, which is the whole game on a muted feed. caption.sh bundles 18 open source fonts, and the outline or backdrop decoration keeps text legible over busy product footage. Position is a fraction of the frame height, so you can park captions above the platform buttons: 0.8 works well on 9:16.
One options object, every crop
Size is set as a preset or a fraction of frame height, not pixels, so the same options object captions your 9:16, 1:1 and 16:9 exports with consistent proportions. Every caption group is laid out inside a 90 percent width margin and the renderer shrinks text until it fits the line limit, so a long product name never overflows the frame on any crop. Pricing is prepaid at $0.10 per minute of video, which puts a 15 second ad at two and a half cents. The full option list is at caption.sh/docs.