Skip directly to page content
b13 GmbH

Hauptstätter Str. 59
70178 Stuttgart
Germany
+49 (0) 711 460 589 70 [email protected]

What Does an AI-Generated Alt Text Cost the Planet

Bild von Oliver Bartsch Oliver Bartsch
A robotic hand holds a magnifying glass over a globe, symbolizing exploration and technology's role in understanding the Earth.

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:

  1. Every number is marked as an estimate, and you can see what it is based on.
  2. No data never turns into zero. If AiM can’t estimate a request, it says so, and why.
  3. 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.

The request log lists the footprint next to the cost of each request and adds it all up in a statistics card. The provider overview does the same per configuration. Requests AiM can’t estimate are left out and shown with a dash, so every total says how many requests it covers.

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 numberEstimate with EcoLogitsMeasured power × time
Electricity per alt text1.7–2.7 mWh17–18 mWh
CO₂e per alt text0.64–1.0 mg5.7–6.0 mg
Time per alt text1.4–2.2 sabout 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₂e1.1–1.6 mg22–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

Explore Further

Want to see what your AI requests in TYPO3 use?

Sources

Written by:

Bild von Oliver Bartsch

Oli is a TYPO3 Core developer who loves to collaborate with teammates on new TYPO3 features and bug fixes. His essential tool: PHPStorm.

Oliver Bartsch Development
more from Oliver Bartsch