# h4lfheart/ueformat architecture

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

- Interactive diagram: https://gitdiagram.com/h4lfheart/ueformat
- Repository: https://github.com/h4lfheart/ueformat

## Overview

UEFormat is an intermediate asset-exchange format for moving extracted Unreal assets into tools such as Blender and Unreal Engine. The visible Blender workflow reads a file, parses its header and payload, dispatches modern or legacy decoding, converts coordinate space, then creates model, animation, or pose data. The Unreal plugin provides a second format-reading/import path, while external exporters are documented as producers. The source index and excerpts support the Blender orchestration and archive-reader links; several Unreal runtime links are not shown, so they are left unasserted.

Main entry points: [`plugins/blender/io_scene_ueformat/importer/import_context.py`](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/import_context.py) (Import Orchestration), [`plugins/blender/io_scene_ueformat/options.py`](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/options.py) (Import Options), [`plugins/blender/io_scene_ueformat/importer/archive/reader.py`](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/archive/reader.py) (Archive Reader), [`plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp`](https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp) (Unreal Archive Reader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_blender["Blender Importer"]
  node_blender_entry["Import Orchestration<br/>[import_context.py]"]
  node_space_conversion["Space Conversion<br/>[space.py]"]
  node_model_creation["Model Creation<br/>[model.py]"]
  node_animation_creation["Animation Creation<br/>[anim.py]"]
  node_pose_creation["Pose Creation<br/>[pose.py]"]
  node_skeleton_creation["Skeleton Creation<br/>[skeleton.py]"]
  node_blender_options["Import Options<br/>[options.py]"]
  node_blender_settings["Import Settings<br/>[settings.py]"]
  node_logging["Import Logging<br/>[logging.py]"]
  node_scene_types["Blender Types<br/>[typing.py]"]
end

subgraph group_format["Format Parsing"]
  node_archive_reader["Archive Reader<br/>[reader.py]"]
  node_modern_parser["Modern Decoder"]
  node_legacy_parser["Legacy Decoder"]
  node_versioning["Format Versions<br/>[version.py]"]
end

subgraph group_unreal["Unreal Plugin"]
  node_unreal_reader["Unreal Archive Reader<br/>[UEFormatReader.cpp]"]
  node_unreal_model["Unreal Model Import"]
  node_unreal_anim["Unreal Animation Import<br/>[UEFAnimReader.cpp]"]
  node_zstd["Zstandard Decoder<br/>[zstd_decompress.c]"]
end

subgraph group_shared["Shared Types"]
  node_model_dto["Model Data<br/>[model.py]"]
  node_animation_dto["Animation Data<br/>[anim.py]"]
  node_skeleton_dto["Skeleton Data<br/>[skeleton.py]"]
  node_pose_dto["Pose Data<br/>[pose.py]"]
end

node_exporter(("Asset Exporter"))
node_blender_user(("Blender User"))
node_ueformat_file["UEFormat File"]

node_exporter -.->|"produces"| node_ueformat_file
node_blender_user -.->|"starts import"| node_blender_entry
node_ueformat_file -.->|"provides bytes"| node_blender_entry
node_blender_entry -->|"parses header"| node_archive_reader
node_blender_entry -->|"dispatches modern"| node_modern_parser
node_blender_entry -->|"dispatches legacy"| node_legacy_parser
node_blender_entry -->|"converts space"| node_space_conversion
node_blender_entry -->|"creates model"| node_model_creation
node_blender_entry -->|"creates animation"| node_animation_creation
node_blender_entry -->|"creates pose"| node_pose_creation
node_blender_entry -->|"uses data"| node_model_dto
node_blender_entry -->|"uses data"| node_animation_dto
node_blender_entry -->|"uses data"| node_pose_dto
node_archive_reader -->|"uses versions"| node_versioning
node_blender_entry -->|"uses options"| node_blender_options
node_blender_entry -->|"logs progress"| node_logging
node_blender_options -->|"reads settings"| node_blender_settings
node_skeleton_creation -->|"builds from"| node_skeleton_dto
node_unreal_reader -->|"decompresses with"| node_zstd
node_ueformat_file -.->|"read by"| node_unreal_reader

click node_blender_entry "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/import_context.py"
click node_archive_reader "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/archive/reader.py"
click node_modern_parser "https://github.com/h4lfheart/ueformat/tree/main/plugins/blender/io_scene_ueformat/importer/deserialize"
click node_legacy_parser "https://github.com/h4lfheart/ueformat/tree/main/plugins/blender/io_scene_ueformat/importer/legacy"
click node_model_dto "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/model.py"
click node_animation_dto "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/anim.py"
click node_skeleton_dto "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/skeleton.py"
click node_pose_dto "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/pose.py"
click node_space_conversion "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/space.py"
click node_model_creation "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/model.py"
click node_animation_creation "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/anim.py"
click node_pose_creation "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/pose.py"
click node_skeleton_creation "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/skeleton.py"
click node_blender_options "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/options.py"
click node_blender_settings "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/op/settings.py"
click node_versioning "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/version.py"
click node_logging "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/logging.py"
click node_scene_types "https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/typing.py"
click node_unreal_reader "https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp"
click node_unreal_model "https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Factories/UEFModelFactory.cpp"
click node_unreal_anim "https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Readers/UEFAnimReader.cpp"
click node_zstd "https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/ThirdParty/zstd/decompress/zstd_decompress.c"

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_blender_entry,node_space_conversion,node_model_creation,node_animation_creation,node_pose_creation,node_skeleton_creation,node_blender_options,node_blender_settings,node_logging,node_scene_types,node_blender_user toneBlue
class node_archive_reader,node_modern_parser,node_legacy_parser,node_versioning toneAmber
class node_unreal_reader,node_unreal_model,node_unreal_anim,node_zstd toneMint
class node_model_dto,node_animation_dto,node_skeleton_dto,node_pose_dto toneRose
class node_exporter,node_ueformat_file toneIndigo
```

## Components

### Blender Importer

- [Import Orchestration](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/import_context.py): `plugins/blender/io_scene_ueformat/importer/import_context.py`
- [Space Conversion](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/space.py): `plugins/blender/io_scene_ueformat/importer/create/space.py`
- [Model Creation](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/model.py): `plugins/blender/io_scene_ueformat/importer/create/model.py`
- [Animation Creation](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/anim.py): `plugins/blender/io_scene_ueformat/importer/create/anim.py`
- [Pose Creation](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/pose.py): `plugins/blender/io_scene_ueformat/importer/create/pose.py`
- [Skeleton Creation](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/create/skeleton.py): `plugins/blender/io_scene_ueformat/importer/create/skeleton.py`
- [Import Options](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/options.py): `plugins/blender/io_scene_ueformat/options.py`
- [Import Settings](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/op/settings.py): `plugins/blender/io_scene_ueformat/op/settings.py`
- [Import Logging](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/logging.py): `plugins/blender/io_scene_ueformat/logging.py`
- [Blender Types](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/typing.py): `plugins/blender/io_scene_ueformat/typing.py`

### Format Parsing

- [Archive Reader](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/archive/reader.py): `plugins/blender/io_scene_ueformat/importer/archive/reader.py`
- [Modern Decoder](https://github.com/h4lfheart/ueformat/tree/main/plugins/blender/io_scene_ueformat/importer/deserialize): `plugins/blender/io_scene_ueformat/importer/deserialize`
- [Legacy Decoder](https://github.com/h4lfheart/ueformat/tree/main/plugins/blender/io_scene_ueformat/importer/legacy): `plugins/blender/io_scene_ueformat/importer/legacy`
- [Format Versions](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/version.py): `plugins/blender/io_scene_ueformat/importer/version.py`

### Unreal Plugin

- [Unreal Archive Reader](https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp): `plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp`
- [Unreal Model Import](https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Factories/UEFModelFactory.cpp): `plugins/unreal/UEFormat/Source/UEFormat/Private/Factories/UEFModelFactory.cpp`
- [Unreal Animation Import](https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/Private/Readers/UEFAnimReader.cpp): `plugins/unreal/UEFormat/Source/UEFormat/Private/Readers/UEFAnimReader.cpp`
- [Zstandard Decoder](https://github.com/h4lfheart/ueformat/blob/main/plugins/unreal/UEFormat/Source/UEFormat/ThirdParty/zstd/decompress/zstd_decompress.c): `plugins/unreal/UEFormat/Source/UEFormat/ThirdParty/zstd/decompress/zstd_decompress.c`

### Shared Types

- [Model Data](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/model.py): `plugins/blender/io_scene_ueformat/importer/dto/model.py`
- [Animation Data](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/anim.py): `plugins/blender/io_scene_ueformat/importer/dto/anim.py`
- [Skeleton Data](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/skeleton.py): `plugins/blender/io_scene_ueformat/importer/dto/skeleton.py`
- [Pose Data](https://github.com/h4lfheart/ueformat/blob/main/plugins/blender/io_scene_ueformat/importer/dto/pose.py): `plugins/blender/io_scene_ueformat/importer/dto/pose.py`

### Other components

- **Asset Exporter**
- **Blender User**
- **UEFormat File**

## Connections

- Asset Exporter → UEFormat File: produces
- Blender User → Import Orchestration: starts import
- UEFormat File → Import Orchestration: provides bytes
- Import Orchestration → Archive Reader: parses header (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Modern Decoder: dispatches modern (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Legacy Decoder: dispatches legacy (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Space Conversion: converts space (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Model Creation: creates model (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Animation Creation: creates animation (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Pose Creation: creates pose (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Model Data: uses data (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Animation Data: uses data (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Pose Data: uses data (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Archive Reader → Format Versions: uses versions (evidence: `plugins/blender/io_scene_ueformat/importer/archive/reader.py`)
- Import Orchestration → Import Options: uses options (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Orchestration → Import Logging: logs progress (evidence: `plugins/blender/io_scene_ueformat/importer/import_context.py`)
- Import Options → Import Settings: reads settings (evidence: `plugins/blender/io_scene_ueformat/options.py`)
- Skeleton Creation → Skeleton Data: builds from (evidence: `plugins/blender/io_scene_ueformat/importer/create/skeleton.py`)
- Unreal Archive Reader → Zstandard Decoder: decompresses with (evidence: `plugins/unreal/UEFormat/Source/UEFormat/Private/Archive/UEFormatReader.cpp`)
- UEFormat File → Unreal Archive Reader: read by
