Move captions on an avatar video: design.placement and anchor_ratio
Inline avatar captions take no design overrides. To lift the caption line off the platform buttons, re-burn with the standalone job. Fields, price, example.
To move the captions on a finished avatar clip, run the clean MP4 through the standalone captions endpoint with a design.placement.anchor_ratio value. Inline captions on the avatar job take only style, optional font, a language hint and script_text, so they cannot be moved. The standalone job takes a design object whose placement group sets the vertical position of the caption line, and it costs a flat 0.20 dollars for videos up to 60 seconds per the docs.
What anchor_ratio means
The docs define anchor_ratio as the centre of the line as a fraction of the frame height, with landscape_anchor_ratio for landscape frames. The documentation does not give a recommended value, so test your own: render one clip, check it in the platform's preview, and adjust. Numbers outside a field's documented range return a 400 at request time, so a wrong value fails before any render is paid for.
curl -X POST https://api.sume.com/v1/video-captions \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: lift-captions-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/example/clean.mp4",
"style": "slam",
"design": { "placement": { "anchor_ratio": 0.6 } }
}'Which styles allow it
Per the docs, punch and tiktok-green do not support design, because they render on a path that reads none of the tokens. slam, the Latin default, does. Other groups in design are colors, typography, phrasing and motion, and each field is optional and merged over the style's own value.
Use the clean file
Do not caption the same clip twice. The avatar job returns a clean primary video_url even when caption burn fails; if you turned inline captions on, you already have captions in that file. To avoid doubling, create the avatar job with captions off, keep the clean video, and caption it once with the standalone job. Remember that the inline captions option is a separate add-on in the avatar estimate, while the standalone job is its own fixed charge, so you are choosing one or the other per clip.
Cost check
One avatar clip of 30 seconds at plus is 7.35 dollars, and one standalone caption job adds 0.20 dollars, so 7.55 dollars. At standard it is 5.72 dollars. If you re-style the same clip later, the restyle route reuses the word timings; the price does not change.
Why bother
The bottom of a 9:16 frame is crowded with platform controls. Moving the caption line up a little keeps the first words legible. Look at the clip inside the actual app before you decide.
Testing a placement
Render three versions with different anchor values using restyles, view each in the app you publish to, and keep the one that is not covered by buttons. Record the value in your pipeline settings so that every clip in the series uses the same one. Check portrait and landscape separately, because landscape frames have their own landscape_anchor_ratio field.
Sources
Related posts
More in Developers
- Music job metadata: stored on the Sume job, not sent to Lyria
The metadata object on a Sume music request is stored on the job and never sent to the provider. Tag takes by scene and brief with it.
- Show the product name the moment the voice says it: STT word times
Find when a voiceover says a word with Sume STT words[], then use that second as the next timeline video[].start. Offline Python script included.
- Nightly video batch after Sora: 6, 24, 48 or 120 jobs by Sume plan
A cron that submitted 30 Sora renders at once needs a new ceiling. Sume accepts 6 jobs on Free, 24 on Pro, 48 on Startup, 120 on Scale before queue_full.
- Node 22 script: create a Sume bulk queue and poll it to the end
Dependency-free Node 22 ESM script: POST a bulk queue from items.json, back off the poll, survive 429 and 503, and exit non-zero when any item failed.
Written by Sume