Overr-Syncerr

Overr-Syncerr

Docker app from grtgbln's Repository

Overview

Webhook handler for subtitle management with Bazarr, Radarr, and Sonarr integration. Supports both Overseerr and Jellyseerr.

Overr-Syncerr

This project was created to improve my Plex experience—and that of my users—by giving them just enough control to solve one of the biggest challenges: subtitles. Over time, it has expanded to include features like automatic media labeling, better translations, and, most recently, personalized audio preferences. Now, users can have their preferred language, codec, and channel count automatically selected, ensuring the best audio experience while reducing unnecessary transcoding. While this project is designed around my setup, you're welcome to adapt it to fit your own needs!

Overr-Syncerr is a script designed to automate the management of subtitle synchronization issues across your media library. By leveraging Overseerr and Jellyseerr's built-in webhook and issue reporting functionality, this script allows users to specify the subtitles they need synchronized. It seamlessly integrates with your existing services such as Sonarr, Radarr, and Bazarr, making the entire process of subtitle synchronization more automated.

Overr-Syncerr_logo

GitHub Release GitHub Repo stars Docker Pulls GitHub commit activity GitHub Issues or Pull Requests GitHub Issues or Pull Requests Wiki

Getting Started

Refer to the official Overr-Syncerr docs at - https://wiki.overrsyncerr.info

IMPORTANT

Enable Overseer Request Monitor AFTER you've run the script to generate subtitle and audio preferences jsons to ensure that the correct settings get applied.

Current Features

  • Full Sonarr and Radarr Integration: Easily fetch series and movie details from Sonarr and Radarr.
  • Bazarr Integration: Synchronize subtitles using Bazarr, including support for 4K instances and HI subtitles.
  • Language Mapping: Map keywords to language names based on webhook messages.
  • Subtitles: Send 'sync', 'translate' and manual adjustment requests to Bazarr (using the 1st audio track + GSS).
  • Auto-reply & resolve issue: Automatically reply to the reported subtitle issue in Overseerr/Jellyseerr upon subtitles synchronization and mark it as resolved.
  • Sync all episodes in season: Submit all subtitles in a specific language to be synced by selecting 'All Episodes' when submitting the subtitle issue.
  • User Audio Preference: set preffered audio track based on language, codec and channel per user automatically once media becomes available
  • User Subtitle Preference: set preffered subtitle track based on language, codec, forced or hearing impaired properties per user automatically once media becomes available
  • Auto-labelling: Option to label available requested media with the username of the requester in Plex (inspired by Plex Requester Collection)
  • Translate Subs Using GPT: Option to use OpenAI GPT instead of Google Translate for subtitle translation OpenAI API Key Required

Known issues (WIP)

  • If you've encountered and issue or have a suggestions, you're welcome to post about it :)

To-Do

  • Integrate Mediux for automatic poster and title card application based on favourite creators (NO ETA)

Contributors

Big thank you to the people helping furher develop this project!


kirsch33

💻

nwithan8

💻

Install Overr-Syncerr on Unraid in a few clicks.

Find Overr-Syncerr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Overr-Syncerr Review the template variables and paths Click Install

Requirements


        Enabling Kometa integration will attempt to communicate with a Kometa Docker container running on the same machine.
        
        May require additional configuration. See details: https://github.com/gssariev/overr-syncerr/blob/main/.env.example
    

Download Statistics

16,259
Total Downloads
569
This Month
680
Avg / Month

Total Downloads Over Time

Loading chart...

Details

Repository
gsariev/overr-syncerr:latest
Last Updated2025-12-29
First Seen2025-04-26

Runtime arguments

Network
bridge
Privileged
false

Template configuration

Webhook PortPorttcp

Container Port: 8089

Target
8089
Default
8089
Value
8089
Bazarr - URLVariable

URL to Bazarr API

Target
BAZARR_URL
Default
http://IP_ADDRESS:PORT/api
Value
http://IP_ADDRESS:PORT/api
Bazarr - API KeyVariable

API key for Bazarr

Target
BAZARR_API_KEY
Bazarr (4K) - URLVariable

URL to Bazarr API for 4K

Target
BAZARR_4K_URL
Default
http://IP_ADDRESS:PORT/api
Value
http://IP_ADDRESS:PORT/api
Bazarr (4K) - API KeyVariable

API key for Bazarr (4K)

Target
BAZARR_4K_API_KEY
Radarr - URLVariable

URL to Radarr API

Target
RADARR_URL
Default
http://IP_ADDRESS:PORT/api
Value
http://IP_ADDRESS:PORT/api/v3
Radarr - API KeyVariable

API key for Radarr

Target
RADARR_API_KEY
Radarr (4K) - URLVariable

URL to Radarr API for 4K

Target
RADARR_4K_URL
Default
http://IP_ADDRESS:PORT/api/v3
Value
http://IP_ADDRESS:PORT/api/v3
Radarr (4K) - API KeyVariable

API key for Radarr (4K)

Target
RADARR_4K_API_KEY
Sonarr - URLVariable

URL to Sonarr API

Target
SONARR_URL
Default
http://IP_ADDRESS:PORT/api/v3
Value
http://IP_ADDRESS:PORT/api/v3
Sonarr - API KeyVariable

API key for Sonarr

Target
SONARR_API_KEY
Sonarr (4K) - URLVariable

URL to Sonarr API for 4K

Target
SONARR_4K_URL
Default
http://IP_ADDRESS:PORT/api/v3
Value
http://IP_ADDRESS:PORT/api/v3
Sonarr (4K) - API KeyVariable

API key for Sonarr (4K)

Target
SONARR_4K_API_KEY
Sonarr - Episode TrackingVariable

Enable to use Sonarr webhook; disables TV logic from being executed via Media Available

Target
SONARR_EP_TRACKING
Default
false|true
Sonarr - Track Delay TimeVariable

Delay (in seconds) before triggering audio and subtitle track preferences to ensure that Plex metadata is refreshed

Target
SONARR_TRACK_DELAY_SECONDS
Default
10
Value
10
Overseerr - URLVariable

URL to Overseerr (or Jellyseer) API

Target
OVERSEERR_URL
Default
http://IP_ADDRESS:PORT/api/v1
Value
http://IP_ADDRESS:PORT/api/v1
Overseerr - API KeyVariable

API key for Overseerr (or Jellyseer)

Target
OVERSEERR_API_KEY
Plex - HostVariable

URL to Plex instance

Target
PLEX_HOST
Default
http://IP_ADDRESS:PORT
Value
http://IP_ADDRESS:PORT
Plex - TokenVariable

Plex token for authentication

Target
PLEX_TOKEN
Plex - Client IDVariable

Plex client ID for authentication

Target
SERVER_CLIENTID
Plex - Anime Library NameVariable

Name of the Plex library for anime.

Target
ANIME_LIBRARY_NAME
Plex - Movie Library NameVariable

Name of the Plex library for movies.

Target
MOVIES_LIBRARY_NAME
Plex - TV Library NameVariable

Name of the Plex library for TV shows.

Target
SERIES_LIBRARY_NAME
AI - EnableVariable

Enable ChatGPT integration.

Target
ENABLE_GPT
Default
false|true
AI - ModelVariable

Model to use for ChatGPT integration.

Target
MODEL_GPT
Default
gpt-4o
Value
gpt-4o
AI - API KeyVariable

API key for OpenAI.

Target
OPEN_AI_API_KEY
AI - Movie Path MappingVariable

Provide the locations Bazarr stores subtitles (relative to Bazarr)

Target
MOVIE_PATH_MAPPING
AI - Movie PathPath

Path to the movie directory on the host machine.

Target
/mnt/movies
AI - TV Path MappingVariable

Provide the locations Bazarr stores subtitles (relative to Bazarr)

Target
TV_PATH_MAPPING
AI - TV PathPath

Path to the TV directory on the host machine.

Target
/mnt/tv
Kometa - EnableVariable

Enable Kometa integration.

Target
ENABLE_KOMETA
Default
false|true
Kometa - Config PathPath

Path to the Kometa config directory.

Target
/kometa/config
Kometa - Enable Media Available HandlingVariable

Enable if you want to use auto-label, Kometa overlays or audio preference

Target
ENABLE_MEDIA_AVAILABLE_HANDLING
Default
false|true
Use User-Specified Audio PreferencesVariable

Enable if you want to use user specific audio preference

Target
ENABLE_AUDIO_PREF
Default
false|true
Monitor Partially-Available RequestsVariable

Enable if you want to add label or set audio to media that's partially available

Target
MONITOR_REQUESTS
Default
false|true
Request Monitoring IntervalVariable

Interval (in seconds) to check for partially-available requests

Target
CHECK_REQUEST_INTERVAL
Default
10
Value
10
Language MapVariable

Map of language keywords. See example: https://github.com/gssariev/overr-syncerr/blob/1e68f8bd55bfd7aaeb65192f5ba539dbf2802a6f/docker-compose.yml#L68

Target
LANGUAGE_MAP
Default
{}
Value
{}
Sync WordsVariable

List of keywords to identify sync issues. See example: https://github.com/gssariev/overr-syncerr/blob/1e68f8bd55bfd7aaeb65192f5ba539dbf2802a6f/docker-compose.yml#L69

Target
SYNC_KEYWORDS
Default
[]
Value
[]
Add Label WordsVariable

List of keywords to identify requests for adding labels. See example: https://github.com/gssariev/overr-syncerr/blob/1e68f8bd55bfd7aaeb65192f5ba539dbf2802a6f/docker-compose.yml#L70

Target
ADD_LABEL_KEYWORDS
Default
[]
Value
[]
Config PathPath

Path to the config directory.

Target
/config
Default
/mnt/user/appdata/overr-syncerr/config
Value
/mnt/user/appdata/overr-syncerr/config
Kometa - Internal Config PathVariable

Internal path to the Kometa config directory.

Target
KOMETA_CONFIG_PATH
Default
/kometa/config
Value
/kometa/config
AI - Max Request SizeVariable

Maximum request size in bytes.

Target
MAX_REQUEST_BYTES
Default
2000
Value
2000
AI - Max TokensVariable

Maximum number of tokens.

Target
MAX_TOKENS
Default
4000
Value
4000
AI - Chunk OverlayVariable

Number of overlapping chunks.

Target
CHUNK_OVERLAP
Default
2
Value
2
AI - Request DelayVariable

Delay between requests in seconds.

Target
REQUEST_DELAY
Default
2
Value
2
Internal PortVariable

Internal webhook port. Not recommended to change.

Target
PORT
Default
8089
Value
8089
Docker socketPathrw

Path to the Docker socket (for triggering Kometa)

Target
/var/run/docker.sock
Default
/var/run/docker.sock
Value
/var/run/docker.sock