Skip to main content

synapse-sr

Sentinel-2 at 2 m, with every pixel accounted for

PyPI tests docs Hugging Face weights Open in Colab Open in Kaggle

RV University, Bengaluru: Sentinel-2 10 m and synapse-sr 2 m

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
result = synapse_sr.super_resolve("scene.tif")

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
synapse-sr --fetch 12.92,77.50 --dates 2025-01-01:2025-03-15 out.tif --preview preview.png   # download + run
synapse-sr scenes/ scenes_2m/ --cog                  # a whole folder, as Cloud-Optimised GeoTIFFs

Every common task on one page: cheat sheet. AI assistants and agents can read the whole documentation from llms.txt.

Benchmarks

Official opensr-test protocol (Aybar et al.): Sentinel-2 L2A input, harmonised high-resolution references, opensr_test.Metrics() defaults, mean over its five datasets (NAIP, SPOT, Spain urban, Spain crops, VENµS; 178 scenes). Every model at its native scale, compared on the reference grid.

Model Improvement ↑ Omission ↓ Hallucination ↓ Detail corr. ↑ RMSE ↓ Spectral error ↓ Reflectance error ↓
SYNAPSE Flash 0.148 0.756 0.096 0.298 0.0237 0.427 0.0019
SYNAPSE Pro 0.152 0.750 0.098 0.297 0.0237 0.428 0.0019
SEN2SR 0.150 0.759 0.091 0.284 0.0235 0.665 0.0025
SEN2SR-Lite 0.152 0.749 0.099 0.290 0.0234 0.463 0.0019
LDSR-S2 0.197 0.599 0.204 0.206 0.0240 1.015 0.0036
Satlas ESRGAN 0.129 0.181 0.690 0.089 0.0443 7.787 0.0242
Bicubic 0.102 0.830 0.068 0.279 0.0234 0.601 0.0028

Best in bold. SYNAPSE runs with the package defaults (synapse_sr.super_resolve). Flash processes a 1.28 km scene in about 1 s on a laptop CPU; Pro in about 5 s on a GPU.

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.

Flash or Pro

Flash (default) Pro
Network ~0.6 M-parameter re-parameterised CNN, distilled from Pro 14.4 M-parameter state-space (Mamba) model
Speed (1.28 km scene) ~1 s on a laptop CPU; 10 km x 10 km in ~14 s ~5 s on a GPU (Colab / Kaggle T4, workstations)
Runs on any CPU, laptops, integrated graphics, Apple silicon, ARM, any GPU GPU recommended; CPU works, slower
Choose it synapse_sr.super_resolve(src) synapse_sr.super_resolve(src, model="pro")
Load Flash.from_pretrained() Pro.from_pretrained()
Physics, support map, calibrated uncertainty yes yes

Both run the same observation-consistent pipeline and score within a whisker of each other on the benchmark above. Use Flash for speed and anywhere-deployment, Pro for the most detail on a GPU. synapse-sr --models lists every published checkpoint.

Why trust the output

import synapse_sr
r = synapse_sr.super_resolve("scene.tif")

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   # how closely 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

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}
}
  • Third-party components and their licences are listed in THIRD_PARTY_NOTICES.
  • The optional fused kernel comes from mamba-ssm (Apache-2.0).
  • Sentinel-2 data: Copernicus programme, European Space Agency.

Release files for synapse-sr 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for synapse-sr 0.4.0
File Size Uploaded
synapse_sr-0.4.0.tar.gz 72.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for synapse-sr 0.4.0
File Interpreter ABI Platform
synapse_sr-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 142.4 kB

Release files / synapse_sr-0.4.0.tar.gz

Download URL synapse_sr-0.4.0.tar.gz
Size 72.5 kB
Tags Source
SHA-256 checksum
How to use checksums
4aa3a168d20779fb0347442ac83f0e1cef28c06e21c0184aa0e92084ca659c76
BLAKE2b-256 checksum
How to use checksums
4c8e6ba5ae79b40bc4bed65f7c17f3067ad6855b7e5f74cfb7f1ebe38fd1c54e
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 28, 2026.

Transparency log

Release files / synapse_sr-0.4.0-py3-none-any.whl

Download URL synapse_sr-0.4.0-py3-none-any.whl
Size 69.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3680a0b5daca1f828040db0679298c5c468d20f8850877c1b657e501fce04d59
BLAKE2b-256 checksum
How to use checksums
4dfa44f4356edf69756daa3dba2ed3a373ef8c58082206cb79b6ff8340665844
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 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.1

2 release files

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page