# compilecraftworks/skyrimfittingsystem architecture

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

## Overview

Skyrim Fitting System is an SKSE mod for managing player-facing armor appearances separately from gameplay equipment. The player browses gear, outfits, and kits, previews or registers appearances, and edits actor-local defaults, conditions, visibility, and dye in the native menu and workbench. Native skinning hooks render the selected appearance while preserving real equipped gear; save/load persists overrides. The README documents additional integrations and capabilities; where their implementation was not sampled, the graph shows only documented relationships and startup calls visible in src/main.cpp.

Main entry points: [`src/main.cpp`](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/main.cpp) (Plugin startup), [`src/VariantWorkbench.cpp`](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/VariantWorkbench.cpp) (Variant workbench), [`src/ui/Menu.cpp`](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ui/Menu.cpp) (Native menu), [`src/native/ArmorSkinning.cpp`](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/ArmorSkinning.cpp) (Armor skinning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Player interface"]
  node_menu["Native menu<br/>[Menu.cpp]"]
  node_menuhost["Menu host<br/>[MenuHost.cpp]"]
  node_input["Input manager<br/>[InputManager.cpp]"]
end

subgraph group_appearance["Appearance management"]
  node_catalog["Equipment catalog"]
  node_workbench["Variant workbench"]
  node_visibility["Appearance visibility"]
  node_dye["Fitting dye<br/>[FittingDye.cpp]"]
end

subgraph group_conditions["Conditions and kits"]
  node_conditions["Condition engine"]
  node_generator["Kit generator<br/>[Generator.cpp]"]
  node_kitui["Kit interface<br/>[UI.cpp]"]
end

subgraph group_runtime["Runtime display"]
  node_hooks["Runtime hooks<br/>[Hooks.cpp]"]
  node_skinning["Armor skinning<br/>[ArmorSkinning.cpp]"]
  node_rendered["Rendered outfit state"]
  node_entry["Plugin startup<br/>[main.cpp]"]
end

subgraph group_integration["Persistence and integrations"]
  node_serialization["Save and load<br/>[Serialization.cpp]"]
  node_papyrus["Papyrus interface<br/>[FittingPapyrus.cpp]"]
  node_sos["SOS storage sync<br/>[SOSStorageSync.cpp]"]
  node_tokens["Virtual worn tokens"]
  node_racemenu["RaceMenu sync"]
  node_api["Rendered outfit API"]
end

node_player(("Player"))
node_skyrim(("Skyrim runtime"))

node_player -->|"manages appearances"| node_menu
node_player -->|"provides controls"| node_input
node_input -->|"routes input"| node_menuhost
node_menuhost -->|"hosts menu"| node_menu
node_menu -->|"browses gear"| node_catalog
node_menu -->|"edits variants"| node_workbench
node_menu -->|"opens generator"| node_kitui
node_catalog -->|"registers appearances"| node_workbench
node_workbench -->|"edits conditions"| node_conditions
node_workbench -->|"sets visibility"| node_visibility
node_workbench -->|"opens dye"| node_dye
node_kitui -->|"configures generation"| node_generator
node_generator -->|"creates kits"| node_catalog
node_skyrim -->|"dispatches events"| node_hooks
node_hooks -->|"installs hooks"| node_skinning
node_skinning -->|"updates display state"| node_rendered
node_skinning -->|"renders appearance"| node_skyrim
node_entry -->|"installs hooks"| node_hooks
node_entry -->|"initializes skinning"| node_skinning
node_entry -->|"registers save callbacks"| node_serialization
node_serialization -->|"restores overrides"| node_workbench
node_entry -->|"requests sync"| node_sos
node_sos -.->|"reads Papyrus storage"| node_skyrim
node_entry -->|"initializes tokens"| node_tokens
node_entry -->|"initializes morph sync"| node_racemenu
node_entry -->|"registers Papyrus"| node_papyrus
node_api -->|"queries state"| node_rendered
node_player -.->|"external consumers"| node_api

click node_menu "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ui/Menu.cpp"
click node_menuhost "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ui/MenuHost.cpp"
click node_input "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/InputManager.cpp"
click node_catalog "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/EquipmentCatalog.cpp"
click node_workbench "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/VariantWorkbench.cpp"
click node_visibility "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/VariantWorkbench.Visibility.cpp"
click node_dye "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/FittingDye.cpp"
click node_conditions "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ConditionMaterializer.cpp"
click node_generator "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/kit_generator/Generator.cpp"
click node_kitui "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/kit_generator/UI.cpp"
click node_hooks "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/Hooks.cpp"
click node_skinning "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/ArmorSkinning.cpp"
click node_rendered "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/api/RenderedOutfitState.h"
click node_serialization "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/Serialization.cpp"
click node_papyrus "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/papyrus/FittingPapyrus.cpp"
click node_sos "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/SOSStorageSync.cpp"
click node_tokens "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/features/virtual_tokens/VirtualWornTokens.cpp"
click node_racemenu "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/RaceMenuBodyMorph.cpp"
click node_api "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/api/SkyrimFittingSystemAPI.cpp"
click node_entry "https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/main.cpp"

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_menu,node_menuhost,node_input toneBlue
class node_catalog,node_workbench,node_visibility,node_dye toneAmber
class node_conditions,node_generator,node_kitui toneMint
class node_hooks,node_skinning,node_rendered,node_entry toneRose
class node_serialization,node_papyrus,node_sos,node_tokens,node_racemenu,node_api,node_player,node_skyrim toneIndigo
```

## Components

### Player interface

- [Native menu](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ui/Menu.cpp): `src/ui/Menu.cpp`
- [Menu host](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ui/MenuHost.cpp): `src/ui/MenuHost.cpp`
- [Input manager](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/InputManager.cpp): `src/InputManager.cpp`

### Appearance management

- [Equipment catalog](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/EquipmentCatalog.cpp): `src/EquipmentCatalog.cpp`
- [Variant workbench](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/VariantWorkbench.cpp): `src/VariantWorkbench.cpp`
- [Appearance visibility](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/VariantWorkbench.Visibility.cpp): `src/VariantWorkbench.Visibility.cpp`
- [Fitting dye](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/FittingDye.cpp): `src/native/FittingDye.cpp`

### Conditions and kits

- [Condition engine](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/ConditionMaterializer.cpp): `src/ConditionMaterializer.cpp`
- [Kit generator](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/kit_generator/Generator.cpp): `src/kit_generator/Generator.cpp`
- [Kit interface](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/kit_generator/UI.cpp): `src/kit_generator/UI.cpp`

### Runtime display

- [Runtime hooks](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/Hooks.cpp): `src/Hooks.cpp`
- [Armor skinning](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/ArmorSkinning.cpp): `src/native/ArmorSkinning.cpp`
- [Rendered outfit state](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/api/RenderedOutfitState.h): `src/api/RenderedOutfitState.h`
- [Plugin startup](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/main.cpp): `src/main.cpp`

### Persistence and integrations

- [Save and load](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/Serialization.cpp): `src/Serialization.cpp`
- [Papyrus interface](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/papyrus/FittingPapyrus.cpp): `src/papyrus/FittingPapyrus.cpp`
- [SOS storage sync](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/SOSStorageSync.cpp): `src/native/SOSStorageSync.cpp`
- [Virtual worn tokens](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/features/virtual_tokens/VirtualWornTokens.cpp): `src/features/virtual_tokens/VirtualWornTokens.cpp`
- [RaceMenu sync](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/native/RaceMenuBodyMorph.cpp): `src/native/RaceMenuBodyMorph.cpp`
- [Rendered outfit API](https://github.com/compilecraftworks/skyrimfittingsystem/blob/main/src/api/SkyrimFittingSystemAPI.cpp): `src/api/SkyrimFittingSystemAPI.cpp`

### Other components

- **Player**
- **Skyrim runtime**

## Connections

- Player → Native menu: manages appearances
- Player → Input manager: provides controls
- Input manager → Menu host: routes input
- Menu host → Native menu: hosts menu
- Native menu → Equipment catalog: browses gear
- Native menu → Variant workbench: edits variants
- Native menu → Kit interface: opens generator
- Equipment catalog → Variant workbench: registers appearances
- Variant workbench → Condition engine: edits conditions
- Variant workbench → Appearance visibility: sets visibility
- Variant workbench → Fitting dye: opens dye
- Kit interface → Kit generator: configures generation
- Kit generator → Equipment catalog: creates kits
- Skyrim runtime → Runtime hooks: dispatches events
- Runtime hooks → Armor skinning: installs hooks
- Armor skinning → Rendered outfit state: updates display state
- Armor skinning → Skyrim runtime: renders appearance
- Plugin startup → Runtime hooks: installs hooks
- Plugin startup → Armor skinning: initializes skinning
- Plugin startup → Save and load: registers save callbacks
- Save and load → Variant workbench: restores overrides
- Plugin startup → SOS storage sync: requests sync
- SOS storage sync → Skyrim runtime: reads Papyrus storage
- Plugin startup → Virtual worn tokens: initializes tokens
- Plugin startup → RaceMenu sync: initializes morph sync
- Plugin startup → Papyrus interface: registers Papyrus
- Rendered outfit API → Rendered outfit state: queries state
- Player → Rendered outfit API: external consumers
