KQ-1201 · DARKROOM/DEVELOP

Darkroom

An image placeholder that develops the real picture like a print in a darkroom tray: under a red safelight it comes up from blank paper through a print's tone curve — shadows, then midtones, then highlights — in twelve bands, each sped where the developer's slosh has just washed over it. Dragging tips the tray 1:1 and the liquid, an underdamped oscillator drawn as a travelling crest and the lamp's glint, sloshes after it, so a hard rock brings the print up in half the time; the tray levels on springs.glide with the throw, keyboard rocks go out on springs.snap and home on springs.glide, and when the picture is ready the liquid drains, the safelight switches off and the room light brings up its colour. Arrow keys tip the tray and Enter or Space rocks it both ways.

KQ-1201 · DARKROOM/DEVELOP

Fernworks Photo Lab · roll 6 · frame 14

Drag side to side, or press the arrow keys, to rock the developer and hurry the print.

developing · rock the tray to hurry it

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/darkroom-develop

Props

alt
string
default —
What the picture shows. Exposed the whole time, while it develops and after.
src
string
default —
The image to develop. Without it, children is the picture.
children
React.ReactNode
default —
The finished picture when there is no src: any element that fills its box, such as an inline SVG illustration.
ready
boolean
default —
Controlled readiness. Uncontrolled, an image is ready once it has loaded (or failed), and children at once — the print's own development is then the minimum run.
progress
number
default —
How much of the picture has arrived, 0 to 1. Until ready, the print holds at that stage.
onReady
() => void
default —
Fires once per print, when the lights are on and the picture is whole.
speed
number
default 1
How fast the print comes up and the hand rocks the tray, 0.5 to 2.
safelight
boolean
default true
Develop under a red safelight that switches off when the print is done. Off, it develops grey on white in plain light.
grain
number
default 0.4
Silver grain that clumps as the image forms and clears with the room light, 0 (clean) to 1 (coarse).
sound
boolean
default false
Play a swish for each stroke of a rock, each keyboard rock and a flicked release. Development and the switch-off are silent.
disabled
boolean
default false
The print still develops; the tray cannot be rocked.
className
string
default —
Sizes the box; it is aspect-[4/3] w-full by default.