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
| Option | Type | Default | Description |
|---|---|---|---|
controls | array of "brightness" | "contrast" | "saturation" | "exposure" | "gamma" | "clarity" | "vignette" | ["brightness","contrast","saturation","exposure","gamma",… | Parameters shown, in order; others are rejected. |
ranges | object | {} | Slider bounds per parameter, overriding the built-in range. |
defaults | object | {} | Values applied to a freshly loaded image. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
presets | array of string | object | ["grayscale","sepia","vintage","cool","warm","invert"] | Presets in display order: built-in names or custom { name, label, matrix }. |
defaultPreset | string | null | null | Preset applied to a freshly loaded image, or null. |
defaultStrength | number | 1 | Blend strength a newly chosen preset starts with (0..1). |
strength | boolean | false | Show a blend strength slider. Off by default: the strength comes from defaultStrength. |
strengthRange | object | {"min":0,"max":1,"step":0.01} | Bounds and step of the strength slider when shown; with enforce, the accepted range. |
thumbnails | boolean | true | Render a live thumbnail per preset instead of a text button. On by default. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
modes | array of "pixelate" | "blur" | ["pixelate","blur"] | Redaction modes offered (pixelate, blur). |
shapes | array of "rect" | "path" | ["rect","path"] | Region shapes the user may draw (rect, path). |
defaultMode | "pixelate" | "blur" | "pixelate" | Mode a new region starts with. |
defaultAmount | number | 12 | Cell size or blur radius a new region starts with, in source px. |
amountRange | object | {"min":2,"max":128,"step":1} | Amounts accepted with enforce; the UI has no slider, new regions use defaultAmount. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
shapes | array of "rect" | "ellipse" | "line" | "arrow" | "path" | "text" | ["rect","ellipse","line","arrow","path","text"] | Shape tools offered, in order. |
palette | array of string | [] | Hex swatches for strokes and fills; empty shows the free picker only. |
defaultStroke | object | {"color":"#ff3b30","width":4} | Colour and width a new shape starts with. |
widthRange | object | {"min":1,"max":64,"step":1} | Bounds and step of the stroke width slider. |
fonts | array of object | [{"id":"font.roboto","hash":"56a45233d29f11b4dfb86d248e92… | Font assets offered for text: { id, hash, url?, label? }; the first is the default. |
defaultText | string | "" | Text a new text shape starts with; empty uses the locale default. |
fill | boolean | true | Allow filled rectangles and ellipses. |
sizeRange | object | {"min":6,"max":200,"step":1} | Font size bounds for text, in source px. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
aspects | array of object | [{"label":"crop.aspect.free","value":null},{"label":"crop… | Aspect presets in menu order; value null = free, -1 = the source ratio. |
defaultAspect | number | null | null | Aspect applied on load, or null. |
enforce | boolean | false | Enforce rotation, flip, aspect and minSize constraints in logs. |
rotation | boolean | true | Allow rotation. |
flip | boolean | true | Allow flips. |
rotationStep | number | 0.5 | Rotation slider step in degrees. |
minSize | object { width, height } | null | null | Smallest crop in source pixels, or null. |
shape | "rect" | "circle" | "rect" | rect, or circle for a round avatar (square aspect, round mask, transparent outside). |
reset | boolean | true | Offer 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
| Option | Type | Default | Description |
|---|---|---|---|
palette | array of string | [] | Hex swatches offered; empty shows the free picker only. |
default | string | null | null | Colour applied on load, or null for transparent. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
library | array of object | [] | Sticker images offered: { id, hash, url?, label? }. |
upload | boolean | true | Allow uploading images as stickers. |
max | integer | null | null | Maximum number of stickers on one image, or null. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
styles | array of "solid" | "inset" | "polaroid" | ["solid","inset","polaroid"] | Frame styles offered (solid, inset, polaroid). |
palette | array of string | [] | Hex swatches for the frame colour; empty shows the free picker only. |
thicknessRange | object | {"min":0,"max":512,"step":1} | Thicknesses accepted with enforce, in source px; the UI has no slider, defaults.thickness applies. |
radiusRange | object | {"min":0,"max":512,"step":1} | Bounds and step of the corner radius slider, in source px. |
defaults | object | {"style":"solid","color":"#ffffff","thickness":24,"radius… | Values a new frame starts with. |
enforce | boolean | false | Reject 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
| Option | Type | Default | Description |
|---|---|---|---|
defaults | object | {} | Values a new watermark starts with; with source the tool starts with it applied. |
lock | boolean | false | Fix the watermark: deviating sets and clears are rejected, export needs it present. |
anchors | array of "tl" | "tc" | "tr" | "cl" | "c" | "cr" | "bl" | "bc" | "br" | ["tl","tc","tr","cl","c","cr","bl","bc","br"] | Anchors offered. |
text | boolean | true | Allow text watermarks. |
image | boolean | true | Allow image watermarks. |
assets | array of object | [] | Image assets offered as watermarks: { id, hash, url?, label? }. |
scaleRange | object | {"min":0.02,"max":1,"step":0.01} | Bounds and step of the scale slider (fraction of the image width). |
opacityRange | object | {"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
| Option | Type | Default | Description |
|---|---|---|---|
presets | array of object | [] | Quick picks: { label, width?, height? }. |
max | object { width, height } | null | null | Largest output allowed, or null. |
upscale | boolean | true | Allow output larger than the source. |
fits | array of "contain" | "cover" | "fill" | ["contain","cover","fill"] | Fit modes offered. |
defaultFit | "contain" | "cover" | "fill" | "contain" | Fit a new target starts with. |
enforce | boolean | false | Reject 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
}