# plapanaandrei/heritagefusion architecture

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

- Interactive diagram: https://gitdiagram.com/plapanaandrei/heritagefusion
- Repository: https://github.com/plapanaandrei/heritagefusion

## Overview

HeritageFusion is a Streamlit application for classifying musical instruments from audio and images, with late-fusion predictions, an educational chatbot, and an administration panel. The user workflow begins in the app, where an uploaded file is analyzed and prediction feedback/statistics can be stored; the README documents combining the modality predictions, though the relevant implementation details were not sampled. Separate training and experiment scripts prepare datasets, train models, and evaluate results. The graph also includes database-backed administration and retraining. Edges are limited to relationships shown by excerpts, the source index, or the README.

Main entry points: [`app.py`](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py) (Streamlit app), [`admin_page.py`](https://github.com/plapanaandrei/heritagefusion/blob/main/admin_page.py) (Admin panel), [`training/reantrenare_model.py`](https://github.com/plapanaandrei/heritagefusion/blob/main/training/reantrenare_model.py) (Model retraining), [`database.py`](https://github.com/plapanaandrei/heritagefusion/blob/main/database.py) (Application data access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_product["User application"]
  node_app["Streamlit app<br/>[app.py]"]
  node_audio["Audio classification<br/>[app.py]"]
  node_image["Image classification<br/>[app.py]"]
  node_fusion["Late fusion<br/>[app.py]"]
  node_feedback["Prediction feedback<br/>[app.py]"]
  node_chat["Instrument chatbot<br/>[chat_widget.py]"]
end

subgraph group_ml["Recognition models"]
end

subgraph group_admin["Administration"]
  node_adminui["Admin panel<br/>[admin_page.py]"]
  node_database["Application data access<br/>[database.py]"]
  node_postgres[("PostgreSQL")]
  node_retraining["Model retraining"]
end

subgraph group_research["Model development"]
  node_audio_training["Audio training<br/>[train_audio.py]"]
  node_image_training["Image training<br/>[train_images.py]"]
  node_class_prep["Shared classes"]
  node_dataset_split["Dataset splitting"]
  node_audio_eval["Audio evaluation<br/>[exp1_audio_only.py]"]
  node_image_eval["Image evaluation<br/>[exp2_image_only.py]"]
  node_multimodal_eval["Multimodal experiments"]
  node_fusion_eval["Fusion evaluation"]
  node_experiment_eval["Combined evaluations"]
end

node_visitor(("Visitor"))

node_visitor -->|"uses"| node_app
node_app -->|"classifies audio"| node_audio
node_app -->|"classifies images"| node_image
node_app -->|"combines predictions"| node_fusion
node_app -->|"collects feedback"| node_feedback
node_app -->|"reads and writes"| node_database
node_app -->|"imports"| node_chat
node_app -->|"dispatches to"| node_adminui
node_adminui -->|"uses"| node_database
node_database -->|"queries"| node_postgres
node_adminui -->|"runs training"| node_retraining
node_visitor -->|"administers"| node_adminui
node_audio_training -.->|"trains model"| node_audio
node_image_training -.->|"trains model"| node_image
node_retraining -.->|"re-trains"| node_audio_training
node_retraining -.->|"re-trains"| node_image_training
node_class_prep -.->|"prepares data"| node_dataset_split
node_audio_eval -.->|"evaluates model"| node_audio_training
node_image_eval -.->|"evaluates model"| node_image_training
node_multimodal_eval -.->|"evaluates fusion"| node_fusion_eval
node_experiment_eval -.->|"evaluates fusion"| node_fusion_eval

click node_app "https://github.com/plapanaandrei/heritagefusion/blob/main/app.py"
click node_audio "https://github.com/plapanaandrei/heritagefusion/blob/main/app.py"
click node_image "https://github.com/plapanaandrei/heritagefusion/blob/main/app.py"
click node_fusion "https://github.com/plapanaandrei/heritagefusion/blob/main/app.py"
click node_feedback "https://github.com/plapanaandrei/heritagefusion/blob/main/app.py"
click node_chat "https://github.com/plapanaandrei/heritagefusion/blob/main/chat_widget.py"
click node_adminui "https://github.com/plapanaandrei/heritagefusion/blob/main/admin_page.py"
click node_database "https://github.com/plapanaandrei/heritagefusion/blob/main/database.py"
click node_retraining "https://github.com/plapanaandrei/heritagefusion/blob/main/training/reantrenare_model.py"
click node_audio_training "https://github.com/plapanaandrei/heritagefusion/blob/main/training/train_audio.py"
click node_image_training "https://github.com/plapanaandrei/heritagefusion/blob/main/training/train_images.py"
click node_class_prep "https://github.com/plapanaandrei/heritagefusion/blob/main/etapa1_clase_comune.py"
click node_dataset_split "https://github.com/plapanaandrei/heritagefusion/blob/main/etapa2_split_date.py"
click node_audio_eval "https://github.com/plapanaandrei/heritagefusion/blob/main/exp1_audio_only.py"
click node_image_eval "https://github.com/plapanaandrei/heritagefusion/blob/main/exp2_image_only.py"
click node_multimodal_eval "https://github.com/plapanaandrei/heritagefusion/blob/main/exp3_perechi_multimodale.py"
click node_fusion_eval "https://github.com/plapanaandrei/heritagefusion/blob/main/evaluare_late_fusion.py"
click node_experiment_eval "https://github.com/plapanaandrei/heritagefusion/blob/main/exp456_evaluare_multimodala.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_app,node_audio,node_image,node_fusion,node_feedback,node_chat toneBlue
class node_adminui,node_database,node_postgres,node_retraining toneMint
class node_audio_training,node_image_training,node_class_prep,node_dataset_split,node_audio_eval,node_image_eval,node_multimodal_eval,node_fusion_eval,node_experiment_eval toneRose
class node_visitor toneIndigo
```

## Components

### User application

- [Streamlit app](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py): `app.py`
- [Audio classification](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py): `app.py`
- [Image classification](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py): `app.py`
- [Late fusion](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py): `app.py`
- [Prediction feedback](https://github.com/plapanaandrei/heritagefusion/blob/main/app.py): `app.py`
- [Instrument chatbot](https://github.com/plapanaandrei/heritagefusion/blob/main/chat_widget.py): `chat_widget.py`

### Administration

- [Admin panel](https://github.com/plapanaandrei/heritagefusion/blob/main/admin_page.py): `admin_page.py`
- [Application data access](https://github.com/plapanaandrei/heritagefusion/blob/main/database.py): `database.py`
- **PostgreSQL**
- [Model retraining](https://github.com/plapanaandrei/heritagefusion/blob/main/training/reantrenare_model.py): `training/reantrenare_model.py`

### Model development

- [Audio training](https://github.com/plapanaandrei/heritagefusion/blob/main/training/train_audio.py): `training/train_audio.py`
- [Image training](https://github.com/plapanaandrei/heritagefusion/blob/main/training/train_images.py): `training/train_images.py`
- [Shared classes](https://github.com/plapanaandrei/heritagefusion/blob/main/etapa1_clase_comune.py): `etapa1_clase_comune.py`
- [Dataset splitting](https://github.com/plapanaandrei/heritagefusion/blob/main/etapa2_split_date.py): `etapa2_split_date.py`
- [Audio evaluation](https://github.com/plapanaandrei/heritagefusion/blob/main/exp1_audio_only.py): `exp1_audio_only.py`
- [Image evaluation](https://github.com/plapanaandrei/heritagefusion/blob/main/exp2_image_only.py): `exp2_image_only.py`
- [Multimodal experiments](https://github.com/plapanaandrei/heritagefusion/blob/main/exp3_perechi_multimodale.py): `exp3_perechi_multimodale.py`
- [Fusion evaluation](https://github.com/plapanaandrei/heritagefusion/blob/main/evaluare_late_fusion.py): `evaluare_late_fusion.py`
- [Combined evaluations](https://github.com/plapanaandrei/heritagefusion/blob/main/exp456_evaluare_multimodala.py): `exp456_evaluare_multimodala.py`

### Other components

- **Visitor**

## Connections

- Visitor → Streamlit app: uses (evidence: `README.md`)
- Streamlit app → Audio classification: classifies audio (evidence: `README.md`)
- Streamlit app → Image classification: classifies images (evidence: `README.md`)
- Streamlit app → Late fusion: combines predictions (evidence: `README.md`)
- Streamlit app → Prediction feedback: collects feedback (evidence: `app.py`)
- Streamlit app → Application data access: reads and writes (evidence: `app.py`)
- Streamlit app → Instrument chatbot: imports (evidence: `app.py`)
- Streamlit app → Admin panel: dispatches to (evidence: `app.py`)
- Admin panel → Application data access: uses (evidence: `admin_page.py`)
- Application data access → PostgreSQL: queries (evidence: `database.py`)
- Admin panel → Model retraining: runs training (evidence: `admin_page.py`)
- Visitor → Admin panel: administers (evidence: `README.md`)
- Audio training → Audio classification: trains model
- Image training → Image classification: trains model
- Model retraining → Audio training: re-trains
- Model retraining → Image training: re-trains
- Shared classes → Dataset splitting: prepares data
- Audio evaluation → Audio training: evaluates model
- Image evaluation → Image training: evaluates model
- Multimodal experiments → Fusion evaluation: evaluates fusion
- Combined evaluations → Fusion evaluation: evaluates fusion
