Skip to content

v2.4.0 — LLM subtitle translation (49 languages), Nova-3 ISO language tagging, collapsible UI

Choose a tag to compare

@tylerbcrawford tylerbcrawford released this 27 Jun 03:53

Added

  • LLM-powered subtitle translation. Translate a generated SRT into one or more target languages and write language-tagged sidecars (.spa.srt, .fre.srt, and so on) that Plex, Jellyfin, and Emby auto-detect. Timing is copied from the source verbatim so translations stay in sync, and the show's keyterms are passed to the model as a glossary. Available in the web UI Translate panel via POST /api/translate.
  • 49 target languages for translation, written with the same media-server language tags used for transcription output.
  • Ollama as a fourth LLM provider for keyterm generation and translation. Set OLLAMA_HOST to a local Ollama server (OpenAI-compatible endpoint) to translate fully offline at no cost; the cost estimate reports $0.00. The cloud providers (Anthropic, OpenAI, Google) are unchanged.
  • Gujarati (gu) and Thai (th) in the transcription language dropdown. Gujarati is a
    Nova-3 language that was not previously offered; Thai was already supported by the
    backend but was missing from the menu.

Changed

  • Refreshed the web UI: Keyterms, Transcription Settings, and Translate are now collapsible sections (click-to-open, collapsed by default) so the page stays focused on the primary transcribe flow — a big improvement on mobile. Each section's open/closed state and the light/dark theme are remembered across reloads. The Translate panel is also a self-contained card that surfaces its cost estimate up front (instead of hiding it behind the settings gear) and shows provider status as the same colored dot used elsewhere. ("Translate Subtitles" shortened to "Translate".)
  • Profanity filter is now a single on/off toggle. The previous Off/Tag/Remove options all
    produced the same request because Deepgram's profanity_filter is boolean (it masks
    with asterisks), so Tag and Remove behaved identically. Saved Tag/Remove preferences are
    treated as on.
  • Numerals formatting now also applies in Multi-language mode, following Deepgram's
    expansion of numerals to the Nova-3 multilingual languages (Subgeneratorr already sent
    numerals regardless of language; the control's tooltip now notes this).
  • No change was required for Deepgram's May 2026 nova-3-medical batch model upgrade
    (improved medical-term recognition, ~97.20% KRR): Subgeneratorr already uses
    model=nova-3-medical, so existing medical jobs benefit automatically.

Fixed

  • Sixteen languages that transcribe correctly but were tagged with the neutral .und.srt
    suffix now produce proper ISO 639-2/B sidecars (for example .tam.srt, .ben.srt,
    .srp.srt) so Plex, Jellyfin, and Emby can identify them: Belarusian (bebel),
    Bengali (bnben), Bosnian (bsbos), Croatian (hrhrv), Gujarati (guguj),
    Hebrew (heheb), Kannada (knkan), Macedonian (mkmac), Marathi (mrmar),
    Persian (faper), Serbian (srsrp), Slovenian (slslv), Tagalog (tltgl),
    Tamil (tatam), Telugu (tetel), and Urdu (ururd). The same mapping gap had
    blocked these as translation targets (HTTP 400 "Unsupported target language(s)").
  • Translation no longer drops cues when the model returns blank or empty output for a line;
    the source text is kept so the translated SRT always has the same cue count and timing as
    its source.
  • The Celery worker now has its own Docker healthcheck (celery inspect ping) so an
    unhealthy worker surfaces in docker compose ps and orchestration instead of failing
    silently.