20 product clips in Spanish and French: 40 caption jobs, $8.00
Index-Translate has a free public API, and Sume burns authored caption cues for $0.20 a job: 20 product clips in 2 languages is 40 jobs and $8.00.

Captioning 20 product clips in Spanish and French is 40 caption jobs at $0.20 each, which is $8.00 on Sume. The translation step costs nothing on Bilibili's listed free public API for Index-Translate-35B-A3B, so the Sume bill is the whole bill for this scenario.
The inputs are assumptions: 20 clips, one short on-screen line per clip, two target languages, one caption job per clip and language. Rates are the Video captions page and the Sume pricing page; the free API is described in the Index-Translate README, all read 2026-10-05.
What the batch costs
Each accepted caption job reserves and captures a flat price for clips of up to 60 seconds, so the total is the job count times the rate and does not depend on the length of the line.
| Step | Count | Rate | Total |
|---|---|---|---|
| Translate the line (Index-Translate public API) | 40 requests | Listed as free | $0.00 |
| Burn authored cues (Sume video captions) | 40 jobs | $0.20 per job | $8.00 |
| Batch total | $8.00 |
Why authored cues fit a product clip
A product loop often has no speech. Speech-to-captions fails on a silent clip with caption_no_speech, so send cues with text, start and end and Sume burns that text without running speech-to-text. The caption docs also say the default style for Latin text is slam, which has no Hangul glyphs, so Spanish and French need no style override.
- One
Idempotency-Keyper clip and language, such assku0412-es, so a retry does not create a second charge. - Keep product names out of the translation request or pin them with a glossary; see the glossary post linked below.
- Clips must be public HTTPS video URLs that Sume can fetch.
Run it
This translates each line and submits one caption job per clip and language, then prints the status URLs. Set SUME_API_KEY and edit the catalog.
import os, time, requests
API = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def translate(text, lang):
p = f"Translate the following English text into {lang}, output only the translation without explanation.\n\n{text}"
r = requests.post("https://index-translate.bilibili.com/v1/chat/completions", timeout=120,
json={"model": "Index-Translate-35B-A3B", "temperature": 0,
"messages": [{"role": "user", "content": p}]})
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"].strip()
CATALOG = {"https://cdn.example.com/mug.mp4": "Dishwasher safe. Ships free."}
for url, line in CATALOG.items():
for lang, code in (("Spanish", "es"), ("French", "fr")):
body = {"video_url": url, "style": "punch",
"cues": [{"text": translate(line, lang), "start": 0.5, "end": 5.5}]}
r = requests.post(f"{API}/v1/video-captions", timeout=60, json=body,
headers={**H, "Idempotency-Key": f"{url[-8:]}-{code}"})
r.raise_for_status()
print(lang, r.json()["data"]["status_url"])
Check before you scale
Run two clips first and read the burned text. Index-Translate is a model, so check prices, sizes and product names in the output before you submit the other 38 jobs; each rejected render is still a $0.20 job.
Sources
Related posts
More in Use cases
- 2-minute AI video from Kling 3: eight 15 s jobs, $16.80 or $25.20
Kling 4.0 says repeated extension to 2 minutes is coming. On Sume, eight chained kling-3 jobs of 15 s reach 120 s today: $16.80 silent, $25.20 with audio.
- UGC-style Black Friday ad in three parts: 4, 8 and 3 seconds for $2.18
TikTok's Black Friday guide wants a 3-5 s opener, a benefits middle and a direct close. Three Omni 720p clips (4+8+3 s), a stitch and captions cost $2.18.
- UK drip pricing: put the delivery fee in the Black Friday video price
The CMA wants the total price, mandatory fees included, from early advertising on. Build one video price card that shows it. Read 2026-10-05.
- Unboxing video music that stays under your voice: duck_db settings
Pick duck_db and gain_db on Sume Timeline so a $0.125 AI music bed dips under speech and returns between lines, plus the duck error to expect.
Written by Sume