Skip to content

Options reference

Generated from the option schemas of the first-party plugins. Every plugin exposes plugin.configure(partial); the same keys work in the pluginOptions map of the element, the wrappers and the server handler. Options tune behaviour and constrain edits; they never carry pixel data, so a render never depends on them. Constraints are enforced on the client and the server (OPTION_VIOLATION).

finetune

OptionTypeDefaultDescription
controlsarray of "brightness" | "contrast" | "saturation" | "exposure" | "gamma" | "clarity" | "vignette"["brightness","contrast","saturation","exposure","gamma",…Parameters shown, in order; others are rejected.
rangesobject{}Slider bounds per parameter, overriding the built-in range.
defaultsobject{}Values applied to a freshly loaded image.
enforcebooleanfalseReject ops that touch hidden controls or leave the configured ranges.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "controls": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "brightness",
          "contrast",
          "saturation",
          "exposure",
          "gamma",
          "clarity",
          "vignette"
        ]
      }
    },
    "ranges": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "brightness",
          "contrast",
          "saturation",
          "exposure",
          "gamma",
          "clarity",
          "vignette"
        ]
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "step": {
            "type": "number",
            "exclusiveMinimum": 0
          }
        },
        "required": [
          "min",
          "max",
          "step"
        ],
        "additionalProperties": false
      }
    },
    "defaults": {
      "type": "object",
      "properties": {
        "brightness": {
          "type": "number",
          "minimum": -1,
          "maximum": 1
        },
        "contrast": {
          "type": "number",
          "minimum": -1,
          "maximum": 1
        },
        "saturation": {
          "type": "number",
          "minimum": -1,
          "maximum": 1
        },
        "exposure": {
          "type": "number",
          "minimum": -3,
          "maximum": 3
        },
        "gamma": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 10
        },
        "clarity": {
          "type": "number",
          "minimum": -1,
          "maximum": 1
        },
        "vignette": {
          "type": "number",
          "minimum": -1,
          "maximum": 1
        }
      },
      "additionalProperties": false
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "controls",
    "ranges",
    "defaults",
    "enforce"
  ],
  "additionalProperties": false
}

filter

OptionTypeDefaultDescription
presetsarray of string | object["grayscale","sepia","vintage","cool","warm","invert"]Presets in display order: built-in names or custom { name, label, matrix }.
defaultPresetstring | nullnullPreset applied to a freshly loaded image, or null.
defaultStrengthnumber1Blend strength a newly chosen preset starts with (0..1).
strengthbooleanfalseShow a blend strength slider. Off by default: the strength comes from defaultStrength.
strengthRangeobject{"min":0,"max":1,"step":0.01}Bounds and step of the strength slider when shown; with enforce, the accepted range.
thumbnailsbooleantrueRender a live thumbnail per preset instead of a text button. On by default.
enforcebooleanfalseReject logs whose preset is not in presets; custom presets must match a configured matrix.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "presets": {
      "minItems": 1,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1
              },
              "label": {
                "type": "string",
                "minLength": 1
              },
              "matrix": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 5,
                    "maxItems": 5
                  },
                  {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 5,
                    "maxItems": 5
                  },
                  {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 5,
                    "maxItems": 5
                  },
                  {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      },
                      {
                        "type": "number"
                      }
                    ],
                    "items": false,
                    "minItems": 5,
                    "maxItems": 5
                  }
                ],
                "items": false,
                "minItems": 4,
                "maxItems": 4
              }
            },
            "required": [
              "name",
              "matrix"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "defaultPreset": {
      "type": [
        "string",
        "null"
      ]
    },
    "defaultStrength": {
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "strength": {
      "type": "boolean"
    },
    "strengthRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 0
        },
        "max": {
          "type": "number",
          "maximum": 1
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "thumbnails": {
      "type": "boolean"
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "presets",
    "defaultPreset",
    "defaultStrength",
    "strength",
    "strengthRange",
    "thumbnails",
    "enforce"
  ],
  "additionalProperties": false
}

redact

OptionTypeDefaultDescription
modesarray of "pixelate" | "blur"["pixelate","blur"]Redaction modes offered (pixelate, blur).
shapesarray of "rect" | "path"["rect","path"]Region shapes the user may draw (rect, path).
defaultMode"pixelate" | "blur""pixelate"Mode a new region starts with.
defaultAmountnumber12Cell size or blur radius a new region starts with, in source px.
amountRangeobject{"min":2,"max":128,"step":1}Amounts accepted with enforce; the UI has no slider, new regions use defaultAmount.
enforcebooleanfalseReject regions with modes, shapes or amounts outside the options.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "modes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pixelate",
          "blur"
        ]
      }
    },
    "shapes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "rect",
          "path"
        ]
      }
    },
    "defaultMode": {
      "type": "string",
      "enum": [
        "pixelate",
        "blur"
      ]
    },
    "defaultAmount": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 4096
    },
    "amountRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 4096
        },
        "max": {
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 4096
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "modes",
    "shapes",
    "defaultMode",
    "defaultAmount",
    "amountRange",
    "enforce"
  ],
  "additionalProperties": false
}

annotate

OptionTypeDefaultDescription
shapesarray of "rect" | "ellipse" | "line" | "arrow" | "path" | "text"["rect","ellipse","line","arrow","path","text"]Shape tools offered, in order.
palettearray of string[]Hex swatches for strokes and fills; empty shows the free picker only.
defaultStrokeobject{"color":"#ff3b30","width":4}Colour and width a new shape starts with.
widthRangeobject{"min":1,"max":64,"step":1}Bounds and step of the stroke width slider.
fontsarray of object[{"id":"font.roboto","hash":"56a45233d29f11b4dfb86d248e92…Font assets offered for text: { id, hash, url?, label? }; the first is the default.
defaultTextstring""Text a new text shape starts with; empty uses the locale default.
fillbooleantrueAllow filled rectangles and ellipses.
sizeRangeobject{"min":6,"max":200,"step":1}Font size bounds for text, in source px.
enforcebooleanfalseReject shapes, fonts, sizes, widths and (with a palette) colours outside the options.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "shapes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "rect",
          "ellipse",
          "line",
          "arrow",
          "path",
          "text"
        ]
      }
    },
    "palette": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
      }
    },
    "defaultStroke": {
      "type": "object",
      "properties": {
        "color": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
        },
        "width": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "color",
        "width"
      ],
      "additionalProperties": false
    },
    "widthRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "max": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "fonts": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "hash": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          },
          "url": {
            "type": "string",
            "minLength": 1
          },
          "label": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id",
          "hash"
        ],
        "additionalProperties": false
      }
    },
    "defaultText": {
      "type": "string"
    },
    "fill": {
      "type": "boolean"
    },
    "sizeRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "max": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "shapes",
    "palette",
    "defaultStroke",
    "widthRange",
    "fonts",
    "defaultText",
    "fill",
    "sizeRange",
    "enforce"
  ],
  "additionalProperties": false
}

crop

OptionTypeDefaultDescription
aspectsarray of object[{"label":"crop.aspect.free","value":null},{"label":"crop…Aspect presets in menu order; value null = free, -1 = the source ratio.
defaultAspectnumber | nullnullAspect applied on load, or null.
enforcebooleanfalseEnforce rotation, flip, aspect and minSize constraints in logs.
rotationbooleantrueAllow rotation.
flipbooleantrueAllow flips.
rotationStepnumber0.5Rotation slider step in degrees.
minSizeobject { width, height } | nullnullSmallest crop in source pixels, or null.
shape"rect" | "circle""rect"rect, or circle for a round avatar (square aspect, round mask, transparent outside).
resetbooleantrueOffer the Reset crop button; off with enforce, crop.reset is rejected.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "aspects": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1
          },
          "value": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  {
                    "type": "number",
                    "const": -1
                  }
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "label",
          "value"
        ],
        "additionalProperties": false
      }
    },
    "defaultAspect": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ]
    },
    "enforce": {
      "type": "boolean"
    },
    "rotation": {
      "type": "boolean"
    },
    "flip": {
      "type": "boolean"
    },
    "rotationStep": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 90
    },
    "minSize": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "width": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "height": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "width",
            "height"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "shape": {
      "type": "string",
      "enum": [
        "rect",
        "circle"
      ]
    },
    "reset": {
      "type": "boolean"
    }
  },
  "required": [
    "aspects",
    "defaultAspect",
    "enforce",
    "rotation",
    "flip",
    "rotationStep",
    "minSize",
    "shape",
    "reset"
  ],
  "additionalProperties": false
}

fill

OptionTypeDefaultDescription
palettearray of string[]Hex swatches offered; empty shows the free picker only.
defaultstring | nullnullColour applied on load, or null for transparent.
enforcebooleanfalseReject colours outside the palette.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "palette": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
      }
    },
    "default": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
        },
        {
          "type": "null"
        }
      ]
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "palette",
    "default",
    "enforce"
  ],
  "additionalProperties": false
}

sticker

OptionTypeDefaultDescription
libraryarray of object[]Sticker images offered: { id, hash, url?, label? }.
uploadbooleantrueAllow uploading images as stickers.
maxinteger | nullnullMaximum number of stickers on one image, or null.
enforcebooleanfalseReject stickers outside the library (uploads off) or above max.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "library": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "hash": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          },
          "url": {
            "type": "string",
            "minLength": 1
          },
          "label": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id",
          "hash"
        ],
        "additionalProperties": false
      }
    },
    "upload": {
      "type": "boolean"
    },
    "max": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "library",
    "upload",
    "max",
    "enforce"
  ],
  "additionalProperties": false
}

frame

OptionTypeDefaultDescription
stylesarray of "solid" | "inset" | "polaroid"["solid","inset","polaroid"]Frame styles offered (solid, inset, polaroid).
palettearray of string[]Hex swatches for the frame colour; empty shows the free picker only.
thicknessRangeobject{"min":0,"max":512,"step":1}Thicknesses accepted with enforce, in source px; the UI has no slider, defaults.thickness applies.
radiusRangeobject{"min":0,"max":512,"step":1}Bounds and step of the corner radius slider, in source px.
defaultsobject{"style":"solid","color":"#ffffff","thickness":24,"radius…Values a new frame starts with.
enforcebooleanfalseReject styles, thickness or radius outside the options.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "styles": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "solid",
          "inset",
          "polaroid"
        ]
      }
    },
    "palette": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
      }
    },
    "thicknessRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "max": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "radiusRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "max": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "defaults": {
      "type": "object",
      "properties": {
        "style": {
          "type": "string",
          "enum": [
            "solid",
            "inset",
            "polaroid"
          ]
        },
        "color": {
          "type": "string",
          "pattern": "^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$"
        },
        "thickness": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "radius": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        }
      },
      "required": [
        "style",
        "color",
        "thickness",
        "radius"
      ],
      "additionalProperties": false
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "styles",
    "palette",
    "thicknessRange",
    "radiusRange",
    "defaults",
    "enforce"
  ],
  "additionalProperties": false
}

watermark

OptionTypeDefaultDescription
defaultsobject{}Values a new watermark starts with; with source the tool starts with it applied.
lockbooleanfalseFix the watermark: deviating sets and clears are rejected, export needs it present.
anchorsarray of "tl" | "tc" | "tr" | "cl" | "c" | "cr" | "bl" | "bc" | "br"["tl","tc","tr","cl","c","cr","bl","bc","br"]Anchors offered.
textbooleantrueAllow text watermarks.
imagebooleantrueAllow image watermarks.
assetsarray of object[]Image assets offered as watermarks: { id, hash, url?, label? }.
scaleRangeobject{"min":0.02,"max":1,"step":0.01}Bounds and step of the scale slider (fraction of the image width).
opacityRangeobject{"min":0,"max":1,"step":0.01}Opacities accepted with enforce; the UI has no slider, defaults.opacity applies.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "defaults": {
      "type": "object",
      "properties": {
        "source": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "asset"
                },
                "asset": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "kind",
                "asset"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "const": "text"
                },
                "text": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                },
                "font": {
                  "type": "string",
                  "minLength": 1
                },
                "color": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    }
                  ],
                  "items": false,
                  "minItems": 4,
                  "maxItems": 4
                }
              },
              "required": [
                "kind",
                "text",
                "font",
                "color"
              ],
              "additionalProperties": false
            }
          ]
        },
        "anchor": {
          "type": "string",
          "enum": [
            "tl",
            "tc",
            "tr",
            "cl",
            "c",
            "cr",
            "bl",
            "bc",
            "br"
          ]
        },
        "margin": {
          "type": "number",
          "minimum": 0,
          "maximum": 4096
        },
        "scale": {
          "type": "number",
          "exclusiveMinimum": 0,
          "maximum": 1
        },
        "opacity": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "tile": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "gapX": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 4096
                },
                "gapY": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 4096
                },
                "rotation": {
                  "type": "number"
                }
              },
              "required": [
                "gapX",
                "gapY",
                "rotation"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "lock": {
      "type": "boolean"
    },
    "anchors": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "tl",
          "tc",
          "tr",
          "cl",
          "c",
          "cr",
          "bl",
          "bc",
          "br"
        ]
      }
    },
    "text": {
      "type": "boolean"
    },
    "image": {
      "type": "boolean"
    },
    "assets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "hash": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          },
          "url": {
            "type": "string",
            "minLength": 1
          },
          "label": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id",
          "hash"
        ],
        "additionalProperties": false
      }
    },
    "scaleRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "max": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "opacityRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "max": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "defaults",
    "lock",
    "anchors",
    "text",
    "image",
    "assets",
    "scaleRange",
    "opacityRange"
  ],
  "additionalProperties": false
}

resize

OptionTypeDefaultDescription
presetsarray of object[]Quick picks: { label, width?, height? }.
maxobject { width, height } | nullnullLargest output allowed, or null.
upscalebooleantrueAllow output larger than the source.
fitsarray of "contain" | "cover" | "fill"["contain","cover","fill"]Fit modes offered.
defaultFit"contain" | "cover" | "fill""contain"Fit a new target starts with.
enforcebooleanfalseReject targets above max, disallowed fits or upscaling.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "presets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1
          },
          "width": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 65535
          },
          "height": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 65535
          }
        },
        "required": [
          "label"
        ],
        "additionalProperties": false
      }
    },
    "max": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "width": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 65535
            },
            "height": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 65535
            }
          },
          "required": [
            "width",
            "height"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "upscale": {
      "type": "boolean"
    },
    "fits": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "contain",
          "cover",
          "fill"
        ]
      }
    },
    "defaultFit": {
      "type": "string",
      "enum": [
        "contain",
        "cover",
        "fill"
      ]
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "presets",
    "max",
    "upscale",
    "fits",
    "defaultFit",
    "enforce"
  ],
  "additionalProperties": false
}