KQ-1208 · FILM/BURN

Film Burn

An image placeholder that is a frame of unexposed film: light gets in through the flickering perforations first, then burns in from every edge on a ragged, breathing front — white-hot, amber, ember ahead — computed on a coarse grid and scaled up smooth, while a light leak drifts across and the picture it uncovers is blown out and warm. When the burn has taken the frame and the picture is ready, the overexposure, leak and grain clear on the enter ease and the perforations leave. Hovering holds the burn where it is, and the frame is a real toggle button, so a press, Space or Enter latches the hold.

KQ-1208 · FILM/BURN

Hover to hold the burn where it is, or press to hold it until you press again.

Evening sail, Port Avel2 h · 6 berths

exposing · hover or press to hold the burn

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/film-burn

Props

alt
string
default —
What the picture shows. Always its accessible name: the picture's role="img" label, or the img's own alt for src.
src
string
default —
The picture's address. Without it, children is the picture.
children
ReactNode
default —
The finished picture when there is no src: an inline SVG or an image, sized to fill the box.
ready
boolean
default —
Controlled: the picture may show. Uncontrolled, it is ready once the picture exists (a src has loaded or failed) and the burn has had its run.
progress
number
default —
0 to 1, while not ready: how far the effect may come, for a determinate load.
onReady
() => void
default —
Fires once per load, when the effect has resolved and the picture is whole.
speed
number
default 1
How fast the light burns in and clears, 0.5 to 2.
leak
"amber" | "rose" | "teal"
default "amber"
The colour of the light leak drifting across the frame.
grain
number
default 0.5
Film grain over the film and the burned picture, 0 (clean) to 1 (coarse, dancing). It clears with the frame.
sound
boolean
default false
Play a soft whoosh when a press holds the burn and a brighter one when it lets it catch again. Hover and the burn itself are silent.
disabled
boolean
default false
The film still burns; it cannot be held.
className
string
default —
Sizes the box; the default is aspect-[21/9] w-full.