self-hosted · MIT · open
Seek previews for any player.
No account, no quota, no expiry.
Real frames from real films, under your pointer. Nothing is playing and nothing here is a placeholder — every image is one rectangle cropped out of a public sprite sheet.
Stay and scrub ↓Hover a poster · press and drag on touch · arrow keys when focused
live from the registry
reading the registry…
how it works
Three steps, and the last one is a text file.
-
01
Ask by IMDb id + duration
One lookup per title. No upload, no video, no account — the registry matches what you already have.
GET /v1/sprites?imdb_id=tt1022603&duration_ms=5705536 -
02
Get a sheet and a VTT
A WebVTT where every cue is one rectangle inside a packed JPEG sheet. Cues are positional, so slot i is second i × interval.
00:34:20.000 --> 00:34:30.000
sheet-320x180-2.jpg#xywh=960,360,320,180 -
03
Crop one tile, in anything
Web, TV, phone, desktop. Floor lookup is a loop over a list you already hold, and the files never expire, so you can cache them like any other image.
# last cue whose start ≤ position, or nothing at all
coverage, honestly
A partial title looks partial.
Loading the index…
- Nothing indexed yet here You are before the first preview anyone contributed. The registry has no frame for this second, so we draw no frame.
- No preview here yet Past what viewers have banked. The floor lookup would happily return the last tile forever — the coverage bound is what stops it, and the tile stays dark. drag the rail to the end
contribute
The people watching fill the gaps.
- 01
A player with contribute on captures one tile per interval as the film plays.
- 02
Every 48 banked tiles flush as one bundle: title block, VTT, sprite sheets.
- 03
The registry merges same-title bundles slot by slot, so coverage grows without anyone re-uploading a film.
- 04
Workers stripe the rest. Until they do, past the bound reads as no preview — never a stale frame.
The playback client is released (v0.1.0); the capture half is built and not in a release yet.