changedInput schema / properties / elements / items / oneOf
Previous value: -[
- {
- "description": "Styled text element rendered at a position.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "color": {
- "description": "Flat text color.",
- "type": "string"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "font": {
- "description": "Font variant.",
- "enum": [
- "standard",
- "compact"
- ],
- "type": "string"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "style": {
- "description": "Text style options.",
- "properties": {
- "color": {
- "description": "Flat color override.",
- "type": "string"
- },
- "outline": {
- "description": "1px outline.",
- "type": "boolean"
- },
- "palette": {
- "anyOf": [
- {
- "description": "Named built-in color palette for the vertical ramp.",
- "enum": [
- "ember",
- "ice",
- "neon",
- "fire",
- "lavender",
- "claude",
- "mono"
- ],
- "type": "string"
- },
- {
- "description": "Custom gradient stop: specify top and bottom colors directly.",
- "properties": {
- "from": {
- "description": "Top color.",
- "type": "string"
- },
- "to": {
- "description": "Bottom color.",
- "type": "string"
- }
- },
- "required": [
- "from",
- "to"
- ],
- "type": "object"
- }
- ],
- "description": "Palette name or custom gradient stop for vertical color ramp."
- },
- "scale": {
- "description": "Integer pixel scale multiplier.",
- "maximum": 8,
- "minimum": 1,
- "type": "integer"
- },
- "shadow": {
- "description": "Drop shadow.",
- "type": "boolean"
- }
- },
- "type": "object"
- },
- "text": {
- "description": "Text content to render.",
- "type": "string"
- },
- "type": {
- "const": "text",
- "description": "Text element type.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "x": {
- "anyOf": [
- {
- "description": "Absolute pixel X coordinate (0 = left edge).",
- "type": "number"
- },
- {
- "description": "Semantic horizontal alignment.",
- "enum": [
- "left",
- "center",
- "right"
- ],
- "type": "string"
- }
- ],
- "description": "X position (default: 0)."
- },
- "y": {
- "anyOf": [
- {
- "description": "Absolute pixel Y coordinate (0 = top edge).",
- "type": "number"
- },
- {
- "description": "Semantic vertical alignment.",
- "enum": [
- "top",
- "center",
- "bottom"
- ],
- "type": "string"
- }
- ],
- "description": "Y position (default: 0)."
- }
- },
- "required": [
- "type",
- "text"
- ],
- "type": "object"
- },
- {
- "description": "Built-in or custom SVG icon element.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "color": {
- "description": "Icon fill color.",
- "type": "string"
- },
- "d": {
- "description": "Custom SVG path d attribute.",
- "type": "string"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "h": {
- "description": "Render height in pixels (default: 12).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "name": {
- "description": "Built-in icon name (see pixoo://reference/icons).",
- "type": "string"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "palette": {
- "description": "Named palette for colored icon.",
- "enum": [
- "ember",
- "ice",
- "neon",
- "fire",
- "lavender",
- "claude",
- "mono"
- ],
- "type": "string"
- },
- "type": {
- "const": "icon",
- "description": "Icon element type.",
- "type": "string"
- },
- "viewBox": {
- "description": "SVG viewBox string (default: \"0 0 16 16\").",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "w": {
- "description": "Render width in pixels (default: 12).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "x": {
- "anyOf": [
- {
- "description": "Absolute pixel X coordinate (0 = left edge).",
- "type": "number"
- },
- {
- "description": "Semantic horizontal alignment.",
- "enum": [
- "left",
- "center",
- "right"
- ],
- "type": "string"
- }
- ],
- "description": "X position."
- },
- "y": {
- "anyOf": [
- {
- "description": "Absolute pixel Y coordinate (0 = top edge).",
- "type": "number"
- },
- {
- "description": "Semantic vertical alignment.",
- "enum": [
- "top",
- "center",
- "bottom"
- ],
- "type": "string"
- }
- ],
- "description": "Y position."
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "description": "Filled or gradient rectangle element.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "borderColor": {
- "description": "1px border color.",
- "type": "string"
- },
- "color": {
- "description": "Fill color.",
- "type": "string"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "gradient": {
- "description": "Gradient fill.",
- "properties": {
- "from": {
- "description": "Start color.",
- "type": "string"
- },
- "to": {
- "description": "End color.",
- "type": "string"
- },
- "type": {
- "description": "v = vertical, h = horizontal.",
- "enum": [
- "v",
- "h"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "from",
- "to"
- ],
- "type": "object"
- },
- "h": {
- "description": "Height in pixels.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "type": {
- "const": "rect",
- "description": "Rectangle element type.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "w": {
- "description": "Width in pixels.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "x": {
- "description": "X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "x",
- "y",
- "w",
- "h"
- ],
- "type": "object"
- },
- {
- "description": "Filled or outline circle element.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "color": {
- "description": "Circle color.",
- "type": "string"
- },
- "cx": {
- "description": "Center X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "cy": {
- "description": "Center Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "fill": {
- "description": "Filled or outline only (default: true).",
- "type": "boolean"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "radius": {
- "description": "Radius in pixels.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "type": {
- "const": "circle",
- "description": "Circle element type.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- }
- },
- "required": [
- "type",
- "cx",
- "cy",
- "radius"
- ],
- "type": "object"
- },
- {
- "description": "Single-pixel line element.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "color": {
- "description": "Line color.",
- "type": "string"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "type": {
- "const": "line",
- "description": "Line element type.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "x0": {
- "description": "Start X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "x1": {
- "description": "End X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y0": {
- "description": "Start Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y1": {
- "description": "End Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "x0",
- "y0",
- "x1",
- "y1"
- ],
- "type": "object"
- },
- {
- "description": "Horizontal progress bar widget.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "h": {
- "description": "Height in pixels.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "label": {
- "description": "Optional label rendered on the bar.",
- "type": "string"
- },
- "max": {
- "description": "Maximum value.",
- "type": "number"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "palette": {
- "description": "Named palette for gradient fill.",
- "enum": [
- "ember",
- "ice",
- "neon",
- "fire",
- "lavender",
- "claude",
- "mono"
- ],
- "type": "string"
- },
- "trackColor": {
- "description": "Background track color.",
- "type": "string"
- },
- "type": {
- "const": "progress",
- "description": "Progress bar widget type.",
- "type": "string"
- },
- "value": {
- "description": "Current value.",
- "type": "number"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "w": {
- "description": "Width in pixels.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "x": {
- "description": "X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "x",
- "y",
- "w",
- "h",
- "value",
- "max"
- ],
- "type": "object"
- },
- {
- "description": "Sparkline chart widget (line or bar).",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "color": {
- "description": "Line or bar color.",
- "type": "string"
- },
- "data": {
- "description": "Data points for the chart.",
- "items": {
- "type": "number"
- },
- "minItems": 2,
- "type": "array"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "h": {
- "description": "Height in pixels.",
- "maximum": 9007199254740991,
- "minimum": 2,
- "type": "integer"
- },
- "kind": {
- "description": "Chart style (default: line).",
- "enum": [
- "line",
- "bar"
- ],
- "type": "string"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "type": {
- "const": "sparkline",
- "description": "Sparkline chart widget type.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "w": {
- "description": "Width in pixels.",
- "maximum": 9007199254740991,
- "minimum": 2,
- "type": "integer"
- },
- "x": {
- "description": "X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "x",
- "y",
- "w",
- "h",
- "data"
- ],
- "type": "object"
- },
- {
- "description": "Bitmap element using explicit palette indices.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "palette": {
- "description": "Color palette: array of hex colors indexed 0-F.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "rows": {
- "description": "Row strings of hex palette indices (0-F, space = transparent).",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "type": {
- "const": "bitmap",
- "description": "Bitmap element using palette indices.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "x": {
- "description": "X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "x",
- "y",
- "rows",
- "palette"
- ],
- "type": "object"
- },
- {
- "description": "Sparse scatter of individually colored pixels.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "data": {
- "description": "Array of pixel positions and colors.",
- "items": {
- "description": "A single pixel: position and color.",
- "properties": {
- "color": {
- "description": "Pixel color.",
- "type": "string"
- },
- "x": {
- "description": "Pixel X coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Pixel Y coordinate.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y",
- "color"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "type": {
- "const": "pixels",
- "description": "Sparse pixel dots element.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- }
- },
- "required": [
- "type",
- "data"
- ],
- "type": "object"
- },
- {
- "description": "External image element (local path or https URL).",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "fit": {
- "description": "Resize fit mode (default: contain).",
- "enum": [
- "contain",
- "cover",
- "fill"
- ],
- "type": "string"
- },
- "h": {
- "description": "Target height (default: canvas height).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "kernel": {
- "description": "Resize kernel: nearest for pixel art, lanczos3 for photos (default: nearest).",
- "enum": [
- "nearest",
- "lanczos3",
- "mitchell"
- ],
- "type": "string"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "source": {
- "description": "Absolute local file path or https (not http) URL.",
- "type": "string"
- },
- "type": {
- "const": "image",
- "description": "Image element (local path or https URL).",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "w": {
- "description": "Target width (default: canvas width).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "x": {
- "description": "X offset on canvas (default: 0).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "y": {
- "description": "Y offset on canvas (default: 0).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "source"
- ],
- "type": "object"
- },
- {
- "description": "Sprite sheet element for character or tile art.",
- "properties": {
- "animate": {
- "additionalProperties": {
- "description": "Keyframe entries: [[frame, value], ...].",
- "items": {
- "items": [
- {
- "description": "Frame index.",
- "type": "number"
- },
- {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "string"
- },
- {
- "type": "boolean"
- }
- ],
- "description": "Value at this frame."
- }
- ],
- "type": "array"
- },
- "type": "array"
- },
- "description": "Raw keyframe animation map for this element.",
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "bodyColor": {
- "description": "Override body color.",
- "type": "string"
- },
- "cols": {
- "description": "Number of columns in the sprite grid.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "darkColor": {
- "description": "Override dark/eye color.",
- "type": "string"
- },
- "dx": {
- "description": "X offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "dy": {
- "description": "Y offset nudge in pixels.",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- },
- "effect": {
- "description": "Named animation preset for this element.",
- "properties": {
- "amplitude": {
- "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
- "type": "number"
- },
- "name": {
- "description": "Named animation preset.",
- "enum": [
- "float",
- "scroll-left",
- "scroll-right",
- "pulse",
- "blink",
- "twinkle",
- "drift",
- "fade-in",
- "fade-out"
- ],
- "type": "string"
- },
- "period": {
- "description": "Effect period in frames. Defaults to total scene frame count.",
- "type": "number"
- },
- "phase": {
- "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
- "type": "number"
- }
- },
- "required": [
- "name"
- ],
- "type": "object"
- },
- "opacity": {
- "description": "Opacity 0–100 (default: 100).",
- "maximum": 100,
- "minimum": 0,
- "type": "integer"
- },
- "path": {
- "description": "Absolute local path to the sprite sheet image.",
- "type": "string"
- },
- "rows": {
- "description": "Number of rows in the sprite grid.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "scale": {
- "description": "Pixel scale factor.",
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- },
- "type": {
- "const": "sprite",
- "description": "Sprite sheet element.",
- "type": "string"
- },
- "visible": {
- "description": "Whether the element is visible (default: true).",
- "type": "boolean"
- },
- "x": {
- "anyOf": [
- {
- "description": "Absolute pixel X coordinate (0 = left edge).",
- "type": "number"
- },
- {
- "description": "Semantic horizontal alignment.",
- "enum": [
- "left",
- "center",
- "right"
- ],
- "type": "string"
- }
- ],
- "description": "X position (default: center)."
- },
- "y": {
- "description": "Y position (default: 0).",
- "maximum": 9007199254740991,
- "minimum": -9007199254740991,
- "type": "integer"
- }
- },
- "required": [
- "type",
- "path",
- "cols",
- "rows"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "description": "Styled text element rendered at a position.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "color": {
+ "description": "Flat text color.",
+ "type": "string"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "font": {
+ "description": "Font variant.",
+ "enum": [
+ "standard",
+ "compact"
+ ],
+ "type": "string"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "style": {
+ "description": "Text style options.",
+ "properties": {
+ "color": {
+ "description": "Flat color override.",
+ "type": "string"
+ },
+ "outline": {
+ "description": "1px outline.",
+ "type": "boolean"
+ },
+ "palette": {
+ "anyOf": [
+ {
+ "description": "Named built-in color palette for the vertical ramp.",
+ "enum": [
+ "ember",
+ "ice",
+ "neon",
+ "fire",
+ "lavender",
+ "claude",
+ "mono"
+ ],
+ "type": "string"
+ },
+ {
+ "description": "Custom gradient stop: specify top and bottom colors directly.",
+ "properties": {
+ "from": {
+ "description": "Top color.",
+ "type": "string"
+ },
+ "to": {
+ "description": "Bottom color.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "from",
+ "to"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "Palette name or custom gradient stop for vertical color ramp."
+ },
+ "scale": {
+ "description": "Integer pixel scale multiplier.",
+ "maximum": 8,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "shadow": {
+ "description": "Drop shadow.",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "text": {
+ "description": "Text content to render.",
+ "type": "string"
+ },
+ "type": {
+ "const": "text",
+ "description": "Text element type.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "x": {
+ "anyOf": [
+ {
+ "description": "Absolute pixel X coordinate (0 = left edge).",
+ "type": "number"
+ },
+ {
+ "description": "Semantic horizontal alignment.",
+ "enum": [
+ "left",
+ "center",
+ "right"
+ ],
+ "type": "string"
+ }
+ ],
+ "description": "X position (default: 0)."
+ },
+ "y": {
+ "anyOf": [
+ {
+ "description": "Absolute pixel Y coordinate (0 = top edge).",
+ "type": "number"
+ },
+ {
+ "description": "Semantic vertical alignment.",
+ "enum": [
+ "top",
+ "center",
+ "bottom"
+ ],
+ "type": "string"
+ }
+ ],
+ "description": "Y position (default: 0)."
+ }
+ },
+ "required": [
+ "type",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Built-in or custom SVG icon element.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "color": {
+ "description": "Icon fill color.",
+ "type": "string"
+ },
+ "d": {
+ "description": "Custom SVG path d attribute.",
+ "type": "string"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "h": {
+ "description": "Render height in pixels (default: 12).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "name": {
+ "description": "Built-in icon name (see pixoo://reference/icons).",
+ "type": "string"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "palette": {
+ "description": "Named palette for colored icon.",
+ "enum": [
+ "ember",
+ "ice",
+ "neon",
+ "fire",
+ "lavender",
+ "claude",
+ "mono"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "icon",
+ "description": "Icon element type.",
+ "type": "string"
+ },
+ "viewBox": {
+ "description": "SVG viewBox string (default: \"0 0 16 16\").",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "w": {
+ "description": "Render width in pixels (default: 12).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "x": {
+ "anyOf": [
+ {
+ "description": "Absolute pixel X coordinate (0 = left edge).",
+ "type": "number"
+ },
+ {
+ "description": "Semantic horizontal alignment.",
+ "enum": [
+ "left",
+ "center",
+ "right"
+ ],
+ "type": "string"
+ }
+ ],
+ "description": "X position."
+ },
+ "y": {
+ "anyOf": [
+ {
+ "description": "Absolute pixel Y coordinate (0 = top edge).",
+ "type": "number"
+ },
+ {
+ "description": "Semantic vertical alignment.",
+ "enum": [
+ "top",
+ "center",
+ "bottom"
+ ],
+ "type": "string"
+ }
+ ],
+ "description": "Y position."
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Filled or gradient rectangle element.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "borderColor": {
+ "description": "1px border color.",
+ "type": "string"
+ },
+ "color": {
+ "description": "Fill color.",
+ "type": "string"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "gradient": {
+ "description": "Gradient fill.",
+ "properties": {
+ "from": {
+ "description": "Start color.",
+ "type": "string"
+ },
+ "to": {
+ "description": "End color.",
+ "type": "string"
+ },
+ "type": {
+ "description": "v = vertical, h = horizontal.",
+ "enum": [
+ "v",
+ "h"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ "h": {
+ "description": "Height in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "const": "rect",
+ "description": "Rectangle element type.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "w": {
+ "description": "Width in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "x": {
+ "description": "X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "x",
+ "y",
+ "w",
+ "h"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Filled or outline circle element.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "color": {
+ "description": "Circle color.",
+ "type": "string"
+ },
+ "cx": {
+ "description": "Center X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "cy": {
+ "description": "Center Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "fill": {
+ "description": "Filled or outline only (default: true).",
+ "type": "boolean"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "radius": {
+ "description": "Radius in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "type": {
+ "const": "circle",
+ "description": "Circle element type.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "type",
+ "cx",
+ "cy",
+ "radius"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Single-pixel line element.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "color": {
+ "description": "Line color.",
+ "type": "string"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "const": "line",
+ "description": "Line element type.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "x0": {
+ "description": "Start X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "x1": {
+ "description": "End X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y0": {
+ "description": "Start Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y1": {
+ "description": "End Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "x0",
+ "y0",
+ "x1",
+ "y1"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Horizontal progress bar widget.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "h": {
+ "description": "Height in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "label": {
+ "description": "Optional label rendered on the bar.",
+ "type": "string"
+ },
+ "max": {
+ "description": "Maximum value.",
+ "type": "number"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "palette": {
+ "description": "Named palette for gradient fill.",
+ "enum": [
+ "ember",
+ "ice",
+ "neon",
+ "fire",
+ "lavender",
+ "claude",
+ "mono"
+ ],
+ "type": "string"
+ },
+ "trackColor": {
+ "description": "Background track color.",
+ "type": "string"
+ },
+ "type": {
+ "const": "progress",
+ "description": "Progress bar widget type.",
+ "type": "string"
+ },
+ "value": {
+ "description": "Current value.",
+ "type": "number"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "w": {
+ "description": "Width in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "x": {
+ "description": "X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "x",
+ "y",
+ "w",
+ "h",
+ "value",
+ "max"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Sparkline chart widget (line or bar).",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "color": {
+ "description": "Line or bar color.",
+ "type": "string"
+ },
+ "data": {
+ "description": "Data points for the chart.",
+ "items": {
+ "type": "number"
+ },
+ "minItems": 2,
+ "type": "array"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "h": {
+ "description": "Height in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 2,
+ "type": "integer"
+ },
+ "kind": {
+ "description": "Chart style (default: line).",
+ "enum": [
+ "line",
+ "bar"
+ ],
+ "type": "string"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "const": "sparkline",
+ "description": "Sparkline chart widget type.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "w": {
+ "description": "Width in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": 2,
+ "type": "integer"
+ },
+ "x": {
+ "description": "X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "x",
+ "y",
+ "w",
+ "h",
+ "data"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Bitmap element using explicit palette indices.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "palette": {
+ "description": "Color palette: array of hex colors indexed 0-F.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "rows": {
+ "description": "Row strings of hex palette indices (0-F, space = transparent).",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "type": {
+ "const": "bitmap",
+ "description": "Bitmap element using palette indices.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "x": {
+ "description": "X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "x",
+ "y",
+ "rows",
+ "palette"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Sparse scatter of individually colored pixels.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "data": {
+ "description": "Array of pixel positions and colors.",
+ "items": {
+ "description": "A single pixel: position and color.",
+ "properties": {
+ "color": {
+ "description": "Pixel color.",
+ "type": "string"
+ },
+ "x": {
+ "description": "Pixel X coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Pixel Y coordinate.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "color"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "type": {
+ "const": "pixels",
+ "description": "Sparse pixel dots element.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "type",
+ "data"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "External image element (local path or https URL).",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "fit": {
+ "description": "Resize fit mode (default: contain).",
+ "enum": [
+ "contain",
+ "cover",
+ "fill"
+ ],
+ "type": "string"
+ },
+ "h": {
+ "description": "Target height (default: canvas height).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "kernel": {
+ "description": "Resize kernel: nearest for pixel art, lanczos3 for photos (default: nearest).",
+ "enum": [
+ "nearest",
+ "lanczos3",
+ "mitchell"
+ ],
+ "type": "string"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "source": {
+ "description": "Absolute local file path or https (not http) URL.",
+ "type": "string"
+ },
+ "type": {
+ "const": "image",
+ "description": "Image element (local path or https URL).",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "w": {
+ "description": "Target width (default: canvas width).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "x": {
+ "description": "X offset on canvas (default: 0).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "y": {
+ "description": "Y offset on canvas (default: 0).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "source"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Sprite sheet element for character or tile art.",
+ "properties": {
+ "animate": {
+ "additionalProperties": {
+ "description": "Keyframe entries: [[frame, value], ...].",
+ "items": {
+ "prefixItems": [
+ {
+ "description": "Frame index.",
+ "type": "number"
+ },
+ {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "string"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "description": "Value at this frame."
+ }
+ ],
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "description": "Raw keyframe animation map for this element.",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "bodyColor": {
+ "description": "Override body color.",
+ "type": "string"
+ },
+ "cols": {
+ "description": "Number of columns in the sprite grid.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "darkColor": {
+ "description": "Override dark/eye color.",
+ "type": "string"
+ },
+ "dx": {
+ "description": "X offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "dy": {
+ "description": "Y offset nudge in pixels.",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ },
+ "effect": {
+ "description": "Named animation preset for this element.",
+ "properties": {
+ "amplitude": {
+ "description": "Effect intensity: pixels of movement for float/scroll/drift, 0–1 scale for fade/pulse. Default varies by effect (float: 2px).",
+ "type": "number"
+ },
+ "name": {
+ "description": "Named animation preset.",
+ "enum": [
+ "float",
+ "scroll-left",
+ "scroll-right",
+ "pulse",
+ "blink",
+ "twinkle",
+ "drift",
+ "fade-in",
+ "fade-out"
+ ],
+ "type": "string"
+ },
+ "period": {
+ "description": "Effect period in frames. Defaults to total scene frame count.",
+ "type": "number"
+ },
+ "phase": {
+ "description": "Phase offset 0–1 to stagger this element relative to others (0.5 = half-cycle offset).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ "opacity": {
+ "description": "Opacity 0–100 (default: 100).",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "path": {
+ "description": "Absolute local path to the sprite sheet image.",
+ "type": "string"
+ },
+ "rows": {
+ "description": "Number of rows in the sprite grid.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "scale": {
+ "description": "Pixel scale factor.",
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "type": {
+ "const": "sprite",
+ "description": "Sprite sheet element.",
+ "type": "string"
+ },
+ "visible": {
+ "description": "Whether the element is visible (default: true).",
+ "type": "boolean"
+ },
+ "x": {
+ "anyOf": [
+ {
+ "description": "Absolute pixel X coordinate (0 = left edge).",
+ "type": "number"
+ },
+ {
+ "description": "Semantic horizontal alignment.",
+ "enum": [
+ "left",
+ "center",
+ "right"
+ ],
+ "type": "string"
+ }
+ ],
+ "description": "X position (default: center)."
+ },
+ "y": {
+ "description": "Y position (default: 0).",
+ "maximum": 9007199254740991,
+ "minimum": -9007199254740991,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "type",
+ "path",
+ "cols",
+ "rows"
+ ],
+ "type": "object"
+ }
+]