# neilsonnn/image-blaster architecture

> Architecture diagram of the GitHub repository neilsonnn/image-blaster, 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/neilsonnn/image-blaster
- Repository: https://github.com/neilsonnn/image-blaster

## Overview

The repository describes image-to-3D asset generation, but the supplied tree contains no Claude skills or generation pipeline implementation. This map therefore focuses on the React 3D viewer and its documented runtime features; unsampled module wiring is left out where the excerpts do not establish it.

Main entry points: [`app/src/App.tsx`](https://github.com/neilsonnn/image-blaster/blob/main/app/src/App.tsx) (App and routing), [`app/src/main.tsx`](https://github.com/neilsonnn/image-blaster/blob/main/app/src/main.tsx) (React entry), [`app/src/components/WorldSidebar.tsx`](https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldSidebar.tsx) (World sidebar), [`app/src/components/WorldViewer.tsx`](https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldViewer.tsx) (World viewer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Viewer application"]
  node_entry["React entry<br/>[main.tsx]"]
  node_app["App and routing<br/>[App.tsx]"]
  node_worldsidebar["World sidebar<br/>[WorldSidebar.tsx]"]
  node_viewer["World viewer<br/>[WorldViewer.tsx]"]
  node_controls["Viewer controls"]
end

subgraph group_world["World content"]
  node_worldloader["World loader<br/>[worldLoader.ts]"]
  node_worldtypes["World data types<br/>[world.ts]"]
  node_splat["Splat renderer<br/>[SplatRenderer.tsx]"]
  node_environment["Environment map<br/>[EnvironmentMap.tsx]"]
  node_sceneobject["3D scene objects<br/>[SceneObject.tsx]"]
  node_visual["Object visuals"]
  node_placements["Scene placements<br/>[placements.ts]"]
end

subgraph group_interaction["Navigation and editing"]
  node_character["Character movement"]
  node_fly["Fly movement<br/>[FlyController.tsx]"]
  node_camera["Camera gestures"]
  node_grab["Object grabbing<br/>[useObjectGrab.ts]"]
  node_placementeditor["Placement editor"]
  node_butterfly["Butterfly mode"]
end

subgraph group_presentation["Scene presentation"]
  node_audio["World audio<br/>[AudioManager.tsx]"]
  node_post["Post processing<br/>[PostProcessing.tsx]"]
end

node_user(("Viewer user"))

node_user -->|"opens viewer"| node_entry
node_entry -->|"renders"| node_app
node_app -->|"loads worlds"| node_worldloader
node_app -->|"renders"| node_viewer
node_app -->|"renders"| node_worldsidebar
node_app -->|"renders"| node_controls

click node_entry "https://github.com/neilsonnn/image-blaster/blob/main/app/src/main.tsx"
click node_app "https://github.com/neilsonnn/image-blaster/blob/main/app/src/App.tsx"
click node_worldloader "https://github.com/neilsonnn/image-blaster/blob/main/app/src/utils/worldLoader.ts"
click node_worldsidebar "https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldSidebar.tsx"
click node_viewer "https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldViewer.tsx"
click node_worldtypes "https://github.com/neilsonnn/image-blaster/blob/main/app/src/types/world.ts"
click node_splat "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/splat/SplatRenderer.tsx"
click node_environment "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/environment/EnvironmentMap.tsx"
click node_sceneobject "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/SceneObject.tsx"
click node_visual "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/useSceneObjectVisual.ts"
click node_placements "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/placements.ts"
click node_character "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/character/CharacterController.tsx"
click node_fly "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/character/FlyController.tsx"
click node_camera "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/camera/useCameraGestures.ts"
click node_grab "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/useObjectGrab.ts"
click node_placementeditor "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/PlacementEditor.tsx"
click node_butterfly "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/butterfly/ButterflyController.tsx"
click node_audio "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/audio/AudioManager.tsx"
click node_post "https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/postprocessing/PostProcessing.tsx"
click node_controls "https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/BottomLeftControls.tsx"

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_entry,node_app,node_worldsidebar,node_viewer,node_controls,node_user toneBlue
class node_worldloader,node_worldtypes,node_splat,node_environment,node_sceneobject,node_visual,node_placements toneAmber
class node_character,node_fly,node_camera,node_grab,node_placementeditor,node_butterfly toneMint
class node_audio,node_post toneRose
```

## Components

### Viewer application

- [React entry](https://github.com/neilsonnn/image-blaster/blob/main/app/src/main.tsx): `app/src/main.tsx`
- [App and routing](https://github.com/neilsonnn/image-blaster/blob/main/app/src/App.tsx): `app/src/App.tsx`
- [World sidebar](https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldSidebar.tsx): `app/src/components/WorldSidebar.tsx`
- [World viewer](https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/WorldViewer.tsx): `app/src/components/WorldViewer.tsx`
- [Viewer controls](https://github.com/neilsonnn/image-blaster/blob/main/app/src/components/BottomLeftControls.tsx): `app/src/components/BottomLeftControls.tsx`

### World content

- [World loader](https://github.com/neilsonnn/image-blaster/blob/main/app/src/utils/worldLoader.ts): `app/src/utils/worldLoader.ts`
- [World data types](https://github.com/neilsonnn/image-blaster/blob/main/app/src/types/world.ts): `app/src/types/world.ts`
- [Splat renderer](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/splat/SplatRenderer.tsx): `app/src/modules/splat/SplatRenderer.tsx`
- [Environment map](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/environment/EnvironmentMap.tsx): `app/src/modules/environment/EnvironmentMap.tsx`
- [3D scene objects](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/SceneObject.tsx): `app/src/modules/scene/SceneObject.tsx`
- [Object visuals](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/useSceneObjectVisual.ts): `app/src/modules/scene/useSceneObjectVisual.ts`
- [Scene placements](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/placements.ts): `app/src/modules/scene/placements.ts`

### Navigation and editing

- [Character movement](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/character/CharacterController.tsx): `app/src/modules/character/CharacterController.tsx`
- [Fly movement](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/character/FlyController.tsx): `app/src/modules/character/FlyController.tsx`
- [Camera gestures](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/camera/useCameraGestures.ts): `app/src/modules/camera/useCameraGestures.ts`
- [Object grabbing](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/useObjectGrab.ts): `app/src/modules/scene/useObjectGrab.ts`
- [Placement editor](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/scene/PlacementEditor.tsx): `app/src/modules/scene/PlacementEditor.tsx`
- [Butterfly mode](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/butterfly/ButterflyController.tsx): `app/src/modules/butterfly/ButterflyController.tsx`

### Scene presentation

- [World audio](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/audio/AudioManager.tsx): `app/src/modules/audio/AudioManager.tsx`
- [Post processing](https://github.com/neilsonnn/image-blaster/blob/main/app/src/modules/postprocessing/PostProcessing.tsx): `app/src/modules/postprocessing/PostProcessing.tsx`

### Other components

- **Viewer user**

## Connections

- Viewer user → React entry: opens viewer
- React entry → App and routing: renders
- App and routing → World loader: loads worlds
- App and routing → World viewer: renders
- App and routing → World sidebar: renders
- App and routing → Viewer controls: renders
