# TESSERA's repository has three inference directories, four model versions and no PyTorch dependency

> A Cambridge-built foundation model for satellite time series, distributed as embeddings you request by region through a GitHub issue rather than as a download. The inference code sits here. The bug tracker, the embedding queue and the animation assets sit in three other repositories.

**ucam-eo/tessera** — [CVPR26] TESSERA is a foundation model that can process time-series satellite imagery for applications such as land classification and canopy height prediction. Developed at the University of Cambridge, it enables efficient extraction of temporal patterns from Earth observation

- Repository: https://github.com/ucam-eo/tessera
- Stars: 761 · Forks: 68
- Language: Python
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/ucam-eo-tessera

## Three GitHub locations answer three different questions

The header animation is served from a repository belonging to FrankFeng-23, named tessera-v2-animation. The Report Bugs and Request Features buttons both point at the issue tracker of FrankFeng-23/btfm_project, a third repository. Embedding requests go somewhere else entirely, to issue templates on ucam-eo/geotessera, and the project website is geotessera.org, a domain this repository does not carry as its homepage. So a visitor who clones ucam-eo/tessera to report a defect ends up filing it against someone else's tracker. Nothing in the README explains the division, and the tree itself gives no hint that the code of record lives at a different address: what is here is a README, a LICENSE, aup.md, requirements.txt, an images directory and four Python directories.

## Embeddings are handed out by region through a prioritized issue queue

The most prominent callout on the page is not a download link. It asks whether you want TESSERA v2 embeddings without running inference yourself, and answers by asking you to submit a v2 Embedding Pre-Request, an issue template on another repository with the label v2-embedding-prerequest. The stated mechanism is to reserve your region and join the early testers, with the promise that areas will be prioritized, and a warning that v2 coverage is still rolling out. Readers who need embeddings now are pointed at a separate request path for v1.1. For a project whose paper argues that open implementation supports reproducibility, coverage arrives in rollout waves decided per region, and the repository has no GitHub releases at all.

## requirements.txt does not list PyTorch, and pins nothing at all

The dependency file is where an install will actually fail. It groups packages under three headings, core geospatial and data processing with affine, dask, dask[distributed], fiona, numpy, pyproj, rasterio, rioxarray, shapely, stackstac, xarray and bokeh; STAC and cloud processing with pystac-client, pystac and planetary-computer; and utilities with joblib, psutil, tqdm, urllib3 and requests. PyTorch is absent from every group. What exists instead is a comment block under the heading PyTorch installation, which says it requires manual configuration, points at the PyTorch site, offers an example command for CUDA 12.1, gives a CPU-only line, and closes by telling you to verify version compatibility with your hardware. No entry in the file carries a version constraint, so nothing in it constrains the environment.

## Three inference directories carry four model generations

The tree holds tessera_infer, tessera_infer_QAT, tessera_infer_v2 and tessera_preprocessing. The contents list names four inference variants: v2, marked recommended, v1.1 with QAT INT8, v1.0 with QAT INT8, and v1.0 early in float32. Three directories cannot hold four variants without one of them serving two, and the README gives no mapping between the variant names and the directories. The split that does carry meaning is quantization, since two of the four are INT8 after quantization-aware training and one is float32, which means a result computed on the early v1.0 and the same result computed on v1.1 are not comparable numbers. Nothing in the tree states which checkpoint each directory expects.

## The training idea is two cloud-free views, not a masked input

The method is credited to Dr. Clement Atzberger in the introduction. Rather than reconstructing missing pixels from a masked input, the approach draws two cloud-free random samples from a satellite time series, runs both through an auto-encoder, and forces the two embeddings to align with Barlow Twins. The stated consequence is that the resulting embedding represents the whole series, including the missing observations, which is the part that matters for cloudy regions. The representation is per-pixel and spectral-temporal, 128 dimensions at 10-meter resolution, global and annual, learned with self-supervised methods over petabytes of Earth observation data. Evaluated against task-specific models and other foundation models on five downstream tasks, the paper claims TESSERA closely matches or outperforms those baselines.

## An MIT license sits next to a separate acceptable use policy

The root carries a LICENSE file, and the project states MIT terms, and it also carries aup.md, which the contents gives its own section as the Acceptable Use Policy, placed above the access and inference material rather than after the citation and acknowledgements. So the repository ships two separate instruments governing use, one of them the permissive license text and the other a policy whose scope is not summarized in the contents entry. This is not a contradiction on its face, since a project can license code permissively and state expectations separately, but it is the kind of pairing a reader adopting the model should open both files for rather than assume the license answers the question.

## The publication list ends mid-title, and the flagship paper is still to appear

Eight entries are visible, running from an IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing paper in 2024 through arXiv 2506.20380 for TESSERA itself, marked to appear at CVPR 2026, then an accepted ISPRS Conference 2026 paper on crop type classification for small fields, an SSRN preprint on environmental mapping tasks, two January 2026 arXiv preprints on GEDI biomass interpolation and crop classification in the Groundnut Basin of Senegal, and a February 2026 BioArxiv entry on tree species mapping. The last entry begins TESSERA v2 and its title ends partway through, so the newest publication cannot be read from the page. The last push on the repository is dated 2026-08-17, and the paper list is the only changelog the project keeps.

## Conclusion

The model idea is the strongest part here: aligning embeddings from two cloud-free views with Barlow Twins, rather than masking inputs, is a plausible route to a representation that covers the cloudy observations, and the release is genuinely open rather than weights-behind-a-form. What constrains use is the delivery design. Embeddings are handed out by region through a prioritized issue queue, so reproducing a published result means depending on a maintainer response rather than on a checksum, requirements.txt names no PyTorch and pins nothing, four model generations map onto three inference directories without a stated correspondence, and the flagship CVPR 2026 paper is still marked to appear. Treat the code as the reusable artifact, read the paper for the method, plan on running inference yourself for any region outside the rolled-out coverage, and file issues in the repository the README actually points to.

## FAQ

### What does TESSERA produce for a satellite time series?

Per-pixel spectral-temporal signals in 128-dimensional latent representations at 10-meter resolution, globally and annually, summarised with self-supervised learning from petabytes of Earth observation data.

### How do I obtain TESSERA embeddings?

Not as a download from this repository. The README asks you to submit a v2 Embedding Pre-Request issue to reserve your region and join the early testers, and points to a separate v1.1 request for immediate needs.

### Where does TESSERA get its PyTorch install instructions?

requirements.txt does not list PyTorch. A comment block in that file points at the PyTorch site, gives an example command for CUDA 12.1, a CPU-only line, and a note to verify version compatibility with your hardware.

### Which TESSERA inference versions are in the repository?

Four are named in the contents: v2, v1.1 with QAT INT8, v1.0 with QAT INT8, and v1.0 early in float32. The tree carries three inference directories, tessera_infer, tessera_infer_QAT and tessera_infer_v2, plus tessera_preprocessing.

### Where should a TESSERA bug be reported?

The Report Bugs and Request Features links in the README point at the issue tracker of the FrankFeng-23/btfm_project repository, while embedding pre-requests are filed against ucam-eo/geotessera.

### What license does TESSERA ship under?

MIT, with the LICENSE file at the repository root. The root also carries aup.md, an acceptable use policy that the contents gives its own section above the access and inference material.

## Sources

- [Issues](https://github.com/ucam-eo/tessera/issues)
- [License: MIT](https://github.com/ucam-eo/tessera/blob/master/LICENSE)
- [README](https://github.com/ucam-eo/tessera/blob/master/README.md)
- [ucam-eo/tessera on GitHub](https://github.com/ucam-eo/tessera)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/ucam-eo-tessera
