Unity Renderer Role
Last reviewed: 2026-06-30
Purpose
anuva-unity-video-creator is the Unity rendering and virtual production application for Anuva Video Creator. It consumes compiled Presentation Config JSON and media URLs or local assets, stages the selected presentation in Unity scenes, drives cameras, bot motion, virtual screens, voiceover playback, capture, and reports render state to the Python Server.
The repository is an implementation boundary. It should make deterministic render instructions visible as Unity behavior; it should not decide product roadmap, user workflow, billing, AI planning, or worker orchestration policy.
Owned Here
| Area | Unity-owned responsibility | Evidence |
|---|---|---|
| Runtime playback | Load PresentationConfig.json, preload scene image/audio assets, run scene-by-scene presentation playback. |
Assets/Anuva/Scripts/PresentationController.cs |
| Virtual production scene behavior | Maintain Unity scenes, cameras, lighting, set assets, bot presenter, screen surfaces, and capture setup. | Assets/Anuva/Scenes/, Assets/AnuvaSets/, Assets/Anuva/Scripts/ |
| Camera execution | Read camera shot definitions from StreamingAssets/CameraShots.json and move Cinemachine targets through CamController. |
Assets/Anuva/Scripts/CamController.cs |
| Bot presenter behavior | Execute pose/motion requests from scene config or generated/loaded bot motion plans. | Assets/Anuva/Scripts/AnuvaBotAnimator.cs, Assets/Anuva/Scripts/BotMotionPlan/ |
| Screen rendering | Render image textures directly and support generated HTML/Vuplex screen surfaces. | Assets/Anuva/Scripts/PresentationController.cs, Assets/Anuva/Scripts/VirtualScreens/ |
| Capture | Configure AVPro Movie Capture and produce MP4 files on disk. | Assets/Anuva/Scripts/PresentationController.cs |
| Unity/Python protocol endpoint | Bind the Unity command REP socket, send status and heartbeat events, and accept render commands. | Assets/Anuva/Scripts/AnuvaPythonServerCommunication.cs |
| Local Unity verification docs | Record Unity-specific verification commands and known render/capture constraints. | docs/process/ChangeWorkflow.md |
Not Owned Here
| Area | Primary owner | Unity boundary |
|---|---|---|
| Web App implementation, Payload CMS, RAG, billing, user experience | anuvax-cms |
Unity consumes compiled JSON/media; it does not own authoring UX or config compilation. |
| Python worker lifecycle, upload pipeline, monitoring, render queue policy | anuva-python-server |
Unity receives commands and emits events; Python owns orchestration and post-render upload/completion. |
| Product roadmap, release scope, cross-repository acceptance criteria | anuva-main-video-creator |
Unity implements agreed render behavior and reports gaps. |
| Shared engineering workflow and repository ownership rules | anuva-engineering-handbook |
Unity follows shared process, but does not define it. |
| Aggregated docs publishing | anuva-dev-docs |
Unity owns source docs in this repo only. |
Relationship To Inputs And Outputs
flowchart LR
Web["Web App / AI planning"]
Config["Compiled Presentation Config"]
Python["Python Server"]
Unity["Unity Video Creator"]
Media["Media URLs / StreamingAssets"]
Output["MP4 output"]
Web --> Config
Config --> Python
Media --> Unity
Python -->|ZeroMQ render.start| Unity
Config --> Unity
Unity -->|render events| Python
Unity --> Output
Output --> Python
Unity currently supports both local editor playback from Assets/StreamingAssets/PresentationConfig.json and remote render preparation from a Python-supplied configUrl or configPath. Production readiness depends on scene wiring: inspected Anuva scenes serialize enablePythonServerCommunication: 0, so enabling server-driven rendering may require scene-level configuration.
Contract Notes
PresentationConfig.csis the Unity model consumed byJsonUtility. Unknown JSON fields can exist in samples but are not represented by the C# model unless a matching field exists.PresentationControllerconsumes scene images, voiceover audio, timing, directing camera shot strings, background audio, render target metadata, and bot motion fields.- The richer
screenContentandscreenTemplateSystemsections are present inAssets/StreamingAssets/PresentationConfig.json, but are handled by separate virtual-screen scripts rather than the mainPresentationConfigclass. - Python protocol behavior is cross-checked against
anuva-python-server/docs/state/UnityProtocolMap.md; Unity and Python agree on ports and message names, but Unity currently ignores the optionalrenderpayload object described by Python.