Skip to content

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.cs is the Unity model consumed by JsonUtility. Unknown JSON fields can exist in samples but are not represented by the C# model unless a matching field exists.
  • PresentationController consumes scene images, voiceover audio, timing, directing camera shot strings, background audio, render target metadata, and bot motion fields.
  • The richer screenContent and screenTemplateSystem sections are present in Assets/StreamingAssets/PresentationConfig.json, but are handled by separate virtual-screen scripts rather than the main PresentationConfig class.
  • 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 optional render payload object described by Python.