System Design

Video and Web Services

Distribution of the live all-sky video through EPIC TV, and web access to spectrograms through the Waterfalls application.

Live video (EPIC TV)

Each imager encodes an 80 ms Stokes I video of its sub-band (see Imager Pipeline). The video reaches the public through four stages.

  1. Local ingest. Each imager publishes its stream over RTMP to a media server (Node-Media-Server) on the same node. Decoupling the imager from external delivery means that a failure downstream never back-pressures the imager. All nodes run the media server as a Nomad system job, which is restarted automatically.
  2. Per-sub-band streams. A daily epictv-streaming job on each compute node reads the local stream, applies the coordinate-grid overlay and re-encodes it with FFmpeg. It publishes two variants to PeerTube:
    • the stream at full cadence;
    • a long-integration stream averaged over 12 frames, approximately 1 s, which emphasizes faint, slowly varying emission.
  3. Mosaic stream. A daily epictv-grid job on the coordinator composes the six sub-band streams into a single 3 × 2 mosaic at 12 frames s⁻¹. Each tile has an independent decoder, a reconnection back-off, and a placeholder that is shown when a sub-band is unavailable.
  4. Publication. PeerTube, an open-source federated video platform, serves the streams as EPIC TV. Transcoding of recordings is delegated to PeerTube runners on the compute nodes.

The streaming jobs restart every 24 hours. On each restart, PeerTube publishes a replay of the preceding day, which is retained on network storage (Reddy et al. 2024).

Waterfalls

The Waterfalls application provides interactive access to the pixel database. It runs as a Nomad job on the coordinator and consists of two parts.

Back end. The back end is written in Python with FastAPI and SQLModel. It exposes an HTTP API, under /api/v1, to the following data:

  • imaging sessions for a source and time interval;
  • spectrograms of up to 120 s;
  • sources observed on a given day;
  • daily-digest spectra;
  • the watch list.

It also receives CHIME/FRB alerts (see Data Management).

Front end. The front end is a Nuxt application built with Nuxt UI Pro and served by a Node.js (Nitro) server. It provides:

  • these documentation pages;
  • the spectrogram viewer, with live updating as new data are ingested;
  • the daily digest;
  • downloads of the decoded spectra.

The two processes communicate on the local host. The front end proxies /api/v1 requests to the back end.

Access and authentication

A reverse proxy on the coordinator terminates TLS for all public services and routes them to their back ends. It serves three kinds of service:

  • Public services. The website, EPIC TV and the spectrogram viewer are publicly accessible.
  • Administrative interfaces. Nomad, Consul, Vault, Prometheus, Alertmanager and the metrics dashboards are protected by single sign-on. Vouch Proxy authenticates users against membership of a GitHub team, and the reverse proxy consults it before forwarding each request.
  • Internal services. The internal file server, from which jobs retrieve build packages and configuration, is reachable only on the cluster network.

Operational documentation for the system is maintained in an internal wiki (Wiki.js), which is also hosted on the cluster.


Copyright © 2026. All rights reserved.