Watch it, schedule it, back it up
Everything you need to run masqueradarr day-to-day: live streaming telemetry, historical QoE analytics, system stats, categorized logs, the automatic scheduler, and full-system backup / restore.
Who's watching what, right now
A real-time monitor of everything currently being watched. Each session shows the channel, its playlist/source, the viewer, current bitrate, uptime, and a health indicator. It's live telemetry pushed over a WebSocket — no refresh button, held in memory, always the present moment.

A healthy session shows a steady bitrate and climbing uptime. A session flagged failing is one the server couldn't keep fed — worth investigating, and it drives the live pulse dot next to Active Streams in the sidebar. An empty screen is normal when nobody is watching. To investigate: note the channel + source, open View logs filtered to that source, and cross-check the channel on its Playlist detail.
When a channel's own upstream failed and one of its failover backups is carrying the stream, the session is badged failover → <child>, and its detail panel names the backup's position in the line. The parent may simultaneously show as probe-dead on its playlist — that is coherent, not a contradiction: the probe tests each channel on its own, while the session is being served by a stand-in.
The quality-of-experience record
Where Active Streams shows the present, History / Metrics shows the past: every completed viewing session, from persisted view-session history. It grows over time; a fresh install is empty.
Headline totals
Sessions, viewers, data served, and similar rollups across the recorded history.
Smooth or stutter
A distribution of buffering events — a long tail toward high buffering means trouble.
Fix the noisy few
The channels with the worst experience, surfaced so you can prioritize them.
Per-view timeline
Every recorded session; select a row for its full timeline. Toggle Sessions ↔ User Metrics to analyze by event or by person.

Live CPU & memory on the Dashboard
The admin Dashboard pushes live system-performance stats (CPU / memory) over a WebSocket, alongside the stat cards (Playlists, Channels, Channels live/down, EPG sources, Unmatched) and the Activity panel (live Active Sessions + recent History). Glance at Channels live vs down to spot a source problem, and Unmatched to know when to head to Channel Mapping.
MongoDB-backed application logs
Every [tag] msg the server logs is persisted to the Log model (14-day TTL) via an injected sink, and fanned out to a live "View logs" drawer (/api/logs REST + /api/logs-stream WebSocket, admin-only). A tag→category map derives one of 14 categories, at three levels — info · warn · error.
proxy holds the Rust data-plane's full resolve→fetch→rewrite→serve lineage, ingested over the log seam (POST /api/internal/log) — persisted without a console re-print, since the sidecar already printed to its inherited stdout. failover is the newest, and the other one written from both planes: Node records group saves, EPG cascades, auto-disbands and exhausted chains (naming the parent and its playlist); Rust records the walk itself (carrying the session id). See Playlist Failover. The single logLevel (1|2|3) knob on Settings gates verbosity for every subsystem, Node and Rust alike, live with no restart.
Keep the catalog fresh, automatically
A croner-backed runtime scheduler runs the persisted cronjobs collection. Enabled jobs register at boot; a PUT/DELETE on /api/cronjobs re-registers or unschedules immediately. Each tick dispatches on its targetType.
| targetType | What the tick does |
|---|---|
| epg-source | EPG re-sync |
| playlist | Playlist source live-sync |
| playlist-m3u | Playlist M3U (+ XMLTV guide sibling) recompose |
| backup | Scheduled on-disk backup |
| channel-probe | The Rust-assisted channel health sweep |
One-click snapshots of the whole system
Full-system gzip
A gzipped snapshot of every collection — downloaded, or written to a configured backup directory on a schedule.
In-place re-orchestration
Restore from an uploaded backup or a saved file; the restore re-orchestrates the dependent subsystems (boot init, DNS, scheduler) in place.
Indexes & reset
From Settings: rebuild MongoDB indexes, or reset the workspace (wipe content, keep users / settings).
Domain (Settings) is built into every published playlist URL — changing it cascades and rewrites the URL of every playlist. Set it to your real public address once; any links users already saved point at the old address until they re-copy the updated URLs. Outbound-fetch DNS nameservers and the global logLevel also live in Settings.