Desktop optimized

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

Go to home

Wave Carousel

A high-performance, sine-wave driven infinite carousel. Items mathematically scale up and down based on a cosine wave, creating a rolling hills visual effect using strictly 2D DOM manipulation for maximum FPS.

Last Modified:Aug 17, 2026

Install

CLI

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

Or install a specific demo variant:

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

Manual

1. Install Dependencies

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

2. Add Source Code

Props

PropTypeDefaultDescription
itemsWaveCarouselItem[]RequiredArray of image objects to display. Automatically duplicated to ensure an infinite loop.
visibleItemsnumber9Mobile-first default for visible items.
wavesnumber2How many repeating "hills" (sine waves) are visible across the screen at once.
maxHeightnumber400Mobile-first default for the peak item's max height in pixels.
minHeightnumber150Mobile-first default for the valley 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.