# kaiser287/cyclone-intensity architecture

> Architecture diagram of the GitHub repository kaiser287/cyclone-intensity, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-05). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kaiser287/cyclone-intensity
- Repository: https://github.com/kaiser287/cyclone-intensity

## Overview

This repository supports cyclone wind-intensity prediction, with a Streamlit dashboard that accepts satellite imagery, runs inference, and presents intensity and track information. A separate training workflow prepares image data, builds an intensity model, and trains it; the repository also includes HDF5 preprocessing and an automatic Excel reporting script. The README documents manual TCIR data setup and training. Some data and training modules were not excerpted, so their internal connections are omitted where the evidence does not establish them.

Main entry points: [`main.py`](https://github.com/kaiser287/cyclone-intensity/blob/main/main.py) (Training Entry), [`app.py`](https://github.com/kaiser287/cyclone-intensity/blob/main/app.py) (Prediction Dashboard), [`source/training/dataset.py`](https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/dataset.py) (Image Dataset), [`source/inference/predictor.py`](https://github.com/kaiser287/cyclone-intensity/blob/main/source/inference/predictor.py) (Intensity Predictor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Dashboard and Reports"]
  node_dashboard_ui["Prediction Dashboard<br/>[app.py]"]
  node_dashboard_views["Metrics and Maps<br/>[app.py]"]
  node_report["Excel Report"]
end

subgraph group_data["Data Preparation"]
  node_hdf5_prep["HDF5 Preprocessing<br/>[preprocessor.py]"]
  node_image_dataset["Image Dataset<br/>[dataset.py]"]
end

subgraph group_training["Model Training"]
  node_settings["Training Settings<br/>[settings.py]"]
  node_train_entry["Training Entry<br/>[main.py]"]
  node_trainer["Training Loop<br/>[trainer.py]"]
  node_intensity_training["Intensity Training<br/>[train_intensity.py]"]
  node_track_training["Track Training<br/>[train_track.py]"]
end

subgraph group_inference["Inference Models"]
  node_intensity_model["Intensity Model<br/>[intensity_model.py]"]
  node_predictor["Intensity Predictor<br/>[predictor.py]"]
  node_track_model["Track Predictor<br/>[track_model.py]"]
end

node_user(("Analyst"))
node_satellite_data["Satellite Data"]

node_user -->|"uploads imagery"| node_dashboard_ui
node_satellite_data -.->|"provides HDF5"| node_hdf5_prep
node_dashboard_ui -->|"runs inference"| node_predictor
node_predictor -->|"initializes track"| node_track_model
node_dashboard_ui -->|"renders results"| node_dashboard_views
node_report -->|"requests predictions"| node_predictor
node_satellite_data -.->|"provides images"| node_image_dataset
node_train_entry -->|"reads config"| node_settings
node_train_entry -->|"creates dataset"| node_image_dataset
node_train_entry -->|"sets transforms"| node_hdf5_prep
node_image_dataset -->|"uses transforms"| node_hdf5_prep
node_train_entry -->|"creates model"| node_intensity_model
node_train_entry -->|"starts training"| node_trainer
node_trainer -->|"reads config"| node_settings
node_track_training -->|"uses model"| node_track_model

click node_dashboard_ui "https://github.com/kaiser287/cyclone-intensity/blob/main/app.py"
click node_dashboard_views "https://github.com/kaiser287/cyclone-intensity/blob/main/app.py"
click node_report "https://github.com/kaiser287/cyclone-intensity/blob/main/generate_report_auto.py"
click node_hdf5_prep "https://github.com/kaiser287/cyclone-intensity/blob/main/source/data/preprocessor.py"
click node_image_dataset "https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/dataset.py"
click node_settings "https://github.com/kaiser287/cyclone-intensity/blob/main/config/settings.py"
click node_train_entry "https://github.com/kaiser287/cyclone-intensity/blob/main/main.py"
click node_trainer "https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/trainer.py"
click node_intensity_training "https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/train_intensity.py"
click node_track_training "https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/train_track.py"
click node_intensity_model "https://github.com/kaiser287/cyclone-intensity/blob/main/source/models/intensity_model.py"
click node_predictor "https://github.com/kaiser287/cyclone-intensity/blob/main/source/inference/predictor.py"
click node_track_model "https://github.com/kaiser287/cyclone-intensity/blob/main/source/models/track_model.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_dashboard_ui,node_dashboard_views,node_report toneBlue
class node_hdf5_prep,node_image_dataset toneAmber
class node_settings,node_train_entry,node_trainer,node_intensity_training,node_track_training toneMint
class node_intensity_model,node_predictor,node_track_model toneRose
class node_user,node_satellite_data toneIndigo
```

## Components

### Dashboard and Reports

- [Prediction Dashboard](https://github.com/kaiser287/cyclone-intensity/blob/main/app.py): `app.py`
- [Metrics and Maps](https://github.com/kaiser287/cyclone-intensity/blob/main/app.py): `app.py`
- [Excel Report](https://github.com/kaiser287/cyclone-intensity/blob/main/generate_report_auto.py): `generate_report_auto.py`

### Data Preparation

- [HDF5 Preprocessing](https://github.com/kaiser287/cyclone-intensity/blob/main/source/data/preprocessor.py): `source/data/preprocessor.py`
- [Image Dataset](https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/dataset.py): `source/training/dataset.py`

### Model Training

- [Training Settings](https://github.com/kaiser287/cyclone-intensity/blob/main/config/settings.py): `config/settings.py`
- [Training Entry](https://github.com/kaiser287/cyclone-intensity/blob/main/main.py): `main.py`
- [Training Loop](https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/trainer.py): `source/training/trainer.py`
- [Intensity Training](https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/train_intensity.py): `source/training/train_intensity.py`
- [Track Training](https://github.com/kaiser287/cyclone-intensity/blob/main/source/training/train_track.py): `source/training/train_track.py`

### Inference Models

- [Intensity Model](https://github.com/kaiser287/cyclone-intensity/blob/main/source/models/intensity_model.py): `source/models/intensity_model.py`
- [Intensity Predictor](https://github.com/kaiser287/cyclone-intensity/blob/main/source/inference/predictor.py): `source/inference/predictor.py`
- [Track Predictor](https://github.com/kaiser287/cyclone-intensity/blob/main/source/models/track_model.py): `source/models/track_model.py`

### Other components

- **Analyst**
- **Satellite Data**

## Connections

- Analyst → Prediction Dashboard: uploads imagery (evidence: `app.py`)
- Satellite Data → HDF5 Preprocessing: provides HDF5 (evidence: `README.md`)
- Prediction Dashboard → Intensity Predictor: runs inference (evidence: `app.py`)
- Intensity Predictor → Track Predictor: initializes track (evidence: `source/inference/predictor.py`)
- Prediction Dashboard → Metrics and Maps: renders results (evidence: `app.py`)
- Excel Report → Intensity Predictor: requests predictions (evidence: `generate_report_auto.py`)
- Satellite Data → Image Dataset: provides images (evidence: `README.md`)
- Training Entry → Training Settings: reads config (evidence: `main.py`)
- Training Entry → Image Dataset: creates dataset (evidence: `main.py`)
- Training Entry → HDF5 Preprocessing: sets transforms (evidence: `main.py`)
- Image Dataset → HDF5 Preprocessing: uses transforms (evidence: `source/training/dataset.py`)
- Training Entry → Intensity Model: creates model (evidence: `main.py`)
- Training Entry → Training Loop: starts training (evidence: `main.py`)
- Training Loop → Training Settings: reads config (evidence: `source/training/trainer.py`)
- Track Training → Track Predictor: uses model (evidence: `source/training/train_track.py`)
