{"$id": "https://hypna.space/hypnospec/draft/2025-07/feature/space.hypna.feature.images.scatter/", "$ref": "https://hypna.space/hypnospec/draft/2025-07/schemas/feature/", "id": "space.hypna.feature.images.scatter", "creator": "hypna.space", "version": "2025-07", "type": "object", "title": "Scatter Images", "description": "A second images cycler. Instead of one full-screen background that swaps, single images appear at random positions, fade and zoom in, hold, fade out and are removed; several can be visible at once. In XR each image also floats at its own depth in front of the viewer.", "required": false, "useProjectLevelConfiguration": false, "properties": {"configuration": {"type": "object", "properties": {"images": {"type": "array", "description": "List of image URLs to be used in the session", "items": {"type": "string"}}, "images_handled_by_outside_source": {"type": "boolean", "description": "If true, program is responsible for loading media from the external system AND placing images into the configuration.images array on export."}, "spawn_frequency": {"type": "integer", "description": "Milliseconds between new images appearing"}, "lifetime": {"type": "integer", "description": "Milliseconds each image stays on screen, including its fade in and out"}, "fade_duration": {"type": "integer", "description": "Milliseconds for the fade/zoom in and for the fade out"}, "max_images": {"type": "integer", "description": "Most images visible at the same time; new ones wait until one leaves"}, "size": {"type": "number", "description": "Image width as a percentage of the viewport width"}, "zoom_from": {"type": "number", "description": "Scale an image starts at before zooming in to full size (for example 0.6)"}, "opacity": {"type": "number", "description": "Opacity an image reaches when fully faded in (0-1)"}}}}, "dependencies": []}