Skip to content

Manifest

Every edown run writes a JSON manifest that captures the full state of the search, download, and (optionally) stack phases. This makes runs reproducible and allows downstream tools to inspect results programmatically.

Location

Manifests are written to <output_root>/manifests/run-<timestamp>.json by default. Override with --manifest-path.

Structure

{
  "schema_version": 1,
  "config": { ... },
  "search": {
    "collection_id": "COPERNICUS/S2_SR_HARMONIZED",
    "start_date": "2024-06-01",
    "end_date": "2024-06-07",
    "aoi_bounds": [-0.15, 51.48, 0.02, 51.56],
    "selected_band_ids": ["B04", "B08"],
    "output_band_names": ["B04", "B08"],
    "images": [ ... ],
    "alignment_groups": [ ... ],
    "created_at": "2024-06-02T14:30:22+00:00"
  },
  "download": {
    "manifest_path": "data/manifests/run-20240602T143022Z.json",
    "output_root": "data",
    "results": [ ... ],
    "created_at": "2024-06-02T14:35:10+00:00"
  },
  "stack": [ ... ],
  "stack_config": { ... }
}

Sections

config

The effective DownloadConfig (or SearchConfig) serialized as JSON. This records every parameter so the run can be reproduced.

Discovery results including:

  • images -- one entry per discovered image with native CRS, transform, dimensions, selected bands, output dtype, and the alignment signature.
  • alignment_groups -- groups of image IDs that share the same grid, ready for stacking.

download

One result per image:

Field Description
image_id Earth Engine image ID
status downloaded, skipped_existing, skipped_outside_aoi, skipped_missing_bands, or failed
tiff_path Absolute path to the output GeoTIFF
metadata_path Path to the .metadata.json sidecar
chunk_count Number of chunks downloaded
error Error message (failed images only)

stack

Added by edown stack. One result per alignment group:

Field Description
group_id Alignment signature
image_count Number of images in the stack
output_path Path to the Zarr store
skipped_reason Why the group was skipped (if applicable)

stack_config

The StackConfig used for the stack run, recorded for reproducibility.

Using the manifest

Re-run stacking

Since the manifest stores all search and download metadata, you can re-run edown stack without repeating the search or download:

edown stack --manifest-path data/manifests/run-20240602T143022Z.json

Programmatic access

import json
from pathlib import Path

manifest = json.loads(Path("data/manifests/run-20240602T143022Z.json").read_text())

# Count results by status
from collections import Counter
statuses = Counter(r["status"] for r in manifest["download"]["results"])
print(statuses)

# List failed images
for result in manifest["download"]["results"]:
    if result["status"] == "failed":
        print(f"FAILED: {result['image_id']} -- {result['error']}")

Inspect alignment groups

for group in manifest["search"]["alignment_groups"]:
    print(f"Group {group['group_id']}: {len(group['image_ids'])} images, "
          f"CRS={group['crs']}, {group['width']}x{group['height']} px")