# mrnerf/lichtfeld-studio architecture

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

## Overview

LichtFeld Studio is a native 3D Gaussian Splatting workstation. Its main user journey is to load a dataset or checkpoint, train or resume a scene, inspect and edit it interactively, then export a shareable result. The README also describes headless training, Python plugins and embedded Python, and MCP automation, so these appear as separate capabilities. The tree and excerpts support the application, image-loading, rendering, storage, and automation paths; several product-stage links are based on documented capabilities rather than inspected call sites.

Main entry points: [`src/app/application.cpp`](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/application.cpp) (Application), [`src/training`](https://github.com/mrnerf/lichtfeld-studio/tree/master/src/training) (Training and resume), [`src/core/splat_exportable_storage.cpp`](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/core/splat_exportable_storage.cpp) (Gaussian scene), [`src/app/mcp_operator_tools.cpp`](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/mcp_operator_tools.cpp) (MCP tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Scene workflow"]
  node_application["Application<br/>[application.cpp]"]
  node_image_loader["Image loader"]
  node_training["Training and resume"]
  node_checkpoint["Checkpoint format"]
end

subgraph group_runtime["Runtime and rendering"]
  node_scene[("Gaussian scene")]
  node_sh_storage["SH value storage"]
  node_viewer["Scene viewer"]
  node_vulkan["Vulkan rasterizer<br/>[gs_pipeline.cpp]"]
  node_lod_upload["LOD uploads"]
  node_scene_editing["Scene editing"]
end

subgraph group_automation["Automation and extension"]
  node_python["Embedded Python<br/>[py_pipeline.cpp]"]
  node_plugins["Python plugins"]
  node_mcp["MCP tools"]
  node_mcp_client["LLM client<br/>[llm_client.cpp]"]
end

subgraph group_delivery["Export and delivery"]
  node_converter["Export conversion<br/>[converter.cpp]"]
  node_export_formats["PLY SOG SPZ HTML<br/>[converter.cpp]"]
end

node_user(("User"))
node_dataset["COLMAP dataset"]
node_agent(("Local tools and agents"))

node_user -->|"operates"| node_application
node_dataset -->|"supplies images"| node_image_loader
node_application -->|"loads images"| node_image_loader
node_application -->|"starts or resumes"| node_training
node_checkpoint -->|"restores state"| node_training
node_image_loader -->|"provides images"| node_training
node_training -->|"updates splats"| node_scene
node_training -->|"stores SH values"| node_sh_storage
node_scene -->|"provides scene"| node_viewer
node_viewer -->|"renders with"| node_vulkan
node_scene -->|"uploads LOD data"| node_lod_upload
node_user -->|"edits selection"| node_scene_editing
node_scene_editing -->|"changes scene"| node_scene
node_user -->|"requests export"| node_converter
node_converter -->|"reads scene"| node_scene
node_converter -->|"writes formats"| node_export_formats
node_user -->|"runs scripts"| node_python
node_python -->|"executes operations"| node_scene_editing
node_user -->|"extends app"| node_plugins
node_plugins -->|"extends capabilities"| node_application
node_agent -->|"automates through"| node_mcp
node_mcp -->|"invokes tools"| node_application
node_mcp -.->|"uses LLM client"| node_mcp_client

click node_application "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/application.cpp"
click node_image_loader "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/io/pipelined_image_loader.cpp"
click node_training "https://github.com/mrnerf/lichtfeld-studio/tree/master/src/training"
click node_checkpoint "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/core/checkpoint_format.cpp"
click node_scene "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/core/splat_exportable_storage.cpp"
click node_sh_storage "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/training/sh_value_storage.cpp"
click node_viewer "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/rendering/raster_rendering_engine.cpp"
click node_vulkan "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/rendering/rasterizer/vulkan/src/gs_pipeline.cpp"
click node_lod_upload "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/visualizer/rendering/lod_upload_engine.cpp"
click node_scene_editing "https://github.com/mrnerf/lichtfeld-studio/tree/master/src/visualizer"
click node_converter "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/converter.cpp"
click node_export_formats "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/converter.cpp"
click node_python "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/python/lfs/py_pipeline.cpp"
click node_plugins "https://github.com/mrnerf/lichtfeld-studio/tree/master/src/python"
click node_mcp "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/mcp_operator_tools.cpp"
click node_mcp_client "https://github.com/mrnerf/lichtfeld-studio/blob/master/src/mcp/llm_client.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_application,node_image_loader,node_training,node_checkpoint,node_user toneBlue
class node_scene,node_sh_storage,node_viewer,node_vulkan,node_lod_upload,node_scene_editing toneAmber
class node_python,node_plugins,node_mcp,node_mcp_client toneMint
class node_converter,node_export_formats toneRose
class node_dataset,node_agent toneIndigo
```

## Components

### Scene workflow

- [Application](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/application.cpp): `src/app/application.cpp`
- [Image loader](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/io/pipelined_image_loader.cpp): `src/io/pipelined_image_loader.cpp`
- [Training and resume](https://github.com/mrnerf/lichtfeld-studio/tree/master/src/training): `src/training`
- [Checkpoint format](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/core/checkpoint_format.cpp): `src/core/checkpoint_format.cpp`

### Runtime and rendering

- [Gaussian scene](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/core/splat_exportable_storage.cpp): `src/core/splat_exportable_storage.cpp`
- [SH value storage](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/training/sh_value_storage.cpp): `src/training/sh_value_storage.cpp`
- [Scene viewer](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/rendering/raster_rendering_engine.cpp): `src/rendering/raster_rendering_engine.cpp`
- [Vulkan rasterizer](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/rendering/rasterizer/vulkan/src/gs_pipeline.cpp): `src/rendering/rasterizer/vulkan/src/gs_pipeline.cpp`
- [LOD uploads](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/visualizer/rendering/lod_upload_engine.cpp): `src/visualizer/rendering/lod_upload_engine.cpp`
- [Scene editing](https://github.com/mrnerf/lichtfeld-studio/tree/master/src/visualizer): `src/visualizer`

### Automation and extension

- [Embedded Python](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/python/lfs/py_pipeline.cpp): `src/python/lfs/py_pipeline.cpp`
- [Python plugins](https://github.com/mrnerf/lichtfeld-studio/tree/master/src/python): `src/python`
- [MCP tools](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/mcp_operator_tools.cpp): `src/app/mcp_operator_tools.cpp`
- [LLM client](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/mcp/llm_client.cpp): `src/mcp/llm_client.cpp`

### Export and delivery

- [Export conversion](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/converter.cpp): `src/app/converter.cpp`
- [PLY SOG SPZ HTML](https://github.com/mrnerf/lichtfeld-studio/blob/master/src/app/converter.cpp): `src/app/converter.cpp`

### Other components

- **User**
- **COLMAP dataset**
- **Local tools and agents**

## Connections

- User → Application: operates
- COLMAP dataset → Image loader: supplies images
- Application → Image loader: loads images
- Application → Training and resume: starts or resumes
- Checkpoint format → Training and resume: restores state
- Image loader → Training and resume: provides images
- Training and resume → Gaussian scene: updates splats
- Training and resume → SH value storage: stores SH values
- Gaussian scene → Scene viewer: provides scene
- Scene viewer → Vulkan rasterizer: renders with
- Gaussian scene → LOD uploads: uploads LOD data
- User → Scene editing: edits selection
- Scene editing → Gaussian scene: changes scene
- User → Export conversion: requests export
- Export conversion → Gaussian scene: reads scene
- Export conversion → PLY SOG SPZ HTML: writes formats
- User → Embedded Python: runs scripts
- Embedded Python → Scene editing: executes operations
- User → Python plugins: extends app
- Python plugins → Application: extends capabilities
- Local tools and agents → MCP tools: automates through
- MCP tools → Application: invokes tools
- MCP tools → LLM client: uses LLM client
