Interactive satellite imagery exploration platform with ML-based ship detection. Browse multi-source satellite imagery served via Google Earth Engine, capture regions of interest, annotate objects, train YOLOv8 models, and run inference — all from a single web interface.
- Multi-source satellite imagery — Sentinel-1 (SAR), Sentinel-2 (RGB & IR), Landsat 8, Sentinel-3, Sentinel-5P via Google Earth Engine
- Temporal composites — Max, median, min, and first-image reductions over configurable time windows
- Interactive map — Leaflet-based with bounding box selection, geographic markers, and preset maritime zones (Suez, Gibraltar, Hormuz, etc.)
- Capture pipeline — Save high-resolution tile snapshots of areas of interest
- Annotation editor — Draw bounding boxes on captured images to create YOLO-format training labels
- Model training — Launch YOLOv8 training jobs with configurable hyperparameters, live loss/mAP charts
- Inference — Run trained models on satellite tiles with real-time detection overlay on the map
├── main.py # FastAPI application entry point
├── routers/ # API route handlers (thin layer)
├── services/ # Business logic (GEE, training, inference, captures)
├── models/ # Pydantic v2 request/response schemas
├── data/ # Runtime data (captures, training datasets, model weights)
└── satellite-explorer/ # React + TypeScript frontend (Vite)
└── src/
├── features/ # UI feature modules (controls, map, ML panel)
├── services/ # API client
└── types/ # Shared TypeScript types
- Python 3.14+
- Node.js 18+
- Google Earth Engine — authenticated credentials or a
GEE_PROJECTenvironment variable - CUDA-capable GPU (optional) — required for model training and faster inference
# Install Python dependencies
uv sync
# Start the API server (port 8000)
uv run uvicorn main:app --reloadcd satellite-explorer
# Install Node dependencies
npm install
# Start the dev server (proxies /api → localhost:8000)
npm run devOpen http://localhost:5173 in your browser.
| Variable | Description | Default |
|---|---|---|
GEE_PROJECT |
Google Earth Engine project ID | Uses default credentials |
| Method | Path | Description |
|---|---|---|
POST |
/api/scene |
Load a GEE scene (returns tile URL + metadata) |
GET |
/api/zones |
List preset maritime zones |
GET |
/api/basemaps |
List available basemaps |
GET/POST/DELETE |
/api/markers |
Manage geographic markers |
GET/POST/DELETE |
/api/captures |
Manage tile captures |
PUT |
/api/captures/{id}/annotations |
Update capture annotations |
GET |
/api/captures/export |
Export annotated captures as YOLO dataset |
POST |
/api/training/launch |
Launch a YOLOv8 training job |
GET |
/api/training/status |
Get training progress |
GET |
/api/training/jobs |
List training jobs |
POST |
/api/inference/run |
Run detection on satellite tiles |
GET |
/api/inference/status |
Get inference progress and detections |
GET |
/api/inference/models |
List available trained models |
GET |
/api/gpu/status |
Check GPU/CUDA availability |
Backend: FastAPI · Pydantic v2 · Google Earth Engine · Ultralytics YOLOv8 · PyTorch · Pillow
Frontend: React 19 · TypeScript · Vite · Leaflet · react-leaflet



