A free, animated image placeholder for low-data image galleries, 1-bit dither style. Every colour, text and motion setting is a runtime input.
Updated October 2026
The Dithered Lazy Image is a image placeholder with a 1-bit dither look, made for low-data image galleries. It animates an ordered-dither landscape with a gently moving ridge, and a tap loads the full image or goes back. It also has keyframes you can edit in the ExodeUI timeline: an entrance and an ambient float.
These 23 inputs, plus the replay and tap triggers, can be set from the customizer above, from the ExodeUI studio, or from your code while the element runs.
| Input | What it changes | Type |
|---|---|---|
| caption | Caption | Text |
| smallSize | Dithered size | Text |
| fullSize | Full image size | Text |
| inkColor | Ink | Colour |
| paperColor | Paper | Colour |
| skyTop | Full image sky | Colour |
| skyBottom | Full image horizon | Colour |
| hillColor | Full image hills | Colour |
| cell | Dither cell size | Number |
| radius | Corner radius | Number |
| lift | Hover lift | Number |
| interactive | Mouse interaction | On/off |
| tilt | Hover tilt (deg, 0 = off) | Number |
| press | Press squish | Number |
| float | Extra idle float (px) | Number |
| speed | Animation speed | Number |
| intro | Entrance animation | On/off |
| introStyle | Extra entrance style | Choice |
| introDuration | Entrance duration (s) | Number |
| colorTween | Colour change fade (s) | Number |
| pageMode | Page background | Choice |
| pageTop | Page colour | Colour |
| pageBottom | Page gradient end | Colour |
npm i exodeui.ExodeUICanvas and pass your text, numbers and colours as inputs.import { ExodeUICanvas } from 'exodeui';
export function DitheredLazyImageWidget({ data }) {
return (
<ExodeUICanvas
src="/ui-trends/files/sustainable/05-dithered-image.bexode"
autoPlay
style={{ width: 600, height: 400 }}
inputs={{
caption: data.caption,
smallSize: data.smallSize,
// every colour is an input too, for example a brand accent
...data.theme
}}
/>
);
}