Sentinel-2 at 2 m, with every pixel accounted for
synapse-sr turns a Sentinel-2 L2A scene into a 2.0 m red / green / blue / near-infrared GeoTIFF. A physical model of the instrument pins everything the satellite measured. The network only adds what 10 m pixels cannot show, and every output says which pixels came from the measurement and which came from the learned prior.
pip install synapse-sr
import synapse_sr
r = synapse_sr.super_resolve("sentinel2_l2a.tif") # progress bar, then a 5x larger result
r.save("sentinel2_2m.tif") # georeferenced, same CRS and bounds
r.summary() # size, consistency, support, time
synapse-sr sentinel2_l2a.tif sentinel2_2m.tif # the same from the shell
What it is for
| One line | ||
|---|---|---|
| Crop monitoring | r.indices()["ndvi"], synapse_sr.boundaries(r, "field") |
NDVI, SAVI, EVI, red-edge NDRE, field edges at 2 m |
| Urban analysis | synapse_sr.boundaries(r, "urban"), r.indices()["ndbi"] |
buildings, roads, built-up index |
| Water and floods | synapse_sr.change(before, after, "ndwi") |
flooded area in km², shoreline strength |
| Disaster assessment | synapse_sr.change(before, after, "nbr") |
burn scars, landslides, debris; changes flagged only where both dates are trustworthy |
Worked examples for each: Applications.
Pro or Flash
| Pro (default) | Flash | |
|---|---|---|
| Network | 14.4 M-parameter state-space (Mamba) model | ~0.6 M-parameter convolutional model |
| Best on | GPU: Colab, Kaggle, workstations | any CPU, laptops, integrated graphics, Apple silicon, ARM |
| Load | Pro.from_pretrained() |
Flash.from_pretrained() (weights not released yet) |
| Physics guarantees | identical | identical |
Both share the same observation-consistent pipeline, so the same guarantees hold for either one. Flash weights
are not released yet. Until they are, use Pro, which also runs on CPU (more slowly). synapse-sr --models shows
what is published.
Why trust the output
r.x_base # what the 10 m observation determines
r.prior # what the network added (x_base + prior == image), invisible to the sensor
r.support # per pixel: 2 observation-determined, 1 medium, 0 prior-dominated or invalid
r.uncertainty() # calibrated expected error per pixel and band
r.consistency # re-observing the output reproduces the input, in sensor-noise units
x_hat = x_base + P_N(delta): P_N removes every component the sensor could have seen from the network's
output, so the network cannot contradict the measurement. See How it works.
Runs everywhere
| Platform | What you get |
|---|---|
| Colab / Kaggle GPU | Pro with a Triton scan kernel, compiled on first use (no extra installs) |
Linux GPU + mamba-ssm |
fused CUDA kernel (pip install "synapse-sr[cuda]") |
| Windows / macOS / CPU-only / ARM | exact PyTorch path; Flash recommended |
| Offline / air-gapped | Pro.from_pretrained(weights="model.safetensors") |
synapse-sr --env shows what is active on your machine.
Documentation
Quick start · Colab and Kaggle · Applications · Examples · API · Limitations
Limitations, in short. A 2 m grid is not 2 m effective resolution; no effective-resolution figure is claimed for this release. Only B04, B03, B02 and B08 are super-resolved; the 20 m bands are spectral context. The training references are from the United States.
Citation and acknowledgements
@software{synapse_sr,
title = {synapse-sr: observation-consistent super-resolution of Sentinel-2 imagery},
author = {Naidu, Sharadh},
year = {2026},
url = {https://github.com/SharadhNaidu/synapse-sr}
}
Release files for synapse-sr 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| synapse_sr-0.3.0.tar.gz | 64.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| synapse_sr-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 126.9 kB
Release files / synapse_sr-0.3.0.tar.gz
| Download URL | synapse_sr-0.3.0.tar.gz |
|---|---|
| Size | 64.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9649ab45b34b6c9f77dd9cdc6808edfd844dd2b7f46b065b4b0a776f644fafca
|
|
BLAKE2b-256 checksum How to use checksums |
73e35e597809fae125ae6178fd67b577669a24d092fcd08693bd34f011eebb27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / synapse_sr-0.3.0-py3-none-any.whl
| Download URL | synapse_sr-0.3.0-py3-none-any.whl |
|---|---|
| Size | 62.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
de66f758569a18d0628881ee6c5262193b2d7a3268f08a6effe6725d21bcf318
|
|
BLAKE2b-256 checksum How to use checksums |
eb41bbd4b24c405b583ae7a1611bc117314c4fae64ba7d7f3c0b473201e4d10c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log