Hi everyone,
I wanted to share a small weekend project that came out of a recurring pain point in my own SAR workflows: installing and using ESA SNAP gpt reproducibly in headless environments, servers, CI, and Jupyter notebooks.
I have created an unofficial conda package:
esa-snap-s1tbx-gpt
Repository: https://github.com/pmuguda/snap-gpt-conda
Documentation: https://pmuguda.github.io/snap-gpt-conda/
Conda package: https://anaconda.org/sarforge/esa-snap-s1tbx-gpt
It repackages the official ESA SNAP installers so that the SNAP Graph Processing Tool (gpt) and the Sentinel-1/SAR stack can be installed directly from conda:
conda create -n snap13 -c sarforge -c conda-forge esa-snap-s1tbx-gpt=13.0.0
conda activate snap13
gpt -h
The package is focused on headless SAR processing. It includes the SNAP engine, gpt, Sentinel-1 Toolbox (s1tbx), Radar/Polarimetric Toolbox (rstb), and shared SAR/microwave components. Optical toolboxes such as s2tbx and s3tbxare intentionally pruned to keep the package smaller and focused on SAR/GPT workflows.
Current published build matrix:
| SNAP version | linux-64 | win-64 | osx-arm64 |
|---|---|---|---|
| 9.0.0 | yes | no | no |
| 10.0.0 | yes | no | no |
| 11.0.0 | yes | no | no |
| 12.0.0 | yes | no | no |
| 13.0.0 | yes | yes | yes |
Older SNAP versions are kept because many SAR workflows, graph XML files, and published methods depend on a specific SNAP release. The package version follows the SNAP version directly, while conda build numbers are used only for packaging fixes.
It should also work with pyroSAR auto-detection, because the normal SNAP layout is preserved and the snap/gptlaunchers are placed on PATH.
Example:
from pyroSAR.examine import ExamineSnap
snap = ExamineSnap()
print(snap.gpt)
A few notes:
-
This is unofficial packaging and is not affiliated with or endorsed by ESA.
-
SNAP itself remains GPL-3.0, developed by ESA and contributors.
-
The packaging scripts/workflows are Apache-2.0.
-
This package does not provide SNAP’s old
snappy/jpyPython-Java bridge. The intended usage is throughgpt, subprocess calls, graph XML, notebooks, or pyroSAR.
I also want to acknowledge prior work from the snap-contrib ecosystem, especially snap-contrib/snap-conda, which showed that SNAP through conda was possible for unattended/headless use. This package differs by narrowing the scope to headless gpt plus the SAR stack, preserving multiple SNAP versions for reproducibility, keeping a pyroSAR-friendly layout, and publishing a documented install matrix for Linux, Windows, and Apple Silicon macOS where storage allows.
I would be very interested in feedback from SNAP and SAR users, especially around:
-
whether this helps with reproducible SNAP/GPT workflows;
-
whether the retained platform/version matrix makes sense;
-
any missing runtime checks that should be added;
-
whether this would be useful in teaching, CI, cloud, or notebook environments.
If you try it and it helps, a star on the repo would also help others discover it:
https://github.com/pmuguda/snap-gpt-conda
Thanks!