changedInput schema / properties / ops / items / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "color": {
- "description": "Colour as #rrggbb or #rrggbbaa.",
- "pattern": "^#?([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "kind": {
- "const": "pixels",
- "type": "string"
- },
- "points": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Per-pixel colour. Falls back to the op's `color`."
- },
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- },
- "maxItems": 20000,
- "minItems": 1,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "points"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "from": {
- "additionalProperties": false,
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- },
- "kind": {
- "const": "line",
- "type": "string"
- },
- "thickness": {
- "default": 1,
- "exclusiveMinimum": 0,
- "maximum": 64,
- "type": "integer"
- },
- "to": {
- "additionalProperties": false,
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- }
- },
- "required": [
- "kind",
- "color",
- "from",
- "to"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "closed": {
- "default": false,
- "type": "boolean"
- },
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "fill": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Fill colour; only meaningful when closed."
- },
- "kind": {
- "const": "polyline",
- "type": "string"
- },
- "points": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- },
- "minItems": 2,
- "type": "array"
- }
- },
- "required": [
- "kind",
- "color",
- "points"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "color": {
- "description": "Outline colour.",
- "pattern": "^#?([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
- "type": "string"
- },
- "fill": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Omit for an outline only."
- },
- "kind": {
- "const": "rect",
- "type": "string"
- },
- "rect": {
- "additionalProperties": false,
- "properties": {
- "height": {
- "exclusiveMinimum": 0,
- "type": "integer"
- },
- "width": {
- "exclusiveMinimum": 0,
- "type": "integer"
- },
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y",
- "width",
- "height"
- ],
- "type": "object"
- }
- },
- "required": [
- "kind",
- "color",
- "rect"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "fill": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Colour as #rrggbb or #rrggbbaa."
- },
- "kind": {
- "const": "ellipse",
- "type": "string"
- },
- "rect": {
- "additionalProperties": false,
- "description": "Bounding box of the ellipse.",
- "properties": {
- "height": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/height"
- },
- "width": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/width"
- },
- "x": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/x"
- },
- "y": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/y"
- }
- },
- "required": [
- "x",
- "y",
- "width",
- "height"
- ],
- "type": "object"
- }
- },
- "required": [
- "kind",
- "color",
- "rect"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "at": {
- "additionalProperties": false,
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- },
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "contiguous": {
- "default": true,
- "type": "boolean"
- },
- "kind": {
- "const": "fill",
- "type": "string"
- },
- "tolerance": {
- "default": 0,
- "description": "Largest per-channel difference (0–255) still counted as the clicked colour. RGB sprites only; indexed and grayscale fills stay exact.",
- "maximum": 255,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "kind",
- "color",
- "at"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "from": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "kind": {
- "const": "replace",
- "type": "string"
- },
- "region": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
- },
- "to": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- }
- },
- "required": [
- "kind",
- "from",
- "to"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "colorA": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "colorB": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "kind": {
- "const": "dither",
- "type": "string"
- },
- "pattern": {
- "default": "bayer4",
- "enum": [
- "checker",
- "bayer2",
- "bayer4",
- "bayer8",
- "noise"
- ],
- "type": "string"
- },
- "ratio": {
- "default": 0.5,
- "description": "0 = all colorA, 1 = all colorB.",
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "rect": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
- }
- },
- "required": [
- "kind",
- "rect",
- "colorA",
- "colorB"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "direction": {
- "default": "vertical",
- "enum": [
- "vertical",
- "horizontal",
- "diagonal",
- "radial"
- ],
- "type": "string"
- },
- "dither": {
- "default": false,
- "description": "Dither the band boundaries.",
- "type": "boolean"
- },
- "from": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "kind": {
- "const": "gradient",
- "type": "string"
- },
- "rect": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
- },
- "steps": {
- "default": 4,
- "description": "Banded, not smooth — a smooth gradient is not pixel art.",
- "maximum": 64,
- "minimum": 2,
- "type": "integer"
- },
- "to": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- }
- },
- "required": [
- "kind",
- "rect",
- "from",
- "to"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "kind": {
- "const": "clear",
- "type": "string"
- },
- "region": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect",
- "description": "Omit to clear the whole cel."
- }
- },
- "required": [
- "kind"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "flipHorizontal": {
- "default": false,
- "type": "boolean"
- },
- "flipVertical": {
- "default": false,
- "type": "boolean"
- },
- "from": {
- "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
- },
- "fromFrame": {
- "exclusiveMinimum": 0,
- "type": "integer"
- },
- "fromLayer": {
- "type": "string"
- },
- "kind": {
- "const": "blit",
- "type": "string"
- },
- "skipTransparent": {
- "default": true,
- "type": "boolean"
- },
- "to": {
- "additionalProperties": false,
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- }
- },
- "required": [
- "kind",
- "from",
- "to"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "anchor": {
- "default": "top_left",
- "description": "Resolved against the glyph ink box, not the full advance box — outline and shadow never shift it.",
- "enum": [
- "top_left",
- "top",
- "top_right",
- "left",
- "center",
- "right",
- "bottom_left",
- "bottom",
- "bottom_right",
- "baseline_left",
- "baseline",
- "baseline_right"
- ],
- "type": "string"
- },
- "bold": {
- "default": 0,
- "description": "Grid-cell passes grown rightward; 0 is regular weight.",
- "maximum": 3,
- "minimum": 0,
- "type": "integer"
- },
- "color": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- "font": {
- "default": "pixel5x7",
- "description": "Name in knowledge/fonts, without the .json extension.",
- "type": "string"
- },
- "kind": {
- "const": "text",
- "type": "string"
- },
- "letterSpacing": {
- "default": 1,
- "type": "integer"
- },
- "lineSpacing": {
- "default": 1,
- "type": "integer"
- },
- "outlineColor": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Colour as #rrggbb or #rrggbbaa."
- },
- "outlineDiagonals": {
- "default": true,
- "description": "8-neighbour outline instead of 4.",
- "type": "boolean"
- },
- "scale": {
- "default": 1,
- "maximum": 8,
- "minimum": 1,
- "type": "integer"
- },
- "shadowColor": {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color",
- "description": "Colour as #rrggbb or #rrggbbaa."
- },
- "shadowOffset": {
- "additionalProperties": false,
- "default": {
- "x": 1,
- "y": 1
- },
- "properties": {
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "x",
- "y"
- ],
- "type": "object"
- },
- "text": {
- "description": "Multiline via \\n.",
- "minLength": 1,
- "type": "string"
- },
- "x": {
- "type": "integer"
- },
- "y": {
- "type": "integer"
- }
- },
- "required": [
- "kind",
- "text",
- "x",
- "y",
- "color"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "properties": {
- "kind": {
- "const": "grid",
- "type": "string"
- },
- "legend": {
- "additionalProperties": {
- "anyOf": [
- {
- "$ref": "#/properties/ops/items/anyOf/0/properties/color"
- },
- {
- "type": "null"
- }
- ],
- "description": "Colour as #rrggbb or #rrggbbaa."
- },
- "description": "One character → colour; null is transparent. '.' is transparent unless you redefine it.",
- "type": "object"
- },
- "rows": {
- "description": "Top to bottom, one character per pixel, every row the same width.",
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "maxItems": 256,
- "minItems": 1,
- "type": "array"
- },
- "transparent": {
- "default": "erase",
- "description": "Transparent cells: 'erase' clears them, so the grid's rectangle ends up exactly as written; 'skip' leaves the pixel underneath, to stamp a shape over existing art.",
- "enum": [
- "erase",
- "skip"
- ],
- "type": "string"
- },
- "x": {
- "default": 0,
- "description": "Sprite x of the grid's left column.",
- "type": "integer"
- },
- "y": {
- "default": 0,
- "description": "Sprite y of the grid's top row.",
- "type": "integer"
- }
- },
- "required": [
- "kind",
- "legend",
- "rows"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "color": {
+ "description": "Colour as #rrggbb or #rrggbbaa.",
+ "pattern": "^#?([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "kind": {
+ "const": "pixels",
+ "type": "string"
+ },
+ "points": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Per-pixel colour. Falls back to the op's `color`."
+ },
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ },
+ "maxItems": 20000,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "points"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "from": {
+ "additionalProperties": false,
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ },
+ "kind": {
+ "const": "line",
+ "type": "string"
+ },
+ "thickness": {
+ "default": 1,
+ "exclusiveMinimum": 0,
+ "maximum": 64,
+ "type": "integer"
+ },
+ "to": {
+ "additionalProperties": false,
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "kind",
+ "color",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "closed": {
+ "default": false,
+ "type": "boolean"
+ },
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "fill": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Fill colour; only meaningful when closed."
+ },
+ "kind": {
+ "const": "polyline",
+ "type": "string"
+ },
+ "points": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ },
+ "minItems": 2,
+ "type": "array"
+ }
+ },
+ "required": [
+ "kind",
+ "color",
+ "points"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "color": {
+ "description": "Outline colour.",
+ "pattern": "^#?([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
+ "type": "string"
+ },
+ "fill": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Omit for an outline only."
+ },
+ "kind": {
+ "const": "rect",
+ "type": "string"
+ },
+ "rect": {
+ "additionalProperties": false,
+ "properties": {
+ "height": {
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "width": {
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "width",
+ "height"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "kind",
+ "color",
+ "rect"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "fill": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Colour as #rrggbb or #rrggbbaa."
+ },
+ "kind": {
+ "const": "ellipse",
+ "type": "string"
+ },
+ "rect": {
+ "additionalProperties": false,
+ "description": "Bounding box of the ellipse.",
+ "properties": {
+ "height": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/height"
+ },
+ "width": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/width"
+ },
+ "x": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/x"
+ },
+ "y": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect/properties/y"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "width",
+ "height"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "kind",
+ "color",
+ "rect"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "at": {
+ "additionalProperties": false,
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ },
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "contiguous": {
+ "default": true,
+ "type": "boolean"
+ },
+ "kind": {
+ "const": "fill",
+ "type": "string"
+ },
+ "tolerance": {
+ "default": 0,
+ "description": "Largest per-channel difference (0–255) still counted as the clicked colour. RGB sprites only; indexed and grayscale fills stay exact.",
+ "maximum": 255,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "kind",
+ "color",
+ "at"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "from": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "kind": {
+ "const": "replace",
+ "type": "string"
+ },
+ "region": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
+ },
+ "to": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ }
+ },
+ "required": [
+ "kind",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "colorA": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "colorB": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "kind": {
+ "const": "dither",
+ "type": "string"
+ },
+ "pattern": {
+ "default": "bayer4",
+ "enum": [
+ "checker",
+ "bayer2",
+ "bayer4",
+ "bayer8",
+ "noise"
+ ],
+ "type": "string"
+ },
+ "ratio": {
+ "default": 0.5,
+ "description": "0 = all colorA, 1 = all colorB.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "rect": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
+ }
+ },
+ "required": [
+ "kind",
+ "rect",
+ "colorA",
+ "colorB"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "direction": {
+ "default": "vertical",
+ "enum": [
+ "vertical",
+ "horizontal",
+ "diagonal",
+ "radial"
+ ],
+ "type": "string"
+ },
+ "dither": {
+ "default": false,
+ "description": "Dither the band boundaries.",
+ "type": "boolean"
+ },
+ "from": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "kind": {
+ "const": "gradient",
+ "type": "string"
+ },
+ "rect": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
+ },
+ "steps": {
+ "default": 4,
+ "description": "Banded, not smooth — a smooth gradient is not pixel art.",
+ "maximum": 64,
+ "minimum": 2,
+ "type": "integer"
+ },
+ "to": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ }
+ },
+ "required": [
+ "kind",
+ "rect",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "kind": {
+ "const": "clear",
+ "type": "string"
+ },
+ "region": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect",
+ "description": "Omit to clear the whole cel."
+ }
+ },
+ "required": [
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "flipHorizontal": {
+ "default": false,
+ "type": "boolean"
+ },
+ "flipVertical": {
+ "default": false,
+ "type": "boolean"
+ },
+ "from": {
+ "$ref": "#/properties/ops/items/anyOf/3/properties/rect"
+ },
+ "fromFrame": {
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "fromLayer": {
+ "type": "string"
+ },
+ "kind": {
+ "const": "blit",
+ "type": "string"
+ },
+ "skipTransparent": {
+ "default": true,
+ "type": "boolean"
+ },
+ "to": {
+ "additionalProperties": false,
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "kind",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "anchor": {
+ "default": "top_left",
+ "description": "Resolved against the glyph ink box, not the full advance box — outline and shadow never shift it.",
+ "enum": [
+ "top_left",
+ "top",
+ "top_right",
+ "left",
+ "center",
+ "right",
+ "bottom_left",
+ "bottom",
+ "bottom_right",
+ "baseline_left",
+ "baseline",
+ "baseline_right"
+ ],
+ "type": "string"
+ },
+ "bold": {
+ "default": 0,
+ "description": "Grid-cell passes grown rightward; 0 is regular weight.",
+ "maximum": 3,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "color": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ "font": {
+ "default": "pixel5x7",
+ "description": "Name in knowledge/fonts, without the .json extension.",
+ "type": "string"
+ },
+ "kind": {
+ "const": "text",
+ "type": "string"
+ },
+ "letterSpacing": {
+ "default": 1,
+ "type": "integer"
+ },
+ "lineSpacing": {
+ "default": 1,
+ "type": "integer"
+ },
+ "outlineColor": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Colour as #rrggbb or #rrggbbaa."
+ },
+ "outlineDiagonals": {
+ "default": true,
+ "description": "8-neighbour outline instead of 4.",
+ "type": "boolean"
+ },
+ "scale": {
+ "default": 1,
+ "maximum": 8,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "shadowColor": {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color",
+ "description": "Colour as #rrggbb or #rrggbbaa."
+ },
+ "shadowOffset": {
+ "additionalProperties": false,
+ "default": {
+ "x": 1,
+ "y": 1
+ },
+ "properties": {
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "x",
+ "y"
+ ],
+ "type": "object"
+ },
+ "text": {
+ "description": "Multiline via \\n.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "x": {
+ "type": "integer"
+ },
+ "y": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "kind",
+ "text",
+ "x",
+ "y",
+ "color"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "kind": {
+ "const": "grid",
+ "type": "string"
+ },
+ "legend": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/properties/ops/items/anyOf/0/properties/color"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Colour as #rrggbb or #rrggbbaa."
+ },
+ "description": "One character → colour; null is transparent. '.' is transparent unless you redefine it.",
+ "type": "object"
+ },
+ "rows": {
+ "description": "Top to bottom, one character per pixel, every row the same width. Up to the canvas size.",
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "transparent": {
+ "default": "erase",
+ "description": "Transparent cells: 'erase' clears them, so the grid's rectangle ends up exactly as written; 'skip' leaves the pixel underneath, to stamp a shape over existing art.",
+ "enum": [
+ "erase",
+ "skip"
+ ],
+ "type": "string"
+ },
+ "x": {
+ "default": 0,
+ "description": "Sprite x of the grid's left column.",
+ "type": "integer"
+ },
+ "y": {
+ "default": 0,
+ "description": "Sprite y of the grid's top row.",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "kind",
+ "legend",
+ "rows"
+ ],
+ "type": "object"
+ }
+]