# ignf/flair-hub architecture

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

- Interactive diagram: https://gitdiagram.com/ignf/flair-hub
- Repository: https://github.com/ignf/flair-hub

## Overview

FLAIR-HUB provides patch-level multimodal, multitask semantic-segmentation training, prediction, and metrics, plus a separate large-area zonal inference entry point. The main workflow loads configured datasets, constructs a data module, optionally trains, then predicts or computes metrics and writes outputs. README documentation also describes multimodal inputs, pre-trained model initialization, and zonal rasters. Source excerpts establish the principal entry-point and model/data behavior; unsampled subsystems are represented only where documented, without speculative wiring.

Main entry points: [`src/flair_hub/main.py`](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/main.py) (Patch CLI), [`src/flair_zonal_detection/inference.py`](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/inference.py) (Area inference), [`src/flair_hub/tasks/stages.py`](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/stages.py) (Training stage), [`src/flair_hub/models/flair_model.py`](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/flair_model.py) (Multimodal fusion)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_patch["Patch workflow"]
  node_patch_entry["Patch CLI<br/>[main.py]"]
  node_config["Config setup<br/>[config_io.py]"]
  node_dataset_paths["Dataset paths<br/>[paths.py]"]
  node_data_module["Data module<br/>[module_setup.py]"]
  node_loader["Patch loader<br/>[dataloader.py]"]
  node_data_helpers["Raster prep"]
  node_training["Training stage<br/>[stages.py]"]
  node_task_module["Task module<br/>[tasks_module.py]"]
  node_trainer["Trainer setup<br/>[trainers.py]"]
  node_checkpoint["Checkpointing<br/>[checkpoint.py]"]
  node_prediction["Prediction stage<br/>[stages.py]"]
  node_writer["Prediction writer"]
  node_metrics["Metrics<br/>[metrics_core.py]"]
end

subgraph group_model["Segmentation models"]
  node_fusion_model["Multimodal fusion<br/>[flair_model.py]"]
  node_monotemp["Image encoders<br/>[monotemp_model.py]"]
  node_multitemp["Time-series encoder<br/>[multitemp_model.py]"]
end

subgraph group_zonal["Zonal inference"]
  node_zonal_cli["Zonal CLI<br/>[main.py]"]
  node_zonal_inference["Area inference<br/>[inference.py]"]
  node_zonal_dataset["Area tiling<br/>[dataset.py]"]
  node_zonal_slicing["Tile slicing<br/>[slicing.py]"]
  node_zonal_model["Model utilities<br/>[model_utils.py]"]
  node_postprocess["Raster postprocess<br/>[postprocess.py]"]
  node_raster_outputs["GeoTIFF outputs"]
end

node_user(("Researcher"))

node_user -->|"runs config"| node_patch_entry
node_patch_entry -->|"loads settings"| node_config
node_patch_entry -->|"resolves datasets"| node_dataset_paths
node_patch_entry -->|"builds loaders"| node_data_module
node_data_module -->|"creates batches"| node_loader
node_loader -->|"preprocesses rasters"| node_data_helpers
node_patch_entry -->|"starts training"| node_training
node_training -->|"configures run"| node_trainer
node_training -->|"trains tasks"| node_task_module
node_task_module -->|"forwards batches"| node_fusion_model
node_fusion_model -->|"encodes imagery"| node_monotemp
node_fusion_model -->|"encodes time series"| node_multitemp
node_training -->|"saves weights"| node_checkpoint
node_patch_entry -->|"starts prediction"| node_prediction
node_prediction -->|"runs inference"| node_task_module
node_prediction -->|"writes predictions"| node_writer
node_writer -->|"computes metrics"| node_metrics
node_user -->|"runs config"| node_zonal_cli
node_zonal_cli -->|"dispatches"| node_zonal_inference
node_zonal_inference -->|"loads area tiles"| node_zonal_dataset
node_zonal_inference -->|"slices outputs"| node_zonal_slicing
node_zonal_inference -->|"loads model"| node_zonal_model
node_zonal_inference -->|"processes rasters"| node_postprocess
node_zonal_inference -->|"writes GeoTIFFs"| node_raster_outputs

click node_patch_entry "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/main.py"
click node_config "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/utils/config_io.py"
click node_dataset_paths "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/data/utils_data/paths.py"
click node_data_module "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/module_setup.py"
click node_loader "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/data/dataloader.py"
click node_data_helpers "https://github.com/ignf/flair-hub/tree/main/src/flair_hub/data/utils_data"
click node_training "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/stages.py"
click node_task_module "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/tasks_module.py"
click node_trainer "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/trainers.py"
click node_checkpoint "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/checkpoint.py"
click node_prediction "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/stages.py"
click node_writer "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/writer/prediction_writer.py"
click node_metrics "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/writer/metrics_core.py"
click node_fusion_model "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/flair_model.py"
click node_monotemp "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/monotemp_model.py"
click node_multitemp "https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/multitemp_model.py"
click node_zonal_cli "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/main.py"
click node_zonal_inference "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/inference.py"
click node_zonal_dataset "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/dataset.py"
click node_zonal_slicing "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/slicing.py"
click node_zonal_model "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/model_utils.py"
click node_postprocess "https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/postprocess.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_patch_entry,node_config,node_dataset_paths,node_data_module,node_loader,node_data_helpers,node_training,node_task_module,node_trainer,node_checkpoint,node_prediction,node_writer,node_metrics toneBlue
class node_fusion_model,node_monotemp,node_multitemp toneAmber
class node_zonal_cli,node_zonal_inference,node_zonal_dataset,node_zonal_slicing,node_zonal_model,node_postprocess,node_raster_outputs toneMint
class node_user toneIndigo
```

## Components

### Patch workflow

- [Patch CLI](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/main.py): `src/flair_hub/main.py`
- [Config setup](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/utils/config_io.py): `src/flair_hub/utils/config_io.py`
- [Dataset paths](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/data/utils_data/paths.py): `src/flair_hub/data/utils_data/paths.py`
- [Data module](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/module_setup.py): `src/flair_hub/tasks/module_setup.py`
- [Patch loader](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/data/dataloader.py): `src/flair_hub/data/dataloader.py`
- [Raster prep](https://github.com/ignf/flair-hub/tree/main/src/flair_hub/data/utils_data): `src/flair_hub/data/utils_data`
- [Training stage](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/stages.py): `src/flair_hub/tasks/stages.py`
- [Task module](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/tasks_module.py): `src/flair_hub/tasks/tasks_module.py`
- [Trainer setup](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/trainers.py): `src/flair_hub/tasks/trainers.py`
- [Checkpointing](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/checkpoint.py): `src/flair_hub/models/checkpoint.py`
- [Prediction stage](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/tasks/stages.py): `src/flair_hub/tasks/stages.py`
- [Prediction writer](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/writer/prediction_writer.py): `src/flair_hub/writer/prediction_writer.py`
- [Metrics](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/writer/metrics_core.py): `src/flair_hub/writer/metrics_core.py`

### Segmentation models

- [Multimodal fusion](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/flair_model.py): `src/flair_hub/models/flair_model.py`
- [Image encoders](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/monotemp_model.py): `src/flair_hub/models/monotemp_model.py`
- [Time-series encoder](https://github.com/ignf/flair-hub/blob/main/src/flair_hub/models/multitemp_model.py): `src/flair_hub/models/multitemp_model.py`

### Zonal inference

- [Zonal CLI](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/main.py): `src/flair_zonal_detection/main.py`
- [Area inference](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/inference.py): `src/flair_zonal_detection/inference.py`
- [Area tiling](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/dataset.py): `src/flair_zonal_detection/dataset.py`
- [Tile slicing](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/slicing.py): `src/flair_zonal_detection/slicing.py`
- [Model utilities](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/model_utils.py): `src/flair_zonal_detection/model_utils.py`
- [Raster postprocess](https://github.com/ignf/flair-hub/blob/main/src/flair_zonal_detection/postprocess.py): `src/flair_zonal_detection/postprocess.py`
- **GeoTIFF outputs**

### Other components

- **Researcher**

## Connections

- Researcher → Patch CLI: runs config
- Patch CLI → Config setup: loads settings
- Patch CLI → Dataset paths: resolves datasets
- Patch CLI → Data module: builds loaders
- Data module → Patch loader: creates batches
- Patch loader → Raster prep: preprocesses rasters
- Patch CLI → Training stage: starts training
- Training stage → Trainer setup: configures run
- Training stage → Task module: trains tasks
- Task module → Multimodal fusion: forwards batches
- Multimodal fusion → Image encoders: encodes imagery
- Multimodal fusion → Time-series encoder: encodes time series
- Training stage → Checkpointing: saves weights
- Patch CLI → Prediction stage: starts prediction
- Prediction stage → Task module: runs inference
- Prediction stage → Prediction writer: writes predictions
- Prediction writer → Metrics: computes metrics
- Researcher → Zonal CLI: runs config
- Zonal CLI → Area inference: dispatches
- Area inference → Area tiling: loads area tiles
- Area inference → Tile slicing: slices outputs
- Area inference → Model utilities: loads model
- Area inference → Raster postprocess: processes rasters
- Area inference → GeoTIFF outputs: writes GeoTIFFs
