Skip to main content
Glama

pixoo_compose_scene

pixoo_compose_scene
Idempotent

Compose layered pixel scenes for Pixoo LED displays with text, icons, widgets, shapes, and images. Add keyframe animations or effects for static or animated output, then preview the rendered result.

Instructions

Compose a full scene: layered elements (text, icons, widgets, shapes, bitmaps, images, sprites) with per-element effects and keyframes, static or animated. Returns the rendered scene as an image content block for immediate inspection. Elements render back-to-front in array order. For text-only display use pixoo_display_text; run pixoo_design_brief with topic "scene" or "dashboard" for layout and palette guidance.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pushNoPush to device (default: true).
speedNoMilliseconds per frame for animations (default: 150ms).
framesNoNumber of animation frames (1–40, default: 1). 20 frames at 150ms ≈ 3s loop.
outputNoAbsolute, already-normalized path to save the first frame to, in addition to the PIXOO_OUTPUT_DIR auto-save when that is configured. Both paths are reported in outputFiles.
elementsYesScene elements rendered back-to-front. Up to 50 elements.
backgroundYesScene background: solid color, gradient, or named theme.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
framesNoNumber of frames in the rendered output (1 for static, 2–40 for animations).
layoutNoLayout report for each element.
noticeNoWarning or informational notice about the render or push.
pushedNoTrue when the device acknowledged the push. False when push: false or push failed.
deviceStateNoDevice state after the push. Absent when push: false.
outputFilesNoAbsolute paths to saved output files (PNG for static, GIF for animations). Present only when PIXOO_OUTPUT_DIR is configured or output is set.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed10 schema fields changedv1.1.1
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • 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"
      +  }
      +]
    • changedInput schema / properties / output / description
      Previous value: -"Explicit output file path for saving (overrides PIXOO_OUTPUT_DIR)."New value: +"Absolute, already-normalized path to save the first frame to, in addition to the PIXOO_OUTPUT_DIR auto-save when that is configured. Both paths are reported in outputFiles."
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "pushed",
      +      "frames",
      +      "layout"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `device_unreachable`: Device is not reachable over the network. `device_rejected`: Device firmware returned a non-zero error code. `no_device_configured`: PIXOO_IP is not set and push was requested. `asset_not_found`: An image or sprite path could not be read. `invalid_color`: A color value could not be resolved. `unknown_icon`: Icon name not found in the registry. `invalid_output_path`: The output path is relative or contains traversal segments. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "device_unreachable",
      +            "device_rejected",
      +            "no_device_configured",
      +            "asset_not_found",
      +            "invalid_color",
      +            "unknown_icon",
      +            "invalid_output_path"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / previewData
      Removed value: -{
      -  "description": "Base64-encoded PNG preview of the rendered scene (8× upscaled, 512px). For animations: the middle frame.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / previewMimeType
      Removed value: -{
      -  "description": "MIME type of the preview image.",
      -  "enum": [
      -    "image/png"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "pushed",
      -  "frames",
      -  "layout"
      -]
  2. First observedv1.0.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, covering the safety profile. The description adds genuine behavioral detail beyond that: it returns "the rendered scene as an image content block for immediate inspection" and discloses the z-order rule "Elements render back-to-front in array order." It does not mention the default push-to-device side effect, but this is not a contradiction and the safety info is already well covered by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences of pure information: the core action with capability summary, the return behavior, and the explicit routing with a requirement. Every sentence earns its place and the most important decision-relevant facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a rich nested schema, output schema, and annotations, the description does its job: it establishes the composition model, states the z-order semantics, and gives an explicit decision path to sibling tools. The main minor gap is that it does not flag that the scene is, by default, pushed to the device via the 'push' parameter, but that behavior is already fully documented in the schema itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with meaningful descriptions, including the element oneOf discrimination, so the baseline is 3. The description's element type list is a useful summary but it simply reflects what the schema's oneOf already documents. It does not add meaning beyond the schema, which the rubric says the baseline already accounts for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with the specific verb-resource action "Compose a full scene" and enumerates the element families it covers (text, icons, widgets, shapes, bitmaps, images, sprites) plus the animation capabilities (effects, keyframes, static or animated). It also names the sibling tool pixoo_display_text to make the distinction explicit, so an agent can tell this tool apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: "For text-only display use pixoo_display_text" and "run pixoo_design_brief with topic 'scene' or 'dashboard' for layout and palette guidance." This clearly handles the most confusable sibling and the companion design tool, but does not mention exclusions for the other siblings (e.g., pixoo_push_image, among others), so the guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/pixoo-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server