All projects
GSAP ScrollTrigger Animation

Archon — Scroll-Driven Video Sequence

Cinematic scroll-driven demo where scrolling plays a 241-frame WebP image sequence frame-by-frame. GSAP ScrollTrigger scrubs the canvas, Lenis handles smooth inertia, with parallax text and animated sections below.

Archon Demo

Scroll drives a 241-frame WebP sequence on a full-viewport canvas — creating the illusion of a video controlled entirely by scroll position. No video element, no autoplay. Pure canvas + GSAP scrub.

How the Scroll Video Works

241 frames (seq000.webpseq240.webp) preload into an Image[] array on page load. A <canvas> covers the full hero. GSAP animates a state.frame counter from 0 to 240 tied to scroll via ScrollTrigger with scrub. Each update draws the current frame to canvas with cover-fit scaling.

Hero pins to the viewport for the full scroll distance of the sequence:

end: '+=' + (FRAME_COUNT - 100) * (isMobile ? 22 : 10)
// ~1410px desktop  /  ~3102px mobile scroll travel

Hero text (title, subtitle, CTA) scrolls at independent yPercent parallax rates over that same distance, creating depth separation from the canvas.

Sections (after pin releases)

SectionEntrance animation
Protocols (4 cards)3D perspective rise + per-card flip stagger
CountersClip-path bottom wipe + animated count-up
MarqueeInfinite horizontal loop, cinematic zoom-out entrance
Big LinesPer-line blur-drop reveal + amber underline draw

Mobile Behavior

  • Lenis smooth scroll with reduced multiplier (0.4) on touch
  • Scroll travel per frame increased (×22 vs ×10 desktop) for thumb-scroll pacing
  • Card grid collapses to single column
  • Typography scales via clamp()
  • prefers-reduced-motion: all animations skip, loader hides instantly

Tech Stack

LibraryVersionRole
GSAP3.12.5Animation engine, ScrollTrigger, scrub
Lenis1.1.14Smooth scroll inertia
Cinzel + RajdhaniGoogle Fonts
Dune_Rise.otfCustom display heading font

No build step. Single index.html + assets.

Frame Sequence Requirements

  • Format: WebP
  • Naming: seq000.webpseq240.webp (3-digit zero-padded)
  • Folder: sequence/
  • Frame count controlled by FRAME_COUNT = 241 in script

Built by

Viseni Design Studio

3D, WebGL, interactive & VR/AR experiences

Visit viseni.com