# cobbfan9/asset-studio-web architecture

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

- Interactive diagram: https://gitdiagram.com/cobbfan9/asset-studio-web
- Repository: https://github.com/cobbfan9/asset-studio-web

## Overview

AssetStudioWeb is a browser-only TypeScript library for reading Unity asset data and exporting textures. Its principal workflow is to pass file bytes to AssetsManager, identify the file type, unpack bundles when needed, parse serialized assets, construct typed objects, and export texture image data. The README also identifies a live demo but gives no workflow details. The graph reflects the sampled calls and SOURCE INDEX references; unsampled modules are represented only where their role is clear from the tree or README.

Main entry points: [`src/AssetsManager.ts`](https://github.com/cobbfan9/asset-studio-web/blob/main/src/AssetsManager.ts) (Assets manager), [`src/Util/ObjectReader.ts`](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/ObjectReader.ts) (Object reader), [`src/Exporters/Texture2D.ts`](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Exporters/Texture2D.ts) (Texture exporter), [`src/Files/Bundle/BundleFile.ts`](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/Bundle/BundleFile.ts) (Bundle reader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Input and containers"]
  node_manager["Assets manager<br/>[AssetsManager.ts]"]
  node_filetype["File detection<br/>[FileReader.ts]"]
  node_bundle["Bundle reader<br/>[BundleFile.ts]"]
  node_stream["Bundle streams<br/>[StreamFile.ts]"]
  node_decomp["Decompression dispatch<br/>[Decompression.ts]"]
  node_lz4["LZ4 codec<br/>[lz4.js]"]
  node_lzma["LZMA codec<br/>[lzma_main.ts]"]
end

subgraph group_parsing["Asset parsing"]
  node_serialized["Serialized files<br/>[SerializedFile.ts]"]
  node_objreader["Object reader<br/>[ObjectReader.ts]"]
  node_object["Typed Unity objects<br/>[Object.ts]"]
  node_classids["Class identifiers<br/>[ClassIDType.ts]"]
end

subgraph group_texture["Texture export"]
  node_texturemodel["Texture asset model<br/>[Texture2D.ts]"]
  node_resource["Texture resource access<br/>[ResourceReader.ts]"]
  node_textureexport["Texture exporter<br/>[Texture2D.ts]"]
  node_decoder["Image decoders<br/>[decode.ts]"]
  node_formats["Texture formats<br/>[TextureFormat.ts]"]
end

subgraph group_internals["Shared runtime"]
  node_versions["Unity versions<br/>[UnityVersions.ts]"]
  node_binary["Binary reader"]
end

node_user(("Browser caller"))

node_user -.->|"provides bytes"| node_manager
node_manager -->|"classifies input"| node_filetype
node_manager -->|"opens bundle"| node_bundle
node_manager -->|"parses assets"| node_serialized
node_manager -->|"creates readers"| node_objreader
node_manager -->|"constructs textures"| node_texturemodel
node_manager -->|"exports textures"| node_textureexport
node_filetype -->|"reads headers"| node_binary
node_bundle -->|"decompresses blocks"| node_decomp
node_bundle -->|"creates streams"| node_stream
node_decomp -->|"dispatches codec"| node_lz4
node_decomp -->|"dispatches codec"| node_lzma
node_serialized -->|"reads serialized data"| node_binary
node_serialized -->|"provides object metadata"| node_objreader
node_objreader -->|"extends reader"| node_binary
node_objreader -->|"maps object types"| node_classids
node_objreader -->|"uses version data"| node_versions
node_object -->|"wraps object data"| node_objreader
node_texturemodel -->|"reads image data"| node_resource
node_textureexport -->|"reads texture asset"| node_texturemodel
node_textureexport -->|"decodes image blocks"| node_decoder
node_textureexport -->|"handles formats"| node_formats

click node_manager "https://github.com/cobbfan9/asset-studio-web/blob/main/src/AssetsManager.ts"
click node_filetype "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/FileReader.ts"
click node_bundle "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/Bundle/BundleFile.ts"
click node_stream "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/StreamFile.ts"
click node_decomp "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Decompression.ts"
click node_lz4 "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Lz4/lz4.js"
click node_lzma "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Lzma/lzma_main.ts"
click node_serialized "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/Serialized/SerializedFile.ts"
click node_objreader "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/ObjectReader.ts"
click node_object "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Classes/Object.ts"
click node_classids "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Enums/ClassIDType.ts"
click node_versions "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/UnityVersions.ts"
click node_binary "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/EndianBinaryReader.ts"
click node_texturemodel "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Classes/Texture2D.ts"
click node_resource "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/ResourceReader.ts"
click node_textureexport "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Exporters/Texture2D.ts"
click node_decoder "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Exporters/ImageDecoders/decode.ts"
click node_formats "https://github.com/cobbfan9/asset-studio-web/blob/main/src/Enums/TextureFormat.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_manager,node_filetype,node_bundle,node_stream,node_decomp,node_lz4,node_lzma,node_user toneBlue
class node_serialized,node_objreader,node_object,node_classids toneAmber
class node_texturemodel,node_resource,node_textureexport,node_decoder,node_formats toneMint
class node_versions,node_binary toneRose
```

## Components

### Input and containers

- [Assets manager](https://github.com/cobbfan9/asset-studio-web/blob/main/src/AssetsManager.ts): `src/AssetsManager.ts`
- [File detection](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/FileReader.ts): `src/Util/FileReader.ts`
- [Bundle reader](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/Bundle/BundleFile.ts): `src/Files/Bundle/BundleFile.ts`
- [Bundle streams](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/StreamFile.ts): `src/Files/StreamFile.ts`
- [Decompression dispatch](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Decompression.ts): `src/Decompression/Decompression.ts`
- [LZ4 codec](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Lz4/lz4.js): `src/Decompression/Lz4/lz4.js`
- [LZMA codec](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Decompression/Lzma/lzma_main.ts): `src/Decompression/Lzma/lzma_main.ts`

### Asset parsing

- [Serialized files](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Files/Serialized/SerializedFile.ts): `src/Files/Serialized/SerializedFile.ts`
- [Object reader](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/ObjectReader.ts): `src/Util/ObjectReader.ts`
- [Typed Unity objects](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Classes/Object.ts): `src/Classes/Object.ts`
- [Class identifiers](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Enums/ClassIDType.ts): `src/Enums/ClassIDType.ts`

### Texture export

- [Texture asset model](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Classes/Texture2D.ts): `src/Classes/Texture2D.ts`
- [Texture resource access](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/ResourceReader.ts): `src/Util/ResourceReader.ts`
- [Texture exporter](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Exporters/Texture2D.ts): `src/Exporters/Texture2D.ts`
- [Image decoders](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Exporters/ImageDecoders/decode.ts): `src/Exporters/ImageDecoders/decode.ts`
- [Texture formats](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Enums/TextureFormat.ts): `src/Enums/TextureFormat.ts`

### Shared runtime

- [Unity versions](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/UnityVersions.ts): `src/Util/UnityVersions.ts`
- [Binary reader](https://github.com/cobbfan9/asset-studio-web/blob/main/src/Util/EndianBinaryReader.ts): `src/Util/EndianBinaryReader.ts`

### Other components

- **Browser caller**

## Connections

- Browser caller → Assets manager: provides bytes
- Assets manager → File detection: classifies input (evidence: `src/AssetsManager.ts`)
- Assets manager → Bundle reader: opens bundle (evidence: `src/AssetsManager.ts`)
- Assets manager → Serialized files: parses assets (evidence: `src/AssetsManager.ts`)
- Assets manager → Object reader: creates readers (evidence: `src/AssetsManager.ts`)
- Assets manager → Texture asset model: constructs textures (evidence: `src/AssetsManager.ts`)
- Assets manager → Texture exporter: exports textures (evidence: `src/AssetsManager.ts`)
- File detection → Binary reader: reads headers (evidence: `src/Util/FileReader.ts`)
- Bundle reader → Decompression dispatch: decompresses blocks (evidence: `src/Files/Bundle/BundleFile.ts`)
- Bundle reader → Bundle streams: creates streams (evidence: `src/Files/Bundle/BundleFile.ts`)
- Decompression dispatch → LZ4 codec: dispatches codec (evidence: `src/Decompression/Decompression.ts`)
- Decompression dispatch → LZMA codec: dispatches codec (evidence: `src/Decompression/Decompression.ts`)
- Serialized files → Binary reader: reads serialized data (evidence: `src/Files/Serialized/SerializedFile.ts`)
- Serialized files → Object reader: provides object metadata (evidence: `src/Util/ObjectReader.ts`)
- Object reader → Binary reader: extends reader (evidence: `src/Util/ObjectReader.ts`)
- Object reader → Class identifiers: maps object types (evidence: `src/Util/ObjectReader.ts`)
- Object reader → Unity versions: uses version data (evidence: `src/Util/ObjectReader.ts`)
- Typed Unity objects → Object reader: wraps object data (evidence: `src/Classes/Object.ts`)
- Texture asset model → Texture resource access: reads image data (evidence: `src/Classes/Texture2D.ts`)
- Texture exporter → Texture asset model: reads texture asset (evidence: `src/Exporters/Texture2D.ts`)
- Texture exporter → Image decoders: decodes image blocks (evidence: `src/Exporters/Texture2D.ts`)
- Texture exporter → Texture formats: handles formats (evidence: `src/Exporters/Texture2D.ts`)
