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 createRenderer of @sealpixel/render. 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).

assist ​

OptionTypeDefaultDescription
run"select" | "load" | "manual""select"When the detector runs: select (the tool is chosen), load (right after an image loads; fetches runtime and model then), manual (only on request).
timeoutMsinteger20000A detection that takes longer fails with a message instead of waiting forever.
classesarray of string[]Labels to ask for and keep; empty means everything the detector offers.
minScorenumber0.6Proposals below this score are dropped (0..1).
maxSuggestionsinteger50At most this many proposals, best first.
modelobject { url, sha256, inputSize } | nullnullWhere the detector fetches its model: { url, sha256, inputSize? }. The SDK ships no weights.
wasmPathsstring | nullnullDirectory the ML runtime loads its WebAssembly from, with a trailing slash.
paddingnumber0.02Grown around each proposed rect before it becomes a redaction, in image units.
mode"pixelate" | "blur" | "mosaic" | nullnullMode of an accepted proposal; null takes the redact default.
amountnumber | nullnullAmount of an accepted proposal in source px, at least 2; null takes the redact default.
acceptAbovenumber | nullnullProposals at or above this score are accepted without review; null keeps every decision human.
badgebooleantrueCount of open proposals on the toolbar button.
showScorebooleantrueScore chip on each proposed box.
adjustbooleantrueProposals can be moved before they are accepted.
bulkbooleantrue"Accept all" and "Reject all" in the panel.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "run": {
      "type": "string",
      "enum": [
        "select",
        "load",
        "manual"
      ]
    },
    "timeoutMs": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "classes": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "minScore": {
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "maxSuggestions": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "model": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "url": {
              "type": "string",
              "minLength": 1
            },
            "sha256": {
              "type": "string",
              "pattern": "^[0-9a-f]{64}$"
            },
            "inputSize": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "url",
            "sha256"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "wasmPaths": {
      "anyOf": [
        {
          "type": "string",
          "format": "ends_with",
          "pattern": ".*\\/$"
        },
        {
          "type": "null"
        }
      ]
    },
    "padding": {
      "type": "number",
      "minimum": 0,
      "maximum": 0.5
    },
    "mode": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "pixelate",
            "blur",
            "mosaic"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "amount": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 2,
          "maximum": 4096
        },
        {
          "type": "null"
        }
      ]
    },
    "acceptAbove": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "badge": {
      "type": "boolean"
    },
    "showScore": {
      "type": "boolean"
    },
    "adjust": {
      "type": "boolean"
    },
    "bulk": {
      "type": "boolean"
    }
  },
  "required": [
    "run",
    "timeoutMs",
    "classes",
    "minScore",
    "maxSuggestions",
    "model",
    "wasmPaths",
    "padding",
    "mode",
    "amount",
    "acceptAbove",
    "badge",
    "showScore",
    "adjust",
    "bulk"
  ],
  "additionalProperties": false
}

redact ​

OptionTypeDefaultDescription
modesarray of "pixelate" | "blur" | "mosaic"["pixelate","blur","mosaic"]Redaction modes offered (pixelate, blur, mosaic). Only mosaic leaves no information about the covered pixels.
shapesarray of "rect" | "path"["rect","path"]Region shapes the user may draw (rect, path). With enforce, rect also accepts a turned rectangle, which is written as a four-point path.
defaultMode"pixelate" | "blur" | "mosaic""pixelate"Mode a new region starts with.
defaultAmountnumber12Cell size or blur diameter a new region starts with, in source px. At least 2: a pixelate cell of one pixel shows the pixel.
amountRangeobject{"min":2,"max":128,"step":1}Amounts accepted with enforce, min at least 2; the UI has no slider, new regions use defaultAmount.
enforcebooleanfalseReject regions with modes, shapes or amounts outside the options.
transformbooleantrueHandles to resize and turn a region after it is drawn; a turned rectangle is written as a four-point path. UI only.
Full JSON Schema
json
{
  "type": "object",
  "properties": {
    "modes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "pixelate",
          "blur",
          "mosaic"
        ]
      }
    },
    "shapes": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "rect",
          "path"
        ]
      }
    },
    "defaultMode": {
      "type": "string",
      "enum": [
        "pixelate",
        "blur",
        "mosaic"
      ]
    },
    "defaultAmount": {
      "type": "number",
      "minimum": 2,
      "maximum": 4096
    },
    "amountRange": {
      "type": "object",
      "properties": {
        "min": {
          "type": "number",
          "minimum": 2,
          "maximum": 4096
        },
        "max": {
          "type": "number",
          "minimum": 2,
          "maximum": 4096
        },
        "step": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "min",
        "max",
        "step"
      ],
      "additionalProperties": false
    },
    "enforce": {
      "type": "boolean"
    },
    "transform": {
      "type": "boolean"
    }
  },
  "required": [
    "modes",
    "shapes",
    "defaultMode",
    "defaultAmount",
    "amountRange",
    "enforce",
    "transform"
  ],
  "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, ellipses and paths, and text backgrounds.
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.
transformbooleantrueHandles to resize and turn a shape after it is drawn; a turned rect, ellipse or text carries rotation. Off with enforce, a turned shape is rejected.
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"
    },
    "transform": {
      "type": "boolean"
    }
  },
  "required": [
    "shapes",
    "palette",
    "defaultStroke",
    "widthRange",
    "fonts",
    "defaultText",
    "fill",
    "sizeRange",
    "enforce",
    "transform"
  ],
  "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: a slider that straightens within ±45°, and buttons that turn by quarters.
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.
outside"forbid" | "allow""forbid"forbid keeps the crop frame inside the rotated image during drags and rotations; allow lets it reach the bounding box, where fill paints. UI only.
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"
    },
    "outside": {
      "type": "string",
      "enum": [
        "forbid",
        "allow"
      ]
    }
  },
  "required": [
    "aspects",
    "defaultAspect",
    "enforce",
    "rotation",
    "flip",
    "rotationStep",
    "minSize",
    "shape",
    "reset",
    "outside"
  ],
  "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
}

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; inside the op range of the parameter.
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
}

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.
enforcebooleanfalseReject sets outside anchors, text / image, scaleRange and opacityRange. The lock applies without it.
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
    },
    "enforce": {
      "type": "boolean"
    }
  },
  "required": [
    "defaults",
    "lock",
    "anchors",
    "text",
    "image",
    "assets",
    "scaleRange",
    "opacityRange",
    "enforce"
  ],
  "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. With max, a target needs both width and height.
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
}