作者如何以 Claude Code 和 Codex 繪製 11,064 種鳥類貼紙,以及為何審核者比繪圖者更關鍵
How I drew all 11,064 bird species with Claude Code and Codex, and why the reviewer mattered more than the artist
作者用 Claude Code 和 Codex 製作 11,064 種現生鳥類貼紙,並將作品公開於 GitHub。Claude Code 負責協調,Codex 配合 GPT-image 繪圖;Claude 子代理按參考圖審核,AI 貼紙須達 80 分才通過。最終 7,676 張達標、3,388 張未達標;評分由模型對照參考照片得出,並非鳥類學家評定。
I drew a sticker for every living bird species on Earth. All 11,064 of them, every species in the IOC World Bird List v15.2, and I've put them on GitHub along with structured data for each species: names in up to 43 languages, Wikidata / eBird / GBIF / iNaturalist IDs, range, subspecies, body measurements and IUCN status.
Repo: https://github.com/alchaincyf/huashu-bird-sticker
Two things up front. First, I don't write code. Everything here was built by AI agents I directed: Claude Code as the orchestrator, Codex (with GPT-image) as the illustrator. Second, these are AI illustrations, not hand-painted, and not all of them are good. 7,676 meet the quality bar we set; 3,388 don't, and the data says which. I'd rather you hear that from me.
This post is about how a project this size gets done without falling apart, because I think the method transfers to anything with "do this 10,000 times, correctly".
Why birds, and why every species
Last December I spent some time in Sydney. Sulphur-crested cockatoos became my favourite bird almost immediately. There was a tree in the Royal Botanic Garden full of rainbow lorikeets, and an Australian white ibis smacked me on the head while charging at someone's chips. After that I started actually noticing the birds around me.
That's my photo on the left, and the cockatoo sticker in the repo is drawn from it (it scored 86, a pass).
A few weeks ago I was testing a design tool and had Claude Code mock up a birding app as a test case. The mock-up was good enough that I decided to build it for real. The idea is a sticker book: every time you identify a bird, you stick it into your own notebook with a date-and-city postmark. That means every species needs a sticker.
We started with China's birds, grew to 5,232 species, and then I said: all of them. The IOC list has 11,227 species; minus 163 extinct ones, that's 11,064.
Why not just use photos?
We did find a reference photo for every species. But by species, only 1,986 had openly licensed photos (CC0, public domain, CC BY, CC BY-SA). Many others were non-commercial, no-derivatives or all rights reserved, and for 2,017 we didn't record the license at the time. And photos shot from every angle, against every background, in every light, don't sit together on one page.
So photos became references only, and every sticker was redrawn.
The pipeline: four steps
Roles first:
- Claude Code (main session): planner and dispatcher. It owned the species list, the job queue and the rules.
- Claude subagents: finding references and reviewing finished stickers.
- Codex with GPT-image: drawing.
The principles that held it together:
- Start from an authoritative list, and give every species a stable ID that every file hangs off.
- Don't trust the image model's imagination. Give it a real reference for every single bird.
- The reviewer must never be the model that drew the picture.
- Decide in advance what happens to each kind of failure.
Step 1: a reference for every species
An image model drawing a bird from memory gets the bill curve, the eye colour and the number of toes wrong all the time. So every species gets a real photo first, mostly from iNaturalist and Wikimedia Commons. The source page, author and known license are recorded in each record's sticker.reference field.
For 453 obscure species there was no single usable photo (only distant shots, backs, half a bird). For those we built a reference board: 2 to 4 imperfect images tiled together, plus a written description of the field marks that must be right. The rule I set was "done beats perfect".
Step 2: draw nine at a time from the references
Reference photos above, all from Wikimedia Commons, left to right, top to bottom: Blue-throated Bee-eater (Charles J. Sharp, CC BY-SA 4.0), Chinese Crested Tern (Oregon State University, CC BY-SA 2.0), White-throated Dipper (Mark Medcalf, CC BY 2.0), Siberian Sand Plover (Vedant Raju Kasambe, CC BY-SA 4.0), Plaintive Cuckoo (Charles J. Sharp, CC BY-SA 4.0), Pallas's Rosefinch (M.Nishimura, CC BY-SA 3.0), Red-tailed Minla (Shiv's fotografia, CC BY 4.0), Blue-tailed Bee-eater (Tisha Mukherjee, CC BY-SA 4.0), Orange-headed Thrush (JJ Harrison, CC BY-SA 3.0).
- Tile 9 reference photos into one 3×3 grid (1254×1254 px, 418 px per cell).
- Ask GPT-image to redraw the same 9 birds in the same cells: realistic texture, bird filling 50–60% of the cell, flat grey background, correct toe count, no watermarks.
- Slice into 9, cut each out with BiRefNet, add a white outline.
Species with reference boards were drawn one at a time instead.
When a bird failed review, its next batch prompt got an extra "pay attention to" line with the reviewer's note pasted in verbatim, for example "toes must be zygodactyl, two forward and two back" or "the iris is red", and the redraw was checked specifically against it.
The grid route alone ran 2,760 batches and 16,339 bird draws including redraws. At peak, early on 30 October, there were 8 Codex sessions drawing, 8 reviewer subagents reviewing and 10 subagents building reference boards for the last 195 species without photos.
Things broke, of course. BiRefNet's memory crept up to 22 GB and froze the whole Mac. Codex keeps about 7 MB of session log per generated image, which quietly grew to 46 GB.
Step 3: score it, 80 to pass
Every AI sticker goes to a separate reviewer subagent that compares it with the reference and scores it out of 100. 80 or above passes.
The reviewer works through a checklist: iris colour, bill shape and length, every colour patch on the head and body, legs, feet and claws, tail shape, feather texture and the white outline, and whether last round's problems were fixed. Any single error caps the score at 76–78, so it can't pass.
Where something can't be verified (the eye isn't visible in the reference, say), the reviewer has to write that down instead of assuming it's fine. And every bird has to be zoomed in on, because many errors are invisible at thumbnail size.
The reviewer returns JSON, roughly like this (illustrative, not a real record):
{"<species id>": {"name": "Common name", "score": 78, "verdict": "fail",
"plumage": "sex / plumage drawn",
"issues": ["pay-attention item: fixed", "iris: drawn black, reference is red", "..."],
"redoNote": "what to change in the next redraw, and to what colour or shape"}}
A failed sticker's redoNote becomes the next round's "pay attention to" line.
Step 4: review the reviewer
On the evening of 29 October we took 270 stickers that Claude subagents had already reviewed and had Codex re-check them against the same standard. Claude had passed 88 that Codex failed; only 23 went the other way. Claude was too lenient.
The disagreements clustered in a few places: eyes drawn solid black where the reference shows a red, yellow or blue-green iris; toes fused into a lump or a hind toe with no claw; hummingbirds, with their tiny legs, standing like sparrows; elongated central tail feathers drawn as an ordinary tail.
So we rewrote the review instructions, listed those errors one by one, and made zooming in on every bird mandatory. After calibration, Claude agreed with Codex on 13 of 18 samples and was slightly stricter overall.
In the last round, the 852 borderline stickers scoring 80–82 also got a second blind review, and 211 of them failed it and were redrawn.
When a bird just won't come out right
Some birds won't draw well: the reference is too poor, or the model keeps getting one feature wrong. The rule: at most two redraws per species. If it still doesn't pass, keep the highest-scoring version. No falling back to a photo, no blank page.
That gives the honest result:
- 7,676 meet the bar: AI stickers scoring 80+, plus 34 photo cut-outs that passed a blind review against the original photo.
- 3,388 don't: 3,273 score 70–79, 109 score below 70, and 6 scored 80+ but failed the blind second review.
Every sticker's score and pass/fail is in the data (meetsQualityBar), so you can filter to only the ones that pass. The scores come from a model comparing against a reference photo, not from an ornithologist, and these are illustrations, not field-guide plates. For fine identification details, use a field guide.
If you want to build something similar
Swap birds for insects, plants or fish and I think it comes down to four things:
- An authoritative checklist as the full set, with a stable ID per item that every file hangs off.
- A real reference for every item, with its source and license recorded. Where there isn't one, a board of partial images plus a written description.
- A reviewer that isn't the generator, with an itemised checklist and score caps; then a second model auditing the reviewer on a sample, and a blind second pass for anything sitting right on the line.
- A cap on retries, keeping the best attempt and flagging it in the data.
What's in the repo, and how you can use it
-
11,064 stickers: transparent WebP with a white outline, about 1,000 px on the long side, organised as
stickers/<Order>/<Family>/<Genus_species>.webp. -
data/species.json/species.csv: one record per species: taxonomy, names, cross-database IDs, breeding and non-breeding range, subspecies, AVONET traits (mass, wing, tail, habitat, migration), IUCN and CITES status. -
data/names.csv: names in 43 languages from the IOC multilingual list.
Some ideas: a birding journal or printed sticker sheets, nature-education material and bird cards for kids, multilingual flashcards (the Common Kingfisher is カワセミ in Japanese and Eisvogel in German), or joining eBird/GBIF IDs to observation data for your own visualisations.
The full repo is about 700 MB. If you only want the data and one order (owls, say):
git clone --filter=blob:none --sparse https://github.com/alchaincyf/huashu-bird-sticker
cd huashu-bird-sticker && git sparse-checkout set data stickers/Strigiformes
Licenses. The stickers are under PolyForm Shield 1.0.0: free for almost anything, including commercial use, except using them in a product that competes with our app (another birding, bird-ID or field-guide app or site). Strictly speaking PolyForm Shield isn't an OSI open-source license; it's source-available. Our own data is MIT; third-party parts keep their terms (IOC multilingual names are CC BY 3.0). Whether a drawing made from a photo is bound by that photo's license is legally unsettled; if that matters for your use, you can filter by each sticker's reference source.
If one of the stickers was drawn from your photo and you'd rather it wasn't, open an issue or email me at alchaincyf@gmail.com and I'll replace it within 7 days.
The most useful contribution
Corrections from birders. AI has certainly drawn some of these birds wrong. If you spot one, please open an issue. That's worth more to this project than a star.
The stickers were made for Mingji, the iOS birding notebook I'm building; it's in App Store review now (Chinese interface first). I'll write about that when it's out.
Repo again: https://github.com/alchaincyf/huashu-bird-sticker
來源:DEV Community · dev.to



