PRODUCT SITE · SCROLL MOTION
A scroll-driven launch page for a built-in refrigerator that does not exist. Built to answer a narrow question: can generated footage carry a premium product site, and where does it stop being enough?
Best on a desktop with a scroll wheel.
The opening act, playing as video here. On the site itself this is 96 still frames, and your scroll wheel is the transport.
The product is invented. Every specification, price, and image is fabricated and describes no real appliance, and the page says so in its own footer. What is real is the build: a pinned canvas that draws a frame per scroll position, hotspot callouts placed against actual parts, and a six-layer wall cross-section that pulls apart as you scroll through it.
THE PIPELINE
Generate one canonical still and treat it as the only truth. Every downstream asset inherits it, which is what keeps the cabinet identical across shots.
Two continuous Seedance 2.5 takes, both seeded from that still as the start image. One 8s push-in on the closed unit, one 10s of the doors opening.
ffmpeg pulls evenly spaced frames and encodes WebP. 176 frames, 4.15 MB total, roughly 23 KB each. A manifest tells the front end what exists.
A pinned canvas draws the frame matching scroll position. Preloading runs in two waves so the stage is scrubbable before the full sequence has decoded.
WHAT SCROLLING LOOKS LIKE

Top row: the hero act, wide to macro on the lit seam. Bottom row: the doors opening. These are the shipped frames, not a storyboard.
WHERE FOOTAGE STOPS
A video model will give you a beautifully lit door swinging open with vapour spilling over the threshold. Nothing hand-built gets close for the effort. So the hero and the opening act are pure footage, scrubbed frame by frame.
What it will not give you is a labelled exploded view. So the callouts sit on a deliberately static plate, because a drifting camera leaves every leader line pointing at nothing, and the six-layer wall is built in CSS 3D where each layer stays addressable.
176
Frames scrubbed on canvas
4.15 MB
Total frame payload
18s
Generated footage
119 KB
Gzipped JS bundle
Status: live · concept piece, not a client engagement · September 2026