{
  "id": "crt-bulge",
  "name": "CRT Bulge",
  "description": "Warps the image like convex CRT glass, with optional rounded screen edges and vignette darkening.",
  "category": "Distortion",
  "entryPoint": "shadeVideo",
  "parameters": [
    {
      "id": "bulgeAmount",
      "label": "Bulge",
      "type": "float",
      "default": -0.04,
      "min": -0.5,
      "max": 0.8,
      "step": 0.01,
      "description": "Positive values swell the center outward; negative values pinch it inward."
    },
    {
      "id": "zoom",
      "label": "Zoom",
      "type": "float",
      "default": 1.04,
      "min": 0.5,
      "max": 2,
      "step": 0.01,
      "description": "Scales the source before distortion, useful for hiding warped edges."
    },
    {
      "id": "edgeRoundness",
      "label": "Edge Roundness",
      "type": "float",
      "default": 0.08,
      "min": 0,
      "max": 0.35,
      "step": 0.01,
      "description": "Rounds the visible screen corners like older CRT glass."
    },
    {
      "id": "edgeFeather",
      "label": "Edge Feather",
      "type": "float",
      "default": 2,
      "min": 0,
      "max": 24,
      "step": 0.1,
      "description": "Softens the rounded screen edge in pixels."
    },
    {
      "id": "sourceEdgeFeather",
      "label": "Source Edge Feather",
      "type": "float",
      "default": 1.5,
      "min": 0,
      "max": 16,
      "step": 0.1,
      "description": "Antialiases warped source edges when the distortion reveals outside-frame pixels."
    },
    {
      "id": "vignetteAmount",
      "label": "Vignette",
      "type": "float",
      "default": 0.18,
      "min": 0,
      "max": 1,
      "step": 0.01,
      "description": "Darkens the glass toward the screen edges."
    },
    {
      "id": "edgeMode",
      "label": "Edge Mode",
      "type": "enum",
      "default": "black",
      "options": [
        {
          "value": "black",
          "label": "Black"
        },
        {
          "value": "clamp",
          "label": "Clamp"
        },
        {
          "value": "mirror",
          "label": "Mirror"
        }
      ],
      "description": "Chooses how warped samples outside the source frame are filled."
    },
    {
      "id": "outsideColor",
      "label": "Outside Color",
      "type": "color",
      "default": [
        0,
        0,
        0,
        1
      ],
      "description": "Color used outside the curved screen or source frame."
    }
  ]
}
