How leftcontroller0518/botamochi works
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: Program.cs Render entry point · DirectRender.cs Direct render coordinator · FfmpegProcessBridge.cs FFmpeg bridge · ColorBarsNv12Renderer.cs Color bars renderer
Components 24
Runtime Control
- Render options
src/RenderOptions.cs - Render entry point
src/Program.cs - Frame pacer
src/Pipeline/PipelinePacer.cs - Worker placement
src/Pipeline/WorkerPlacement.cs
Frame Rendering
- Procedural scenes
src/Rendering/ProceduralScene.cs - Scene workers
src/Rendering/SceneWorkers.cs - Color bars renderer
src/Rendering/ColorBarsNv12Renderer.cs - Direct bar upload
src/Rendering/ColorBarUpload.cs - Offscreen GPU rendering
src/Gpu/RenderPipeline.cs - GPU compute conversion
src/Gpu/GpuComputeKernel.cs - Wave packing
src/Gpu/PackWave.cs - D3D12 interop
src/Gpu/D3D12Interop.cs
Frame & Conversion
- Native frame pool
src/Core/NativeRingBufferPool.cs - Memory pool manager
src/Core/MemoryPoolManager.cs - SIMD conversion
src/Simd/SimdConverter.cs - AVX conversion
src/Simd/Avx512Converter.cs
Encoding & Output
- Encoder queue
src/Encoder/EncoderPipeline.cs - FFmpeg bridge
src/Encoder/FfmpegProcessBridge.cs - Hardware encoder detection
src/Encoder/HardwareEncoderDetector.cs - Direct render coordinator
src/Encoder/DirectRender.cs - Direct NVENC
src/Encoder/DirectNvenc.cs
Other components
- CLI user
- FFmpeg process
- Video output
Connections 27
- CLI user → Render entry point: starts
src/Program.cs - Render entry point → Render options: parses
src/Program.cs - Render entry point → Direct render coordinator: dispatches direct mode
src/Program.cs - Render entry point → Scene workers: renders frames
src/Program.cs - Scene workers → Procedural scenes: renders rows
src/Rendering/SceneWorkers.cs - Render entry point → Color bars renderer: renders color bars
src/Program.cs - Color bars renderer → Procedural scenes: uses scene helpers
src/Rendering/ColorBarsNv12Renderer.cs - Direct render coordinator → Direct NVENC: creates sessions
src/Encoder/DirectRender.cs - Direct render coordinator → Scene workers: renders scenes
src/Encoder/DirectRender.cs - Direct render coordinator → Direct bar upload: uploads bars
src/Encoder/DirectRender.cs - Direct render coordinator → FFmpeg bridge: muxes output
src/Encoder/DirectRender.cs - Direct render coordinator → Frame pacer: paces frames
src/Encoder/DirectRender.cs - Render entry point → GPU compute conversion: converts frames
README.md - GPU compute conversion → Wave packing: uses packing
src/Gpu/GpuComputeKernel.cs - Offscreen GPU rendering → D3D12 interop: uses interop
- Render entry point → Native frame pool: acquires frames
src/Program.cs - Render entry point → SIMD conversion: CPU conversion
- Color bars renderer → AVX conversion: converts rows
src/Rendering/ColorBarsNv12Renderer.cs - Render entry point → Encoder queue: enqueues frames
src/Program.cs - Encoder queue → Worker placement: places consumer
src/Encoder/EncoderPipeline.cs - Encoder queue → FFmpeg bridge: writes frames
src/Encoder/EncoderPipeline.cs - FFmpeg bridge → Hardware encoder detection: selects encoder
src/Encoder/FfmpegProcessBridge.cs - FFmpeg bridge → FFmpeg process: streams input
src/Encoder/FfmpegProcessBridge.cs - FFmpeg process → Video output: writes output
README.md - Render entry point → Frame pacer: paces frames
src/Program.cs - Render entry point → Worker placement: configures workers
- Memory pool manager → Native frame pool: manages buffers