YouTube Shorts series: pin one caption look for every episode
Shorts series run from 2026-09-23. Omit style and Sume picks one from the text. Pin style, font and design in one config so ten episodes look the same.

To keep every episode of a YouTube Shorts series looking the same, send the same style and design object on every Sume caption call, and never rely on the default. If you omit style, Sume chooses one from the caption text: slam for Latin, black-outline for Korean. A bilingual season would then change look between episodes without a single line of your code changing. Keep one config, and send it with every request.
The reason to care now is that YouTube Shorts series (seasons, episodes, custom thumbnails and sequential playback) started rolling out on 2026-09-23 on web, mobile and TV, according to the Orthotropy October update (read 2026-10-06). A series is watched in order, so a changing caption style from one episode to the next is easy to see.
What to pin
The video-captions endpoint takes a public HTTPS video_url, a style (slam, punch, tiktok-green, korean-ad, black-outline, weight-shift, highlight, pill-karaoke, clip-wipe or editorial-emphasis), an optional Hangul font and a design object that overrides colors, typography, placement, phrasing and motion for one request. language is only a hint for speech-to-text. It never picks the style or font. Two styles, punch and tiktok-green, ignore design entirely, so do not choose them if you need a tuned look.
One config, every episode
import json, os, urllib.request as u
LOOK = {"style": "black-outline",
"design": {"colors": {"active": "#22D3EE"}, "placement": {"anchor_ratio": 0.72},
"phrasing": {"max_words": 4}}}
EPISODES = ["https://example.com/s1e1.mp4", "https://example.com/s1e2.mp4"]
def submit(i, url):
body = {"video_url": url, **LOOK}
req = u.Request("https://api.sume.com/v1/video-captions", data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json", "Idempotency-Key": f"season1-caption-v1-{i}"})
return json.load(u.urlopen(req))["data"]
for i, url in enumerate(EPISODES, start=1):
job = submit(i, url)
print(f"episode {i}:", job["request_id"], job["status_url"])What can fail, and how to change the look later
Check the same few things on every episode. A number outside a documented range gives a 400 at request time, so a wrong look fails before it is paid for. Korean text on a Latin style returns 400 caption_hangul_text_latin_style; Hangul faces on a Latin style return 400 caption_font_requires_hangul_style. And when the spoken words are not the words you want shown, send script_text: Sume keeps the speech-to-text timings and aligns your text to them.
Changing the look later is a restyle, not a re-transcription. Send source_caption_id and the new style, and Sume reuses the source video and word timings. The price does not change, because a restyle is still a render. See restyle ad captions without a second transcription.
| Episodes (60 s or less) | Caption jobs | Cost at $0.20 per job | With one full restyle |
|---|---|---|---|
| 10 | 10 | $2.00 | $4.00 |
| 24 | 24 | $4.80 | $9.60 |
| 52 | 52 | $10.40 | $20.80 |
Budget
The $0.20 is per accepted standalone caption job for a video of at most 60 seconds, from the video-captions docs and the pricing page (read 2026-10-06). Check the live figure at GET /v1/catalog before you budget a large batch. If a season is also voiced by TTS, render the voice first and caption the finished clip; the order is covered in AI voiceover for Shorts.
A good habit for a season is a golden episode. Caption episode one, look at it on a phone, and fix the look in LOOK before you submit the other episodes. The mistakes that matter on a small screen are placement (the line sits behind the Shorts interface), line length (a phrase that wraps to three lines) and contrast (the accent color vanishes on a bright scene). Each is one field in design, and a restyle of a single episode costs the same $0.20 as a new job.
Keep the config in version control next to the episode list. When a season two starts, copy the file, change the accent color and nothing else, and the family resemblance is built in. If a later episode is in Korean, use the Hangul styles and a Hangul font in a second config rather than patching the first, because Hangul text on a Latin style is rejected.
Sources
Related posts
More in Media tools
- How to assemble a long-form video with the Timeline 1.0 API
Timeline 1.0 renders one audio spine plus 1 to 200 ordered video slots into one MP4. Every URL must be Sume-hosted; the plan preflight is unbilled.
- How to burn captions onto a video with the Sume API
Send a public HTTPS video URL to POST /v1/video-captions and get a job-backed captioned video, timed by speech-to-text or by text you supply.
- How to extract frames from a video with the Sume API
POST /v1/video-frames returns stills at the times you name from one Sume-hosted clip, as durable images at source size. The call is unbilled.
- How to use Sume's Timeline compose and Timeline audio APIs
Timeline compose puts one still and one video in the same frame as a new MP4. Timeline audio joins or splits Sume-hosted audio into reusable files.
Written by Sume