Translate SRT & VTT subtitles · 36 languages

Nothing
goes out
unchecked.

Free translators hand you machine output and hope. Every cue here passes thirteen structural checks — and whatever fails goes back to be fixed, then swept again by an editor pass.

No card · no subscription · 1 free episode
ep. 01 · reel 200:04:12,300

Не, не се притеснявай. Ще се справим.

Typical free tool

— Не, не се.

Second line dropped. Ends mid-clause.

ProvenSubs

— Не, не се притеснявай. Ще се справим.

Both lines kept. Timing untouched.

Picture · Arimo · Arial metricsUnstyled by decision
Reel 0100:00Why it exists

Four ways subtitles fail quietly

Each of these shipped once. Each is now a check that runs on every cue, and a test that fails if it ever comes back.

— Не, не се.

Dropped lines44% of cues

v1 sent cues as tab-separated text, and a subtitle line break ended the record. The second line of every multi-line cue was silently discarded. It is a regression test now.

Ако съпругът ми почине, сигурно щях да…

Truncated dialoguecut to fit

Trimming a line to fit the box deletes what someone said. Overflow is compressed instead, never sliced, and reported either way.

медленно и глубоко

Near-miss languageslooks right

Those are Russian words spelled entirely in letters Bulgarian also has. A character-set check waves them through. A wordlist does not.

[СМЯХ]

Invented wordsconfident nonsense

Sound labels resolve from a fixed table before the model ever sees them, so a whole class of confident nonsense never gets a chance to be written.

Reel 0202:40The gate

Every cue is inspected, and the failures come back

Thirteen checks run on every cue before it is delivered. Nothing here is a mock-up: these are six consecutive cues from a real English to German run, and the flag on the fourth is what the pipeline actually returned for it. Scroll to run the film.

Gate · 13 checksen → de · cue 1 of 6

Every cue is checked before it is delivered. The thirteen checks, in the order they run:

  1. not empty
  2. not echoed
  3. is the language
  4. no alien letters
  5. no stray latin
  6. no foreign words
  7. spans intact
  8. tags balanced
  9. numbers match
  10. length in range
  11. sentence closed
  12. fits two lines
  13. reading speed

In the example shown, six consecutive cues from a real English to German run pass through the gate. Five are kept. The fourth — source “Silas!”, translated “Silas, komm schon!” — fails the length check, because the translation is 300% of the source length: the model added words that were not said. It is sent back to be re-asked with that complaint attached, and the answer is only accepted if it validates no worse than what it replaces.

Reel 0305:12How a file moves
00:00
Drop the files

One episode or a season as a zip. The price is on screen before anything runs.

00:12
Translate in context

Cues travel as structured data in batches, never as line-delimited text that can lose a line.

02:40
Validate every cue

Thirteen structural checks. Whatever fails goes back to the model with the exact complaint attached.

04:05
Editor sweep

A final pass over register, idiom and name spelling across the whole file.

05:00
Download

Subtitles plus the quality report. Your upload is deleted the moment it is ready.

Reel 0407:48What is measured

Eight languages have a score. Twenty-eight do not.

This started as a tool for shipping Bulgarian subtitles, and its first regression test came from a real bug in its own first version. That is why Bulgarian leads the list and why the list is honest about the rest: every language runs the same pipeline and the same thirteen checks, but only 8 of the 36 have a human translation to be scored against.

Bulgarian
1,236 units48.94
Spanish
1,491 units50.05
Portuguese
1,997 units48.59
French
2,069 units48.63
German
1,420 units46.63
Italian
2,239 units50.70
Polish
2,012 units44.90
Russian
1,480 units39.72
Japanese
gold set covers 34% — too thin to score
Chinese
gold set covers 10% — too thin to score
Arabic
reference rejected — stores RTL in visual order
Korean
no reference sourced
Hebrew
no reference sourced
Turkish
no reference sourced
Thai
no reference sourced
Hindi
no reference sourced
Dutch
no reference sourced
Swedish
no reference sourced
Norwegian
no reference sourced
Danish
no reference sourced
Finnish
no reference sourced
Greek
no reference sourced
Czech
no reference sourced
Romanian
no reference sourced
Hungarian
no reference sourced
Ukrainian
no reference sourced
Indonesian
no reference sourced
Vietnamese
no reference sourced
Slovak
no reference sourced
Croatian
no reference sourced
Slovenian
no reference sourced
Catalan
no reference sourced
Persian
no reference sourced
Estonian
no reference sourced
Latvian
no reference sourced
Lithuanian
no reference sourced

The bars are how much human-translated reference we hold — 13,944 units across 8 languages — and the figure beside each is its chrF++ score against that reference. Those scores are what any change to the pipeline has to beat. They are not comparable between languages: the metric counts word n-grams, so a heavily inflected language is marked down for near misses an analytic one never pays for. Each number is a baseline for its own language and nothing else, which is why these rows are not ranked.

What each language's profile checks →

Reel 0509:30Pricing

Buy episodes, not months

The unit is an episode, so this is a ruler marked in episodes.

1 credit · 1 episode · ≈ 25 minutes · ≈ 20,000 characters · credits do not expire

Free$01 credit1 credit on signup
Season$108 credits$1.25 an episode
Series$2522 credits$1.14 an episode