Getting started
theater.yaml contains the settings for one theater. Start with the generated defaults, then change the values that fit your show.
Use spaces for indentation; YAML does not tolerate tabs. Restart an already-running theater session after saving configuration changes.
live_agent: special_instructions: "Keep the narration mysterious and concise." visuals: style: "rain-soaked art nouveau fantasy" story_planning: adventure_mode: true auto_begin: true style: "dangerous, fair, and player-agency-first"
live_agent
Controls the live narrator’s behavior and Gemini Live session options.
starting_image
Optional filename or alias for the first image shown on an otherwise blank canvas. The file must be an image in the theater’s references directory. Matching tolerates spaces and punctuation; if no match is found, Narratron logs a warning and leaves the canvas unchanged.
starting_image: "opening scene.jpg"
observability_tool
Optionally gives the narrator a tool to request an immediate canvas observation outside the regular observation cadence. When enabled, the model can use that observation to visually inspect the current canvas—such as the displayed scene, audience drawings, and other visible state—before continuing the story.
visuals
Shared rendering direction for images and animations. The image model is selected globally in app.yaml; theaters customize the style and canvas pacing.
How the visual cycle works
The cycle is a one-visual staging queue, not a slideshow of every generated asset. The first successful image or animation appears immediately and starts a timer. Later visual requests are staged as the single next visual, which is promoted on each cycle_length tick.
image_generation
Controls whether the narrator can create still images. Disabling generation still lets the narrator browse and display images in the theater’s references directory.
animation
Enables narrator tools (create_animation and play_animation) to generate and display loop-ready animated scenes on the canvas. Supports multiple animation techniques—including AI text-to-video generation, depth-layered parallax, and 3-frame sequences—with automatic scene classification or forced overrides.
Animation techniques & classification
When forced_technique is null (the default), an internal LLM analyzes the narrator’s scene prompt and automatically chooses the best technique:
video: Chosen for cinematic, continuous motion or fluid natural action scenes (such as rushing rivers, billowing clouds, fluttering cloth, flying dragons, and atmospheric weather). Synthesizes an MP4 video clip.layered: Chosen for scenic vistas, atmospheric backdrops, or high-energy single-moment climaxes. Generates a base still and decomposes it into multi-plane depth layers with parallax motion using FAL Qwen Layered.triframe: Chosen for high-complexity motions and distinct narrative transitions. Generates a 3-frame sequence with clear action differences and smooth crossfades.
How the video technique works
The video technique provides full-motion cinematic scenes generated by AI text-to-video models:
- Style inheritance & loop constraint: The video prompt automatically inherits the theater’s global visual style from
image_generation.style. Aloopableconstraint is automatically appended (for example,Style: <style>, loopable) so the resulting clip visually matches still images and loops seamlessly. - Predictable pricing & app-controlled duration: Video clip duration is set and controlled globally at the application level (5 seconds) rather than configured per theater, keeping generation costs and credit pricing predictable and consistent.
- Model backend: Utilizes MiniMax Hailuo fast text-to-video generation via FAL (
fal-minimax-h3-turbo) to synthesize fluid, high-fidelity MP4 footage. - Playback & canvas rendering: Videos are saved locally in the theater’s
animations/folder alongside avideo.jsonmanifest, and registered under image aliases (<animation_id>_videoand<animation_id>). The canvas and OBS overlay display them as auto-looping, muted HTML5 video elements with smooth crossfades into subsequent scenes.
Example: video animation configuration
animation: enabled: true cooldown_duration: 20 # Force all animations to use the video technique, or leave null for automatic classification forced_technique: "video"
interactive_canvas
Allows the narrator to build interactive A2UI surfaces—such as status cards, grids, and action buttons—on the canvas.
music
Configures playback from theater playlists and optional AI-generated music.
story_planning
Defines the Adventure Mode planner: its durable story context, planning horizon, pacing, and optional NPC speech.
Example: durable adventure context
story_planning:
adventure_mode: true
initial_elements:
ship: "The Starling is damaged and low on fuel."
captain: "Missing since the comet storm."
required_stickies:
- ship
- captain
hidden_stickies:
- captain
nodes_ahead: 4
style: "Tense science-fiction mystery; setbacks are fair and consequential."
require_user_input: falsechat
Controls pacing for the narrator’s chat/status tool.