Bilingual subtitle test files (BookTranslator, 2026-11-04). Free to reuse. sample-source.srt 12-cue English dialogue written for this test sample-es-bilingual.srt English + Spanish output of the writer code described below sample-zh-bilingual.srt English + Simplified Chinese, same method sample-ar-bilingual.srt English + Arabic, same method (Arabic lines wrapped in U+2067/U+2069) sample-es-translation-on-top.srt the Spanish file after `flip` sample-es-own-timing.srt a Spanish track with its own timing (splits two cues, adds one) sample-es-merged-by-time.srt sample-source + own-timing after `merge` sample-es-two-colors.vtt the Spanish file after `to-vtt` sample-vtt-settings.vtt VTT with cue settings, a voice span and a NOTE sample-vtt-settings-bilingual.vtt its output: settings and NOTE gone frame-*.webp screenshots of Chromium's built-in rendering, 1280x720, using a VTT copy of the SRT files check_bilingual_subs.py check, flip, merge, to-vtt (Python standard library) How the bilingual files were made: BookTranslator's subtitle parse and write code (apps/api/src/translation/plugins/subtitle, commit 94102c66d) was run locally. Logging, file paths, the preview cutoff and character-encoding detection (UTF-8 only here) were stubbed out, and translate() was skipped, so the translation pipeline did not run and no model was called. The Spanish, Chinese, Arabic and French lines were written by hand and passed to write() as the translations, so these files test the file structure, not translation quality. Line counts in a real job depend on how the model breaks the translated cue. Checker: `check` counts characters with tags removed, entities decoded and spaces included. Default limits are 42 characters per line, 20 characters per second, and 3 lines on screen. The 3-line default is our own choice. Set the target's limits with --max-target-line and --max-target-cps. Not tested: VLC, mpv, TVs, and hardcoding, because the ffmpeg build we used has no subtitles filter.