{"id":34681514,"url":"https://github.com/isce-framework/sweets","last_synced_at":"2026-04-13T22:03:59.506Z","repository":{"id":93388129,"uuid":"604239887","full_name":"isce-framework/sweets","owner":"isce-framework","description":"Simple Workflows for End-to-End InSAR Time Series","archived":false,"fork":false,"pushed_at":"2025-12-15T18:44:33.000Z","size":875,"stargazers_count":45,"open_issues_count":17,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-12-19T02:14:07.166Z","etag":null,"topics":["geophysics","glaciers","insar","remote-sensing","sentinel-1","subsidence","synthetic-aperture-radar","tectonics","time-series"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isce-framework.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-02-20T16:21:48.000Z","updated_at":"2025-10-27T19:03:47.000Z","dependencies_parsed_at":"2023-08-12T00:11:06.570Z","dependency_job_id":"de56ff37-1427-4297-b8ce-fd3dc5effed4","html_url":"https://github.com/isce-framework/sweets","commit_stats":{"total_commits":218,"total_committers":6,"mean_commits":"36.333333333333336","dds":0.1834862385321101,"last_synced_commit":"ad03ec1ae645a03015923386d82697db292b70ee"},"previous_names":["isce-framework/sweets"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/isce-framework/sweets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isce-framework%2Fsweets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isce-framework%2Fsweets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isce-framework%2Fsweets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isce-framework%2Fsweets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isce-framework","download_url":"https://codeload.github.com/isce-framework/sweets/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isce-framework%2Fsweets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28008540,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geophysics","glaciers","insar","remote-sensing","sentinel-1","subsidence","synthetic-aperture-radar","tectonics","time-series"],"created_at":"2025-12-24T21:11:56.673Z","updated_at":"2026-04-13T22:03:59.492Z","avatar_url":"https://github.com/isce-framework.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sweets\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/isce-framework/sweets/main.svg)](https://results.pre-commit.ci/latest/github/isce-framework/sweets/main)\n\nEnd-to-end InSAR workflow that turns a single AOI + date range into unwrapped interferograms, a displacement timeseries and a velocity raster.\n\n## What sweets gives you\n\n- Cloud-optimized data downloads\n  - Sentinel-1 burst-subsetting via [`burst2safe`](https://github.com/ASFHyP3/burst2safe)\n  - OPERA CSLC-S1 and NISAR GSLC AOI-based subsetting\n- Geocoding\n- DEM + water-mask prep\n- Geometry stitching\n- Phase-linking, unwrapping, timeseries network inversion, and velocity estimation via [dolphin](https://github.com/isce-framework/dolphin)\n\nInterchangeable input sources, accessible through the same `Workflow` object:\n\n| `--source`         | What it is                                                                                                                                                                                                                                                                                                                                                                                                                      | Tools used                     |\n| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |\n| `safe` *(default)* | Sentinel-1 Level-1 bursts that intersect your AOI via `burst2safe`. Geocoded SLCs (GSLCs) created by COMPASS.                                                                                                                                                                                                                                                                                                                   | burst2safe, s1-reader, COMPASS |\n| `opera-cslc`       | Pre-made [OPERA L2 CSLC-S1 HDF5s](https://www.jpl.nasa.gov/go/opera/products/cslc-product) from ASF DAAC, plus their matching CSLC-STATIC layers for geometry. Faster than `safe` when OPERA has produced for your AOI (CONUS, see [OPERA product suite](https://www.jpl.nasa.gov/go/opera/products/cslc-product-suite/) for coverage) if you are fine with their processing parameters (e.g., 5 meter x 10 meter UTM posting). | opera-utils                    |\n| `nisar-gslc`       | [NISAR L2 GSLC products](https://nisar.jpl.nasa.gov/) geocoded in UTM.                                                                                                                                                                                                                                                                                                                                                          | opera-utils                    |\n\nAn optional `--do-tropo` flag adds a post-dolphin OPERA L4 TROPO-ZENITH\ncorrection step for `safe` and `opera-cslc` (not yet wired for NISAR).\n\n## Install\n\nWe recommend [pixi](https://pixi.sh/) for managing local environments.\n\n```bash\ngit clone https://github.com/isce-framework/sweets.git \u0026\u0026 cd sweets\npixi install\npixi shell\n```\n\nThat drops you into an env where `sweets`, `dolphin` and `compass` are all on\nthe `PATH` and sweets is installed in editable mode.\n\n**GPU mode (Linux + CUDA 12+ only).** There's a `gpu` pixi environment that\nswaps the CPU `isce3` build for `isce3-cuda`, which accelerates COMPASS\ngeocoding, cross-multiplication and resampling on the GPU. dolphin itself\nruns phase-linking on the GPU through JAX+CUDA regardless of environment.\n\n```bash\npixi shell -e gpu        # activate once\nsweets run config.yaml   # now uses isce3-cuda\n```\n\nmacOS can't install this environment (conda-forge doesn't ship osx-arm64\nbuilds of `isce3-cuda`); `pixi shell` without `-e gpu` is the right default\nfor every non-CUDA machine.\n\nA [conda-forge feedstock](https://github.com/conda-forge/sweets-feedstock)\nexists for `sweets`. It currently tracks the pre-v0.2 API; we'll bump it to\nthe new release once the fork dependencies (`s1-reader`, `COMPASS`,\n`opera-utils`, `dolphin`, `spurt`) are merged upstream and a v0.2 release is\ncut.\n\n## Usage\n\n### Command line\n\n```bash\nsweets config --help\nsweets run --help\n```\n\nTo configure a workflow the minimum inputs are an AOI (`--bbox` or `--wkt`), a\ndate range (`--start` / `--end`), and — for the Sentinel-1 path — the relative\norbit (`--track`). `--out-dir` is where raw downloads land; `--work-dir` holds\nthe workflow outputs.\n\nRaw Sentinel-1 bursts (default):\n\n```bash\nsweets config \\\n  --bbox=-102.96 31.22 -101.91 31.56 \\\n  --start 2021-06-05 --end 2021-06-22 \\\n  --track 78 \\\n  --swaths IW2 \\\n  --out-dir ./data \\\n  --work-dir ./pecos_demo \\\n  --output pecos_demo/sweets_config.yaml\n\nsweets run pecos_demo/sweets_config.yaml\n```\n\nPre-made OPERA CSLCs (faster for CONUS, no COMPASS needed):\n\n```bash\nsweets config \\\n  --bbox=-102.96 31.22 -101.91 31.56 \\\n  --start 2021-06-05 --end 2021-06-22 \\\n  --source opera-cslc \\\n  --out-dir ./data \\\n  --work-dir ./pecos_opera \\\n  --output pecos_opera/sweets_config.yaml\n\nsweets run pecos_opera/sweets_config.yaml\n```\n\nWith the optional tropospheric correction step:\n\n```bash\nsweets config --source opera-cslc --do-tropo ... --output pecos_opera/sweets_config.yaml\nsweets run pecos_opera/sweets_config.yaml\n```\n\nNISAR GSLCs:\n\n```bash\nsweets config \\\n  --bbox=-121.10 36.55 -120.95 36.70 \\\n  --start 2025-10-01 --end 2025-12-15 \\\n  --source nisar-gslc \\\n  --track 42 --frame 70 \\\n  --out-dir ./data \\\n  --work-dir ./salinas_nisar \\\n  --output salinas_nisar/nisar.yaml\n\nsweets run salinas_nisar/nisar.yaml\n```\n\n### Starting at a later step\n\n`sweets run` accepts `--starting-step N` so you can skip earlier stages if the\noutputs are already on disk:\n\n```bash\nsweets run config.yaml --starting-step 2  # skip download, run geocode + dolphin\nsweets run config.yaml --starting-step 3  # just (re-)run dolphin\n```\n\n### Configuration from Python\n\nYou can also build a `Workflow` directly:\n\n```python\nfrom sweets.core import Workflow\nfrom sweets.download import BurstSearch\n\nw = Workflow(\n    bbox=(-102.96, 31.22, -101.91, 31.56),\n    search=BurstSearch(\n        track=78,\n        start=\"2021-06-05\",\n        end=\"2021-06-22\",\n        swaths=[\"IW2\"],\n        out_dir=\"data\",\n    ),\n    work_dir=\"pecos_demo\",\n)\nw.to_yaml(\"pecos_demo/sweets_config.yaml\")\nw.run()\n```\n\nThe same pattern works for `OperaCslcSearch` and `NisarGslcSearch` — pick\nwhichever variant matches your data source. `Workflow.search` is a\ndiscriminated union keyed on a `kind` field, so a YAML file with\n`search: {kind: opera-cslc, ...}` round-trips correctly.\n\n## License\n\nThis software is licensed under your choice of BSD-3-Clause or Apache-2.0\nlicenses. See the accompanying LICENSE file for further details.\n\nSPDX-License-Identifier: BSD-3-Clause OR Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisce-framework%2Fsweets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisce-framework%2Fsweets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisce-framework%2Fsweets/lists"}