Stars: 152
Forks: 5
Pull Requests: 222
Issues: 59
Watchers: 10
Last Updated: 2022-12-17 10:33:32
Sync play state between different media servers.
License: MIT License
Languages: PHP, Dockerfile, Shell, HTML
This tool primary goal is to sync your backends play state without relying on third party services,
out of the box, this tool support Jellyfin
, Plex
and Emby
media servers.
portable
format.un-matched
or mis-matched
items.title
or item id
.yaml
or json
.create your docker-compose.yaml
with the following content:
version: '2.3'
services:
watchstate:
image: ghcr.io/arabcoders/watchstate:latest
# To change the user/group id associated with the tool change the following line.
user: "${UID:-1000}:${GID:-1000}"
container_name: watchstate
restart: unless-stopped
# For information about supported environment variables visit FAQ page.
# works for both global and container specific environment variables.
environment:
- WS_TZ=UTC # Set timezone.
ports:
- "8080:8080" # webhook listener port.
volumes:
- ./data:/config:rw # mount current directory to container /config directory.
Create directory called data
next to the docker-compose.yaml
file.
After creating your docker compose file, start the container.
$ mkdir -p ./data && docker-compose pull && docker-compose up
Note: It's really important to match the user:
to the owner of the data
directory, the container is rootless, as
such it will crash if it's unable to write to the data directory. It's really not recommended to run containers as root,
but if you fail to run the container you can try setting the user: "0:0"
if that works it means you have permissions
issues. refer to FAQ to troubleshoot the problem.
After starting the container you should start adding your backends and to do so run the following command:
Note: to get your plex token, please visit this plex page to know how to extract your plex token. For jellyfin & emby. Go to Dashboard > Advanced > API keys > then create new api keys.
$ docker exec -ti watchstate console config:add [BACKEND_NAME]
This command is interactive and will ask you for some questions to add your backend.
To edit backend settings run
$ docker exec -ti watchstate console config:manage [BACKEND_NAME]
To import your current play state from backends that have import enabled, run the following command:
$ docker exec -ti watchstate console state:import -v
This command will pull your play state from all your backends. To import from specific backends use
the [-s, --select-backends]
flag which accept comma seperated list of backend names. For example,
$ docker exec -ti watchstate console state:import -v --select-backends 'home_plex,home_jellyfin'
Now that you have imported your current play state enable the import task by adding the following environment variables
to your docker-compose.yaml
file WS_CRON_IMPORT=1
. By default, we have it disabled. for more environment variables
please refer to Environment variables list.
Note: Even if all your backends support webhooks, you should keep import task enabled. This help keep healthy relationship. and pick up any missed events.
To export your current play state to backends that have export enabled, run the following command
$ docker exec -ti watchstate console state:export -v
This command will export your current play state to all of your export enabled backends. To export to
specific backends use the [-s, --select-backends]
flag which accept comma seperated list of backend names. For
example,
$ docker exec -ti watchstate console state:export -v --select-backends 'home_plex,home_jellyfin'
Now that you have exported your current play state, enable the export task by adding the following environment variables
to your docker-compose.yaml
file WS_CRON_EXPORT=1
. By default, we have it disabled. for more environment variables
please refer to Environment variables list.
Take look at this frequently asked questions page. to know more about this tool and how to enable webhook support and answers to many questions.