# nperreau/moleculeviewer architecture

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

- Interactive diagram: https://gitdiagram.com/nperreau/moleculeviewer
- Repository: https://github.com/nperreau/moleculeviewer

## Overview

Molecule Viewer is a Unity application for turning a SMILES string into an interactive 3D molecular view. The documented workflow accepts the string, processes it with RDKit, retrieves metadata and nomenclature from PubChem, and renders the resulting structure for exploration. The graph also shows the documented rotation and photo-mode capabilities. The README supplies the high-level architecture; source excerpts were limited to generated Burst code, so detailed call ownership and some component wiring cannot be verified.

Main entry points: [`Assets/MoleculeViewer/Scripts/SmilesInputUpdater.cs`](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/SmilesInputUpdater.cs) (SMILES entry), [`Assets/MoleculeViewer/Scripts/PubChem/PubChemAPI.cs`](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/PubChem/PubChemAPI.cs) (PubChem lookup), [`Assets/MoleculeViewer/Scripts/RDKit3DGenerator.cs`](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/RDKit3DGenerator.cs) (Structure processing), [`Assets/MoleculeViewer/Scripts/MoleculeNameLoader.cs`](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MoleculeNameLoader.cs) (Name display)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Input"]
  node_smiles["SMILES entry"]
end

subgraph group_chemistry["Chemistry and metadata"]
  node_rdkit["Structure processing"]
  node_pubchem["PubChem lookup<br/>[PubChemAPI.cs]"]
  node_name["Name display"]
end

subgraph group_view["Visualization"]
  node_renderer["Molecule rendering"]
  node_materials["Atom materials<br/>[MaterialList.cs]"]
end

subgraph group_interaction["Interaction"]
  node_rotation["Molecule rotation<br/>[MoleculeRotator.cs]"]
  node_controls["User controls"]
  node_photo["Photo mode<br/>[Photo.cs]"]
end

node_user(("User"))
node_pubchem_service{{"PubChem REST API"}}

node_user -->|"enters SMILES"| node_smiles
node_smiles -->|"provides input"| node_rdkit
node_smiles -->|"provides input"| node_pubchem
node_pubchem -->|"requests metadata"| node_pubchem_service
node_pubchem -->|"provides nomenclature"| node_name
node_rdkit -->|"provides structure"| node_renderer
node_name -->|"provides metadata"| node_renderer
node_materials -->|"styles atoms"| node_renderer
node_user -->|"operates"| node_controls
node_controls -->|"drives rotation"| node_rotation
node_rotation -->|"updates view"| node_renderer
node_user -->|"captures view"| node_photo

click node_smiles "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/SmilesInputUpdater.cs"
click node_rdkit "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/RDKit3DGenerator.cs"
click node_pubchem "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/PubChem/PubChemAPI.cs"
click node_name "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MoleculeNameLoader.cs"
click node_materials "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MaterialList.cs"
click node_rotation "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MoleculeRotator.cs"
click node_controls "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Inputs/User%20Inputs%20Action.cs"
click node_photo "https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/Photo.cs"

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_smiles,node_user toneBlue
class node_rdkit,node_pubchem,node_name toneAmber
class node_renderer,node_materials,node_pubchem_service toneMint
class node_rotation,node_controls,node_photo toneRose
```

## Components

### Input

- [SMILES entry](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/SmilesInputUpdater.cs): `Assets/MoleculeViewer/Scripts/SmilesInputUpdater.cs`

### Chemistry and metadata

- [Structure processing](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/RDKit3DGenerator.cs): `Assets/MoleculeViewer/Scripts/RDKit3DGenerator.cs`
- [PubChem lookup](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/PubChem/PubChemAPI.cs): `Assets/MoleculeViewer/Scripts/PubChem/PubChemAPI.cs`
- [Name display](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MoleculeNameLoader.cs): `Assets/MoleculeViewer/Scripts/MoleculeNameLoader.cs`

### Visualization

- **Molecule rendering**
- [Atom materials](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MaterialList.cs): `Assets/MoleculeViewer/Scripts/MaterialList.cs`

### Interaction

- [Molecule rotation](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/MoleculeRotator.cs): `Assets/MoleculeViewer/Scripts/MoleculeRotator.cs`
- [User controls](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Inputs/User%20Inputs%20Action.cs): `Assets/MoleculeViewer/Inputs/User Inputs Action.cs`
- [Photo mode](https://github.com/nperreau/moleculeviewer/blob/main/Assets/MoleculeViewer/Scripts/Photo.cs): `Assets/MoleculeViewer/Scripts/Photo.cs`

### Other components

- **User**
- **PubChem REST API**

## Connections

- User → SMILES entry: enters SMILES
- SMILES entry → Structure processing: provides input
- SMILES entry → PubChem lookup: provides input
- PubChem lookup → PubChem REST API: requests metadata
- PubChem lookup → Name display: provides nomenclature
- Structure processing → Molecule rendering: provides structure
- Name display → Molecule rendering: provides metadata
- Atom materials → Molecule rendering: styles atoms
- User → User controls: operates
- User controls → Molecule rotation: drives rotation
- Molecule rotation → Molecule rendering: updates view
- User → Photo mode: captures view
