A comprehensive browser-based and desktop tool that leverages Large Language Models (LLMs) to translate SRT subtitle files and automatically validate the output for common errors. Built specifically to create high-quality, script-accurate subtitles using your existing LLM subscriptions (Gemini, ChatGPT, Claude, etc.) via CLIProxyAPI.
| Input SRT in English | Output of translated SRT in Tenglish |
|---|---|
![]() |
![]() |
[!NOTE] Screenshots are taken from Psych, an American detective comedy-drama television series created by Steve Franks for USA Network.
My mom loves to watch movies and TV shows, but she isn't fluent in English. Properly translated subtitles are the perfect way for her to enjoy and understand the content. When I set out to find a subtitle translator powered by mainstream LLMs, I hit several roadblocks.
Existing solutions either required expensive paid API keys, charged high per-token rates (I tested commercial options like GPT Subtitler, but the pricing was unsustainable for my regular usage), or completely lacked the ability to detect and automatically fix the subtle formatting errors LLMs often introduce. Furthermore, I wanted a way to leverage my existing Gemini subscription rather than paying separately for API usage—which this tool achieves via CLIProxyAPI.
While Large Language Models are incredibly powerful and can translate subtitles in minutes, they often introduce subtle errors without strict oversight, such as:
This tool automates the entire translation workflow, validates the output, and provides one-click fixes for common LLM errors—ensuring the subtitles are perfect.
This is the successor to my original SRT Subtitle Validator, which could only validate pre-translated files. The new SRT Translator & Validator combines translation and validation into a single, streamlined workflow with automatic error correction.
Translation Modes
Translation Capabilities
Validation
Automatic Error Correction
User Experience
You can download the latest native installer for your operating system (Mac, Windows, or Linux) from the GitHub Releases page.
If you are using the downloadable native desktop application, it comes with several built-in enhancements:
@Config configured templates. Raw text templates are not supported in the desktop app to ensure a strict and automated workflow.Desktop Application Requirements
If you are downloading the native .dmg, .exe, or .AppImage files, please ensure your system meets the following requirements:
sudo apt install libwebkit2gtk-4.1-0).CLIProxyAPI Installation
CLIProxyAPI is required to access your Gemini subscription through an API interface.
For installation instructions, please visit: https://help.router-for.me/introduction/quick-start.html
LLM Authentication
Depending on which model you want to use (Gemini, Claude, OpenAI, etc.), you will need to authenticate the CLIProxyAPI.
For step-by-step instructions on authenticating different models, please go to the CLIProxyAPI Provider Configuration and click on the respective model name in the sidebar to view the correct commands.
Example for Gemini:
1. Run the login command:
cliproxyapi --login
If you're an existing Gemini Code user:
cliproxyapi --login --project_id <your_project_id>
8085Configuration
Create or edit your config.yaml file.
For more information, please visit: https://help.router-for.me/configuration/basic.html or use the provided example config.yaml.
[!IMPORTANT] The
api-keysvalue inconfig.yamlmust match the API Key field in the web application. The keydummyis used by default if the field is left blank.
If installed via Homebrew:
/opt/homebrew/opt/cliproxyapi/bin/cliproxyapi --config ~/path/to/your/config.yaml
If built from source:
./cli-proxy-api --config /path/to/your/config.yaml
The server will start on http://localhost:8317 by default.
Open this link SRT Translator & Validator in any modern web browser.
http://localhost:8317/v1/chat/completionsgemini-2.5-proconfig.yaml (e.g., 1234567)By default, the tool allows: - Basic Latin (English alphabet) - Latin Supplement (é, ñ, etc.) - Special characters (quotes, em-dash, line breaks)
To add your target language:
1. Type the language name in the search bar (e.g., "Telugu", "Arabic", "Tamil")
2. Click the suggested script to add it
3. Or add custom Unicode ranges: U+0C00-U+0C7F or single characters: U+0C00
You can also remove any script (except special characters and line breaks) by clicking the × button.
[!CAUTION] Update your translation prompts to remove any mention of timestamps, as the model no longer sees or generates them.
Write your translation instructions in the prompt field. You can use markdown formatting and switch to Markdown View to preview how it renders.
For reusable prompts with dynamic values, create a template file with optional configuration:
.txt file with placeholders using {{Variable Name}} syntaxBasic Template Example:
You are translating subtitles for {{Show Name}}, Season {{Season}}, Episode {{Episode}}.
Translate from {{Source Language}} to {{Target Language}}.
**Style Guidelines:**
- Use {{Formality Level}} language
- Keep character names in {{Name Language}}
[Rest of your translation instructions...]
When imported, you'll be prompted to fill in: Show Name, Season, Episode, Source Language, Target Language, Formality Level, and Name Language.
Configured Template Example (Advanced):
For even more automation, add a @Config header to pre-configure settings:
@Config
{{http://localhost:8317/v1/chat/completions}}
{{gemini-3-flash-preview}} {{gemini-3.1-pro-preview}}
{{Basic Latin}} {{Latin Supplement}} {{Telugu}}
{{TV show}} {{Psych}} {{2006}} {{, S01E01}} {{, (Title)}}
You are translating subtitles for the {{Enter movie or TV show}} {{Movie/TV Show Name}} ({{Release Year}}){{Season/Episode Number}}{{Episode Title}}.
[Rest of your translation instructions...]
Configuration Format:
- Line 1: @Config marker
- Line 2: API endpoint URL
- Line 3: Two model Names for Language Detection and Translation
- Line 4: Allowed script ranges (language scripts or Unicode ranges)
- Line 5: Default values for placeholders in the prompt body (must match the order and number of unique placeholders)
- Line 6: Empty line (required separator)
- Lines 7+: Your prompt
$ claude mcp add SRT-Subtitle-Translator-Validator \
-- python -m otcore.mcp_server <graph>