crucıble

Strand

A converging thread field: silver filaments strung between two off-screen loom anchors — ends pinned, free middles bowing under noise like threads at uneven tension. Each thread is a 1/|d| neon glow with a white-hot core and long silver falloff, depth-faded into a dim far weave; the cursor parts the field with a Gaussian bend that eases in and cascades from near threads to far. Original OGL fragment shader, DPR-clamped with a 1920px render cap, offscreen-paused, reduced-motion-safe.

oglfree

Installation

CLI

npx shadcn@latest add @crucible/strand

Manual — install dependencies, then copy the source

npm install ogl

Props

PropTypeDefaultDescription
colors[string, string]["#fafafa", "#a3a3a3"]Two tones: [core, tail]. core is the white-hot 1px filament center, tail is the silver its glow cools into. Any hex string.
lineCountnumber32Number of threads, clamped 2–64. A real uniform-driven prop — changing it live-updates the shader without ever rebuilding the GL context.
amplitudenumber1How far the free middles bow and wander under noise. 1 = default drift, 0 = perfectly taut threads.
spreadnumber1Vertical fan of the thread field as a fraction of the element height, clamped 0–1.5.
convergencenumber0.6How strongly both ends of every thread pinch toward the two off-screen loom anchors: 0 = parallel threads, 1 = full pinch.
speednumber1Drift speed multiplier. 1 = default.
intensitynumber1Overall glow brightness. 1 = default.
interactivebooleantrueThreads part around the cursor with a Gaussian bend that cascades from near threads to far ones.
bendRadiusnumber0.3Radius of the cursor bend, as a fraction of the element height.
bendStrengthnumber1How far threads part around the cursor. 0 disables the bend.
pausedbooleanfalseFreeze 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.