Dither Torch
imageProA photo printed as a living dither (bayer, halftone, hatch or grain); the pointer is a torch that burns through to full colour and leaves a fading trail.
Opening soon
Pro cannot be bought yet. The page opens when payment is ready.
Preview
The preview could not load.
Live demo. The theme switches the demo itself.
Code
dither-torch.tsxPro
The code is locked
Dither Torch is part of Manniche UI Pro. A key unlocks the source of all 60 effects.
Opening soon€49 · Introductory price until 31 December 2026. €79 after that.
- One-off payment
- One developer
- Your key arrives by email straight away
- No VAT (§ 19 UStG)
Have a key? Get the code with the CLI or MCP.
The key lives in MANNICHE_PRO_KEY, never in your code or a URL. How to set it up
CLI
npx shadcn@latest add @manniche-pro/dither-torchMCP
claude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
DitherTorchProps
| Prop | Type | Default | What it does |
|---|---|---|---|
src required | string | – | The photo. Cross-origin images must be served with CORS headers, or the still image is shown instead. |
alt required | string | – | Describes the photo for screen readers. |
mode | DitherTorchMode | 'bayer' | How the tones are printed:
|
dotSize | number | 4 | Size of one dither cell in CSS pixels. |
radius | number | 150 | Radius of the torch in CSS pixels. |
softness | number | 0.35 | 0 tears the photo open through the dither pattern; 1 fades it in smoothly. |
trail | number | 0.5 | 0 to 1: how long the torch's trail lingers after the pointer moves on. |
wave | number | 0.6 | 0 to 1: how strongly the idle swell moves through the print. 0 holds it still. |
contrast | number | 1.15 | Tone contrast before dithering. 1 leaves the photo as it is. |
ink | string | '#f1ebe0' | Ink colour, as hex. |
paper | string | '#0d0c0b' | Paper colour behind the ink, as hex. |
tint | number | 0.15 | 0 to 1: how much of the photo's own colour seeps into the ink. |
fit | 'cover' | 'contain' | 'cover' | cover crops the photo to fill the box, contain shows all of it. |
focusX | number | 0.5 | Horizontal focus point from 0 (left) to 1 (right), used when cover crops the photo. |
focusY | number | 0.5 | Vertical focus point from 0 (top) to 1 (bottom), used when cover crops the photo. |
children | ReactNode | – | Content shown on top of the print. |
className | string | – | – |
A11y
No accessibility notes written yet.
The notes come with the source when Pro opens.