# ooolabdev/ooosplat architecture

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

## Overview

OOOSplat is a local Tauri desktop app that turns a video or image sequence into a Gaussian Splatting project, then supports preview, editing, and export. The main flow runs from the React task UI through Tauri commands into a Rust pipeline: prepare frames, reconstruct cameras and geometry, train splats, and publish a validated PLY. Separate branches cover incremental reshoots, project history, Gaussian editing/animation, and opt-in telemetry. The README documents these capabilities; sampled source confirms the app calls and project persistence, but not every internal pipeline call.

Main entry points: [`src-tauri/src/pipeline/runner.rs`](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/pipeline/runner.rs) (Pipeline runner), [`src/components/GaussianViewer/GaussianViewer.tsx`](https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/GaussianViewer.tsx) (Gaussian viewer), [`src/lib/backend.ts`](https://github.com/ooolabdev/ooosplat/blob/main/src/lib/backend.ts) (Tauri API client), [`src/app/App.tsx`](https://github.com/ooolabdev/ooosplat/blob/main/src/app/App.tsx) (Task UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["Task UI<br/>[App.tsx]"]
  node_backend["Tauri API client<br/>[backend.ts]"]
end

subgraph group_workflow["Generation workflow"]
  node_commands["Native commands<br/>[mod.rs]"]
  node_runner["Pipeline runner<br/>[runner.rs]"]
  node_video["Media preparation<br/>[mod.rs]"]
  node_engines["Engine adapters<br/>[mod.rs]"]
  node_colmap["COLMAP reconstruction<br/>[colmap.rs]"]
  node_brush["Brush training<br/>[brush.rs]"]
  node_planner["Auto optimization<br/>[mod.rs]"]
  node_reconstruction["Model validation<br/>[mod.rs]"]
end

subgraph group_projects["Project lifecycle"]
  node_project_manager["Project manager<br/>[manager.rs]"]
  node_catalog[("Project catalog<br/>[catalog.rs]")]
  node_reshoot["Incremental reshoot<br/>[bridge_backfill.rs]"]
end

subgraph group_viewer["Preview and editing"]
  node_viewer["Gaussian viewer<br/>[GaussianViewer.tsx]"]
  node_transform_store["Edit state"]
  node_selection["Selection controller"]
  node_animation["Animation and export"]
end

subgraph group_telemetry["Usage telemetry"]
  node_telemetry_ui["Telemetry preferences"]
  node_telemetry_service["Telemetry service<br/>[service.rs]"]
  node_telemetry_store[("Telemetry settings<br/>[mod.rs]")]
end

node_user(("User"))
node_local_data[("Local project files")]
node_engine_tools["Local media engines"]
node_telemetry_endpoint(("Telemetry endpoint"))

node_user -->|"selects task"| node_app
node_app -->|"invokes commands"| node_backend
node_backend -->|"dispatches calls"| node_commands
node_commands -->|"starts pipeline"| node_runner
node_runner -->|"plans parameters"| node_planner
node_runner -->|"creates project"| node_project_manager
node_runner -->|"prepares media"| node_video
node_video -->|"runs FFmpeg"| node_engine_tools
node_runner -->|"reconstructs cameras"| node_colmap
node_colmap -->|"runs COLMAP"| node_engine_tools
node_runner -->|"trains splats"| node_brush
node_brush -->|"runs Brush"| node_engine_tools
node_runner -->|"validates output"| node_reconstruction
node_project_manager -->|"writes project"| node_local_data
node_project_manager -->|"registers project"| node_catalog
node_app -.->|"requests reshoot"| node_reshoot
node_commands -.->|"starts reshoot"| node_reshoot
node_app -->|"opens preview"| node_viewer
node_viewer -->|"requests preview"| node_backend
node_viewer -->|"selects splats"| node_selection
node_selection -->|"updates edit state"| node_transform_store
node_viewer -->|"reads edit state"| node_transform_store
node_viewer -->|"plays animation"| node_animation
node_viewer -->|"saves and exports"| node_backend
node_telemetry_ui -->|"sets consent"| node_backend
node_commands -->|"initializes telemetry"| node_telemetry_service
node_telemetry_service -->|"reads and writes"| node_telemetry_store
node_telemetry_service -.->|"sends events"| node_telemetry_endpoint

click node_app "https://github.com/ooolabdev/ooosplat/blob/main/src/app/App.tsx"
click node_backend "https://github.com/ooolabdev/ooosplat/blob/main/src/lib/backend.ts"
click node_commands "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/commands/mod.rs"
click node_runner "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/pipeline/runner.rs"
click node_video "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/video/mod.rs"
click node_engines "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/mod.rs"
click node_colmap "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/colmap.rs"
click node_brush "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/brush.rs"
click node_planner "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/planner/mod.rs"
click node_reconstruction "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/reconstruction/mod.rs"
click node_project_manager "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/project/manager.rs"
click node_catalog "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/project/catalog.rs"
click node_reshoot "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/planner/bridge_backfill.rs"
click node_viewer "https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/GaussianViewer.tsx"
click node_transform_store "https://github.com/ooolabdev/ooosplat/blob/main/src/stores/gaussianTransformStore.ts"
click node_selection "https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/GaussianSelectionController.ts"
click node_animation "https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/PreviewAnimation.ts"
click node_telemetry_ui "https://github.com/ooolabdev/ooosplat/blob/main/src/components/TelemetryPreferences.tsx"
click node_telemetry_service "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/telemetry/service.rs"
click node_telemetry_store "https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/telemetry/mod.rs"

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_app,node_backend,node_user toneBlue
class node_commands,node_runner,node_video,node_engines,node_colmap,node_brush,node_planner,node_reconstruction,node_local_data toneAmber
class node_project_manager,node_catalog,node_reshoot toneMint
class node_viewer,node_transform_store,node_selection,node_animation toneRose
class node_telemetry_ui,node_telemetry_service,node_telemetry_store,node_engine_tools,node_telemetry_endpoint toneIndigo
```

## Components

### Desktop interface

- [Task UI](https://github.com/ooolabdev/ooosplat/blob/main/src/app/App.tsx): `src/app/App.tsx`
- [Tauri API client](https://github.com/ooolabdev/ooosplat/blob/main/src/lib/backend.ts): `src/lib/backend.ts`

### Generation workflow

- [Native commands](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/commands/mod.rs): `src-tauri/src/commands/mod.rs`
- [Pipeline runner](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/pipeline/runner.rs): `src-tauri/src/pipeline/runner.rs`
- [Media preparation](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/video/mod.rs): `src-tauri/src/video/mod.rs`
- [Engine adapters](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/mod.rs): `src-tauri/src/engines/mod.rs`
- [COLMAP reconstruction](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/colmap.rs): `src-tauri/src/engines/colmap.rs`
- [Brush training](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/engines/brush.rs): `src-tauri/src/engines/brush.rs`
- [Auto optimization](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/planner/mod.rs): `src-tauri/src/planner/mod.rs`
- [Model validation](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/reconstruction/mod.rs): `src-tauri/src/reconstruction/mod.rs`

### Project lifecycle

- [Project manager](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/project/manager.rs): `src-tauri/src/project/manager.rs`
- [Project catalog](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/project/catalog.rs): `src-tauri/src/project/catalog.rs`
- [Incremental reshoot](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/planner/bridge_backfill.rs): `src-tauri/src/planner/bridge_backfill.rs`

### Preview and editing

- [Gaussian viewer](https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/GaussianViewer.tsx): `src/components/GaussianViewer/GaussianViewer.tsx`
- [Edit state](https://github.com/ooolabdev/ooosplat/blob/main/src/stores/gaussianTransformStore.ts): `src/stores/gaussianTransformStore.ts`
- [Selection controller](https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/GaussianSelectionController.ts): `src/components/GaussianViewer/GaussianSelectionController.ts`
- [Animation and export](https://github.com/ooolabdev/ooosplat/blob/main/src/components/GaussianViewer/PreviewAnimation.ts): `src/components/GaussianViewer/PreviewAnimation.ts`

### Usage telemetry

- [Telemetry preferences](https://github.com/ooolabdev/ooosplat/blob/main/src/components/TelemetryPreferences.tsx): `src/components/TelemetryPreferences.tsx`
- [Telemetry service](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/telemetry/service.rs): `src-tauri/src/telemetry/service.rs`
- [Telemetry settings](https://github.com/ooolabdev/ooosplat/blob/main/src-tauri/src/telemetry/mod.rs): `src-tauri/src/telemetry/mod.rs`

### Other components

- **User**
- **Local project files**
- **Local media engines**
- **Telemetry endpoint**

## Connections

- User → Task UI: selects task
- Task UI → Tauri API client: invokes commands
- Tauri API client → Native commands: dispatches calls
- Native commands → Pipeline runner: starts pipeline
- Pipeline runner → Auto optimization: plans parameters
- Pipeline runner → Project manager: creates project
- Pipeline runner → Media preparation: prepares media
- Media preparation → Local media engines: runs FFmpeg
- Pipeline runner → COLMAP reconstruction: reconstructs cameras
- COLMAP reconstruction → Local media engines: runs COLMAP
- Pipeline runner → Brush training: trains splats
- Brush training → Local media engines: runs Brush
- Pipeline runner → Model validation: validates output
- Project manager → Local project files: writes project
- Project manager → Project catalog: registers project
- Task UI → Incremental reshoot: requests reshoot
- Native commands → Incremental reshoot: starts reshoot
- Task UI → Gaussian viewer: opens preview
- Gaussian viewer → Tauri API client: requests preview
- Gaussian viewer → Selection controller: selects splats
- Selection controller → Edit state: updates edit state
- Gaussian viewer → Edit state: reads edit state
- Gaussian viewer → Animation and export: plays animation
- Gaussian viewer → Tauri API client: saves and exports
- Telemetry preferences → Tauri API client: sets consent
- Native commands → Telemetry service: initializes telemetry
- Telemetry service → Telemetry settings: reads and writes
- Telemetry service → Telemetry endpoint: sends events
