Nature ↔ computation. Art ↔ data.
Dither is Milo's signature behaviour: the visible moment where the raw becomes the interpreted. Printmaking, scientific imaging and museum conservation, not glitch.
- 01original
- 02pixels emerge
- 03dither spreads
- 04channels separate
- 05interpretation resolves
- 06data layer appears
1.4 s, print easing. Under prefers-reduced-motion the final frame is drawn at once. Frames are computed from a cached final; nothing is recomputed at rest.
Every primitive, rendered here, now.
One nature image, 320px working width, each effect timed on this machine. Effects are adjustable, reusable, non-destructive and config-driven; the playground exposes every parameter.
A recipe is a plain object.
The engine takes the config unchanged. Tokens resolve colours before the engine sees them, so the same object renders the same pixels in the browser, in a worker and in Node, where every derivative in this package was produced.
{
"effect": "tritone-dither",
"shadow": "#0B0C09",
"midtone": "#758C3A",
"highlight": "#F04A24",
"matrix": "bayer8",
"strength": 0.68,
"grain": 0.08
}
Fast enough to be invisible.
Node, single thread, ≤1200px working width, 60 art and nature originals:
| recipe | n | mean ms | min | max |
|---|---|---|---|---|
| archive | 60 | 33 | 8 | 76 |
| paint | 40 | 63 | 29 | 168 |
| national-park | 60 | 52 | 15 | 105 |
| nous | 60 | 36 | 9 | 79 |
| field-study | 20 | 52 | 16 | 99 |
Browser timings appear next to each effect above and in the transition readout. Working width is capped at 1600px; previews at 720px; results cached per image, recipe and size; OffscreenCanvas used for decode where available.
- Cyberpunk glitching
- VHS tracking
- Random distortion
- Continuous recompute at rest
- Ordered, error-diffusion, halftone
- Plate separation, registration
- Edge extraction, grid sampling
- Controlled, seeded distortion