Public test streams for players and CDNs
Deterministic synthetic video in progressive MP4 and HLS, served over plain HTTPS with range support. Point your player, packager, cache or CI job at it and get the same bytes every time.
Frame counter, 720p, 30 fps, H.264 + AAC. Plays natively in every current browser โ this page ships no JavaScript.
Why synthetic
Test material taken from real footage is a licensing problem and a reproducibility problem: it gets replaced, re-encoded, or pulled. Everything here is generated from deterministic sources, so a stream you validated against last year is byte-identical today, and there is nothing to license.
The patterns are chosen to make failure visible rather than to look pleasant. A frame counter exposes dropped frames and A/V drift. Smooth gradients expose banding introduced by an over-aggressive transcode. A 60 fps high-motion source exposes an encoder or a network that cannot keep up.
What is here
| Stream | Renditions | Purpose |
|---|---|---|
| timecode | 360p / 720p / 1080p | Frame counter and colour bars for A/V sync and dropped-frame checks |
| gradient | 360p / 720p / 1080p | Smooth gradients for banding and colour-depth checks |
| motion | 360p / 720p / 1080p | 60 fps high-motion source for encoder and throughput stress |
| sustained | 1080p | Long single file for sustained-transfer and resume testing |
Each stream is available as a progressive MP4 per rendition and as an HLS ladder with fragmented-MP4 segments and a master playlist.
# progressive, resumable
curl -O https://t1.nodavpn.org/media/timecode/timecode-1080p.mp4
# HLS ladder
ffplay https://t1.nodavpn.org/media/timecode/hls/master.m3u8
# verify what you received
curl -s https://t1.nodavpn.org/media/SHA256SUMS | sha256sum -c --ignore-missing
Fair use of the bandwidth
There is no rate limit and no sign-up, because adding either would defeat
the point of a test endpoint. In exchange: if you are running a sustained
benchmark, pull the sustained asset once and loop it locally
rather than re-fetching it, and set a sensible concurrency in CI.
Caching is deliberate. Media carries a one-year immutable cache header and the filenames never change contents, so a CDN or proxy in front of this origin will behave the way you expect it to in production.
Full catalogue with encoder settings is on the streams page; usage notes and CI examples are in the documentation.