# cinnapea/2026-fusion-research architecture

> Architecture diagram of the GitHub repository cinnapea/2026-fusion-research, 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/cinnapea/2026-fusion-research
- Repository: https://github.com/cinnapea/2026-fusion-research

## Overview

This is a Qt desktop application for inspecting visible/thermal image datasets, validating paired images, and selecting and rendering preview pairs. The main workflow is user input through the window and application controller, dataset discovery and canonical-manifest loading, pair validation, then preview selection/rendering or validation-report export. Configuration and dataset-specific adapters are distinct supporting capabilities. The README is empty and excerpts are partial, so some controller-to-core wiring is inferred from its includes and exposed operations; uncertain links are omitted.

Main entry points: [`src/application/application_controller.cpp`](https://github.com/cinnapea/2026-fusion-research/blob/master/src/application/application_controller.cpp) (Application controller), [`src/core/visualization/opencv_preview_renderer.cpp`](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/opencv_preview_renderer.cpp) (Preview renderer), [`mainwindow.cpp`](https://github.com/cinnapea/2026-fusion-research/blob/master/mainwindow.cpp) (Main window), [`src/core/datasets/llvip_adapter.cpp`](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/llvip_adapter.cpp) (LLVIP adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_window["Main window<br/>[mainwindow.cpp]"]
  node_controller["Application controller"]
end

subgraph group_dataset["Dataset setup"]
  node_dataset_config["Dataset configuration"]
  node_experiment_view["Experiment views"]
  node_llvip["LLVIP adapter<br/>[llvip_adapter.cpp]"]
  node_msrs["MSRS adapter<br/>[msrs_adapter.cpp]"]
  node_roadscene["RoadScene adapter"]
  node_canonical_lookup["Canonical pair lookup"]
end

subgraph group_validation["Validation and reports"]
  node_manifest_reader["Manifest reader"]
  node_pair_validator["Pair validator<br/>[pair_validator.cpp]"]
  node_batch_validator["Batch validator"]
  node_image_decoder["Image decoder"]
  node_validation_report["Validation report"]
end

subgraph group_preview["Preview generation"]
  node_preview_selector["Preview selector"]
  node_preview_selection["Selection model"]
  node_preview_renderer["Preview renderer"]
end

node_user(("User"))
node_dataset_files["Dataset image files"]
node_manifest_files["Canonical CSV manifest"]
node_report_file["Validation CSV output"]
node_preview_files["Preview PNG output"]

node_user -->|"operates"| node_window
node_window -->|"requests actions"| node_controller
node_controller -->|"loads configuration"| node_dataset_config
node_controller -->|"loads assignments"| node_experiment_view
node_controller -->|"discovers pairs"| node_llvip
node_controller -->|"discovers pairs"| node_msrs
node_controller -->|"discovers pairs"| node_roadscene
node_llvip -->|"reads layout"| node_dataset_files
node_msrs -->|"reads layout"| node_dataset_files
node_roadscene -->|"reads layout"| node_dataset_files
node_controller -->|"resolves image"| node_canonical_lookup
node_controller -->|"loads manifest"| node_manifest_reader
node_manifest_reader -->|"reads rows"| node_manifest_files
node_controller -->|"validates dataset"| node_batch_validator
node_batch_validator -->|"validates pairs"| node_pair_validator
node_pair_validator -->|"decodes images"| node_image_decoder
node_image_decoder -->|"reads images"| node_dataset_files
node_controller -->|"exports results"| node_validation_report
node_validation_report -->|"writes CSV"| node_report_file
node_controller -->|"selects pairs"| node_preview_selector
node_preview_selector -->|"returns selection"| node_preview_selection
node_controller -->|"renders previews"| node_preview_renderer
node_preview_renderer -->|"reads sources"| node_dataset_files
node_preview_renderer -->|"writes PNG"| node_preview_files

click node_window "https://github.com/cinnapea/2026-fusion-research/blob/master/mainwindow.cpp"
click node_controller "https://github.com/cinnapea/2026-fusion-research/blob/master/src/application/application_controller.cpp"
click node_dataset_config "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/configuration/json_dataset_configuration_loader.cpp"
click node_experiment_view "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/configuration/json_experiment_view_loader.cpp"
click node_llvip "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/llvip_adapter.cpp"
click node_msrs "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/msrs_adapter.cpp"
click node_roadscene "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/roadscene_adapter.cpp"
click node_canonical_lookup "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/canonical_pair_lookup.cpp"
click node_manifest_reader "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/manifests/csv_validation_manifest_reader.cpp"
click node_pair_validator "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/validation/pair_validator.cpp"
click node_batch_validator "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/validation/batch_pair_validator.cpp"
click node_image_decoder "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/imaging/opencv_image_decoder.cpp"
click node_validation_report "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/manifests/csv_validation_manifest_writer.cpp"
click node_preview_selector "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/preview_pair_selector.cpp"
click node_preview_selection "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/preview_selection.cpp"
click node_preview_renderer "https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/opencv_preview_renderer.cpp"

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_window,node_controller,node_user,node_preview_files toneBlue
class node_dataset_config,node_experiment_view,node_llvip,node_msrs,node_roadscene,node_canonical_lookup toneAmber
class node_manifest_reader,node_pair_validator,node_batch_validator,node_image_decoder,node_validation_report toneMint
class node_preview_selector,node_preview_selection,node_preview_renderer toneRose
class node_dataset_files,node_manifest_files,node_report_file toneIndigo
```

## Components

### Desktop application

- [Main window](https://github.com/cinnapea/2026-fusion-research/blob/master/mainwindow.cpp): `mainwindow.cpp`
- [Application controller](https://github.com/cinnapea/2026-fusion-research/blob/master/src/application/application_controller.cpp): `src/application/application_controller.cpp`

### Dataset setup

- [Dataset configuration](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/configuration/json_dataset_configuration_loader.cpp): `src/core/configuration/json_dataset_configuration_loader.cpp`
- [Experiment views](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/configuration/json_experiment_view_loader.cpp): `src/core/configuration/json_experiment_view_loader.cpp`
- [LLVIP adapter](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/llvip_adapter.cpp): `src/core/datasets/llvip_adapter.cpp`
- [MSRS adapter](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/msrs_adapter.cpp): `src/core/datasets/msrs_adapter.cpp`
- [RoadScene adapter](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/roadscene_adapter.cpp): `src/core/datasets/roadscene_adapter.cpp`
- [Canonical pair lookup](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/datasets/canonical_pair_lookup.cpp): `src/core/datasets/canonical_pair_lookup.cpp`

### Validation and reports

- [Manifest reader](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/manifests/csv_validation_manifest_reader.cpp): `src/core/manifests/csv_validation_manifest_reader.cpp`
- [Pair validator](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/validation/pair_validator.cpp): `src/core/validation/pair_validator.cpp`
- [Batch validator](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/validation/batch_pair_validator.cpp): `src/core/validation/batch_pair_validator.cpp`
- [Image decoder](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/imaging/opencv_image_decoder.cpp): `src/core/imaging/opencv_image_decoder.cpp`
- [Validation report](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/manifests/csv_validation_manifest_writer.cpp): `src/core/manifests/csv_validation_manifest_writer.cpp`

### Preview generation

- [Preview selector](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/preview_pair_selector.cpp): `src/core/visualization/preview_pair_selector.cpp`
- [Selection model](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/preview_selection.cpp): `src/core/visualization/preview_selection.cpp`
- [Preview renderer](https://github.com/cinnapea/2026-fusion-research/blob/master/src/core/visualization/opencv_preview_renderer.cpp): `src/core/visualization/opencv_preview_renderer.cpp`

### Other components

- **User**
- **Dataset image files**
- **Canonical CSV manifest**
- **Validation CSV output**
- **Preview PNG output**

## Connections

- User → Main window: operates
- Main window → Application controller: requests actions
- Application controller → Dataset configuration: loads configuration
- Application controller → Experiment views: loads assignments
- Application controller → LLVIP adapter: discovers pairs
- Application controller → MSRS adapter: discovers pairs
- Application controller → RoadScene adapter: discovers pairs
- LLVIP adapter → Dataset image files: reads layout
- MSRS adapter → Dataset image files: reads layout
- RoadScene adapter → Dataset image files: reads layout
- Application controller → Canonical pair lookup: resolves image
- Application controller → Manifest reader: loads manifest
- Manifest reader → Canonical CSV manifest: reads rows
- Application controller → Batch validator: validates dataset
- Batch validator → Pair validator: validates pairs
- Pair validator → Image decoder: decodes images
- Image decoder → Dataset image files: reads images
- Application controller → Validation report: exports results
- Validation report → Validation CSV output: writes CSV
- Application controller → Preview selector: selects pairs
- Preview selector → Selection model: returns selection
- Application controller → Preview renderer: renders previews
- Preview renderer → Dataset image files: reads sources
- Preview renderer → Preview PNG output: writes PNG
