{"slug": "celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10", "title": "Celebrating a year of Tessera embeddings and releasing GeoTessera 0.10", "summary": "GeoTessera 0.10.0 and 0.10.1 have been released, moving hosting to the Source Cooperative with CloudFlare edge caching for improved stability and lower latency. The release follows a year of adoption for TESSERA embeddings, with users requesting priority map areas via GitHub and using the embeddings for agriculture, forests, land cover, water, and urban mapping tasks. The Zarr wrapper has been overhauled to allow streaming data over HTTP without downloads.", "body_md": "I can't believe it's been a whole year since we [released the first GeoTessera library](https://anil.recoil.org/notes/geotessera-python)\nto make the [TESSERA](https://anil.recoil.org/projects/tessera) embeddings easier to get your mittens on. Quite\na [lot of adoption](https://scholar.google.com/scholar?cites=8285391513046094203&as_sdt=2005&sciodt=0,5&hl=en) has happened since!\nI'm going to quickly review [a year of embedding requests](https://anil.recoil.org/#a-year-of-embedding-requests) and the people who filed them,\nexplain the [move to the Source Cooperative](https://anil.recoil.org/#geotessera-010-and-the-move-to-source-cooperative)\nfor our hosting, what the [Zarr upgrades](https://anil.recoil.org/#zarr-conversions-for-v1-and-v2-beta-access)\nwith UTM routing and matryoshka entail, how the [CLI](https://anil.recoil.org/#the-geotessera-cli) works, and show you a\n[guided tour](https://anil.recoil.org/#a-quick-guided-tour) that builds a land classifier and sonar panel detector.\n\nBecause we didn't have enough GPUs to pre-generate embeddings for everywhere in the world,\nwe opened up our GitHub repo for people to request [priority map areas they needed](https://github.com/ucam-eo/geotessera/issues?q=is%3Aissue%20label%3Aembedding-request).\nThis turned out to be a great way for us to meet our users and build community;\nthere have been people [from all over the globe](https://www.cl.cam.ac.uk/~avsm2/embedding_requests_map.html) getting in touch!\n\nGeographically, most of the world is covered, and thematically the requests span agriculture, forests, land cover, water and urban\nmapping.\nFrom a machine learning perspective this involves downstream classification, segmentation and regression tasks from\nthe same model embeddings. Here's a [sample](https://scholar.google.com/scholar?cites=8285391513046094203&as_sdt=2005&sciodt=0,5&hl=en)\nof what people are doing:\n\nKlemmer et al did a great [review](https://doi.org/10.1109/mgrs.2026.3710416) of Earth embeddings as a\ncategory of their own for those who want to learn more about the field.\n\nThank you to everyone who took the trouble to file a request with us or write a\npaper about it, and please keep them coming as we roll out [Tessera v2](https://anil.recoil.org/papers/2026-tessera-v2) as well this year!\n\nI've also just released [GeoTessera 0.10.0](https://github.com/ucam-eo/geotessera/releases/tag/v0.10.0)\nwith a quick [0.10.1](https://github.com/ucam-eo/geotessera/releases/tag/v0.10.1) followup\ntoday after [Aneesh Naik](https://aneeshnaik.github.io/), [Michael Dales](https://mynameismwd.org) and [Sadiq Jaffer](https://toao.com) immediately found some rough edges as they\nported their code.\n\nThe main feature is that all our hosting is no longer hammering Cambridge private servers,\nbut now goes through the [Source Cooperative](https://source.coop) and is fronted by CloudFlare edge\ncaching. The [source.coop/tessera/tessera](https://source.coop/tessera/tessera) remote\nreplaces the AWS bucket we temporarily [moved to earlier this year](https://anil.recoil.org/notes/geotessera-python-0-7).\nWe desperately need our Cambridge storage capacity back as we develop new models, so the older endpoints\nwill be switched off shortly.\n\nFor our users, the primary benefit here is stability and lower latency access that's\nmore 'cloud native'. If you've got a lot of resources and are running on AWS or Azure,\nyou'll find you're closer to the Tessera data. On the other hand, when I was in India\nrunning the [Tessera hackathon with IIT-Delhi](https://anil.recoil.org/notes/first-tessera-hackathon) at the\n[AI Impact Summit](https://anil.recoil.org/notes/india-ai-summit), the performance was abysmal due to the\nIndia-Cambridge link being slow. That should now be much improved\ndue to CloudFlare having plenty of edge caching all over the world. If not, let me know!\n\nThe Zarr Tessera wrapper has also had a big overhaul. The key benefit of Zarr is that\nno downloads are needed as the client can stream data directly over HTTP. Since the\n[v3 layout work](https://anil.recoil.org/notes/tessera-zarr-v3-layout) and the [geo-embeddings convention proposal](https://anil.recoil.org/notes/tessera-embeddings-convention) earlier this year, our Zarr store has been\nUTM-native to minimise coordinate skew around the globe. This works via `utmNN`\n\nZarr\nsub-groups that contain the tiles for that particular slice of the world.\n\nThe `GeoTesseraZarr`\n\nzarr wrapper now routes global lon/lats to the right UTM\nzone subgroup that actually contains the requested point. This is only necessary near\nthe seams of UTM zones where a point might be on either side.\n\nThe other new preview feature (only for v2 embeddings) is support for the \"Matryoshka\nembeddings\" that we trained [that new model](https://anil.recoil.org/papers/2026-tessera-v2) with, following on from\n[v1.1](https://anil.recoil.org/notes/tessera-v11-out).\nThe first 4 and the first 16 dimensions of a v2 embedding can be plucked out of the Zarr\nstore independently of the full 128 dimensions, making it much easier to do a quick sample analysis.\n\nThe 0.10.1 follow-up release was to fix caching in the Zarr. `GeoTesseraZarr`\n\nnow accepts a `cache_dir=`\n\nargument and calculates a cache key that disambiguates different model versions\nso they never clash. There are also minor fixes to make it easier to use local\nfilesystems (Ceph in our case) which really don't like large directory reads.\n\nThe CLI is also quite handy to interactively do some tasks.\n`uvx geotessera info`\n\nwill tell you which variants are published; and you can also\npoke at them interactively at [tze.geotessera.org](https://tze.geotessera.org).\nJust click on the top right 'model version' button to switch to v2.\n\n``` bash\n$ uvx geotessera info\n╭─────────┬──────────────────────┬────────────────┬─────────────╮\n│ Version │ Variant              │ Repository dir │ Status      │\n├─────────┼──────────────────────┼────────────────┼─────────────┤\n│ 1.0     │ vultr (default)      │ v1             │ available   │\n│ 1.1     │ cambridge (default)  │ v1.1-cam       │ available   │\n│ 1.1     │ dclimate             │ -              │ coming soon │\n│ 2.0     │ 2B-L~beta1 (default) │ v2-2B-L~beta1  │ available   │\n│ 2.0     │ 2B-L~beta2           │ v2-2B-L~beta2  │ available   │\n╰─────────┴──────────────────────┴────────────────┴─────────────╯\n```\n\nNote that the v2 ones will have very little coverage as we're still exploring different inference strategies. V1.1 is going through a complete global run at the moment by dClimate, so those should be available en mass in September sometime.\n\nI've put together a [ucam-eo/geotessera-examples](https://github.com/ucam-eo/geotessera-examples)\nrepository to provide a little [teaching tour](https://github.com/ucam-eo/geotessera-examples/tree/main/teaching),\nafter [Michael Dales](https://mynameismwd.org) asked for one a while back.\nThe first of these is a land-cover classifier for any point on Earth:\n\n```\nuv run 01_classify.py --lon 0.12 --lat 52.20    # Cambridge, obviously\n```\n\nThis shows how to load a few embeddings from the store:\n\n```\ngt = GeoTesseraZarr(zarr_store_url(\"v2\"), cache_dir=\"tessera-cache\")\nmosaic, transform, crs = gt.read_region((west, south, east, north), year)\n```\n\nAfter that we use OpenStreetMap libraries to issue an Overpass query and pull some labels for water, woodland, farmland, buildings and roads for that bounding box.\n\nAfter that, `rasterio`\n\npaints these onto an image using the same coordinate\ntransform that the `read_region`\n\ncall calculates.\n\n```\nfeatures = ox.features.features_from_bbox(bbox=bbox, tags=OSM_TAGS).to_crs(crs)\nrasterize([(g, class_id) for g in shapes], out=labels, transform=transform)\n```\n\nOnce the labels and embeddings are aligned, we train a k-nearest-neighbours classifier and a logistic regression to assign a label to each pixel in the bounding box:\n\n```\nknn = KNeighborsClassifier(n_neighbors=5).fit(x_fit, y_fit)\nlogreg = LogisticRegression(max_iter=2000).fit(scaler.transform(x_fit), y_fit)\n```\n\nThe remainder of the guided tour runs the same classifier using the v2 beta model at a depth of 16, as well as the full 128 dimensions, and compares the accuracy for you.\n\nFor regions too big to hold in memory there is also an `iter_region`\n\nfunction now,\nwhich splits the mosaic into row strips while prefetching the next one. There's\na [solar panel detection](https://github.com/ucam-eo/geotessera-examples/tree/main/solarpanel)\nexample that pushes that to lots of pixels without materialising all of them at once;\n[Sadiq Jaffer](https://toao.com) first demoed this in his [PROPL talk](https://anil.recoil.org/notes/icfp25-propl) last year.\n\nOnce you get into segmentation, check out [Sadiq Jaffer](https://toao.com) writing about [the innards of tiny CNNs over Tessera](https://toao.com/blog/earth-observation-budget-solar-farms-tiny-model) to brew your own variations.\n\nAll you need is `pip install geotessera`\n\nor `uvx geotessera`\n\nto invoke the CLI.\n\nThe [examples repository](https://github.com/ucam-eo/geotessera-examples) is a\ngood place to start. The [GeoTessera documentation](https://geotessera.readthedocs.io) covers the full API.\nOur [EEG Zulip](https://eeg.zulipchat.com) has several public channels to reach out to for\nmore interactive help.\n\nFor the agentic hackers among you, there's also a Claude Code plugin in the\nrepository now. Just type `/plugin`\n\nin Claude Code and add `ucam-eo/geotessera`\n\nand activate the resulting `geotessera`\n\nplugin to get you going.\n\nHere's to another year of geospatial fun! Happy birthday Tessera!", "url": "https://wpnews.pro/news/celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10", "canonical_source": "https://anil.recoil.org/notes/geotessera-a-year-on", "published_at": "2026-08-27 00:00:00+00:00", "updated_at": "2026-08-27 17:49:35.020902+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning"], "entities": ["GeoTessera", "TESSERA", "Source Cooperative", "CloudFlare", "GitHub", "Zarr", "Aneesh Naik", "Michael Dales"], "alternates": {"html": "https://wpnews.pro/news/celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10", "markdown": "https://wpnews.pro/news/celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10.md", "text": "https://wpnews.pro/news/celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10.txt", "jsonld": "https://wpnews.pro/news/celebrating-a-year-of-tessera-embeddings-and-releasing-geotessera-0-10.jsonld"}}