Allegorical frontispiece of Athanasius Kircher's Ars Magna Lucis et Umbrae (1671)

The Carbon Ledger of a Digital Library

What it costs the atmosphere to turn dead languages into searchable text

26 May 2026 · ~10 min read

Source Library has OCR'd 4.1 million pages of historical text and translated almost all of them into English using AI. We logged every API call. This is what it cost — in dollars, in tokens, and in carbon.

4.1M
pages OCR'd
~1.8 t
CO₂ (central)
~7.4
flights AMS↔LHR

What we measured

The library has about 14,977 books with pages in it, of which 13,819 are now readable in English (≥90% of pages translated). Most originals are in languages nobody reads anymore — Latin, early modern German, Hebrew, Tibetan. To get there, every page goes through image recognition, transcription, translation, illustration extraction, indexing.

Over the past five and a half months, that pipeline made 8.0 million API calls, used 30.6 billion tokens, racked up 22.6 million page-credits, and cost $19,588.

The dollar bill is in MongoDB. The carbon bill is harder to read, so we tried six different ways to estimate it.

The receipt

Every Gemini API call writes a row to a MongoDB collection called gemini_usage_daily. These numbers are recorded, not estimated.

API calls8,032,886
Input tokens23,644,100,054
Output tokens6,921,374,368
Page-credits processed22,599,950
Spend (USD)$19,588.33
WindowJan 2 – May 25, 2026

About a third went to translation, a third to OCR. The biggest surprise was image extraction — detecting illustrations, plates, and diagrams in scanned pages — which alone cost ~$3,300.

Interactive — Pipeline workload breakdown
Toggle a metric to rescale. Hover for details.
Total: $19,588
Translation$6,56933.5%OCR$6,08031.0%Image extraction$3,33817.0%Index$2,18111.1%Per-page translate$9144.7%

The activity wasn't spread evenly. The pipeline ramped up in January, hit a steady working rate in March, and peaked around new collection imports. Quiet days mean we were either fixing things or sleeping.

Interactive — Pipeline activity, day by day
Each bar is one day in the tracking window. Toggle the metric. The pattern matters: there are clear weekly cycles, ramp-ups when new collections were imported, and quiet stretches between them.
Total over window: 8,032,886 · peak day: 421,905
0100,000200,000300,000400,000FebMarAprMay

One book at a time

The pipeline doesn't use one AI model. It uses two: Gemini 3 Flash for hard scripts (Hebrew, Tibetan, Arabic) and BPH manuscripts, Gemini 3.1 Flash-Lite for clean Latin-script European text. Flash-Lite is half the price. The router picks by language.

Pick a model and a serving mode below. The frontier models (Pro, Opus) are counterfactuals — what if we used them instead? The spread is about 240×.

Interactive — Per-book cost by model and serving mode
Pick a model and a serving mode. The numbers below show what it would cost to OCR, translate, index, and summarize one typical book from the catalogue (~298 pages, 1.68M input + 497K output tokens).
CO₂ per book
860 mg
range 860 μg101 g
Books per beef burger
6,997
1 burger ≈ 6 kg CO₂
visualizing 1 burger
=
+ 6,947 more
Used in Source Library
Latin-script European languages (French, German, Italian, Dutch, Polish, etc.) per src/lib/types/ai-models.ts
Reprocessing the full 15,000-book live catalogue this way would emit 12.9 kg of CO₂. (LCA-scaled upper bound: 1515 kg)

One quarter-pound burger's worth of carbon = roughly 7,000 books processed on Flash-Lite via the batch API.
Or ~30 books on Claude Opus running real-time.

The cheapest path

The Flash-Lite + batch path is what some sustainability researchers call distillation gains — a smaller model, compressed from a larger one via supervised training, can produce comparable output on simpler tasks (OCR of clean Latin script) for a small fraction of the energy. Pair it with batch serving, where the GPU works at higher utilization, and per-token energy drops sharply.

Routing matters. Source Library uses Flash-Lite for ~16% of calls and Flash for ~83%; the rest is split among other variants. If we'd used Pro for everything, the carbon bill would be ~30× higher. If we'd used Opus, ~80× higher.

Six ways to estimate the same number

There is no single right way to estimate carbon emissions from AI usage. Anthropic publishes nothing. Google published one paper in August 2025. Mistral published one cradle-to-grave life-cycle assessment in July. Every other "AI carbon footprint" number you've read — including this one — is an extrapolation.

Here are six independent methods, applied to this project. The bottom-up family (rooflines + bridge factors) clusters around 100–700 kg. The top-down family (extrapolating from real production measurements) clusters around 5,000–50,000 kg. The geometric mean is 1805 kg CO₂e — about 7.4 return flights AMS↔London, 301 beef burgers, or 10.0K km of driving.

Interactive — Six ways to estimate the same number
Total project AI footprint, kg CO₂e. Each bar is one method's low–high range. The dot is its central estimate. Toggle to remove a method; the geometric mean recomputes.
10 kg100 kg1k kg10k kg100k kggeomean ≈ 1805 kg1. Roofline63.2 kg195 kg2. +Stack109 kg336 kg3. v4 model220 kg679 kg4. Google scaled3562 kg8192 kg5. Mistral LCA12.5 t41.7 t6. $ proxy8517 kg262.9 t
Bottom-up family Top-down family Geometric mean
301
quarter-pound burgers
7.4
AMS↔LHR economy RT
0.61
AMS↔NYC economy RT
10.0K
km in a mid-size petrol car

The 50× gap between the bottom-up family (~100–340 kg, blue) and the top-down family (~5,400–54,000 kg, red) is the most honest finding in this whole exercise. Bottom-up methods assume optimal batching, peak utilization, no real-world overhead. Top-down methods extrapolate from production measurements that include every kind of overhead. Both are valid. Neither is right.

Closing the gap further requires disclosure from Anthropic (none yet — required starting 2026 under California SB 253) and a second-generation paper from Google.

To see how each lever in the bottom-up model affects the answer, push the sliders below. The blue dot is your current estimate; the amber line is the geometric mean of all six methods; the grey dots are the other methods' centrals.

Interactive — Bottom-up model knobs
These are the assumptions in our v4 bottom-up model. Move the sliders to see how each lever affects the total estimate.
Bottom-up estimate with these assumptions
166 kg
1,327 kWh × 125 g/kWh
Where this lands vs. other methods
10
100
1k
10k
100k
48
50%
125 g CO₂/kWh
+20%
+8%

The other half: dev work

The Gemini pipeline is roughly 60% of the project's AI footprint. The other 40% comes from a different AI — Anthropic's Claude Opus — which helped write the code for the site, the pipeline, the ingestion scripts, the search interface, this blog post. Over the same window, that's about 280,000 conversation turns.

The token economics are wildly different. Of the ~45 billion tokens that flowed through Claude during development, 43.5 billion were cache reads — the same context (file contents, prior conversation, tool definitions) re-read on every turn. Cache reads cost about one tenth of fresh input tokens because the KV cache skips the model's MLP forward pass entirely.

Interactive — Claude Code token flow
Left: how many tokens of each type the development AI used. Right: how much each type contributed to CO₂. Band widths are proportional to energy contribution, not token count. The crossover is the cache magic.
tokens usedCO₂ contributedCache reads (43.5B)Cache create (1.6B)Output (139M)Fresh input (10.5M)24 kg CO₂9 kg CO₂57 kg CO₂<0.1 kg CO₂
Cache reads (the meter)
43.5B
96.1% of all prompt-side tokens — about 27% of the energy.
Output tokens (the cost)
139M
0.31% of tokens — 63% of the energy.

Cache reads make up 96% of the token count
but only ~25% of the energy.

The cache crossover

If prompt caching didn't exist and every cache read had to be a fresh forward pass, the same dev work would have consumed roughly 30-50× more energy. The cache turns long-context agent loops from prohibitively expensive into merely expensive. It is, structurally, one of the single most important sustainability levers in modern AI serving.

An alchemical engraving from Mutus Liber (1677) depicting figures collecting morning dew from sheets stretched on poles.
Collecting morning dew, an emblem of distillationMutus Liber (1677), Plate 4 — Source Library

What 1805 kg looks like

The geometric mean of the six methods is 1805 kg CO₂e. The plausible range is roughly 100 kg to 50,000 kg. Here is what that looks like in things you can picture:

Equivalents — at our central estimate of 1805 kg
Same amount of CO₂ as:
301
burger
range 373,333
too many to tile
Quarter-pound beef burgerEquivalent to a McDonald's Quarter Pounder with Cheese or a Burger King Whopper Jr. (by beef mass)
7.4
RT to London
range 0.9082
AMS ↔ LHR round-trip flight (economy)One passenger, economy seat, Amsterdam Schiphol to London Heathrow and back. Short-haul flight (~370 km each way), heavily emission-loaded per km due to takeoff/landing energy.
0.61
RT to NYC
range 0.076.8
AMS ↔ NYC round-trip flight (economy)One passenger, economy seat, Amsterdam to New York JFK and back. Long-haul (~5,860 km each way), more efficient per km than short-haul but the distance dominates.
10.0K
km driving
range 1,222111.1K
too many to tile
Average European petrol car, per kmEU passenger-car fleet average in 2024 — roughly a mid-size petrol hatchback like a VW Golf, Renault Clio, or Toyota Corolla (real-world fuel use, well-to-wheel emissions including fuel production). An EV on the average European grid would be ~60-100 g/km.

For comparison, an average person in the Netherlands emits roughly 8,400 kg of CO₂ per year. Source Library's five-and-a-half-month AI footprint is about one-fifth of one person's annual emissions — and produced 13,819 books readable in English (≥90% of pages translated).

Why the gap is so wide

The reason no third party can estimate AI carbon emissions accurately is that the people who can measure them — the providers — mostly don't publish. Google has published one paper. Mistral has published one cradle-to-grave LCA. Anthropic, OpenAI, xAI, and Meta have published essentially nothing comparable.

Interactive — Provider disclosure scoreboard
What major AI providers have publicly disclosed about the environmental impact of their models. Click any cell for the source. Empty rows are the story.
Provider
Per-query energy
Per-token energy
Training emissions
Scope 1/2/3 corporate emissions
Full lifecycle LCA
Grid intensity by region
Score
Google / DeepMind
Gemini
321
Mistral AI
Mistral Large 2, Le Chat
321
Anthropic
Claude Opus, Sonnet, Haiku
006
OpenAI
GPT-5.x, ChatGPT, etc.
015
Meta
Llama 3/4
132
xAI
Grok
006
DisclosedPartialNot disclosed

California's Climate Corporate Data Accountability Act (SB 253) requires US companies with over $1 billion in annual revenue doing business in California to report Scope 1 and 2 emissions starting in 2026, with Scope 3 from 2027. All five of the empty rows above clear that threshold. So within a year, the gap on this chart should narrow considerably — or someone gets sued.

Figure XII from the Book of Lambspring: two figures atop a mountain under the sun and moon.
Conjunction of opposites — the alchemical ConiunctioThe Book of Lambspring, in The Hermetic Museum (1893)

The trade

At the central estimate, this library's AI work for the past five and a half months emitted roughly as much CO₂ as seven economy round-trip flights from Amsterdam to London. The honest range is wider: two to eighty round-trips, depending on which estimation method you trust. For that, ~4 million pages of text that were previously inaccessible — 17th-century printer's Latin, fraktur German, unvocalized Hebrew, dead languages, dead handwriting — are now searchable in English.

The counterfactual matters. The alternative to AI digitization isn't no digitization — it's manual digitization. Hiring transcribers. Renting facilities. Flying scholars in. We haven't modeled that footprint, but a single transatlantic flight per scholar per year would dwarf the AI number within months.

The other counterfactual: routing every workload through the biggest available model. Using Claude Opus instead of Gemini Flash for OCR would push the carbon footprint roughly 80× higher. The pipeline saves carbon by picking the smallest model that's good enough — exactly the same logic that makes prompt caching, batching, and distillation the most effective sustainability levers in modern AI serving.

Almost none of this should be taken as a defense of AI's broader carbon trajectory. Datacenter electricity demand in the US is on track to roughly double between 2025 and 2030, driven largely by AI buildout. Most of that growth is being met with natural gas, not renewables. The path of a single cultural-heritage project is not the path of the industry.

But for this particular project, on these particular measurements, the trade looks defensible: a few flights' worth of carbon, in exchange for a library that people in São Paulo and Jakarta can read.

A few transatlantic flights of carbon for a library you can read from anywhere on Earth.

The trade, in one line

What would close the gap

The 50× spread on our estimate is not because we're careless. It's because the data needed to narrow it doesn't exist publicly.

  1. Per-token energy disclosure from Anthropic — comparable to Google's Aug 2025 paper. With this, the Claude Code portion of the estimate moves from a ~10× range to ~2×.
  2. Active parameter counts for Gemini Pro and Claude Opus. The roofline model can't pin down per-token energy without knowing how big the model is per forward pass.
  3. Production batch-size distributions. A model running at batch=128 is 4-8× more energy-efficient per token than at batch=8. We don't know what mix providers run.
  4. A second Google paper. Or a Meta one. Or an OpenAI one. One paper from one provider, however careful, is not enough to calibrate the field.

California's SB 253 helps. Starting in 2026 it requires every US company over $1B revenue doing business in California to disclose Scope 1 and 2 emissions. Anthropic, OpenAI, xAI, and Meta all qualify. By late 2026, the empty rows on the scoreboard above should fill in — or someone gets sued by the California Attorney General.

Notes on this exercise

  • Things this number does include: Gemini API calls for OCR + translation + image extraction + indexing + summary; Claude Code conversations for software development; data-center cooling + idle compute + PUE; a share of training amortization; a share of hardware manufacturing emissions.
  • Things this number does not include: the MacBook running the dev environment (~30 kg CO₂ over the window); the Hetzner GPU running CLIP image embeddings; the Vercel + MongoDB Atlas + Cloudflare runtime serving the public site; you reading this page (~0.5 g CO₂ for the page load).
  • Honesty: every number is sourced. Every method has assumptions. We may be off by 5× either way. When new data arrives, this page will update — see the change log on /methodology.

Full data, all six estimation methods, every primary source, and every assumption are documented at /blog/carbon-ledger/methodology.

Produced by J. Derek Lomas of Delft University of Technology using Claude Code. .

Comments

Loading comments...

This library is built in the open.

If you spot an error, have a suggestion, or just want to say hello — we’d love to hear from you.