Pelicans on Bicycles: One Silly Benchmark, Sixty-Three Answers
I asked every model I use to draw an SVG of a pelican riding a bicycle, from inside the coding tools I actually work in. The pictures show things the leaderboards can't.
I asked every model I use to draw an SVG of a pelican riding a bicycle, from inside the coding tools I actually work in. The pictures show things the leaderboards can't.
I ask just about every new model to draw an SVG of a pelican riding a bicycle from coding harnesses (Claude Code, Codex, Cursor, etc.) because they're tools I build with, and not from a bare API call. The results are at /pelican, and they make it visible which models are reaching the minimum level for basic graphics.
Simon Willison has been asking every new model to "Generate an SVG of a pelican riding a bicycle" for a couple of years now. It started as a joke, but it's actually a reasonable benchmark. There are no reference images, it's not using stable diffusion, and an LLM should be able to generate it. His archive is great.
I have been doing a lot of image and graphics generation lately. Graphics for the games on this site, things for apps I'm building on my own, and right now for Spider-Man Minecraft, which my six year old has been talking about for the last month begging for me to build. So a ridiculous benchmark about drawing a bird on a bike is, this month, about the most practical benchmark I could run.
This is my proxy for figuring out which models can generate graphics I actually want to use. It turns out, the latest batch of models finally generate results that look good enough to use...in this very specific style.
Most model comparisons call the API directly with no extra context, framing, or hand holding. Simon's grid for GPT-6 and GPT-5.6 has way more details than I personally care about, but it makes for a better benchmark. GPT-6 Astra at max effort spent 12,638 output tokens on its pelican, 63 cents worth.
That's not how I use a model. I rarely call the API and ask for a picture (or anything, for that matter). I use Claude Code, Codex, Cursor, Antigravity, or OpenCode, and then I prompt for the graphics I actually want. So, that's how I try to generate an .svg of a pelican riding a bike. I'm aware that the model arrives with a system prompt this way, but from my perspective that wrapper is part of the model as I experience it, and the wrapper is what I'm paying for.
So the pelican cyclists in my benchmark page came from a coding tool. For each model, I picked the tool I've actually used with it in the previous month, and ran the prompt at every effort level the tool exposes. I use the same eleven words each time, but that doesn't mean the harness didn't pass more information in or tool calls didn't provide additional context. I'm not saying which harness produced which image, because the variance in the model makes a bigger difference overall and that's what we should focus on. None of the .svg files were created in a vacuum.
A few dozen "pelicans" "riding" "bicycles"...kind of. So many of these models were not good at this. The whole set is at /pelican, where you can explore the results side by side.
The bicycle is the hard part. Every model can draw a white blob with an orange beak. A diamond frame with a seat tube, a down tube, and pedals under the rider is where the cheaper models come apart. GPT-5.3 Codex Spark never manages it at any effort level. Haiku 4.5 draws a bird standing on top of a triangle at every level from low to max. Sonnet 5 at low effort does the same thing. At max it draws a real pelican, pouch and all, with its feet on the pedals.
Effort changes Claude 5 models a lot and OpenAI hardly at all. Opus 5 goes from a 1.8 KB flat drawing at low effort to an 11 KB beach scene at max, and every step between is visibly better than the one before. GPT-6 Astra draws nearly the same pelican at every level. If Astra's graphics are what you like, then low effort Astra might be the best option for generating graphics for your project. The Claude 4 generation sits in between. Sonnet 4.6 draws close to the same bird standing on the same bike at low, medium, and high.
Gemini draws the biggest files. Gemini 3.8 Flash at high effort produced 26.8 KB of SVG, three to four times anything from Anthropic or OpenAI. The texture it strives for feels excessive, but that might be what you want. It looks the most finished of anything on the page, and it is the last one I would want as a game sprite, where I need flat shapes I can recolor and move around without dragging a filter chain along.
I'll keep generating more of these and seeing if I can get similar benchmarks from older models before OpenAI retires gpt-3.5 and gpt-4 and Anthropic retires Sonnet 4.5. It's not because these are "valuable" but because I think they're funny. Maybe that is valuable to me.
And when the models get good enough that a static pelican stops being interesting, I'll probably ask for an animated image or sequence. Nobody really knows how a pelican would pedal a bicycle and that's kind of the point. As a human, we can look at an animation of a pelican riding a bike and intuitively know if it will make sense or not. AI does not yet have this intuition.