Case Study · Episode 08 · 3D & Immersive Web

The watch that spins as you scroll

A cinematic, scroll-driven product site for FORGE & FUMÉE — a fictional bronze tourbillon called the Solstice. One AI hero image anchors the product; three Seedance video clips are rendered from it, upscaled with Topaz, cut to frame sequences, and painted to a canvas so scrolling literally rotates the watch. No 3D artist, no video editor — the whole thing is code.

MediumScroll-scrub website
Generation cost~$8 · 1,518 credits
Clips3 · rendered 720p, upscaled 2×
Retakes0 — all approved first take
The case-study film · 48 seconds, scored and built entirely in Remotion — every shot is real generated footage from this build. Open the live site →
Overview

One image, three clips, a site that rotates

The brief was a luxury "3D scroll" product page. The trick that makes it hold together: generate a single hero image first, then force every video clip to reference it — so the watch is identical in all three shots. Everything else is orchestration.

1Hero image → the anchor
3Seedance clips
363Frames scrubbed on canvas
~$8Total generation spend
The Pipeline

Step by step

01

The Hero Image

Everything starts with one still. A single prompt to Seedream 5 Pro produced the Solstice — hand-forged bronze case, smoked amber dial fading to black, a gold tourbillon at six, ember light. Its URL becomes the reference_image_urls passed to every clip.

Seedream 5 Pro · via Kie.ai 14 credits
Prompt (abridged)
Ultra-premium studio photograph of a luxury bronze tourbillon watch, hand-forged case with warm patina, smoked amber dial fading to black, gold tourbillon cage at six, dark leather strap, single forge-glow rim light, drifting embers, charcoal void. No text, no logo.
The Solstice — generated hero image
The anchor
Fig. 1 — one prompt in, one product out. This exact frame is referenced by all three clips.
02

The Three Shots

From that reference, Seedance rendered three ~8-second clips: a 360° hero orbit, a macro fly-through across the dial, and an exploded assembly that builds the watch from floating parts. All three hold the product identical — the reference image is doing its job.

A gift we didn't prompt: on the back half of the orbit, Seedance invented a plausible skeleton case-back with visible gearwork. It turned three dull seconds of strap into the most mechanical moment of the spin.

Seedance 2.0 · via Kie.ai 328 credits / clip
Three frames from the 360° orbit — front, side, skeleton caseback
Fig. 2 — three angles from the single orbit clip: dial, profile, and the unprompted skeleton case-back.
03

The Upscale

Every clip was rendered at 720p, then run through Topaz 2× and brought down to a clean 1080p. For a scroll-scrubbed canvas the result is indistinguishable from native 1080p — at less than half the credits.

That decision paid for the whole project's headroom: three clips, three upscales, a hero image and a comfortable retake budget, all inside ~1,500 credits.

Topaz Video Upscale · via Kie.ai ~64 credits / clip
Native 1080p 102 cr/s
the obvious, expensive path
720p → Topaz 2× 41 + 8 cr/s
what we shipped — visually identical on a scrub
Fig. 3 — render-cheap, upscale-smart. The lever that kept the build under $10.
04

The Assembly

FFmpeg cut each upscaled clip into ~120 JPEG frames. Claude Code wrote the site: a sticky canvas that a GSAP scrub tween paints frame-by-frame as you scroll, Lenis for smooth motion, and glass overlays that fade in and out riding the footage — story beats on the orbit, spec cards on the macro, callouts on the assembly. Editorial sections sit on full-bleed stills with parallax, so the whole page reads as one film.

FFmpeg · frame extraction GSAP + Lenis · scroll-scrub Claude Code · the whole site
Hero image
Orbit
Macro
Exploded
Topaz 2×
363 frames
Scroll-scrub site
Fig. 4 — one image fans out to three clips, upscaled, framed, and scrubbed on a canvas.
The Footage

Frames from the finished clips

Every image below is a real frame from the generated, Topaz-upscaled footage — and every one of these was cropped straight from the render to become card art on the site. Nothing was generated twice.

Behind the Scenes

What we learned (and what nearly broke)

The honest notes — the parts a tidy tutorial leaves out.

AI can't spell — so don't let it

Image models garble engraved text into gibberish. Every prompt ended with no readable text, no logo; the brand name lives in the site's typography instead. One faint invented marking still slipped onto a bezel mid-assembly — invisible at scrub speed, so it stayed.

The hidden-pane rAF trap

A headless preview pane suspends requestAnimationFrame, so scroll tests read as "frozen" even when the site works. Verifying the scrub meant manually pumping the clock (lenis.raf + gsap.updateRoot) and hashing the canvas at three depths.

Consistency beats resolution

One reference image kept the watch identical across all three clips — the single biggest reason it looks expensive. A softer-but-consistent product always outreads four sharper-but-different ones.

Toolbox

Everything used, and what it did

Kie.ai API
Generation gateway — one key, every model
Seedream 5 Pro
The hero image (identity anchor)
Seedance 2.0
The three video clips
Topaz Video Upscale
720p → 1080p, 2×
FFmpeg
Frame extraction & normalisation
OPEN SOURCE
GSAP + Lenis
Scroll-scrub & smooth scroll
FREE
Claude Code
Orchestration & the entire site
THE ASSEMBLER