No description
  • HTML 98.6%
  • Dockerfile 1.4%
Find a file
Ben Brooks 9c430f6d71 Reword README intro and add live site link
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 15:44:02 +01:00
.dockerignore Add Dockerfile to serve the static page via nginx 2026-05-16 15:19:13 +01:00
docker-compose.yml Add docker-compose for Caddy-fronted hosting 2026-05-16 15:38:42 +01:00
Dockerfile Add Dockerfile to serve the static page via nginx 2026-05-16 15:19:13 +01:00
index.html Add second primary row, proportional layout, and bar push-down 2026-05-16 15:13:06 +01:00
README.md Reword README intro and add live site link 2026-05-16 15:44:02 +01:00
screenshot.jpg Add README screenshot (compressed JPEG) 2026-05-16 15:17:37 +01:00

n24-yt-multiviewer

Watch many YouTube livestreams at once — full-viewport video wall with priority rows, auto-fitting grid, and live-sync. Built for the Nürburgring 24h onboards.

▶ Live: https://n24.bbrks.me

screenshot

Features

  • Paste any number of YouTube livestream URLs (one per line) — watch?v=, youtu.be/, /live/, /embed/ and bare IDs are all accepted.
  • Primary rows — prefix a line with * to pin it to a full-width primary row, or ** for a second full-width primary row below it. Primary tiles are rendered at native 16:9 with no letterboxing or gaps.
  • Auto-fitting matrix — the remaining streams are laid out in the column count that keeps the 16:9 video as large as possible for the available space, recomputed on window resize.
  • Autoplay muted with a one-shot sync-to-LIVE ~5s after load (seeks every player to the live edge so the views stay aligned).
  • Fullscreen kiosk mode that auto-hides the control bar.
  • Mute/unmute all in one click.

Usage

YouTube's IFrame API rejects a null origin, so it must be served over HTTP (not opened as a file://):

python3 -m http.server 8000

Then open http://localhost:8000/. The default N24 onboard streams are pre-filled; edit the list and click Load / Reload.

Hosting (Docker)

Static nginx image, no build step:

docker build -t n24-yt-multiviewer .
docker run -d --restart unless-stopped -p 8080:80 n24-yt-multiviewer

Then open http://localhost:8080/ (put it behind your own TLS-terminating reverse proxy / load balancer when hosting publicly).

Hotkeys

Key Action
f Toggle fullscreen
m Mute / unmute all
h Hide / show bar
s Sync all to LIVE

Hotkeys are ignored while typing in the URL box.

Limitations

  • Some channels disable off-site embedding (YouTube error 150/153) — nothing fixable client-side; drop/replace those URLs.
  • Browsers only autoplay muted video; that's why streams start muted.
  • Many simultaneous HD streams is heavy on CPU/bandwidth; YouTube picks adaptive quality.