What Does an AI-Generated Alt Text Cost the Planet

Editors in TYPO3 can let AI write alt texts, meta descriptions and translations through our extension AiM. AiM already shows what each request costs in money. What it did not show is the electricity behind it, and the greenhouse gases that come with it, counted as CO₂e (CO₂ equivalent). Our colleague Benni pointed us to a post by the Wagtail team, “The carbon footprint of Wagtail AI”, which puts a number on one AI-written image description: 0.23 g CO₂e. We wanted the same for AiM, visible right where people use it.
The short version: in our estimate, one alt text from a typical hosted model comes out at about one milligram of CO₂e, and AiM’s smart routing makes simple requests 20 to 30 times lighter.
The longer version, including what these numbers don’t tell you, follows.
Why We Estimate Instead of Measure
Wagtail could measure, because they used an AI provider that reports the energy of every request. The big providers our users work with, OpenAI, Anthropic, Google and Mistral, don’t publish that. So we have to estimate, and we made three promises to ourselves:
- Every number is marked as an estimate, and you can see what it is based on.
- No data never turns into zero. If AiM can’t estimate a request, it says so, and why.
- Ranges instead of fake precision. Where we have to guess, AiM shows a range, not one exact-looking number.
How AiM Estimates It
The idea is simple. An AI model writes its answer piece by piece (these pieces are called tokens), and every piece costs some electricity on a graphics card in a data center. The bigger the model, the more each piece costs. Add the rest of the server and the data center’s cooling, multiply by how much CO₂ the power grid produces per kilowatt hour, and you have an estimate.
We didn’t invent this. EcoLogits, by the non-profit GenAI Impact, is an open method built on exactly this idea, with published data for hundreds of models. We rebuilt it in PHP for AiM and checked our version against the original, number by number.
The catch: OpenAI and others don’t say how big their models are. EcoLogits works with a plausible size range instead, for example 8 to 28 billion parameters for gpt-4o-mini. That’s why AiM shows a range such as 0.85–0.99 mg.
For a model running on your own computer, for example with Ollama, AiM takes a different route. You measure once how much more power the machine draws while the model is working, and AiM multiplies that by how long each request takes. On a Mac, the built-in tool powermetrics shows the chip’s power.
What You See in AiM
Every request in AiM’s request log now shows its estimated footprint, how it was calculated, and the warnings that come with it, such as “model size not published.” Extensions like Descriptive Images (descriptive_images) show the same right after generating an alt text.
Real Numbers: Five Alt Texts
We let descriptive_images, an extension built on AiM, write alt texts for five photos. Once with OpenAI’s gpt-4o-mini, once with Google’s small open model gemma3:4b running on a MacBook Pro (M4 Pro).
gpt-4o-mini (OpenAI) | gemma3:4b (on the laptop) | |
| How we got the number | Estimate with EcoLogits | Measured power × time |
| Electricity per alt text | 1.7–2.7 mWh | 17–18 mWh |
| CO₂e per alt text | 0.64–1.0 mg | 5.7–6.0 mg |
| Time per alt text | 1.4–2.2 s | about 2.4 s |
For scale: a milligram is a thousandth of a gram. An average web page view causes about 0.36 g CO₂e according to the Sustainable Web Design Model. So one page view weighs roughly as much as 360 to 560 of these alt texts, although the page-view figure includes devices and networks and ours doesn’t.
Surprised that the laptop is six to nine times heavier? We were, a little. A graphics card in a data center works on many requests at once and shares its power between them; a laptop works on one. Our laptop number also includes reading the image, which the estimate for gpt-4o-mini leaves out. Still: running a model on your own machine is not automatically the greener choice.
And why is all of this far below Wagtail’s 0.23 g? Their model is much larger (a trillion parameters), their measurement probably covers more of the work, and their electricity figure is a bit higher. Different model, different method; not a contradiction.
Smart Routing: The Smaller Model Is the Greener One
Most of the difference between AI models comes down to size. That’s where a feature AiM already has comes in: smart routing. AiM looks at each request before sending it. If the prompt is simple, say a short meta description, and AiM’s history shows that a smaller, cheaper model handles such requests reliably, it sends the request there instead of to the big model that was asked for.
We tried it with five requests for meta descriptions, addressed to OpenAI’s larger gpt-4o. Smart routing answered all five with gpt-4o-mini. AiM now also estimates what the requested model would have used for the same answer:
Per meta description | Answered by gpt-4o-mini | With gpt-4o, as requested |
| CO₂e | 1.1–1.6 mg | 22–46 mg |
That is 20 to 30 times less for each simple request. AiM subtracts what the smaller model did use, so each of these requests avoided 20 to 45 mg. The range stays honest about the uncertainty: its low end assumes the large model at the small end of its estimate and the small model at the large end. Across all five requests, AiM counted 0.12 to 0.19 g CO₂e avoided, a third to half of an average page view. It shows that sum as “avoided by smart routing” in the request log and in a dashboard widget.
Two honest notes. Smart routing decides by cost, reliability, and speed, not by CO₂. But smaller models are cheaper because they need less computing, so cost and CO₂ go down together. And a smaller model is not always as good: AiM grades answers automatically, and of our five routed answers, four were rated good and one poor (by a small local model acting as the judge). Once enough answers are graded, AiM stops routing to a model whose grades drop below good. While building this, we also found and fixed a bug that had kept smart routing from ever switching models for OpenAI and Anthropic.
What the Numbers Don’t Show
The input. Each alt-text request sent about 8,654 tokens to OpenAI, almost all of it the image, and got 23 tokens back. The estimate only counts the answer. For image descriptions and translations, reading the input may well be the bigger part. We don’t know how big, and we’d rather say so than guess.
Making the hardware. Building graphics cards and servers causes emissions too. AiM shows that share next to each estimate (roughly a fifth on top for gpt-4o-mini) but keeps it out of the totals.
Failed requests. A larger local model we tried, qwen3.6:27b, spent its whole answer budget on thinking and returned nothing. That was 42 seconds of work, logged as “No data,” and the electricity was used anyway.
Certainty. A range only reflects the guess about model size. Everything else adds uncertainty that no range shows.
Three Smaller Lessons
Thinking costs. With thinking switched on, qwen3.6:27b produced 469 tokens in 51 seconds for a one-sentence alt text; with it off, 12 tokens in under two seconds. For alt texts, a reasoning model is the wrong tool.
Starting up costs. The first request to a local model after a break took 3.4 seconds, 2.9 of them just to load the model.
Repeating is cheap. Sending the same image again took 0.23 instead of 2.2 seconds, because Ollama reuses work it has already done.
Limits and Next Steps
This is a first version. It covers text answers, not image generation, and not yet answers that local models stream word by word. The local numbers are only as good as the power measurement you enter, and totals mix two different methods.
Next, we want to look at the input side, which turned out to be the biggest blind spot; at real measurements from providers that publish them; and at letting smart routing weigh CO₂ directly.
The feature is part of AiM. Its documentation describes the method and its limits in detail.

Oliver Bartsch
Development
Sources
- AiM: github.com/b13/aim
- AiM smart routing: documentation
- Wagtail: The carbon footprint of Wagtail AI
- EcoLogits method: LLM inference, proprietary models
- EcoLogits code and data (MPL-2.0): github.com/genai-impact/ecologits, commit d586c35
- Sustainable Web Design Model v4: Estimating digital emissions
- Electricity carbon intensity: EcoLogits electricity data (USA 384.4, Germany 329.65 g CO₂e/kWh); Wagtail used Ember (world 471.84 g/kWh)
- Apple: man powermetrics






