Stop scrubbing blind.

Loupe turns any video into a contact sheet you can read at a glance, click into, and drag across.

View at:

The Idea

Every serious video player already generates a contact sheet. It is what powers the little thumbnail that appears when you hover a seek bar. Every player makes it, shows you one tile at a time, and throws the rest away.

Loupe shows all of it.

The whole video as a sheet of frames you can read at a glance, search through by eye, and click into.

It is built for video people scan rather than watch: archive footage, lectures, interviews, anything long enough that scrubbing blind is miserable.

What It Does

The whole video, on one sheet.

Click any frame to jump there. Drag across them to scrub.

Takes the shape of what it plays.

Cinematic, square or vertical. The layout follows the source, so nothing is ever letterboxed into a box that does not fit.

Dressed by the page it sits on.

Type is inherited. Light or dark is read from the background behind it. The glass frame picks up whatever is there.

Give it a video. That is the setup.

The sheet is built from the asset’s own storyboard. Nothing to generate, nothing to configure, no thumbnails to manage.

Every control works without a mouse.

Full keyboard operation with visible focus. The sheet is one tab stop with arrow keys inside it.

Who It's For

COURSES
A student hunting for the one explanation they half remember, forty minutes in.
DOCUMENTATION
Someone who wants the billing section, not your twelve minute product walkthrough.
PROPERTY
A buyer who wants to see the kitchen before they watch the driveway.
ARCHIVES
Conference talks and interviews, where the useful part is rarely the beginning.

The pattern is the same everywhere. The video is long, and the viewer wants a part of it, not the whole of it.

In Context

The skin reads the page it sits on. Type is inherited, light or dark is chosen from the background behind it, and the glass frame picks up whatever is behind the player.

01 / DARK

02 / LIGHT

03 / PHOTO

How It Works

FRAMES
Built from the asset’s own storyboard. No extraction, no per-video setup.
LAYOUT
Adapts to the source aspect ratio, capped at 70vh.
THEME
Light or dark chosen from the parent background. Type inherited from the page.
CAPTIONS
Styled by the skin, not left to the browser. Set above the controls so chrome never covers them.
FRAME
Glass with an SVG displacement filter, falling back to blur where that is unsupported.
ICONS
Drawn for the skin. One geometric system, square joins, no icon library.
ACCESS
The sheet is a single tab stop with arrow-key navigation. 44px touch targets, reduced motion, forced colors and RTL all handled. Control text measures 16.7:1 in dark and 11.8:1 in light over the current demo footage.
STACK
React, TypeScript, Tailwind, Video.js v10.
EXPORT
The sheet saves as a one page PDF, with every frame linked back to its moment in the video.

Keyboard

SPACE
Play / pause
← →
Seek 5s
↑ ↓
Volume
M
Mute
F
Fullscreen
C
Captions
S
Contact sheet
Arrows
Move between frames
Enter
Seek to frame
Esc
Close

Every control is reachable by keyboard with visible focus. The sheet is a single tab stop with arrow-key navigation inside it. Motion respects prefers-reduced-motion.