# .plan-26-12: Zarr across space and TESSERA time

*2026-03-22 — note*


I've been on leave this week so not much coding, but I did progress some threads from last week which I'll update on\!

## TESSERA+Zarr take 3

After I [published](https://github.com/ucam-eo/zarr-convention-tessera) the [TESSERA Zarr conventions](https://anil.recoil.org/notes/tessera-zarr-v3-layout) from [last week](https://anil.recoil.org/notes/2026w11), I got a load of useful feedback from other, more experienced Zarr heads.

[Issue #1](https://github.com/ucam-eo/zarr-convention-tessera/issues/1) convinced me to [rearrange](https://github.com/ucam-eo/zarr-convention-tessera/issues/1#issuecomment-4076698861) our layout fundamentally to include the embedding year as a dimension, and also to reduce the chunk size to make the shard/chunk coarser but still reasonably lightweight. The main problem with adding in the year as a dimension is that it's difficult to prepend years without rewriting the store, but the obvious answer is to zero-fill the entire store and then selectively replace years as they are generated.

So that's what I've done: I've updated the [Zarr store PR](https://github.com/ucam-eo/geotessera/pull/211) with three registry commands to zero-fill a new store, to add npy tiles to a particular year/utm, and then to calculate rgb multiscale pyramids as before from the whole store (but just from the latest year for now, since this is just for visualisation). I also adapted the [TZE](https://tze.geotessera.org) viewer to support this and it's working nicely at the bigger chunk size: still reasonably lightweight for mobile use, but also much faster to download with fewer HTTP range requests. Thanks to [Len Strnad](https://github.com/ljstrnadiii) and [Jeff Albrecht](https://github.com/geospatial-jeff) for their inputs.

I missed a very relevant [hackathon at Clark University](https://www.clarku.edu/news/2026/03/12/sprinting-to-space-goddard-nasa-and-clarks-pathbreaking-work-in-geospatial-analytics/) held last week about geo embeddings, but they created a great [embeddings-stac-specification](https://github.com/geo-embeddings/embeddings-stac-specification) repository to start to connect STAC with vector embeddings. We had a [great discussion](https://github.com/geo-embeddings/embeddings-stac-specification/issues/9) about what makes the TESSERA QAT-compressed embeddings different here, resulting in a PR to fix it. I also opened up a [fix to geozarr-toolkit](https://github.com/zarr-developers/geozarr-toolkit/pull/10) for its use of Zarr conventions (the exact string name is important!), and now the third iteration of my Zarr store should hopefully be [compliant on the Zarr web inspector](https://inspect.geozarr.org/?url=https%3A%2F%2Fdl2.geotessera.org%2Fzarr%2Fv2%2Fstore.zarr%2F)\!

<figure class="image-center"><img src="/images/tze-explorer-ss-1.webp" alt="The Tessera Zarr explorer now shows which of the years are available in the multi-year Zarr array" title="The Tessera Zarr explorer now shows which of the years are available in the multi-year Zarr array" loading="lazy" srcset="/images/tze-explorer-ss-1.768.webp 768w, /images/tze-explorer-ss-1.640.webp 640w, /images/tze-explorer-ss-1.480.webp 480w, /images/tze-explorer-ss-1.320.webp 320w, /images/tze-explorer-ss-1.1920.webp 1920w, /images/tze-explorer-ss-1.1600.webp 1600w, /images/tze-explorer-ss-1.1440.webp 1440w, /images/tze-explorer-ss-1.1280.webp 1280w, /images/tze-explorer-ss-1.1024.webp 1024w"><figcaption>The Tessera Zarr explorer now shows which of the years are available in the multi-year Zarr array</figcaption></figure>

My next step is to port the geotessera examples to use xarray to stream via Zarr (probably with a thin layer for dequantisation) in the Python library, and then look at the OxCaml implementation so I can get a clean-slate version going (essential for my own understanding of how the whole stack works).

The <https://geotessera.org> site launched last week seems to have gone down very well, but I'm now tarpitting on figuring out [how to automatically post to LinkedIn pages](https://marcusnoble.co.uk/2025-02-02-posting-to-linkedin-via-the-api/). I tried IFTTT quickly which only supports personal accounts, and then Buffer which is super complicated, so now I'm reverse engineering the app API. How can posting to the socials from an Atom feed be this complex??

## Springer letting us download papers, but not really

Over in the [evidence TAP](https://anil.recoil.org/papers/2025-evidence-tap) world, we're continuing to make the paper downloader work well. Springer has announced a [premium API](https://datasolutions.springernature.com/products/tdm/) that costs big bucks, but Cambridge has decided to pay it so we can continue downloading.
Unfortunately, this doesn't give access to fulltext PDFs, only an XML version that requires a lot of work to get the figures and reconstruct the original author intent. Apparently they can't do this because of the technical impossibility of serving so many PDFs.

Wiley has also [launched an AI gateway](https://newsroom.wiley.com/press-releases/press-release-details/2025/Wiley-Launches-Interoperable-Platform-to-Power-Scientific-Discovery-in-Worlds-Leading-AI-Technologies/default.aspx) for their works:
> Wiley AI Gateway platform, infrastructure that connects AI agents directly to publisher-authorized scholarly content. Think of it as creating a bridge between your researchers' AI tools and vetted academic sources.  What it does:
> - Connects AI agents (Claude, Mistral, and others) to 3 million Wiley articles optimized for AI retrieval, with plans to expand to diverse scholarly content from multiple publishers and sources
> - Provides institutional visibility and governance over AI content usage
> - Ensures publisher-authorized, copyright-compliant access
> - Works immediately with MCP-compatible AI tools

Still not entirely relevant for us, since we just want the full text in order to do [our own reproducible and human-in-the-loop annotations](https://anil.recoil.org/papers/2025-evidence-tap), so we'll have to see if all these new products make it even more hostile for us to just get the original science that we need.

We also took part in a few events on evidence synthesis; the [Department of Energy Security & Net Zero](https://energysecurity.gov.uk), and [Sam Reynolds](https://samreynolds.org) lead a robust discussion at a panel hosted by Nature. We're going to continue to see very rapid movement in the coming months in the world of evidence synthesis. [Alec Christie](https://profiles.imperial.ac.uk/a.christie) pointed out the [Evals Consensus](https://evals-consensus.ai/) consortium as well; it's nice to see collaborative groups forming all over the world.

## OCaml development

After [Patrick Ferris](https://patrick.sirref.org) wrote up his thoughtful [vibe coding etiquette](https://patrick.sirref.org/vibecoding-etiquette/index.xml) a few weeks ago, I've been introspecting my own mood when it comes to open source maintenance. I definitely got grumpy when I read [this title on the Discuss forums](https://discuss.ocaml.org/t/dependency-hell-makes-it-difficult-to-use-ocaml-for-meaningful-work/17897/23?u=avsm), so I need to discover my more constructive side again. [Thomas Gazagnaire](https://github.com/samoht) tells me that he's been having great success with a [monopam](https://anil.recoil.org/notes/aoah-2025-22) [fork](https://tangled.org/gazagnaire.org/monopam) (with a rewritten git layer) that makes it work much more efficiently on large git subtrees, so I'm going to try this out to see if it makes balancing (and separating) AI content from human-written code easier. I need to write some performance-sensitive code for Zarr, which still needs to be done by hand\!

I really enjoyed Andrew Nesbitt's post on [git remote helpers](https://nesbitt.io/2026/03/18/git-remote-helpers.html) which have sparked off all sorts of subversive thoughts about defining custom git endpoints using Irmin or [Tangled](https://anil.recoil.org/notes/tangled-and-ci). This seems ripe for a bit of [ATProto](https://anil.recoil.org/notes/atproto-for-fun-and-blogging) magic to resolve DIDs and perhaps even hide the PDS handle (so you can just `git clone at:anil.recoil.org/monopam` rather than having to know my own PDS URL is `git.recoil.org`.

## Fun links

- I read this paper [on predicting biodiversity using forest structure complexity](https://www.sciencedirect.com/science/article/pii/S266597272600098X) and greatly this way of predicting alpha animal diversity.
- I failed hard on the [PL Slop or not](https://slop.zackg.me/) test.
- I enjoyed the [bling WebGL shaders gallery](https://radiant-shaders.com/gallery/all)
- I resisted getting distracted by [lidar visualisations](https://digitalflapjack.com/weeknotes/more-lidar-experiments/) after seeing [Michael Dales](https://mynameismwd.org) hacking\!
- I digested [pcodec](https://github.com/pcodec/pcodec) a bit, which losslesly compresses and decompresses numerical sequences.
Synopsis: Reworking the TESSERA Zarr store layout after community feedback, Springer's API woes for evidence synthesis, vibecoding introspection, and git remote helpers for ATProto.
Words: 1008

## Related

- [.plan-26-22: From digital rewilding in Edinburgh to uring and Tessera hackery](https://anil.recoil.org/notes/2026w22) (note, 2026-05-31)
- [TESSERA now supports the Zarr geo-embeddings convention proposal](https://anil.recoil.org/notes/tessera-embeddings-convention) (note, 2026-03-27)
- [.plan-26-11: Bins, bollards, bots and biodiversity boffins](https://anil.recoil.org/notes/2026w11) (note, 2026-03-15)
- [Streaming millions of TESSERA tiles over HTTP with Zarr v3](https://anil.recoil.org/notes/tessera-zarr-v3-layout) (note, 2026-03-14)
- [AoAH Day 22: Assembling monorepos for agentic OCaml development](https://anil.recoil.org/notes/aoah-2025-22) (note, 2025-12-22)
- [AI-assisted Living Evidence Databases for Conservation Science](https://anil.recoil.org/papers/2025-evidence-tap) (paper, 2025-10-01)
- [mlgpx is the first Tangled-hosted package available on opam](https://anil.recoil.org/notes/tangled-and-ci) (note, 2025-08-17)
- [Using AT Proto for more than just Bluesky posts](https://anil.recoil.org/notes/atproto-for-fun-and-blogging) (note, 2025-02-11)
- [TESSERA, a pixelwise geospatial foundation model](https://anil.recoil.org/projects/tessera) (project, 2025-01-01)
- [Conservation Evidence Copilots](https://anil.recoil.org/projects/ce) (project, 2024-01-01)

---
Canonical: https://anil.recoil.org/notes/2026w12
Type: note
License: CC BY 4.0 <https://creativecommons.org/licenses/by/4.0/>
Tags: tessera, oxcaml, evidence
