Components / Text Animations / Bitmap Text
Bitmap Text
Type rasterised and dithered into particles. Grain decides whether the letterforms read as solid or as a cloud that still resolves as words.
Usage
import BitmapText from '@/components/bitmap-text'
<BitmapText
text="BITMAP"
grain={0.6}
cell={5}
dither="bayer4"
/>Installation
npx shadcn@latest add https://morphiq.prathampatel.design/r/bitmap-text.jsonModel
(v) => String(v.dither).startsWith("bayer") ? "out = level(tone + (M(x, y)/n² − ½)/levels)" : v.dither === "none" ? "out = round(tone · (levels − 1)) / (levels − 1)" : "e = tone − out; e spreads to unvisited neighbours by the kernel’s weights"M the Bayer matrix, n its size · error diffusion carries each cell’s rounding error forward, so tone is conserved over area
Props
| Property | Type | Default | Description |
|---|---|---|---|
cell | number | 5 | Pixels per cell. Smaller is finer and costs more per frame. |
levels | number | 2 | Tone steps. 2 is one-bit; higher posterises. |
dither | DitherKernel | 'bayer4' | — |
ditherAmount | number | 1 | 0 passes the tone through untouched, 1 applies the kernel in full. |
serpentine | boolean | true | Alternate scan direction. Error-diffusion kernels only. |
contrast | number | 1 | — |
brightness | number | 0 | — |
invert | boolean | false | — |
warp | number | 0 | Flow-field shear, in cells. |
cursorRadius | number | 160 | Reach of the pointer's influence, in px. |
cursorStrength | number | 0 | Outward push at the centre of that reach, in px. |
cursorLift | number | 0 | Luminance added at the centre of that reach. |
color | string | '#e8e4dc' | — |
background | string | null | '#0a0b0e' | null renders transparent. |
paused | boolean | false | Stops the frame loop without unmounting. |
respectReducedMotion | boolean | true | Honour prefers-reduced-motion, and keep honouring it if it changes. |
fullscreen | boolean | false | Position the field to the viewport rather than its container. |
text | string | 'BITMAP' | Rasterised to the canvas, and used as the element's accessible name. |
fontFamily | string | 'ui-sans-serif, system-ui, -apple-system, "Helvetica Neue", sans-serif' | — |
fontWeight | number | string | 800 | — |
fontSize | number | 'auto' | 'auto' | CSS px, or 'auto' to fill the box. |
letterSpacing | number | 0 | In em. |
lineHeight | number | 1.05 | — |
align | 'left' | 'center' | 'right' | 'center' | — |
padding | number | 24 | Inset from the edges, in CSS px. |
grain | number | 0.6 | 0 leaves the glyphs solid; 1 is pure particles. |