Upload an SRT file or paste subtitle lines directly. Subscene splits large files into parts, translates them in the background with AI, and hands back a clean, correctly timed subtitle file — no manual line-by-line editing.
From a single file to a full catalog, Subscene handles the batching, retries, and billing for you.
Every cue is translated with full context and timing preserved, using a purpose-built AI translation prompt.
Files with more than 10 cues are automatically split into parts and processed as background jobs, so large files never time out.
Issue an API key from your dashboard and submit, track, and download jobs programmatically — full reference at /docs.
Upload .srt, .vtt, .ssa/.ass, .scc, .sbv, or .ttml/.dfxp directly, batch multiple files at once, or submit cues manually — timing codes are always preserved exactly, and results come back in the same format you sent.
Plans and usage are managed through the Sensifai marketplace — see your plan and wallet balance right from your dashboard.
Track every job's progress part-by-part and download the finished file the moment it's ready.
Sign in & subscribe
Sign in with your Sensifai marketplace account and subscribe to Subscene if you haven't already.
Submit a file, a batch, or manual cues
Upload one or more subtitle files, or paste cues manually, and choose a source and target language.
Subscene translates in the background
Each job is split into parts and translated with AI — track progress live from your dashboard.
Download the result
Get back a translated subtitle file, with every cue's timing preserved exactly.
Every action available in the dashboard — submitting jobs, checking status, managing your subscription and API keys — is backed by the same versioned JSON API. Explore it interactively, try requests right from the browser, and copy ready-to-run snippets.
Open API referencecurl -X POST https://your-domain/api/v1/jobs \
-H "X-API-Key: ssk_live_..." \
-H "Content-Type: application/json" \
-d '{
"source_lang": "auto",
"target_lang": "en",
"subs": [{"id": 1, "text": "Hello there.",
"duration": "00:00:25,100 --> 00:00:27,500"}]
}'