Desktop optimized

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

Go to home

Convex Carousel

A high-performance, physics-based infinite carousel. Items mathematically scale based on an inverted parabola, creating a 3D "convex" lens bulging visual effect using strictly 2D DOM manipulation for maximum FPS.

Last Modified:Aug 17, 2026

Install

CLI

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

Or install a specific demo variant:

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

Manual

1. Install Dependencies

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

2. Add Source Code

Props

PropTypeDefaultDescription
itemsConvexCarouselItem[]RequiredArray of image objects to display. Automatically duplicated to ensure an infinite loop.
visibleItemsnumber7Mobile-first default for visible items.
maxHeightnumber450Mobile-first default for the center item's max height in pixels.
minHeightnumber120Mobile-first default for the outer items' min height in pixels.
breakpointsRecord<number, CarouselBreakpoint>undefinedTailwind-style min-width breakpoints for responsive sizing. e.g., { 640: { visibleItems: 5 } }
autoMovebooleanfalseWhether the carousel should move automatically.
autoMoveType"continuous" | "step""continuous"The type of auto-movement.
autoMoveSpeednumber0.01The velocity of the continuous auto-scroll.
stepIntervalnumber3000The delay (in ms) between steps if autoMoveType is "step".
stepDurationnumber1The duration (in seconds) of the snapping animation.
scrollMultipliernumber0.005How aggressively the carousel responds to drag velocity.
frictionnumber0.95The physics friction applied to drag momentum.