Wyzie Subs
AI Subtitle Translation#
Wyzie can translate any subtitle into 80+ languages on the fly. Translations stream back as the model produces them, so playback can start within a second or two instead of waiting for the whole file. Results are cached for 30 days, so the second person who asks for the same translation gets it instantly.
Two Ways to Use It#
1. Pick a Language From a Search Response#
Every /search response now includes one extra entry per supported language with "ai": true and a url that points at /translate. Just treat the AI rows like any other subtitle row in your UI: when the user clicks one, fetch the URL.
{
"id": "ai-es",
"url": "https://sub.wyzie.io/translate?id=tt3659388&tk=...&target=Spanish",
"format": "srt",
"encoding": "UTF-8",
"display": "Spanish",
"language": "es",
"source": "ai",
"ai": true
}The tk param is a short-lived signed token derived from the API key you passed to /search. It lets the translate endpoint authorise the request without exposing the raw key in the URL. You do not need to compute it yourself; just use the URL as-is.
subs.translate.filter.p
const real = results.filter((r) => !r.ai);2. Call /translate Directly#
GET https://sub.wyzie.io/translate?id=tt3659388&target=Spanish&key=YOUR_KEY| Parameter | Example | Description |
|---|---|---|
| id | ?id=tt3659388 or ?id=286217 | TMDB or IMDB ID (required). |
| target | ?target=Spanish | Target language as its full English name (e.g. Spanish, Japanese, Brazilian Portuguese) (required). |
| season & episode | ?season=1&episode=4 | For TV. Both must be present together. |
| key | ?key=YOUR_KEY | Your API key. Use tk instead if you got the URL from /search. |
| tk | ?tk=<signed_token> | Signed token returned by /search. Equivalent to key, but does not expose the raw key. |
The response body is an SRT file streamed as text/plain; charset=utf-8. Useful response headers:
X-Cache: HIT-REDIS if served from cache, MISS if generated fresh.X-Source-Language: language of the subtitle the translator used as input.X-Target-Language: echo of your target param.X-Source-Provider: which scraper supplied the source subtitle.
How It Works#
-
Wyzie searches normal sources for an SRT subtitle, preferring English when available.
-
The SRT is split into chunks of 50 cues and translated sequentially. Each chunk is cached individually as it completes.
-
Output is streamed back to you cue-by-cue. Players that accept a streaming SRT body can start showing the first lines before the rest are done.
-
The complete translation is cached in Redis for 30 days, keyed by id, season, episode, and target.
Supported Target Languages#
80+ languages including all major European, Asian, African, and Middle Eastern languages. Pass the English name (Spanish, not es). The list is also returned as ai: true rows in any /search response, which is the canonical source of truth.
Limitations#
- AI translation needs an SRT source. Titles where every available subtitle is .ass, .vtt, or another format will return 404 No SRT found.
- Translation quality depends on the source subtitle. A poorly-timed or mistyped source produces a poorly-timed or mistyped translation.
- Some users may want to opt out of AI rows entirely. Filter on ai === false in your client.
- Translations are billed on cache hits too. Whether freshly generated or served from the 30-day cache, each /translate request costs 100 requests.
Example#
curl "https://sub.wyzie.io/translate?id=tt3659388&target=Japanese&key=YOUR_KEY"Same as a normal SRT download. Drop the body into any player that accepts SRT files.
