Power-User Systems

Vortex Bloom

A molten-gold-and-obsidian vortex funnel spiraling into a luminous SDF core — lotus, gem, or flame — raymarched per-pixel in a WebGL2 shader, with a GPU dust field spiraling down the flow toward the throat, all under a draggable orbit and a real two-pass bloom.

Install

bun add ogl clsx tailwind-merge

Then copy 3 files into your project:

  • components/registry/vortex-bloom/vortex-bloom.tsx
  • hooks/use-animation-loop.ts
  • lib/utils.ts

Props

PropTypeDefaultDescription
primarystring (hex)"#f0a830"Molten-gold high tone — the color of the swirling streaks and the throat glints.
secondarystring (hex)"#120e1a"Obsidian deep tone — the funnel's shadowed lanes and the void behind it.
accentstring (hex)"#ffe7a3"Luminous core-emission tint. Drives the color of the convergence bloom and the dust as it reaches the core.
coreObject"lotus" | "gem" | "flame""lotus"The centerpiece sitting at the vortex's convergence — a layered petal lotus, a faceted crystal, or an animated flame plume. Swapping it never moves the point the dust flows toward.
coreScalenumber1.5Scales the centerpiece — lotus, gem, or flame — up or down without moving the convergence the dust flows toward.
stemLengthnumber1.4Length of the lotus stalk hanging into the flow beneath the flower. Lotus only; 0 removes it.
vortexIntensitynumber7Swirl speed, streak turbulence, and dust inflow speed. Higher winds the funnel tighter and faster.
glowIntensitynumber8Core emission and HDR bloom strength. Drives how hard the convergence and the dust bloom.
particleDensitynumber200Dust grains spiraling down the flow. Capped at 1200 to hold 60fps on a mid-range GPU.
particleSpeednumber0How fast the dust grains stream down the flow toward the core, independent of the swirl speed.
smokeAmountnumber0.6Soft, low-frequency atmospheric haze drifting behind the ribbons. 0 leaves crisp streaks on obsidian; higher fills the frame with smoke.
cameraAutoRotatebooleantrueContinuously orbit the funnel. Drag to take 360° control; the orbit resumes around your current view a moment after you let go.
rotationSpeednumber1Speed of the cinematic camera orbit.
fovnumber60Observer field of view. Wider exaggerates the whirlpool's depth; narrower flattens it.
verticalOffsetnumber0Slides the whole vortex up or down in the frame without moving the camera — recenter the eye where you want it.
chromaticAberrationnumber0.15Lens-edge color fringing, strongest toward the corners.
vignettenumber0.4Darkening toward the frame edges.
grainnumber0.02Animated fine film grain over the final image.

What It Demonstrates

Orbit
An element circling around another in a continuous path.
Loop
An animation that repeats, a set number of times or infinitely.
Drag
Moving an element by grabbing it, often with momentum when released.
Blur
A blur filter used to soften an element or mask tiny imperfections.

Related Components

Appears In