Automatically translate subtitles using various translation engines and AI services.

Right-click selected lines in the grid and choose Auto-translate to translate only those lines. With no original column open, the dialog offers Translate in place (do not create original): the translated text replaces the selected lines’ text instead of turning the subtitle into the original. Otherwise the whole subtitle becomes the original, as with a whole-file translation.
The shortcut Auto-translate selected lines (no prompt, use last engine/languages) (no default key; set it in Shortcuts) starts right away with the last used engine and languages; the dialog only shows progress and closes when done. Until a translation has been run once, it prompts as usual.
clients5.google.com) before giving up; a block is on Google’s side and is usually lifted again after minutes to a few hoursllama-server for you. See Using your own model to run a model we don’t ship, such as TranslateGemma 27Bchat/completions endpoint (vLLM, KoboldCpp, a llama.cpp server on another machine, cloud providers, …); configure URL, model, prompt, and an optional API keyThe models offered in the download list are deliberately kept small enough to run on an ordinary machine (mostly under 8 GB, the largest around 12 GB). You are not limited to them — larger models such as TranslateGemma 27B work fine if your hardware can handle them.
Two ways to use one:
.gguf into the models folder. Copy the file into Subtitle Edit’s llama.cpp/models
folder and it appears in the model list marked (custom). Subtitle Edit recognizes the model
family from the file name and starts llama-server with the right chat template, so a
self-downloaded TranslateGemma or Qwen quant behaves like the curated ones.llama-server you started yourself (the default is http://localhost:8080/v1/chat/completions).
Subtitle Edit then does no model management at all.Be aware of what a bigger model costs. TranslateGemma 27B at Q4_K_M is roughly a 16 GB download and needs about 20 GB of VRAM to run fully on the GPU — a 24 GB card in practice. Google’s own figures put the 12B ahead of the Gemma 3 27B baseline, so the 12B in the download list is already a strong choice and the jump to 27B buys less than the size difference suggests.
Every local-LLM engine (LM Studio, Ollama, llama.cpp, OpenAI Compatible API) has a
prompt you can edit in the engine’s Settings dialog (gear button). {0} is replaced with the source language and {1} with the target
language, both as English names.
By default the prompt is an instruction and Subtitle Edit appends the subtitle text after it — what a chat-tuned model expects.
Some translation models are trained on a completion format instead: the text has to sit inside the
prompt, followed by a cue for the target language. Write {2} where the text belongs and Subtitle
Edit sends the filled-in template as one block instead of appending anything. For example
MiLMMT-46 (Xiaomi’s 46-language
translation model) is trained on:
Translate this from {0} to {1}:
{0}: {2}
{1}:
The trailing {1}: cue is what makes such a model translate at all — without it, it tends to echo
the source. Set the model’s temperature to 0 where the engine offers it. Curated MiLMMT models in
the llama.cpp engine’s download list carry this prompt already; for LM Studio, Ollama or
your own OpenAI-compatible server (vLLM, KoboldCpp, …), paste it into the engine’s prompt field.
Headless runs take the same prompt via seconv --translate-prompt:<text|file> — see
Auto-translate (command line).
Depending on the selected engine, you may need to provide:
The gear button opens the engine’s Settings dialog with Line merge, Delay in seconds between requests, Max bytes per request and, for engines that have one, the Prompt text with a reset-to-default button. Do not translate lines in music symbols (♪ … ♪) leaves song lines untranslated.
The llama.cpp advanced, Ollama advanced and LM Studio advanced engines translate in batches with context, synopsis, and glossary support — see Advanced Local Engines.
The translation grid shows the original text alongside the translated text. You can edit individual translations before accepting them.
Engines keep the source’s line breaks and often add their own, so a two-line source can come back as three short lines that no long-line tool would touch. After translating, a row with more lines than the maximum number of lines or a line longer than the single-line limit is un-broken and auto-broken again with the target language’s rules. Rows that already fit are left alone, and lyrics (♪) and CJK targets are never re-broken.
Switching engine to compare results keeps the source and target languages you picked, as long as the new engine offers them - only then does the default derived from the subtitle take over.
| Key | Action |
|---|---|
| Escape | Close / Cancel |
| F1 | Show help (default key, changeable) |