Brand-color captions: punch and tiktok-green skip design
Sume's docs say punch and tiktok-green read none of the design tokens. To change a caption color per request, use slam or a Hangul style. Token groups.

If you want to change the caption color for one request, do not use punch or tiktok-green. The Sume docs say those two styles do not support design and render on a path that reads none of its tokens. Use slam for Latin text, or a Hangul style for Korean text, and set the color in design.colors. A standalone caption job costs $0.20 whichever style you use.
What design can change
A style is a set of design tokens, and design overrides some of them for one request. Sume merges each field over the value of the style, so one key changes one thing. The docs list five groups.
| Group | Fields |
|---|---|
| colors | base, active, stroke, accent, accent_deep, card (null shows no card) |
| typography | base_weight, active_weight, active_scale, font_size_ratio, safe_width_ratio, stroke_width_px |
| placement | anchor_ratio, landscape_anchor_ratio (center of the line as a fraction of frame height) |
| phrasing | max_words, max_chars, pause_seconds |
| motion | enter_seconds, exit_seconds, emphasis_in_seconds, emphasis_out_seconds |
Which styles read it
The docs name two exceptions and give one working example. This table does not claim more than that.
| Style | Reads design? | Note |
|---|---|---|
| slam | yes (the docs say a selected slam keeps its own gold tint, which design.colors.active replaces) | Latin default |
| black-outline | yes (the docs example) | Hangul default |
| punch | no | renders on a path that reads none of these tokens |
| tiktok-green | no | renders on a path that reads none of these tokens |
Ask for a color, pay nothing for a typo
Colors must be hex, rgb() or rgba(), or transparent. Sume rejects other CSS syntax and does not put it into the render document. A number outside its documented range returns 400. The docs state the reason: an incorrect look fails at request time, and you do not pay for an incorrect render. So a name such as cyan is rejected before any money moves. Use #22D3EE.
curl -X POST https://api.sume.com/v1/video-captions \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: slam-brand-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/example/clean.mp4",
"style": "slam",
"design": { "colors": { "active": "#22D3EE" } }
}'Where the line between presets and tokens falls
The docs describe design as a way to change the look of a style for one request without changing the style name. That is why the brand-color route is slam with design.colors.active, not a custom name. The reverse also holds: if your brand color is already close to the preset, punch and tiktok-green save you a request field, but they cannot be tuned afterwards. If a client later asks for a different emphasis color, you will need to switch the style, not just the token.
Phrasing is also a token group. phrasing.max_words, max_chars and pause_seconds set how many words appear at once, so a Latin style with a design override gives you control of both color and pace. The presets give you neither.
A decision rule
- Need an exact brand color on Latin captions:
slamplusdesign.colors.active. - Want the preset
punchortiktok-greenlook unchanged: use it as is, and know that no token changes it. - Want to compare looks without paying for a second transcription: use
source_caption_idand restyle. - Korean text: pick a Hangul style, because Korean text on a Latin style returns
caption_hangul_text_latin_style.
Sources
Related posts
More in Media tools
- Remove backgrounds from 500 product photos: RMBG API cost and code
Sume RMBG 1.0 removes a background for $0.0225 per image regardless of size. Batch cost for 50 to 5,000 photos, the request body and a Python loop.
- RMBG costs the same for a 24 MP photo and a 0.5 MP thumbnail
Sume remove-background is $0.0225 per image regardless of size, so resizing before a cutout saves upload time, not money. 600-image arithmetic inside.
- script_alignment_mismatch: fixing a caption job with script_text
When script_text does not match the speech, a Sume caption job fails with script_alignment_mismatch or script_alignment_failed. Simplify the script or omit it.
- Timeline soundtrack duck_db: 0 to 20 dB, needs a real audio spine
Sume Timeline soundtrack.duck_db accepts 0 to 20 and returns duck_requires_audio_spine on silence. Use it with a voiceover spine; gain_db covers a static level.
Written by Sume