Skip to content

Jellyfin extracted subtitle cache

Fetched: 2026-07-02

Sources:

  • Jellyfin configuration docs: https://jellyfin.org/docs/general/administration/configuration/
  • Jellyfin backup and restore docs: https://jellyfin.org/docs/general/administration/backup-and-restore/
  • Jellyfin issue #12427: https://github.com/jellyfin/jellyfin/issues/12427
  • Subtitle Extract issue #35: https://github.com/jellyfin/jellyfin-plugin-subtitleextract/issues/35
  • Longhorn trim docs: https://longhorn.io/docs/1.12.0/nodes-and-volumes/volumes/trim-filesystem/

Local finding

Current Jellyfin docs split data/config/cache paths. In this deployment the live pod reports:

  • JELLYFIN_DATA_DIR=/config
  • JELLYFIN_CONFIG_DIR=/config/config
  • JELLYFIN_CACHE_DIR=/cache

The persistent library database, normal metadata, plugin config, intro-skipper data, and trickplay data are on the config PVC, not the cache PVC. Live evidence after the cache reset:

  • /config/metadata: 13 GiB
  • /config/data/jellyfin.db: 606 MiB
  • /config/data/trickplay: 991 MiB
  • /config/data/introskipper: 166 MiB
  • /config/data/subtitles -> /cache/subtitles

The live Jellyfin pod had roughly 63 GiB in /cache/subtitles. The chart symlinks /config/data/subtitles to /cache/subtitles, so Jellyfin's extracted subtitle store lives on the cache PVC rather than the config PVC.

The cache PVC was still a longhorn-home volume with the home recurring-job group, so those rebuildable extracted subtitles were snapshotted and backed up. Longhorn reported jellyfin-cache-home at roughly 67.6 GiB actual size on k8s-worker-home-1, making it the largest contributor to the home-1 disk pressure issue.

Decision

Do not pre-extract every embedded subtitle with the Subtitle Extract plugin. Jellyfin can still extract subtitles on demand, and Open Subtitles stays installed for external subtitle lookup.

apps/media/jellyfin now:

  • stops installing the Subtitle Extract plugin
  • removes any existing Subtitle Extract* plugin directory during pod start
  • prunes /cache/subtitles during pod start
  • declares the cache PVC with longhorn-home-no-backup for future recreates

Existing bound PVCs keep their immutable storage class until an intentional cache PVC reset. The startup prune plus a Longhorn filesystem trim was attempted first for the existing volume; the live reset was only used after Longhorn retained the old cache blocks through a removed snapshot still present in the active chain. That reset discards cache-only artifacts, not the core Jellyfin metadata stored under /config.