No secrets: one desk, a lot of paper and some stubbornness — it's all here, with the numbers.
We shot the film twice
Cropping the landscape cut for phones was killing the film: scene edges vanished, the ball flew out of frame. So we re-shot the film for mobile — each of the seven scenes rebuilt for 9:16. Both edits run frame-for-frame the same length: rotate your phone and the film continues at the same instant, in the other shoot.
LANDSCAPE SHOOT · 16:9PORTRAIT SHOOT · 9:16the identity desk — same beat, two setups
LANDSCAPE SHOOT · 16:9PORTRAIT SHOOT · 9:16the kid's room — same scene, two framings
LANDSCAPE SHOOT · 16:9PORTRAIT SHOOT · 9:16the throw — the ball hits the basket on frame 120 in both
The chain rule
The cutting desk had one rule: the last frame of a scene must be the first frame of the next. Seven scenes tied into one breath by six seams — no cuts, no fades; the paper passes from hand to hand.
01 → 02
02 → 03
03 → 04
04 → 05
05 → 06
06 → 07
in each pair, left: last frame of a scene · right: first frame of the next
Out of the bin
Not every scene sat right on the first take. We shot the kid's scene nine times for the portrait cut; the published one is take two — the seven takes after it never beat it. Three frames that went to the bin:
CUTthe kid didn't walk in — he teleported
CUTthe room redecorated itself mid-take
CUTback-to-camera throw: the arm reads, but that's not our room
The engine room
Everything running under the paper — one-line specs, numbers from the code.
FRAMESFRAMES1,303 frames × 2 shoots; 5,212 WebP files across four size sets.
DECODEDECODEFrames decode off the main thread in a pool of 1–2 workers; bitmaps change hands without a copy.
CEILINGCEILINGHowever hard you scroll, the film plays at most 2.5× its native speed — a film-reel feel, safely under decode supply.
GATEGATEBandwidth-adaptive preload that won't open until the first scene's runway is ready; hard cap on slow lines is 9 seconds — the curtain never rises before the first frame.
COUNTERCOUNTERThe loading percentage isn't a font: handwritten digits and a pencil line that waves in sync with it.
SOUNDSOUNDFour layers: an ambient bed, paper friction driven by scroll speed, one-shot foley and paste-in snaps — the ball touches the basket on frame 120.
MEMORYMEMORYDecoded frames live on a budget: 120 MB on phones, 380 MB on desktop — frames over the cap are closed.
BLENDBLENDScroll caught between two frames blends them by alpha — no stepping even at the slowest crawl.