Skip to content

Presentation Config Runtime

Last reviewed: 2026-06-30

Loader

PresentationController loads config from either:

Source Implementation
Local StreamingAssets Path.Combine(Application.streamingAssetsPath, configFileName), default PresentationConfig.json.
Remote Python render render.start.payload.configUrl or render.start.payload.configPath, normalized through ToUnityWebRequestUrl().

The JSON is parsed with JsonUtility.FromJson<PresentationConfig>(), so Unity only materializes fields represented in Assets/Anuva/Scripts/PresentationConfig.cs. Unknown JSON fields are ignored by the main config model.

Runtime Model

Config section Unity class Runtime consumer Status
schemaVersion PresentationConfig.schemaVersion Stored after parse; no strict version negotiation found. Consumed lightly
presentation PresentationMetadata Used for capture filename fallback through presentation id/name helpers. Consumed
studio.bot PresentationBot Parsed; runtime bot prefab selection not confirmed. Parsed / mostly unused
studio.set PresentationSet Parsed; runtime set selection not confirmed. Parsed / mostly unused
studio.brandKit PresentationBrandKit Parsed; brand rendering not confirmed. Parsed / mostly unused
audio.background PresentationBackgroundAudio Loaded through UnityWebRequest audio clip and mixed/played during timeline. Consumed
render.target PresentationRenderTarget Frame rate/format are present in config model; serialized controller capture fields still drive actual AVPro width/height/frame rate. Partially consumed
render.watermark PresentationRenderSettings.watermark No watermark handling confirmed. Parsed / ignored
scenes[] PresentationScene[] Primary playback list. Consumed
screen.images[0].url PresentationImage First image URL per scene is loaded as a texture and assigned to presentation renderer. Consumed
screen.reveal PresentationReveal Parsed; direct Reveal playback in PresentationController is not confirmed. Parsed / mostly unused
screen.caption PresentationCaption Parsed; caption display not confirmed in main controller. Parsed / mostly unused
timing PresentationTiming Pause and fallback duration calculations. Consumed
directing.camera.shot PresentationCamera.shot PresentScene() uses configured shot when present, with Unity fallback/random shot logic. Consumed
voiceover.audio.url PresentationSceneAudio.url Loaded as audio clip per scene. Consumed
voiceover.audio.durationSeconds PresentationSceneAudio.durationSeconds Used by duration estimation helpers when audio clip unavailable. Consumed
voiceover.words PresentationWordTiming[] Bound to bot animator for cadence and controlled playback timing. Consumed
motion PresentationSceneMotion Sent to AnuvaBotAnimator.ApplyPresentationSceneMotion() if no scene motion plan beats are active. Consumed
explainability PresentationExplainability Parsed; no runtime behavior confirmed. Parsed / ignored

Screen Template Sections

Assets/StreamingAssets/PresentationConfig.json contains screenContent per scene and a top-level screenTemplateSystem. These fields are not declared in PresentationConfig.cs, so PresentationController ignores them. They are modeled separately by AnuvaVirtualScreensPlaybackController using nested Anuva* classes in Assets/Anuva/Scripts/VirtualScreens/Scripts/AnuvaVirtualScreensPlaybackController.cs.

AnuvaScreenHtmlBuilder reads the raw JSON text and extracts virtual-screen markup with regular expressions to generate:

  • Assets/StreamingAssets/AnuvaVirtualScreens/generated/mainscreen.html
  • Assets/StreamingAssets/AnuvaVirtualScreens/generated/companionscreen.html
  • Assets/StreamingAssets/AnuvaVirtualScreens/generated/emphasisscreen.html

This builder is editor-only and runs from Anuva/Virtual Screens/Build HTML Files; it also has a play-mode hook.

Validation Assumptions

Assumption Current behavior
Config exists Missing or empty config URL logs an error and prevents preparation.
scenes exists Null or empty scenes stop initialization/preparation.
Scene media exists Scene image/audio fetch failures log errors and can fail remote render preparation.
Unknown fields Ignored by JsonUtility unless represented in the C# model.
Schema version No strict validation or compatibility table found.
Media type Audio type is inferred from URL extension; images are loaded through UnityWebRequestTexture.

Unsupported Or Unconfirmed Fields

  • Runtime set or bot prefab selection from studio.set / studio.bot: Unknown / not confirmed in repo.
  • Brand kit visual application from studio.brandKit: Unknown / not confirmed in repo.
  • Top-level screenTemplateSystem consumption by main playback: Unknown / not confirmed in PresentationController.
  • Watermark rendering: Unknown / not confirmed in repo.
  • Direct use of screen.reveal.revealSlideMarkup by main playback: Unknown / not confirmed in repo.