Desktop optimized

Please maximize your browser window or use a larger screen to explore the component library.

Go to home

Elastic Carousel

A high-performance WebGL scroll component. Mathematically interpolates between a flat 2D gallery and an immersive 3D cylindrical carousel depending entirely on the user's swipe velocity.

Last Modified:Aug 17, 2026

Install

CLI

elastic-carousel
$pnpm dlx shadcn@latest add https://ui.satisium.com/r/elastic-carousel.json

Or install a specific demo variant:

elastic-carousel-demo
$pnpm dlx shadcn@latest add https://ui.satisium.com/r/elastic-carousel-demo.json

Manual

1. Install Dependencies

Dependencies
$pnpm add three @react-three/fiber @react-three/drei gsap @gsap/react clsx tailwind-merge

2. Add Source Code

Props

PropTypeDefaultDescription
imagesstring[]RequiredArray of image URLs to load into the deck.
cardWidthRationumber0.35Percentage of screen width the card occupies on desktop.
cardAspectRationumber1.4Width-to-height ratio of the cards.
gapMultipliernumber1.2Distance between cards in the 3D space.
radiusMultipliernumber1.2Controls the final cylinder size when fully bent.
scrollSensitivitynumber0.005How heavily the scroll wheel/drag affects movement.
lerpFactornumber0.08How buttery smooth the momentum is (0.01 to 1).
flexMultipliernumber0.5How aggressively the flat gallery bends into a 3D cylinder.
parallaxIntensitynumber0.08Intensity of the internal texture slide.
chromaticAberrationIntensitynumber0.003Intensity of the color split on scroll.
dimmingMultipliernumber0.4How much the cards darken as they move to the back.
cornerRadiusnumber0.04SDF corner radius (0.0 to 0.5).