The problem
A concept sheet is a finished picture
The Keeper is painted with four arms, and all four of them lie across her own apron. Cut a rectangle round one and you take the arm β and you leave an arm-shaped bite in the apron, which opens the moment the arm swings. The whole cutting pipeline is arranged around that one fact.
So a cut list is a claim order, not a partition. Three rules, and they are deliberately allowed to disagree:
That third rule is the one that would normally be a compromise, and here it isn't. On flat gouache the reconstruction is exact, because the apron behind the arm is the same slate as the apron beside it. There is nothing to guess. Across the twenty-one creatures the tracer inpaints just over 720,000 pixels β 84,461 of them on the Choir's Singer alone, whose mouths are erased out of the paint so they can be given back as things that open β and not one of them is invented.
A cut is authored against the painting's own pixel grid. tools/trace/sheet.mjs draws that grid over the segmented creature; you read the numbers off it into cast.mjs, and run it again to see the seams drawn back over the art. The tool that actually finds mistakes is the other one, proof.mjs --explode, which lays the parts out separately β a seam in the wrong place is invisible until the pieces are pulled apart.
Everything downstream works in one unit: a pixel of the painting the creature was cut out of. The scene scales a whole creature by a single number, which follows the viewport β half a painting-pixel per screen pixel on a desktop, a fifth of one on a phone in portrait.
Reading the paint
The palette is measured, not picked
Before anything can be cut, the pipeline has to know which pixels are creature. The eight sheets are built from a handful of flat fields, so a k-means over every non-background pixel returns the world's palette as centroids β and both halves of the project quote that one table, which is why a rectangle the engine paints and a rectangle the painter painted are the same colour.
Two fields: sage at rgb(132,138,110), terracotta at rgb(166,74,58). Four materials: ink at rgb(76,74,72) β every creature is the same charcoal β slate for cloth at rgb(85,90,98), mauve for the rose props at rgb(135,90,93), brass for the yellow things at rgb(163,134,47). A pixel is figure if it is further than 45 from both fields; two references and not one, because the horizon is a curve and no pixel knows which side of it it is on.
45 is not a taste call, it is bracketed from both sides. The floor is the drift within one field: the sheets carry a soft vertical haze and a contact smudge under each creature, so a flat sage wanders about Β±25 across a sheet. The ceiling is the nearest material β mauve sits only about 50 from both fields, closer to them than anything else in the palette is. 45 clears the drift and keeps the mauve.
Then components, 8-connected rather than 4, because a painted limb narrows to a diagonal thread of single pixels and 4-connectivity snaps it off. The creature is whichever component owns an authored seed point; rectangles hanging in the sky are dropped, and small satellites inside the creature's own bounding box β a key held clear of a fist β are kept. Finally the red marks: vermilion is not a material, so they punch holes through the silhouette. Those get closed here and painted back later as live geometry.
The red door frame the Keeper is touching never joins her mask in the first place, for exactly the same reason. It is the wrong colour to be a Gluty.
The centroids probe2.mjs and probe3.mjs pulled out of the twenty sheets and the three culture paintings. The tracer writes these names into the parts files; the renderer looks them up.
Four palettes
What changed when three more cultures arrived
The eight Bent Offices sheets are finished pictures with the world in them, and the creature has to be subtracted out. The twelve that came later β the Folded, the Choir of Borrowed Mouths, the Frame Pilgrims β arrived already keyed, one creature to a file with an alpha channel round it. Half the segmenter's job disappeared. The other half got harder.
Which door a creature goes through turned out to be a property of the file rather than of the culture, and the thing that proved it arrived a day later: a ninth Bent Office, the Divider, in the same charcoal and the same slate cloth and wearing the same red ring as the other eight β keyed, and alone on its sheet. It kept its culture, which is its palette and its paper edge, and overrode one word: source. Nothing downstream noticed. What it did cost was the mark on its cheek. Cut out of a field, vermilion is far enough from both backgrounds to fail the figure test, so the Offices' marks arrive as holes and are healed to ink before anything else runs; cut out of alpha there is no test to fail, the red lands on whichever material is nearest, and the mouth came out as a slot straight through the face. It is erased by hand now, and given back as a decal β which is where a mouth that has to open wanted to be anyway.
Easier first: a mask is alpha > t, and there is nothing to subtract. Harder: a culture is, mechanically, a shortlist. Nearest-colour classification is only as good as the candidates you offer it, and offering the Choir the Bent Offices' slate turns every shaded blue on a swollen body grey. Each culture gets its own materials β the Folded's three creams, the Choir's cobalt and raw and pitch, the Pilgrims' bone and chalk and turquoise β and the names are unique across all four, which forced the useful question of whether the Choir's cobalt and the Offices' slate are the same blue. They are not, by about 120 units.
Then the Folded broke it. A Folded body is not shaded, it is faceted: flat planes of cream that differ by the fold they turn on, and the three measured values sit 48 apart. The tooth of the paint is Β±20 on its own. So one flat facet came back as confetti and marching squares turned the confetti into ten thousand tiny loops.
One sheet needed something else again. The Key Walker is very nearly white, and whoever keyed her out of a white background got her whole body at about Ξ± 0.55. Dropping the threshold finds her; compositing every pixel back over paper before classifying recovers the pale grey she was actually painted in, rather than the mid grey the file stores. At Ξ± 1 that composite is the identity, so it costs the other twenty nothing.
The Frame Pilgrims needed no new code at all β only the removal of some. Their torsos are rectangles straight through the body, and parts have always been filled even-odd, so a hole is just a loop. The one thing that had to change was switching off the rule that heals enclosed background, which the Bent Offices needed because their red ring marks punch holes in their own silhouettes.
Repair
Two kinds of damage that want opposite treatment
Cut a prop down to its own material and it comes out broken in two different ways, and the rule that fixes one destroys the other.
The Keeper's key is brass. Her fingers, which are ink, cross the shaft and cut it clean in two β a gap about 22 pixels wide. The eye of the same key is a dark hole, deliberately painted, about 24 pixels across. Fill by size and you close the eye. Fill by "it is surrounded by brass" and you close the eye. Fill neither and the key falls in half.
What separates them is not size and not colour, it is whether the gap is enclosed by the part. So a flood from the outside of each part's own region splits the two cases:
despeckle is an area: 400pxΒ² fills the blemishes and leaves the eye alone.close: 13 is a morphological closing built on a chamfer distance transform β dilate by R, erode by R β which bridges anything under 26px and leaves the outline exactly where it was.The closing never swallows the hand, because nothing brass lies within 13px of most of it, and it is told to skip enclosed regions outright, so the eye survives a bridge wider than itself.
One more rule, cheap and worth it: a part is one piece of paper. Any component smaller than 8% of the largest is a scissor slip β a fleck of the bag caught inside an arm's shoulder cut β and it gets dropped, because otherwise it flies around the stage attached to nothing.
Then the outlines. Marching squares over each material's sub-mask, with the ambiguous cases resolved consistently so that every crossed edge is seen by exactly two cells and every endpoint has degree two β which means the segments chain into closed loops with nothing left to disambiguate. DouglasβPeucker at Ξ΅ = 1.15 painting-pixels drops the staircase and keeps the wobble. The wobble is the point: a part with a mathematically straight side stops looking like it was cut out of paper. The whole cast β 139 parts across eight creatures β comes to 4,657 points and 70 kB, which is less than one of the paintings they were cut from.
Cuts are capsules, not rectangles. A cut only ever clips the painting at a joint, so there the clip is the outline β and a disc leaves a rivet where a rectangle leaves two square corners sliding past each other.
Layer 0 Β· The gait
Walking with no walk cycle
There is no walk cycle in this project. A foot is planted at a fixed position in world space and simply stays there while the body walks out from under it.
When its home point β a fixed offset off the body β has drifted past a threshold, the foot swings along an arc to where home will be when it lands, plus a lead so it plants ahead of the body rather than under it. Every number in that sentence is read off the current speed and nothing else: the threshold runs 34 β 112 painting-pixels, the swing takes 0.34s at a standstill and 0.18s flat out, the arc rises 16 β 50, and the lead goes from nothing to 34.
Which leaves the coordinator, and the coordinator is the reason this showcase has a six-legged animal in it. It knows two things. Don't lift a foot whose neighbours are already in the air β neighbour meaning a hip within 1.6Γ the closest hip spacing, which is computed from the hips, not declared. And never have more than half the feet off the ground at once. Above 50% of top speed a neighbour past 66% of its swing stops counting, which is where the two-legged cast gets a flight phase.
Nothing in there counts legs. The Keeper has two, the Porter has six, and the wave that runs down the length of the Porter is not authored anywhere. It is what that one rule does when you hand it six hips in a row.
The actual Gluty and Gait, imported by this page. The rings are the step machine's own foot positions; the ticks below are where each hip would like its foot to be.
Every plant fires an impulse into the body's vertical spring, scaled 0.3 β 1 by speed, and the body also rides on how many feet are currently down. There is no bob curve anywhere; there is a mass on a spring being hit.
Watch one ring while the creature walks over it. It does not slide. That is the whole difference between this and a cycle.
The stamp
The rig does not know what it is driving
Every part carries two points from the cut list: a pivot, where it hangs off its parent, and a tip, where its own child hangs off it. The renderer's only job is to map that rest segment onto the live one.
That mapping is the entire reason one rig drives creatures with nothing in common. The art is fitted to the skeleton rather than assumed to match it, so a Keeper 888 painting-pixels tall and a Porter 1,234 painting-pixels long run identical code. The parts files describe the differences and the engine reads them β the Porter has two bones that both hang off the root, because no neck exists anywhere on that animal and its "head" is simply the front half of it; the Twins have two heads on one, which the rig does not notice, because a bone is a bone.
Two consequences fall straight out of the stamp, and neither was designed. A prop rides its parent part's transform β so the Keeper's key keeps exactly the relationship to her fist that it had in the painting, with no anchor to author and no chance of it drifting out of her hand. And a limb can be worn twice: the Herald is painted in a deep crouch with one leg folded across the other, so its far leg has no pixels anywhere. It gets the near leg's paper, drawn first and knocked back 26% toward the shadow. Cut-out animators have been doing that since before anyone filmed it.
Knees bend the right way because the bend direction is read off the painting: the cross product of hipβankle against hipβknee, taken once at load, sets the sign the two-bone solve gets thereafter. Whichever way a joint bent when it was painted is the way it bends now, and mirroring the creature mirrors the sign with it.
Two escape hatches earn their keep, and both are one flag in the cut list. A part can be hidden β the Surveyor's robe reaches the ground, so its thighs and shins are cut out of the robe's own slate, never drawn, and exist only because something has to carry the feet. And a part can be authored rather than traced: its measuring stick is painted the same red as the ground it is standing on, about 17 units from terracotta, so no colour rule can separate the two. It is drawn by hand in the same coordinate system as everything else, and from the next line of the pipeline onward it is a part like any other.
The same Gluty, lerped between where the rig put each part and a slot in a grid. A stamp is four numbers, so "lay the whole animal out on the table" is a lerp on four numbers and the renderer never finds out.
Nothing stretches. The two-bone solve returns the rest lengths it was given, so a stamp's scale is 1 wherever it matters and the paint is never squashed to fit.
Gouache
Painting the parts nobody painted
The creatures came off a painting. The ground, the horizon, the doors and the rectangles hanging in the sky did not, and they have to be the same object or the seam between them is the first thing anyone sees.
Three things separate flat gouache from a vector fill, and only the first is about colour.
The paper does not move. Every shape in a concept sheet sits in the same tooth and fades into the same haze near the horizon, because those belong to the sheet and not to the shapes. So none of it is drawn per shape and none of it is drawn per frame: it is one static canvas stacked over the live one with mix-blend-mode: multiply, rebuilt only on resize. A 512px tileable value-noise tile, four octaves β a broad 6Γ6 undulation, a 40Γ40 mid, a 170Γ170 speckle and a faint 7Γ190 fibre β compressed into the top 8.5% of the range, because a matte paint only ever takes a flat field down by a few percent. A creature walking across the plain walks under the paper, and the animation pays nothing for it.
The edge wobbles. A shape cut by hand has a boundary that wanders a pixel or two on a slow, irregular period, so wobble() walks a polygon's perimeter and displaces it along its own normal by a wrapped sum of sines β wrapped so the last point and the first are neighbours on the same curve and the shape closes without a seam. The creatures get this free: their outlines came off a painting and already have it.
The edge is paler than the middle, where the paint ran out against the line the painter had drawn. That thread of bare paper shows up in the sheets at about 0.1% of their pixels, and it is most of what stops a flat shape reading as printed. The obvious implementation β stroke each part as it goes down β is one line, and it is wrong in a way that is impossible to unsee: the Porter's body is cut into two halves at the waist, and a per-part stroke draws a bright vertical line down the middle of an animal that has no seam. The Herald gets one across its throat.
Which is worth a buffer. The fringe belongs to the boundary between paint and paper, so the creature is composited into an offscreen canvas, that buffer's alpha is spread a pixel in eight directions, the result is tinted and laid down behind. Only the outside survives, and every internal seam disappears β because internally there is no paper to show through.
Eight small drawImage calls per creature per frame. Cheaper than being able to see the joins.
The society
What the rectangles in the sky are
Every one of the eight sheets has flat rectangles hanging in the sky at no particular distance, and none of them explains why. This showcase takes a position: they are things the Gluty have said.
A Gluty utters a shape β brass for a question, mauve for a statement, a long slate bar for agreement β and the shape rises, slows on a decaying velocity, and stops. From then on it is indistinguishable from the sky's own furniture, which is the point. The sky holds 74 of them; the oldest conversation drifts out of the record.
Under it, eight errands and no script. The Keeper walks to the furthest locked door on the plain and reaches for the middle of its frame with the arm that has the key. The Porter runs a long circuit and stops for whoever it passes, then takes a twelve-second cooldown so it doesn't greet them again the instant they part. The Gardener waters a patch of nothing in particular; the Surveyor stops at intervals and holds its stick out at the air; the Tortoise crosses the plain at a sixth of everyone else's urgency and never stops at all.
Three of the eight are written in terms of the others, which is where the arrangements come from. The Herald walks to within 380 pixels of whatever just happened and points at it. The Almoner closes on whoever is nearest, bowl first. The Twins follow the Herald, disagreeing. Nobody laid any of that out; there is one shared focus point and a rule about personal space, and personal space had to be added at all only because errands are written in terms of things β a door, a subject, a neighbour β and several creatures attending to the same thing will happily stand inside each other.
When every door on the plain is open, something shuts one behind her.
A head turn is 24% of the angle to the target, clamped to 0.3 radians. A Gluty that can crane its neck all the way round stops being a Gluty.
Four countries
One plain, or four scenes with a switcher
Three new cultures with three new environments is a fork in the road. Four separate scenes and a menu is the obvious answer and it is the wrong one, for a reason that is about the creatures rather than the scenery: a border is a place, and a place is where two cultures can be in the same frame.
So the world got longer instead β 21,800 units of it, four countries end to end, and the fields cross-fade over 900 units rather than meeting at a line. The horizon stays a single wandering curve the whole way across, because it is the one thing all four paintings agree on. What changes under it is colour, furniture, and the pale fringe along a cut edge: pale paper for three of them, and for the Choir a blue one step up from their own cobalt, because a pale fringe on a cobalt body in a midnight chamber stops reading as a dry edge and starts reading as a halo.
Two things broke on the way, and both were the same bug wearing different clothes: a number that was small enough not to matter in a 5,600-unit world. Parallax was x β camX Γ (1 β depth) β a thing at depth d slides at (1βd) the rate of the pan, which is fine, and whose error grows with camX, which is not. Walk far enough and the Choir's hanging vessels are swinging over the Frame Pilgrims' landscape, eight thousand units from the chamber they belong to. Scaling the offset from the camera instead bounds the error at one screen. And the idle camera used to drift toward whatever was happening; with one country that was a few seconds away, and with four it meant letting go of a creature in the Choir's chamber flew you across the world to watch a Keeper open a door.
Underneath, twelve more errands, and the concept notes wrote most of them. The Folded compress and hide, so the Elder walks to the narrowest recess it can find and folds into it β which is not a pose but a chain of accordion bones with sway on them, lagging the body until a creature that stops hard concertinas. The Choir collect voices, so the Caller says something and the nearest of its own kind says it back a beat later, in its voice. The Frame Pilgrims make temporary passages, so the Key Walker steps into a freestanding doorway and comes out of a different one two thousand units away, which from outside is exactly what fast travel looks like when it works.
The Choir's mouths are erased out of the paint and given back as decals, for the same reason the Bent Offices' rings were: a mouth that cannot open is a sticker of one. Each carries a phase offset, so a creature with four of them talks out of all four, out of time β which is what the concept note asks for and is most of what makes a body covered in openings read as a crowd rather than as a face.
One painting
A state the world can reach, rather than a picture of one
Thirteen paintings came with the Frame Pilgrims, and twelve of them are single creatures. The thirteenth is a Carrier β a turquoise doorway on stilts β with a small Pilgrim standing inside the rectangular hole through its torso.
Nothing in this showcase draws that. The Carrier and the Child are two rigged creatures who have never heard of each other, and the painting is what happens when a condition comes true: the Carrier walks to the Child, the Child is told that its root is now a point on the Carrier's torso bone, and it shrinks to a fifth of its own height to fit the opening. From then on it is carried β its feet snapped under its hips every frame so its legs hang instead of trailing after ground it is no longer standing on β and it goes on breathing and looking around from inside somebody else's body. The window is a fixed point on the torso's own sheet, so it arrives already rotated and scaled by whatever the Carrier is doing.
It is the same kind of event as the Keeper unlocking a door, and it happens for the same reason. That is the whole claim: the painting is not an asset here, it is an arrangement, and arrangements can be reached.
The bill
What this costs
The seams are authored by hand. That is the honest headline: the segmentation, the inpainting, the tracing and the rig are all automatic, and where the scissors go is a person reading coordinates off a grid. Twenty-two parts of Keeper is about 180 numbers; the whole cast of twenty-one is somewhere north of two thousand.
One pose per creature, forever. A painting is a pose, and a pose hides things. The Herald's far leg does not exist in any pixel of its sheet, so it gets a mirrored copy. The Keeper's four arms are all painted reaching the same way, which is why she gestures like something with four arms on one side β because that is what was painted. tools/fal/turnaround.mjs asks gpt-image-2 to repaint a creature standing with everything clear of everything else, and the results match the style closely enough to trace; they are committed in art/turnaround/. They are not used for the parts on the plain, because a generated creature is a slightly different creature, and grafting its thin straight legs onto the concept Herald's heavy folded body looks exactly as wrong as it sounds.
Depth is z-order and nothing else. Every part is a number in a painter's order, and so is every creature: they are drawn back to front in a fixed list, so the Porter always passes behind the Keeper and never in front. A limb cannot pass behind a body and come back out, and a creature cannot turn round β mirroring is the only rotation this world has, and mirroring the Keeper puts her key in the other hand.
Dark on dark. Every Gluty is the same charcoal, so a leg crossing a skirt is legible only by its silhouette. In the paintings that reads as economy. In motion, on the Herald in particular, it can read as mush β and the far-side tint that separates the two is a 26% shade toward the shadow, which is a bet rather than a measurement.
The gait is a heuristic with a stated failure mode. The overlap rule assumes hips laid out along one axis. It works on two legs and it works on six in a row; anything radial would need it rewritten. And the coordinator has no notion of balance β the cap at half the feet is what stands in for one.
Debts, by name: the second-order system is t3ssel8r's. Marching squares and DouglasβPeucker are what they have always been. The concept paintings of Gluty are not mine.
The claim here is narrow and worth stating narrowly: if you already have finished art in a flat medium, you do not necessarily need it redrawn to animate it.
All twenty-one of them are out there now, in four countries, mostly ignoring each other.
Open the plain β