# vonnekyia/heroic-map-renderer architecture

> Architecture diagram of the GitHub repository vonnekyia/heroic-map-renderer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vonnekyia/heroic-map-renderer
- Repository: https://github.com/vonnekyia/heroic-map-renderer

## Overview

Heroic Map Renderer turns Minecraft Java worlds and resource packs into isometric WebP tile pyramids, then displays them in a Leaflet frontend. The main workflow is CLI configuration, world and asset loading, sprite preparation, tile rendering and pyramid generation, followed by browser tile loading. The frontend also supports block picking from renderer-produced height data. The README documents GPU/CPU rendering, biome and lighting fidelity, resume, native zoom levels and live viewing; sampled source confirms only selected wiring, so uncertain internal calls are omitted.

Main entry points: [`renderer/src/cli.rs`](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/cli.rs) (CLI orchestration), [`web/src/main.ts`](https://github.com/vonnekyia/heroic-map-renderer/blob/master/web/src/main.ts) (Leaflet application), [`renderer/src/world/mod.rs`](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/mod.rs) (World reader), [`renderer/src/assets/pack.rs`](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/assets/pack.rs) (Resource pack)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Inputs and Assets"]
  node_cli["CLI orchestration<br/>[cli.rs]"]
  node_world["World reader<br/>[mod.rs]"]
  node_chunks["Chunk decoding<br/>[chunk.rs]"]
  node_regions["Region reading<br/>[region.rs]"]
  node_assets["Resource pack<br/>[pack.rs]"]
  node_models["Models and states"]
  node_colors["Biome colors<br/>[colors.rs]"]
end

subgraph group_engine["Rendering Engine"]
  node_sprites["Sprite preparation<br/>[sprites.rs]"]
  node_metatile["Metatile rendering<br/>[metatile.rs]"]
  node_rendercore["Projection and raster"]
  node_gpu["GPU renderer<br/>[gpu.rs]"]
end

subgraph group_output["Tiles and Pyramids"]
  node_tilepipeline["Tile generation<br/>[tiles.rs]"]
  node_pyramid["Zoom pyramid<br/>[pyramid.rs]"]
  node_tilefiles["WebP tiles"]
  node_mapinfo["Map metadata"]
  node_heightdata["Height data"]
end

subgraph group_frontend["Map Frontend"]
  node_webapp["Leaflet application<br/>[main.ts]"]
  node_picker["Block picking<br/>[pick.ts]"]
end

node_operator(("Renderer operator"))
node_worldfiles["Minecraft world"]
node_assetfiles["Pack and game data"]
node_browser(("Map viewer"))

node_operator -->|"configures render"| node_cli
node_worldfiles -->|"supplies chunks"| node_world
node_assetfiles -->|"supplies assets"| node_assets
node_cli -->|"opens world"| node_world
node_world -->|"reads regions"| node_regions
node_regions -->|"decodes chunks"| node_chunks
node_cli -->|"loads packs"| node_assets
node_assets -->|"resolves assets"| node_models
node_cli -->|"prepares sprites"| node_sprites
node_cli -->|"renders tiles"| node_tilepipeline
node_sprites -->|"provides sprites"| node_metatile
node_metatile -->|"draws metatiles"| node_rendercore
node_gpu -.->|"accelerates drawing"| node_rendercore
node_tilepipeline -->|"builds zooms"| node_pyramid
node_pyramid -->|"writes tiles"| node_tilefiles
node_cli -->|"writes metadata"| node_mapinfo
node_cli -->|"writes heights"| node_heightdata
node_browser -->|"opens map"| node_webapp
node_webapp -->|"loads tiles"| node_tilefiles
node_webapp -->|"loads metadata"| node_mapinfo
node_webapp -->|"loads heights"| node_heightdata
node_webapp -->|"requests pick"| node_picker

click node_cli "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/cli.rs"
click node_world "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/mod.rs"
click node_chunks "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/chunk.rs"
click node_regions "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/region.rs"
click node_assets "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/assets/pack.rs"
click node_models "https://github.com/vonnekyia/heroic-map-renderer/tree/master/renderer/src/assets"
click node_colors "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/assets/colors.rs"
click node_sprites "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/sprites.rs"
click node_metatile "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/metatile.rs"
click node_rendercore "https://github.com/vonnekyia/heroic-map-renderer/tree/master/renderer/src/render"
click node_gpu "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/gpu.rs"
click node_tilepipeline "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/tiles.rs"
click node_pyramid "https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/pyramid.rs"
click node_webapp "https://github.com/vonnekyia/heroic-map-renderer/blob/master/web/src/main.ts"
click node_picker "https://github.com/vonnekyia/heroic-map-renderer/blob/master/web/src/pick.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_cli,node_world,node_chunks,node_regions,node_assets,node_models,node_colors,node_browser toneBlue
class node_sprites,node_metatile,node_rendercore,node_gpu toneAmber
class node_tilepipeline,node_pyramid,node_tilefiles,node_mapinfo,node_heightdata toneMint
class node_webapp,node_picker toneRose
class node_operator,node_worldfiles,node_assetfiles toneIndigo
```

## Components

### Inputs and Assets

- [CLI orchestration](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/cli.rs): `renderer/src/cli.rs`
- [World reader](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/mod.rs): `renderer/src/world/mod.rs`
- [Chunk decoding](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/chunk.rs): `renderer/src/world/chunk.rs`
- [Region reading](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/world/region.rs): `renderer/src/world/region.rs`
- [Resource pack](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/assets/pack.rs): `renderer/src/assets/pack.rs`
- [Models and states](https://github.com/vonnekyia/heroic-map-renderer/tree/master/renderer/src/assets): `renderer/src/assets`
- [Biome colors](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/assets/colors.rs): `renderer/src/assets/colors.rs`

### Rendering Engine

- [Sprite preparation](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/sprites.rs): `renderer/src/render/sprites.rs`
- [Metatile rendering](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/metatile.rs): `renderer/src/render/metatile.rs`
- [Projection and raster](https://github.com/vonnekyia/heroic-map-renderer/tree/master/renderer/src/render): `renderer/src/render`
- [GPU renderer](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/gpu.rs): `renderer/src/render/gpu.rs`

### Tiles and Pyramids

- [Tile generation](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/tiles.rs): `renderer/src/render/tiles.rs`
- [Zoom pyramid](https://github.com/vonnekyia/heroic-map-renderer/blob/master/renderer/src/render/pyramid.rs): `renderer/src/render/pyramid.rs`
- **WebP tiles**
- **Map metadata**
- **Height data**

### Map Frontend

- [Leaflet application](https://github.com/vonnekyia/heroic-map-renderer/blob/master/web/src/main.ts): `web/src/main.ts`
- [Block picking](https://github.com/vonnekyia/heroic-map-renderer/blob/master/web/src/pick.ts): `web/src/pick.ts`

### Other components

- **Renderer operator**
- **Minecraft world**
- **Pack and game data**
- **Map viewer**

## Connections

- Renderer operator → CLI orchestration: configures render
- Minecraft world → World reader: supplies chunks
- Pack and game data → Resource pack: supplies assets
- CLI orchestration → World reader: opens world
- World reader → Region reading: reads regions
- Region reading → Chunk decoding: decodes chunks
- CLI orchestration → Resource pack: loads packs
- Resource pack → Models and states: resolves assets
- CLI orchestration → Sprite preparation: prepares sprites
- CLI orchestration → Tile generation: renders tiles
- Sprite preparation → Metatile rendering: provides sprites
- Metatile rendering → Projection and raster: draws metatiles
- GPU renderer → Projection and raster: accelerates drawing
- Tile generation → Zoom pyramid: builds zooms
- Zoom pyramid → WebP tiles: writes tiles
- CLI orchestration → Map metadata: writes metadata
- CLI orchestration → Height data: writes heights
- Map viewer → Leaflet application: opens map
- Leaflet application → WebP tiles: loads tiles
- Leaflet application → Map metadata: loads metadata
- Leaflet application → Height data: loads heights
- Leaflet application → Block picking: requests pick
