KQ-1783 · RAIN/LAMP

Rain Lamp

A retro rain lamp in a dim room: beads of glowing oil form at a brass crown and slide down a ring of taut threads around a small fern sculpture, accelerating toward a speed that grows with their size, merging with momentum kept where a faster bead catches a slower one, and landing in a shallow basin with a ring on the oil, while the ring turns slowly so threads pass behind the fern and across its front. Sweeping the pointer across the threads plucks every one it crosses: each rings as a decaying standing wave while its beads shiver and stall, then run on together, and the beads you shook loose plip as they land. The lamp is a button: Left and Right move a finger along the threads and Enter or Space plucks the one under it.

KQ-1783 · RAIN/LAMP

Sweep across the threads to pluck them. Left and Right move a finger along the threads; Enter or Space plucks the thread under it.

Basinworks · Lighting

Rain Lamp, 1972 reissue

Mineral oil on nylon threads, a brass fern, a warm bulb.

$240.00

raining · 14 threads · sweep across them to pluck

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/rain-lamp

Props

filaments
number
default 14
How many taut threads hang in the ring, 6 to 24.
dripRate
number
default 0.5
How often a bead forms at the crown, per thread per second, 0.1 to 1.5.
glow
"amber" | "rose" | "violet" | "teal" | string
default "amber"
The colour the oil glows: a preset, or any CSS colour.
turn
number
default 0.35
How fast the ring of threads turns, 0 (still) to 1 (a turn every twenty seconds).
speed
number
default 1
How fast the beads slide, 0.5 to 2.
beadSize
number
default 1
How big the beads grow before they let go, 0.5 to 1.5.
merge
boolean
default true
A faster bead that catches a slower one merges with it.
sculpture
boolean
default true
Stand the fern sculpture in the middle of the ring.
pluck
number
default 0.6
How hard a pass of the pointer plucks the threads it crosses, 0 to 1.
interactive
boolean
default true
The pointer and touch pluck the threads. Keys still do.
paused
boolean
default false
Hold the oil and the ring still.
seed
number
default 7
Seeds the beads' sizes, timing and the film's unevenness.
dpr
number
default 2
Cap on the canvas's device pixel ratio, at most 2.
label
string
default "Rain lamp"
The lamp's accessible name.
sound
boolean
default false
Play a plip as each bead you shook loose lands. Off unless asked for.
onPluck
(thread: number) => void
default —
Fires when a thread is plucked, by pointer, touch or key, with its index.
disabled
boolean
default false
Nothing reaches the threads and the lamp's button is disabled.
className
string
default "h-[30rem] w-full"
Sizes the lamp; it is drawn to fit the box.