All apps · 0 apps
jellyplex-watched
Docker app from Luigi311's Repository
Overview
Readme
View on GitHubJellyPlex-Watched
Sync watched between jellyfin, plex and emby locally
Description
Keep in sync all your users watched history between jellyfin, plex and emby servers locally. This uses file names and provider ids to find the correct episode/movie between the two. This is not perfect but it works for most cases. You can use this for as many servers as you want by entering multiple options in the .env plex/jellyfin section separated by commas.
Features
Plex
- [x] Match via filenames
- [x] Match via provider ids
- [x] Map usernames
- [x] Use single login
- [x] One way/multi way sync
- [x] Sync watched
- [x] Sync in progress
- [ ] Sync view dates
Jellyfin
- [x] Match via filenames
- [x] Match via provider ids
- [x] Map usernames
- [x] Use single login
- [x] One way/multi way sync
- [x] Sync watched
- [x] Sync in progress
- [x] Sync view dates
Emby
- [x] Match via filenames
- [x] Match via provider ids
- [x] Map usernames
- [x] Use single login
- [x] One way/multi way sync
- [x] Sync watched
- [x] Sync in progress
- [x] Sync view dates
Configuration
Full list of configuration options can be found in the .env.sample
Installation
Baremetal
Create a .env file similar to .env.sample; fill in baseurls and tokens, remember to uncomment anything you wish to use (e.g., user mapping, library mapping, black/whitelist, etc.). If you want to store your .env file anywhere else or under a different name you can use ENV_FILE variable to specify the location.
Run
uv run main.pyENV_FILE="Test.env" uv run main.py
Docker
Build docker image
docker build -t jellyplex-watched .or use pre-built image
docker pull luigi311/jellyplex-watched:latest
With variables
Run
docker run --rm -it -e PLEX_TOKEN='SuperSecretToken' luigi311/jellyplex-watched:latest
With .env
Create a .env file similar to .env.sample and set the variables to match your setup
Run
docker run --rm -it -v "$(pwd)/.env:/app/.env" luigi311/jellyplex-watched:latest
Troubleshooting/Issues
Jellyfin
- Attempt to decode JSON with unexpected mimetype, make sure you enable remote access or add your docker subnet to lan networks in jellyfin settings
Configuration
- Do not use quotes around variables in docker compose
- If you are not running all 3 supported servers, that is, Plex, Jellyfin, and Emby simultaneously, make sure to comment out the server url and token of the server you aren't using.
Contributing
I am open to receiving pull requests. If you are submitting a pull request, please make sure run it locally for a day or two to make sure it is working as expected and stable.
License
This is currently under the GNU General Public License v3.0.
Install jellyplex-watched on Unraid in a few clicks.
Find jellyplex-watched 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.
Categories
Download Statistics
Total Downloads Over Time
Related apps
Explore more like this
Explore allDetails
luigi311/jellyplex-watched:latestRuntime arguments
- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Do not mark any shows/movies as played and instead just output to log if they would of been marked. Change this to False after confirming that everything works as expected.
- Default
- True
Print additional logging information
- Default
- False
Debugging level, 'info' is default, 'debug' is more verbose
- Default
- INFO
If set to True then the script will only run once and then exit
- Default
- False
How often to run the script in seconds
- Default
- 3600
Log file where all output will be written to
- Default
- /tmp/log.log
Mark file where all shows/movies that have been marked as played will be written to
- Default
- /tmp/mark.log
Timeout for requests for Jellyfin and Emby in seconds
- Default
- 300
Generating guids is a slow process, so setting this to False is a way to speed up the process by using the location only, useful when using same files on multiple servers
- Default
- True
Generating locations is a slow process, so setting this to False is a way to speed up the process by using the guid only, useful when using different files on multiple servers
- Default
- True
Max threads for processing
- Default
- 2
Map usernames between servers in the event that they are different. Syntax: JSON map.
Map libraries between servers in the event that they are different. Syntax: JSON map.
Blacklist libraries that should be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
Whitelist libraries, everything not listed will be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
Blacklist library types such as Movies/TV Shows that should be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
Whitelist library types such as Movies/TV Shows, everything not listed will be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
Blacklist users that should be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
Whitelist users, each user not listed will be excluded from processing. Lists are applied individually, in an OR relationship. Syntax: comma separated values for multiple options
- Default
- True
- Default
- True
- Default
- True
- Default
- True
- Default
- True
- Default
- True
- Default
- True
- Default
- True
- Default
- True
URL of the plex server, use hostname or IP address if the hostname is not resolving correctly. Syntax: comma separated values for multiple servers
- Default
- https://localhost:32400
Recommended over username/password. Token is faster to connect as it is direct to the server instead of going through the plex servers. See: https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/ Syntax: comma separated values for multiple servers
Recommend using PLEX_TOKEN instead. If not using plex token then use username and password of the server admin along with the servername. Syntax: comma separated values for multiple servers
Recommend using PLEX_TOKEN instead. Syntax: comma separated values for multiple servers
Recommend using PLEX_TOKEN instead. Syntax: comma separated values for multiple servers
Skip hostname validation for ssl certificates. Set to True if running into ssl certificate errors. Currently only applies to Plex.
- Target
- SSL_BYPASS
- Default
- False
Jellyfin server URL, use hostname or IP address if the hostname is not resolving correctly. Syntax: comma separated values for multiple servers
- Default
- http://localhost:8096
Jellyfin api token, created manually by logging in to the jellyfin server admin dashboard and creating an api key. Syntax: comma separated values for multiple servers
Emby server URL, use hostname or IP address if the hostname is not resolving correctly. Syntax: comma separated values for multiple servers
- Default
- http://localhost:8097
Emby api token, created manually by logging in to the Emby server admin dashboard and creating an api key. Syntax: comma separated values for multiple servers