crucıble

Sateen

Flowing lit fabric: broad domain-drifted folds carry fine silky striations while a satin specular band — an orbiting light caught by the cloth's gradient — sweeps across the drape. Moonlit pewter-blue, billows under the cursor. Original OGL fragment shader, offscreen-paused and reduced-motion-safe.

oglfree

Installation

CLI

npx shadcn@latest add @crucible/sateen

Manual — install dependencies, then copy the source

npm install ogl

Props

PropTypeDefaultDescription
colors[string, string]moonlit pewter-blueTwo-stop palette: [base, sheen]. base is the deep body of the cloth, sheen the pale satin highlight that sweeps across it. Any hex string.
speednumber1Drift speed multiplier. 1 = default slow drape.
scalenumber1Overall zoom of the weave, clamped 0.25–4.
rotationnumber18Drape angle in degrees — tilts the whole cloth.
sheenIntensitynumber1Strength of the orbiting satin highlight, 0 disables it entirely.
foldDensitynumber1Frequency multiplier for the broad slow folds, clamped 0.25–4.
striationDensitynumber1Frequency multiplier for the fine silky ridges riding the folds, clamped 0.25–4.
interactivebooleantrueWhen true the cloth billows softly under the cursor and settles after it leaves.
pausedbooleanFreeze the animation, holding the current frame.
Also accepts all props of React.ComponentPropsWithoutRef<"div">they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, pauses offscreen and on hidden tabs, and passes className through.