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.htmlAssets/StreamingAssets/AnuvaVirtualScreens/generated/companionscreen.htmlAssets/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
screenTemplateSystemconsumption by main playback: Unknown / not confirmed inPresentationController. - Watermark rendering: Unknown / not confirmed in repo.
- Direct use of
screen.reveal.revealSlideMarkupby main playback: Unknown / not confirmed in repo.