Skip to content

Settings — Translation

This page configures what translates and how. Translation is off by default and stays a Beta feature — turn it on once you’ve verified your backend works, and start with a small batch before unleashing it on a whole library.

SettingDefaultValuesEffect
Translation enabledofftoggleMaster switch. When off, every translation control in the UI is hidden or disabled.
Source languageenISO 639-1Language Sublarr translates from.
Target languagedeISO 639-1Language Sublarr translates to.
Source language nameEnglishstringUsed in LLM prompts (some prompts work better with full names).
Target language nameGermanstringSame.

When the target language is missing, Sublarr translates it from whatever source subtitle actually exists — not only from the configured Source language. It looks across embedded tracks, external sidecars, and (optionally) provider search, detects the real language of the source it picks, and translates in that direction. This means an item that only has, say, a Japanese or Chinese subtitle is still translated to your target, instead of failing with “no source found”.

The behaviour is controlled on Settings → Automation → Post-Processing:

SettingDefaultValuesEffect
Translate From Any Source LanguageontoggleOn: translate from any available source, preferring the profile/default Source language, then any other non-target language. Off: strict — only the preferred Source language is used.
Provider Multi-Language Source SearchontoggleOn: when nothing local is found, provider search tries several candidate source languages (more matches, more API usage). Off: providers are searched only for the preferred source. Only applies while Translate From Any Source Language is on.

The ordered candidate source-language list (used for the provider search and to break ties when several local sources exist) is configurable via the /config API (auto_translate_source_languages); it defaults to the most common subtitle source languages. A language profile’s own Source language is honoured as the preferred direction for items assigned to it.

Sublarr ships 12 backends. Configure each in the Backends tab; the pipeline picks the active one per translation job. Cost tracking, queue dashboard, per-backend concurrency, and context-windowing are shared across all backends.

BackendTypeSelf-HostedAPI keyBest for
OllamaLLMyesnoFull local control, custom prompts, GPU acceleration.
OpenAI-compatibleLLMbothyesGPT-4 endpoints or local OpenAI-shaped servers.
OpenAI ChatGPTLLM APInoyesGPT-4o / GPT-4-turbo via the official endpoint.
Anthropic ClaudeLLM APInoyesHigh-quality long-context translation.
Google GeminiLLM APInoyesFast Gemini 2.x with native multilingual support.
DeepSeekLLM APInoyesCost-effective, strong on Chinese.
MistralLLM APInoyesEU-hosted LLM, GDPR-friendly.
DeepLNMTnoyesBest quality for European languages.
Google TranslateNMTnoyesBroad coverage, fast, paid per char.
LibreTranslateNMTyesoptionalSelf-hosted, privacy-focused.
Azure TranslatorNMTnoyesEnterprise NMT with regional endpoints.
MyMemoryNMTnooptionalFree tier; useful as zero-cost fallback only.

Each backend’s edit panel exposes:

FieldEffect
EnabledBackend toggle. Disabled backends aren’t tried.
Endpoint URLOverride default endpoint. Useful for self-hosted or proxied installs.
API key / tokenCredential. Multi-key pool supported via API Keys.
ModelWhich model the backend should use (LLM-only). Pre-populated from the backend’s known good defaults.
Price (per 1M units)Used for cost tracking. Defaults reflect public pricing at the time the backend was added — verify against your invoice.
ConcurrencyHow many parallel jobs this backend can serve.
TestSends a fixed sample translation; reports success and latency.

Configure backup backends in case your primary fails. Example:

  1. Primary: Ollama (local, fast, free).
  2. Fallback 1: DeepL (cloud, high quality, fast).
  3. Fallback 2: LibreTranslate (self-hosted backup).

A failed primary triggers automatic re-queue on the next backend in the chain. The job ID stays the same so cost tracking, queue position, and notifications all carry through.

SettingDefaultValuesEffect
Concurrent translations41–16Per-Sublarr-instance cap on simultaneous jobs.
Batch size (cues per request)155–50Cues per LLM call. Larger = fewer round trips, but bigger context — risk hitting the model’s limit.
Request timeout (s)9030–600Per-LLM-call timeout.
Max retries31–10Retries on transient failure before giving up.
Backoff base (s)51–60First retry waits this; doubles each subsequent.
Temperature0.30.0–2.0LLM sampling temperature. Lower = more deterministic; higher = more creative.

When translating an episode, Sublarr can include adjacent cues (and optionally past episodes’ summaries) in the prompt for coherence:

SettingDefaultValuesEffect
Use episode contextofftoggleInject previous episode context into the prompt for LLM backends.
Lookback cues100–50Number of previous cues.
Lookahead cues50–50Number of upcoming cues.
Use series contextofftoggleCarry a brief series summary across episodes (Beta).
Context episodes11–5How many previous episodes to draw context from.
Auto-glossaryofftoggleAutomatically extract a per-series glossary from existing translated subtitles.
FieldDefaultEffect
Prompt templateempty (auto-generated)Override the system prompt. Empty = Sublarr generates from source/target language names. Use only if you know what you’re doing.

The Cost & Memory tab on this page jumps to the dedicated Cost & Memory view — per-job spend log, translation memory hit rate, and TM management.

The Queue tab opens the Translation Queue — live job dashboard with cancellation and retry. Use it to watch jobs in flight and to debug the few that fail.

The recommended starting setup if you have a capable host:

  1. Install Ollama on the host that runs Sublarr (or a reachable LAN host).
  2. Pull a general-purpose model: ollama pull qwen2.5:14b-instruct (or llama3.1:8b-instruct for lighter machines).
  3. In Sublarr: Settings → Translation → Backends → Ollama.
  4. Set Endpoint URL to your Ollama instance (default http://localhost:11434).
  5. Set Model to the pulled model name.
  6. Click Test — the response should be the test translation.