All apps · 0 apps
ReelPing
Docker app from ReelPing's Repository
Overview
Readme
View on GitHub
ReelPing
Keep your viewers in the loop.
A lightweight, self-hosted Plex Media Server status monitor and Discord notifier, optimized for Unraid.
ReelPing watches your media server and keeps your Discord community informed. Announce planned maintenance with one click, automatically detect unexpected outages, and let everyone know when streaming is available again.
[!NOTE] ReelPing is an independent community project and is not affiliated with or endorsed by Plex, Inc., Discord Inc., or Lime Technology, Inc. ReelPing is currently in beta: the automated test suite is green, but the "real Unraid" test matrix has not yet been field-completed — see Release readiness.
Why ReelPing?
Two problems, one small app:
- Your users don't know when Plex is going down for maintenance. ReelPing gives you one-click, pre-formatted Discord announcements.
- You often don't know Plex crashed until people complain. ReelPing polls Plex from its own container and posts one clear alert when a confirmed outage happens — and a recovery notice (with duration) when it's back.
It feels like a focused media-server status console, not a heavyweight observability stack.
Features
- 🔴 Automatic outage detection — confirmed in ~1 minute with defaults, with hysteresis so a single blip never pages your whole server.
- 🟢 Automatic recovery alerts — including the outage duration.
- 🟡 Planned-maintenance workflow — schedule, start-now, "going offline", delay updates, and service-restored, all one click.
- 🔵 Custom announcements with styled Discord embeds.
- 🔒 Authenticated web UI — Argon2id, sessions, CSRF, security headers. No default password; the UI is never unauthenticated.
- 🧭 Multi-stage checks — URL → DNS → TCP → HTTP
/identity→ optional authenticated identity/stream-count. Never relies on ICMP. - 🔗 Discord incoming webhooks — no bot, no gateway, minimal attack surface.
- 🧰 Runs anywhere Plex is reachable — Docker, VM, another NAS, another server, reverse proxy, private hostname, or IP.
- 🕵️ Private by design — no telemetry, analytics, or external assets. Only talks to your Plex and your Discord webhook.
Supported Plex hosting methods
ReelPing monitors a network endpoint, so it does not care how Plex is hosted. All of these work:
| Where Plex runs | Example URL |
|---|---|
| Unraid Docker container | http://UNRAID_LAN_IP:32400 |
| Docker on another host | http://SERVER_LAN_IP:32400 |
| Windows VM | http://VM_LAN_IP:32400 |
| Linux VM | http://VM_LAN_IP:32400 |
| Directly on Windows/Linux | http://HOST_LAN_IP:32400 |
| Another NAS / physical server | http://NAS_LAN_IP:32400 |
| Behind a reverse proxy | https://plex.example.com |
See docs/PLEX-DEPLOYMENT-TYPES.md.
Screenshots
The web UI includes a first-run setup wizard, a status dashboard (live Plex state, monitoring config, Discord config, and any active incident/maintenance), one-click maintenance/announcement controls, and history views for incidents, notifications, and the audit log.
To add screenshots to this README and the Unraid listing, drop PNGs into
docs/screenshots/and reference them here (and optionally add<Screenshot>tags totemplates/reelping.xml).
How outage detection works (the one-minute story)
ReelPing polls Plex on an interval. A single failed check does not alert —
it moves Plex to a suspect state. Only after N consecutive failures
(default 3, every 20 s) is an outage confirmed: one incident is opened and one
Discord alert is sent. Recovery needs M consecutive successes (default 2)
before a single recovery alert goes out.
confirmation time ≈ check interval × failure threshold → 20 s × 3 ≈ 60 s.
A successful HTTP check proves Plex is reachable and responding, not that every stream will play perfectly. See docs/INCIDENT-STATE-MACHINE.md.
Why no Discord bot?
One-way notifications only need an incoming webhook. A bot would add token
management, a gateway connection, hosting, and permissions — all attack surface
you don't need. ReelPing uses webhooks and sets an explicit allowed_mentions
on every message so @everyone/@here can only fire when you deliberately
enable it.
Why not Plex outgoing webhooks?
A Plex server that has crashed, frozen, or lost power cannot send a final "I'm down" webhook. ReelPing checks actively from its own container instead. Plex Pass and a Plex token are not required for basic monitoring (a token just unlocks identity verification and stream counts).
Install
Unraid (Community Applications)
Full guide: docs/UNRAID-INSTALLATION.md.
- Apps → search ReelPing → Install (or add the template repository during beta).
- Set the WebUI Port (default host
8787) and Appdata path (/mnt/user/appdata/reelping). - Set TZ to your time zone.
- Apply, then open
http://<UNRAID-IP>:8787and complete the setup wizard.
No privileged mode, Docker socket, host networking, or media mappings are requested. Enter your Plex token and Discord webhook in the web UI, never in the template.
Docker Compose
mkdir reelping && cd reelping
curl -O https://raw.githubusercontent.com/BGriffin63/ReelPing/main/compose.yaml
docker compose up -d
Then open http://<host>:8787.
Build locally
go build -o reelping ./cmd/reelping
RP_CONFIG_DIR=./config ./reelping
First-run setup
Open the WebUI and the wizard walks you through:
- Administrator account — pick a username and a strong password (min 12 chars). There is no default login.
- Plex connection — enter the base URL ReelPing should use to reach Plex,
e.g.
http://192.168.1.10:32400. Optionally add a token. Click Test. - Discord — paste your channel's incoming-webhook URL. Click Send test.
- Monitoring — pick a preset (Balanced recommended) and time zone.
- Finish — enable monitoring.
Getting a Discord webhook
Server Settings → Integrations → Webhooks → New Webhook → choose the channel → Copy Webhook URL. Paste it into ReelPing. Details: docs/DISCORD-SETUP.md.
Getting a Plex token (optional)
A token enables identity verification and active-stream counts. See Plex's
official article
and docs/PLEX-INTEGRATION.md. ReelPing only ever
sends it as an X-Plex-Token header and never shows, logs, or exports it.
One-minute monitoring configuration
Use the Balanced preset (the default): check interval 20 s, 3 failures to confirm, 2 successes to recover, 60 s startup stabilization. That confirms an outage in about a minute while ignoring one-off blips.
Configuration, presets, and backups
- Configuration reference: docs/CONFIGURATION.md
- Monitoring internals: docs/MONITORING.md
- Backup: Settings → Data → Download backup (a copy of the database; treat it like a password vault — it contains your secrets).
- Restore: stop ReelPing, replace
/config/reelping.dbwith your backup, start ReelPing. - Upgrade: pull the new image / update the container. Migrations run automatically and take a backup first.
- Uninstall: remove the container. Delete
/mnt/user/appdata/reelpingto remove all data.
Security & privacy
- Threat model and hardening: docs/SECURITY.md
- Privacy statement: docs/PRIVACY.md
ReelPing makes outbound connections only to your configured Plex server and Discord webhook. No telemetry, analytics, crash reporting, license checks, fonts, or CDN assets.
Troubleshooting
Platform-neutral guidance (Docker networking, firewalls, DNS, reverse proxies, TLS) is in docs/TROUBLESHOOTING.md.
Known limitations
- A successful check proves reachability, not perfect playback.
- v1 monitors only; it never starts, stops, or restarts Plex.
- One Plex server and one Discord webhook per instance in v1.
- Automated
@everyoneis opt-in and never enabled by default. - The "real Unraid" acceptance matrix is not yet field-completed (beta).
Contributing
See CONTRIBUTING.md and CODE_OF_CONDUCT.md. Issues and PRs welcome.
Support
See docs/SUPPORT.md. For security issues, follow .github/SECURITY.md.
Release readiness
This repository is beta. The automated test suite (unit, integration, state-machine, security-redaction, and full-UI-render tests) passes, and the container is designed to the Unraid Community Applications constraints. Items still pending real-hardware verification are tracked in docs/TESTING.md and docs/COMMUNITY-APPS-SUBMISSION.md.
License
MIT. Third-party notices: THIRD_PARTY_NOTICES.md.
Trademark & non-affiliation
Plex® is a trademark of Plex, Inc. Discord® is a trademark of Discord Inc. Unraid® is a trademark of Lime Technology, Inc. These names are used only to describe compatibility. ReelPing is an independent community project and is not affiliated with or endorsed by Plex, Inc., Discord Inc., or Lime Technology, Inc. The ReelPing name and logo are original works.
Install ReelPing on Unraid in a few clicks.
Find ReelPing 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.
Requirements
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/bgriffin63/reelping:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8787]- Network
bridge- Shell
sh- Privileged
- false
- Extra Params
--security-opt no-new-privileges
Template configuration
Port for the ReelPing web interface (container and host use 8787).
- Target
- 8787
- Default
- 8787
- Value
- 8787
Persistent storage for ReelPing's database and settings.
- Target
- /config
- Default
- /mnt/user/appdata/reelping
- Value
- /mnt/user/appdata/reelping
Your local time zone (e.g. America/New_York, Europe/London).
- Target
- TZ
- Default
- America/New_York
- Value
- America/New_York
User ID (Unraid default 99). Informational; the container runs as 99:100.
- Default
- 99
- Value
- 99
Group ID (Unraid default 100). Informational; the container runs as 99:100.
- Default
- 100
- Value
- 100
File-creation mask.
- Default
- 022
- Value
- 022