
Dynamic Island Toast
A pixel-faithful Apple Dynamic Island that morphs, splits, and breathes while it hosts live activities inside your app.
An Apple-style image sequence scrubbed frame by frame on canvas, following your hand as you scroll in either direction.
Scrubbable Video Reveal is a React and Tailwind CSS scroll scrubbed image sequence, the apple.com product video effect, in Next.js or any React app, built on Framer Motion. It skips the video tag, since compressed video scrubs badly backward, and preloads every frame, maps scroll progress to a frame index, and draws it to a canvas sized for retina screens. It can pin, sit in a device frame, and carry overlays as children. Reduced motion loads only the last frame and shows it still. Keep to 100 to 200 compressed WebP frames, since eager preload fetches them all.
Run the following command
pnpm dlx wensity@latest add scrubbable-video-reveal
npx wensity@latest add scrubbable-video-reveal
yarn dlx wensity@latest add scrubbable-video-reveal
bunx wensity@latest add scrubbable-video-reveal
Import ScrubbableVideoReveal from @/components/wensity/scrubbable-video-reveal and render it anywhere in your React or Next.js app. The source lands in your own repo, so every prop, class and animation below is yours to edit.
"use client";import { ScrubbableVideoReveal } from "@/components/wensity/scrubbable-video-reveal";const frames = Array.from({ length: 180 }, (_, i) =>`/sequence/frame-${String(i).padStart(4, "0")}.webp`);export function ScrubbableVideoRevealDemo() {return (<ScrubbableVideoRevealframes={frames}aspect="16 / 10"travel={3}framed/>);}
| Prop | Type | Default | Description |
|---|---|---|---|
frames | string[] | - | Image sequence URLs in order. Prefer 100–200 compressed WebP / JPEG frames. |
aspect | string | "16 / 10" | Aspect ratio for the canvas wrapper. |
travel | number | 3 | Scroll travel multiplier. Total inner height is travel × 100vh. |
framed | boolean | true | Render the surrounding device frame. |
sticky | boolean | true | Pin the canvas via position sticky while the user scrolls. |
children | React.ReactNode | - | Optional content rendered above the canvas as overlays. |
useWindow | boolean | false | Use window scroll instead of an inner scrollable container. |
preload | "eager" | "lazy" | "eager" | Loading strategy for image preload. |
height | string | "640px" | Scroll container height when useWindow is false. |

A pixel-faithful Apple Dynamic Island that morphs, splits, and breathes while it hosts live activities inside your app.

A seamless, GPU-only logo strip that never stutters or snaps at the loop point.

A pinned cinematic section that morphs in lock-step with scroll, staying perfectly in sync whichever way you travel.

Lava lamp background for React heroes: soft gradient shapes that drift and melt.