An experiment · design & motion · 2026

Amazonian geometry on a 64-pixel canvas

33 generative loops that turn a small LED panel into a gallery of Amazonian graphic systems. Everything moves, everything loops, nothing repeats the same trick twice.

Rosette tunnel loop
River meander loop
Forest ridges parallax loop
Labyrinth rings loop
4,096pixels total
33seamless loops
90frames each
12colours, pigment-born
01

The idea

A Divoom Pixoo-64 is a 64×64 LED matrix — 4,096 lights, usually showing clocks and 8-bit mushrooms. The experiment: treat it as the smallest art gallery in the house.

a

One visual world

Amazonian geometry. Indigenous graphic systems from ten different traditions, studied for their logic — not copied as ornament.

b

Three hard rules

Black is always the background. Colour comes from a fixed pigment-born palette. Every piece flows forward — always moving, never a slideshow.

c

One motion per piece

Each loop does a single thing: march, orbit, breathe, cascade, wind. A gallery works when the pieces don't shout over each other.

02

The research

Three questions before drawing a single pixel: which patterns survive a 64-pixel grid, which colours survive an LED panel, and how does a loop actually close.

What survives the grid

Survives ✓

Thick, modular systems: Baniwa basketry weave (literally a grid), Marajoara meanders and spirals, Wai-Wai diamond scales, Kené labyrinth lines, Yanomami checkerboards. Their logic maps 1:1 onto pixels.

Dies ✗

Fine parallel hatching (Asurini, Kayapó body painting) turns to moiré noise below 64 pixels. The lesson: borrow the logic — the axis rules, the border bands, the block fields — never the fine line.

The squint test

Shrink any design to 16×16 and squint. If the silhouette still reads, it will read on the panel. Half of every draft failed this test and went back.

A palette born from pigments

Urucum (annatto seed), jenipapo fruit-black, clay whites, forest greens — crossed with 2026 colour forecasts, which happen to be heading exactly toward earth and teal. Twelve colours, locked.

pastel green#A9C484 · field
pale celadon#CAD3C1 · field
moss#6B7F5C · field
kelp#2F6364 · cold counter
clay rose#E29989 · warm field
tabatinga#EDE6D8 · highlight
urucum#D4442A · sole accent
urucum orange#E2652F · accent
itawá ochre#C8933A · ochre
cacau#5C4438 · warm dark
line dark#3A332D · line
jenipapo#3A4A5C · lifted

What an LED panel actually does to colour

Black is “off”

An LED that isn't lit is true black — infinite contrast, for free. So black is reserved for the background and never used as a drawn colour.

The crush floor

Below roughly #202020, gamma correction renders every value as the same black. Real jenipapo is #16202B — invisible. It ships lifted to #3A4A5C.

Hue beats value

LEDs separate hue far better than dark values. So depth ramps step sideways through the palette — urucum → ochre → straw — never “same colour, darker”.

Fat strokes only

A 1-pixel line survives the bare panel but dies under a diffuser. Everything structural is 2 pixels or more.

03

The process

Three acts, one honest failure in the middle.

ACT I · ATLAS

Ten pattern traditions were redrawn as a procedural atlas — each one by its geometric logic, at full resolution and again at a true 64×64, to see what survived.

The atlas swatches became the design source for everything after.

ACT II · THE FAILURE

First motion attempt: keep the pattern still and slide a brightness wave across it. Technically seamless. Visually dead — “nothing really happens.”

The lesson became the project's core rule: light travelling isn't motion. Structure travelling is.

ACT III · STRUCTURE

Every pattern was rebuilt from zero as pure shader mathematics in Blender — no images at all. Now the rings actually crawl, the scales actually march, the markers actually orbit.

One mechanic per piece, thirteen mechanics total, so the gallery never repeats the same movement twice in a row.

Grammar borrowed from the masters

A study of 28 classic mask loops gave the motion grammar: 1-bit thinking, fat continuous fields, and a tiny change per frame — the smoothness lives there. Applied here with one inversion: where mask work flips black and white, this project keeps black sacred and shifts hue hierarchy instead.

04

The system

Every loop closes by construction, not by luck.

One clock

A single value T runs 0 → 1 across the clip, keyed one frame past the last rendered frame. Every moving field is frac(k ± T) or sin(2πT) — so frame 91 equals frame 1, exactly. No seam to hunt.

90 frames

The Pixoo's practical ceiling. At 15 fps that's a six-second cycle — long enough to not feel like a short repeat, smooth enough to feel continuous.

Hard palette, audited

Colours are snapped to the 12-colour palette after render — no in-between tones can exist. A verifier then measures panel coverage, colours used, and compares the loop's wrap delta against the average frame delta to certify it seamless.

Two bugs worth keeping

The parity trap

A ring of alternating-colour markers that rotates an odd number of slots per cycle lands with its colours swapped at the wrap. Rotate an even number, always.

The drift trap

In a piece that drifts N cells per cycle, colour can never depend on the cell index along the drift direction — at the wrap, every colour rotates. Colour by the perpendicular axis instead.

05

The prompts

The project has a generative-video companion route (a 34-prompt catalog for Seedance). Its most useful finding is an inversion:

Never ask a video model for pixel art

Ask for “pixel art” and you get an image pixelated on top — soft edges, dirty palette. The panel already downsamples everything. So the prompts ask for clean, flat, high-contrast geometry on pure black at full resolution — and let the reduction happen on the way to the panel. Vector-turned-pixel reads far better than raster pretending to be pixel.

// the constant block, appended to every prompt
Pure black background, RGB 0,0,0, no gradient, no vignette, no ambient glow, no fog.
Flat emissive colour fields only: no shading, no lighting, no cast shadows,
no reflections, no depth of field, no motion blur, no bloom, no film grain.
Perfectly centred, symmetrical, the motif fills the frame edge to edge.
Constant velocity throughout, no easing, no camera shake.
Seamless loop: the final frame must be identical to the first frame.
Limited palette only: pastel sage green #A9C484, pale celadon #CAD3C1,
deep moss #6B7F5C, annatto red #D4442A, ochre #C8933A, warm off-white #EDE6D8.
No text, no logos, no human figures, no animals, no photographic texture.
// sample — the highest-hit-rate loop request (rotational symmetry is arithmetic)
A single large rosette filling the frame on pure black, built from a continuous
labyrinth line of uniform thickness that folds back on itself in right angles,
never crossing, never ending. Eight-fold radial symmetry. The whole rosette
rotates clockwise at a dead constant speed and turns exactly 45 degrees over
the clip, which returns it to a state identical to the first frame.

The 33 finished pieces, though, were all built in Blender — where the loop is mathematics, not negotiation.