Skip to main content
GRSdriver_icon

GRSdriver package

Driver dedicated to load and prepare data for the GRS processor

PyPI Documentation

GRSdriver loads a Level-1 satellite image into a single xarray.Dataset ready for the GRS atmospheric and sunglint correction:

  • Sentinel-2 L1C (.SAFE): top-of-atmosphere reflectance of the selected bands on a common grid, with accurate viewing angles computed per band and per detector from the granule metadata
  • Landsat 8 and 9 Collection-2 L1: reflectance, brightness temperature of the thermal bands, sun/viewing angles and L1 quality flags
  • spectral response functions and central wavelengths of each band
  • spatial subsetting, lazy (dask) loading and low memory options for full tiles
  • visualization tools

Full documentation: https://grsdriver.readthedocs.io

Installation

pip install GRSdriver

No separate GDAL installation is needed: rasterio and geopandas ship with their own GDAL (including the JPEG2000 driver for Sentinel-2). The grs_driver command line (RGB quicklooks) needs matplotlib and cartopy:

pip install "GRSdriver[cli]"

Installation from the repository (to use the notebooks and visualization tools)

git clone https://github.com/Tristanovsk/GRSdriver.git
cd GRSdriver
conda env create -f environment.yml
conda activate grs
pip install -e .

For the interactive visualization tools and the notebooks:

conda install -c conda-forge jupyterlab holoviews panel datashader cartopy

Quick start

from GRSdriver import Sentinel2Driver, LandsatDriver

# Sentinel-2: 20 m bands, viewing angles computed on a 60 m grid
l1c = Sentinel2Driver('S2B_MSIL1C_..._.SAFE', resolution=20)
l1c.load_product()
prod = l1c.prod          # bands, vza, raa, sza, SRF, wl_true + metadata

# Landsat 8/9
l1 = LandsatDriver('LC09_L1TP_..._02_T1', resolution=30)
l1.load_product()

The bands are read by 4 threads in parallel: set n_workers (e.g. n_workers=1) to trade speed for memory. For a full Sentinel-2 tile at 10 m, Sentinel2Driver(..., lazy_geom=True) keeps the per-band viewing angles lazy and saves several GB of memory. Set GRSDRIVER_USE_DASK=1 before importing GRSdriver to get a fully lazy (dask-backed) product.

Command line

grs_driver writes an RGB quicklook (PNG) of a Sentinel-2 or Landsat product:

grs_driver S2B_MSIL1C_..._.SAFE --odir ./quicklooks --resolution 60

Tutorials

The notebooks are in docs/source/tutorials/ and rendered with their outputs in the documentation:

Notebook Content
GRSdriver_basics load a Sentinel-2 L1C image, geometry, RGB, NDWI water mask
GRSdriver_subsetting subset a time series of images and build a datacube
GRSdriver_landsat9_TIR Landsat 9 with its thermal bands
GRSdriver_landsat9_L1_CAMS Landsat 9 with CAMS atmospheric data
sentinel2_download download Sentinel-2 L1C images

The paths to the images are those of the author's machine: set them to your own data. See Updating the tutorials to rerun them for the documentation.

Sentinel-2 viewing geometry

The MSI swath is covered by 12 staggered detectors: odd and even detectors look in opposite directions, and the bands of a detector are shifted in the focal plane. Each band therefore has its own viewing angles, with jumps at the detector borders. GRSdriver computes them per band and per detector from the L1C metadata (see Methods).

RGB image

Over water, sunglint is so directional that its reflectance changes abruptly at the detector borders: here +23 % in B11 (1610 nm) between detectors 10 and 11 (right: viewing azimuth). These stripes are a property of the target, not an artifact, and their size depends on the sea roughness, i.e. on the wind speed (Fougnie et al., 2016; Harmel et al., 2018):

sunglint at detector borders

Viewing azimuth of each band computed by GRSdriver:

viewing azimuth per band

across-track profile

Example

example gif

2D-fitting method for angle computation

example files example files example files

Example of water masking

example files

Changes

See CHANGELOG.md.

Metadata

Release files for GRSdriver 2.0.2

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

Source distribution (sdist)

Source distribution for GRSdriver 2.0.2
File Size Uploaded
grsdriver-2.0.2.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for GRSdriver 2.0.2
File Interpreter ABI Platform
grsdriver-2.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 3.4 MB

Release files / grsdriver-2.0.2.tar.gz

Download URL grsdriver-2.0.2.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
a1731fb5c9a1bcc46ddce94370fd676e8782379dd4caa69001da2d2a9f399b9d
BLAKE2b-256 checksum
How to use checksums
1170e4ec778af02f9e8844f03958a26f59559863edffd8ce6285cff9f3f4ebdf
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 Oct 16, 2026.

Transparency log

Release files / grsdriver-2.0.2-py3-none-any.whl

Download URL grsdriver-2.0.2-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f97dcf5deb281bae7232cf9e1a652c48f326d590474fa9e7b06afe2ddc6cbc14
BLAKE2b-256 checksum
How to use checksums
9110c83ae3850360b086eaaae087ca677cdf6a7c95dc215051c3409271e1204f
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 Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.3

2 release files

This release

2.0.2 This release

2 release files

2.0.1

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.1

2 release files

1.0.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