Of A Feather
- Jer Thorp
- 2 hours ago
- 7 min read

This is a story about dead birds in drawers, xkcd, natural language processing and feathers. It's about color, quixotic pursuits and art made from data.
It starts in a parking lot.
It's December, 2020, and I'm in Breezy Point, Queens, a neighbourhood that's long been known for retired cops and just this week is known for being the only zipcode in NYC that sent in zero applications for Zohran Mamdani's transition team. I've just finished my longest-ever day of bird watching, a chilly 11 hours spent on wide beaches and blustery bluffs. We saw a few rare birds (a lapland longspur, some redpolls) and a whole lot of common ones (purple sandpipers, long-tailed ducks, red-throated loons). Tired and perhaps a little low on blood sugar, I come up with a silly idea: I'd make a visualization of every bird that was just counted in the Brooklyn¹ Christmas Bird Count.
That year the Brooklyn team ended up counting 45,787 birds from 137 species. At the end of December I wrote a program in Processing to arrange them all around a central ring, and had them stay together as species. I wrote code to give each bird a unique appearance and at the bottom of the graphic I made a key, for people who might be way too serious about Where's Waldo.

I knew that it would be important for the birds to be coloured somewhat accurately, so that the big cluster of Herring gulls would stand out as grey-and white birds and the 313 Northern cardinals would stand out against the rest of the super-flock. I briefly entertained writing something to color the birds automatically, but ended up doing it through a bit of a kludge: I wrote a little color picker that would load images for each species from Wikipedia, then I clicked on body parts in order (bill, eye, head, wings, breast, tail) to make palettes for each of them. I cleaned up the color list a bit when I revisited the project for Audubon Magazine, but the species count (around 130) was enough for my semi-manual approach to work just fine.
Then, in 2024, I had a bigger, stupider idea. What if I could visualize every bird seen in a whole year in Brooklyn? Or in Vancouver? Or in Iceland? Or Indonesia?
These visualizations are extremely detailed. Every observation of every species of bird on eBird is represented as a triangle, sized to the number of birds counted. In the Brooklyn image, this means 431,163 triangles representing 4,387,291 birds.

For this to work at all, I needed a way to give every bird a unique color. There are about 11,000 species of birds, so it wasn't going to be feasible to use a manual tool. Instead, I ended up making a system to place the whole taxonomy of birds into a HSB color space, so that every bird would indeed own a unique color.

The colors would be broadly the same across taxonomies: ducks would be green, gulls would be blue, perching birds would be red. One big benefit of this was that every one of these Every Bird visualizations has a unique character, a kind of avian fingerprint of the place, rendered in color.
Earlier this year, in what is a perhaps a natural progression of working on harder problems and more detailed visualizations of birds every single year, I decided to go back to the idea from the Christmas Bird Count visualizations, where each bird is colored according to... well, how the bird is colored. I wondered if it could work for all 11,000 species? If it could, it would be a really fun dataset to play with.
Since 2021 I'd thought periodically about this palette-for-every-bird problem. It kept leading me into a solution involving computer vision and machine learning. Every time I wondered about it, my brain led me down a path that ended with LLMs. I am exhausted by LLMs. Just typing LLM three times in one paragraph is making me nauseous. So the palette-for-every-bird thing also started to make me nauseous, and I pushed it aside.
Then, in August, I had a thought. What if the colors came from what people had to say about the colors of birds, and not what machines could learn? What if I built the palettes from Wikipedia descriptions and field guide entries?
Three months later, this:

10,151 bird species - every one that has a Wikipedia description or a description on eBird. The birds are drawn as feathers, sized to the wing length of the bird. The project is a dataset, which has an API, which can be used to query by taxonomy or keyword or from a list of bird names (like a checklist or a lifelist).
Hummingbirds, parrots, picoformes (woodpeckers, toucans & barbets)
The whole project is written in JavaScript. The server and Natural Language Processing work happens in Node.js, while the rendering is done with p5.js. I am planning to release the dataset, the API, and the source code early in 2026.
One interesting part of this problem– the problem of getting colors from text descriptions –is that you need to have a nuanced list of colors. If a bird is described as lemon yellow, you want it to have different data than a bird described as egg-yolk yellow or safety yellow or chiffon yellow. The dataset I use for this is one I used in my Library of Color project from 2018, and it comes from an unexpected source: xkcd.
In 2010, Randall Munroe ran a "Color Name Survey", which garnered response from more than 200,000 people. The result was a list of RGB values for 954 colors.

If there's one thing that I am a little disappointed by in making this whole project, is that Wikipedia editors tend to be fairly un-imaginative when it comes to describing the colors of birds. Colors like "dusky" and "tan" appear much more often than "egg-yolk" or "umber", and I'm fairly sure that "poop" doesn't appear at all. This is in part because ornithologists have long sought to codify the ways they describe colors. Visit any natural history museum in the world and you'll find huge drawers, packed wing-to-wing with dead birds. Find the oldest of these specimens, and you'll be looking at an artifact of an era before photography, when notes about the appearance of birds had to be written. Before heading out in the field to look for a bird, an ornithologist or an amateur naturalist had only words to depend on to know what to expect. So lots of scientists tried to catalog color, giving each shade its own name.
The American ornithologist Robert Ridgway and his wife Julia published A Nomenclature of Colors for Naturalists in 1886. A small book, it contained, along with a glossary of ornithological terms, hand-painted plates listing 186 colors. 36 years later he released his magnum opus, Color Standards and Color Nomenclature. This book contained over 1,000 named colors, ordered in a neat taxonomy.

I don't think many of the Wikipedia editors who wrote descriptions for birds have read Color Standards and Color Nomenclature. If you list the 100 colors most used to describe birds on Wikipedia, you get a set of product labels for the most boring paint shop:
white, black, gray, brown, yellow, red, green, buff, dark brown, blue, olive, chestnut, brownish, yellowish, orange, cinnamon, olive brown, reddish brown, reddish, bluish, forest, greenish, pink, olive green, pinkish, pale yellow, bright yellow, bronze, golden, purple, slate, bright red, pale brown, cream, brownish black, dark olive, light brown, orange red, dark blue, greenish yellow, off white, pale blue, dark green, crimson, purplish, olive-gray, yellow green, violet, maroon, yellowish green, orange yellow, scarlet, ochre, yellowish brown, dull brown, bright orange, dark red, olive yellow, golden yellow, red brown, blue green, bright green, bluish green, drab, yellow orange, bright olive, bright blue, emerald green, yellow brown, warm brown, gold, dull yellow, violet blue, pale olive, ivory, pinkish brown, light blue, silver, russet, chocolate brown, sandy brown, dull green, pale orange, turquoise, pale pink, orange brown, deep red, sandy, reddish orange, pinkish red, rust, purplish blue, lemon yellow, copper, greenish blue, medium brown, pale green, deep blue
About the most creative you get is "pinkish red", for which Ridgway might have offered "dahlia carmine" or "indian lake" or "spinel red". This means that my dataset of 10,151 colors is somewhat lacking in descriptive creativity.
Still, in the aggregate, the results are stunning, and the colors offer all kinds of ways to explore and inspire.

I've been busy over the last few weeks making prints and t-shirts and notebooks and wrapping paper, because I think the results of this project are pretty stunning... and because this whole three-month endeavor was funded on hope and curiosity; both of which are currently trading poorly against the dollar.
I've made a career out of quixotic projects, work that might skate to the edges of usefulness but not quite cross onto its polished surface. Partly this is because the tech industry has enough people making things for which the only measure of success is monetization. Mostly though, I think it's because I see coding as a thing that can sit close to fiction.
I hope you'll spend some time looking at the colorful feathery things this project has so far produced. I hope you make some snowflakes and send someone a greeting card, or hang your eBird life list on your Christmas tree.
If you need me, I'll be thinking about next year's strange project.
-Jer
¹ Breezy Point is not in Brooklyn. But is within Brooklyn's count territory, a 15 mile diameter circle centered near Prospect Park.
² Ridgway was unsatisfied with this first publication. He'd speak of the book as “seriously defective in the altogether inadequate number of colors represented, and in their unscientific arrangement.” I hear you, Robert.













