Set preferred audio and subtitle languages per show; every new episode follows automatically
10K+
Set your preferred audio and subtitle languages per show, and Plex applies them to every new episode automatically.
Plex lets you choose which audio track and subtitle language to use when watching a show, but that choice only applies to the episode you're currently watching. If you start a series in Japanese audio with English subtitles, you have to set that manually on every single episode, and again when new episodes arrive.
plex-language-sync eliminates that friction. It watches your Plex playback in real time and automatically propagates your audio and subtitle language choices to every other episode in the same show. Set your preference once on any episode, and the rest of the series follows, the way Netflix does natively.
It also learns your habits. If you always watch anime in Japanese with English subtitles, brand new shows that arrive (via Sonarr or manual import) get those settings applied before you even press play.
Key features:
PLEX_TOKEN_FILE)coder/websocket and golang.org/x/sync (the rest are the project's own support modules). No Python runtime, no YAML config files, no notification frameworks; just a distroless container that does one job well.nonroot (UID 65532) on gcr.io/distroless/static-debian13 with no shell, no package manager, and no inbound network listener. The only outbound connections are to your Plex server and plex.tv.docker pull cplieger/plex-language-sync:latest
Also published to ghcr.io/cplieger/plex-language-sync with identical images and tags. Release versions are tagged vX.Y.Z alongside latest.
# Example compose for plex-language-sync. See the README for all configuration options and hardening.
services:
plex-language-sync:
image: ghcr.io/cplieger/plex-language-sync:latest
container_name: plex-language-sync
restart: unless-stopped
stop_grace_period: 20s # headroom over the ~10s shutdown drain so SIGKILL does not truncate the final cache save (see README)
# Override with PUID/PGID in .env; defaults to 1000:1000.
user: "${PUID:-1000}:${PGID:-1000}" # must own the /config host dir
environment:
PLEX_URL: "http://plex:32400" # full URL including scheme and port
PLEX_TOKEN: "your-plex-token" # admin token from Plex Web settings; or set PLEX_TOKEN_FILE to a Docker secret (see README)
UPDATE_LEVEL: "show" # show = entire show, season = current season only
UPDATE_STRATEGY: "all" # all = every episode, next = future episodes only
volumes:
- "/opt/appdata/plex-language-sync:/config"
GPL-3.0-or-later. See LICENSE. The image carries the license text of
every bundled component under /usr/share/licenses/.
Content type
Image
Digest
sha256:e8daa82ea…
Size
4.1 MB
Last updated
about 3 hours ago
docker pull cplieger/plex-language-sync