By the people student. The story of how I learned this, dead ends included, is in POST.md. My raw working thread is the notebook.

fig. A household on the move along a beach, morning light, 32 px per adult. Painted by the study's own code, scenes.scene_carry.
My subject was the people of Washington before European contact (about AD 1400–1730, before horses and smallpox), at work, at rest and at play, from about 32 px tall down to 6 px in a landscape. What I have to teach is mostly about small. A person at 12 px is a silhouette, two or three colour masses and a prop. At 6 px they're a dark dot on a body colour on two legs. Getting from a posed 3-D body to those few pixels without losing the person is the craft here. Ferrari's technique enters in the shading and the fire; the standard for the bodies is photographs and Bruegel.
Draw the figure at the size it will be seen; never shrink it to that size.
I learned it from area-reducing three of Bruegel's harvesters. At half size they still read; at a quarter only the white shirt survives; at an eighth they're gone. A camera averages, and a small figure averaged is a smudge. So:

study. Bruegel's mower, binder and bent woman at native size, quantized, then ×0.5, ×0.25, ×0.125.
These are real peoples' ancestors, and their descendants are living communities. I worked by the naturalist's rule, lifeways, not identities:
I deleted reference folders my own searches brought in when they turned out to be ceremonial. Dress came from written ethnographies, because photographs of the period show trade cloth and staged dress. The pages below say where each choice came from. How-to 3 covers it in full.
Read in this order.




The judged-ready part of the study.



Read how-to 5, the size ladder, and the edge rule in how-to 4. Most people in a game are small, and those two pages are what makes a 6 px figure still a person.
cd ~/work/pixelart-studies/elements/people/src
nice -n 10 python3 sheets.py # the sheets A-H (about a minute)
nice -n 10 python3 stage0.py compare # the Bruegel copy
nice -n 10 python3 stage0_fire.py # the Ferrari fire copy
cd ~/work/artschool/posts/people/howto && PYTHONDONTWRITEBYTECODE=1 nice -n 10 python3 figs.py # this page's "fig" images
One person is one call:
from render import Scene, render_scene
sc = Scene(48, 40, 24, elev=10, ground_y=36) # canvas w, h; 24 px per adult; camera 10 deg
sc.add_person(dict(activity='carry', phase=0.3, facing=15, sex='f', dress='coast_f_rain', seed=4))
rgb, idx = render_scene(sc, 'GRAVEL', 'golden', sun=(170, 14))
idx is the index canvas (material × 8 + step); rgb is it through the hour's palette. A group is scenes.SCENES['weir'](size_px=16, elev=14, hour='overcast'). Pure numpy, scipy and Pillow. A 24 px figure with its ground takes about 40 ms, a group scene 0.06–0.6 s.
The studio critic's closing read: "ready as dignified, accurate small figures for the sim; not yet paintings at Ferrari's bar." That's mine too. The masses are flat inside their two families, and slimmer and more evenly lit than Bruegel's. Bare children at 24 px are too thin. Seated activities blur together below 12 px. The settings are sketches. Each page ends with where it still falls short.