DarktableDevelopRecipe
| Field | Required | Description |
|---|---|---|
contrast | No | number |
crop | No | object |
curve | No | array |
exposureEV | No | number |
flipHorizontal | No | boolean |
flipVertical | No | boolean |
highlights | No | number |
lensCorrection | No | Use native embedded metadata or Lensfun; refuse absent calibration |
masks | No | array |
noiseThreshold | No | Native pre-demosaic wavelet noise threshold |
renderer | Yes | string |
rotation | No | Additional clockwise rotation after camera orientation |
saturation | No | number |
sensorCanvas | No | Unrotated, uncropped, uncorrected canvas for selecting sensor-space masks |
shadows | No | number |
sharpen | No | object |
straighten | No | number |
version | Yes | integer |
whiteBalance | No | Multipliers of native camera white-balance coefficients, not Kelvin estimates |
Complete definition
required lists fields that must be present. nullable allows a null value; it does not make the field optional. Response enums retain exact wire values for compatibility.
Field definitions: AssetDevelopMaskKind
{
"additionalProperties": false,
"properties": {
"contrast": {
"format": "double",
"maximum": 1.99,
"minimum": 0.01,
"type": "number"
},
"crop": {
"additionalProperties": false,
"properties": {
"h": {
"description": "Crop height as a fraction of the frame",
"format": "double",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"w": {
"description": "Crop width as a fraction of the frame",
"format": "double",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"x": {
"description": "Left edge of the crop as a fraction of the oriented frame width",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Top edge of the crop as a fraction of the oriented frame height",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
}
},
"required": [
"x",
"y",
"w",
"h"
],
"type": "object"
},
"curve": {
"items": {
"additionalProperties": false,
"properties": {
"x": {
"description": "Input",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Output",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
}
},
"required": [
"x",
"y"
],
"type": "object"
},
"maxItems": 20,
"minItems": 2,
"type": "array"
},
"exposureEV": {
"default": 0,
"format": "double",
"maximum": 18,
"minimum": -18,
"type": "number"
},
"flipHorizontal": {
"type": "boolean"
},
"flipVertical": {
"type": "boolean"
},
"highlights": {
"format": "double",
"maximum": 100,
"minimum": -100,
"type": "number"
},
"lensCorrection": {
"description": "Use native embedded metadata or Lensfun; refuse absent calibration",
"type": "boolean"
},
"masks": {
"items": {
"additionalProperties": false,
"properties": {
"adjustments": {
"additionalProperties": false,
"properties": {
"contrast": {
"format": "double",
"maximum": 1.99,
"minimum": 0.01,
"type": "number"
},
"curve": {
"items": {
"additionalProperties": false,
"properties": {
"x": {
"description": "Input",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Output",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
}
},
"required": [
"x",
"y"
],
"type": "object"
},
"maxItems": 20,
"minItems": 2,
"type": "array"
},
"exposureEV": {
"default": 0,
"format": "double",
"maximum": 18,
"minimum": -18,
"type": "number"
},
"highlights": {
"format": "double",
"maximum": 100,
"minimum": -100,
"type": "number"
},
"saturation": {
"format": "double",
"maximum": 2,
"minimum": 0,
"type": "number"
},
"shadows": {
"format": "double",
"maximum": 100,
"minimum": -100,
"type": "number"
}
},
"type": "object"
},
"amount": {
"default": 100,
"description": "How much of the adjustment is applied, as a percentage",
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"artifact": {
"description": "Subject, sky and background masks: the stored greyscale mask bitmap, covering the whole original image",
"nullable": true,
"pattern": "^[0-9a-f]{64}$",
"type": "string"
},
"coordinates": {
"enum": [
"sensor-active"
],
"type": "string"
},
"enabled": {
"default": true,
"description": "A disabled mask is kept but not rendered",
"type": "boolean"
},
"endX": {
"default": 0.5,
"description": "Where a linear mask has faded out, across the frame",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"endY": {
"default": 1,
"description": "Where a linear mask has faded out, down the frame",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"feather": {
"default": 50,
"description": "Softness of a radial edge as a percentage of the radius, or of a brush stroke as one of its radius",
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"id": {
"description": "Client-chosen identifier, unique within the recipe",
"maxLength": 40,
"minLength": 1,
"type": "string"
},
"invert": {
"default": false,
"description": "Apply the adjustment outside the shape instead of inside",
"type": "boolean"
},
"kind": {
"$ref": "#/components/schemas/AssetDevelopMaskKind"
},
"name": {
"default": null,
"description": "Optional name shown in the editor",
"maxLength": 60,
"minLength": 1,
"nullable": true,
"type": "string"
},
"radiusX": {
"default": 0.25,
"description": "Horizontal radius of a radial mask as a fraction of the frame width",
"format": "double",
"maximum": 1,
"minimum": 0.01,
"type": "number"
},
"radiusY": {
"default": 0.25,
"description": "Vertical radius of a radial mask as a fraction of the frame height",
"format": "double",
"maximum": 1,
"minimum": 0.01,
"type": "number"
},
"strokes": {
"items": {
"additionalProperties": false,
"properties": {
"erase": {
"default": false,
"description": "Erase from the mask instead of painting it (brush masks only)",
"type": "boolean"
},
"points": {
"items": {
"description": "A point as [x, y] fractions of the original image (before rotation, flips and crop)",
"items": {
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"type": "array"
},
"maxItems": 512,
"minItems": 1,
"type": "array"
},
"radius": {
"description": "Stroke radius as a fraction of the original image's shorter side",
"format": "double",
"maximum": 0.5,
"minimum": 0.001,
"type": "number"
}
},
"required": [
"points",
"radius"
],
"type": "object"
},
"maxItems": 64,
"type": "array"
},
"x": {
"description": "Centre (radial) or start (linear) across the oriented frame; any value for brush and bitmap masks",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Centre (radial) or start (linear) down the oriented frame; any value for brush and bitmap masks",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
}
},
"required": [
"id",
"kind",
"x",
"y",
"coordinates",
"adjustments"
],
"type": "object"
},
"maxItems": 8,
"type": "array"
},
"noiseThreshold": {
"description": "Native pre-demosaic wavelet noise threshold",
"format": "double",
"maximum": 1,
"minimum": 0,
"type": "number"
},
"renderer": {
"enum": [
"darktable/5.6.1"
],
"type": "string"
},
"rotation": {
"anyOf": [
{
"type": "integer",
"format": "int32",
"enum": [
0
]
},
{
"type": "integer",
"format": "int32",
"enum": [
90
]
},
{
"type": "integer",
"format": "int32",
"enum": [
180
]
},
{
"type": "integer",
"format": "int32",
"enum": [
270
]
}
],
"description": "Additional clockwise rotation after camera orientation"
},
"saturation": {
"format": "double",
"maximum": 2,
"minimum": 0,
"type": "number"
},
"sensorCanvas": {
"description": "Unrotated, uncropped, uncorrected canvas for selecting sensor-space masks",
"type": "boolean"
},
"shadows": {
"format": "double",
"maximum": 100,
"minimum": -100,
"type": "number"
},
"sharpen": {
"additionalProperties": false,
"properties": {
"amount": {
"format": "double",
"maximum": 2,
"minimum": 0,
"type": "number"
},
"radius": {
"format": "double",
"maximum": 99,
"minimum": 0,
"type": "number"
},
"threshold": {
"format": "double",
"maximum": 100,
"minimum": 0,
"type": "number"
}
},
"required": [
"radius",
"amount",
"threshold"
],
"type": "object"
},
"straighten": {
"format": "double",
"maximum": 45,
"minimum": -45,
"type": "number"
},
"version": {
"enum": [
2
],
"format": "int32",
"type": "integer"
},
"whiteBalance": {
"additionalProperties": false,
"description": "Multipliers of native camera white-balance coefficients, not Kelvin estimates",
"properties": {
"blue": {
"format": "double",
"maximum": 8,
"minimum": 0.1,
"type": "number"
},
"green": {
"format": "double",
"maximum": 8,
"minimum": 0.1,
"type": "number"
},
"red": {
"format": "double",
"maximum": 8,
"minimum": 0.1,
"type": "number"
}
},
"required": [
"red",
"green",
"blue"
],
"type": "object"
}
},
"required": [
"renderer",
"version"
],
"type": "object"
}© 2026 Frameleaf Inc. All rights reserved.
Frameleaf and the Frameleaf logo are Trademarks of Frameleaf Inc.