PRO

Fisheye Scroll

A pinned poster whose oversized word is a repeating marquee sampled through a WebGL lens. Scroll slides the strip from left to right. Behind the person the lens inverts so the sides grow around the figure. In front it enlarges from the middle. Three.js, GSAP ScrollTrigger, Lenis.

Component

The word holds.

Install
npx shadcn@latest add https://ui.aryank.space/r/fisheye-scroll.json

Installs from ui.aryank.space. To add it by hand, copy the files in Usage below, or register the @compronents namespace via the docs.

Files

API
PropTypeDefaultDescription
textstring"GIANTS"Word painted into the fisheye texture.
portraitSrcstring"…/fisheye-scroll/portrait.png"Cutout that sits unwarped over the word.
backgroundstring"#e83210"Poster field behind the word.
textColorstring"#f1cbb6"Colour of the painted word.
effect"behind" | "forward" | "both""behind"behind: inverted lens under the person. forward: centre-enlarged letters over the person, canvas is transparent so the face stays visible. both: the two stacks together.
intensitynumber1Barrel strength multiplier.
zoomnumber1How tight the crop is. Lower values show more of the word.
portraitScalenumber1Base scale of the cutout overlay.
outroTextstring"The word holds."Line on the panel after the pin.
embeddedbooleantrueOwn an internal scroll container (true) or use the window scroll (false).
Customize
texttext

The oversized word painted into the lens.

background / textColorcolor

Poster field and word colour.

effecttext

behind, forward, or both. Forward is a transparent strip over the person.

intensityslider

How hard the barrel lens bends the word.

zoomslider

How tight the crop is on the marquee.

portraitSrcasset-url

Hosted through https://ui.aryank.space/assets/fisheye-scroll/portrait.png.

Dependencies
gsaplenisthree