satctl
Modular library and CLI utility to search, download and process satellite data from different sources, powered by satpy.
Quickstart
satctl can be installed via pip, or uv, in different flavors.
# via pip
$ pip install satctl
# via uv
$ uv add satctl
# including CLI tools
$ uv add satctl[console]
Usage
satctl tries to be as modular as possible, giving the user the possibility to stop the process at any time in the pipeline, from searching to converting the raw data into a GeoTIFF.
Here's a simple example of usage.
from datetime import datetime
from pathlib import Path
from satctl.model import ConversionParams, SearchParams
from satctl.sources import create_source
from satctl.writers import create_writer
if __name__ == "__main__":
# search available satellites and products
names = list_sources(name="s2*")
# or directly create any source
source = create_source("s3-slstr")
# Define a research area, from file or as a simple Polygon
area_file = Path("my_aoi.geojson")
# filter by space, time or source options
params = SearchParams.from_file(path=area_file, datetime(2025, 8, 15), end=datetime(2025, 8, 16))
items = source.search(params)
# download the tiles locally
downloaded, fail = source.download(items, destination=Path("downloads/"), num_workers=4)
# ... load an item as a satpy Scene ...
sene = source.load_scene(items[0], datasets=["S3", "S2", "S1"])
# ... or store them directly on file
writer = create_writer("geotiff")
source.save(
downloaded,
params=ConversionParams.from_file(
path=area_file,
target_crs="4326",
datasets=["all_bands_h"],
resolution=500,
),
destination=Path("results/"),
writer=writer,
num_workers=4,
)
For more examples and use cases, see the documentation.
Contributing
Contributing requires the following tools: uv for environment and project management, ruff for linting and formatting, pyright for standard type checking.
Formatting, linting and type checking is enforced at pre-commit and CI level.
The easiest way to quickstart is the following:
# prepare the environment, requires uv
$ make install
More information about contributing will be added in the main documentation.
Metadata
Release files for satctl 0.3.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| satctl-0.3.6.tar.gz | 70.9 kB | Without provenance | Details for satctl-0.3.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| satctl-0.3.6-py3-none-any.whl | Python 3 | none | any | Details for satctl-0.3.6-py3-none-any.whl |
Total release size: 156.6 kB
Release files / satctl-0.3.6.tar.gz
| Download URL | satctl-0.3.6.tar.gz |
|---|---|
| Size | 70.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
88adb5b1fe2745b20dd2c524c334bd53a3386d39c2c537d6343e7cedd016bcc2
|
|
BLAKE2b-256 checksum How to use checksums |
cfa37f7d312a5ccfe2fc780504aabd49473bf6b0597250bec674486cf8eec2d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.8
|
Release files / satctl-0.3.6-py3-none-any.whl
| Download URL | satctl-0.3.6-py3-none-any.whl |
|---|---|
| Size | 85.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
227cb2f1e427e1920836c2306a1b35166d63b7a1084a16ec122d40190e39e730
|
|
BLAKE2b-256 checksum How to use checksums |
352d4105c12b9628015c8ab40c2d6871edf0d470ecc09b1d2b633605a487ad1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.8
|
Security for satctl 0.3.6
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.