{
  "id": "basic/pass-through",
  "version": "1.2.3",
  "description": "Applies various image filters with real-time preview and adjustable parameters",
  "author": {
    "name": "John Doe",
    "email": "john@example.com",
    "url": "https://example.com"
  },
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/myorg/image-filter-node.git"
  },
  "keywords": ["image", "filter", "processing", "graphics"],
  "category": "image-processing",
  "subcategory": "filters",

  "node": {
    "id": "image-filter",
    "displayName": "Image Filter",
    "icon": "filter",
    "color": "#4A90E2",
    "backgroundColor": "#F5F7FA",
    "borderColor": "#E1E8ED",
    "width": 200,
    "height": 120,
    "resizable": true,
    "collapsible": true,
    "tags": ["image", "filter", "effect"],

    "documentation": {
      "description": "Advanced image filtering node with support for multiple filter types and real-time preview",
      "examples": [
        {
          "title": "Basic Blur Effect",
          "description": "Apply a simple blur filter to an input image",
          "config": {
            "filterType": "blur",
            "intensity": 0.5
          }
        }
      ],
      "url": "https://docs.example.com/nodes/image-filter"
    },

    "execution": {
      "runtime": "javascript",
      "entry": "index.js",
      "async": true,
      "timeout": 30000,
      "memoryLimit": "256MB",
      "cpuLimit": "1000m"
    },

    "inputs": [
      {
        "id": "image",
        "name": "Image Input",
        "description": "Source image to apply filter to",
        "type": "required",
        "dataType": "image/*",
        "mimeTypes": ["image/png", "image/jpeg", "image/webp", "image/svg+xml"],
        "position": "left",
        "offset": 30,
        "color": "#FF6B6B",
        "shape": "circle",
        "allowMultiple": false,
        "defaultValue": null,
        "validation": {
          "required": true,
          "maxSize": "10MB",
          "minResolution": "1x1",
          "maxResolution": "8192x8192"
        }
      },
      {
        "id": "mask",
        "name": "Mask",
        "description": "Optional mask to limit filter application area",
        "type": "optional",
        "dataType": "image/mask",
        "mimeTypes": ["image/png", "image/jpeg"],
        "position": "left",
        "offset": 70,
        "color": "#4ECDC4",
        "shape": "square",
        "allowMultiple": false,
        "defaultValue": null,
        "validation": {
          "required": false,
          "channels": ["grayscale", "alpha"]
        }
      },
      {
        "id": "trigger",
        "name": "Process",
        "description": "Trigger to start processing",
        "type": "trigger",
        "dataType": "application/x-trigger",
        "mimeTypes": ["application/x-trigger"],
        "position": "left",
        "offset": 110,
        "color": "#95E1D3",
        "shape": "triangle",
        "allowMultiple": false
      }
    ],

    "outputs": [
      {
        "id": "output",
        "name": "Filtered Image",
        "description": "Processed image with applied filter",
        "dataType": "image/*",
        "mimeTypes": ["image/png", "image/jpeg", "image/webp"],
        "position": "right",
        "offset": 30,
        "color": "#FF6B6B",
        "shape": "circle",
        "metadata": {
          "preserveFormat": true,
          "quality": "original"
        }
      },
      {
        "id": "preview",
        "name": "Preview",
        "description": "Low-resolution preview for real-time feedback",
        "dataType": "image/preview",
        "mimeTypes": ["image/jpeg"],
        "position": "right",
        "offset": 70,
        "color": "#FFA07A",
        "shape": "circle",
        "metadata": {
          "maxResolution": "512x512",
          "quality": 0.7
        }
      },
      {
        "id": "debug",
        "name": "Debug Info",
        "description": "Processing statistics and debug information",
        "dataType": "application/json",
        "mimeTypes": ["application/json"],
        "position": "right",
        "offset": 110,
        "color": "#DDA0DD",
        "shape": "hexagon"
      }
    ],

    "properties": [
      {
        "id": "filterType",
        "name": "Filter Type",
        "description": "Type of filter to apply to the image",

        "type": "select",
        "defaultValue": "emboss",
        "dataType": "application/x-string",

        "attributes": {
          "options": [
            { "value": "blur", "text": "Blur" },
            { "value": "sharpen", "text": "Sharpen" },
            { "value": "emboss", "text": "Emboss" },
            { "value": "edge", "text": "Edge Detection" }
          ]
        },

        "ports": [
          {
            "id": "filterType",
            "name": "filterType"
          }
        ]


      },
      {
        "id": "intensity",
        "name": "Intensity",
        "description": "Filter intensity from 0.0 to 1.0",
        "type": "number",
        "defaultValue": 0.5,
        "dataType": "application/x-number",

        "attributes": {
          "min": 0.0,
          "max": 1.0,
          "step": 0.01
        },

        "ports": [
          {
            "id": "intensity",
            "name": "intensity"
          }
        ]

      },
      {
        "id": "realTimePreview",
        "name": "Real-time Preview",
        "description": "Enable real-time preview updates",
        "type": "checkbox",
        "dataType": "application/x-boolean",
        "defaultValue": true,
        "ports": [
          {
            "id": "boolean",
            "name": "boolean"
          }
        ]

      }
    ],

    "events": [
      {
        "id": "onProcessStart",
        "name": "Processing Started",
        "description": "Fired when image processing begins",
        "dataType": "application/json",
        "payload": {
          "timestamp": "number",
          "inputSize": "object",
          "filterType": "string"
        }
      },
      {
        "id": "onProcessComplete",
        "name": "Processing Complete",
        "description": "Fired when image processing finishes",
        "dataType": "application/json",
        "payload": {
          "timestamp": "number",
          "processingTime": "number",
          "outputSize": "object"
        }
      },
      {
        "id": "onError",
        "name": "Processing Error",
        "description": "Fired when an error occurs during processing",
        "dataType": "application/json",
        "payload": {
          "timestamp": "number",
          "error": "string",
          "errorCode": "string"
        }
      }
    ],

    "dependencies": {
      "runtime": {
        "canvas-api": "^2.0.0",
        "image-processing": "^1.5.0"
      },
      "peer": {
        "visual-programming-engine": ">=3.0.0"
      }
    },

    "capabilities": {
      "streaming": true,
      "parallelProcessing": false,
      "webWorker": true,
      "gpu": false,
      "fileSystem": false,
      "network": false
    },

    "metadata": {
      "nodeVersion": "2.1.0",
      "apiVersion": "1.0",
      "created": "2024-01-15T10:30:00Z",
      "updated": "2024-03-20T14:45:00Z",
      "deprecated": false,
      "experimental": false,
      "stability": "stable"
    }
  },

  "files": {
    "main": "index.js",
    "types": "types/index.d.ts",
    "icon": "assets/icon.svg",
    "preview": "assets/preview.png",
    "documentation": "README.md"
  },

  "engines": {
    "visualProgramming": ">=3.0.0",
    "node": ">=16.0.0"
  }
}
