Homepage hero loop

The current hero photo turned into an 8-second loop of the fingers typing, for Gera to approve or veto before it merges (homepage wave 2, slice S2).

2026-09-30 · branch feat/home-hero-video · not merged

The photo, with the fingers typing. The loop starts and ends on the hero photo, so it joins invisibly and fades in over the still after the page loads. Visitors who ask for reduced motion, or are on Save-Data or a 2G connection, keep the still and never download the clip.

The loop

If it doesn't play in Safari, open the MP4 directly.

ModelFrameDesktop MP4 (H.264)Desktop WebM (VP9)Phone MP4Poster
Seedance 2.5, 1080p, high bitrate1872×1010, 24 fps, 8.04 s3.18 MB · 3.3 Mbps1.22 MB · 1.3 Mbps0.70 MB · 0.73 MbpsThe hero photo itself

On the page

Captured mid-loop from a local build of the branch. The clip takes the photo's exact box and crop at every width.

Homepage hero at 1440 wide with the loop playing
1440 wide · WebM
Homepage hero at 1280 by 720 with the loop playing
1280×720 · WebM
Homepage hero at 390 wide with the loop playing
390 wide · phone MP4
Why this render: four renders compared (Seedance 2.5 shipped; the 4K ones drift or jump at the loop)

Four renders, each with the hero photo as start and end frame. Seam is how similar the frames are across the loop point (1.0 means identical). Steadiness is the lowest similarity of the laptop's side ports to the first frame; they should never move.

RenderWhat came backCameraSeamHandsResult
Seedance 2.5 · 1080p1920×1080, 6.2 MbpsLocked · 0.9890.993, inside normal motion (clip minimum 0.981)CleanShipped
Kling 3.0 · "4K"3840×2160 at only 1.4 Mbps, upscaler halosPush-in near 4 s · 0.9640.997CleanNot real 4K; moves
Seedance 2.0 · 4K, roll 13840×2160, 30 MbpsBreathing zoom · 0.9310.985, a visible jumpClean, livelierCamera moves
Seedance 2.0 · 4K, roll 23840×2160, 17 MbpsDrift · 0.9460.963, the worst step in the clipCleanLoop jumps

The 4K renders have more detail, but the camera drifts and the loop jumps, which the brief rules out. So the page ships at 1080p, native size, never upscaled. A 4K version would need a render that holds the camera still; two tries did not.

Frames 80, 96 and 112 of three renders stacked
Frames 80, 96 and 112. Top: Seedance 2.5. Middle: Kling. Bottom: Seedance 2.0. In the lower two rows the laptop edge sits lower: the camera has pushed in.
Hands and seam: frame-by-frame checks of the shipped loop
Twenty-four crops of the hands across the loop
The hands, three frames a second across the shipped loop. Five fingers on each hand throughout, no morphing.
The last four frames and first three frames of the loop
The last four frames, then the first three. The loop point is between the fourth and fifth crop.
PropFlow Docs