{
  "id": "fisheye-equirectangular-mirror",
  "name": "Fisheye Equirectangular Mirror",
  "description": "Unwraps a single width-filled 16:9 fisheye lens into a 360x180 equirectangular map by mirroring the rear hemisphere into the same fisheye source.",
  "category": "Projection",
  "entryPoint": "shadeVideo",
  "parameters": [
    {
      "id": "lensFovDegrees",
      "label": "Lens FOV",
      "type": "float",
      "default": 190,
      "min": 1,
      "max": 220,
      "step": 0.1,
      "description": "Actual fisheye lens field of view in degrees."
    },
    {
      "id": "center",
      "label": "Optical Center",
      "type": "vec2",
      "default": [
        0.5,
        0.5
      ],
      "min": [
        0,
        0
      ],
      "max": [
        1,
        1
      ],
      "step": [
        0.001,
        0.001
      ],
      "description": "Normalized position in the frame, where 0.5, 0.5 is center."
    },
    {
      "id": "radius",
      "label": "Fisheye Radius",
      "type": "vec2",
      "default": [
        0.5,
        0.8889
      ],
      "min": [
        0.001,
        0.001
      ],
      "max": [
        2,
        2
      ],
      "step": [
        0.001,
        0.001
      ],
      "description": "Normalized fisheye radius; adjust X/Y when the image is cropped or squeezed."
    },
    {
      "id": "yawDegrees",
      "label": "Yaw",
      "type": "float",
      "default": 0,
      "min": -180,
      "max": 180,
      "step": 0.1,
      "description": "Rotates the virtual view horizontally."
    },
    {
      "id": "pitchDegrees",
      "label": "Pitch",
      "type": "float",
      "default": 0,
      "min": -120,
      "max": 120,
      "step": 0.1,
      "description": "Rotates the virtual view vertically."
    },
    {
      "id": "rollDegrees",
      "label": "Roll",
      "type": "float",
      "default": 0,
      "min": -180,
      "max": 180,
      "step": 0.1,
      "description": "Live roll rotation around the viewing axis."
    },
    {
      "id": "fisheyeModel",
      "label": "Fisheye Model",
      "type": "enum",
      "default": "equidistant",
      "options": [
        {
          "value": "equidistant",
          "label": "Equidistant"
        },
        {
          "value": "equisolid",
          "label": "Equisolid"
        },
        {
          "value": "stereographic",
          "label": "Stereographic"
        },
        {
          "value": "orthographic",
          "label": "Orthographic"
        }
      ],
      "description": "Projection model used by the physical fisheye lens."
    },
    {
      "id": "edgeFill",
      "label": "Edge Fill",
      "type": "float",
      "default": 0.06,
      "min": 0,
      "max": 0.3,
      "step": 0.001,
      "description": "Extends edge samples outward to cover small missing areas."
    },
    {
      "id": "edgeBlur",
      "label": "Edge Blur",
      "type": "float",
      "default": 0.018,
      "min": 0,
      "max": 0.12,
      "step": 0.001,
      "description": "Softens the dilated edge fill."
    },
    {
      "id": "outsideColor",
      "label": "Outside Color",
      "type": "color",
      "default": [
        0,
        0,
        0,
        1
      ],
      "description": "Color used where the remapped image samples outside the source frame."
    }
  ]
}
