TikTok's 5-10 words per second text tip: check your caption cues

TikTok's creative best-practice page suggests 5 to 10 words per second when using text. A short Python check flags cues outside that range before you burn them.

5 min readSume
All posts

TikTok's page on creative best practices for performance ads says to use 5 to 10 words per second when using text. If you author Sume caption cues with start, end and text, a ten-line Python script can count words per second for each cue and flag the ones outside that range before you pay for a render.

What the TikTok page says

"Creative best practices for performance ads" (read 2026-10-05) recommends vertical 9:16 video at 720P or higher, keeping content inside the UI safe zone, a hook in the first 6 seconds and the content proposition in the first 3 seconds. For text it suggests 5 to 10 words per second.

The page treats that as guidance, not a rule that TikTok enforces, so use the check as a warning and not as a gate.

A cue checker

Sume's video captions endpoint accepts cues with text, start and end. That is the same shape this script reads, so you can run it on the list you are about to send.

import json, sys

cues = json.load(open(sys.argv[1]))  # [{"text","start","end"}, ...]
for c in cues:
    secs = c["end"] - c["start"]
    words = len(c["text"].split())
    rate = words / secs if secs > 0 else float("inf")
    flag = "" if 5 <= rate <= 10 else "  <-- outside 5-10"
    print(f'{c["start"]:6.2f}-{c["end"]:6.2f}  {rate:5.1f} w/s  {c["text"]}{flag}')

Reading the result

A low rate on a long cue means the line sits on screen for a while with few words. That can be fine for a call to action. A high rate means the viewer has to read fast; split the cue into two or shorten the words.

If you would rather let Sume split lines for you, the caption design.phrasing group has max_words, max_chars and pause_seconds. The docs note that the punch and tiktok-green styles do not support design.

Order of work

Write cues, run the check, fix the outliers, then send the request. A caption job is billed per accepted job; the docs quote $0.20 for videos up to 60 seconds and point to GET /v1/catalog for the live price.

  • Keep the first cue short so the hook lands.
  • Check the first 3 seconds against your offer.
  • Re-run the check after any trim that moves times.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume