pygndc
Geographic Neural Data Cube — a Python SDK for reading and analyzing .gndc compressed geospatial time-series data.
What is GeoNDC?
GeoNDC is a continuous-time, AI-ready representation of Earth observation archives. Unlike traditional Analysis-Ready Data (cloud-corrected raster files) or geospatial foundation model embeddings (abstract feature vectors), GeoNDC preserves the original physical observables — surface reflectance, vegetation indices, biophysical variables — while enabling millisecond-level random-access queries at any (x, y, t) coordinate.
Each archive (MODIS, Sentinel-2, Landsat, HiGLASS, …) is encoded into a single self-contained .gndc file (typically 0.5–2 GB) that runs on a laptop, a server, or directly in a browser via WebGPU. Data providers train the model once and publish the file; users download it and run inference locally — the compressed form is the analysis-ready form. No hosted runtime, no API quota, no vendor lock-in.
Key Capabilities
- Continuous-time reconstruction — query data at any moment, not just original observation times
- Millisecond random access — point time series in ~7 ms, full-frame reconstruction in ~2 s on a consumer GPU
- Analytic gradients — compute spatial/temporal derivatives directly from the neural network
- Compact storage — typically ~100:1 versus Int16 raster baselines, up to ~400:1 versus raw float archives
- Portable Native encoder and decoder — the default CPU/WGPU path needs no PyTorch, Numba, CUDA toolkit, or runtime JIT; WGPU targets Vulkan, DX12, and Metal, with an optional PyTorch/tiny-cuda-nn integration
- Implicit gap-filling — cloud-occluded surfaces are reconstructed from the learned spatiotemporal field
- Multi-sensor support — Sentinel-2, Landsat, MODIS, HiGLASS, and more
Online Viewer & Sample Data
- Web Viewer: Browse
.gndcfiles directly in the browser via WebGPU at geondc.org/viewer — no installation required, GPU-accelerated, runs entirely client-side. - Sample Data: Download
.gndcdatasets from Hugging Face.
Querying a Collection
Many independently encoded geographic products can be exposed as one logical cube without repacking their neural payloads:
from pygndc import GNDCCollection
collection = GNDCCollection(mode="native_wgpu")
collection.add(r"Y:\HiGLASS\*.gndc")
collection.save("higlass_china.gndc-collection.json")
collection = GNDCCollection.load("higlass_china.gndc-collection.json")
values = collection.query(
points=[(116.4, 39.9), (118.2, 36.5)],
time="2023-07-15",
bands=[0, 1],
)
The collection index loads without opening its members. Queries are grouped by
member and decoded through the existing GNDCDataset runtime with a bounded LRU
cache. Spatiotemporal windows support in-memory results, stream=True, or direct
output to a NumPy .npy file.
Documentation
- TUTORIAL.md — Installation, quick-start, CLI commands, end-to-end usage examples.
- API_Reference.md — Full Python API for
pygndc.open(),GNDCDataset,GNDCReader, analysis functions.
Installation Extras
Prebuilt packages support Python 3.10–3.13 on Windows x86-64 and Linux x86-64 (glibc 2.28 or newer). They include the encoder, CPU/GPU decoder, GeoTIFF I/O, and Python API. GPU acceleration requires a compatible graphics driver; CPU decoding is available without a GPU. The desktop viewer is optional:
pip install pygndc[viewer]
The desktop viewer caches up to nine chunk readers by default, enough for a 3×3
HiGLASS product, and keeps up to nine model slots resident on WGPU. Set
PYGNDC_VIEWER_MAX_CACHED_CHUNKS to tune the host-side LRU and
PYGNDC_VIEWER_WGPU_SLOTS to tune device-resident model slots, or change the
reader limit at runtime from Tools > Chunk Cache.
Encoding large datasets
GPU training reuses data already loaded into device memory across training
rounds. Set train.train_dtype: float16 to store training targets in half
precision, or float32 to retain full-precision targets. Model calculations use
float32 in either case. The default training-data budget is 4096 MB; set
PYGNDC_NATIVE_PERSISTENT_MAX_MB to adjust it for your GPU.
For tiled inputs, the encoder can read the next tile while training the current
one. Set tiled.prefetch_chunks: false when available RAM is limited.
Reading large archives
Masks and frame-indexed residual corrections are loaded for requested dates.
Repeated queries to the same date reuse recently loaded data. Existing .gndc
files can use these improvements without being re-encoded. Older residual
formats without a date index continue to use their existing decoding behavior.
GPU loading transfers supported quantized weights directly and restores them on the device. This reduces work during model loading; it does not reduce the memory required by the loaded float32 model. CPU decoding remains available when GPU loading is unavailable.
For applications that process many chunks in sequence, GNDCDataset provides
optional prefetch budgets. See the API reference
for the parameters and memory limits. Ordinary read() calls do not enable
background prefetch automatically.
Changes in 1.0.14
Encoding and decoding APIs now include type declarations for editor completion, parameter hints, and static type checking. Implementation source code is not included in the prebuilt packages.
- Faster encoder startup by reusing hardware identification within a process.
- More efficient reuse of GPU training data across epochs.
- Lower memory use for queries with frame-indexed residual corrections.
- Faster loading of supported quantized models and repeated queries to a date.
- Clear errors when a file declares residual corrections that cannot be read.
Existing file formats remain supported. See release notes.
License
GeoNDC is proprietary binary software. Reading and decoding do not require an
encoder license. Creating .gndc files requires a valid encoder license. Contact
jianboqi@126.com for evaluation or commercial use. See LICENSE for
the complete terms.
The GeoNDC file-format specification is published separately to support interoperability. Previously released copies remain governed by the license that accompanied those copies.
Citation
@misc{qi2026geondcqueryableneuraldata,
title={GeoNDC: A Queryable Neural Data Cube for Planetary-Scale Earth Observation},
author={Jianbo Qi and Mengyao Li and Baogui Jiang and Yidan Chen and Qiao Wang},
year={2026},
eprint={2603.25037},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2603.25037},
}
Contact
- Author: Jianbo Qi
- Email: jianboqi@126.com
- Issues: GitHub Issues
Metadata
Release files for pygndc 1.0.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pygndc-1.0.14-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| pygndc-1.0.14-cp313-cp313-manylinux_2_28_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.28+ x86-64 | Details |
| pygndc-1.0.14-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| pygndc-1.0.14-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details |
| pygndc-1.0.14-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| pygndc-1.0.14-cp311-cp311-manylinux_2_28_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.28+ x86-64 | Details |
| pygndc-1.0.14-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| pygndc-1.0.14-cp310-cp310-manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64 | Details |
Total release size: 180.4 MB
Release files / pygndc-1.0.14-cp313-cp313-win_amd64.whl
| Download URL | pygndc-1.0.14-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7c1b6af1e20760ab5be25d44510b116ae4c8de1243a8c2d7dc17b0e5556b7fcc
|
|
BLAKE2b-256 checksum How to use checksums |
a8b200c29324085fd5f68a186768f58f4e165479f3181a4d759b3fd6dc656a14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | pygndc-1.0.14-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 37.8 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a1b8c8ff35f77f899d10e9d13dffa43cbae12e87bec6d725a5989177fc8d0530
|
|
BLAKE2b-256 checksum How to use checksums |
a432774bb81c4bb9ab16a2eab8ca22fe5e70ef3bcbc4eb81878b462e12631092
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp312-cp312-win_amd64.whl
| Download URL | pygndc-1.0.14-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c105d4729113b3ea3caba7c6da208b498700568dc14e5d00ecaf55cd2a2ee186
|
|
BLAKE2b-256 checksum How to use checksums |
c26cc8e77f4e085d76913d7d30e448334f1c9566fd35e42db340a715fa45d577
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | pygndc-1.0.14-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 38.2 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4ab5aab5ac11c47d4129c10e985483b1de04ebe323f62745a34e47870f254d2c
|
|
BLAKE2b-256 checksum How to use checksums |
b2548ffc2be34585b0a44547399a8b4f03bd74b3827fc0759c935322ef974d2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp311-cp311-win_amd64.whl
| Download URL | pygndc-1.0.14-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6ec31f6d8268365efbedf0737d37aeaf24b9caadd7ff791645ba2e52aa22f891
|
|
BLAKE2b-256 checksum How to use checksums |
c44eaa89778602ad97f8d41a357beec84062d2f41c5a16878ee644c43830d16b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | pygndc-1.0.14-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 38.8 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1d61e1e26579e5ffead142e799c95cdefd8a7205584a36de774e640b324f7be9
|
|
BLAKE2b-256 checksum How to use checksums |
d0a539841e8b1baeb3fd073e1049f0c84d23d119ea25992c134dc784cc6a5629
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp310-cp310-win_amd64.whl
| Download URL | pygndc-1.0.14-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e64c2c1e8476c556c02acb86b30c7c90e69d52ffb4a4327f2519d871dc2433df
|
|
BLAKE2b-256 checksum How to use checksums |
01cbe963bdded3baa1b9a8b1d17c00f7a13abec0022e6f8b0ba1dd08d0ffbd79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pygndc-1.0.14-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | pygndc-1.0.14-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 37.2 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cde9753f6848879cd9368d8e89a2fbddf3cb2353f8f55aa9efab712d4e95f642
|
|
BLAKE2b-256 checksum How to use checksums |
624977ab460ed33c1f73d8e118ba52fc417cddcaa2c2439b914bbf8088710a17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|