MediaWatch v2.1.0
Documentation

Your media server,
live in Discord.

One message in one channel, edited every minute: who is watching what, how far along, in which quality. Library totals, server state and your download queue beside it.

dashboard
  1. The interactive demo needs JavaScript.

One message, edited in place

MediaWatch posts the dashboard once and keeps editing that same message, so the channel never fills up. A restart picks the message up again instead of posting a second one.

Libraries

One tile per library with your own names and emoji, plus an episode count for TV sections. Unconfigured libraries follow in the order the server reports them.

Streams

Title, user, a ten-cell progress bar, direct play or transcode, quality, bitrate and player. Paused streams show a pause sign instead of the bar.

Downloads

The SABnzbd queue while it runs: progress, time left, speed and what is still to fetch, then the queue total and your disk space. With an empty queue the block is gone.

Offline and uptime

When the server stops answering for five minutes, the dashboard turns red and says since when, with the Uptime Kuma history for the last day, week and month.

Every stream,
one click deeper.

A button per stream opens the details as a reply only the person who clicked can see: player, connection, resolution and HDR, file, subtitles, and the full transcode chain when the server converts.

  • Kill Stream ends a session with a reason, for the Discord users you authorize.
  • User and global statistics from Tautulli on Plex: watch time, peak hours, top content, a top-10 leaderboard.
  • Plex opens the playing item in Plex Web, or any Plex Web you point it at.

Plex or Jellyfin.
One of them.

Each deployment watches exactly one server, chosen by media_server.type. Both render the same dashboard; Plex goes further when Tautulli sits beside it.

How it is built
CapabilityPlexJellyfin
Live dashboard and library totalsYesYes
Stream detailsWith TautulliYes
Kill StreamYesYes
SABnzbd and Uptime KumaYesYes
User and global statisticsWith TautulliNo
Open in the media serverWith TautulliNo

Running in ten minutes

Docker is the recommended way. You need a Discord bot token, a channel, your server ID, at least one authorized user, and a Plex token or a Jellyfin API key.

1

Create the bot

A Discord application with one privileged intent and five permissions, invited to your server.

Discord bot guide
2

Fill in two files

Secrets go into .env, behaviour into data/config.yaml. Set media_server.type and you have a dashboard.

First run
3

Start the container

The image is on GHCR. State lives in ./data: no database, no Redis.

Docker deployment
docker-compose.yml
services:
  mediawatch:
    image: ghcr.io/nichtlegacy/mediawatch:latest
    container_name: mediawatch
    restart: unless-stopped
    env_file:
      - .env
    environment:
      RUNNING_IN_DOCKER: "true"
    volumes:
      - ./data:/app/data

Who can see what?

Everyone who can read the channel sees the dashboard and, by default, may open stream details, user statistics and global statistics. Three options restrict the buttons to authorized users; channel permissions decide who sees the message. Privacy and visibility

What does it need?

Docker or Python 3.12, a Discord server you administrate, and a Plex or Jellyfin server the bot can reach by IP or hostname. Tautulli, SABnzbd and Uptime Kuma are optional.

Coming from PlexWatch?

MediaWatch is PlexWatch 2.0. Your config.json is converted on the first start and the old file stays untouched. The image path changed and DISCORD_GUILD_ID is now required. Upgrading from 1.x

What it is not

Not a web app, not a multi-user control panel, not a replacement for Tautulli or Uptime Kuma. It is an operational bot for people who already live in Discord.

How is it built?

With extensive help from AI coding assistants. PlexWatch 1.x started that way too; it worked, but its internals were not built to last, and the 2.0 rewrite fixes that.

Does it actually run somewhere?

On my own server, since early 2026. The features and fixes come from using it every day, and CI runs the full test suite on every push and pull request.