{
  "id": "xyla-exposure-chart",
  "name": "XYLA Exposure Chart",
  "description": "Procedural grayscale exposure chart inspired by XYLA-style dynamic range charts, with each patch one stop brighter than the previous.",
  "category": "Calibration",
  "entryPoint": "shadeVideo",
  "parameters": [
    {
      "id": "patchCount",
      "label": "Patch Count",
      "type": "float",
      "default": 15,
      "min": 2,
      "max": 21,
      "step": 1,
      "description": "Number of exposure patches in the chart."
    },
    {
      "id": "baseLevel",
      "label": "Base Level",
      "type": "float",
      "default": 0.00006103515625,
      "min": 0.000001,
      "max": 0.01,
      "step": 0.000001,
      "description": "Brightness of the darkest patch before tone mapping."
    },
    {
      "id": "peakLevel",
      "label": "Peak Level",
      "type": "float",
      "default": 1,
      "min": 0.01,
      "max": 1,
      "step": 0.001,
      "description": "Brightness limit for the brightest patch."
    },
    {
      "id": "gammaEncode",
      "label": "Display Gamma",
      "type": "float",
      "default": 1,
      "min": 1,
      "max": 2.6,
      "step": 0.01,
      "description": "Gamma value used when Tone Curve is Display Gamma."
    },
    {
      "id": "toneCurve",
      "label": "Tone Curve",
      "type": "enum",
      "default": "rec709",
      "options": [
        {
          "value": "linear",
          "label": "Linear"
        },
        {
          "value": "gamma",
          "label": "Display Gamma"
        },
        {
          "value": "rec709",
          "label": "Rec.709"
        }
      ],
      "description": "Output encoding used for the chart patches."
    },
    {
      "id": "chartScale",
      "label": "Chart Scale",
      "type": "float",
      "default": 0.86,
      "min": 0.25,
      "max": 1,
      "step": 0.01,
      "description": "Overall size of the chart in frame."
    },
    {
      "id": "gapSize",
      "label": "Gap Size",
      "type": "float",
      "default": 0.18,
      "min": 0,
      "max": 0.45,
      "step": 0.01,
      "description": "Spacing between exposure patches."
    },
    {
      "id": "vertical",
      "label": "Vertical",
      "type": "bool",
      "default": false,
      "description": "Stacks patches vertically instead of horizontally."
    },
    {
      "id": "reverseOrder",
      "label": "Reverse Order",
      "type": "bool",
      "default": false,
      "description": "Reverses the dark-to-bright patch order."
    },
    {
      "id": "backgroundLevel",
      "label": "Background",
      "type": "float",
      "default": 0,
      "min": 0,
      "max": 0.2,
      "step": 0.001,
      "description": "Background brightness behind the chart."
    },
    {
      "id": "borderLevel",
      "label": "Border",
      "type": "float",
      "default": 0.08,
      "min": 0,
      "max": 1,
      "step": 0.001,
      "description": "Brightness of patch borders."
    },
    {
      "id": "sourceMix",
      "label": "Source Mix",
      "type": "float",
      "default": 0,
      "min": 0,
      "max": 1,
      "step": 0.01,
      "description": "Blends the generated effect with the incoming video."
    }
  ]
}
