{"id":50787356,"url":"https://github.com/jldz9/InSARHub","last_synced_at":"2026-06-29T14:00:43.927Z","repository":{"id":307012467,"uuid":"1027973317","full_name":"jldz9/InSARHub","owner":"jldz9","description":"A modular Python framework for end to end InSAR and time-series processing with GUI support.","archived":false,"fork":false,"pushed_at":"2026-06-08T21:26:49.000Z","size":52777,"stargazers_count":159,"open_issues_count":3,"forks_count":21,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-06-08T22:23:25.179Z","etag":null,"topics":["end-user","geospatial","gui","hyp3","insar","isce","mintpy","radar","remote-sensing","sar","sbas","sentinel-1","time-series"],"latest_commit_sha":null,"homepage":"https://jldz9.github.io/InSARHub/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jldz9.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","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":"2025-07-28T20:25:14.000Z","updated_at":"2026-06-08T21:26:53.000Z","dependencies_parsed_at":"2025-08-19T01:11:05.287Z","dependency_job_id":"fefc7033-8e96-4dae-a14f-fb7afa4f496e","html_url":"https://github.com/jldz9/InSARHub","commit_stats":null,"previous_names":["jldz9/insarscript","jldz9/insarhub"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/jldz9/InSARHub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jldz9%2FInSARHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jldz9%2FInSARHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jldz9%2FInSARHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jldz9%2FInSARHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jldz9","download_url":"https://codeload.github.com/jldz9/InSARHub/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jldz9%2FInSARHub/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34929703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"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":["end-user","geospatial","gui","hyp3","insar","isce","mintpy","radar","remote-sensing","sar","sbas","sentinel-1","time-series"],"created_at":"2026-06-12T09:00:23.099Z","updated_at":"2026-06-29T14:00:43.922Z","avatar_url":"https://github.com/jldz9.png","language":"Python","funding_links":[],"categories":["Radar"],"sub_categories":[],"readme":"# InSARHub\n\nInSARHub is a modular Python framework for automated InSAR and time-series processing.\n\nThe primary goal of this package is to provide a streamlined and user-friendly InSAR processing experience across multiple satellite products. InSARHub currently supports: \n\n| Satellite | Mode | Download | IFG Generation | Timeseries Analysis |\n|-----------|------|----------|----------------|---------------------|\n| Sentinel-1 SLC | Mixed¹ / Local / HPC | ✅ | ✅ | ✅ |\n\n\u003e ¹ **Mixed** — process pipeline that mixed with cloud processing and local processing\n\n## Table of Contents\n- [Web UI](#web-ui)\n- [Installation](#installation)\n- [Requirements](#requirements)\n- [Usage](#usage)\n- [CLI](#cli)\n- [Documentation](#documentation)\n\n## Web UI\n\nInSARHub includes a **self-hosted web interface** that covers the full InSAR workflow — from scene search and download through interferogram processing to time-series analysis.\n```bash\ninsarhub-app\n```\n\nOpen `http://localhost:8080` to access the UI.\n\nAll data stays on your machine — InSARHub runs a local FastAPI server and delivers a modern React frontend directly in your browser.\n\nSee the [Web UI documentation](https://jldz9.github.io/InSARHub/) for a full walkthrough.\n\n### Search \u0026 Download\n\nDraw an AOI on the interactive map, set a date range and orbit filters, and search ASF for Sentinel-1 SLC stacks. InSARHub groups results by track/frame and downloads scenes and precise orbit files automatically.\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\"  srcset=\"docs/frontend/fig/overview_dark.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/frontend/fig/overview_light.png\"\u003e\n  \u003cimg alt=\"Search \u0026 Download\" src=\"docs/frontend/fig/overview_light.png\" width=\"100%\"\u003e\n\u003c/picture\u003e\n\n### Pair Selection \u0026 Quality Scoring\n\nBuild the interferogram network interactively. Pairs are colored by score so weak connections stand out immediately. Adjust temporal or perpendicular baseline limits and drag nodes/edges to refine the network live.\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\"  srcset=\"docs/frontend/fig/network_modify_dark.gif\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/frontend/fig/network_modify_light.gif\"\u003e\n  \u003cimg alt=\"Pair Network Editor\" src=\"docs/frontend/fig/network_modify_light.gif\" width=\"100%\"\u003e\n\u003c/picture\u003e\n\n### Processor\n\nSubmit the selected pairs to HyP3 (cloud, no local SAR software needed) or run ISCE2 `stackSentinel` locally or via SLURM. Monitor job status, download results, and retry failed jobs from the same panel.\n\n### Analyzer\n\nRun MintPy SBAS time-series analysis step by step. Edit the network post-ingest, inspect diagnostic overview layers, and export velocity and displacement maps when done.\n\n### Results Viewer\n\nOverlay the LOS velocity map on the basemap and click any pixel to plot its full displacement time series.\n\n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\"  srcset=\"docs/frontend/fig/timeseries_dark.png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"docs/frontend/fig/timeseries_light.png\"\u003e\n  \u003cimg alt=\"Timeseries\" src=\"docs/frontend/fig/timeseries_light.png\" width=\"100%\"\u003e\n\u003c/picture\u003e\n\n---\n\n## Installation\n\nInSARHub can be installed using Conda:\n```bash\nconda install insarhub -c conda-forge\n```\nPip:\n\n```bash\nconda install gdal -c conda-forge\npip install insarhub\n```\n\nFrom source:\n\n```bash\ngit clone https://github.com/jldz9/InSARHub.git\ncd InSARHub\nconda env create -f environment.yml -n insarhub_dev\nconda activate insarhub_dev\npip install -e .\n```\n\n**ISCE2 local processing** requires a separate ISCE2 environment. Use the provided environment file:\n\n```bash\nconda env create -f environment-isce2.yml -n insarhub_isce2\nconda activate insarhub_isce2\npip install -e .\n```\n\n\u003e ISCE2 must be installed and activated in the same environment. See the [ISCE2 installation guide](https://github.com/isce-framework/isce2) for details.\n\n## Requirements\n- Python \u003e=3.11,\u003c3.13\n- numpy \u003c2.0\n- proj \u003e=9.4\n- gdal \u003e=3.8\n- sqlite \u003e=3.44\n- mintpy\n- asf_search \n- colorama \n- contextily \n- dem_stitcher \n- hyp3_sdk \n- rasterio \u003e=1.4\n- sentineleof\n- pyproj\n- fastapi\n- uvicorn\n- python-multipart\n\n## Usage \n\n### Downloader:\n\n```python\nfrom insarhub import Downloader\n```\n\n- View available downloaders\n\n    ```python\n    Downloader.available()\n    ```\n- Create downloader\n\n    ```python\n    dl = Downloader.create('S1_SLC',\n                            intersectsWith=[-113.05, 37.74, -112.68, 38.00],\n                            start='2020-01-01',\n                            end='2020-12-31',\n                            relativeOrbit=100,\n                            frame=466,\n                            workdir='path/to/dir')\n    ```\n\n- Search\n    ```python\n    results = dl.search()\n    ```\n\n- Filter\n    ```python\n    filter_result = dl.filter(start='2020-02-01')\n    ```\n\n- Select interferogram pairs\n    ```python\n    from insarhub.utils import plot_pair_network\n    pairs, baselines, scene_bperp = dl.select_pairs(dt_max=96, pb_max=150)\n    fig = plot_pair_network(pairs, baselines, scene_bperp)\n    fig.show()\n    ```\n\n- Download\n\n    ```python\n    dl.download()\n    ```\n\n### Processor:\n\n```python\nfrom insarhub import Processor\n```\n- View available processors\n    ```python\n    Processor.available()\n    ```\n\nTwo processors are available:\n\n#### HyP3 (cloud)\n\n```python\nprocessor = Processor.create('Hyp3_S1', workdir='/your/work/path', pairs=pairs)\njobs = processor.submit()\njobs = processor.refresh()\nprocessor.download()\n```\n\n#### ISCE2 (local / HPC)\n\nRequires SLC `.SAFE` files already downloaded. Runs ISCE2 `stackSentinel` locally or submits each step to SLURM with `hpc_mode=True`.\n\n```python\nfrom insarhub.config import ISCE_S1_Config\n\ncfg = ISCE_S1_Config(\n    workdir='/data/p100_f466',\n    bbox=[33.0, 38.0, -120.0, -115.0],   # [S, N, W, E]\n)\nprocessor = Processor.create('ISCE_S1', pairs=pairs, config=cfg)\nprocessor.submit()        # starts background execution\nprocessor.refresh()       # check step status\n```\n\n\n### Analyzer\n\n```python\nfrom insarhub import Analyzer\n```\n- View available analyzers\n    ```python\n    Analyzer.available()\n    ```\n\nTwo analyzers are available, matched to the processor that generated the interferograms:\n\n#### HyP3 outputs\n\n```python\nanalyzer = Analyzer.create('Hyp3_SBAS', workdir=\"/your/work/dir\")\nanalyzer.prep_data()   # unzip and clip HyP3 products\nanalyzer.run()         # full MintPy SBAS pipeline\n```\n\n#### ISCE2 outputs\n\n```python\nanalyzer = Analyzer.create('ISCE_SBAS', workdir=\"/your/work/dir\")\nanalyzer.prep_data()   # auto-discover ISCE2 interferograms and geometry\nanalyzer.run()         # full MintPy SBAS pipeline\n```\n\n## CLI\n\nInSARHub includes a command-line interface for running the full pipeline without writing Python code, suitable for HPC batch jobs and scripted workflows.\n\n```bash\ninsarhub \u003ccommand\u003e [options]\n```\n\n### End-to-end example — HyP3 (cloud)\n\n```bash\n# Search scenes and select interferogram pairs\ninsarhub downloader -N S1_SLC \\\n    --AOI -113.05 37.74 -112.68 38.00 \\\n    --start 2020-01-01 --end 2020-12-31 \\\n    --stacks 100:466 \\\n    -w /data/bryce \\\n    --select-pairs\n\n# Submit pairs to HyP3 (auto-reads stack_p*_f*.json from workdir subfolders)\ninsarhub processor -N Hyp3_S1 -w /data/bryce submit\n\n# Wait for jobs and download results automatically\ninsarhub processor -w /data/bryce watch\n\n# Run MintPy time-series analysis\ninsarhub analyzer -N Hyp3_SBAS -w /data/bryce run\n```\n\n### End-to-end example — ISCE2 (local / HPC)\n\n```bash\n# Search and download SLC scenes + orbits\ninsarhub downloader -N S1_SLC \\\n    --AOI -113.05 37.74 -112.68 38.00 \\\n    --start 2020-01-01 --end 2020-12-31 \\\n    --stacks 100:466 \\\n    -w /data/p100_f466 \\\n    --select-pairs --download --orbits\n\n# Dry run to verify ISCE2 config before committing\ninsarhub processor -N ISCE_S1 -w /data/p100_f466 \\\n    --bbox 33.0 38.0 -120.0 -115.0 submit --dry-run\n\n# Run ISCE2 stackSentinel locally (background) or on SLURM (--hpc_mode True)\ninsarhub processor -N ISCE_S1 -w /data/p100_f466 \\\n    --bbox 33.0 38.0 -120.0 -115.0 submit\n\n# Monitor step progress\ninsarhub processor -N ISCE_S1 -w /data/p100_f466 refresh\n\n# Run MintPy time-series analysis on ISCE2 outputs\ninsarhub analyzer -N ISCE_SBAS -w /data/p100_f466 run\n```\n\n### Commands\n\n| Command | Description |\n|---------|-------------|\n| `insarhub downloader` | Search scenes, select interferogram pairs, and download data |\n| `insarhub processor`  | Submit and manage InSAR processing jobs |\n| `insarhub analyzer`   | Run time-series analysis on processed interferograms |\n| `insarhub utils`      | Helper utilities (pair selection, network plot, SLURM, ERA5, clip) |\n\nUse `insarhub \u003ccommand\u003e --help` for full option details, or see the [CLI Reference](https://jldz9.github.io/InSARHub/quickstart/cli/).\n\n## Documentation\n\n[InSARHub documentation](https://jldz9.github.io/InSARHub/)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjldz9%2FInSARHub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjldz9%2FInSARHub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjldz9%2FInSARHub/lists"}