changedInput schema / properties / defaults / properties / keyframes / anyOf
Previous value: -[
- {
- "items": {
- "additionalProperties": false,
- "properties": {
- "backgroundBlur": {
- "description": "Backdrop blur behind the element",
- "type": "number"
- },
- "bezier": {
- "description": "Cubic-bezier [x1,y1,x2,y2]; used when interpolation is 'custom'.",
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "bezier_overrides": {
- "additionalProperties": {
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "description": "Per-property cubic-bezier override, e.g. {\"opacity\":[.4,0,.6,1]}, when two `custom`-eased properties in this entry need DIFFERENT curves. Keys must be properties present in this entry.",
- "propertyNames": {
- "enum": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "string"
- },
- "required": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "object"
- },
- "blur": {
- "description": "Layer blur",
- "type": "number"
- },
- "borderRadiusBottomLeft": {
- "description": "borderRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "borderRadiusBottomRight": {
- "description": "borderRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "borderRadiusTopLeft": {
- "description": "borderRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "borderRadiusTopRight": {
- "description": "borderRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "cropHeight": {
- "description": "cropHeight (native unit)",
- "type": "number"
- },
- "cropWidth": {
- "description": "cropWidth (native unit)",
- "type": "number"
- },
- "cropX": {
- "description": "cropX (native unit)",
- "type": "number"
- },
- "cropY": {
- "description": "cropY (native unit)",
- "type": "number"
- },
- "fillColor": {
- "description": "fillColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "fontSize": {
- "description": "Font size in CANVAS PIXELS (same unit as the top-level fontSize — NOT a fraction).",
- "type": "number"
- },
- "height": {
- "description": "Height in canvas pixels (0 allowed)",
- "minimum": 0,
- "type": "number"
- },
- "imageBorderColor": {
- "description": "imageBorderColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "imageBorderWidth": {
- "description": "imageBorderWidth in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusBottomLeft": {
- "description": "imageCornerRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusBottomRight": {
- "description": "imageCornerRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusTopLeft": {
- "description": "imageCornerRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusTopRight": {
- "description": "imageCornerRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "interpolation": {
- "description": "Easing for THIS entry, applied to every property in it (default easeInOut). NOT `easing`.",
- "enum": [
- "linear",
- "easeInOut",
- "easeIn",
- "easeOut",
- "sigmoid",
- "smootherstep",
- "smoothstep",
- "hold",
- "easeInBack",
- "easeOutBack",
- "easeInOutBack",
- "custom"
- ],
- "type": "string"
- },
- "interpolation_overrides": {
- "additionalProperties": {
- "enum": [
- "linear",
- "easeInOut",
- "easeIn",
- "easeOut",
- "sigmoid",
- "smootherstep",
- "smoothstep",
- "hold",
- "easeInBack",
- "easeOutBack",
- "easeInOutBack",
- "custom"
- ],
- "type": "string"
- },
- "description": "Per-property easing override, e.g. {\"opacity\":\"linear\"} while the rest use `interpolation`. Keys must be keyframable properties present in this entry.",
- "propertyNames": {
- "enum": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "string"
- },
- "required": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "object"
- },
- "letterSpacing": {
- "description": "Letter spacing in canvas pixels.",
- "type": "number"
- },
- "lineHeight": {
- "description": "lineHeight (native unit)",
- "type": "number"
- },
- "opacity": {
- "description": "Opacity 0-100",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "paddingBottom": {
- "description": "paddingBottom in canvas pixels",
- "type": "number"
- },
- "paddingLeft": {
- "description": "paddingLeft in canvas pixels",
- "type": "number"
- },
- "paddingRight": {
- "description": "paddingRight in canvas pixels",
- "type": "number"
- },
- "paddingTop": {
- "description": "paddingTop in canvas pixels",
- "type": "number"
- },
- "positionX": {
- "description": "X position in canvas pixels (NOT `x`). Same origin as the element's top-level x: `x` is the left edge, except TEXT where alignment picks it: left→left, center→centre, right→right.",
- "type": "number"
- },
- "positionY": {
- "description": "Y position in canvas pixels (NOT `y`). Same origin as the element's top-level y: for TEXT `y` is the vertical CENTRE when centre-aligned and the TOP otherwise; every other type uses the top. y_anchor applies to the element's own y, NOT to keyframe values, so read the element back and key off its stored y.",
- "type": "number"
- },
- "rotateX": {
- "description": "rotateX (native unit)",
- "type": "number"
- },
- "rotateY": {
- "description": "rotateY (native unit)",
- "type": "number"
- },
- "rotation": {
- "description": "Rotation in degrees",
- "type": "number"
- },
- "scaleX": {
- "description": "Horizontal scale multiplier (1 = 100%)",
- "type": "number"
- },
- "scaleY": {
- "description": "Vertical scale multiplier (1 = 100%)",
- "type": "number"
- },
- "shadowBlur": {
- "description": "shadowBlur in canvas pixels",
- "type": "number"
- },
- "shadowColor": {
- "description": "shadowColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "shadowOffsetX": {
- "description": "shadowOffsetX in canvas pixels",
- "type": "number"
- },
- "shadowOffsetY": {
- "description": "shadowOffsetY in canvas pixels",
- "type": "number"
- },
- "shadowSpread": {
- "description": "shadowSpread in canvas pixels",
- "type": "number"
- },
- "strokeColor": {
- "description": "strokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "strokeDash": {
- "description": "strokeDash in canvas pixels",
- "type": "number"
- },
- "strokeGap": {
- "description": "strokeGap in canvas pixels",
- "type": "number"
- },
- "strokeTrimEnd": {
- "description": "strokeTrimEnd (native unit)",
- "type": "number"
- },
- "strokeTrimOffset": {
- "description": "strokeTrimOffset (native unit)",
- "type": "number"
- },
- "strokeTrimStart": {
- "description": "strokeTrimStart (native unit)",
- "type": "number"
- },
- "strokeWidth": {
- "description": "strokeWidth in canvas pixels",
- "type": "number"
- },
- "textBackgroundColor": {
- "description": "textBackgroundColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textBgRadiusBottomLeft": {
- "description": "textBgRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "textBgRadiusBottomRight": {
- "description": "textBgRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "textBgRadiusTopLeft": {
- "description": "textBgRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "textBgRadiusTopRight": {
- "description": "textBgRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "textColor": {
- "description": "textColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textStrokeColor": {
- "description": "textStrokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textStrokeDash": {
- "description": "textStrokeDash in canvas pixels",
- "type": "number"
- },
- "textStrokeGap": {
- "description": "textStrokeGap in canvas pixels",
- "type": "number"
- },
- "textStrokeWidth": {
- "description": "textStrokeWidth in canvas pixels",
- "type": "number"
- },
- "timestamp": {
- "description": "Clip-relative time in seconds",
- "minimum": 0,
- "type": "number"
- },
- "videoCornerRadiusBottomLeft": {
- "description": "videoCornerRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusBottomRight": {
- "description": "videoCornerRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusTopLeft": {
- "description": "videoCornerRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusTopRight": {
- "description": "videoCornerRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "width": {
- "description": "Width in canvas pixels (0 allowed — e.g. a bar that draws in from 0)",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "timestamp"
- ],
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "backgroundBlur": {
+ "description": "Backdrop blur behind the element",
+ "type": "number"
+ },
+ "bezier": {
+ "description": "Cubic-bezier [x1,y1,x2,y2]; used when interpolation is 'custom'.",
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "bezier_overrides": {
+ "additionalProperties": {
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "description": "Per-property cubic-bezier override, e.g. {\"opacity\":[.4,0,.6,1]}, when two `custom`-eased properties in this entry need DIFFERENT curves. Keys must be properties present in this entry.",
+ "propertyNames": {
+ "enum": [
+ "positionX",
+ "positionY",
+ "width",
+ "height",
+ "rotation",
+ "scaleX",
+ "scaleY",
+ "rotateX",
+ "rotateY",
+ "cropX",
+ "cropY",
+ "cropWidth",
+ "cropHeight",
+ "opacity",
+ "blur",
+ "backgroundBlur",
+ "strokeWidth",
+ "strokeDash",
+ "strokeGap",
+ "strokeTrimStart",
+ "strokeTrimEnd",
+ "strokeTrimOffset",
+ "textStrokeWidth",
+ "textStrokeDash",
+ "textStrokeGap",
+ "imageBorderWidth",
+ "shadowOffsetX",
+ "shadowOffsetY",
+ "shadowBlur",
+ "shadowSpread",
+ "borderRadiusTopLeft",
+ "borderRadiusTopRight",
+ "borderRadiusBottomRight",
+ "borderRadiusBottomLeft",
+ "imageCornerRadiusTopLeft",
+ "imageCornerRadiusTopRight",
+ "imageCornerRadiusBottomRight",
+ "imageCornerRadiusBottomLeft",
+ "videoCornerRadiusTopLeft",
+ "videoCornerRadiusTopRight",
+ "videoCornerRadiusBottomRight",
+ "videoCornerRadiusBottomLeft",
+ "fontSize",
+ "lineHeight",
+ "letterSpacing",
+ "paddingTop",
+ "paddingRight",
+ "paddingBottom",
+ "paddingLeft",
+ "textBgRadiusTopLeft",
+ "textBgRadiusTopRight",
+ "textBgRadiusBottomRight",
+ "textBgRadiusBottomLeft",
+ "fillColor",
+ "strokeColor",
+ "textStrokeColor",
+ "imageBorderColor",
+ "textColor",
+ "textBackgroundColor",
+ "shadowColor"
+ ],
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "blur": {
+ "description": "Layer blur",
+ "type": "number"
+ },
+ "borderRadiusBottomLeft": {
+ "description": "borderRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusBottomRight": {
+ "description": "borderRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusTopLeft": {
+ "description": "borderRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusTopRight": {
+ "description": "borderRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "cropHeight": {
+ "description": "cropHeight (native unit)",
+ "type": "number"
+ },
+ "cropWidth": {
+ "description": "cropWidth (native unit)",
+ "type": "number"
+ },
+ "cropX": {
+ "description": "cropX (native unit)",
+ "type": "number"
+ },
+ "cropY": {
+ "description": "cropY (native unit)",
+ "type": "number"
+ },
+ "fillColor": {
+ "description": "fillColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "fontSize": {
+ "description": "Font size in CANVAS PIXELS (same unit as the top-level fontSize — NOT a fraction).",
+ "type": "number"
+ },
+ "height": {
+ "description": "Height in canvas pixels (0 allowed)",
+ "minimum": 0,
+ "type": "number"
+ },
+ "imageBorderColor": {
+ "description": "imageBorderColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "imageBorderWidth": {
+ "description": "imageBorderWidth in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusBottomLeft": {
+ "description": "imageCornerRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusBottomRight": {
+ "description": "imageCornerRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusTopLeft": {
+ "description": "imageCornerRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusTopRight": {
+ "description": "imageCornerRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "interpolation": {
+ "description": "Easing for THIS entry, applied to every property in it (default easeInOut). NOT `easing`.",
+ "enum": [
+ "linear",
+ "easeInOut",
+ "easeIn",
+ "easeOut",
+ "sigmoid",
+ "smootherstep",
+ "smoothstep",
+ "hold",
+ "easeInBack",
+ "easeOutBack",
+ "easeInOutBack",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "interpolation_overrides": {
+ "additionalProperties": {
+ "enum": [
+ "linear",
+ "easeInOut",
+ "easeIn",
+ "easeOut",
+ "sigmoid",
+ "smootherstep",
+ "smoothstep",
+ "hold",
+ "easeInBack",
+ "easeOutBack",
+ "easeInOutBack",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "description": "Per-property easing override, e.g. {\"opacity\":\"linear\"} while the rest use `interpolation`. Keys must be keyframable properties present in this entry.",
+ "propertyNames": {
+ "enum": [
+ "positionX",
+ "positionY",
+ "width",
+ "height",
+ "rotation",
+ "scaleX",
+ "scaleY",
+ "rotateX",
+ "rotateY",
+ "cropX",
+ "cropY",
+ "cropWidth",
+ "cropHeight",
+ "opacity",
+ "blur",
+ "backgroundBlur",
+ "strokeWidth",
+ "strokeDash",
+ "strokeGap",
+ "strokeTrimStart",
+ "strokeTrimEnd",
+ "strokeTrimOffset",
+ "textStrokeWidth",
+ "textStrokeDash",
+ "textStrokeGap",
+ "imageBorderWidth",
+ "shadowOffsetX",
+ "shadowOffsetY",
+ "shadowBlur",
+ "shadowSpread",
+ "borderRadiusTopLeft",
+ "borderRadiusTopRight",
+ "borderRadiusBottomRight",
+ "borderRadiusBottomLeft",
+ "imageCornerRadiusTopLeft",
+ "imageCornerRadiusTopRight",
+ "imageCornerRadiusBottomRight",
+ "imageCornerRadiusBottomLeft",
+ "videoCornerRadiusTopLeft",
+ "videoCornerRadiusTopRight",
+ "videoCornerRadiusBottomRight",
+ "videoCornerRadiusBottomLeft",
+ "fontSize",
+ "lineHeight",
+ "letterSpacing",
+ "paddingTop",
+ "paddingRight",
+ "paddingBottom",
+ "paddingLeft",
+ "textBgRadiusTopLeft",
+ "textBgRadiusTopRight",
+ "textBgRadiusBottomRight",
+ "textBgRadiusBottomLeft",
+ "fillColor",
+ "strokeColor",
+ "textStrokeColor",
+ "imageBorderColor",
+ "textColor",
+ "textBackgroundColor",
+ "shadowColor"
+ ],
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "letterSpacing": {
+ "description": "Letter spacing in canvas pixels.",
+ "type": "number"
+ },
+ "lineHeight": {
+ "description": "lineHeight (native unit)",
+ "type": "number"
+ },
+ "opacity": {
+ "description": "Opacity 0-100",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "paddingBottom": {
+ "description": "paddingBottom in canvas pixels",
+ "type": "number"
+ },
+ "paddingLeft": {
+ "description": "paddingLeft in canvas pixels",
+ "type": "number"
+ },
+ "paddingRight": {
+ "description": "paddingRight in canvas pixels",
+ "type": "number"
+ },
+ "paddingTop": {
+ "description": "paddingTop in canvas pixels",
+ "type": "number"
+ },
+ "positionX": {
+ "description": "X position in canvas pixels (NOT `x`). Same origin as the element's top-level x: `x` is the left edge, except TEXT where alignment picks it: left→left, center→centre, right→right.",
+ "type": "number"
+ },
+ "positionY": {
+ "description": "Y position in canvas pixels (NOT `y`). Same origin as the element's top-level y: for TEXT `y` is the vertical CENTRE when centre-aligned and the TOP otherwise; every other type uses the top. y_anchor applies to the element's own y, NOT to keyframe values, so read the element back and key off its stored y.",
+ "type": "number"
+ },
+ "rotateX": {
+ "description": "rotateX (native unit)",
+ "type": "number"
+ },
+ "rotateY": {
+ "description": "rotateY (native unit)",
+ "type": "number"
+ },
+ "rotation": {
+ "description": "Rotation in degrees",
+ "type": "number"
+ },
+ "scaleX": {
+ "description": "Horizontal scale multiplier (1 = 100%)",
+ "type": "number"
+ },
+ "scaleY": {
+ "description": "Vertical scale multiplier (1 = 100%)",
+ "type": "number"
+ },
+ "shadowBlur": {
+ "description": "shadowBlur in canvas pixels",
+ "type": "number"
+ },
+ "shadowColor": {
+ "description": "shadowColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "shadowOffsetX": {
+ "description": "shadowOffsetX in canvas pixels",
+ "type": "number"
+ },
+ "shadowOffsetY": {
+ "description": "shadowOffsetY in canvas pixels",
+ "type": "number"
+ },
+ "shadowSpread": {
+ "description": "shadowSpread in canvas pixels",
+ "type": "number"
+ },
+ "strokeColor": {
+ "description": "strokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "strokeDash": {
+ "description": "strokeDash in canvas pixels",
+ "type": "number"
+ },
+ "strokeGap": {
+ "description": "strokeGap in canvas pixels",
+ "type": "number"
+ },
+ "strokeTrimEnd": {
+ "description": "strokeTrimEnd (native unit)",
+ "type": "number"
+ },
+ "strokeTrimOffset": {
+ "description": "strokeTrimOffset (native unit)",
+ "type": "number"
+ },
+ "strokeTrimStart": {
+ "description": "strokeTrimStart (native unit)",
+ "type": "number"
+ },
+ "strokeWidth": {
+ "description": "strokeWidth in canvas pixels",
+ "type": "number"
+ },
+ "textBackgroundColor": {
+ "description": "textBackgroundColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textBgRadiusBottomLeft": {
+ "description": "textBgRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusBottomRight": {
+ "description": "textBgRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusTopLeft": {
+ "description": "textBgRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusTopRight": {
+ "description": "textBgRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "textColor": {
+ "description": "textColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textStrokeColor": {
+ "description": "textStrokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textStrokeDash": {
+ "description": "textStrokeDash in canvas pixels",
+ "type": "number"
+ },
+ "textStrokeGap": {
+ "description": "textStrokeGap in canvas pixels",
+ "type": "number"
+ },
+ "textStrokeWidth": {
+ "description": "textStrokeWidth in canvas pixels",
+ "type": "number"
+ },
+ "timestamp": {
+ "description": "Clip-relative time in seconds",
+ "minimum": 0,
+ "type": "number"
+ },
+ "videoCornerRadiusBottomLeft": {
+ "description": "videoCornerRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusBottomRight": {
+ "description": "videoCornerRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusTopLeft": {
+ "description": "videoCornerRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusTopRight": {
+ "description": "videoCornerRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "width": {
+ "description": "Width in canvas pixels (0 allowed — e.g. a bar that draws in from 0)",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "timestamp"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / elements / items / properties / keyframes / anyOf
Previous value: -[
- {
- "items": {
- "additionalProperties": false,
- "properties": {
- "backgroundBlur": {
- "description": "Backdrop blur behind the element",
- "type": "number"
- },
- "bezier": {
- "description": "Cubic-bezier [x1,y1,x2,y2]; used when interpolation is 'custom'.",
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "bezier_overrides": {
- "additionalProperties": {
- "items": {
- "type": "number"
- },
- "maxItems": 4,
- "minItems": 4,
- "type": "array"
- },
- "description": "Per-property cubic-bezier override, e.g. {\"opacity\":[.4,0,.6,1]}, when two `custom`-eased properties in this entry need DIFFERENT curves. Keys must be properties present in this entry.",
- "propertyNames": {
- "enum": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "string"
- },
- "required": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "object"
- },
- "blur": {
- "description": "Layer blur",
- "type": "number"
- },
- "borderRadiusBottomLeft": {
- "description": "borderRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "borderRadiusBottomRight": {
- "description": "borderRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "borderRadiusTopLeft": {
- "description": "borderRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "borderRadiusTopRight": {
- "description": "borderRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "cropHeight": {
- "description": "cropHeight (native unit)",
- "type": "number"
- },
- "cropWidth": {
- "description": "cropWidth (native unit)",
- "type": "number"
- },
- "cropX": {
- "description": "cropX (native unit)",
- "type": "number"
- },
- "cropY": {
- "description": "cropY (native unit)",
- "type": "number"
- },
- "fillColor": {
- "description": "fillColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "fontSize": {
- "description": "Font size in CANVAS PIXELS (same unit as the top-level fontSize — NOT a fraction).",
- "type": "number"
- },
- "height": {
- "description": "Height in canvas pixels (0 allowed)",
- "minimum": 0,
- "type": "number"
- },
- "imageBorderColor": {
- "description": "imageBorderColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "imageBorderWidth": {
- "description": "imageBorderWidth in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusBottomLeft": {
- "description": "imageCornerRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusBottomRight": {
- "description": "imageCornerRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusTopLeft": {
- "description": "imageCornerRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "imageCornerRadiusTopRight": {
- "description": "imageCornerRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "interpolation": {
- "description": "Easing for THIS entry, applied to every property in it (default easeInOut). NOT `easing`.",
- "enum": [
- "linear",
- "easeInOut",
- "easeIn",
- "easeOut",
- "sigmoid",
- "smootherstep",
- "smoothstep",
- "hold",
- "easeInBack",
- "easeOutBack",
- "easeInOutBack",
- "custom"
- ],
- "type": "string"
- },
- "interpolation_overrides": {
- "additionalProperties": {
- "enum": [
- "linear",
- "easeInOut",
- "easeIn",
- "easeOut",
- "sigmoid",
- "smootherstep",
- "smoothstep",
- "hold",
- "easeInBack",
- "easeOutBack",
- "easeInOutBack",
- "custom"
- ],
- "type": "string"
- },
- "description": "Per-property easing override, e.g. {\"opacity\":\"linear\"} while the rest use `interpolation`. Keys must be keyframable properties present in this entry.",
- "propertyNames": {
- "enum": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "string"
- },
- "required": [
- "positionX",
- "positionY",
- "width",
- "height",
- "rotation",
- "scaleX",
- "scaleY",
- "rotateX",
- "rotateY",
- "cropX",
- "cropY",
- "cropWidth",
- "cropHeight",
- "opacity",
- "blur",
- "backgroundBlur",
- "strokeWidth",
- "strokeDash",
- "strokeGap",
- "strokeTrimStart",
- "strokeTrimEnd",
- "strokeTrimOffset",
- "textStrokeWidth",
- "textStrokeDash",
- "textStrokeGap",
- "imageBorderWidth",
- "shadowOffsetX",
- "shadowOffsetY",
- "shadowBlur",
- "shadowSpread",
- "borderRadiusTopLeft",
- "borderRadiusTopRight",
- "borderRadiusBottomRight",
- "borderRadiusBottomLeft",
- "imageCornerRadiusTopLeft",
- "imageCornerRadiusTopRight",
- "imageCornerRadiusBottomRight",
- "imageCornerRadiusBottomLeft",
- "videoCornerRadiusTopLeft",
- "videoCornerRadiusTopRight",
- "videoCornerRadiusBottomRight",
- "videoCornerRadiusBottomLeft",
- "fontSize",
- "lineHeight",
- "letterSpacing",
- "paddingTop",
- "paddingRight",
- "paddingBottom",
- "paddingLeft",
- "textBgRadiusTopLeft",
- "textBgRadiusTopRight",
- "textBgRadiusBottomRight",
- "textBgRadiusBottomLeft",
- "fillColor",
- "strokeColor",
- "textStrokeColor",
- "imageBorderColor",
- "textColor",
- "textBackgroundColor",
- "shadowColor"
- ],
- "type": "object"
- },
- "letterSpacing": {
- "description": "Letter spacing in canvas pixels.",
- "type": "number"
- },
- "lineHeight": {
- "description": "lineHeight (native unit)",
- "type": "number"
- },
- "opacity": {
- "description": "Opacity 0-100",
- "maximum": 100,
- "minimum": 0,
- "type": "number"
- },
- "paddingBottom": {
- "description": "paddingBottom in canvas pixels",
- "type": "number"
- },
- "paddingLeft": {
- "description": "paddingLeft in canvas pixels",
- "type": "number"
- },
- "paddingRight": {
- "description": "paddingRight in canvas pixels",
- "type": "number"
- },
- "paddingTop": {
- "description": "paddingTop in canvas pixels",
- "type": "number"
- },
- "positionX": {
- "description": "X position in canvas pixels (NOT `x`). Same origin as the element's top-level x: `x` is the left edge, except TEXT where alignment picks it: left→left, center→centre, right→right.",
- "type": "number"
- },
- "positionY": {
- "description": "Y position in canvas pixels (NOT `y`). Same origin as the element's top-level y: for TEXT `y` is the vertical CENTRE when centre-aligned and the TOP otherwise; every other type uses the top. y_anchor applies to the element's own y, NOT to keyframe values, so read the element back and key off its stored y.",
- "type": "number"
- },
- "rotateX": {
- "description": "rotateX (native unit)",
- "type": "number"
- },
- "rotateY": {
- "description": "rotateY (native unit)",
- "type": "number"
- },
- "rotation": {
- "description": "Rotation in degrees",
- "type": "number"
- },
- "scaleX": {
- "description": "Horizontal scale multiplier (1 = 100%)",
- "type": "number"
- },
- "scaleY": {
- "description": "Vertical scale multiplier (1 = 100%)",
- "type": "number"
- },
- "shadowBlur": {
- "description": "shadowBlur in canvas pixels",
- "type": "number"
- },
- "shadowColor": {
- "description": "shadowColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "shadowOffsetX": {
- "description": "shadowOffsetX in canvas pixels",
- "type": "number"
- },
- "shadowOffsetY": {
- "description": "shadowOffsetY in canvas pixels",
- "type": "number"
- },
- "shadowSpread": {
- "description": "shadowSpread in canvas pixels",
- "type": "number"
- },
- "strokeColor": {
- "description": "strokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "strokeDash": {
- "description": "strokeDash in canvas pixels",
- "type": "number"
- },
- "strokeGap": {
- "description": "strokeGap in canvas pixels",
- "type": "number"
- },
- "strokeTrimEnd": {
- "description": "strokeTrimEnd (native unit)",
- "type": "number"
- },
- "strokeTrimOffset": {
- "description": "strokeTrimOffset (native unit)",
- "type": "number"
- },
- "strokeTrimStart": {
- "description": "strokeTrimStart (native unit)",
- "type": "number"
- },
- "strokeWidth": {
- "description": "strokeWidth in canvas pixels",
- "type": "number"
- },
- "textBackgroundColor": {
- "description": "textBackgroundColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textBgRadiusBottomLeft": {
- "description": "textBgRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "textBgRadiusBottomRight": {
- "description": "textBgRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "textBgRadiusTopLeft": {
- "description": "textBgRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "textBgRadiusTopRight": {
- "description": "textBgRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "textColor": {
- "description": "textColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textStrokeColor": {
- "description": "textStrokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
- "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "textStrokeDash": {
- "description": "textStrokeDash in canvas pixels",
- "type": "number"
- },
- "textStrokeGap": {
- "description": "textStrokeGap in canvas pixels",
- "type": "number"
- },
- "textStrokeWidth": {
- "description": "textStrokeWidth in canvas pixels",
- "type": "number"
- },
- "timestamp": {
- "description": "Clip-relative time in seconds",
- "minimum": 0,
- "type": "number"
- },
- "videoCornerRadiusBottomLeft": {
- "description": "videoCornerRadiusBottomLeft in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusBottomRight": {
- "description": "videoCornerRadiusBottomRight in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusTopLeft": {
- "description": "videoCornerRadiusTopLeft in canvas pixels",
- "type": "number"
- },
- "videoCornerRadiusTopRight": {
- "description": "videoCornerRadiusTopRight in canvas pixels",
- "type": "number"
- },
- "width": {
- "description": "Width in canvas pixels (0 allowed — e.g. a bar that draws in from 0)",
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "timestamp"
- ],
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "backgroundBlur": {
+ "description": "Backdrop blur behind the element",
+ "type": "number"
+ },
+ "bezier": {
+ "description": "Cubic-bezier [x1,y1,x2,y2]; used when interpolation is 'custom'.",
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "bezier_overrides": {
+ "additionalProperties": {
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 4,
+ "minItems": 4,
+ "type": "array"
+ },
+ "description": "Per-property cubic-bezier override, e.g. {\"opacity\":[.4,0,.6,1]}, when two `custom`-eased properties in this entry need DIFFERENT curves. Keys must be properties present in this entry.",
+ "propertyNames": {
+ "enum": [
+ "positionX",
+ "positionY",
+ "width",
+ "height",
+ "rotation",
+ "scaleX",
+ "scaleY",
+ "rotateX",
+ "rotateY",
+ "cropX",
+ "cropY",
+ "cropWidth",
+ "cropHeight",
+ "opacity",
+ "blur",
+ "backgroundBlur",
+ "strokeWidth",
+ "strokeDash",
+ "strokeGap",
+ "strokeTrimStart",
+ "strokeTrimEnd",
+ "strokeTrimOffset",
+ "textStrokeWidth",
+ "textStrokeDash",
+ "textStrokeGap",
+ "imageBorderWidth",
+ "shadowOffsetX",
+ "shadowOffsetY",
+ "shadowBlur",
+ "shadowSpread",
+ "borderRadiusTopLeft",
+ "borderRadiusTopRight",
+ "borderRadiusBottomRight",
+ "borderRadiusBottomLeft",
+ "imageCornerRadiusTopLeft",
+ "imageCornerRadiusTopRight",
+ "imageCornerRadiusBottomRight",
+ "imageCornerRadiusBottomLeft",
+ "videoCornerRadiusTopLeft",
+ "videoCornerRadiusTopRight",
+ "videoCornerRadiusBottomRight",
+ "videoCornerRadiusBottomLeft",
+ "fontSize",
+ "lineHeight",
+ "letterSpacing",
+ "paddingTop",
+ "paddingRight",
+ "paddingBottom",
+ "paddingLeft",
+ "textBgRadiusTopLeft",
+ "textBgRadiusTopRight",
+ "textBgRadiusBottomRight",
+ "textBgRadiusBottomLeft",
+ "fillColor",
+ "strokeColor",
+ "textStrokeColor",
+ "imageBorderColor",
+ "textColor",
+ "textBackgroundColor",
+ "shadowColor"
+ ],
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "blur": {
+ "description": "Layer blur",
+ "type": "number"
+ },
+ "borderRadiusBottomLeft": {
+ "description": "borderRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusBottomRight": {
+ "description": "borderRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusTopLeft": {
+ "description": "borderRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "borderRadiusTopRight": {
+ "description": "borderRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "cropHeight": {
+ "description": "cropHeight (native unit)",
+ "type": "number"
+ },
+ "cropWidth": {
+ "description": "cropWidth (native unit)",
+ "type": "number"
+ },
+ "cropX": {
+ "description": "cropX (native unit)",
+ "type": "number"
+ },
+ "cropY": {
+ "description": "cropY (native unit)",
+ "type": "number"
+ },
+ "fillColor": {
+ "description": "fillColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "fontSize": {
+ "description": "Font size in CANVAS PIXELS (same unit as the top-level fontSize — NOT a fraction).",
+ "type": "number"
+ },
+ "height": {
+ "description": "Height in canvas pixels (0 allowed)",
+ "minimum": 0,
+ "type": "number"
+ },
+ "imageBorderColor": {
+ "description": "imageBorderColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "imageBorderWidth": {
+ "description": "imageBorderWidth in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusBottomLeft": {
+ "description": "imageCornerRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusBottomRight": {
+ "description": "imageCornerRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusTopLeft": {
+ "description": "imageCornerRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "imageCornerRadiusTopRight": {
+ "description": "imageCornerRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "interpolation": {
+ "description": "Easing for THIS entry, applied to every property in it (default easeInOut). NOT `easing`.",
+ "enum": [
+ "linear",
+ "easeInOut",
+ "easeIn",
+ "easeOut",
+ "sigmoid",
+ "smootherstep",
+ "smoothstep",
+ "hold",
+ "easeInBack",
+ "easeOutBack",
+ "easeInOutBack",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "interpolation_overrides": {
+ "additionalProperties": {
+ "enum": [
+ "linear",
+ "easeInOut",
+ "easeIn",
+ "easeOut",
+ "sigmoid",
+ "smootherstep",
+ "smoothstep",
+ "hold",
+ "easeInBack",
+ "easeOutBack",
+ "easeInOutBack",
+ "custom"
+ ],
+ "type": "string"
+ },
+ "description": "Per-property easing override, e.g. {\"opacity\":\"linear\"} while the rest use `interpolation`. Keys must be keyframable properties present in this entry.",
+ "propertyNames": {
+ "enum": [
+ "positionX",
+ "positionY",
+ "width",
+ "height",
+ "rotation",
+ "scaleX",
+ "scaleY",
+ "rotateX",
+ "rotateY",
+ "cropX",
+ "cropY",
+ "cropWidth",
+ "cropHeight",
+ "opacity",
+ "blur",
+ "backgroundBlur",
+ "strokeWidth",
+ "strokeDash",
+ "strokeGap",
+ "strokeTrimStart",
+ "strokeTrimEnd",
+ "strokeTrimOffset",
+ "textStrokeWidth",
+ "textStrokeDash",
+ "textStrokeGap",
+ "imageBorderWidth",
+ "shadowOffsetX",
+ "shadowOffsetY",
+ "shadowBlur",
+ "shadowSpread",
+ "borderRadiusTopLeft",
+ "borderRadiusTopRight",
+ "borderRadiusBottomRight",
+ "borderRadiusBottomLeft",
+ "imageCornerRadiusTopLeft",
+ "imageCornerRadiusTopRight",
+ "imageCornerRadiusBottomRight",
+ "imageCornerRadiusBottomLeft",
+ "videoCornerRadiusTopLeft",
+ "videoCornerRadiusTopRight",
+ "videoCornerRadiusBottomRight",
+ "videoCornerRadiusBottomLeft",
+ "fontSize",
+ "lineHeight",
+ "letterSpacing",
+ "paddingTop",
+ "paddingRight",
+ "paddingBottom",
+ "paddingLeft",
+ "textBgRadiusTopLeft",
+ "textBgRadiusTopRight",
+ "textBgRadiusBottomRight",
+ "textBgRadiusBottomLeft",
+ "fillColor",
+ "strokeColor",
+ "textStrokeColor",
+ "imageBorderColor",
+ "textColor",
+ "textBackgroundColor",
+ "shadowColor"
+ ],
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "letterSpacing": {
+ "description": "Letter spacing in canvas pixels.",
+ "type": "number"
+ },
+ "lineHeight": {
+ "description": "lineHeight (native unit)",
+ "type": "number"
+ },
+ "opacity": {
+ "description": "Opacity 0-100",
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ },
+ "paddingBottom": {
+ "description": "paddingBottom in canvas pixels",
+ "type": "number"
+ },
+ "paddingLeft": {
+ "description": "paddingLeft in canvas pixels",
+ "type": "number"
+ },
+ "paddingRight": {
+ "description": "paddingRight in canvas pixels",
+ "type": "number"
+ },
+ "paddingTop": {
+ "description": "paddingTop in canvas pixels",
+ "type": "number"
+ },
+ "positionX": {
+ "description": "X position in canvas pixels (NOT `x`). Same origin as the element's top-level x: `x` is the left edge, except TEXT where alignment picks it: left→left, center→centre, right→right.",
+ "type": "number"
+ },
+ "positionY": {
+ "description": "Y position in canvas pixels (NOT `y`). Same origin as the element's top-level y: for TEXT `y` is the vertical CENTRE when centre-aligned and the TOP otherwise; every other type uses the top. y_anchor applies to the element's own y, NOT to keyframe values, so read the element back and key off its stored y.",
+ "type": "number"
+ },
+ "rotateX": {
+ "description": "rotateX (native unit)",
+ "type": "number"
+ },
+ "rotateY": {
+ "description": "rotateY (native unit)",
+ "type": "number"
+ },
+ "rotation": {
+ "description": "Rotation in degrees",
+ "type": "number"
+ },
+ "scaleX": {
+ "description": "Horizontal scale multiplier (1 = 100%)",
+ "type": "number"
+ },
+ "scaleY": {
+ "description": "Vertical scale multiplier (1 = 100%)",
+ "type": "number"
+ },
+ "shadowBlur": {
+ "description": "shadowBlur in canvas pixels",
+ "type": "number"
+ },
+ "shadowColor": {
+ "description": "shadowColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "shadowOffsetX": {
+ "description": "shadowOffsetX in canvas pixels",
+ "type": "number"
+ },
+ "shadowOffsetY": {
+ "description": "shadowOffsetY in canvas pixels",
+ "type": "number"
+ },
+ "shadowSpread": {
+ "description": "shadowSpread in canvas pixels",
+ "type": "number"
+ },
+ "strokeColor": {
+ "description": "strokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "strokeDash": {
+ "description": "strokeDash in canvas pixels",
+ "type": "number"
+ },
+ "strokeGap": {
+ "description": "strokeGap in canvas pixels",
+ "type": "number"
+ },
+ "strokeTrimEnd": {
+ "description": "strokeTrimEnd (native unit)",
+ "type": "number"
+ },
+ "strokeTrimOffset": {
+ "description": "strokeTrimOffset (native unit)",
+ "type": "number"
+ },
+ "strokeTrimStart": {
+ "description": "strokeTrimStart (native unit)",
+ "type": "number"
+ },
+ "strokeWidth": {
+ "description": "strokeWidth in canvas pixels",
+ "type": "number"
+ },
+ "textBackgroundColor": {
+ "description": "textBackgroundColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textBgRadiusBottomLeft": {
+ "description": "textBgRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusBottomRight": {
+ "description": "textBgRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusTopLeft": {
+ "description": "textBgRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "textBgRadiusTopRight": {
+ "description": "textBgRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "textColor": {
+ "description": "textColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textStrokeColor": {
+ "description": "textStrokeColor as #rrggbb or #rrggbbaa (alpha = opacity)",
+ "pattern": "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "textStrokeDash": {
+ "description": "textStrokeDash in canvas pixels",
+ "type": "number"
+ },
+ "textStrokeGap": {
+ "description": "textStrokeGap in canvas pixels",
+ "type": "number"
+ },
+ "textStrokeWidth": {
+ "description": "textStrokeWidth in canvas pixels",
+ "type": "number"
+ },
+ "timestamp": {
+ "description": "Clip-relative time in seconds",
+ "minimum": 0,
+ "type": "number"
+ },
+ "videoCornerRadiusBottomLeft": {
+ "description": "videoCornerRadiusBottomLeft in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusBottomRight": {
+ "description": "videoCornerRadiusBottomRight in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusTopLeft": {
+ "description": "videoCornerRadiusTopLeft in canvas pixels",
+ "type": "number"
+ },
+ "videoCornerRadiusTopRight": {
+ "description": "videoCornerRadiusTopRight in canvas pixels",
+ "type": "number"
+ },
+ "width": {
+ "description": "Width in canvas pixels (0 allowed — e.g. a bar that draws in from 0)",
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "timestamp"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / returning / description
Previous value: -"Declare what comes back, the way get_clip's `select` shapes a read. Omit it and you get ids, the measured layout, and the clip audit in compact form — which names every problem but drops the explanatory prose. Values: 'ids' (element_id per result), 'layout' (the measured text fit — font_size_px, text_width_px, natural_width_px, line_count, fits_width/fits_height/fits — `fits` is the WIDTH check (the widest rendered line inside the box), `fits_height` is the separate height one — plus an `adjusted` entry whenever the measured line box replaced the height you sent; widen a box to natural_width_px, NOT text_width_px, which is the widest RENDERED line and so a lower bound on text that is already wrapping; plus `placement` {y_anchor, top, center, bottom} — where the box landed and what your `y` meant, emitted only when the origin was implicit or resolves to 'center'. Compare placement.center with a container's centre line to verify centring: a mis-anchored label is the one layout error nothing else reports), 'qa.codes' (audit counts and summary plus severity/code/element_ids per finding), 'qa' (the same audit with the full message and suggested fix on every finding — ask for this when a code alone isn't enough to act on). ERROR-severity findings always come back with their full message whichever you choose — including `returning:[]` and `['ids']`, which suppress WARNINGS only. A failed item always returns complete. Pass [] for just {total, succeeded, failed} plus any errors, the leanest write."New value: +"Declare what comes back, the way get_clip's `select` shapes a read. Omit it and you get ids, the measured layout, and the clip audit in compact form — which names every problem but drops the explanatory prose. Values: 'ids' (element_id per result), 'layout' (the measured text fit — font_size_px, text_width_px, natural_width_px, line_count, fits_width/fits_height/fits — `fits` is the WIDTH check (the widest rendered line inside the box), `fits_height` is the separate height one — plus an `adjusted` entry whenever the measured line box replaced the height you sent; widen a box to natural_width_px, NOT text_width_px, which is the widest RENDERED line and so a lower bound on text that is already wrapping; plus `placement` {y_anchor, top, center, bottom} — where the box landed and what your `y` meant, emitted only when the origin was implicit or resolves to 'center'. Compare placement.center with a container's centre line to verify centring: a mis-anchored label is the one layout error nothing else reports), 'qa.codes' (audit counts and summary plus severity/code/element_ids per finding), 'qa' (the same audit with the full message and suggested fix on every finding — ask for this when a code alone isn't enough to act on). A text element measured on a fallback face is listed in top-level `font_warnings` whichever you choose. ERROR-severity findings always come back with their full message whichever you choose — including `returning:[]` and `['ids']`, which suppress WARNINGS only. A failed item always returns complete. Pass [] for just {total, succeeded, failed} plus any errors, the leanest write."