# leftcontroller0518/botamochi architecture

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

- Interactive diagram: https://gitdiagram.com/leftcontroller0518/botamochi
- Repository: https://github.com/leftcontroller0518/botamochi

## Overview

Botamochi is a C# video rendering and hardware-encoding engine. The principal workflow parses render options, generates animated frames, converts or packs them as NV12, streams them through a bounded encoder queue, and exports a video through FFmpeg. Documented GPU rendering/compute, SIMD conversion, direct multi-session NVENC, and hardware-encoder selection are also represented. Edges follow the sampled entry point and caller excerpts or README statements; unsampled feature internals are shown without inferred call chains.

Main entry points: [`src/Program.cs`](https://github.com/leftcontroller0518/botamochi/blob/main/src/Program.cs) (Render entry point), [`src/Encoder/DirectRender.cs`](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/DirectRender.cs) (Direct render coordinator), [`src/Encoder/FfmpegProcessBridge.cs`](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/FfmpegProcessBridge.cs) (FFmpeg bridge), [`src/Rendering/ColorBarsNv12Renderer.cs`](https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ColorBarsNv12Renderer.cs) (Color bars renderer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Runtime Control"]
  node_options["Render options<br/>[RenderOptions.cs]"]
  node_entry["Render entry point<br/>[Program.cs]"]
  node_pacer["Frame pacer<br/>[PipelinePacer.cs]"]
  node_placement["Worker placement<br/>[WorkerPlacement.cs]"]
end

subgraph group_render["Frame Rendering"]
  node_scene["Procedural scenes<br/>[ProceduralScene.cs]"]
  node_workers["Scene workers<br/>[SceneWorkers.cs]"]
  node_bars["Color bars renderer"]
  node_barupload["Direct bar upload<br/>[ColorBarUpload.cs]"]
  node_gpu_render["Offscreen GPU rendering<br/>[RenderPipeline.cs]"]
  node_gpu_compute["GPU compute conversion"]
  node_wave["Wave packing<br/>[PackWave.cs]"]
  node_d3d["D3D12 interop<br/>[D3D12Interop.cs]"]
end

subgraph group_memory["Frame &amp; Conversion"]
  node_pool[("Native frame pool")]
  node_poolmgr["Memory pool manager"]
  node_simd["SIMD conversion<br/>[SimdConverter.cs]"]
  node_avx["AVX conversion<br/>[Avx512Converter.cs]"]
end

subgraph group_encode["Encoding &amp; Output"]
  node_encoder_queue["Encoder queue<br/>[EncoderPipeline.cs]"]
  node_ffmpeg["FFmpeg bridge"]
  node_detector["Hardware encoder detection"]
  node_direct["Direct render coordinator<br/>[DirectRender.cs]"]
  node_nvenc["Direct NVENC<br/>[DirectNvenc.cs]"]
end

node_user(("CLI user"))
node_ffmpeg_service(("FFmpeg process"))
node_video["Video output"]

node_user -->|"starts"| node_entry
node_entry -->|"parses"| node_options
node_entry -->|"dispatches direct mode"| node_direct
node_entry -->|"renders frames"| node_workers
node_workers -->|"renders rows"| node_scene
node_entry -->|"renders color bars"| node_bars
node_bars -->|"uses scene helpers"| node_scene
node_direct -->|"creates sessions"| node_nvenc
node_direct -->|"renders scenes"| node_workers
node_direct -->|"uploads bars"| node_barupload
node_direct -->|"muxes output"| node_ffmpeg
node_direct -->|"paces frames"| node_pacer
node_entry -->|"converts frames"| node_gpu_compute
node_gpu_compute -->|"uses packing"| node_wave
node_gpu_render -.->|"uses interop"| node_d3d
node_entry -->|"acquires frames"| node_pool
node_entry -.->|"CPU conversion"| node_simd
node_bars -->|"converts rows"| node_avx
node_entry -->|"enqueues frames"| node_encoder_queue
node_encoder_queue -->|"places consumer"| node_placement
node_encoder_queue -->|"writes frames"| node_ffmpeg
node_ffmpeg -->|"selects encoder"| node_detector
node_ffmpeg -->|"streams input"| node_ffmpeg_service
node_ffmpeg_service -->|"writes output"| node_video
node_entry -->|"paces frames"| node_pacer
node_entry -.->|"configures workers"| node_placement
node_poolmgr -.->|"manages buffers"| node_pool

click node_options "https://github.com/leftcontroller0518/botamochi/blob/main/src/RenderOptions.cs"
click node_entry "https://github.com/leftcontroller0518/botamochi/blob/main/src/Program.cs"
click node_pacer "https://github.com/leftcontroller0518/botamochi/blob/main/src/Pipeline/PipelinePacer.cs"
click node_placement "https://github.com/leftcontroller0518/botamochi/blob/main/src/Pipeline/WorkerPlacement.cs"
click node_scene "https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ProceduralScene.cs"
click node_workers "https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/SceneWorkers.cs"
click node_bars "https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ColorBarsNv12Renderer.cs"
click node_barupload "https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ColorBarUpload.cs"
click node_gpu_render "https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/RenderPipeline.cs"
click node_gpu_compute "https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/GpuComputeKernel.cs"
click node_wave "https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/PackWave.cs"
click node_d3d "https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/D3D12Interop.cs"
click node_pool "https://github.com/leftcontroller0518/botamochi/blob/main/src/Core/NativeRingBufferPool.cs"
click node_poolmgr "https://github.com/leftcontroller0518/botamochi/blob/main/src/Core/MemoryPoolManager.cs"
click node_simd "https://github.com/leftcontroller0518/botamochi/blob/main/src/Simd/SimdConverter.cs"
click node_avx "https://github.com/leftcontroller0518/botamochi/blob/main/src/Simd/Avx512Converter.cs"
click node_encoder_queue "https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/EncoderPipeline.cs"
click node_ffmpeg "https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/FfmpegProcessBridge.cs"
click node_detector "https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/HardwareEncoderDetector.cs"
click node_direct "https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/DirectRender.cs"
click node_nvenc "https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/DirectNvenc.cs"

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_options,node_entry,node_pacer,node_placement,node_user toneBlue
class node_scene,node_workers,node_bars,node_barupload,node_gpu_render,node_gpu_compute,node_wave,node_d3d toneAmber
class node_pool,node_poolmgr,node_simd,node_avx toneMint
class node_encoder_queue,node_ffmpeg,node_detector,node_direct,node_nvenc toneRose
class node_ffmpeg_service,node_video toneIndigo
```

## Components

### Runtime Control

- [Render options](https://github.com/leftcontroller0518/botamochi/blob/main/src/RenderOptions.cs): `src/RenderOptions.cs`
- [Render entry point](https://github.com/leftcontroller0518/botamochi/blob/main/src/Program.cs): `src/Program.cs`
- [Frame pacer](https://github.com/leftcontroller0518/botamochi/blob/main/src/Pipeline/PipelinePacer.cs): `src/Pipeline/PipelinePacer.cs`
- [Worker placement](https://github.com/leftcontroller0518/botamochi/blob/main/src/Pipeline/WorkerPlacement.cs): `src/Pipeline/WorkerPlacement.cs`

### Frame Rendering

- [Procedural scenes](https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ProceduralScene.cs): `src/Rendering/ProceduralScene.cs`
- [Scene workers](https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/SceneWorkers.cs): `src/Rendering/SceneWorkers.cs`
- [Color bars renderer](https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ColorBarsNv12Renderer.cs): `src/Rendering/ColorBarsNv12Renderer.cs`
- [Direct bar upload](https://github.com/leftcontroller0518/botamochi/blob/main/src/Rendering/ColorBarUpload.cs): `src/Rendering/ColorBarUpload.cs`
- [Offscreen GPU rendering](https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/RenderPipeline.cs): `src/Gpu/RenderPipeline.cs`
- [GPU compute conversion](https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/GpuComputeKernel.cs): `src/Gpu/GpuComputeKernel.cs`
- [Wave packing](https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/PackWave.cs): `src/Gpu/PackWave.cs`
- [D3D12 interop](https://github.com/leftcontroller0518/botamochi/blob/main/src/Gpu/D3D12Interop.cs): `src/Gpu/D3D12Interop.cs`

### Frame & Conversion

- [Native frame pool](https://github.com/leftcontroller0518/botamochi/blob/main/src/Core/NativeRingBufferPool.cs): `src/Core/NativeRingBufferPool.cs`
- [Memory pool manager](https://github.com/leftcontroller0518/botamochi/blob/main/src/Core/MemoryPoolManager.cs): `src/Core/MemoryPoolManager.cs`
- [SIMD conversion](https://github.com/leftcontroller0518/botamochi/blob/main/src/Simd/SimdConverter.cs): `src/Simd/SimdConverter.cs`
- [AVX conversion](https://github.com/leftcontroller0518/botamochi/blob/main/src/Simd/Avx512Converter.cs): `src/Simd/Avx512Converter.cs`

### Encoding & Output

- [Encoder queue](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/EncoderPipeline.cs): `src/Encoder/EncoderPipeline.cs`
- [FFmpeg bridge](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/FfmpegProcessBridge.cs): `src/Encoder/FfmpegProcessBridge.cs`
- [Hardware encoder detection](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/HardwareEncoderDetector.cs): `src/Encoder/HardwareEncoderDetector.cs`
- [Direct render coordinator](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/DirectRender.cs): `src/Encoder/DirectRender.cs`
- [Direct NVENC](https://github.com/leftcontroller0518/botamochi/blob/main/src/Encoder/DirectNvenc.cs): `src/Encoder/DirectNvenc.cs`

### Other components

- **CLI user**
- **FFmpeg process**
- **Video output**

## Connections

- CLI user → Render entry point: starts (evidence: `src/Program.cs`)
- Render entry point → Render options: parses (evidence: `src/Program.cs`)
- Render entry point → Direct render coordinator: dispatches direct mode (evidence: `src/Program.cs`)
- Render entry point → Scene workers: renders frames (evidence: `src/Program.cs`)
- Scene workers → Procedural scenes: renders rows (evidence: `src/Rendering/SceneWorkers.cs`)
- Render entry point → Color bars renderer: renders color bars (evidence: `src/Program.cs`)
- Color bars renderer → Procedural scenes: uses scene helpers (evidence: `src/Rendering/ColorBarsNv12Renderer.cs`)
- Direct render coordinator → Direct NVENC: creates sessions (evidence: `src/Encoder/DirectRender.cs`)
- Direct render coordinator → Scene workers: renders scenes (evidence: `src/Encoder/DirectRender.cs`)
- Direct render coordinator → Direct bar upload: uploads bars (evidence: `src/Encoder/DirectRender.cs`)
- Direct render coordinator → FFmpeg bridge: muxes output (evidence: `src/Encoder/DirectRender.cs`)
- Direct render coordinator → Frame pacer: paces frames (evidence: `src/Encoder/DirectRender.cs`)
- Render entry point → GPU compute conversion: converts frames (evidence: `README.md`)
- GPU compute conversion → Wave packing: uses packing (evidence: `src/Gpu/GpuComputeKernel.cs`)
- Offscreen GPU rendering → D3D12 interop: uses interop
- Render entry point → Native frame pool: acquires frames (evidence: `src/Program.cs`)
- Render entry point → SIMD conversion: CPU conversion
- Color bars renderer → AVX conversion: converts rows (evidence: `src/Rendering/ColorBarsNv12Renderer.cs`)
- Render entry point → Encoder queue: enqueues frames (evidence: `src/Program.cs`)
- Encoder queue → Worker placement: places consumer (evidence: `src/Encoder/EncoderPipeline.cs`)
- Encoder queue → FFmpeg bridge: writes frames (evidence: `src/Encoder/EncoderPipeline.cs`)
- FFmpeg bridge → Hardware encoder detection: selects encoder (evidence: `src/Encoder/FfmpegProcessBridge.cs`)
- FFmpeg bridge → FFmpeg process: streams input (evidence: `src/Encoder/FfmpegProcessBridge.cs`)
- FFmpeg process → Video output: writes output (evidence: `README.md`)
- Render entry point → Frame pacer: paces frames (evidence: `src/Program.cs`)
- Render entry point → Worker placement: configures workers
- Memory pool manager → Native frame pool: manages buffers
