scroll-scrubbed-parallax

Implements scroll-driven parallax backgrounds using GSAP image morphs, video scrubbing, or canvas frame sequences.

Updated Aug 21, 2026
One-click install
npx skills add https://github.com/TylerSimons1127/vibe --skill scroll-scrubbed-parallax-tylersimons1127
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: scroll-scrubbed-parallax
Source: https://github.com/TylerSimons1127/vibe/tree/main/skills/creative/scroll-scrubbed-parallax
Command: npx skills add https://github.com/TylerSimons1127/vibe --skill scroll-scrubbed-parallax-tylersimons1127

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Building a landing page where a background animation advances, pauses, and reverses with scroll position is technically tricky: video scrubbing stutters, image morphs look like unrelated cross-fades, and frame sequences jank on mobile. This Skill provides tested implementation patterns for all three approaches so the scroll-driven effect works smoothly across devices. ## Core Features & Use Cases - Approach Decision Logic: Choose between JS image morph (GSAP ScrollTrigger), video scrub, or canvas frame sequence based on available assets and animation complexity. - Canvas Frame Sequence Guide: A complete implementation for drawing pre-rendered JPEG/PNG frames on an HTML5 canvas mapped to scroll position, including cover-fit scaling, DPR handling, progressive loading, and RAF throttling. - Scroll Pacing Technique: Linear interpolation with anchor points and a precomputed LUT to eliminate speed spikes, plus Playwright-based smoothness verification and glassmorphism text overlay patterns. - Use Case: A user wants a premium product reveal page where scrolling down morphs an assembled watch into an exploded component view. The Skill guides keyframe image generation for pixel consistency, implements the GSAP scrub, and adds reactive glow layers. ## Quick Start Build me a landing page hero where the background image morphs from state A to state B as the user scrolls down and reverses when scrolling up.

Frequently Asked Questions about scroll-scrubbed-parallax

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I make a background animation play as the user scrolls?▼

Map scroll progress (0 to 1) to animation progress using GSAP ScrollTrigger with scrub:true or a vanilla scroll listener. For two keyframe images, cross-fade and scale them; for pre-rendered frame sequences, draw the frame matching the scroll position on an HTML5 canvas.

Video scrub vs image morph for scroll-driven animation?▼

JS image morph is the default: instant seek, no buffering, works on mobile. Video scrub suits true 360-degree camera orbits but risks stutter and mobile Safari throttling. If pre-rendered frames exist, a canvas frame sequence gives the smoothest result with no seek latency.

Why does my scroll-scrubbed video feel jerky and forced?▼

Cubic or eased interpolation between anchor points creates mid-segment speed spikes up to 1.5x the average slope. Use linear interpolation with adjacent slope ratios of 2:1 or less, precomputed into a lookup table, so speed stays constant within each segment.

Does scroll scrubbing work on mobile Safari?▼

Video scrubbing is throttled on mobile Safari and large mp4 files seek slowly. Prefer the JS image morph or canvas frame sequence on mobile, keep animated layers to three or fewer, use will-change: opacity, transform, or fall back to a static hero with CSS parallax.

How do I keep text readable over a scroll-driven video background?▼

Place text on glassmorphism cards using background rgba(10,12,18,0.55) with backdrop-filter blur(20px) saturate(160%). Avoid nested backdrop-filters since Chrome renders them incorrectly, and drive entrance animations with a .visible class and CSS transitions rather than @keyframes.

How do I extract frames from a video for a canvas scroll sequence?▼

Use ffmpeg with -q:v 1 -vsync 0 to export lossless PNG frames; the imageio-ffmpeg Python package bundles a static ffmpeg binary if none is installed. A 10-second video at 24fps yields roughly 240 frames, which you serve over HTTP and draw by scroll-mapped frame index.