Doodle Faces

Ink faces, generated by code.
One seed β†’ always the same face.

The population decides who shows up β€” which kin, which archetypes, in what proportion. The menus below pin a trait for everyone and override it.

From a photo

Drop in a portrait and the generator measures it β€” skull proportions, where the eyes sit and how far apart, brow weight, mouth width and curve, hair volume, beard, glasses β€” then draws the nearest face it can. It stays a doodle: it is a likeness, not a portrait.

The photo never leaves this tab. This is a static site with no server behind it; the face detector is fetched to your browser (about 6 MB, once, on first use) and the measuring happens here. Nothing is uploaded, nothing is written to disk, nothing is kept between visits, and Forget or a reload drops it. The share link carries the resulting numbers, never the picture.

or drop one here

Traits
Pose & pen
Lineage

Cross this portrait with another and keep the child. Enum traits are inherited whole; numbers are blended with a little drift.

Proportions
Sheet
Export
Genome

Edit any value and press Apply: the portrait redraws. The menus only reach the named traits β€” the resemblance lives in the numbers.

About

No dependencies, no build step β€” plain Canvas 2D and ES modules. A face is a genome: a JSON object of traits derived from a seed. Store the seed, not the image.

Keyboard: f focus, c compare, k keep, r new seed, ← β†’ step through. Downloads save a file when the page is served normally; some embedded viewers block them.

Four layers stack, general to specific: population β†’ kin β†’ archetype β†’ pins. See README.md for the API, the atlas export and the Godot 4 loader.

Drag the portrait to turn the head Β· ← β†’ to step through

A
B
Kept