Skip to content

Subtitle Health

A subtitle file can be present and still be wrong: it shows literal \N instead of line breaks, claims to be German while the text is English, was saved in the wrong encoding so accented characters turn into mojibake, or runs so fast no one can read it. These defects don’t stop a file from being downloaded — they only surface when you actually watch.

Subtitle Health scans your subtitles for these content defects and repairs the safe ones, across both embedded tracks and on-disk sidecars. Every fix writes a full, reversible backup, so nothing is ever changed beyond recovery.

Nine checkers flag problems across formatting, language, encoding and timing. Representative findings:

FindingWhat it means
Leaked escape codesLiteral \N / \h (ASS escape sequences) bled into the visible text instead of rendering as a line break or hard space.
Language mislabelThe sidecar’s language token (or the embedded track’s language tag) doesn’t match the language the text is actually written in.
Broken encodingThe file isn’t valid UTF-8 — Windows-1252 / Latin-1 bytes produce mojibake (ä for ä).
Format mismatchThe extension says one format but the bytes are another (e.g. an .srt that’s really ASS markup).
Timing errorsOverlapping cues, negative durations, or out-of-order timestamps.
High CPSCharacters-per-second so high the line can’t be read in the time it’s shown — flagged as an advisory, not auto-fixed.
Control charactersStray control bytes or a misplaced BOM inside the cue text.

Each finding has a matching fixer where a safe automatic repair exists. A few — such as a high-CPS warning — are advisories: Sublarr surfaces them but leaves the decision to you.

The same checks run at three scopes, so you can work at whatever level fits:

  • Per episode — expand an episode to its track panel in the Library. Each defect shows inline next to the affected track or sidecar.
  • Per series — a bulk scan on the series detail page checks every episode at once.
  • Library-wideSettings → System → Subtitle Health scans the whole library and lists every finding, grouped by type.

A scheduled sweep can run library-wide on a timer and auto-apply the safe fixes (see Scheduler). Advisories are never auto-applied.

Every finding offers contextual actions:

ActionEffect
FixApplies the matching repair (re-encode to UTF-8, unescape \N, correct the language tag, …). Writes a reversible backup first.
Strip trackFor an embedded defect, removes that subtitle stream from the container via remux.
Open in editorJumps to the Subtitle Editor for manual work.
Re-align to audioFor a sidecar timing finding, runs a sync against the audio directly from the finding.
DismissAccepts an advisory (e.g. a deliberate high-CPS karaoke track) so it stops being reported.

Embedded vs. sidecar — no duplicate noise

Section titled “Embedded vs. sidecar — no duplicate noise”

When a clean sidecar of a given language exists, defects on the embedded track of the same language are automatically suppressed — you’ve already got a good copy, so Sublarr stops nagging about the version you no longer watch. Likewise, an advisory you dismiss (such as an accepted high-CPS warning) stays dismissed and doesn’t reappear on the next scan.

SettingWhereEffect
Subtitle Health sweepSchedulerEnables the recurring library-wide scan and which safe fixes it auto-applies.
Library-wide scanSettings → System → Subtitle HealthOn-demand full-library scan with per-finding actions.

New in 1.10.0, off by default.

An optional advisory pass that asks a language model to judge a downloaded subtitle — is the translation coherent, does it read as machine output, are lines garbled? The verdict appears as a badge on the History entry. It is advisory only: nothing is deleted, replaced or re-downloaded because of it.

SettingDefaultEffect
ai_quality_enabledoffMaster switch for the check.
ai_quality_model(empty)Model to ask. Empty falls back to the configured translation backend’s model.
ai_quality_max_cues30How many cues are sampled per subtitle. Higher means a better judgement and a larger prompt.

Configure it under Settings → System → Subtitle Health.