3 Output
Each cell uses the nearest palette color (perceptual).
Each cell quantizes to one of N dot sizes (smallest = empty).
Generates a height map for fabricating a physical relief panel. Carve / mill / 3D-print the depth, light it from one edge at a grazing angle, and the image emerges in cast shadows.
Longest edge of the depth map. CNC mills typically work well at 200–500; 3D printers can handle higher.
Which edge of the panel the LED strip will sit on. Preview simulates the shadows you'll actually see.
Direct: bas-relief — bright pixels stay high, dark pixels are recessed. Edges cast the shadows.
2
1.25
Raking light simulates the LED-from-edge installation — what shadows you'll actually see. Height map shows the raw depth data.
Used by the STL export only. 200×200 mm panel with 8 mm max recess is a sensible "wall art" starting point.
PNG 16-bit → CNC software (Carveco, Vectric, Estlcam). STL → 3D printer / Bambu / Prusa. OpenSCAD → parametric model you can tweak.
A camera that renders only what changes. Inspired by Anna Zhang's Change Capture — film what happens instead of what exists.
Locked reference: press Set reference to capture the background, then anything new shows up against it. Best for "what changed while I was gone."
Uses your laptop / phone webcam via getUserMedia. Browser will prompt for permission the first time.
Upload two images of the same scene. The output is the per-pixel difference.
14
Per-channel pixel-value change required to count. Lower = noisier (registers tiny shifts). Higher = only big changes.
Mono: white marks on black. Heat: cool→hot palette, hot = most recent / largest change. Real color: actual pixel color where it changed. Mono on white: black marks on white — paper-ready.
Processing width. 480 = smooth on most laptops. Drop to 320 if it stutters.
In trails mode, "Save" gives you a long-exposure of the change you've recorded.
Longest edge of the sprite in real pixels. Common: 16, 32, 48, 64. The other edge follows the crop's aspect.
1.12
1.25
Photos are tonally flat — a contrast/saturation lift before quantizing gives the sprite punch. Set both to 1.00 for neutral.
k-means clusters the image into this many colors.
Uses your palette from Palette mode (edit it there).
How source pixels map onto the palette. By color = nearest hue+tone (full-color palettes like PICO-8). By brightness = tonal ramp (Game Boy, 1-bit). Auto picks based on the palette.
Dithering fakes extra shades from a small palette — classic for low-color sprites.
.gpl → Aseprite / GIMP / Krita / Pixelorama. .pal → JASC / Pro Motion / Grafx2. .hex → Lospec. .png → a swatch strip any tool can import a palette from.
Final-output mode. The PNG is the artwork — there's no per-cell instruction layer. Print, frame, post.
Process resolution. Higher = finer streaks.
120
Pixels above (bright) / below (dark) this lightness join into "sortable" runs. The longer the runs, the more dramatic the streaks.
Process resolution. Larger = finer rosette pattern but slower.
One halftone cell at process resolution. Smaller = denser rosette.
For burning silkscreens. Black where ink prints. Production-ready format.
For digital review. Each channel rendered in its ink color on white — shows what each layer "looks like" before stacking.
Image is processed at this width (pixels), then scaled up. Lower = chunkier, more visible dither pattern.
Uses your palette from Palette mode. Edit palette there, dithering quantizes to those colors.
Vectorises the dithered image into cuttable polygons. 1-bit = single mask. Palette = one mask per color (zip-style multiple files).
Each cell quantizes to one of N stroke densities.
Even: every cell cross-hatches at all angles, density rises with value. Stacked: angle 1 fills first, then 2, etc. (like a pencil artist).