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