Method · 24 Birds
How 24 Birds is made
Every piece in 24 Birds is one albatross’s year, drawn from its own GPS record and nothing else. The shape is where it went. The rings count how often it stopped to feed. The strokes follow the direction it was flying, and thicken where it worked hardest. The colour shifts with how far it got from home, and how hard it was working when it got there. What follows is how that got built, including the parts that didn’t work.
24 Birds started from a different place than O and unfolding whose generative systems lead their concepts: the art is in the code, and any data feeding it is largely incidental. 24 Birds began with a real dataset, twenty-four grey-headed albatrosses tracked by GPS from Campbell Island across the 2013 breeding season, and the question was how to let that data become something worth looking at without it being an obvious data representation. Every ring, every stroke, every colour shift in the finished pieces traces back to something a real bird actually did. The goal throughout was a piece of art I'd want to display on a wall, rather than a visualisation anyone would want to interrogate.
The shape each piece takes starts the same way for every bird. Every GPS fix becomes a small circle, and how big that circle is depends on what the bird was doing at that moment. Resting on the water makes the smallest mark, transiting a slightly bigger one, and foraging the biggest by some margin, about four times the width of a resting fix. The effect is that the places a bird worked hardest swell the outline outward before a single line has been drawn. All of those circles are then fused into one continuous shape, the way overlapping ink blots become a single stain.
That outline is eroded inward, repeatedly, the same way a fresh coastline gets pushed back by tide after tide, and the space between each erosion step becomes a ring. It is the same thread of erosion and creation from decay that runs through a lot of my other work.
How deep the erosion goes
Two things had to be derived rather than chosen.
The first is how far inward the shape can be cut before it vanishes, and that is different for every bird. A long, thin track runs out almost at once; a fat, clustered one takes much deeper cutting. Rather than guess, the code finds the answer by trial: cut a little deeper, check whether anything is left, repeat. After enough rounds it knows the deepest cut that shape will survive, and then stops fractionally short of it, so the innermost ring is never quite a point.
The second is the ring count. The track is split into foraging bouts, meaning unbroken runs of fixes the model classified as foraging, and the piece gets one ring per ten bouts, floored at three and capped at forty: Bird 61696 recorded 116 bouts in its seven days and gets eleven rings, whilst Bird 58565 recorded 458 and hits the cap at forty, the only piece in the collection to do so. The available erosion depth is then divided between those rings in proportion to how many hours of foraging each group of bouts represents, so a ring is not a fixed width. A thick ring is a stretch of the season where the bird fed a lot, and a thin one is a stretch where it did not.
Where it started, clean and uniform
The earliest working version was close to a pure data structure: rings eroding inward from the fused track outline, coloured in sequence from a fixed palette, nothing else layered on top. It is honest and legible, and you can see exactly how the shape narrows toward the centre, but it reads more like a diagram than a piece of art. Pieces were smaller and tighter than they would end up, and every one followed the same clean logic regardless of which bird it came from.

Bird 49364 · early pass

Bird 89518 · early pass

Bird 90493 · early pass
A detour, perturbing the boundary
The next real experiment tried to bring the bird's behaviour into the ring boundaries themselves. Every point along a ring's edge was pushed outward or inward by an amount tied to how sharply the bird had been turning nearby, so tight foraging circles roughened the edge and long straight transit legs kept it smooth. It was a genuine attempt to let movement texture the shape directly rather than deciding the outline once and colouring it afterward. The results were technically interesting, but didn't feel right for this collection.
The underlying instinct, to let real behaviour deform the piece rather than just colour it, is exactly what was achieved by pass 19.

Bird 23058 · pass 18

Bird 23058 · pass 16
Strokes, not fills
The result replaced solid fills with something closer to how the O pieces lay down their grain. Instead of filling each ring as one flat shape, the code walks slowly around its edge, and at every step along the way lays down a small cluster of short strokes pointing whichever way the bird was actually flying at that spot. Each stroke gets a slight random wobble, so nothing reads as machine-ruled. Nine of these passes are laid side by side along each edge, which is what gives the rings their brushed quality rather than a printed one.
What varies those strokes is a kind of heat map of effort. Everywhere the bird turned sharply, which is what feeding looks like in a GPS track, the map runs hot; everywhere it flew in a straight line, it runs cold. Blur that map out into a smooth surface and you can ask it, at any point on the piece, how hard the bird was working there. That one number then drives everything about the strokes at once: how thick they are, how far apart they spread, and how strongly they register. Tight, effortful foraging comes out as thick, dense, confident strokework. Long straight transit legs thin away to almost nothing. This is where the pieces stopped looking like data and started looking like something drawn.

Bird 23058 · strokes introduced

Bird 41269 · strokes introduced

Bird 89518 · strokes introduced
Smoothing it out
A few passes on, the same stroke system got refined rather than reinvented. The effort map was sharpened so that a feeding patch stayed distinct from the open water around it instead of everything averaging into the middle. The outermost ring had its strokes spread wider than the rest, so each piece feathers out at its edge rather than stopping dead. And the thinnest strokes were thickened slightly, just enough to stop neighbouring lines merging into mush.
Nothing structural changed here. It is the same direction-following strokework as the step above. It is the point where the pieces stopped looking like proof of concept and started looking close to finished.

Bird 23058 · smoothed

Bird 41269 · smoothed

Bird 49364 · smoothed
The blend that finished it
The last real change came almost as an afterthought: colour itself was made to respond to the same data driving everything else. Two more fields get built alongside the first, each one independent of the others. One carries distance from the colony, normalised not against each bird's own maximum but against the global maximum across all twenty-four, which is the 2,715km that bird 90493 reached. The other carries local turning intensity, which is high in foraging zones and low in transit corridors, and has nothing to do with how far from home the bird happened to be.
Each of those pulls the colour away from where it started, and choosing what to pull it toward is the part I spent longest on. The obvious option is to lighten the colour, which is what I tried first and what most people reach for. The trouble is that lightening is a one-way street: everything ends up drifting toward the same pale non-colour, so at full strength the far edges of every piece look alike no matter which palette they began in. What the collection uses instead is each palette's own opposite. Take the scheme's first colour, flip it to its exact opposite, and pull toward that. Because the destination is derived from the palette rather than imposed on it, every bird drifts somewhere different, and it drifts somewhere that still belongs to that piece.
Where both effects are active at once they mix, in proportion to how strongly each is pulling. Where neither is, the palette shows through untouched. Both start working early and reach full strength quickly, so the colour begins shifting almost as soon as a bird leaves the colony rather than waiting for the extremes. That was deliberate: a bird that never ranged far should still show the journey it did make.
I did not set out to add this. It came from testing whether distance from the colony could read visually at all, and only once it was working did I realise it was doing the same thing the blend modes in O and unfolding do: taking a fixed, decided-in-advance palette and letting something else, whether that is turning angle, overlap or distance, pull it somewhere the palette alone would never have gone. That is the throughline connecting all three collections, and I only saw it in 24 Birds after the fact, not by design.

Bird 2 · finished

Bird 49364 · finished

Bird 90420 · finished
What comes out
Each piece renders at 23.39 inches square at 300 DPI, which is A1, and is written out three times: an Adobe RGB TIFF with the profile embedded for the print bureau, an sRGB PNG for the web, and a transparent PNG with the background knocked out, for anything that needs the form without the ground. The dark ground is #0F1219, the same near-black the rest of this site uses, and the strokes are composited onto it rather than drawn over it, so the transparent version is a true alpha cut rather than a guess.
Palettes are assigned by position. The twenty-four birds are sorted by tag ID and handed one of twenty-four schemes in order, each named for something on or around Campbell Island: Peat and Lichen, Rockhopper and Megaherb, Southern Ocean Deep, Albatross Egg. There is no attempt to match a palette to a bird's character, and I think the collection is better for it. Any relationship you see between a bird's colour and its behaviour is one the blend fields made, not one I chose.
The one thing the code does not decide is the random seed, which is set to the bird's own tag ID. Run it again and you get the same piece. The jitter on the strokes is random, but it is the same random every time, which matters when an edition has to be reprintable years from now.