A powerful, browser-based tool for translating SRT subtitle files using AI. Built for speed, accuracy, and ease of use.
Translating subtitles is tedious and expensive:
- Manual translation is slow and costly
- Generic AI translation loses subtitle timing and structure
- Existing tools don't handle the unique challenges of SRT format (split sentences, timing markers, etc.)
SRT Translator solves this by:
- Preserving all timestamps exactly as-is
- Using a smart marker system to maintain line-by-line correspondence
- Processing chunks in parallel for maximum speed
- Allowing custom instructions for domain-specific terminology
- Drag & Drop - Just drop your SRT file and go
- 100 Parallel Requests - Blazing fast translation
- Smart Chunking - Processes 20 subtitle blocks per request for optimal precision
- Marker-Based Alignment - Each subtitle block stays aligned with its timestamp
- Custom Instructions - Add context-specific translation rules (e.g., "Use informal 'sen' instead of formal 'siz'")
- Custom Model Support - Use any model available on OpenRouter
- Multi-Language - Translate to 15+ popular languages
- Real-Time Progress - Visual feedback for each chunk's status
- Retry with Backoff - Automatic retry on failures
- Open
index.htmlin your browser - Enter your OpenRouter API key
- Drop an SRT file
- Select target language
- Click "Translate"
- Download your translated SRT
| Setting | Default | Description |
|---|---|---|
| Model | google/gemini-3-flash-preview |
AI model for translation |
| Chunk Size | 20 | Number of subtitle blocks per API request |
| Parallel Requests | 100 | Maximum concurrent API calls |
Chunk Size: 20 is recommended for better precision. Smaller chunks mean:
- Less text drift between subtitle blocks
- More accurate timing alignment
- Slightly more API calls, but with 100 parallel requests it's still fast
For the best performance/cost balance, we recommend:
google/gemini-3-flash-preview
This model offers:
- Fast response times
- Excellent instruction following
- Great translation quality
- Cost-effective pricing
Other options:
google/gemini-2.5-flash-lite- Budget option, may have lower accuracy
Subtitles split sentences across multiple timed blocks. The problem? Languages have different structures.
English (SVO): "I love you" → Subject, Verb, Object
Turkish (SOV): "Seni seviyorum" → Object, Subject+Verb
When you translate subtitle blocks independently, the words end up in wrong timestamps:
English Subtitles: Turkish (Naive Translation):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[00:01] "I will not" → [00:01] "Bunu yapmayacağım" ← Too long!
[00:02] "do this." → [00:02] "" ← Empty!
The AI translated the full sentence in Block 1, leaving Block 2 empty. Now timing is broken.
We inject [B#] markers to create explicit boundaries:
Input to AI:
[B1] Hello and welcome to
[B2] a new episode. Today we have
[B3] Chris Titus with us.
AI Output:
[B1] Merhaba ve yeni bir
[B2] bölüme hoş geldiniz. Bugün yanımızda
[B3] Chris Titus var.
Each marker acts as an anchor:
[B1]content stays in Block 1's timestamp[B2]content stays in Block 2's timestamp- Sentence boundaries can span blocks - that's fine!
Chunks don't break at fixed sizes. We look for natural sentence endings (. ! ?) within the last 10 blocks:
Target: 20 blocks
Actual: 23 blocks (because sentence ends at block 23)
- Line Structure (Mandatory) - Each
[B#]stays on its own line - Natural Translation - Idiomatic, not word-for-word
- Word Count (Soft) - Similar length per line when possible
srt-translator/
├── index.html # Main UI entry point
├── README.md # Documentation
├── src/
│ ├── app.js # Core application logic
│ └── styles.css # Dark theme styling
└── assets/
└── ui.webp # UI screenshot
Turkish informal:
Türkçe çeviride "siz" yerine "sen" formu kullan.
Technical content:
Keep technical terms like "API", "SDK", "cache" untranslated.
YouTube tone:
Use casual, engaging language suitable for YouTube videos.
- Provider: OpenRouter
- API Key: Get one at https://openrouter.ai/keys
- Models: Any chat completion model on OpenRouter
- Your API key is stored locally in your browser (localStorage)
- SRT files are processed client-side
- Only subtitle text is sent to the AI API
- No data is stored on any server
Built with ❤️ for content creators who need fast, accurate subtitle translations.
