diff --git a/templates/watchstate/assets/logo.png b/templates/watchstate/assets/logo.png new file mode 100644 index 000000000..de8da51bc Binary files /dev/null and b/templates/watchstate/assets/logo.png differ diff --git a/templates/watchstate/assets/screenshot.jpg b/templates/watchstate/assets/screenshot.jpg new file mode 100644 index 000000000..cbb7afe50 Binary files /dev/null and b/templates/watchstate/assets/screenshot.jpg differ diff --git a/templates/watchstate/index.ts b/templates/watchstate/index.ts new file mode 100644 index 000000000..500aa1280 --- /dev/null +++ b/templates/watchstate/index.ts @@ -0,0 +1,32 @@ +import { Output, Services } from "~templates-utils"; +import { Input } from "./meta"; + +export function generate(input: Input): Output { + const services: Services = []; + + services.push({ + type: "app", + data: { + serviceName: input.appServiceName, + source: { + type: "image", + image: input.appServiceImage, + }, + domains: [ + { + host: "$(EASYPANEL_DOMAIN)", + port: 8080, + }, + ], + mounts: [ + { + type: "volume", + name: "config", + mountPath: "/config", + }, + ], + }, + }); + + return { services }; +} diff --git a/templates/watchstate/meta.yaml b/templates/watchstate/meta.yaml new file mode 100644 index 000000000..fe696e305 --- /dev/null +++ b/templates/watchstate/meta.yaml @@ -0,0 +1,69 @@ +name: WatchState +description: + WatchState syncs play state between your Plex, Jellyfin, and Emby media + servers without relying on any third-party services. It supports many-to-many + or one-way sync, webhook-based updates, backups, and tools for finding and + fixing metadata issues across your backends. +instructions: >- + Open the app and you'll be prompted to create a system user on first access, a + one-time step. From there, click the help button in the top-right corner to + add your Plex, Jellyfin, or Emby backends and choose one-way or two-way sync. + All configuration and the database are stored on a persistent volume. Note: + this image only publishes a single old "v1.0.0" tag alongside a continuously + updated "latest", so this template tracks "latest" as documented by the + project itself. +changeLog: + - date: 2026-08-18 + description: first release +links: + - label: GitHub + url: https://github.com/arabcoders/watchstate + - label: Documentation + url: https://github.com/arabcoders/watchstate#readme +contributors: + - name: Ahson Shaikh + url: https://github.com/Ahson-Shaikh +schema: + type: object + required: + - appServiceName + - appServiceImage + properties: + appServiceName: + type: string + title: App Service Name + default: watchstate + appServiceImage: + type: string + title: App Service Image + default: ghcr.io/arabcoders/watchstate:v1.10.2 +benefits: + - title: No Third-Party Dependency + description: + Syncs play state directly between your own media backends, with no + external service in the middle + - title: Flexible Sync Modes + description: + Choose many-to-many or one-way sync depending on which backend should be + the source of truth + - title: Multi-User Support + description: + Sync play state for every user on your media servers through backend + identities, not just a single account +features: + - title: Webhook and Scheduled Sync + description: + Receive real-time updates via webhooks, backed by scheduled import tasks + that catch anything webhooks miss + - title: Media Health Reports + description: + Audit backend metadata for GUID conflicts, duplicate references, and path + disagreements from a single report + - title: Portable Backups + description: + Back up your backends' play state into a portable format you can restore + from later +tags: + - Media + - Automation + - Self-Hosting