# steinann/roavatar-renderer architecture

> Architecture diagram of the GitHub repository steinann/roavatar-renderer, 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/steinann/roavatar-renderer
- Repository: https://github.com/steinann/roavatar-renderer

## Overview

RoAvatar Renderer is a TypeScript library for turning Roblox avatar data into animated, customizable 3D scenes and thumbnails. The documented user workflow configures renderer flags, initializes the renderer, fetches an avatar model through the API, and passes it to OutfitRenderer for animation and display. The graph also preserves Roblox model parsing, asset and outfit preparation, mesh deformation, scene rendering, and thumbnail generation as distinct capabilities. Some subsystem links are based on the README and module boundaries; unsampled implementation details are not assumed.

Main entry points: [`src/code/avatar/outfit.ts`](https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/outfit.ts) (Outfit Data), [`src/code/render/renderer.ts`](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderer.ts) (Renderer Setup), [`src/code/rblx/instance/HumanoidDescription.ts`](https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/instance/HumanoidDescription.ts) (Humanoid Description), [`src/code/render/outfitRenderer.ts`](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/outfitRenderer.ts) (Outfit Renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public Setup"]
  node_flags["Runtime Flags<br/>[flags.ts]"]
  node_renderer["Renderer Setup<br/>[renderer.ts]"]
end

subgraph group_avatar["Avatar Data"]
  node_api["Avatar API<br/>[api.ts]"]
  node_outfitmodel["Outfit Model<br/>[outfitModel.ts]"]
  node_outfit["Outfit Data<br/>[outfit.ts]"]
  node_asset["Avatar Assets<br/>[asset.ts]"]
end

subgraph group_model["Roblox Model"]
  node_rbxparse["RBX Parsing<br/>[rbx.ts]"]
  node_robloxdata["RoAvatar Data"]
  node_description["Humanoid Description"]
  node_wrappers["Instance Wrappers<br/>[InstanceWrapper.ts]"]
  node_deform["Mesh Deformation<br/>[mesh-deform.ts]"]
  node_workerpool["Worker Pool<br/>[worker-pool.ts]"]
end

subgraph group_render["Rendering"]
  node_outfitrenderer["Outfit Renderer<br/>[outfitRenderer.ts]"]
  node_scene["Renderer Scene<br/>[rendererScene.ts]"]
  node_renderdesc["Render Descriptions<br/>[renderDesc.ts]"]
  node_texturemanager[("Texture Manager<br/>[textureManager.ts]")]
  node_rendering["Three.js Renderer<br/>[renderer.ts]"]
end

subgraph group_thumbnail["Thumbnails"]
  node_thumbnail["Thumbnail Generator<br/>[generator.ts]"]
  node_thumbscene["Thumbnail Scene<br/>[thumbnailScene.ts]"]
  node_camera["Camera Presets"]
end

node_developer(("Application"))
node_assetservice(("Asset Service"))
node_genericapi(("Generic API"))

node_developer -->|"configures"| node_flags
node_developer -->|"initializes"| node_renderer
node_renderer -->|"reads settings"| node_flags
node_developer -->|"requests avatar"| node_api
node_api -->|"returns model"| node_outfitmodel
node_developer -->|"creates renderer"| node_outfitrenderer
node_outfitrenderer -->|"renders model"| node_outfitmodel
node_outfitmodel -->|"holds outfit"| node_outfit
node_outfit -->|"contains assets"| node_asset
node_asset -.->|"loads assets"| node_assetservice
node_outfit -->|"converts outfit"| node_description
node_rbxparse -->|"uses wrappers"| node_wrappers
node_robloxdata -->|"parses instances"| node_rbxparse
node_description -->|"reads outfit data"| node_outfit
node_description -->|"builds instances"| node_rbxparse
node_deform -->|"dispatches work"| node_workerpool
node_outfitrenderer -->|"renders into"| node_scene
node_scene -->|"uses descriptions"| node_renderdesc
node_renderdesc -->|"loads textures"| node_texturemanager
node_texturemanager -->|"loads images"| node_genericapi
node_renderer -->|"sets up"| node_rendering
node_thumbnail -->|"creates scene"| node_thumbscene
node_thumbnail -->|"sets camera"| node_camera
node_camera -->|"frames avatar"| node_thumbscene

click node_flags "https://github.com/steinann/roavatar-renderer/blob/master/src/code/misc/flags.ts"
click node_renderer "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderer.ts"
click node_api "https://github.com/steinann/roavatar-renderer/blob/master/src/code/api.ts"
click node_outfitmodel "https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/outfitModel.ts"
click node_outfit "https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/outfit.ts"
click node_asset "https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/asset.ts"
click node_rbxparse "https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/rbx.ts"
click node_robloxdata "https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/roavatar-data-parser.ts"
click node_description "https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/instance/HumanoidDescription.ts"
click node_wrappers "https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/instance/InstanceWrapper.ts"
click node_deform "https://github.com/steinann/roavatar-renderer/blob/master/src/code/mesh/mesh-deform.ts"
click node_workerpool "https://github.com/steinann/roavatar-renderer/blob/master/src/code/misc/worker-pool.ts"
click node_outfitrenderer "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/outfitRenderer.ts"
click node_scene "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/rendererScene.ts"
click node_renderdesc "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderDesc.ts"
click node_texturemanager "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/textureManager.ts"
click node_rendering "https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderer.ts"
click node_thumbnail "https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/generator.ts"
click node_thumbscene "https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/thumbnailScene.ts"
click node_camera "https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/cameraPresetsUtility.ts"

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_flags,node_renderer toneBlue
class node_api,node_outfitmodel,node_outfit,node_asset toneAmber
class node_rbxparse,node_robloxdata,node_description,node_wrappers,node_deform,node_workerpool,node_genericapi toneMint
class node_outfitrenderer,node_scene,node_renderdesc,node_texturemanager,node_rendering toneRose
class node_thumbnail,node_thumbscene,node_camera,node_developer,node_assetservice toneIndigo
```

## Components

### Public Setup

- [Runtime Flags](https://github.com/steinann/roavatar-renderer/blob/master/src/code/misc/flags.ts): `src/code/misc/flags.ts`
- [Renderer Setup](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderer.ts): `src/code/render/renderer.ts`

### Avatar Data

- [Avatar API](https://github.com/steinann/roavatar-renderer/blob/master/src/code/api.ts): `src/code/api.ts`
- [Outfit Model](https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/outfitModel.ts): `src/code/avatar/outfitModel.ts`
- [Outfit Data](https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/outfit.ts): `src/code/avatar/outfit.ts`
- [Avatar Assets](https://github.com/steinann/roavatar-renderer/blob/master/src/code/avatar/asset.ts): `src/code/avatar/asset.ts`

### Roblox Model

- [RBX Parsing](https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/rbx.ts): `src/code/rblx/rbx.ts`
- [RoAvatar Data](https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/roavatar-data-parser.ts): `src/code/rblx/roavatar-data-parser.ts`
- [Humanoid Description](https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/instance/HumanoidDescription.ts): `src/code/rblx/instance/HumanoidDescription.ts`
- [Instance Wrappers](https://github.com/steinann/roavatar-renderer/blob/master/src/code/rblx/instance/InstanceWrapper.ts): `src/code/rblx/instance/InstanceWrapper.ts`
- [Mesh Deformation](https://github.com/steinann/roavatar-renderer/blob/master/src/code/mesh/mesh-deform.ts): `src/code/mesh/mesh-deform.ts`
- [Worker Pool](https://github.com/steinann/roavatar-renderer/blob/master/src/code/misc/worker-pool.ts): `src/code/misc/worker-pool.ts`

### Rendering

- [Outfit Renderer](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/outfitRenderer.ts): `src/code/render/outfitRenderer.ts`
- [Renderer Scene](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/rendererScene.ts): `src/code/render/rendererScene.ts`
- [Render Descriptions](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderDesc.ts): `src/code/render/renderDesc.ts`
- [Texture Manager](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/textureManager.ts): `src/code/render/textureManager.ts`
- [Three.js Renderer](https://github.com/steinann/roavatar-renderer/blob/master/src/code/render/renderer.ts): `src/code/render/renderer.ts`

### Thumbnails

- [Thumbnail Generator](https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/generator.ts): `src/code/thumbnails/generator.ts`
- [Thumbnail Scene](https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/thumbnailScene.ts): `src/code/thumbnails/thumbnailScene.ts`
- [Camera Presets](https://github.com/steinann/roavatar-renderer/blob/master/src/code/thumbnails/cameraPresetsUtility.ts): `src/code/thumbnails/cameraPresetsUtility.ts`

### Other components

- **Application**
- **Asset Service**
- **Generic API**

## Connections

- Application → Runtime Flags: configures
- Application → Renderer Setup: initializes
- Renderer Setup → Runtime Flags: reads settings
- Application → Avatar API: requests avatar
- Avatar API → Outfit Model: returns model
- Application → Outfit Renderer: creates renderer
- Outfit Renderer → Outfit Model: renders model
- Outfit Model → Outfit Data: holds outfit
- Outfit Data → Avatar Assets: contains assets
- Avatar Assets → Asset Service: loads assets
- Outfit Data → Humanoid Description: converts outfit
- RBX Parsing → Instance Wrappers: uses wrappers
- RoAvatar Data → RBX Parsing: parses instances
- Humanoid Description → Outfit Data: reads outfit data
- Humanoid Description → RBX Parsing: builds instances
- Mesh Deformation → Worker Pool: dispatches work
- Outfit Renderer → Renderer Scene: renders into
- Renderer Scene → Render Descriptions: uses descriptions
- Render Descriptions → Texture Manager: loads textures
- Texture Manager → Generic API: loads images
- Renderer Setup → Three.js Renderer: sets up
- Thumbnail Generator → Thumbnail Scene: creates scene
- Thumbnail Generator → Camera Presets: sets camera
- Camera Presets → Thumbnail Scene: frames avatar
