Project Icon

watchstate

开源跨平台媒体播放进度同步工具

WatchState是一个开源的媒体播放进度同步工具,支持Jellyfin、Plex和Emby等多个平台。它无需依赖第三方服务,可直接同步不同平台间的播放状态。主要功能包括WebUI管理界面、多平台同步、播放状态备份、webhook事件接收和未匹配项查找。WatchState可通过Docker部署,并提供WebUI和CLI两种配置管理方式。该工具为影视爱好者提供了一个统一管理多平台观看进度的解决方案。

WatchState

Build Status MIT License Docker pull

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.

Updates

2024-08-19

We have migrated the state:push task into the new events system, as such the old task state:push is now gone. To enable the new event handler for push events, use the new environment variable WS_PUSH_ENABLED and set it to true. Right now, it's disabled by default. However, for people who had the old task enabled, it will reuse that setting.

Keep in mind, the new event handler is more efficient and will only push data when there is a change in the play state. And it's much faster than the old task. This event handler will push data within a minute of the change.

PS: Please enable the task by setting its new environment variable WS_PUSH_ENABLED to true. The old WS_CRON_PUSH is now gone. and will be removed in the future releases.

2024-08-18

We have started migrating the old events system to a new one, so far we have migrated the progress and requests to it. As such, The old tasks state:progress and state:requests are now gone. To control if you want to enable the watch progress, there is new environment variable WS_SYNC_PROGRESS which you can set to true to enable the watch progress. It's disabled by default.

We will continue to migrate the rest of the events to the new system, and we will keep you updated.

Refer to NEWS for old updates.

Features

  • WebUI.
  • Sync backends play state (from many to many).
  • Backup your backends play state into portable format.
  • Receive Webhook events from media backends.
  • Find un-matched or mis-matched items.
  • Search your backend for title or item id.
  • Display and filter your play state. Can be exported as yaml or json.
  • Check if your media servers reporting same data via the parity command.
  • Track your watch progress via webhooks.

Install

create your compose.yaml with the following content:

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
        ports:
            - "8080:8080" # The port which will serve WebUI + API + Webhooks
        volumes:
            - ./data:/config:rw # mount current directory to container /config directory.

Create directory called data next to the compose.yaml file. After creating your docker compose file, start the container.

$ mkdir -p ./data && docker-compose pull && docker-compose up -d

[!IMPORTANT] 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.

[!NOTE] For Unraid users You can install the Community Applications plugin, and search for watchstate it comes preconfigured. Otherwise, to manually install it, you need to add value to the Extra Parameters section in advanced tab/view. add the following value --user 99:100. This has to happen before you start the container, otherwise it will have the old user id, and you then have to run the following command from terminal chown -R 99:100 /mnt/user/appdata/watchstate.

[!NOTE] To use this container with podman set compose.yaml user to 0:0. it will appear to be working as root inside the container, but it will be mapped to the user in which the command was run under.

Management via WebUI

After starting the container, you can access the WebUI by visiting http://localhost:8080 in your browser.

At the start you won't see anything as the WebUI is decoupled from the WatchState and need to be configured to be able to access the API. In the top right corner, you will see a cogwheel icon, click on it and then Configure the connection settings.

Connection settings

As shown in the screenshot, to get your API Token, run the following command

$ docker exec -ti watchstate console system:apikey 

Copy the random string in dark yellow, into the API Token field Make sure to set the API URL or click the current page URL link. If everything is set, then the Status field will turn green. and Status: OK will be shown, and the reset of the navbar will show up. Which hopefully means everything is ok.

To add a backend, click on the Backends link in the navbar, then + button. as showing in the following screenshot

Add backend

Fill the required information, if you get a green notification, then the backend is added successfully. If you get a red/yellow notification, Then most likely incorrect information was provided. You can check the message in the notification itself to know what went wrong. Or check the logs page, Most likely an error has been logged to a file named app.YYYYMMDD.log.

If everything went ok, you should see the backend shows up in the same page. You can then go to the Tasks page and click on Qeueu Task, for first time import we recommand letting the task run in the background, as it might take a while to import all the data.

Once you have done all for your backends, You should go back again to Tasks page and enable the Import and Export tasks. This will make sure your data is always in sync. To enable/disable the task, simply click on the slider next to the task name if it's green then it's enabled, if it's gray then it's disabled.

Once that is done, you can let the tool do its job, and you can start using the tool to track your play state.

Management via CLI.

Adding backend

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

This command is interactive and will ask you for some questions to add your backend.

Managing backend

To edit backend settings run

$ docker exec -ti watchstate console config:manage -s backend_name

Importing play state.

What does Import or what does the command state:import means in context of watchstate?

Import means, pulling data from the backends into the database while attempting to normalize the state.

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-backend] flag. For example,

$ docker exec -ti watchstate console state:import -v -s home_plex -s home_jellyfin 

[!NOTE] Now that you have imported your current play state enable the import task by using the following command

$ docker exec -ti watchstate console system:env -k WS_CRON_IMPORT -e true

Supported import methods

Out of the box, we support the following import methods:

  • Scheduled Tasks. Cron jobs that pull data from backends on a schedule.
  • On demand. Pull data from backends on demand. By running the state:import command manually
  • Webhooks. Receive events from backends and update the database accordingly.

[!NOTE] Even if all your backends support webhooks, you should keep import task enabled. This help keep healthy

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号