# sourabh160705/satquery-ai architecture

> Architecture diagram of the GitHub repository sourabh160705/satquery-ai, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sourabh160705/satquery-ai
- Repository: https://github.com/sourabh160705/satquery-ai

## Overview

SatQuery AI is a satellite-imagery analysis platform: users select or acquire imagery, submit natural-language questions, and receive analysis with visual evidence and an auditable trace. The README documents single-image VQA, captioning, grounding, bi-temporal change detection, optical–SAR fusion, spectral analysis, and GeoTIFF ingestion. The Python API and agent workflow are supported by sampled source; some location and integration behavior is documented or visible only in the Node server excerpt, so uncertain connections are omitted.

Main entry points: [`backend/agent/orchestrator.py`](https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/orchestrator.py) (Query Orchestrator), [`backend/main.py`](https://github.com/sourabh160705/satquery-ai/blob/main/backend/main.py) (Python API), [`satquery-ai/client/src/components/Studio.jsx`](https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/client/src/components/Studio.jsx) (Studio Workbench), [`satquery-ai/server/app.js`](https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/server/app.js) (Node API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Analysis Workbench"]
  node_studio["Studio Workbench<br/>[Studio.jsx]"]
  node_client_shell["Client Shell<br/>[main.jsx]"]
end

subgraph group_api["API and Imagery"]
  node_node_api["Node API<br/>[app.js]"]
  node_python_api["Python API<br/>[main.py]"]
  node_image_parser["Image Parser<br/>[geotiff_parser.py]"]
  node_location_fetcher["Location Imagery"]
end

subgraph group_agent["Agent Workflow"]
  node_orchestrator["Query Orchestrator<br/>[orchestrator.py]"]
  node_classifier["Intent Classifier"]
  node_trace["Execution Trace<br/>[tracer.py]"]
end

subgraph group_tools["Analysis Tools"]
  node_vqa["Image VQA<br/>[vqa_specialist.py]"]
  node_caption["Scene Captioning"]
  node_grounding["Region Grounding"]
  node_change["Change Analysis"]
  node_fusion["Optical SAR Fusion"]
  node_spectral["Spectral Indices"]
end

node_analyst(("Analyst"))
node_external_geo(("Geocoding Service"))
node_external_imagery(("Satellite Imagery Source"))

node_analyst -->|"submits query"| node_studio
node_studio -->|"renders in"| node_client_shell
node_studio -->|"requests analysis"| node_python_api
node_studio -->|"requests location data"| node_node_api
node_node_api -->|"geocodes places"| node_external_geo
node_node_api -->|"acquires imagery"| node_external_imagery
node_python_api -->|"parses uploads"| node_image_parser
node_python_api -->|"fetches scenes"| node_location_fetcher
node_location_fetcher -->|"retrieves scenes"| node_external_imagery
node_python_api -->|"processes queries"| node_orchestrator
node_python_api -->|"computes indices"| node_spectral
node_orchestrator -->|"classifies intent"| node_classifier
node_orchestrator -->|"answers questions"| node_vqa
node_orchestrator -->|"describes scenes"| node_caption
node_orchestrator -->|"localizes regions"| node_grounding
node_orchestrator -->|"analyzes changes"| node_change
node_orchestrator -->|"fuses modalities"| node_fusion
node_orchestrator -->|"computes indices"| node_spectral
node_orchestrator -->|"records execution"| node_trace
node_caption -->|"computes NDVI"| node_spectral

click node_studio "https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/client/src/components/Studio.jsx"
click node_client_shell "https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/client/src/main.jsx"
click node_node_api "https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/server/app.js"
click node_python_api "https://github.com/sourabh160705/satquery-ai/blob/main/backend/main.py"
click node_image_parser "https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/geotiff_parser.py"
click node_location_fetcher "https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/location_satellite.py"
click node_orchestrator "https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/orchestrator.py"
click node_classifier "https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/intent_classifier.py"
click node_trace "https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/tracer.py"
click node_vqa "https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/vqa_specialist.py"
click node_caption "https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/captioning_specialist.py"
click node_grounding "https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/grounding_specialist.py"
click node_change "https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/change_specialist.py"
click node_fusion "https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/optical_sar_fusion.py"
click node_spectral "https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/spectral_indices.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_studio,node_client_shell toneBlue
class node_node_api,node_python_api,node_image_parser,node_location_fetcher toneAmber
class node_orchestrator,node_classifier,node_trace toneMint
class node_vqa,node_caption,node_grounding,node_change,node_fusion,node_spectral toneRose
class node_analyst,node_external_geo,node_external_imagery toneIndigo
```

## Components

### Analysis Workbench

- [Studio Workbench](https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/client/src/components/Studio.jsx): `satquery-ai/client/src/components/Studio.jsx`
- [Client Shell](https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/client/src/main.jsx): `satquery-ai/client/src/main.jsx`

### API and Imagery

- [Node API](https://github.com/sourabh160705/satquery-ai/blob/main/satquery-ai/server/app.js): `satquery-ai/server/app.js`
- [Python API](https://github.com/sourabh160705/satquery-ai/blob/main/backend/main.py): `backend/main.py`
- [Image Parser](https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/geotiff_parser.py): `backend/engine/geotiff_parser.py`
- [Location Imagery](https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/location_satellite.py): `backend/engine/location_satellite.py`

### Agent Workflow

- [Query Orchestrator](https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/orchestrator.py): `backend/agent/orchestrator.py`
- [Intent Classifier](https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/intent_classifier.py): `backend/agent/intent_classifier.py`
- [Execution Trace](https://github.com/sourabh160705/satquery-ai/blob/main/backend/agent/tracer.py): `backend/agent/tracer.py`

### Analysis Tools

- [Image VQA](https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/vqa_specialist.py): `backend/specialists/vqa_specialist.py`
- [Scene Captioning](https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/captioning_specialist.py): `backend/specialists/captioning_specialist.py`
- [Region Grounding](https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/grounding_specialist.py): `backend/specialists/grounding_specialist.py`
- [Change Analysis](https://github.com/sourabh160705/satquery-ai/blob/main/backend/specialists/change_specialist.py): `backend/specialists/change_specialist.py`
- [Optical SAR Fusion](https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/optical_sar_fusion.py): `backend/engine/optical_sar_fusion.py`
- [Spectral Indices](https://github.com/sourabh160705/satquery-ai/blob/main/backend/engine/spectral_indices.py): `backend/engine/spectral_indices.py`

### Other components

- **Analyst**
- **Geocoding Service**
- **Satellite Imagery Source**

## Connections

- Analyst → Studio Workbench: submits query
- Studio Workbench → Client Shell: renders in
- Studio Workbench → Python API: requests analysis
- Studio Workbench → Node API: requests location data
- Node API → Geocoding Service: geocodes places
- Node API → Satellite Imagery Source: acquires imagery
- Python API → Image Parser: parses uploads
- Python API → Location Imagery: fetches scenes
- Location Imagery → Satellite Imagery Source: retrieves scenes
- Python API → Query Orchestrator: processes queries
- Python API → Spectral Indices: computes indices
- Query Orchestrator → Intent Classifier: classifies intent
- Query Orchestrator → Image VQA: answers questions
- Query Orchestrator → Scene Captioning: describes scenes
- Query Orchestrator → Region Grounding: localizes regions
- Query Orchestrator → Change Analysis: analyzes changes
- Query Orchestrator → Optical SAR Fusion: fuses modalities
- Query Orchestrator → Spectral Indices: computes indices
- Query Orchestrator → Execution Trace: records execution
- Scene Captioning → Spectral Indices: computes NDVI
