An extensible, standards-oriented OGC API – Processes application for integrating and executing custom Python workflows, built on pygeoapi.
The service provides process discovery, synchronous and durable asynchronous execution, job tracking and result retrieval.
With Docker and Docker Compose installed, run from the repository root:
docker compose --file compose.release.yml up --build --detachThis starts the API, PostgreSQL and a separate worker. Open http://localhost:5001/processes?f=json to discover processes and http://localhost:5001/openapi for interactive API documentation.
Execute an included example with its packaged input:
curl --fail-with-body http://localhost:5001/processes/raster-info/execution \
-H 'Content-Type: application/json' \
--data-binary @examples/info-request.jsonThe response is HTTP 200 JSON containing info.value.
To stop the service, run docker compose --file compose.release.yml down;
job data and stored results remain in their named volumes.
To add a process, wrap your Python function with pygeoapi's BaseProcessor,
define its inputs and outputs, and register it in the service configuration.
Keep the function in this repository or install an external Python package;
both the API and worker need the same code and dependencies.
Follow adding a Python process or run the working custom-process example.
Using a coding agent? The repository includes AGENTS.md with an integration checklist and links to development, deployment and testing guidance. Provide your Python script and ask your agent to integrate it, including tests and deployment configuration.
The bundled Rasterio/GDAL operations are example processors. They accept GeoTIFFs through controlled HTTPS references or inline base64. Custom Python processes need not use Rasterio or accept raster data.
| Process | Purpose | Output |
|---|---|---|
raster-info |
Inspect metadata, georeferencing and band statistics | JSON |
raster-warp |
Reproject a raster | GeoTIFF |
raster-sample-points |
Sample a band at GeoJSON point locations | GeoJSON |
raster-reclassify |
Map numeric ranges to integer classes | GeoTIFF |
raster-polygonize |
Convert raster classes to polygons | GeoJSON |
See raster operation contracts for parameters and limits, processing your own rasters for local-file and HTTPS requests, and sample data for GeoTIFF and point-sampling walkthroughs.
- Use
compose.release.ymlfor the self-contained deployment. Plaindocker compose upselects the bind-mounted development stack. A synchronous-only opt-out is available. - Set
PYGEOAPI_SERVER_URLto the client-facing address so generated links are reachable. The default API title is Python Processing Service; title and description are configurable. See deployment settings. - Processes share one dependency environment. The async worker runs one job at a time, with a configurable timeout capped at 300 seconds. Review resource settings and application limits before integrating a workload.
- Stored results expire after 24 hours by default, and storage is bounded. Keep the same Compose project name when reusing existing volumes; see result lifecycle and deployment migration.
- There is no built-in authentication or per-user authorization. Protect private job data and results. TLS, credentials, backups and monitoring are deployment responsibilities; see security.
The application targets OGC API – Processes Part 1: Core. Advertised capabilities and known validation limitations are documented in validation. Passing tests does not establish formal OGC certification.
- Adding a Python process and contributing.
- Development and checks and architecture.
- Release deployment and configuration.
- Asynchronous execution and job listing.
- Raster inputs, operation contracts, results and sample data.
- JSON exceptions, standards validation and client interoperability and roadmap.
Source: Gouwe-Gozer/python-ogc-processes.
Maintained by Minnert Wijnands (Gouwe-Gozer) under the MIT License.
This project reuses pygeoapi integration, testing and deployment infrastructure
from the MIT-licensed
bkn-terrain-processes.
Original copyright and licence terms are preserved alongside this project's
copyright. See third-party notices.