{
  "nodes": [
    {
      "type": "PublicParameters.Data.Float",
      "shortDescription": "stores a float value",
      "longDescription": "This node stores a floating point value.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Float"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.FloatVector",
      "shortDescription": "represents an array of float values",
      "longDescription": "This node represents an array of float values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.FloatVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.Integer",
      "shortDescription": "stores an integer value",
      "longDescription": "This node stores an integer value.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Integer"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.IntegerVector",
      "shortDescription": "represents an array of integer values",
      "longDescription": "This node represents an array of integer values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.IntegerVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.IntegerVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.Boolean",
      "shortDescription": "stores a Boolean value",
      "longDescription": "This node stores a Boolean value.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Boolean"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.BooleanVector",
      "shortDescription": "represents an array of Boolean values",
      "longDescription": "This node represents an array of Boolean values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.BooleanVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.BooleanVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.Text",
      "shortDescription": "stores Unicode text",
      "longDescription": "This node stores Unicode text.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.TextVector",
      "shortDescription": "represents an array of text elements",
      "longDescription": "This node represents an array of text elements.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.TextVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.TextVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.FileName",
      "shortDescription": "stores a file name",
      "longDescription": "This node stores a file name.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.FileName"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.FileName"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.FileNameVector",
      "shortDescription": "represents an array of file names",
      "longDescription": "This node represents an array of file names.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.FileNameVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.FileNameVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.Color",
      "shortDescription": "stores an RGBA color value",
      "longDescription": "This node stores an RGBA color value as four floating point values in the range [0.0, 1.0].",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PublicParameters.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Color"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "PublicParameters.Data.ColorVector",
      "shortDescription": "represents an array of colors",
      "longDescription": "This node represents an array of colors.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.ColorVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.ColorVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Add",
      "shortDescription": "adds two float values",
      "longDescription": "This node adds two floating point values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Subtract",
      "shortDescription": "subtracts two float values",
      "longDescription": "This node subtracts two floating point values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Multiply",
      "shortDescription": "multiplies two float values",
      "longDescription": "This node multiplies two floating point values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Divide",
      "shortDescription": "divides two float values",
      "longDescription": "This node divides two floating point values. If division by zero is detected, division by one is performed instead.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Reciprocal",
      "shortDescription": "computes the multiplicative inverse",
      "longDescription": "This node computes the multiplicative inverse 1/x. If x is close to zero, the input value is returned.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "Operand X",
          "defaultValue": 2
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Fract",
      "shortDescription": "returns the fractional part",
      "longDescription": "This node returns the fractional part of a floating point value x with fract(x) = x - floor(x).",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "Operand X",
          "defaultValue": 1.5
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Compare",
      "shortDescription": "compares two float values",
      "longDescription": "This node compares two floating point values with different comparison operators (such as less, greater, equal, ...).",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "Operator",
          "type": "PublicParameters.Data.Integer",
          "description": "Comparison Operator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Less"
            },
            {
              "value": 1,
              "label": "Greater"
            },
            {
              "value": 2,
              "label": "Equal"
            },
            {
              "value": 3,
              "label": "Less or equal"
            },
            {
              "value": 4,
              "label": "Greater or equal"
            },
            {
              "value": 5,
              "label": "Similar"
            },
            {
              "value": 6,
              "label": "Very similar"
            }
          ]
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.InInterval",
      "shortDescription": "tests if a number is within an interval",
      "longDescription": "This node tests if a floating point value is within a given interval [min, max].",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum of interval",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum of interval",
          "defaultValue": 1
        },
        {
          "name": "Including",
          "type": "PublicParameters.Data.Integer",
          "description": "Options for including endpoints",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Both"
            },
            {
              "value": 1,
              "label": "Only Min"
            },
            {
              "value": 2,
              "label": "Only Max"
            },
            {
              "value": 3,
              "label": "None"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "InInterval",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Clamp",
      "shortDescription": "clamps a float value",
      "longDescription": "This node clamps a floating point value to the given minimum and maximum.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0.5
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum of signal amplitude",
          "defaultValue": 1
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum of signal amplitude",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.LinearBlend",
      "shortDescription": "linearly interpolates between two float values",
      "longDescription": "This node linearly interpolates between two floating point values. An interpolation weight of 0.0 returns A, and a weight of 1.0 returns B.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 1
        },
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Round",
      "shortDescription": "rounds a float value to the nearest integer",
      "longDescription": "This node rounds a floating point value to the nearest integer.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Integer",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Floor",
      "shortDescription": "rounds a number downwards to its nearest integer",
      "longDescription": "This node rounds a floating point value downwards to its nearest integer.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Integer",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Ceil",
      "shortDescription": "rounds a number upwards to its nearest integer",
      "longDescription": "This node rounds a floating point value upwards to its nearest integer.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Integer",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.ToText",
      "shortDescription": "converts a float value to text",
      "longDescription": "This node converts a floating point value to text.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Float",
          "description": "Input",
          "defaultValue": 0
        },
        {
          "name": "Decimal places",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of digits after the decimal point (-1 = unlimited)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Random",
      "shortDescription": "creates a random float value",
      "longDescription": "This node generates a random floating point value in the given range [min, max].",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum",
          "defaultValue": 1
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Random",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.RandomVector",
      "shortDescription": "creates a vector of random float values",
      "longDescription": "This node generates a vector of random floating point values in the given range [min, max].",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum",
          "defaultValue": 1
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of elements in the generated vector",
          "defaultValue": 4
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Random",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.LinearVector",
      "shortDescription": "creates a vector of linearly spread float values",
      "longDescription": "This node generates a vector of linearly spread floating point values in the given range [min, max].",
      "inputSlots": [
        {
          "name": "Start",
          "type": "PublicParameters.Data.Float",
          "description": "Starting number",
          "defaultValue": 0
        },
        {
          "name": "End",
          "type": "PublicParameters.Data.Float",
          "description": "Ending number",
          "defaultValue": 1
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of elements in the generated vector",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Linear",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.EquidistantVector",
      "shortDescription": "creates a vector with equidistant float values",
      "longDescription": "This node generates a vector of equidistant floating point values from a given start value and an incrementing step value.",
      "inputSlots": [
        {
          "name": "Start",
          "type": "PublicParameters.Data.Float",
          "description": "Starting number",
          "defaultValue": 0
        },
        {
          "name": "Step",
          "type": "PublicParameters.Data.Float",
          "description": "Incremental step value between two consecutive values",
          "defaultValue": 0.25
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of elements in the generated vector",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Linear",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.SphericalToCartesian",
      "shortDescription": "converts spherical to Cartesian coordinates",
      "longDescription": "This node converts spherical to Cartesian coordinates.",
      "inputSlots": [
        {
          "name": "Phi",
          "type": "PublicParameters.Data.Float",
          "description": "Azimuthal angle in degrees (starting at the x-axis)",
          "defaultValue": 0
        },
        {
          "name": "Theta",
          "type": "PublicParameters.Data.Float",
          "description": "Polar angle in degrees (starting at the z-axis)",
          "defaultValue": 0
        },
        {
          "name": "Radius",
          "type": "PublicParameters.Data.Float",
          "description": "Radial distance to origin",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Z",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.CartesianToSpherical",
      "shortDescription": "converts Cartesian to spherical coordinates",
      "longDescription": "This node converts Cartesian to spherical coordinates.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "X value in the Cartesian coordinate system",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float",
          "description": "Y value in the Cartesian coordinate system",
          "defaultValue": 0
        },
        {
          "name": "Z",
          "type": "PublicParameters.Data.Float",
          "description": "Z value in the Cartesian coordinate system",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Phi",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Theta",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Radius",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.Accumulate",
      "shortDescription": "accumulates a delta value over time",
      "longDescription": "This node accumulates a delta floating point value over time.",
      "inputSlots": [
        {
          "name": "Delta",
          "type": "PublicParameters.Data.Float",
          "description": "Delta value that is added to the output"
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value of the input delta value",
          "defaultValue": 1
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal value",
          "defaultValue": -1000000
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal value",
          "defaultValue": 1000000
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Float.MathFunction",
      "shortDescription": "applies a mathematical function, such as sin, cos, log, pow etc.",
      "longDescription": "This node applies a mathematical function that is parsed from a given text. The text must contain an 'x' representing the input.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "Operand X",
          "defaultValue": 0
        },
        {
          "name": "Function",
          "type": "PublicParameters.Data.Text",
          "description": "Mathematical function",
          "defaultValue": "cos(0.05*pi*x) * exp(-pow(x, 2.0) / 5000)"
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Add",
      "shortDescription": "adds two integer values",
      "longDescription": "This node adds two integer values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Subtract",
      "shortDescription": "subtracts two integer values",
      "longDescription": "This node subtracts two integer values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Multiply",
      "shortDescription": "multiplies two integer values",
      "longDescription": "This node multiplies two integer values.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Divide",
      "shortDescription": "divides two integer values",
      "longDescription": "This node computes integer division of A by B. The result is a floating point value. If division by zero is detected, division by one is performed instead.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Modulo",
      "shortDescription": "computes the modulo operation",
      "longDescription": "This node computes the modulo operation which outputs the remainder after integer division of A by B. If division by zero is detected, division by one is performed instead.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 10
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Compare",
      "shortDescription": "compares two integer values",
      "longDescription": "This node compares two integer values with different comparison operators (such as less, greater, equal, ...).",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand A",
          "defaultValue": 0
        },
        {
          "name": "Operator",
          "type": "PublicParameters.Data.Integer",
          "description": "Comparison Operator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Less"
            },
            {
              "value": 1,
              "label": "Greater"
            },
            {
              "value": 2,
              "label": "Equal"
            },
            {
              "value": 3,
              "label": "Less or equal"
            },
            {
              "value": 4,
              "label": "Greater or equal"
            }
          ]
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Integer",
          "description": "Operand B",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.Random",
      "shortDescription": "creates a random integer value",
      "longDescription": "This node generates a random integer value in the given range [min, max].",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Integer",
          "description": "Minimum",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum",
          "defaultValue": 10
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Random",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.ToFloat",
      "shortDescription": "converts an integer value to floating point",
      "longDescription": "This node converts an integer value to a floating point value.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Integer",
          "description": "Input",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Integer.ToText",
      "shortDescription": "converts an integer value to text",
      "longDescription": "This node converts an integer value to text.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Integer",
          "description": "Input",
          "defaultValue": 0
        },
        {
          "name": "Base",
          "type": "PublicParameters.Data.Integer",
          "description": "10 for decimal, 2 for binary, 16 for hexadecimal, etc.",
          "defaultValue": 10
        },
        {
          "name": "Leading zeros",
          "type": "PublicParameters.Data.Integer",
          "description": "The number of digits that are filled with zeros if the number is shorter",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.And",
      "shortDescription": "computes a logical AND",
      "longDescription": "This node computes a logical AND for two Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Or",
      "shortDescription": "computes a logical OR",
      "longDescription": "This node computes a logical OR for two Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Not",
      "shortDescription": "computes a logical NOT",
      "longDescription": "This node computes the logical NOT for a Boolean input.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Nand",
      "shortDescription": "computes a logical NAND",
      "longDescription": "This node computes a logical NAND for two Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Nor",
      "shortDescription": "computes a logical NOR",
      "longDescription": "This node computes a logical NOR for two Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Xor",
      "shortDescription": "computes a logical XOR",
      "longDescription": "This node computes a logical XOR (exclusive OR) for two Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.And3",
      "shortDescription": "computes a logical AND",
      "longDescription": "This node computes a logical AND for three Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        },
        {
          "name": "C",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand C",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Or3",
      "shortDescription": "computes a logical OR",
      "longDescription": "This node computes a logical OR for three Boolean inputs.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand A",
          "defaultValue": false
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand B",
          "defaultValue": false
        },
        {
          "name": "C",
          "type": "PublicParameters.Data.Boolean",
          "description": "Operand C",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.FlipFlop",
      "shortDescription": "emulates the functionality of a flip-flop",
      "longDescription": "This node emulates the functionality of a JK flip-flop.",
      "inputSlots": [
        {
          "name": "K",
          "type": "PublicParameters.Data.Boolean",
          "description": "Input K (Reset)",
          "defaultValue": false
        },
        {
          "name": "J",
          "type": "PublicParameters.Data.Boolean",
          "description": "Input J (Set)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Q",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "NotQ",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Toggle",
      "shortDescription": "toggles a Boolean value",
      "longDescription": "This node toggles the Boolean value at the output if the input is true (and keeps it unchanged otherwise).",
      "inputSlots": [
        {
          "name": "Toogle",
          "type": "PublicParameters.Data.Boolean",
          "description": "Toggles the output if true",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Q",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Clock",
      "shortDescription": "oscillates between true and false",
      "longDescription": "This node's Boolean output oscillates between true and false.",
      "inputSlots": [
        {
          "name": "Length true",
          "type": "PublicParameters.Data.Integer",
          "description": "Pulse length for true",
          "defaultValue": 2
        },
        {
          "name": "Length false",
          "type": "PublicParameters.Data.Integer",
          "description": "Pulse length for false",
          "defaultValue": 2
        },
        {
          "name": "Time offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Time offset in ticks",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Clock",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Boolean.Random",
      "shortDescription": "creates a random Boolean value",
      "longDescription": "This node generates a random Boolean value.",
      "inputSlots": [
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Random",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Extract",
      "shortDescription": "extracts a section of a text",
      "longDescription": "This node extracts a section of a text according to a given start index and length.",
      "inputSlots": [
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Start index",
          "defaultValue": 0
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length to be extracted",
          "defaultValue": 5
        },
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input Text"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text",
          "description": "Output Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.ExtractWords",
      "shortDescription": "extracts words from a text",
      "longDescription": "This node extracts words from a given text.",
      "inputSlots": [
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "The index of the word for which the extraction starts",
          "defaultValue": 0
        },
        {
          "name": "Count",
          "type": "PublicParameters.Data.Integer",
          "description": "The number of words that are extracted",
          "defaultValue": 1
        },
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input Text"
        }
      ],
      "outputSlots": [
        {
          "name": "Words",
          "type": "PublicParameters.Data.Text",
          "description": "Words"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Search",
      "shortDescription": "searches a text for a given text",
      "longDescription": "This node searches a text for a given query text.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Text",
          "description": "Input",
          "defaultValue": "Search me (and me too)"
        },
        {
          "name": "Search what",
          "type": "PublicParameters.Data.Text",
          "description": "Query text",
          "defaultValue": "me"
        },
        {
          "name": "Reoccurrence",
          "type": "PublicParameters.Data.Integer",
          "description": "Search for the given number of re-occurrence of the query text in the input",
          "defaultValue": 0
        },
        {
          "name": "Backwards",
          "type": "PublicParameters.Data.Boolean",
          "description": "Search backwards",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Found",
          "type": "PublicParameters.Data.Boolean",
          "description": "True if query is found, false otherwise"
        },
        {
          "name": "Found at",
          "type": "PublicParameters.Data.Integer",
          "description": "The index where the text is found (-1 if not found)"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Replace",
      "shortDescription": "replaces a subpart of a text",
      "longDescription": "This node searches a text for a given query text and replaces it with another text.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Text",
          "description": "Input",
          "defaultValue": "Replace me (and me too)"
        },
        {
          "name": "Search what",
          "type": "PublicParameters.Data.Text",
          "description": "Query text",
          "defaultValue": "me"
        },
        {
          "name": "Replace with",
          "type": "PublicParameters.Data.Text",
          "description": "Replacement text",
          "defaultValue": "ME"
        },
        {
          "name": "Reoccurrence",
          "type": "PublicParameters.Data.Integer",
          "description": "Search for the given number of re-occurrence of the query text in the input",
          "defaultValue": 0
        },
        {
          "name": "Backwards",
          "type": "PublicParameters.Data.Boolean",
          "description": "Search backwards",
          "defaultValue": false
        },
        {
          "name": "Replace all",
          "type": "PublicParameters.Data.Boolean",
          "description": "Replace all occurrences",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "PublicParameters.Data.Text",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Join",
      "shortDescription": "joins two texts",
      "longDescription": "This node joins two texts.",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Text",
          "description": "Input A",
          "defaultValue": "Join "
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Text",
          "description": "Input B",
          "defaultValue": "me"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text",
          "description": "Output Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Split",
      "shortDescription": "splits a text into two",
      "longDescription": "This node splits a text into two texts.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "PublicParameters.Data.Text",
          "description": "Input",
          "defaultValue": "Split me"
        },
        {
          "name": "Split index",
          "type": "PublicParameters.Data.Integer",
          "description": "The index where to split the text",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "PartA",
          "type": "PublicParameters.Data.Text",
          "description": "Output Part A"
        },
        {
          "name": "PartB",
          "type": "PublicParameters.Data.Text",
          "description": "Output Part B"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Divide",
      "shortDescription": "divides a text into subparts",
      "longDescription": "This node divides a text into a vector of subpart text elements.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input Text",
          "defaultValue": "one,two,three"
        },
        {
          "name": "Separator",
          "type": "PublicParameters.Data.Text",
          "description": "The character that is used for dividing the text",
          "defaultValue": ","
        }
      ],
      "outputSlots": [
        {
          "name": "TextElements",
          "type": "PublicParameters.Data.TextVector",
          "description": "Text Output Vector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.DivideRegEx",
      "shortDescription": "divides a text into subparts using regular expressions",
      "longDescription": "This node splits a text into a vector of subpart text elements using regular expressions.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input Text",
          "defaultValue": "one two,three;four"
        },
        {
          "name": "Separator RegEx",
          "type": "PublicParameters.Data.Text",
          "description": "The regular expression for selecting the separators that are used for dividing the text into subparts",
          "defaultValue": "[\\s,;]+"
        }
      ],
      "outputSlots": [
        {
          "name": "TextElements",
          "type": "PublicParameters.Data.TextVector",
          "description": "Text Output Vector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Merge",
      "shortDescription": "merges a text vector",
      "longDescription": "This node merges all elements of a text vector into a single text.",
      "inputSlots": [
        {
          "name": "TextElements",
          "type": "PublicParameters.Data.TextVector",
          "description": "Text Input Vector"
        },
        {
          "name": "Separator",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of separator used between the concatenated elements",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "none"
            },
            {
              "value": 1,
              "label": "space"
            },
            {
              "value": 2,
              "label": "comma"
            },
            {
              "value": 3,
              "label": "semicolon"
            },
            {
              "value": 4,
              "label": "comma+space"
            },
            {
              "value": 5,
              "label": "semicolon+space"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text",
          "description": "Output Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Match",
      "shortDescription": "finds matches using a regular expression",
      "longDescription": "This node finds matches using a regular expression and outputs a vector of matched text subparts.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input Text",
          "defaultValue": "match 10 20 30, which are all numbers"
        },
        {
          "name": "RegEx",
          "type": "PublicParameters.Data.Text",
          "description": "The regular expression for matching parts of the text",
          "defaultValue": "[0-9]+"
        },
        {
          "name": "Case-insensitive",
          "type": "PublicParameters.Data.Boolean",
          "description": "Case-insensitive",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "TextElements",
          "type": "PublicParameters.Data.TextVector",
          "description": "Text Output Vector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.ToFloat",
      "shortDescription": "converts a text to a float",
      "longDescription": "This node converts a text to a floating point value.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input text",
          "defaultValue": "3.14"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float",
          "description": "Output floating-point value"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.ToInt",
      "shortDescription": "converts a text into an integer",
      "longDescription": "This node converts a text into an integer value.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input text",
          "defaultValue": "1234"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Integer",
          "description": "Output integer"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.ToIntVector",
      "shortDescription": "divides a text into an integer vector",
      "longDescription": "This node divides a text into an integer vector.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input text",
          "defaultValue": "1,2,3"
        },
        {
          "name": "Separator",
          "type": "PublicParameters.Data.Text",
          "description": "The character that is used for dividing the text",
          "defaultValue": ","
        }
      ],
      "outputSlots": [
        {
          "name": "IntegerElements",
          "type": "PublicParameters.Data.IntegerVector",
          "description": "Output vector of integers"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.ToFileName",
      "shortDescription": "converts a text into a file name",
      "longDescription": "This node converts a text into a file name that contains only characters a-z, A-Z, or 0-9.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input",
          "defaultValue": "test"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.FileName",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Length",
      "shortDescription": "returns the length of the text",
      "longDescription": "This node returns the length of the text.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input text",
          "defaultValue": "test"
        }
      ],
      "outputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Trim",
      "shortDescription": "removes whitespace",
      "longDescription": "This node removes whitespace from the beginning and end of the text.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Text",
          "description": "Input",
          "defaultValue": "   test   "
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "PublicParameters.Data.Text",
          "description": "Trimmed output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Load",
      "shortDescription": "loads a text from a file",
      "longDescription": "This node loads a text from a file.",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of a text file in the project",
          "defaultValue": "default"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Text.Save",
      "shortDescription": "saves a text to a file",
      "longDescription": "This node saves a text to a file",
      "inputSlots": [
        {
          "name": "Text",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of the mesh file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable saving",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.FileName.GetAll",
      "shortDescription": "generates a vector of available files in the project",
      "longDescription": "This node generates a vector containing all files of a selected type in the project.",
      "inputSlots": [
        {
          "name": "File Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of file",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Image"
            },
            {
              "value": 1,
              "label": "Audio"
            },
            {
              "value": 2,
              "label": "Video"
            },
            {
              "value": 3,
              "label": "Mesh"
            },
            {
              "value": 4,
              "label": "Text"
            },
            {
              "value": 5,
              "label": "Scene"
            }
          ]
        },
        {
          "name": "Filter Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter to apply",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Contain"
            },
            {
              "value": 2,
              "label": "Not contain"
            },
            {
              "value": 3,
              "label": "Start with"
            },
            {
              "value": 4,
              "label": "Not start with"
            },
            {
              "value": 5,
              "label": "Ends with"
            },
            {
              "value": 6,
              "label": "Not end with"
            }
          ]
        },
        {
          "name": "Filter String",
          "type": "PublicParameters.Data.Text",
          "description": "Part of file name to search for",
          "defaultValue": ""
        }
      ],
      "outputSlots": [
        {
          "name": "Filenames",
          "type": "PublicParameters.Data.FileNameVector"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.FileName.Numbered",
      "shortDescription": "generates a numbered filename",
      "longDescription": "This node generates a filename with a given number at the end.",
      "inputSlots": [
        {
          "name": "Basename",
          "type": "PublicParameters.Data.FileName",
          "description": "Basename of file",
          "defaultValue": "default"
        },
        {
          "name": "Number",
          "type": "PublicParameters.Data.Integer",
          "description": "Number",
          "defaultValue": 0
        },
        {
          "name": "Leading zeros",
          "type": "PublicParameters.Data.Integer",
          "description": "The number of digits that are filled with zeros if the number is shorter",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "FileName",
          "type": "PublicParameters.Data.FileName"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.FileName.ToText",
      "shortDescription": "converts a filename to text",
      "longDescription": "This node converts a file name to text.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.FileName",
          "description": "Input",
          "defaultValue": "default"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text",
          "description": "Output"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.FileName.Random",
      "shortDescription": "creates a random file name",
      "longDescription": "This node generates a random file name.",
      "inputSlots": [
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Random",
          "type": "PublicParameters.Data.FileName"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Color.FromRGB",
      "shortDescription": "creates a color from RGB values",
      "longDescription": "This node creates a color from Red-Green-Blue-Alpha values.",
      "inputSlots": [
        {
          "name": "Red",
          "type": "PublicParameters.Data.Float",
          "description": "Red color component in range [0.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "Green",
          "type": "PublicParameters.Data.Float",
          "description": "Green color component in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Blue",
          "type": "PublicParameters.Data.Float",
          "description": "Blue color component in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha component in range [0.0, 1.0]",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Color.FromHSV",
      "shortDescription": "creates a color from HSV values",
      "longDescription": "This node creates a color from Hue-Saturation-Value-Alpha values.",
      "inputSlots": [
        {
          "name": "Hue",
          "type": "PublicParameters.Data.Float",
          "description": "Hue color component in range [0.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "Saturation",
          "type": "PublicParameters.Data.Float",
          "description": "Saturation color component in range [0.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Value color component in range [0.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha component in range [0.0, 1.0]",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Color.ToRGB",
      "shortDescription": "converts a color to RGB float values",
      "longDescription": "This node converts a color to Red-Green-Blue-Alpha floating point values in the range [0.0, 1.0].",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Color",
          "description": "Input color",
          "defaultValue": [
            1,
            0,
            0,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Red",
          "type": "PublicParameters.Data.Float",
          "description": "Red color component in range [0.0, 1.0]"
        },
        {
          "name": "Green",
          "type": "PublicParameters.Data.Float",
          "description": "Green color component in range [0.0, 1.0]"
        },
        {
          "name": "Blue",
          "type": "PublicParameters.Data.Float",
          "description": "Blue color component in range [0.0, 1.0]"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha component in range [0.0, 1.0]"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Color.ToHSV",
      "shortDescription": "converts a color to HSV float values",
      "longDescription": "This node converts a color to Hue-Saturation-Value-Alpha floating point values in the range [0.0, 1.0].",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Color",
          "description": "Input color",
          "defaultValue": [
            1,
            0,
            0,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Hue",
          "type": "PublicParameters.Data.Float",
          "description": "Hue color component in range [0.0, 1.0]"
        },
        {
          "name": "Saturation",
          "type": "PublicParameters.Data.Float",
          "description": "Saturation color component in range [0.0, 1.0]"
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Value color component in range [0.0, 1.0]"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha component in range [0.0, 1.0]"
        }
      ]
    },
    {
      "type": "PublicParameters.Compute.Color.ToYCbCr",
      "shortDescription": "converts a color to YCbCr float values",
      "longDescription": "This node converts a color to YCbCr floating point values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "PublicParameters.Data.Color",
          "description": "Input color",
          "defaultValue": [
            1,
            0,
            0,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Cb",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Cr",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "General.Compute.Container",
      "shortDescription": "is a container",
      "longDescription": "This node has no functionality on its own. It can be used as a container to structure other nodes hierarchically."
    },
    {
      "type": "General.Compute.Plugin",
      "shortDescription": "executes user-provided code",
      "longDescription": "This node executes user-provided JavaScript code, thereby enabling the creation of a custom compute node.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PluginNode.php",
      "inputSlots": [
        {
          "name": "A",
          "type": "PublicParameters.Data.Float",
          "description": "Operand A",
          "defaultValue": 1
        },
        {
          "name": "B",
          "type": "PublicParameters.Data.Float",
          "description": "Operand B",
          "defaultValue": 2
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "General.Compute.Copy",
      "shortDescription": "makes a copy of any data node",
      "longDescription": "This node makes a copy of any data node.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.ConditionalCopy",
      "shortDescription": "makes a copy if Boolean is true",
      "longDescription": "This node makes a copy of any data node if a Boolean condition is true.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        },
        {
          "name": "Copy",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables copying",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.DelayedCopy",
      "shortDescription": "creates a delayed copy of any data node",
      "longDescription": "This node creates a delayed copy of any data node.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/DelayedCopyNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Select",
      "shortDescription": "selects one of two data nodes",
      "longDescription": "This node selects one of two data nodes dependent on a Boolean selector value. It works with any kind of data node.",
      "inputSlots": [
        {
          "name": "If_True",
          "type": "*.Data.*"
        },
        {
          "name": "If_False",
          "type": "*.Data.*"
        },
        {
          "name": "Selector",
          "type": "PublicParameters.Data.Boolean",
          "description": "Select which input is copied to the output",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Get",
      "shortDescription": "gets an element from a vector",
      "longDescription": "This node gets an element from any data node vector.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        },
        {
          "name": "Index",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of the element",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Set",
      "shortDescription": "sets an element of a vector",
      "longDescription": "This node sets an element of any data node vector. If vector is not long enough, it is extended by one additional element.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        },
        {
          "name": "New Element",
          "type": "*.Data.*"
        },
        {
          "name": "Index",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of the element",
          "defaultValue": 0
        },
        {
          "name": "Keep others",
          "type": "PublicParameters.Data.Boolean",
          "description": "Keep all other nodes of the output vector unchanged",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Join",
      "shortDescription": "joins two vectors",
      "longDescription": "This node joins the elements of two data node vectors.",
      "inputSlots": [
        {
          "name": "Input A",
          "type": "*.Data.*"
        },
        {
          "name": "Input B",
          "type": "*.Data.*"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Split",
      "shortDescription": "splits a vector into two",
      "longDescription": "This node splits the elements of a data node vector into two vectors.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        },
        {
          "name": "Split Index",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of the element before which to split the vector",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output A",
          "type": "*.Data.*"
        },
        {
          "name": "Output B",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Extract",
      "shortDescription": "extracts a section of a vector",
      "longDescription": "This node extracts a section of a data node vector according to a given start index and length.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of element where to start the extraction",
          "defaultValue": 0
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of vector elements to extract",
          "defaultValue": 3
        }
      ],
      "outputSlots": [
        {
          "name": "Output A",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.PushPop",
      "shortDescription": "pushes or pops a vector element",
      "longDescription": "This node adds a new element at the back or front of the vector (push) or removes an element at the back or front (pop).",
      "inputSlots": [
        {
          "name": "Push Element",
          "type": "*.Data.*"
        },
        {
          "name": "Push to",
          "type": "PublicParameters.Data.Integer",
          "description": "Push to",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Back"
            },
            {
              "value": 2,
              "label": "Front"
            }
          ]
        },
        {
          "name": "Pop from",
          "type": "PublicParameters.Data.Integer",
          "description": "Pop from",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Back"
            },
            {
              "value": 2,
              "label": "Front"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Stack",
          "type": "*.Data.*"
        },
        {
          "name": "Pop Element",
          "type": "*.Data.*"
        }
      ]
    },
    {
      "type": "General.Compute.Vector.Length",
      "shortDescription": "returns the length of a vector",
      "longDescription": "This node returns the length of a data node vector.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "*.Data.*"
        }
      ],
      "outputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.TimeDelta",
      "shortDescription": "returns the delta time",
      "longDescription": "This node returns the measured time difference in milliseconds since the last graph tick.",
      "outputSlots": [
        {
          "name": "TimeDelta",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.TimeDeltaSum",
      "shortDescription": "accumulates the delta time",
      "longDescription": "This node accumulates the measured delta time in seconds, starting from zero.",
      "inputSlots": [
        {
          "name": "Restart",
          "type": "PublicParameters.Data.Boolean",
          "description": "Restart the tick counter",
          "defaultValue": false
        },
        {
          "name": "Pause",
          "type": "PublicParameters.Data.Boolean",
          "description": "Pause the tick counter",
          "defaultValue": false
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Set a scale factor for the TickFloat output",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "TimeDeltaSum",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "TickCounter",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.TimeTick",
      "shortDescription": "returns the current time tick",
      "longDescription": "This node returns the current time tick.",
      "outputSlots": [
        {
          "name": "Tick",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.TimeTickFloat",
      "shortDescription": "returns the current time tick",
      "longDescription": "This node returns the current time tick as a floating point value.",
      "outputSlots": [
        {
          "name": "Tick",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.TickCounter",
      "shortDescription": "counts the elapsed time ticks",
      "longDescription": "This node counts the elapsed time ticks starting from zero.",
      "inputSlots": [
        {
          "name": "Restart",
          "type": "PublicParameters.Data.Boolean",
          "description": "Restart the tick counter",
          "defaultValue": false
        },
        {
          "name": "Pause",
          "type": "PublicParameters.Data.Boolean",
          "description": "Pause the tick counter",
          "defaultValue": false
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Set a scale factor for the TickFloat output",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Tick",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "TickFloat",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.TimePercent",
      "shortDescription": "returns the current time as a percentage.",
      "longDescription": "This node returns the current time as a percentage of the animation length.",
      "inputSlots": [
        {
          "name": "As Decimal",
          "type": "PublicParameters.Data.Boolean",
          "description": "Returns a decimal number in the range [0.0, 1.0] instead of percent",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "TimePercent",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.TimeParameters",
      "shortDescription": "returns the time control parameters",
      "longDescription": "This node returns time control parameters.",
      "outputSlots": [
        {
          "name": "StartTick",
          "type": "PublicParameters.Data.Integer",
          "description": "Start tick of the time parameters"
        },
        {
          "name": "EndTick",
          "type": "PublicParameters.Data.Integer",
          "description": "End tick of the time parameters"
        },
        {
          "name": "MSecPerTick",
          "type": "PublicParameters.Data.Float",
          "description": "Milliseconds per tick"
        },
        {
          "name": "LoopAnimation",
          "type": "PublicParameters.Data.Boolean",
          "description": "Loop the animation"
        }
      ]
    },
    {
      "type": "Input.Compute.GraphAreaSize",
      "shortDescription": "returns the size of the graph area",
      "longDescription": "This node returns the width and height of the area in which the graph is displayed.",
      "outputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.Mouse",
      "shortDescription": "returns the current mouse information",
      "longDescription": "This node returns the current mouse position and left mouse button status.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/MouseNode.php",
      "inputSlots": [
        {
          "name": "Reference",
          "type": "*.Data.*"
        }
      ],
      "outputSlots": [
        {
          "name": "x",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "y",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "Clicked",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "IsInArea",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "Input.Compute.MouseController",
      "shortDescription": "changes values by mouse motion",
      "longDescription": "This node can be used in combination with the Mouse node to increase or decrease two float values by motion in x- and y-direction.",
      "inputSlots": [
        {
          "name": "x",
          "type": "PublicParameters.Data.Float",
          "description": "The x-coordinate provided by the MouseNode"
        },
        {
          "name": "y",
          "type": "PublicParameters.Data.Float",
          "description": "The y-coordinate provided by the MouseNode"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mouse down information provided by the MouseNode"
        },
        {
          "name": "Clicked",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mouse clicked information provided by the MouseNode"
        },
        {
          "name": "IsInArea",
          "type": "PublicParameters.Data.Boolean",
          "description": "InArea information provided by the MouseNode"
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the increase/decrease scaling in x-direction",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the increase/decrease scaling in y-direction",
          "defaultValue": 1
        },
        {
          "name": "Button",
          "type": "PublicParameters.Data.Boolean",
          "description": "Only update the value if the left mouse button is pressed",
          "defaultValue": true
        },
        {
          "name": "Enable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables change of the output",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Value X",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Value Y",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "dx",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "dy",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.MouseInImage",
      "shortDescription": "returns the mouse position in an image",
      "longDescription": "This node returns the current mouse position as pixel coordinates in the given image and the left mouse button status.",
      "inputSlots": [
        {
          "name": "Image",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        }
      ],
      "outputSlots": [
        {
          "name": "x",
          "type": "PublicParameters.Data.Integer",
          "description": "Mouse x-position in pixels"
        },
        {
          "name": "y",
          "type": "PublicParameters.Data.Integer",
          "description": "Mouse y-position in pixels"
        },
        {
          "name": "xf",
          "type": "PublicParameters.Data.Float",
          "description": "Mouse x-position in range [0, 1]"
        },
        {
          "name": "yf",
          "type": "PublicParameters.Data.Float",
          "description": "Mouse y-position in range [0, 1]"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean",
          "description": "Left mouse button is down"
        },
        {
          "name": "Clicked",
          "type": "PublicParameters.Data.Boolean",
          "description": "Left mouse button was clicked"
        },
        {
          "name": "IsInArea",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mouse is in the area of the image"
        }
      ]
    },
    {
      "type": "Input.Compute.MouseArea",
      "shortDescription": "returns the mouse information for an area",
      "longDescription": "This node returns the current mouse position and left mouse button status for a selectable area.",
      "inputSlots": [
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Display mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Invisible"
            },
            {
              "value": 1,
              "label": "Disk"
            },
            {
              "value": 2,
              "label": "Trail"
            }
          ]
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the increase/decrease scaling in x-direction",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the increase/decrease scaling in y-direction",
          "defaultValue": 1
        },
        {
          "name": "Enable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables change of the output",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "x",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "y",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "Clicked",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "IsInArea",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "ValueX",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "ValueY",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "DeltaX",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "DeltaY",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.Keyboard",
      "shortDescription": "returns the keyboard information",
      "longDescription": "This node returns a text that contains all occurring keys codes. The prefix 'd' means key down, 'u' means key up.",
      "outputSlots": [
        {
          "name": "Keys",
          "type": "PublicParameters.Data.Text",
          "description": "Keys"
        }
      ]
    },
    {
      "type": "Input.Compute.KeyPressed",
      "shortDescription": "informs about a pressed key",
      "longDescription": "This node returns a Boolean value indicating whether a key with the given key code was pressed.",
      "inputSlots": [
        {
          "name": "Key code",
          "type": "PublicParameters.Data.Integer",
          "description": "The key code to monitor (-1 monitors any key)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Pressed",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "Input.Compute.KeyController",
      "shortDescription": "changes a value by keyboard input",
      "longDescription": "This node allows increasing or decreasing a float value by two different keyboard keys.",
      "inputSlots": [
        {
          "name": "Key Plus",
          "type": "PublicParameters.Data.Integer",
          "description": "The key code that triggers an increase of the value",
          "defaultValue": 68
        },
        {
          "name": "Key Minus",
          "type": "PublicParameters.Data.Integer",
          "description": "The key code that triggers a decrease of the value",
          "defaultValue": 65
        },
        {
          "name": "Step size",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the increase/decrease",
          "defaultValue": 1
        },
        {
          "name": "Repeat",
          "type": "PublicParameters.Data.Boolean",
          "description": "Repeat changing the value while the key is down",
          "defaultValue": true
        },
        {
          "name": "Enable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables change of the output",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Output value"
        }
      ]
    },
    {
      "type": "Input.Compute.Slider",
      "shortDescription": "creates a float slider",
      "longDescription": "This node creates a slider that outputs a float value.",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum slider value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum slider value",
          "defaultValue": 100
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of slider",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "SliderValue",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.SliderInteger",
      "shortDescription": "creates an integer slider",
      "longDescription": "This node creates a slider that outputs an integer value.",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Integer",
          "description": "Minimum slider value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum slider value",
          "defaultValue": 10
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of slider",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "SliderValue",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.Knob",
      "shortDescription": "creates a float control knob",
      "longDescription": "This node creates a control knob that outputs a floating point value.",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum slider value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum slider value",
          "defaultValue": 100
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of slider",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "SliderValue",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Input.Compute.Switch",
      "shortDescription": "selects an integer value",
      "longDescription": "This node creates a rotary switch to select an integer value.",
      "inputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Integer",
          "description": "Minimum switch value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum switch value",
          "defaultValue": 2
        },
        {
          "name": "Labels",
          "type": "PublicParameters.Data.Text",
          "description": "Label of switch",
          "defaultValue": "Label0\nLabel1\nLabel2"
        }
      ],
      "outputSlots": [
        {
          "name": "SwitchValue",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "Input.Compute.Button",
      "shortDescription": "creates a button",
      "longDescription": "This node creates a button that outputs a Boolean value.",
      "inputSlots": [
        {
          "name": "AutoRelease",
          "type": "PublicParameters.Data.Boolean",
          "description": "If set to true, a pushed button is automatically released",
          "defaultValue": false
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of button",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "ButtonValue",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "Input.Compute.Label",
      "shortDescription": "creates a label",
      "longDescription": "This node creates a label.",
      "inputSlots": [
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of label",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Simple"
            },
            {
              "value": 1,
              "label": "Colored"
            },
            {
              "value": 2,
              "label": "Colored2"
            }
          ]
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of button",
          "defaultValue": "Label"
        }
      ]
    },
    {
      "type": "Input.Compute.ColorSelect",
      "shortDescription": "creates a color selector",
      "longDescription": "This node creates a color selector.",
      "inputSlots": [
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label",
          "defaultValue": "Color Select"
        }
      ],
      "outputSlots": [
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "Input.Compute.ParameterList",
      "shortDescription": "creates a parameter list",
      "longDescription": "This node creates a parameter list.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ParameterListNode.php",
      "inputSlots": [
        {
          "name": "Parameters",
          "type": "PublicParameters.Data.Text",
          "description": "List of parameters separated by a newline or semicolon",
          "defaultValue": "Group, \"Group Label\"\nFloat, \"Float Label\"\nInteger, \"Integer Label\"\nBoolean, \"Boolean Label\", \"on\", \"off\"\nEmpty\nList, \"List Label\", \"A\", \"B\", \"C\""
        }
      ],
      "outputSlots": [
        {
          "name": "Floats",
          "type": "PublicParameters.Data.FloatVector"
        },
        {
          "name": "Integers",
          "type": "PublicParameters.Data.IntegerVector"
        },
        {
          "name": "Booleans",
          "type": "PublicParameters.Data.BooleanVector"
        },
        {
          "name": "Colors",
          "type": "PublicParameters.Data.ColorVector"
        }
      ]
    },
    {
      "type": "Input.Compute.VirtualJoystick",
      "shortDescription": "creates a virtual joystick",
      "longDescription": "This node creates a virtual joystick that outputs two delta floating point values for the x- and y-directions.",
      "inputSlots": [
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Mode of the joystick",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Appear"
            },
            {
              "value": 2,
              "label": "Stay"
            }
          ]
        },
        {
          "name": "Direction",
          "type": "PublicParameters.Data.Integer",
          "description": "Directional movement mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Both"
            },
            {
              "value": 1,
              "label": "Vertical"
            },
            {
              "value": 2,
              "label": "Horizontal"
            }
          ]
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor for deltaX",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor for deltaY",
          "defaultValue": 1
        },
        {
          "name": "Accuracy",
          "type": "PublicParameters.Data.Float",
          "description": "Amount of motion that is required to move the joystick",
          "defaultValue": 4
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of joystick",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "DeltaX",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "DeltaY",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "D-Pad",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "Focus",
          "type": "PublicParameters.Data.Boolean"
        }
      ]
    },
    {
      "type": "Input.Compute.CameraController",
      "shortDescription": "controls camera parameters via mouse motion",
      "longDescription": "This node controls camera parameters via mouse motion.",
      "inputSlots": [
        {
          "name": "ModeSelect",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the mode via the internal interface or external parameters",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Internal"
            },
            {
              "value": 1,
              "label": "External"
            },
            {
              "value": 2,
              "label": "External (Joystick)"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Pan-Tilt"
            },
            {
              "value": 1,
              "label": "Zoom"
            },
            {
              "value": 2,
              "label": "Truck-Pedestal"
            },
            {
              "value": 3,
              "label": "Dolly"
            },
            {
              "value": 4,
              "label": "Orbit"
            }
          ]
        },
        {
          "name": "Keyboard",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enable WASD keyboard input which allows moving around when holding down the left-mouse button in pan-tilt mode",
          "defaultValue": true
        },
        {
          "name": "Pan-Tilt Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the pan-tilt mode",
          "defaultValue": 1
        },
        {
          "name": "Zoom Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the zoom mode",
          "defaultValue": 1
        },
        {
          "name": "Truck Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the truck-pedestal mode",
          "defaultValue": 1
        },
        {
          "name": "Dolly Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the dolly mode",
          "defaultValue": 1
        },
        {
          "name": "Orbit Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the orbit mode",
          "defaultValue": 1
        },
        {
          "name": "Roll Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the roll mode",
          "defaultValue": 1
        },
        {
          "name": "Keyboard Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the WASD keyboard movement",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Field of View",
          "type": "PublicParameters.Data.Float",
          "description": "Field of View"
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "PositionX"
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "PositionY"
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "PositionZ"
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "TargetX"
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "TargetY"
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "TargetZ"
        },
        {
          "name": "UpX",
          "type": "PublicParameters.Data.Float",
          "description": "UpX"
        },
        {
          "name": "UpY",
          "type": "PublicParameters.Data.Float",
          "description": "UpY"
        },
        {
          "name": "UpZ",
          "type": "PublicParameters.Data.Float",
          "description": "UpZ"
        }
      ]
    },
    {
      "type": "Matrix.Data.Matrix",
      "shortDescription": "stores a floating point matrix",
      "longDescription": "This node stores a matrix of floating point elements.",
      "inputSlots": [
        {
          "name": "In",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Data.MatrixVector",
      "shortDescription": "represents an array of matrices",
      "longDescription": "This node represents an array of matrices.",
      "inputSlots": [
        {
          "name": "In",
          "type": "Matrix.Data.MatrixVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.MatrixVector"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.Random",
      "shortDescription": "generates a random matrix",
      "longDescription": "This node generates a matrix of random values with the given amplitude.",
      "inputSlots": [
        {
          "name": "Rows",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rows",
          "defaultValue": 4
        },
        {
          "name": "Columns",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of columns",
          "defaultValue": 4
        },
        {
          "name": "Amplitude",
          "type": "PublicParameters.Data.Float",
          "description": "Amplitude",
          "defaultValue": 1
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.Identity",
      "shortDescription": "generates an identity matrix",
      "longDescription": "This node generates an identity matrix.",
      "inputSlots": [
        {
          "name": "Rows",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rows",
          "defaultValue": 4
        },
        {
          "name": "Columns",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of columns",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.FromText",
      "shortDescription": "generates a matrix from a given text",
      "longDescription": "This node generates a matrix by parsing floating point values from the given text. The individual values can be separated by whitespaces, comma, or semicolon.",
      "inputSlots": [
        {
          "name": "Rows",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rows",
          "defaultValue": 4
        },
        {
          "name": "Columns",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of columns",
          "defaultValue": 4
        },
        {
          "name": "Values",
          "type": "PublicParameters.Data.Text",
          "description": "Float values as text",
          "defaultValue": "1 0 0 0\n0 1 0 0\n0 0 1 0\n0 0 0 1"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.Vec2",
      "shortDescription": "generates a 2D vector",
      "longDescription": "This node generates a 2 x 1 matrix that can represent a 2D vector.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "X value",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float",
          "description": "Y value",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Vec2",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.Vec3",
      "shortDescription": "generates a 3D vector",
      "longDescription": "This node generates a 3 x 1 matrix that can represent a 3D vector.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "X value",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float",
          "description": "Y value",
          "defaultValue": 0
        },
        {
          "name": "Z",
          "type": "PublicParameters.Data.Float",
          "description": "Z value",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Vec3",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Generate.Vec4",
      "shortDescription": "generates a 4D vector",
      "longDescription": "This node generates a 4 x 1 matrix that can represent a 4D vector.",
      "inputSlots": [
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "X value",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float",
          "description": "Y value",
          "defaultValue": 0
        },
        {
          "name": "Z",
          "type": "PublicParameters.Data.Float",
          "description": "Z value",
          "defaultValue": 0
        },
        {
          "name": "W",
          "type": "PublicParameters.Data.Float",
          "description": "W value",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Vec4",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Add",
      "shortDescription": "adds two matrices",
      "longDescription": "This node adds two matrices.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Subtract",
      "shortDescription": "subtracts two matrices",
      "longDescription": "This node subtracts two matrices.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Multiply",
      "shortDescription": "multiplies two matrices",
      "longDescription": "This node multiplies two matrices.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Multiply3",
      "shortDescription": "multiplies three matrices",
      "longDescription": "This node multiplies three matrices.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix C",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Transpose",
      "shortDescription": "generates the transpose of a matrix",
      "longDescription": "This node generates the transpose of a matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Invert",
      "shortDescription": "inverts a square matrix",
      "longDescription": "This node computes the inverse of a square matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Math.Determinant",
      "shortDescription": "computes the determinant",
      "longDescription": "This node computes the determinant of a square matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Determinant",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Column.Dot",
      "shortDescription": "computes the dot product",
      "longDescription": "This node computes the dot product for the first column vector.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Column.ColumnDot",
      "shortDescription": "computes the dot product",
      "longDescription": "This node computes the dot product for each column vector.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Column.Cross",
      "shortDescription": "computes the cross product",
      "longDescription": "This node computes the cross product for each column vector.",
      "inputSlots": [
        {
          "name": "Matrix A",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Matrix B",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Column.Normalize",
      "shortDescription": "normalizes the length of each column",
      "longDescription": "This node normalizes the length of each column vector to 1.",
      "inputSlots": [
        {
          "name": "In",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Similarity",
      "shortDescription": "generates a 4x4 similarity transformation",
      "longDescription": "This node generates a 4x4 similarity transformation (a translation, rotation, and uniform scaling).",
      "inputSlots": [
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale",
          "defaultValue": 1
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        },
        {
          "name": "Order",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the transformations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "T R S"
            },
            {
              "value": 1,
              "label": "R T S"
            },
            {
              "value": 2,
              "label": "T S R"
            },
            {
              "value": 3,
              "label": "S T R"
            },
            {
              "value": 4,
              "label": "R S T"
            },
            {
              "value": 5,
              "label": "S R T"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Rigid",
      "shortDescription": "generates a 4x4 transformation matrix",
      "longDescription": "This node generates a 4x4 matrix for rigid transformation (and non-uniform scaling).",
      "inputSlots": [
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along x-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along y-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleZ",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along z-axis",
          "defaultValue": 1
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        },
        {
          "name": "Order",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the transformations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "T R S"
            },
            {
              "value": 1,
              "label": "R T S"
            },
            {
              "value": 2,
              "label": "T S R"
            },
            {
              "value": 3,
              "label": "S T R"
            },
            {
              "value": 4,
              "label": "R S T"
            },
            {
              "value": 5,
              "label": "S R T"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Rotation",
      "shortDescription": "generates a 4x4 rotation matrix",
      "longDescription": "This node generates a 4x4 rotation matrix from Euler angles.",
      "inputSlots": [
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Quaternion",
      "shortDescription": "generates a 4x4 rotation matrix",
      "longDescription": "This node generates a 4x4 rotation matrix from a quaternion.",
      "inputSlots": [
        {
          "name": "W",
          "type": "PublicParameters.Data.Float",
          "description": "W component of the quaternion (real part, scalar)",
          "defaultValue": 1
        },
        {
          "name": "X",
          "type": "PublicParameters.Data.Float",
          "description": "X component of the quaternion (imaginary part, vector element)",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Float",
          "description": "Y component of the quaternion (imaginary part, vector element)",
          "defaultValue": 0
        },
        {
          "name": "Z",
          "type": "PublicParameters.Data.Float",
          "description": "Z component of the quaternion (imaginary part, vector element)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Translation",
      "shortDescription": "generates a 4x4 translation matrix",
      "longDescription": "This node generates a 4x4 translation matrix.",
      "inputSlots": [
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Scale",
      "shortDescription": "generates a 4x4 scaling matrix",
      "longDescription": "This node generates a 4x4 scaling matrix.",
      "inputSlots": [
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along x-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along y-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleZ",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along z-axis",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.AlignToTarget",
      "shortDescription": "generates a targeting transformation",
      "longDescription": "This node creates three transformations (head, shaft, and tail) to align the new z-axis, so that it points from the origin to the target.",
      "inputSlots": [
        {
          "name": "OriginX",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position X",
          "defaultValue": 0
        },
        {
          "name": "OriginY",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position Y",
          "defaultValue": 0
        },
        {
          "name": "OriginZ",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position Z",
          "defaultValue": 0
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "Target position X",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Target position Y",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Target position Z",
          "defaultValue": 1
        },
        {
          "name": "OrthoX",
          "type": "PublicParameters.Data.Float",
          "description": "Reference direction for the y-axis",
          "defaultValue": 0
        },
        {
          "name": "OrthoY",
          "type": "PublicParameters.Data.Float",
          "description": "Reference direction for the y-axis",
          "defaultValue": 1
        },
        {
          "name": "OrthoZ",
          "type": "PublicParameters.Data.Float",
          "description": "Reference direction for the y-axis",
          "defaultValue": 0
        },
        {
          "name": "HeadOffset",
          "type": "PublicParameters.Data.Float",
          "description": "Offset of the head in z-direction",
          "defaultValue": 0
        },
        {
          "name": "ShaftScale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling of the shaft in x- and y-direction",
          "defaultValue": 0.1
        }
      ],
      "outputSlots": [
        {
          "name": "Head",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Shaft",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Tail",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.LookAt",
      "shortDescription": "generates a 4x4 lookAt matrix",
      "longDescription": "This node generates a 4x4 lookAt matrix.",
      "inputSlots": [
        {
          "name": "EyeX",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position X",
          "defaultValue": 5
        },
        {
          "name": "EyeY",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position Y",
          "defaultValue": -10
        },
        {
          "name": "EyeZ",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position Z",
          "defaultValue": 5
        },
        {
          "name": "CenterX",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target X",
          "defaultValue": 0
        },
        {
          "name": "CenterY",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Y",
          "defaultValue": 0
        },
        {
          "name": "CenterZ",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Z",
          "defaultValue": 0
        },
        {
          "name": "UpX",
          "type": "PublicParameters.Data.Float",
          "description": "Up X",
          "defaultValue": 0
        },
        {
          "name": "UpY",
          "type": "PublicParameters.Data.Float",
          "description": "Up Y",
          "defaultValue": 0
        },
        {
          "name": "UpZ",
          "type": "PublicParameters.Data.Float",
          "description": "Up Z",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Orbit",
      "shortDescription": "generates a 4x4 orbit matrix",
      "longDescription": "This node generates a 4x4 lookAt matrix from spherical eye coordinates.",
      "inputSlots": [
        {
          "name": "EyeAzimuth",
          "type": "PublicParameters.Data.Float",
          "description": "Azimuthal angle in degrees",
          "defaultValue": 0
        },
        {
          "name": "EyeIncline",
          "type": "PublicParameters.Data.Float",
          "description": "Polar angle in degrees in range [-90, 90]",
          "defaultValue": 0
        },
        {
          "name": "EyeRadius",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of eye to center",
          "defaultValue": 5
        },
        {
          "name": "CenterX",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target X",
          "defaultValue": 0
        },
        {
          "name": "CenterY",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Y",
          "defaultValue": 0
        },
        {
          "name": "CenterZ",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Z",
          "defaultValue": 0
        },
        {
          "name": "Orbit plane",
          "type": "PublicParameters.Data.Integer",
          "description": "Orbit plane",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "x-y"
            },
            {
              "value": 1,
              "label": "x-z"
            },
            {
              "value": 2,
              "label": "y-z"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.Perspective",
      "shortDescription": "generates a 4x4 perspective matrix",
      "longDescription": "This node generates a 4x4 perspective matrix.",
      "inputSlots": [
        {
          "name": "Field of View",
          "type": "PublicParameters.Data.Float",
          "description": "Camera field of view in Y-direction in degrees",
          "defaultValue": 60
        },
        {
          "name": "Aspect",
          "type": "PublicParameters.Data.Float",
          "description": "Camera aspect ratio",
          "defaultValue": 1
        },
        {
          "name": "Near plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of near plane",
          "defaultValue": 0.1
        },
        {
          "name": "Far plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of far plane",
          "defaultValue": 100
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.ApplyTransform",
      "shortDescription": "applies a 4x4 transformation",
      "longDescription": "This node applies a 4x4 transformation to a vec2, vec3, or vec4 matrix.",
      "inputSlots": [
        {
          "name": "Vector",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.FollowShape",
      "shortDescription": "generates a 4x4 matrix by following a shape",
      "longDescription": "This node generates a 4x4 transformation matrix by following one of several ready-made 2D shapes (such as a circle, triangle, square, etc.).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FollowShapeNode.php",
      "inputSlots": [
        {
          "name": "Shape",
          "type": "PublicParameters.Data.Integer",
          "description": "Selection of the shape",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Circle"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Right-angled triangle"
            },
            {
              "value": 3,
              "label": "Square"
            },
            {
              "value": 4,
              "label": "Parallelogram"
            },
            {
              "value": 5,
              "label": "Trapezium"
            },
            {
              "value": 6,
              "label": "Four-star"
            },
            {
              "value": 7,
              "label": "Pentagon"
            },
            {
              "value": 8,
              "label": "Pentagram"
            },
            {
              "value": 9,
              "label": "Hexagon"
            },
            {
              "value": 10,
              "label": "Hexagram"
            },
            {
              "value": 11,
              "label": "Octagon"
            },
            {
              "value": 12,
              "label": "Octagram"
            },
            {
              "value": 13,
              "label": "Heart"
            },
            {
              "value": 14,
              "label": "Cresent"
            },
            {
              "value": 15,
              "label": "Arrow"
            },
            {
              "value": 16,
              "label": "BendArrow"
            },
            {
              "value": 17,
              "label": "Letter"
            },
            {
              "value": 18,
              "label": "Round Box"
            },
            {
              "value": 19,
              "label": "Arrow Head"
            },
            {
              "value": 20,
              "label": "Speech Bubble"
            },
            {
              "value": 21,
              "label": "Inverter"
            },
            {
              "value": 22,
              "label": "Logic And"
            },
            {
              "value": 23,
              "label": "Logic Nand"
            },
            {
              "value": 24,
              "label": "Logic Or"
            },
            {
              "value": 25,
              "label": "Logic Nor"
            },
            {
              "value": 26,
              "label": "Logic Xor"
            },
            {
              "value": 27,
              "label": "Logic Xnor"
            }
          ]
        },
        {
          "name": "Position",
          "type": "PublicParameters.Data.Float",
          "description": "Position on path in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Float",
          "description": "Size of shape",
          "defaultValue": 250
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Boolean",
          "description": "Rotate around Z",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Matrix",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Transformation.FollowPath",
      "shortDescription": "generates a 4x4 matrix by following a path",
      "longDescription": "This node generates a 4x4 transformation matrix by following a 2D path that is defined by SVG path data.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FollowPathNode.php",
      "inputSlots": [
        {
          "name": "Position",
          "type": "PublicParameters.Data.Float",
          "description": "Position on path in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor",
          "defaultValue": 1
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Boolean",
          "description": "Rotate around Z",
          "defaultValue": true
        },
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data",
          "defaultValue": "M 64 64 H 196 V 196 H  64  L 128 128 Z"
        }
      ],
      "outputSlots": [
        {
          "name": "Matrix",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Modify.Round",
      "shortDescription": "rounds the entries of a matrix",
      "longDescription": "This node rounds the entries of a matrix.",
      "inputSlots": [
        {
          "name": "In",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Digits",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of digits to round to. Zero means nearest integer.",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Modify.Submatix",
      "shortDescription": "extracts a submatrix",
      "longDescription": "This node extracts a submatrix.",
      "inputSlots": [
        {
          "name": "In",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Rows",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rows of submatrix",
          "defaultValue": 4
        },
        {
          "name": "Columns",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of columns of submatrix",
          "defaultValue": 4
        },
        {
          "name": "Row start",
          "type": "PublicParameters.Data.Integer",
          "description": "Starting row",
          "defaultValue": 0
        },
        {
          "name": "Column start",
          "type": "PublicParameters.Data.Integer",
          "description": "Starting column",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Modify.Insert",
      "shortDescription": "inserts a matrix",
      "longDescription": "This node inserts a matrix into an existing one.",
      "inputSlots": [
        {
          "name": "Base",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Insert",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Row",
          "type": "PublicParameters.Data.Integer",
          "description": "Insert at row with index",
          "defaultValue": 0
        },
        {
          "name": "Column",
          "type": "PublicParameters.Data.Integer",
          "description": "Insert at column with index",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Modify.SetElement",
      "shortDescription": "sets a matrix element",
      "longDescription": "This node sets a matrix element to a given floating point value.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Float value that is inserted",
          "defaultValue": 0
        },
        {
          "name": "Row",
          "type": "PublicParameters.Data.Integer",
          "description": "Insert at row with index",
          "defaultValue": 0
        },
        {
          "name": "Column",
          "type": "PublicParameters.Data.Integer",
          "description": "Insert at column with index",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Modify.Fill",
      "shortDescription": "fills the matrix with a value",
      "longDescription": "This node fills the matrix with a given value.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Float value that is inserted",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Convert.ToFloat",
      "shortDescription": "gets a floating point value",
      "longDescription": "This node gets the floating point value of the matrix element with the given row and column index. If an index is outside of the matrix dimension, 0.0 is returned.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Row",
          "type": "PublicParameters.Data.Integer",
          "description": "Row index",
          "defaultValue": 0
        },
        {
          "name": "Column",
          "type": "PublicParameters.Data.Integer",
          "description": "Column index",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "Matrix.Compute.Convert.ToText",
      "shortDescription": "converts a matrix to text",
      "longDescription": "This node generates a text containing the floating point values of a given matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Format of output",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "space+newline"
            },
            {
              "value": 1,
              "label": "comma+semicolon"
            },
            {
              "value": 2,
              "label": "space"
            },
            {
              "value": 3,
              "label": "comma"
            },
            {
              "value": 4,
              "label": "matlab"
            },
            {
              "value": 5,
              "label": "maple"
            }
          ]
        },
        {
          "name": "Accuracy",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of digits after the decimal point (-1 means full accuracy)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "SignalProcessing.Data.Signal",
      "shortDescription": "stores a discrete-time signal",
      "longDescription": "This node stores a signal represented as a time series of floating point values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Data.SignalVector",
      "shortDescription": "represents an array of signals",
      "longDescription": "This node represents an array of signals.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.SignalVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.SignalVector"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Wave",
      "shortDescription": "generates waveforms",
      "longDescription": "This node generates different types of waveforms (cosine, sine, sawtooth, square, constant).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/WaveGeneratorNode.php",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Wavelength",
          "type": "PublicParameters.Data.Integer",
          "description": "Wavelength",
          "defaultValue": 32
        },
        {
          "name": "Amplitude",
          "type": "PublicParameters.Data.Float",
          "description": "Amplitude",
          "defaultValue": 1
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset",
          "defaultValue": 0
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of waveform",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Cosine"
            },
            {
              "value": 1,
              "label": "Sine"
            },
            {
              "value": 2,
              "label": "Sawtooth"
            },
            {
              "value": 3,
              "label": "Square"
            },
            {
              "value": 4,
              "label": "Constant"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Pulse",
      "shortDescription": "generates different types of pulses",
      "longDescription": "This node generates different types of pulses (Rect, Gauss, Triangle, Sinc, Hamming, Blackman, Von-Hann, Lanczos, RectStrict).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PulseGeneratorNode.php",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Pulse length",
          "type": "PublicParameters.Data.Integer",
          "description": "Pulse length",
          "defaultValue": 32
        },
        {
          "name": "Amplitude",
          "type": "PublicParameters.Data.Float",
          "description": "Amplitude",
          "defaultValue": 1
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Pulse type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rect"
            },
            {
              "value": 1,
              "label": "Gauss"
            },
            {
              "value": 2,
              "label": "Triangle"
            },
            {
              "value": 3,
              "label": "Sinc"
            },
            {
              "value": 4,
              "label": "Hamming"
            },
            {
              "value": 5,
              "label": "Blackman"
            },
            {
              "value": 6,
              "label": "Von-Hann"
            },
            {
              "value": 7,
              "label": "Lanczos"
            },
            {
              "value": 8,
              "label": "RectStrict"
            }
          ]
        },
        {
          "name": "Alignment",
          "type": "PublicParameters.Data.Integer",
          "description": "Alignment type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Origin"
            },
            {
              "value": 2,
              "label": "Left"
            },
            {
              "value": 3,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Transition",
      "shortDescription": "generates a transition",
      "longDescription": "This node generates different types of transitions between two values (linear, smoothstep, smootherstep, cosine).",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Transition",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the transition",
          "defaultValue": 64
        },
        {
          "name": "Level A",
          "type": "PublicParameters.Data.Float",
          "description": "Signal value at start of transition",
          "defaultValue": 0
        },
        {
          "name": "Level B",
          "type": "PublicParameters.Data.Float",
          "description": "Signal value at end of transition",
          "defaultValue": 1
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of transition",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "SmoothStep"
            },
            {
              "value": 2,
              "label": "SmootherStep"
            },
            {
              "value": 3,
              "label": "Cosine"
            }
          ]
        },
        {
          "name": "Alignment",
          "type": "PublicParameters.Data.Integer",
          "description": "Alignment type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Left"
            },
            {
              "value": 2,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.FromFunction",
      "shortDescription": "creates a signal from a mathematical function",
      "longDescription": "This node creates a signal from a mathematical function (such as sin, cos, log, pow etc.) that is parsed from a given text. The text must contain an 'x' representing the current time x of the signal s(x).",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset",
          "defaultValue": 0
        },
        {
          "name": "Function",
          "type": "PublicParameters.Data.Text",
          "description": "Mathematical function",
          "defaultValue": "cos(0.05*pi*x) * exp(-pow(x, 2.0) / 5000)"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.FromText",
      "shortDescription": "generates a signal by parsing floating point values",
      "longDescription": "This node generates a signal by parsing floating point values from the given text. The individual values can be separated by whitespaces, comma, or semicolon.",
      "inputSlots": [
        {
          "name": "Values",
          "type": "PublicParameters.Data.Text",
          "description": "Float values as text",
          "defaultValue": "1.0, 0.0, -0.5, 0.75, 0.25"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Chirp",
      "shortDescription": "generates a chirp",
      "longDescription": "This node generates a chirp signal in which the wavelength increases or decreases with time.",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 131072
        },
        {
          "name": "Wavelength Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Wavelength at the start of the signal",
          "defaultValue": 4
        },
        {
          "name": "Wavelength End",
          "type": "PublicParameters.Data.Integer",
          "description": "Wavelength at the end of the signal",
          "defaultValue": 400
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of chirp",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Piecewise constant"
            },
            {
              "value": 1,
              "label": "Linear"
            },
            {
              "value": 2,
              "label": "Quadratic"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Construct",
      "shortDescription": "allows constructing a signal",
      "longDescription": "This node allows constructing a signal with an interactive interface.",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal amplitude",
          "defaultValue": 2
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal amplitude",
          "defaultValue": -1
        },
        {
          "name": "Quantization",
          "type": "PublicParameters.Data.Float",
          "description": "Amplitude quantization  (negative value disables quantization)",
          "defaultValue": 0.125
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Path",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Generate.Random",
      "shortDescription": "generates a random signal",
      "longDescription": "This node generates a signal of random values with the given amplitude.",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the signal",
          "defaultValue": 128
        },
        {
          "name": "Amplitude",
          "type": "PublicParameters.Data.Float",
          "description": "Amplitude",
          "defaultValue": 1
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.Add",
      "shortDescription": "adds two signals",
      "longDescription": "This node adds two signals.",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.Subtract",
      "shortDescription": "subtracts two signals",
      "longDescription": "This node subtracts two signals.",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.Multiply",
      "shortDescription": "multiplies two signals",
      "longDescription": "This node multiplies two signals.",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.Divide",
      "shortDescription": "divides two signals",
      "longDescription": "This node divides two signals. If division by zero is detected, division by one is performed instead.",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.LinearBlend",
      "shortDescription": "linearly interpolates two signals",
      "longDescription": "This node linearly interpolates between two signals. An interpolation weight of 0.0 returns signal A, and a weight of 1.0 returns signal B.",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Math.MathFunction",
      "shortDescription": "applies a mathematical function",
      "longDescription": "This node applies a mathematical function (such as sin, cos, log, pow etc.) that is parsed from a given text. The text must contain an 'x' representing the value of the signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Function",
          "type": "PublicParameters.Data.Text",
          "description": "Mathematical function",
          "defaultValue": "cos(0.05*pi*x) * exp(-pow(x, 2.0) / 5000)"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Scale",
      "shortDescription": "scales the signal",
      "longDescription": "This node scales a signal by multiplying with a given scalar value.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.AmplitudeOffset",
      "shortDescription": "offsets the amplitude of a signal",
      "longDescription": "This node offsets the amplitude of a signal by adding a given scalar value to all values of the signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Float",
          "description": "Offset value",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Absolute",
      "shortDescription": "returns the absolute value of a signal",
      "longDescription": "This node sets all values of a signal to their absolute value.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Shift",
      "shortDescription": "shifts the signal in time",
      "longDescription": "This node shifts a signal by the given shift time. There are three modes (zero, periodic, extend).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalShiftNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Time",
          "type": "PublicParameters.Data.Integer",
          "description": "Shift time",
          "defaultValue": 0
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Shift mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Zero"
            },
            {
              "value": 1,
              "label": "Periodic"
            },
            {
              "value": 2,
              "label": "Extend"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Crop",
      "shortDescription": "crops the signal",
      "longDescription": "This node crops the signal by a given length. There are three modes (front, back, and both).",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Crop length",
          "defaultValue": 0
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Crop mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Back"
            },
            {
              "value": 1,
              "label": "Front"
            },
            {
              "value": 2,
              "label": "Both"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Normalize",
      "shortDescription": "normalizes the signal",
      "longDescription": "This node normalizes the signal by scaling the amplitude such that it matches a given target value.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalNormalizeNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Tpye of value to normalize",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Abs. Peak"
            },
            {
              "value": 1,
              "label": "Abs. Sum"
            },
            {
              "value": 2,
              "label": "Sum"
            },
            {
              "value": 3,
              "label": "Abs. Average"
            },
            {
              "value": 4,
              "label": "Average"
            }
          ]
        },
        {
          "name": "Target",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum value",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Repeat",
      "shortDescription": "repeats the input signal",
      "longDescription": "This node repeats the input signal for the given number of repetitions.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Repetitions",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of repetitions",
          "defaultValue": 2
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Padding",
      "shortDescription": "pads the signal with a given value",
      "longDescription": "This node pads a signal with a given value at the beginning or the end depending on the selected mode.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Value used for padding",
          "defaultValue": 0
        },
        {
          "name": "Pading",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the padding",
          "defaultValue": 100
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Padding mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Post"
            },
            {
              "value": 1,
              "label": "Pre"
            },
            {
              "value": 2,
              "label": "Both"
            },
            {
              "value": 3,
              "label": "Target-Post"
            },
            {
              "value": 4,
              "label": "Target-Pre"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Extract",
      "shortDescription": "extracts a section of a signal",
      "longDescription": "This extracts a section of signal according to a given starting time and length.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Start time",
          "defaultValue": 0
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length to be extracted",
          "defaultValue": 100
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Reverse",
      "shortDescription": "reverses the time axis of the signal",
      "longDescription": "This node reverses the time axis of the signal s(t) = s(-t).",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.SetFloat",
      "shortDescription": "sets a floating point value at the given time",
      "longDescription": "This node sets a floating point value at the given time into a signal. If the signal is not long enough, it is extended accordingly.",
      "inputSlots": [
        {
          "name": "Input Signal",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Value",
          "defaultValue": 0
        },
        {
          "name": "Time",
          "type": "PublicParameters.Data.Integer",
          "description": "Time",
          "defaultValue": 0
        },
        {
          "name": "No Copy",
          "type": "PublicParameters.Data.Boolean",
          "description": "Do not copy input signal to output. If true only the single passed valued is change in the output, all other maintain as they are.",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Quantize",
      "shortDescription": "quantizes the signal amplitude",
      "longDescription": "This node applies uniform amplitude quantization with a selectable quantization step size.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalQuantizeNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Step size",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the quantization step",
          "defaultValue": 0.1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Modify.Clamp",
      "shortDescription": "clamps the amplitude",
      "longDescription": "This node clamps a signal's amplitude to the given minimum and maximum.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum of signal amplitude",
          "defaultValue": 1
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum of signal amplitude",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Combine.Concatenate",
      "shortDescription": "concatenates two signals",
      "longDescription": "This node concatenates two signals.",
      "inputSlots": [
        {
          "name": "A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Combine.Alternate",
      "shortDescription": "combines two signals by alternating",
      "longDescription": "This node combines two signals by adding one value from each source in an alternating manner.",
      "inputSlots": [
        {
          "name": "A",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "B",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Combine.Insert",
      "shortDescription": "inserts a signal",
      "longDescription": "This node inserts a signal at a given position into another signal.",
      "inputSlots": [
        {
          "name": "Base",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Insert",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Time",
          "type": "PublicParameters.Data.Integer",
          "description": "Time",
          "defaultValue": 0
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Inserting mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Replace"
            },
            {
              "value": 1,
              "label": "Extend"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Reduce.Max",
      "shortDescription": "returns the largest value",
      "longDescription": "This node returns the largest of all values of the signal (or of all absolute values).",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Absolute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Use absolute values",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Reduce.Min",
      "shortDescription": "returns the smallest value",
      "longDescription": "This node returns the smallest of all values of the signal (or of all absolute values).",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Absolute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Use absolute values",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Reduce.Average",
      "shortDescription": "computes the average value",
      "longDescription": "This node returns the average of all values of the signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Average",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Reduce.Length",
      "shortDescription": "returns the length of the signal",
      "longDescription": "This node returns the length of the signal, which is the number of stored values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Reduce.Integrator",
      "shortDescription": "performs a discrete time integration",
      "longDescription": "This node performs a discrete time integration by accumulating all values of the signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Sum",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Convolve",
      "shortDescription": "convolves two signals",
      "longDescription": "This node computes the convolution of two signals.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalConvolutionNode.php",
      "inputSlots": [
        {
          "name": "Signal A",
          "type": "SignalProcessing.Data.Signal",
          "description": "Signal A"
        },
        {
          "name": "Signal B",
          "type": "SignalProcessing.Data.Signal",
          "description": "Signal B"
        }
      ],
      "outputSlots": [
        {
          "name": "Result",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Coefficients",
      "shortDescription": "generates coefficients for filtering",
      "longDescription": "This node generates coefficients for different types of filters (low-pass, high-pass, band-pass, band-reject) using different approaches (FIR Hamming-Windowed-Sinc, ...).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterNode.php#Coefficients",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the filter (must be an odd number)",
          "defaultValue": 65
        },
        {
          "name": "Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Cut-off filter cutoff frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.5
        },
        {
          "name": "Cut-off2",
          "type": "PublicParameters.Data.Float",
          "description": "Second cut-off frequency for band-filters",
          "defaultValue": 0.7
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Low-pass"
            },
            {
              "value": 1,
              "label": "High-pass"
            },
            {
              "value": 2,
              "label": "Band-pass"
            },
            {
              "value": 3,
              "label": "Band-reject"
            }
          ]
        },
        {
          "name": "Approch",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Hamming"
            },
            {
              "value": 1,
              "label": "Blackmann"
            },
            {
              "value": 2,
              "label": "Butterworth"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Nominator",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Denominator",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Filter delay",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Filter",
      "shortDescription": "filters a signal",
      "longDescription": "This node filters a signal using the given numerator and denominator coefficients of a rational transfer function",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Nominator",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Denominator",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Filter delay",
          "type": "PublicParameters.Data.Integer",
          "description": "Filter delay",
          "defaultValue": 0
        },
        {
          "name": "Zero phase",
          "type": "PublicParameters.Data.Boolean",
          "description": "Ensures a zero phase shift by filtering in the forward and reverse direction",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Lowpass",
      "shortDescription": "applies a low-pass filter",
      "longDescription": "This node performs low-pass filtering of a signal using different approaches.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterLowpassNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Cut-off filter cutoff frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.5
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Hamming"
            },
            {
              "value": 1,
              "label": "Blackmann"
            },
            {
              "value": 2,
              "label": "BlackmanNuttal"
            },
            {
              "value": 3,
              "label": "Lanczos"
            },
            {
              "value": 4,
              "label": "Butterworth"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of the applied filter",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Highpass",
      "shortDescription": "applies a high-pass filter",
      "longDescription": "This node performs high-pass filtering of a signal using different approaches.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterHighpassNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Cut-off filter cutoff frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.5
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Hamming"
            },
            {
              "value": 1,
              "label": "Blackmann"
            },
            {
              "value": 2,
              "label": "BlackmanNuttal"
            },
            {
              "value": 3,
              "label": "Lanczos"
            },
            {
              "value": 4,
              "label": "Butterworth"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of the applied filter",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Bandpass",
      "shortDescription": "applies a band-pass filter",
      "longDescription": "This node performs band-pass filtering of a signal using different approaches.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterBandpassNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Lower Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Lower cut-off frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.25
        },
        {
          "name": "Upper Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Upper cut-off frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.5
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Hamming"
            },
            {
              "value": 1,
              "label": "Blackmann"
            },
            {
              "value": 2,
              "label": "BlackmanNuttal"
            },
            {
              "value": 3,
              "label": "Lanczos"
            },
            {
              "value": 4,
              "label": "Butterworth"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of the applied filter",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Bandreject",
      "shortDescription": "applies a band-reject filter",
      "longDescription": "This node performs band-reject filtering of a signal using different approaches.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FilterBandrejectNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Lower Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Lower cut-off frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.25
        },
        {
          "name": "Upper Cut-off",
          "type": "PublicParameters.Data.Float",
          "description": "Upper cut-off frequency as a fraction of PI [0.0, 1.0[",
          "defaultValue": 0.5
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Hamming"
            },
            {
              "value": 1,
              "label": "Blackmann"
            },
            {
              "value": 2,
              "label": "BlackmanNuttal"
            },
            {
              "value": 3,
              "label": "Lanczos"
            },
            {
              "value": 4,
              "label": "Butterworth"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of the applied filter",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Filter.Resample",
      "shortDescription": "resamples a signal",
      "longDescription": "This node resamples a signal.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalResampleNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Upsample",
          "type": "PublicParameters.Data.Integer",
          "description": "Upsample factor",
          "defaultValue": 1
        },
        {
          "name": "Downsample",
          "type": "PublicParameters.Data.Integer",
          "description": "Downsample factor",
          "defaultValue": 1
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Hamming"
            },
            {
              "value": 2,
              "label": "Blackmann"
            },
            {
              "value": 3,
              "label": "BlackmanNuttal"
            },
            {
              "value": 4,
              "label": "Lanczos"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of the applied filter",
          "defaultValue": 3
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.FourierReal",
      "shortDescription": "computes the discrete Fourier transform (DFT) of a given signal",
      "longDescription": "This node computes the discrete Fourier transform (DFT) of a given signal.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FourierTransform.php",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.FourierRealInverse",
      "shortDescription": "computes the inverse of a the discrete Fourier transform (IDFT)",
      "longDescription": "This node reconstructs the original signal from the real and imaginary coefficients of a discrete Fourier transform (DFT).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FourierTransform.php",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.Fourier",
      "shortDescription": "computes the discrete Fourier transform (DFT) of a given signal",
      "longDescription": "This node computes the discrete Fourier transform (DFT) of a given signal.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FourierTransform.php",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.FourierInverse",
      "shortDescription": "computes the inverse of a the discrete Fourier transform (IDFT)",
      "longDescription": "This node reconstructs the original signal from the real and imaginary coefficients of a discrete Fourier transform (DFT).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/FourierTransform.php",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.Cosine",
      "shortDescription": "computes the discrete cosine transform (DCT) of a given signal",
      "longDescription": "This node computes the discrete cosine transform (DCT) of a given signal.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.CosineInverse",
      "shortDescription": "computes the inverse of a the discrete cosine transform (IDCT) ",
      "longDescription": "This node reconstructs the original signal from coefficients of a discrete cosine transform (DCT).",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.FourierSeries",
      "shortDescription": "computes the Fourier series of a given periodic signal",
      "longDescription": "This node computes the Fourier series of a given periodic signal.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "No. coefficients",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of coefficients",
          "defaultValue": 10
        }
      ],
      "outputSlots": [
        {
          "name": "Cosines",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Sines",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.FourierSeriesInverse",
      "shortDescription": "computes the inverse Fourier series",
      "longDescription": "This node reconstructs the original periodic signal from the cosine and sine coefficients of a Fourier series.",
      "inputSlots": [
        {
          "name": "Cosines",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Sines",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length of the output",
          "defaultValue": 200
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Transform.MagnitudePhase",
      "shortDescription": "converts the complex DFT output to magnitude and phase",
      "longDescription": "This node converts the complex output of a discrete Fourier transform (DFT) into a magnitude and phase representation.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/MagnitudePhase.php",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Format of magnitude",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "standard"
            },
            {
              "value": 1,
              "label": "dB"
            },
            {
              "value": 2,
              "label": "normalized"
            }
          ]
        },
        {
          "name": "Phase Thres",
          "type": "PublicParameters.Data.Float",
          "description": "Round phase to zero threshold",
          "defaultValue": 0.001
        }
      ],
      "outputSlots": [
        {
          "name": "Magnitude",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Phase",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Convert.ToFloat",
      "shortDescription": "gets a floating point value from the given time",
      "longDescription": "This node gets a floating point value of a time signal at the given time. If the time is outside of the signal, 0.0 is returned.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Time",
          "type": "PublicParameters.Data.Integer",
          "description": "Time",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Convert.ToFloatVector",
      "shortDescription": "converts a signal to a vector of floats",
      "longDescription": "This node converts a signal to a vector of floating point values.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        }
      ],
      "outputSlots": [
        {
          "name": "Vector",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Convert.ToText",
      "shortDescription": "converts a signal to text",
      "longDescription": "This node generates a text containing comma-separated floating point values of the signal according to a given starting time and length. A negative length exports all values until the end.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Start time",
          "defaultValue": 0
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Length to be extracted (-1 means until the end)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Convert.ToSVG",
      "shortDescription": "converts a signal to an SVG figure",
      "longDescription": "This node generates a text that describes the signal as an SVG figure.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Zoom",
          "type": "PublicParameters.Data.Float",
          "description": "Zoom value",
          "defaultValue": 2
        },
        {
          "name": "Aspect",
          "type": "PublicParameters.Data.Float",
          "description": "Aspect ratio",
          "defaultValue": 1.3333
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Convert.ToSVGMulti",
      "shortDescription": "converts multiple signals to an SVG figure",
      "longDescription": "This node generates a text that describes multiple signals as an SVG figure.",
      "inputSlots": [
        {
          "name": "Signals",
          "type": "SignalProcessing.Data.SignalVector",
          "description": "Vector of input signals"
        },
        {
          "name": "XOffsets",
          "type": "PublicParameters.Data.FloatVector",
          "description": "Vector of x-offsets"
        },
        {
          "name": "XScale",
          "type": "PublicParameters.Data.FloatVector",
          "description": "Vector of x-scales (applied before offset"
        },
        {
          "name": "Zoom",
          "type": "PublicParameters.Data.Float",
          "description": "Zoom value",
          "defaultValue": 2
        },
        {
          "name": "Aspect",
          "type": "PublicParameters.Data.Float",
          "description": "Aspect ratio",
          "defaultValue": 1.3333
        },
        {
          "name": "XMax",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal x-value",
          "defaultValue": 100
        },
        {
          "name": "XMin",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal x-value",
          "defaultValue": 0
        },
        {
          "name": "XTick",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of tick along x-axis",
          "defaultValue": 10
        },
        {
          "name": "YMax",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal y-value",
          "defaultValue": 1
        },
        {
          "name": "YMin",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal y-value",
          "defaultValue": -1
        },
        {
          "name": "YTick",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of tick along y-axis",
          "defaultValue": 0.1
        },
        {
          "name": "Accuracy",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of digits after the decimal point (-1 means full accuracy)",
          "defaultValue": 2
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.OverTime.Float",
      "shortDescription": "plots a float value over time",
      "longDescription": "This node creates a signal by plotting a floating point value over time.",
      "inputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Value",
          "defaultValue": 1
        },
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset signal to zero at start time",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.OverTime.Integer",
      "shortDescription": "plots an integer value over time",
      "longDescription": "This node creates a signal by plotting an integer value over time.",
      "inputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Integer",
          "description": "Value",
          "defaultValue": 1
        },
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset signal to zero at start time",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.OverTime.Boolean",
      "shortDescription": "plots a Boolean value over time",
      "longDescription": "This node creates a signal by plotting a Boolean value over time.",
      "inputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Boolean",
          "description": "Value",
          "defaultValue": true
        },
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset signal to zero at start time",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.OverTime.ToFloat",
      "shortDescription": "gets a floating point value from the current time",
      "longDescription": "This node gets a floating point value of a time signal at the current animation time. If the time is outside of the signal, 0.0 is returned.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Time offset",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.OverTime.ToInteger",
      "shortDescription": "gets an integer value from the current time",
      "longDescription": "This node rounds the value of a time signal at the current animation time to the nearest integer. If the time is outside of the signal, 0 is returned.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Integer",
          "description": "Time offset",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.Helper.GraphPlotter",
      "shortDescription": "plots a signal as a graph",
      "longDescription": "This node plots an input signal as a graph.",
      "inputSlots": [
        {
          "name": "Signal",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "XMax",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal x-value",
          "defaultValue": 1
        },
        {
          "name": "XMin",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal x-value",
          "defaultValue": -1
        },
        {
          "name": "XGrid",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of the grid lines along x-axis",
          "defaultValue": 0.5
        },
        {
          "name": "YMax",
          "type": "PublicParameters.Data.Float",
          "description": "Maximal y-value",
          "defaultValue": 1
        },
        {
          "name": "YMin",
          "type": "PublicParameters.Data.Float",
          "description": "Minimal y-value",
          "defaultValue": -1
        },
        {
          "name": "YGrid",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of the grid lines along y-axis",
          "defaultValue": 0.5
        },
        {
          "name": "Accuracy",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of digits after the decimal point (-1 means full accuracy, -2 for hidden)",
          "defaultValue": 2
        },
        {
          "name": "Uniform",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enforce a fixed uniform scaling in x- and y-direction",
          "defaultValue": false
        },
        {
          "name": "Shift",
          "type": "PublicParameters.Data.Boolean",
          "description": "Shift the signal by half a sample to the right",
          "defaultValue": false
        },
        {
          "name": "Resample",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the re-sampling approach for signals that are larger than 4096 samples",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "MinMax"
            },
            {
              "value": 1,
              "label": "Average"
            }
          ]
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the displayed graph",
          "defaultValue": [
            0.9019607843137255,
            0.4235294117647059,
            0.09019607843137255,
            1
          ]
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of graph",
          "defaultValue": "Label"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalEnvelope",
      "shortDescription": "generates a key ADSR envelope",
      "longDescription": "This node generates an ADSR envelope signal for shaping a sound signal over time.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/EnvelopeGeneratorNode.php",
      "inputSlots": [
        {
          "name": "Length",
          "type": "PublicParameters.Data.Integer",
          "description": "Total Length of Envelope",
          "defaultValue": 2048
        },
        {
          "name": "Attack",
          "type": "PublicParameters.Data.Float",
          "description": "Attack Time",
          "defaultValue": 0.2
        },
        {
          "name": "Decay",
          "type": "PublicParameters.Data.Float",
          "description": "Decay Time",
          "defaultValue": 0.1
        },
        {
          "name": "Sustain Level",
          "type": "PublicParameters.Data.Float",
          "description": "Sustain Level",
          "defaultValue": 0.7
        },
        {
          "name": "Sustain Time",
          "type": "PublicParameters.Data.Float",
          "description": "Sustain Time",
          "defaultValue": 0.5
        },
        {
          "name": "Release",
          "type": "PublicParameters.Data.Float",
          "description": "Release Time",
          "defaultValue": 0.2
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalSpeed",
      "shortDescription": "changes the speed",
      "longDescription": "This node changes the speed of the audio signal by an arbitrary factor which affects pitch and tempo.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Factor of speed change",
          "defaultValue": 0.5
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Triangle"
            },
            {
              "value": 1,
              "label": "Cubic"
            },
            {
              "value": 2,
              "label": "Lanczos3"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalTranspose",
      "shortDescription": "transposes an audio signal",
      "longDescription": "This node transposes an audio signal, affecting pitch and tempo.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Note in",
          "type": "PublicParameters.Data.Text",
          "description": "Musical note of input (e.g., A4, C4, C#5, B3)",
          "defaultValue": "A4"
        },
        {
          "name": "Note out",
          "type": "PublicParameters.Data.Text",
          "description": "Musical note of ouput (e.g., A4, C4, C#5, B3)",
          "defaultValue": "G4"
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Triangle"
            },
            {
              "value": 1,
              "label": "Cubic"
            },
            {
              "value": 2,
              "label": "Lanczos3"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalLimiter",
      "shortDescription": "limits an audio signal",
      "longDescription": "This node applies a dynamic range limiter effect to an input signal.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalLimiter.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Threshold",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold in dB at which limiting starts",
          "defaultValue": -6
        },
        {
          "name": "Soft knee",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the soft knee in dB",
          "defaultValue": 0
        },
        {
          "name": "Attack time",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds",
          "defaultValue": 0
        },
        {
          "name": "Release time",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds",
          "defaultValue": 0.5
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Samples per second",
          "defaultValue": 44100
        },
        {
          "name": "Make-up gain",
          "type": "PublicParameters.Data.Boolean",
          "description": "Apply make-up gain",
          "defaultValue": true
        },
        {
          "name": "Debug",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects which debug signal is displayed at the debug output",
          "defaultValue": 5,
          "options": [
            {
              "value": 0,
              "label": "Input dB"
            },
            {
              "value": 1,
              "label": "Applied Characteristic"
            },
            {
              "value": 2,
              "label": "Gain"
            },
            {
              "value": 3,
              "label": "Smoothed Gain"
            },
            {
              "value": 4,
              "label": "Make-up Gain"
            },
            {
              "value": 5,
              "label": "Final Gain"
            },
            {
              "value": 6,
              "label": "Characteristic"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        },
        {
          "name": "Debug",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalCompressor",
      "shortDescription": "applies a compressor effect",
      "longDescription": "This node applies a dynamic range compressor effect on an input signal.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/SignalCompressor.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Threshold",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold in dB at which limiting starts",
          "defaultValue": -6
        },
        {
          "name": "Ratio",
          "type": "PublicParameters.Data.Float",
          "description": "Compression ratio for amplitudes above the threshold",
          "defaultValue": 3
        },
        {
          "name": "Soft knee",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the soft knee in dB",
          "defaultValue": 5
        },
        {
          "name": "Attack time",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds",
          "defaultValue": 0.1
        },
        {
          "name": "Release time",
          "type": "PublicParameters.Data.Float",
          "description": "Release time in seconds",
          "defaultValue": 0.5
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Samples per second",
          "defaultValue": 44100
        },
        {
          "name": "Make-up gain",
          "type": "PublicParameters.Data.Boolean",
          "description": "Apply Make-up gain",
          "defaultValue": true
        },
        {
          "name": "Debug",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects which debug signal is displayed at the debug output",
          "defaultValue": 5,
          "options": [
            {
              "value": 0,
              "label": "Input dB"
            },
            {
              "value": 1,
              "label": "Applied Characteristic"
            },
            {
              "value": 2,
              "label": "Gain"
            },
            {
              "value": 3,
              "label": "Smoothed Gain"
            },
            {
              "value": 4,
              "label": "Make-up Gain"
            },
            {
              "value": 5,
              "label": "Final Gain"
            },
            {
              "value": 6,
              "label": "Characteristic"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        },
        {
          "name": "Debug",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalOverdrive",
      "shortDescription": "applies an overdrive effect",
      "longDescription": "This node applies an overdrive effect to an input signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Amount of distortion",
          "defaultValue": 1.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalDistortion",
      "shortDescription": "applies a distortion effect",
      "longDescription": "This node applies a distortion effect to an input signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of original and distorted signal",
          "defaultValue": 0.5
        },
        {
          "name": "Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Amount of distortion",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalEcho",
      "shortDescription": "applies an echo effect",
      "longDescription": "This node applies an audio echo effect to an input signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Delay time",
          "type": "PublicParameters.Data.Float",
          "description": "Delay time in seconds",
          "defaultValue": 0.2
        },
        {
          "name": "Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Feedback weight in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of original and delayed signal",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalReverb",
      "shortDescription": "applies a reverb effect",
      "longDescription": "This node applies an audio reverb effect to an input signal.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Delay time",
          "type": "PublicParameters.Data.Float",
          "description": "Delay time in seconds",
          "defaultValue": 0.2
        },
        {
          "name": "Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Feedback weight in range [0.0, 1.0]",
          "defaultValue": 0.4
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of original and delayed signal",
          "defaultValue": 0.5
        },
        {
          "name": "Preset",
          "type": "PublicParameters.Data.Integer",
          "description": "Different presets for internal parameters",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Default"
            },
            {
              "value": 1,
              "label": "Sparse"
            },
            {
              "value": 2,
              "label": "Full"
            },
            {
              "value": 3,
              "label": "Even"
            },
            {
              "value": 4,
              "label": "Allpass"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalAmplitudeModulation",
      "shortDescription": "modulates the amplitude",
      "longDescription": "This node uses a modulator signal to change the amplitude.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Modulator",
          "type": "SignalProcessing.Data.Signal",
          "description": "Modulator signal"
        },
        {
          "name": "Wrap mode",
          "type": "PublicParameters.Data.Integer",
          "description": "The wrap mode of the modulator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Fit"
            },
            {
              "value": 1,
              "label": "Crop"
            },
            {
              "value": 2,
              "label": "Repeat"
            },
            {
              "value": 3,
              "label": "Mirrored repeat"
            },
            {
              "value": 4,
              "label": "Clamp"
            }
          ]
        },
        {
          "name": "Stretch",
          "type": "PublicParameters.Data.Float",
          "description": "Time stretch factor of the modulator function (has no effect for wrap mode=fit)",
          "defaultValue": 1
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Nearest"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalPitchModulation",
      "shortDescription": "modulates the pitch",
      "longDescription": "This node uses a modulator signal to change the pitch of an audio signal.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Modulator",
          "type": "SignalProcessing.Data.Signal",
          "description": "Modulator signal"
        },
        {
          "name": "Unit",
          "type": "PublicParameters.Data.Integer",
          "description": "The unit of the modulator signal",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Semitones"
            },
            {
              "value": 1,
              "label": "Octaves"
            },
            {
              "value": 2,
              "label": "Cents"
            }
          ]
        },
        {
          "name": "Wrap mode",
          "type": "PublicParameters.Data.Integer",
          "description": "The wrap mode of the modulator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Fit"
            },
            {
              "value": 1,
              "label": "Crop"
            },
            {
              "value": 2,
              "label": "Repeat"
            },
            {
              "value": 3,
              "label": "Mirrored repeat"
            },
            {
              "value": 4,
              "label": "Clamp"
            }
          ]
        },
        {
          "name": "Stretch",
          "type": "PublicParameters.Data.Float",
          "description": "Time stretch factor of the modulator function (has no effect for wrap mode=fit)",
          "defaultValue": 1
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter for the interpolation of the modulator signal",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Nearest"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            }
          ]
        },
        {
          "name": "Input filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter for the interpolation of the input signal",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Triangle"
            },
            {
              "value": 1,
              "label": "Cubic"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalTimeModulation",
      "shortDescription": "modulates a time offset",
      "longDescription": "This node uses a modulator signal to modulate a time offset.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Modulator",
          "type": "SignalProcessing.Data.Signal",
          "description": "Modulator signal"
        },
        {
          "name": "Unit",
          "type": "PublicParameters.Data.Integer",
          "description": "The unit of the modulator signal",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Milliseconds"
            },
            {
              "value": 1,
              "label": "Samples"
            }
          ]
        },
        {
          "name": "Wrap mode",
          "type": "PublicParameters.Data.Integer",
          "description": "The wrap mode of the modulator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Fit"
            },
            {
              "value": 1,
              "label": "Crop"
            },
            {
              "value": 2,
              "label": "Repeat"
            },
            {
              "value": 3,
              "label": "Mirrored repeat"
            },
            {
              "value": 4,
              "label": "Clamp"
            }
          ]
        },
        {
          "name": "Stretch",
          "type": "PublicParameters.Data.Float",
          "description": "Time stretch factor of the modulator function (has no effect for wrap mode=fit)",
          "defaultValue": 1
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Nearest"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            }
          ]
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "SignalProcessing.Compute.AudioRelated.SignalMixModulation",
      "shortDescription": "modulates the mixing of two signals",
      "longDescription": "This node modulates the mixing of two audio signals.",
      "inputSlots": [
        {
          "name": "InputA",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal A"
        },
        {
          "name": "InputB",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal B"
        },
        {
          "name": "Modulator",
          "type": "SignalProcessing.Data.Signal",
          "description": "Modulator signal"
        },
        {
          "name": "Wrap mode",
          "type": "PublicParameters.Data.Integer",
          "description": "The wrap mode of the modulator",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Fit"
            },
            {
              "value": 1,
              "label": "Crop"
            },
            {
              "value": 2,
              "label": "Repeat"
            },
            {
              "value": 3,
              "label": "Mirrored repeat"
            },
            {
              "value": 4,
              "label": "Clamp"
            }
          ]
        },
        {
          "name": "Stretch",
          "type": "PublicParameters.Data.Float",
          "description": "Time stretch factor of the modulator function (has no effect for wrap mode=fit)",
          "defaultValue": 1
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Nearest"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "AudioProcessing.Data.Stream",
      "shortDescription": "holds audio stream information",
      "longDescription": "This node holds audio stream information.",
      "inputSlots": [
        {
          "name": "In",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Data.StreamVector",
      "shortDescription": "represents an array of audio streams",
      "longDescription": "This node represents an array of audio streams.",
      "inputSlots": [
        {
          "name": "In",
          "type": "AudioProcessing.Data.StreamVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.StreamVector"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.Oscillator",
      "shortDescription": "represents an oscillator",
      "longDescription": "This node represents an oscillator that outputs an audio stream.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#oscillator",
      "inputSlots": [
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the type of oscillator wave",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Sine"
            },
            {
              "value": 1,
              "label": "Square"
            },
            {
              "value": 2,
              "label": "Sawtooth"
            },
            {
              "value": 3,
              "label": "Triangle"
            }
          ]
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz",
          "defaultValue": 440
        },
        {
          "name": "Phase",
          "type": "PublicParameters.Data.Float",
          "description": "Phase offset when triggered or restarted in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0]",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.LFO",
      "shortDescription": "represents an LFO",
      "longDescription": "This node represents a low-frequency oscillator (LFO).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#lfo",
      "inputSlots": [
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the type of oscillator wave",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Sine"
            },
            {
              "value": 1,
              "label": "Square"
            },
            {
              "value": 2,
              "label": "Sawtooth"
            },
            {
              "value": 3,
              "label": "Triangle"
            }
          ]
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz",
          "defaultValue": 5
        },
        {
          "name": "Phase",
          "type": "PublicParameters.Data.Float",
          "description": "Phase offset when triggered or restarted in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "Retrigger",
          "type": "PublicParameters.Data.Boolean",
          "description": "Generate an individual LFO for each note when used in an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.PhaseModOsc",
      "shortDescription": "represents an FM operator",
      "longDescription": "This node represents an oscillator with phase modulation which is useful as an operator in FM synthesis.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#PhaseModOsc",
      "inputSlots": [
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the type of oscillator wave",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Sine"
            },
            {
              "value": 1,
              "label": "Square"
            },
            {
              "value": 2,
              "label": "Sawtooth"
            },
            {
              "value": 3,
              "label": "Triangle"
            }
          ]
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz",
          "defaultValue": 440
        },
        {
          "name": "PhaseMod",
          "type": "AudioProcessing.Data.Stream",
          "description": "Phase offset in range [-1.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0]",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.PeriodicWave",
      "shortDescription": "represents a periodic wave",
      "longDescription": "This node represents an oscillator with an arbitrary periodic waveform as the sum of sine and cosine functions.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#PeriodicWave",
      "inputSlots": [
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal",
          "description": "Real Fourier coefficients of the periodic wave"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal",
          "description": "Imaginary Fourier coefficients of the periodic wave"
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz",
          "defaultValue": 440
        },
        {
          "name": "PhaseMod",
          "type": "AudioProcessing.Data.Stream",
          "description": "Phase offset in range [-1.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0]",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.PeriodicFour",
      "shortDescription": "represents four periodic wave oscillators",
      "longDescription": "This node represents four periodic wave oscillators that are connected to implement different FM algorithms.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#PeriodicFour",
      "inputSlots": [
        {
          "name": "Algorithm",
          "type": "PublicParameters.Data.Integer",
          "description": "FM algorithm",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "A B C D"
            },
            {
              "value": 1,
              "label": "A B D>C"
            },
            {
              "value": 2,
              "label": "D>A D>B D>C"
            },
            {
              "value": 3,
              "label": "B>A D>C"
            },
            {
              "value": 4,
              "label": "B>A C>A D>A"
            },
            {
              "value": 5,
              "label": "D>C>B A"
            },
            {
              "value": 6,
              "label": "D>C>A D>C>B"
            },
            {
              "value": 7,
              "label": "D>B>A D>C>A"
            },
            {
              "value": 8,
              "label": "C>B>A D>A"
            },
            {
              "value": 9,
              "label": "D>B>A C>B>A"
            },
            {
              "value": 10,
              "label": "D>C>B>A"
            }
          ]
        },
        {
          "name": "A_Real",
          "type": "SignalProcessing.Data.Signal",
          "description": "Real Fourier coefficients of the periodic wave A"
        },
        {
          "name": "A_Imaginary",
          "type": "SignalProcessing.Data.Signal",
          "description": "Imaginary Fourier coefficients of the periodic wave A"
        },
        {
          "name": "A_Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz of wave A",
          "defaultValue": 440
        },
        {
          "name": "A_Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents of wave A",
          "defaultValue": 0
        },
        {
          "name": "A_Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0] of wave A",
          "defaultValue": 0.25
        },
        {
          "name": "A_Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of the feedback loop for periodic wave A (0.0 = no feedback)",
          "defaultValue": 0
        },
        {
          "name": "A_Velocity",
          "type": "PublicParameters.Data.Float",
          "description": "Weighting for the velocity of the triggered note for periodic wave A in range [-1.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "A_FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument of wave A",
          "defaultValue": true
        },
        {
          "name": "A_Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output of wave A",
          "defaultValue": false
        },
        {
          "name": "B_Real",
          "type": "SignalProcessing.Data.Signal",
          "description": "Real Fourier coefficients of the periodic wave B"
        },
        {
          "name": "B_Imaginary",
          "type": "SignalProcessing.Data.Signal",
          "description": "Imaginary Fourier coefficients of the periodic wave B"
        },
        {
          "name": "B_Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz of wave B",
          "defaultValue": 440
        },
        {
          "name": "B_Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents of wave B",
          "defaultValue": 0
        },
        {
          "name": "B_Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0] of wave B",
          "defaultValue": 0.25
        },
        {
          "name": "B_Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of the feedback loop for periodic wave B",
          "defaultValue": 0
        },
        {
          "name": "B_Velocity",
          "type": "PublicParameters.Data.Float",
          "description": "Weighting for the velocity of the triggered note for periodic wave A in range [-1.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "B_FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument of wave B",
          "defaultValue": true
        },
        {
          "name": "B_Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output of wave B",
          "defaultValue": false
        },
        {
          "name": "C_Real",
          "type": "SignalProcessing.Data.Signal",
          "description": "Real Fourier coefficients of the periodic wave C"
        },
        {
          "name": "C_Imaginary",
          "type": "SignalProcessing.Data.Signal",
          "description": "Imaginary Fourier coefficients of the periodic wave C"
        },
        {
          "name": "C_Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz of wave C",
          "defaultValue": 440
        },
        {
          "name": "C_Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents of wave C",
          "defaultValue": 0
        },
        {
          "name": "C_Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0] of wave C",
          "defaultValue": 0.25
        },
        {
          "name": "C_Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of the feedback loop for periodic wave C",
          "defaultValue": 0
        },
        {
          "name": "C_Velocity",
          "type": "PublicParameters.Data.Float",
          "description": "Weighting for the velocity of the triggered note for periodic wave C in range [-1.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "C_FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument of wave C",
          "defaultValue": true
        },
        {
          "name": "C_Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output of wave C",
          "defaultValue": false
        },
        {
          "name": "D_Real",
          "type": "SignalProcessing.Data.Signal",
          "description": "Real Fourier coefficients of the periodic wave D"
        },
        {
          "name": "D_Imaginary",
          "type": "SignalProcessing.Data.Signal",
          "description": "Imaginary Fourier coefficients of the periodic wave D"
        },
        {
          "name": "D_Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of oscillation in hertz of wave D",
          "defaultValue": 440
        },
        {
          "name": "D_Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the oscillation in cents of wave D",
          "defaultValue": 0
        },
        {
          "name": "D_Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain (Amplitude) of the oscillation in range [0.0, 1.0] of wave D",
          "defaultValue": 0.25
        },
        {
          "name": "D_Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of the feedback loop for periodic wave D",
          "defaultValue": 0
        },
        {
          "name": "D_Velocity",
          "type": "PublicParameters.Data.Float",
          "description": "Weighting for the velocity of the triggered note for periodic wave D in range [-1.0, 1.0]",
          "defaultValue": 1
        },
        {
          "name": "D_FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument of wave D",
          "defaultValue": true
        },
        {
          "name": "D_Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output of wave D",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.WavetableOsc",
      "shortDescription": "represents a wavetable oscillator",
      "longDescription": "This node represents a wavetable oscillator. The input audio signal should contain exactly one complete cycle of a periodic function.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#WavetableOsc",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input audio stream"
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the playback in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Multiplicative gain",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the playback speed when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.AudioBuffer",
      "shortDescription": "represents a mono audio buffer",
      "longDescription": "This node represents a mono audio buffer that takes an audio signal as input and outputs an audio stream.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#audiobuffer",
      "inputSlots": [
        {
          "name": "Input",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input audio stream"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Loop",
          "type": "PublicParameters.Data.Boolean",
          "description": "Loop audio buffer input",
          "defaultValue": true
        },
        {
          "name": "Speed factor",
          "type": "PublicParameters.Data.Float",
          "description": "Speed factor at which the audio is played, where a value of 1.0 means unchanged",
          "defaultValue": 1
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the playback in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Multiplicative gain",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the playback speed when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.AudioBufferStereo",
      "shortDescription": "represents a stereo audio buffer",
      "longDescription": "This node represents a stereo audio buffer that takes two audio signals as input and outputs a stereo audio stream.",
      "inputSlots": [
        {
          "name": "Left",
          "type": "SignalProcessing.Data.Signal",
          "description": "Left audio stream input"
        },
        {
          "name": "Right",
          "type": "SignalProcessing.Data.Signal",
          "description": "Right audio stream input"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Loop",
          "type": "PublicParameters.Data.Boolean",
          "description": "Loop audio buffer inputs",
          "defaultValue": true
        },
        {
          "name": "Speed factor",
          "type": "PublicParameters.Data.Float",
          "description": "Speed factor at which the audio is played, where a value of 1.0 means unchanged",
          "defaultValue": 1
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the playback in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Multiplicative gain",
          "defaultValue": 0.25
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Boolean",
          "description": "Triggered note affects the frequency when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Boolean",
          "description": "Velocity of the triggered note affects gain when used within an instrument",
          "defaultValue": true
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.Noise",
      "shortDescription": "generates noise",
      "longDescription": "This generates an audio stream of noise.",
      "inputSlots": [
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the type of noise",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "White"
            },
            {
              "value": 1,
              "label": "Pink"
            },
            {
              "value": 2,
              "label": "Brown"
            }
          ]
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the playback in cents",
          "defaultValue": 0
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Multiplicative gain",
          "defaultValue": 0.25
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Mute the output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.Envelope",
      "shortDescription": "generates an envelope",
      "longDescription": "This node generates an ADSR envelope.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#envelope",
      "inputSlots": [
        {
          "name": "Amplitude",
          "type": "PublicParameters.Data.Float",
          "description": "Global scaling factor for the amplidue of the envelope",
          "defaultValue": 0.25
        },
        {
          "name": "Delay",
          "type": "PublicParameters.Data.Float",
          "description": "Delay time in seconds",
          "defaultValue": 0
        },
        {
          "name": "AttackType",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the shape of the attach curve",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "Exponential"
            },
            {
              "value": 2,
              "label": "Exp.Fast"
            },
            {
              "value": 3,
              "label": "Exp.Faster"
            }
          ]
        },
        {
          "name": "Attack",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds",
          "defaultValue": 0.1
        },
        {
          "name": "AttackLevel",
          "type": "PublicParameters.Data.Float",
          "description": "Level reached after the attack time",
          "defaultValue": 1
        },
        {
          "name": "DecayType",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the shape of the decay curve",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "Exponential"
            },
            {
              "value": 2,
              "label": "Exp.Fast"
            },
            {
              "value": 3,
              "label": "Exp.Faster"
            }
          ]
        },
        {
          "name": "Decay",
          "type": "PublicParameters.Data.Float",
          "description": "Decay time in seconds",
          "defaultValue": 0.1
        },
        {
          "name": "SustainLevel",
          "type": "PublicParameters.Data.Float",
          "description": "Sustain level reached after the decay time",
          "defaultValue": 0.6
        },
        {
          "name": "ReleaseType",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the shape of the release curve",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "Exponential"
            },
            {
              "value": 2,
              "label": "Exp.Fast"
            },
            {
              "value": 3,
              "label": "Exp.Faster"
            }
          ]
        },
        {
          "name": "Release",
          "type": "PublicParameters.Data.Float",
          "description": "Release time in seconds",
          "defaultValue": 0.1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.FromFloat",
      "shortDescription": "generates a constant stream",
      "longDescription": "This node generates a constant audio stream from a given floating-point value.",
      "inputSlots": [
        {
          "name": "Value",
          "type": "PublicParameters.Data.Float",
          "description": "Input float value",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream",
          "description": "Ouput audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Generate.FromControl",
      "shortDescription": "generates an audio stream from a midi controller",
      "longDescription": "This node sets the output audio stream to a constant value according to a selectable midi controller change message.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi device (-1 for all midi devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi channel (-1 for all midi channels)",
          "defaultValue": -1
        },
        {
          "name": "Controller",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi controller (-1 for all controllers)",
          "defaultValue": -1,
          "options": [
            {
              "value": 0,
              "label": "BankSelect"
            },
            {
              "value": 1,
              "label": "Modulation"
            },
            {
              "value": 2,
              "label": "Breath"
            },
            {
              "value": 3,
              "label": "Undefined1"
            },
            {
              "value": 4,
              "label": "Foot"
            },
            {
              "value": 5,
              "label": "Portamento"
            },
            {
              "value": 6,
              "label": "Data"
            },
            {
              "value": 7,
              "label": "MainVolume"
            },
            {
              "value": 8,
              "label": "Balance"
            },
            {
              "value": 9,
              "label": "Undefined2"
            },
            {
              "value": 10,
              "label": "Pan"
            },
            {
              "value": 11,
              "label": "Pedal"
            },
            {
              "value": 12,
              "label": "Effect1"
            },
            {
              "value": 13,
              "label": "Effect2"
            }
          ]
        },
        {
          "name": "PitchBend",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables pitch bend input (if set to true, controller change messages are ignored)",
          "defaultValue": false
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum slider value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum slider value",
          "defaultValue": 1
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of the slider",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream",
          "description": "Ouput audio stream"
        },
        {
          "name": "SliderValue",
          "type": "PublicParameters.Data.Float",
          "description": "Stores the current slider value"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Destination.Play",
      "shortDescription": "plays the audio stream",
      "longDescription": "This node plays the given audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Destination.PlayAnalysed",
      "shortDescription": "plays and analyses the audio stream",
      "longDescription": "This node plays the given audio stream and outputs analyser results as signals.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Selector",
          "type": "PublicParameters.Data.Text",
          "description": "Select an analyser in the upstream audio stream for output by its label",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "Wavefront",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Spectrum",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Destination.Record",
      "shortDescription": "plays and records the audio stream",
      "longDescription": "This node plays and records the given audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Record",
          "type": "PublicParameters.Data.Boolean",
          "description": "Recording the input stream. The output is updated once the recording is stopped again.",
          "defaultValue": false
        },
        {
          "name": "MaxSamples",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum number of samples to record (should be multiple of 4096).",
          "defaultValue": 10240000
        },
        {
          "name": "RemoveSilence",
          "type": "PublicParameters.Data.Boolean",
          "description": "Automatically removes silence at the beginning",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "RecordedSamples",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of recorded samples"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate"
        },
        {
          "name": "Left",
          "type": "SignalProcessing.Data.Signal",
          "description": "Left ouptut channel"
        },
        {
          "name": "Right",
          "type": "SignalProcessing.Data.Signal",
          "description": "Right ouptut channel"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Destination.PlaySignal",
      "shortDescription": "plays a signal as an audio signal",
      "longDescription": "This node plays a given signal as an audio signal with a given sample rate. The signal's amplitude must be in the range [-1.0, 1.0].",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/AudioPlayNode.php",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Pan",
          "type": "PublicParameters.Data.Float",
          "description": "0.0 centered, -1.0 full left pan, 1.0 full right pan",
          "defaultValue": 0
        },
        {
          "name": "Fade",
          "type": "PublicParameters.Data.Integer",
          "description": "Fade in/out time in milliseconds",
          "defaultValue": 0
        },
        {
          "name": "Postpone",
          "type": "PublicParameters.Data.Integer",
          "description": "Time by which the playback is postponed in milliseconds",
          "defaultValue": 0
        },
        {
          "name": "Queued",
          "type": "PublicParameters.Data.Boolean",
          "description": "New audio signals are added to a queue and are played after the others ended",
          "defaultValue": false
        },
        {
          "name": "Mute",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable playback",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Instrument.Instrument",
      "shortDescription": "generates an instrument",
      "longDescription": "This node generates an instrument from a single audio stream that can be played with a virtual or real midi device.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#instrument",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Reference",
          "type": "PublicParameters.Data.Text",
          "description": "Reference note of input stream (A3 corresponds to 440 Hz)",
          "defaultValue": "A3"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi channel (-1 for all midi channels)",
          "defaultValue": -1
        },
        {
          "name": "Polyphonic",
          "type": "PublicParameters.Data.Boolean",
          "description": "The instrument can play multiple notes at once",
          "defaultValue": true
        },
        {
          "name": "IgnoreOff",
          "type": "PublicParameters.Data.Boolean",
          "description": "Ignores a note off midi signal",
          "defaultValue": false
        },
        {
          "name": "Latency",
          "type": "PublicParameters.Data.Float",
          "description": "Expected latency by which the note sheduling is delayed in seconds",
          "defaultValue": 0.01
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Instrument.InstrumentMulti",
      "shortDescription": "generates an instrument",
      "longDescription": "This node generates an instrument from a vector of audio streams that can be played with a virtual or real midi device.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#instrumentmulti",
      "inputSlots": [
        {
          "name": "Inputs",
          "type": "AudioProcessing.Data.StreamVector"
        },
        {
          "name": "Mapping",
          "type": "PublicParameters.Data.Text",
          "description": "Mapping of notes (A3 corresponds to 440 Hz)",
          "defaultValue": "A3 > C0--B3; A4 > C4--B8"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi channel (-1 for all midi channels)",
          "defaultValue": -1
        },
        {
          "name": "Polyphonic",
          "type": "PublicParameters.Data.Boolean",
          "description": "The instrument can play multiple notes at once",
          "defaultValue": true
        },
        {
          "name": "IgnoreOff",
          "type": "PublicParameters.Data.Boolean",
          "description": "Ignores a note off midi signal",
          "defaultValue": false
        },
        {
          "name": "Latency",
          "type": "PublicParameters.Data.Float",
          "description": "Expected latency by which the note sheduling is delayed in seconds",
          "defaultValue": 0.01
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Instrument.PrefabInstrument",
      "shortDescription": "creates an instrument from a prefab",
      "longDescription": "This node creates an instrument from a prefabricated stream.",
      "inputSlots": [
        {
          "name": "Category",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the instrument category",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Piano/Keys"
            },
            {
              "value": 1,
              "label": "Bass"
            },
            {
              "value": 2,
              "label": "Lead"
            },
            {
              "value": 3,
              "label": "Pad"
            },
            {
              "value": 4,
              "label": "Strings"
            },
            {
              "value": 5,
              "label": "Organ"
            },
            {
              "value": 6,
              "label": "Brass"
            },
            {
              "value": 7,
              "label": "Guitar"
            },
            {
              "value": 8,
              "label": "Effect"
            },
            {
              "value": 9,
              "label": "Percussion"
            },
            {
              "value": 10,
              "label": "Special"
            }
          ]
        },
        {
          "name": "Instrument",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the instrument",
          "defaultValue": 0
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi channel (-1 for all midi channels)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Name",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Instrument.PrefabDeprecated",
      "shortDescription": "creates an instrument from a prefab",
      "longDescription": "This node creates an instrument from a prefabricated stream (deprecated; will be removed soon).",
      "inputSlots": [
        {
          "name": "Prefab",
          "type": "PublicParameters.Data.Integer",
          "description": "Select a prefab",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "SawBass1"
            },
            {
              "value": 1,
              "label": "E-PianoFmChorus1"
            },
            {
              "value": 2,
              "label": "BellFM1"
            },
            {
              "value": 3,
              "label": "Metronome"
            },
            {
              "value": 4,
              "label": "Seb"
            },
            {
              "value": 5,
              "label": "SawPlug1"
            },
            {
              "value": 6,
              "label": "TriBass1"
            },
            {
              "value": 7,
              "label": "808-StyleBass1"
            },
            {
              "value": 8,
              "label": "Brass1"
            },
            {
              "value": 9,
              "label": "DetunedSquares"
            }
          ]
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select midi channel (-1 for all midi channels)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.File.Load",
      "shortDescription": "loads an audio signal from a file",
      "longDescription": "This node loads an audio signal from a file.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/AudioLoadNode.php",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of an audio file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel to decode",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.File.LoadStereo",
      "shortDescription": "loads a stereo audio signal from a file",
      "longDescription": "This node loads a stereo audio signal from a file.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/AudioLoadNode.php",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of an audio file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        }
      ],
      "outputSlots": [
        {
          "name": "Left",
          "type": "SignalProcessing.Data.Signal",
          "description": "Left audio signal"
        },
        {
          "name": "Right",
          "type": "SignalProcessing.Data.Signal",
          "description": "Right audio signal"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.File.Save",
      "shortDescription": "saves a signal as an audio file",
      "longDescription": "This node saves a signal as an audio file. The signal's amplitude must be in the range [-1.0, 1.0].",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input audio signal"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of the audio file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Output format",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "16-bit"
            },
            {
              "value": 1,
              "label": "32-bit-float"
            }
          ]
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable saving",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.File.SaveStereo",
      "shortDescription": "saves a signal as a stereo audio file",
      "longDescription": "This node saves a signal as an audio file. The signal's amplitude must be in the range [-1.0, 1.0].",
      "inputSlots": [
        {
          "name": "left",
          "type": "SignalProcessing.Data.Signal",
          "description": "Left input signal"
        },
        {
          "name": "right",
          "type": "SignalProcessing.Data.Signal",
          "description": "Right input signal"
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        },
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of the audio file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Output format",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "16-bit"
            },
            {
              "value": 1,
              "label": "32-bit-float"
            }
          ]
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable saving",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.Merge",
      "shortDescription": "merges two streams",
      "longDescription": "This node merges two audio streams.",
      "inputSlots": [
        {
          "name": "In1",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "In2",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.Merge3",
      "shortDescription": "merges three streams",
      "longDescription": "This node merges three audio streams.",
      "inputSlots": [
        {
          "name": "In1",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "In2",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "In3",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.MergeMulti",
      "shortDescription": "merges multiple streams",
      "longDescription": "This node merges multiple audio streams.",
      "inputSlots": [
        {
          "name": "Inputs",
          "type": "AudioProcessing.Data.StreamVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.ChannelSplitterLeft",
      "shortDescription": "extracts the left channel",
      "longDescription": "This node extracts the left channel of an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Amount of gain to apply to the left channel after extraction ((0.0=mute, 1.0=unchanged)",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.ChannelSplitterRight",
      "shortDescription": "extracts the right channel",
      "longDescription": "This node extracts the right channel of an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Amount of gain to apply to the right channel after extraction ((0.0=mute, 1.0=unchanged)",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.ChannelMerger",
      "shortDescription": "combines two mono channels into stereo",
      "longDescription": "This node combines two mono channel streams into a stereo stream.",
      "inputSlots": [
        {
          "name": "Left",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Right",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Routing.Feedback",
      "shortDescription": "allows generating a feedback loop",
      "longDescription": "This node allows generating a feedback loop in the stream routing.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.WaveShaper",
      "shortDescription": "applies wave shaping distortion",
      "longDescription": "This node applies wave shaping distortion to an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Curve",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Oversample",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the upsampling factor for the shaping curve",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "2x"
            },
            {
              "value": 2,
              "label": "4x"
            }
          ]
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Delay",
      "shortDescription": "causes a delay",
      "longDescription": "This node causes a delay in the audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "DelayTime",
          "type": "AudioProcessing.Data.Stream",
          "description": "Delay time in seconds in range [0, 3.0]",
          "defaultValue": 0.2
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.BiquadFilter",
      "shortDescription": "applies a biquad filter",
      "longDescription": "This node applies a biquad filter (lowpass, highpass, bandpass etc.) to the input stream.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ModularSynthesizer.php#biquadfilter",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Filter Type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Lowpass"
            },
            {
              "value": 1,
              "label": "Highpass"
            },
            {
              "value": 2,
              "label": "Bandpass"
            },
            {
              "value": 3,
              "label": "Lowshelf"
            },
            {
              "value": 4,
              "label": "Highshelf"
            },
            {
              "value": 5,
              "label": "Peaking"
            },
            {
              "value": 6,
              "label": "Notch"
            },
            {
              "value": 7,
              "label": "Allpass"
            }
          ]
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Reference frequency for the selected filter operation",
          "defaultValue": 350
        },
        {
          "name": "Detune",
          "type": "AudioProcessing.Data.Stream",
          "description": "Detuning of the reference frequency in cents",
          "defaultValue": 0
        },
        {
          "name": "QFactor",
          "type": "AudioProcessing.Data.Stream",
          "description": "Quality factor in the range range of [0.0001, 1000.0]",
          "defaultValue": 1
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Gain applied in the filter operation in dB in range [-40, 40]",
          "defaultValue": -20
        },
        {
          "name": "FollowNote",
          "type": "PublicParameters.Data.Float",
          "description": "To what extent the triggered note affects the filter frequency when used within an instrument. The value must be in range [0.0, 1.0] where 0.0 = no influence and 1.0 = full influence",
          "defaultValue": 0
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Limiter",
      "shortDescription": "limits the audio stream",
      "longDescription": "This node provides a dynamic range limiter for an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Threshold",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold in dB at which limiting starts in range [-100, 0]",
          "defaultValue": -6
        },
        {
          "name": "Soft knee",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the soft knee in dB in range [0, 40]",
          "defaultValue": 0
        },
        {
          "name": "Attack time",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds in range [0.0, 1.0]",
          "defaultValue": 0
        },
        {
          "name": "Release time",
          "type": "PublicParameters.Data.Float",
          "description": "Release time in seconds in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Compressor",
      "shortDescription": "provides a compressor effect",
      "longDescription": "This node provides a dynamic range compressor for an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Threshold",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold in dB at which limiting starts in range [-100, 0]",
          "defaultValue": -6
        },
        {
          "name": "Ratio",
          "type": "PublicParameters.Data.Float",
          "description": "Compression ratio for amplitudes above the threshold in range [1, 20]",
          "defaultValue": 3
        },
        {
          "name": "Soft knee",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the soft knee in dB in range [0, 40]",
          "defaultValue": 5
        },
        {
          "name": "Attack time",
          "type": "PublicParameters.Data.Float",
          "description": "Attack time in seconds in range [0.0, 1.0]",
          "defaultValue": 0.1
        },
        {
          "name": "Release time",
          "type": "PublicParameters.Data.Float",
          "description": "Release time in seconds in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Echo",
      "shortDescription": "applies an echo effect",
      "longDescription": "This node applies an echo effect for an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Delay time",
          "type": "PublicParameters.Data.Float",
          "description": "Delay time in seconds in range [0.0, 3.0]",
          "defaultValue": 0.2
        },
        {
          "name": "Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Feedback weight in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of input and delayed signal (0.0 = only input, 1.0 = only delayed)",
          "defaultValue": 0.5
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Reverb",
      "shortDescription": "applies a reverb effect",
      "longDescription": "This node applies a reverb effect to an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "PreDelay",
          "type": "PublicParameters.Data.Float",
          "description": "Time in seconds until the first reflections are audible",
          "defaultValue": 0
        },
        {
          "name": "Feedback",
          "type": "PublicParameters.Data.Float",
          "description": "Feedback weight in range [0.0, 0.8]",
          "defaultValue": 0.65
        },
        {
          "name": "Damping",
          "type": "PublicParameters.Data.Float",
          "description": "Cut-off frequency of the damping low-pass filter in Hz",
          "defaultValue": 1500
        },
        {
          "name": "DelayFactor",
          "type": "PublicParameters.Data.Float",
          "description": "Delay factor in range [1.0, 5.0]",
          "defaultValue": 1
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of input and the reverb signal (0.0 = only input, 1.0 = only reverb)",
          "defaultValue": 0.5
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Chorus",
      "shortDescription": "applies a chorus effect",
      "longDescription": "This node applies an echo effect to an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Delay time",
          "type": "PublicParameters.Data.Float",
          "description": "Delay time in seconds with typical range 0.01 to 0.05",
          "defaultValue": 0.04
        },
        {
          "name": "Depth",
          "type": "PublicParameters.Data.Float",
          "description": "Modulation depth in seconds",
          "defaultValue": 0.002
        },
        {
          "name": "Rate",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency of modulation in Hz",
          "defaultValue": 0.5
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of input and chorus signal (0.0 = only input, 1.0 = only chorus)",
          "defaultValue": 0.5
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Ouput audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.StereoPanner",
      "shortDescription": "pans an audio stream left or right",
      "longDescription": "This node pans an audio stream left or right.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Pan",
          "type": "AudioProcessing.Data.Stream",
          "description": "Pan parameter, 0.0 = centered, -1.0 = full left pan, 1.0 = full right pan",
          "defaultValue": 0
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Distortion",
      "shortDescription": "applies a distortion effect",
      "longDescription": "This node applies a distortion effect to an audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input audio stream"
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of distortion",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Distortion"
            },
            {
              "value": 1,
              "label": "Overdrive"
            },
            {
              "value": 2,
              "label": "Bitcrusher"
            },
            {
              "value": 3,
              "label": "Clipping"
            }
          ]
        },
        {
          "name": "Strength",
          "type": "PublicParameters.Data.Float",
          "description": "Strength of the effect",
          "defaultValue": 5
        },
        {
          "name": "Mix",
          "type": "PublicParameters.Data.Float",
          "description": "Mixing factor of input and delayed signal (0.0 = only input, 1.0 = only distorted)",
          "defaultValue": 1
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove from stream)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Stream",
          "type": "AudioProcessing.Data.Stream",
          "description": "Output audio stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Effect.Gain",
      "shortDescription": "applies gain to the stream",
      "longDescription": "This node applies gain to all audio stream input data before its propagation to the output.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Gain",
          "type": "AudioProcessing.Data.Stream",
          "description": "Amount of gain to apply (0.0=mute, 1.0=unchanged)",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Analyse.StreamInfo",
      "shortDescription": "outputs stream information",
      "longDescription": "This node generates a text with information about the given audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input stream",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Info",
          "type": "PublicParameters.Data.Text",
          "description": "Stream information"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Analyse.StreamInfoIntern",
      "shortDescription": "outputs stream information",
      "longDescription": "This node generates a text with information about the given audio stream.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream",
          "description": "Input stream",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Info",
          "type": "PublicParameters.Data.Text",
          "description": "Stream information"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Analyse.Analyser",
      "shortDescription": "analyses an audio stream",
      "longDescription": "This node analyses the audio stream and displays wavefront and spectrum data.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Graph color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the displayed graphs",
          "defaultValue": [
            0.8,
            0.8,
            0.8,
            1
          ]
        },
        {
          "name": "Collect",
          "type": "PublicParameters.Data.Boolean",
          "description": "Collect also the analysis results from other analyser nodes that are placed before this one in the stream",
          "defaultValue": true
        },
        {
          "name": "Detail factor",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the analysis output in range [0, 10]",
          "defaultValue": 5
        },
        {
          "name": "Smoothing",
          "type": "PublicParameters.Data.Float",
          "description": "Smoothing over time in range [0.0, 1.0]",
          "defaultValue": 0.2
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of graph",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.Add",
      "shortDescription": "adds two streams",
      "longDescription": "This node adds two audio streams.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.Subtract",
      "shortDescription": "subtracts two streams",
      "longDescription": "This node subtracts two audio streams.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.LinearBlend",
      "shortDescription": "linearly interpolates the streams",
      "longDescription": "This node linearly interpolates between two streams. An interpolation weight of 0.0 returns stream A, and a weight of 1.0 returns stream B.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Weight",
          "type": "AudioProcessing.Data.Stream",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.Lerp2",
      "shortDescription": "interpolates between two streams",
      "longDescription": "This node performs a piecewise interpolation between two streams. An interpolation weight of 0.0 returns stream A and a weight of 1.0 returns stream B.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Weight",
          "type": "AudioProcessing.Data.Stream",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.Lerp3",
      "shortDescription": "piecewise interpolation between three streams",
      "longDescription": "This node performs a piecewise interpolation between three streams. An interpolation weight of 0.0 returns stream A, a weight of 0.5 returns stream B, and a weight of 1.0 returns stream C.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "C",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Weight",
          "type": "AudioProcessing.Data.Stream",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Math.Lerp4",
      "shortDescription": "piecewise interpolation between four streams",
      "longDescription": "This node performs a piecewise interpolation between four streams. An interpolation weight of 0.0 returns stream A and a weight of 1.0 returns stream D.",
      "inputSlots": [
        {
          "name": "A",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "B",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "C",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "D",
          "type": "AudioProcessing.Data.Stream"
        },
        {
          "name": "Weight",
          "type": "AudioProcessing.Data.Stream",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "AudioProcessing.Data.Stream"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Helper.MusicalNoteToFrequency",
      "shortDescription": "converts musical note to its frequency",
      "longDescription": "This node converts a musical note (e.g., A4, C4, C#5, B3) to its corresponding frequency in Hz, e.g. 'A4' is converted to 440.0.",
      "inputSlots": [
        {
          "name": "Note",
          "type": "PublicParameters.Data.Text",
          "description": "MusicalNote (e.g., A4, C4, C#5, B3)",
          "defaultValue": "A3"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Helper.BeatAnalyser",
      "shortDescription": "determines the beats-per-minute value",
      "longDescription": "This node analyses a song to determine its beats-per-minute (BPM) value.",
      "inputSlots": [
        {
          "name": "In",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Min. BPM",
          "type": "PublicParameters.Data.Integer",
          "description": "Minimum of possible BPM range",
          "defaultValue": 60
        },
        {
          "name": "Max. BPM",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum of possible BPM range",
          "defaultValue": 160
        },
        {
          "name": "Sample rate",
          "type": "PublicParameters.Data.Integer",
          "description": "Sample rate",
          "defaultValue": 44100
        }
      ],
      "outputSlots": [
        {
          "name": "BPM",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Score",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Helper.HarmonicWave",
      "shortDescription": "allows sketching of harmonic components",
      "longDescription": "This node allows sketching of harmonic components to generate real and imaginary input signals for the PeriodicWave node.",
      "inputSlots": [
        {
          "name": "Overflow",
          "type": "PublicParameters.Data.Integer",
          "description": "How to handle overflow values",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Scale"
            },
            {
              "value": 1,
              "label": "Clamp"
            },
            {
              "value": 2,
              "label": "Keep"
            }
          ]
        },
        {
          "name": "Detail factor",
          "type": "PublicParameters.Data.Integer",
          "description": "Size factor for the output",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Wavetable",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Real",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Imaginary",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Harmonics",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "UI",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.Monitor",
      "shortDescription": "reports all midi input messages",
      "longDescription": "This node reports all midi input messages that occurred within a selectable number of previous time steps.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        },
        {
          "name": "Interpret",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables interpretation of midi messages",
          "defaultValue": true
        },
        {
          "name": "SystemMsg",
          "type": "PublicParameters.Data.Boolean",
          "description": "Output system messages",
          "defaultValue": true
        },
        {
          "name": "Collect",
          "type": "PublicParameters.Data.Integer",
          "description": "Select how many time instances should be collected",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Devices",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "ErrorMsg",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "Data",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.Note",
      "shortDescription": "informs about a played midi note",
      "longDescription": "This node informs about the last played midi note.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "KeyPressed",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Note",
          "type": "PublicParameters.Data.Text",
          "description": "Musical Note"
        },
        {
          "name": "Frequency",
          "type": "PublicParameters.Data.Float",
          "description": "Frequency"
        },
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "PressedTime",
          "type": "PublicParameters.Data.Float",
          "description": "The time since the key was pressed in milliseconds"
        },
        {
          "name": "DownTime",
          "type": "PublicParameters.Data.Float",
          "description": "The time the key is held down in milliseconds"
        },
        {
          "name": "Keys",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.NotePressed",
      "shortDescription": "informs about a played midi note",
      "longDescription": "This node returns a Boolean value whether a key with the given musical note value was pressed on the selected midi controller.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        },
        {
          "name": "Note",
          "type": "PublicParameters.Data.Text",
          "description": "Musical Note",
          "defaultValue": "C4"
        }
      ],
      "outputSlots": [
        {
          "name": "KeyPressed",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "IsDown",
          "type": "PublicParameters.Data.Boolean"
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.MidiControlKnob",
      "shortDescription": "creates a midi controlled knob",
      "longDescription": "This node creates a knob that is changed by midi control or pitch bend messages.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        },
        {
          "name": "Controller",
          "type": "PublicParameters.Data.Integer",
          "description": "Select controller (-1 for all controllers)",
          "defaultValue": -1,
          "options": [
            {
              "value": 0,
              "label": "BankSelect"
            },
            {
              "value": 1,
              "label": "Modulation"
            },
            {
              "value": 2,
              "label": "Breath"
            },
            {
              "value": 3,
              "label": "Undefined1"
            },
            {
              "value": 4,
              "label": "Foot"
            },
            {
              "value": 5,
              "label": "Portamento"
            },
            {
              "value": 6,
              "label": "Data"
            },
            {
              "value": 7,
              "label": "MainVolume"
            },
            {
              "value": 8,
              "label": "Balance"
            },
            {
              "value": 9,
              "label": "Undefined2"
            },
            {
              "value": 10,
              "label": "Pan"
            },
            {
              "value": 11,
              "label": "Pedal"
            },
            {
              "value": 12,
              "label": "Effect1"
            },
            {
              "value": 13,
              "label": "Effect2"
            }
          ]
        },
        {
          "name": "PitchBend",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enables pitch bend input (if set to true, controller change messages are ignored)",
          "defaultValue": false
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum slider value",
          "defaultValue": 0
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum slider value",
          "defaultValue": 100
        },
        {
          "name": "Label",
          "type": "PublicParameters.Data.Text",
          "description": "Label of slider",
          "defaultValue": "Label"
        }
      ],
      "outputSlots": [
        {
          "name": "SliderValue",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.ControlValue",
      "shortDescription": "outputs a midi controller value",
      "longDescription": "This node outputs the value of a selectable midi controller change message.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        },
        {
          "name": "Controller",
          "type": "PublicParameters.Data.Integer",
          "description": "Select controller (-1 for all controllers)",
          "defaultValue": -1,
          "options": [
            {
              "value": 0,
              "label": "BankSelect"
            },
            {
              "value": 1,
              "label": "Modulation"
            },
            {
              "value": 2,
              "label": "Breath"
            },
            {
              "value": 3,
              "label": "Undefined1"
            },
            {
              "value": 4,
              "label": "Foot"
            },
            {
              "value": 5,
              "label": "Portamento"
            },
            {
              "value": 6,
              "label": "Data"
            },
            {
              "value": 7,
              "label": "MainVolume"
            },
            {
              "value": 8,
              "label": "Balance"
            },
            {
              "value": 9,
              "label": "Undefined2"
            },
            {
              "value": 10,
              "label": "Pan"
            },
            {
              "value": 11,
              "label": "Pedal"
            },
            {
              "value": 12,
              "label": "Effect1"
            },
            {
              "value": 13,
              "label": "Effect2"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "IntValue",
          "type": "PublicParameters.Data.Integer",
          "description": "Integer Value"
        },
        {
          "name": "FloatValue",
          "type": "PublicParameters.Data.Float",
          "description": "Floating point value"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.PitchBend",
      "shortDescription": "outputs the midi pitch bend",
      "longDescription": "This node outputs the value of the midi pitch bend.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "IntValue",
          "type": "PublicParameters.Data.Integer",
          "description": "Integer Value"
        },
        {
          "name": "FloatValue",
          "type": "PublicParameters.Data.Float",
          "description": "Floating point value"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.Midi.ProgramChange",
      "shortDescription": "outputs the midi program",
      "longDescription": "This node outputs the program change value.",
      "inputSlots": [
        {
          "name": "Device",
          "type": "PublicParameters.Data.Integer",
          "description": "Select device (-1 for all devices)",
          "defaultValue": -1
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select channel (-1 for all channels)",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Program",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.VirtualMidiDevice.MusicalKeyboard",
      "shortDescription": "creates a virtual musical keyboard",
      "longDescription": "This node creates musical keyboard (piano) as a virtual midi device that allows playing musical notes. ",
      "inputSlots": [
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select output channel",
          "defaultValue": 0
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Integer",
          "description": "Velocity of triggerd note in range [0, 127]",
          "defaultValue": 127
        },
        {
          "name": "Comp. Key.",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enable computer keyboard input",
          "defaultValue": false
        },
        {
          "name": "Labels",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enable note labels",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Base octave",
          "type": "PublicParameters.Data.Integer",
          "description": "Base octave"
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.VirtualMidiDevice.TriggerNote",
      "shortDescription": "emits a single midi note",
      "longDescription": "This node emits a single midi note.",
      "inputSlots": [
        {
          "name": "Note",
          "type": "PublicParameters.Data.Text",
          "description": "Note (A3 corresponds to 440 Hz)",
          "defaultValue": "A3"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select output channel",
          "defaultValue": 0
        },
        {
          "name": "Velocity",
          "type": "PublicParameters.Data.Integer",
          "description": "Velocity of triggerd note in range [0, 127]",
          "defaultValue": 127
        },
        {
          "name": "Trigger",
          "type": "PublicParameters.Data.Boolean",
          "description": "Trigger the note",
          "defaultValue": false
        },
        {
          "name": "Repeat",
          "type": "PublicParameters.Data.Boolean",
          "description": "Repeat the note trigger with every tick",
          "defaultValue": false
        },
        {
          "name": "Delay",
          "type": "PublicParameters.Data.Float",
          "description": "Delay of note trigger and release in seconds",
          "defaultValue": 0
        }
      ]
    },
    {
      "type": "AudioProcessing.Compute.VirtualMidiDevice.StepSequencer",
      "shortDescription": "implements a virtual step sequencer",
      "longDescription": "This node implements a virtual step sequencer with an interface that allows editing the note information for the playback of instruments.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/StepSequencer.php",
      "inputSlots": [
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset the playback",
          "defaultValue": false
        },
        {
          "name": "Pause",
          "type": "PublicParameters.Data.Boolean",
          "description": "Pause the output",
          "defaultValue": false
        },
        {
          "name": "Speed",
          "type": "PublicParameters.Data.Float",
          "description": "Playback speed",
          "defaultValue": 1
        },
        {
          "name": "Latency",
          "type": "PublicParameters.Data.Float",
          "description": "Latency in seconds that is compensated when recording midi input",
          "defaultValue": 0
        },
        {
          "name": "ChannelInfo",
          "type": "PublicParameters.Data.Text",
          "description": "Information on the instrument implemented for each midi channel",
          "defaultValue": "0: Instrument 0, Description of instrument 0\n1: Instrument 1, Description of instrument 1\n2: Instrument 2, Description of instrument 2"
        }
      ],
      "outputSlots": [
        {
          "name": "Song",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "Patterns",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "UI",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "BPM",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Beat",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "ImageProcessing.Data.Image",
      "shortDescription": "represents an image",
      "longDescription": "This node represents an image.",
      "inputSlots": [
        {
          "name": "In",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Data.ImageVector",
      "shortDescription": "represents an array of images",
      "longDescription": "This node represents an array of image elements.",
      "inputSlots": [
        {
          "name": "In",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Checkerboard",
      "shortDescription": "generates a checkerboard pattern",
      "longDescription": "This node generates a checkerboard pattern from two selectable colors.",
      "inputSlots": [
        {
          "name": "Color A",
          "type": "PublicParameters.Data.Color",
          "description": "Color of squares A",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Color B",
          "type": "PublicParameters.Data.Color",
          "description": "Color of squares B",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Number X",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of squares in x-direction",
          "defaultValue": 4
        },
        {
          "name": "Number Y",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of squares in y-direction",
          "defaultValue": 4
        },
        {
          "name": "Square Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the squares in pixels",
          "defaultValue": 8
        },
        {
          "name": "Square Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the squares in pixels",
          "defaultValue": 8
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.ColorGrid",
      "shortDescription": "generates a color grid",
      "longDescription": "This node generates a color grid image that is useful for debugging texture coordinates.",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 1024
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 1024
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Selection of the color grid type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Basic"
            },
            {
              "value": 1,
              "label": "Labels"
            },
            {
              "value": 2,
              "label": "Circles"
            },
            {
              "value": 3,
              "label": "Arrows Right"
            },
            {
              "value": 4,
              "label": "Arrows Up"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Gradient",
      "shortDescription": "generates a color gradient",
      "longDescription": "This node generates an image with a color gradient.",
      "inputSlots": [
        {
          "name": "Color A",
          "type": "PublicParameters.Data.Color",
          "description": "Color at start",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Color B",
          "type": "PublicParameters.Data.Color",
          "description": "Color at end",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Float",
          "description": "Start of gradient in percent of the image size",
          "defaultValue": 0
        },
        {
          "name": "End",
          "type": "PublicParameters.Data.Float",
          "description": "End of gradient in percent of the image size",
          "defaultValue": 100
        },
        {
          "name": "Angle",
          "type": "PublicParameters.Data.Float",
          "description": "The angle of the gradient in degrees",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.GradientMulti",
      "shortDescription": "generates a multi-color gradient",
      "longDescription": "This node generates an image with a gradient that contains multiple colors.",
      "inputSlots": [
        {
          "name": "Colors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "All colors"
        },
        {
          "name": "Interpolation",
          "type": "SignalProcessing.Data.Signal",
          "description": "Color interpolation function in amplitude range [0, NoOfColors-1]"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Float",
          "description": "Start of gradient in percent of the image size",
          "defaultValue": 0
        },
        {
          "name": "End",
          "type": "PublicParameters.Data.Float",
          "description": "End of gradient in percent of the image size",
          "defaultValue": 100
        },
        {
          "name": "Angle",
          "type": "PublicParameters.Data.Float",
          "description": "The angle of the gradient in degrees",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Uniform",
      "shortDescription": "generates an image of uniform color",
      "longDescription": "This node generates an image filled with a single, uniform RGBA value.",
      "inputSlots": [
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the image",
          "defaultValue": [
            1,
            0,
            0,
            1
          ]
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 32
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 32
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Noise",
      "shortDescription": "generates a noise image",
      "longDescription": "This node generates different kinds of noise images including Uniform, Value, Perlin, Simplex, and Fractal noise.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageNoiseNode.php",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 512
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 512
        },
        {
          "name": "NoiseType",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of noise",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Uniform white"
            },
            {
              "value": 1,
              "label": "2D Value"
            },
            {
              "value": 2,
              "label": "3D Value"
            },
            {
              "value": 3,
              "label": "2D Perlin"
            },
            {
              "value": 4,
              "label": "3D Perlin"
            },
            {
              "value": 5,
              "label": "2D Simplex"
            },
            {
              "value": 6,
              "label": "3D Simplex"
            },
            {
              "value": 7,
              "label": "Fractal 2D Value 2"
            },
            {
              "value": 8,
              "label": "Fractal 2D Value 3"
            },
            {
              "value": 9,
              "label": "Fractal 2D Value 4"
            },
            {
              "value": 10,
              "label": "Fractal 2D Simplex 2"
            },
            {
              "value": 11,
              "label": "Fractal 2D Simplex 3"
            },
            {
              "value": 12,
              "label": "Fractal 2D Simplex 4"
            }
          ]
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction",
          "defaultValue": 0
        },
        {
          "name": "OffsetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in z-direction",
          "defaultValue": 0
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling in x-direction",
          "defaultValue": 4
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling in y-direction",
          "defaultValue": 4
        },
        {
          "name": "ScaleZ",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling in z-direction",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.RenderText",
      "shortDescription": "generates an image containing text",
      "longDescription": "This node generates an image containing text.",
      "inputSlots": [
        {
          "name": "TextColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the text",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of text",
          "defaultValue": 64
        },
        {
          "name": "PosX",
          "type": "PublicParameters.Data.Integer",
          "description": "X position of text",
          "defaultValue": 0
        },
        {
          "name": "PosY",
          "type": "PublicParameters.Data.Integer",
          "description": "Y position of text",
          "defaultValue": 0
        },
        {
          "name": "Alignment",
          "type": "PublicParameters.Data.Integer",
          "description": "Alignment of text",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Left"
            },
            {
              "value": 1,
              "label": "Right"
            },
            {
              "value": 2,
              "label": "Center"
            }
          ]
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 64
        },
        {
          "name": "Text",
          "type": "PublicParameters.Data.Text",
          "description": "Text that is rendered",
          "defaultValue": "Text"
        },
        {
          "name": "Font",
          "type": "PublicParameters.Data.Text",
          "description": "Font",
          "defaultValue": "Arial"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Shape",
      "shortDescription": "generates an image containing a 2D shape",
      "longDescription": "This node generates an image showing one of several ready-made 2D shapes (such as a circle, triangle, square, etc.).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageShapeNode.php",
      "inputSlots": [
        {
          "name": "Shape",
          "type": "PublicParameters.Data.Integer",
          "description": "Selection of the shape",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Circle"
            },
            {
              "value": 1,
              "label": "Triangle"
            },
            {
              "value": 2,
              "label": "Right-angled triangle"
            },
            {
              "value": 3,
              "label": "Square"
            },
            {
              "value": 4,
              "label": "Parallelogram"
            },
            {
              "value": 5,
              "label": "Trapezium"
            },
            {
              "value": 6,
              "label": "Four-star"
            },
            {
              "value": 7,
              "label": "Pentagon"
            },
            {
              "value": 8,
              "label": "Pentagram"
            },
            {
              "value": 9,
              "label": "Hexagon"
            },
            {
              "value": 10,
              "label": "Hexagram"
            },
            {
              "value": 11,
              "label": "Octagon"
            },
            {
              "value": 12,
              "label": "Octagram"
            },
            {
              "value": 13,
              "label": "Heart"
            },
            {
              "value": 14,
              "label": "Cresent"
            },
            {
              "value": 15,
              "label": "Arrow"
            },
            {
              "value": 16,
              "label": "BendArrow"
            },
            {
              "value": 17,
              "label": "Letter"
            },
            {
              "value": 18,
              "label": "Round Box"
            },
            {
              "value": 19,
              "label": "Arrow Head"
            },
            {
              "value": 20,
              "label": "Speech Bubble"
            },
            {
              "value": 21,
              "label": "Inverter"
            },
            {
              "value": 22,
              "label": "Logic And"
            },
            {
              "value": 23,
              "label": "Logic Nand"
            },
            {
              "value": 24,
              "label": "Logic Or"
            },
            {
              "value": 25,
              "label": "Logic Nor"
            },
            {
              "value": 26,
              "label": "Logic Xor"
            },
            {
              "value": 27,
              "label": "Logic Xnor"
            }
          ]
        },
        {
          "name": "StrokeColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Stroke",
          "type": "PublicParameters.Data.Boolean",
          "description": "Draw the path with stroke",
          "defaultValue": true
        },
        {
          "name": "Stroke Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the stroke",
          "defaultValue": 2
        },
        {
          "name": "FillColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path",
          "defaultValue": [
            0.52,
            0.7,
            1,
            1
          ]
        },
        {
          "name": "Fill",
          "type": "PublicParameters.Data.Boolean",
          "description": "Fill the path",
          "defaultValue": true
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            1,
            1,
            1,
            0
          ]
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Float",
          "description": "Size of shape in pixels",
          "defaultValue": 250
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 256
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromText",
      "shortDescription": "generates an image by parsing floating point values",
      "longDescription": "This node generates an image by parsing floating point values from the given text. The individual values can be separated by whitespaces, comma or semicolon.",
      "inputSlots": [
        {
          "name": "Values",
          "type": "PublicParameters.Data.Text",
          "description": "Float values as text",
          "defaultValue": "0.0 0.5 0.0\n0.5 1.0 0.5\n0.0 0.5 0.0"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 3
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 3
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Format of input",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Gray"
            },
            {
              "value": 1,
              "label": "RGBA"
            },
            {
              "value": 2,
              "label": "RGB"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromSignal",
      "shortDescription": "generates an image by using values from a signal",
      "longDescription": "This node generates a 2D image by using floating point values from a 1D signal.",
      "inputSlots": [
        {
          "name": "Signal",
          "type": "SignalProcessing.Data.Signal",
          "description": "Input signal"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 3
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 3
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Format of input",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Gray"
            },
            {
              "value": 1,
              "label": "RGBA"
            },
            {
              "value": 2,
              "label": "RGB"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromSignalXY",
      "shortDescription": "generates an image from an x- and y-signal",
      "longDescription": "This node generates a 2D image by combining a signal in x-direction and a signal in y-direction.",
      "inputSlots": [
        {
          "name": "SignalX",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "SignalY",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Operation",
          "type": "PublicParameters.Data.Integer",
          "description": "Operation that combines the x- and y-signal to a 2D image",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Multiplication"
            },
            {
              "value": 1,
              "label": "Addition"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromWebcam",
      "shortDescription": "captures an image from a webcam",
      "longDescription": "This node captures an image from a webcam (if supported by the browser).",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 1920
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 1080
        },
        {
          "name": "Refresh",
          "type": "PublicParameters.Data.Boolean",
          "description": "Refresh for each new time step",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromVideo",
      "shortDescription": "extracts an image from video",
      "longDescription": "This node extracts an image from a video file.",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of a video file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Frame rate",
          "type": "PublicParameters.Data.Float",
          "description": "Frames per second (FPS) of input video",
          "defaultValue": 25
        },
        {
          "name": "Frame number",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of frame to extract",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.FromVideoStream",
      "shortDescription": "captures an image from a playing video",
      "longDescription": "This node captures an image from a playing video.",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of a video file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset the video to the start",
          "defaultValue": false
        },
        {
          "name": "Volume",
          "type": "PublicParameters.Data.Float",
          "description": "Volume of the video in range [0.0, 1.0]",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "CurrentPos",
          "type": "PublicParameters.Data.Float",
          "description": "Current position in the video in seconds"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Generate.Paint",
      "shortDescription": "allows painting an image",
      "longDescription": "This node allows creating an image by painting with brush strokes.",
      "inputSlots": [
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 1024
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 512
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        },
        {
          "name": "Strokes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Each vector entry contains the geometry information for one stroke"
        },
        {
          "name": "Brushes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Each vector entry contains the brush information for one stroke"
        },
        {
          "name": "StrokeColors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "Each vector entry contains the color information for one stroke"
        },
        {
          "name": "CustomColors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "Vector of custom colors added by the user"
        },
        {
          "name": "CustomBrushes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of custom brushes added by the user"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Copy.Copy",
      "shortDescription": "makes a copy of the image",
      "longDescription": "This node makes a copy of the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.File.Load",
      "shortDescription": "loads an image from a file",
      "longDescription": "This node loads an image from a file.",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of an image file in the project",
          "defaultValue": "default"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.File.Save",
      "shortDescription": "saves an image as a file",
      "longDescription": "This node saves an image as a file in PNG, JPG, or PFM format.",
      "inputSlots": [
        {
          "name": "In",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of the audio file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Output format",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "png"
            },
            {
              "value": 1,
              "label": "jpg"
            },
            {
              "value": 2,
              "label": "pfm"
            },
            {
              "value": 3,
              "label": "hdr"
            }
          ]
        },
        {
          "name": "Quality",
          "type": "PublicParameters.Data.Integer",
          "description": "Quality of jpg file from 0 (worst) to 100 (best)",
          "defaultValue": 100
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable saving",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.Add",
      "shortDescription": "adds two images",
      "longDescription": "This node adds two images (A + B). The alpha channel of image A is maintained.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.Subtract",
      "shortDescription": "subtracts two images",
      "longDescription": "This node subtracts two images (A - B). The alpha channel of image A is maintained.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.SubtractAbs",
      "shortDescription": "subtracts two images",
      "longDescription": "This node subtracts two images and computes the absolute value abs(A - B). The alpha channel of image A is maintained.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.Multiply",
      "shortDescription": "multiplies two images",
      "longDescription": "This node multiplies two images (A * B). The alpha channel of image A is maintained.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.Divide",
      "shortDescription": "divides two images",
      "longDescription": "This node divides two images (A / B). The alpha channel of image A is maintained. If division by zero is detected, division by one is performed instead.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Math.LinearBlend",
      "shortDescription": "linearly interpolates two images",
      "longDescription": "This node linearly interpolates between two images. An interpolation weight of 0.0 returns image A, and a weight of 1.0 returns image B. The alpha channel of image A is maintained.",
      "inputSlots": [
        {
          "name": "A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "B",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Interpolation weight",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Crop",
      "shortDescription": "crops the image",
      "longDescription": "This node crops the image. The new size is given in number of pixels.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width after cropping in pixels",
          "defaultValue": 32
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height after cropping in pixels",
          "defaultValue": 32
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.CropPercent",
      "shortDescription": "crops the image",
      "longDescription": "This node crops the image. The new size is given in percent, in relation to the input.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width after cropping in percent",
          "defaultValue": 100
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Float",
          "description": "Height after cropping in percent",
          "defaultValue": 100
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in percent",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in percent",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Resize",
      "shortDescription": "resizes the image",
      "longDescription": "This node resizes the image. The new size is given in number of pixels.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageResizeNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width after resizing in pixels",
          "defaultValue": 32
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height after resizing in pixels",
          "defaultValue": 32
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Filter type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Triangle"
            },
            {
              "value": 1,
              "label": "Box"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            },
            {
              "value": 4,
              "label": "Mipmap(fast)"
            },
            {
              "value": 5,
              "label": "Linear(fast)"
            },
            {
              "value": 6,
              "label": "Nearest(fast)"
            }
          ]
        },
        {
          "name": "Keep aspect",
          "type": "PublicParameters.Data.Boolean",
          "description": "Keep the aspect ratio of the input image",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.ResizePercent",
      "shortDescription": "resizes the image",
      "longDescription": "This node resizes the image. The new size is given in percent, in relation to the input.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageResizeNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width after resizing in percent",
          "defaultValue": 100
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Float",
          "description": "Height after resizing in percent",
          "defaultValue": 100
        },
        {
          "name": "Filter",
          "type": "PublicParameters.Data.Integer",
          "description": "Filter type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Triangle"
            },
            {
              "value": 1,
              "label": "Box"
            },
            {
              "value": 2,
              "label": "Cubic"
            },
            {
              "value": 3,
              "label": "Lanczos3"
            },
            {
              "value": 4,
              "label": "Mipmap(fast)"
            },
            {
              "value": 5,
              "label": "Linear(fast)"
            },
            {
              "value": 6,
              "label": "Nearest(fast)"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Mask",
      "shortDescription": "applies a mask",
      "longDescription": "This node applies a mask image to a selected channel of the input image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Mask",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "The channel (RGBA) to which the mask is applied",
          "defaultValue": 3
        },
        {
          "name": "Feathering",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the feathering region in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Mirror",
      "shortDescription": "mirrors the image",
      "longDescription": "This node performs vertical and horizontal mirror operations on the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the mirror mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Vertical"
            },
            {
              "value": 1,
              "label": "Horizontal"
            },
            {
              "value": 2,
              "label": "Left"
            },
            {
              "value": 3,
              "label": "Right"
            },
            {
              "value": 4,
              "label": "Top"
            },
            {
              "value": 5,
              "label": "Bottom"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Rotate",
      "shortDescription": "applies an image rotation.",
      "longDescription": "This node applies a rotation to the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Rotation",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation in degrees",
          "defaultValue": 90
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Size option",
          "type": "PublicParameters.Data.Integer",
          "description": "Size option",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Enlarge"
            },
            {
              "value": 1,
              "label": "Maintain"
            },
            {
              "value": 2,
              "label": "Inside"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.Border",
      "shortDescription": "adds a border",
      "longDescription": "This node adds a border around the given input image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Top",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the top border in pixels",
          "defaultValue": 20
        },
        {
          "name": "Bottom",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the bottom border in pixels",
          "defaultValue": 20
        },
        {
          "name": "Left",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the left border in pixels",
          "defaultValue": 20
        },
        {
          "name": "Right",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the right border in pixels",
          "defaultValue": 20
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the border",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.BorderResize",
      "shortDescription": "resizes by adding a border",
      "longDescription": "This node resizes an image to a given size by adding a border.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the border",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Horz. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Horizontal alignment",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Left"
            },
            {
              "value": 2,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Vert. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Vertival alignment type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Bottom"
            },
            {
              "value": 2,
              "label": "Top"
            }
          ]
        },
        {
          "name": "Scale to Fit",
          "type": "PublicParameters.Data.Boolean",
          "description": "Downscale input if it does not fit in output",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.BorderAspect",
      "shortDescription": "adds a border",
      "longDescription": "This node adds a border to the image such that a selectable aspect ratio is realized.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Aspect ratio",
          "type": "PublicParameters.Data.Float",
          "description": "Aspect ratio output image",
          "defaultValue": 1.777778
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the border",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Modify.PaintOver",
      "shortDescription": "paints over an image",
      "longDescription": "This node allows painting over an image using brush strokes.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image that is used as a background"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the mode for background compositing. The fast composite mode works only with source-over strokes.",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Fast Composite"
            },
            {
              "value": 1,
              "label": "Full Composite"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        },
        {
          "name": "Strokes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Each vector entry contains the geometry information for one stroke"
        },
        {
          "name": "Brushes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Each vector entry contains the brush information for one stroke"
        },
        {
          "name": "StrokeColors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "Each vector entry contains the color information for one stroke"
        },
        {
          "name": "CustomColors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "Vector of custom colors added by the user"
        },
        {
          "name": "CustomBrushes",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of custom brushes added by the user"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.BrightnessContrast",
      "shortDescription": "changes the brightness and contrast",
      "longDescription": "This node allows changing the brightness and contrast of the image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/BrightnessContrastNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Brightness",
          "type": "PublicParameters.Data.Float",
          "description": "Brightness offset in the range [-100, 100]",
          "defaultValue": 0
        },
        {
          "name": "Contrast",
          "type": "PublicParameters.Data.Float",
          "description": "Contrast offset in the range [-100, 100]",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Scale",
      "shortDescription": "scales the intensities of an image",
      "longDescription": "This node scales the intensities of an image with the given scalar values for the red, green, blue, and alpha channels.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Red",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value for the red channel",
          "defaultValue": 1
        },
        {
          "name": "Green",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value for the green channel",
          "defaultValue": 1
        },
        {
          "name": "Blue",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value for the blue channel",
          "defaultValue": 1
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value for the alpha channel",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.ScaleUniform",
      "shortDescription": "scales the intensities of an image",
      "longDescription": "This node scales the intensities of an image with the given scalar value for the red, green, and blue channels.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale value for the red, green, and blue channel",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Offset",
      "shortDescription": "offsets the intensity of an image",
      "longDescription": "This node offsets the intensity of an image by adding a given scalar values for the red, green, blue, and alpha channels.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Red",
          "type": "PublicParameters.Data.Float",
          "description": "Offset value for the red channel",
          "defaultValue": 0
        },
        {
          "name": "Green",
          "type": "PublicParameters.Data.Float",
          "description": "Offset  value for the green channel",
          "defaultValue": 0
        },
        {
          "name": "Blue",
          "type": "PublicParameters.Data.Float",
          "description": "Offset  value for the blue channel",
          "defaultValue": 0
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Offset  value for the alpha channel",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.OffsetUniform",
      "shortDescription": "offsets the intensity of an image",
      "longDescription": "This node offsets the intensity of an image by adding a given scalar value for the red, green, and blue channels.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Float",
          "description": "Offset value for the red, green, and blue channel",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Gamma",
      "shortDescription": "applies gamma correction",
      "longDescription": "This node applies gamma correction to the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Gamma",
          "type": "PublicParameters.Data.Float",
          "description": "Gamma value",
          "defaultValue": 2.2
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Clamp",
      "shortDescription": "camps the image intensities",
      "longDescription": "This node clamps the red, green, and blue channel to the given minimum and maximum. The alpha channel is clamped to [0.0, 1.0].",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum for image intensities",
          "defaultValue": 1
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum for image intensities",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Threshold",
      "shortDescription": "applies a threshold",
      "longDescription": "This node compares if the color value of a pixel is larger than the given threshold. If yes, the pixel is set to 1, otherwise 0. This is done separately for each RGB channel.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Red",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold value for the red channel",
          "defaultValue": 0.5
        },
        {
          "name": "Green",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold  value for the green channel",
          "defaultValue": 0.5
        },
        {
          "name": "Blue",
          "type": "PublicParameters.Data.Float",
          "description": "Threshold  value for the blue channel",
          "defaultValue": 0.5
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Invert",
      "shortDescription": "inverts the colors",
      "longDescription": "This node inverts the image colors. The alpha channel is unaffected.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Transform",
      "shortDescription": "applies a color transformation matrix",
      "longDescription": "This node applies a 4x4 color transformation matrix to the RGBA color values of an image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ColorTransformNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Grayscale",
      "shortDescription": "converts an image to grayscale",
      "longDescription": "This node converts a color image to grayscale.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.PseudoColor",
      "shortDescription": "maps image grayscale values to a pseudo color",
      "longDescription": "This node converts image grayscale values to RGB color values using a selectable colormap.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PseudoColorNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Colormap",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the colormap",
          "options": [
            {
              "value": 0,
              "label": "Temperatur"
            },
            {
              "value": 1,
              "label": "Cold"
            },
            {
              "value": 2,
              "label": "Warm"
            },
            {
              "value": 3,
              "label": "Rainbow"
            },
            {
              "value": 4,
              "label": "Acid"
            },
            {
              "value": 5,
              "label": "Girly"
            },
            {
              "value": 6,
              "label": "LilyPad"
            },
            {
              "value": 7,
              "label": "Bone"
            },
            {
              "value": 8,
              "label": "Ghost"
            },
            {
              "value": 9,
              "label": "Darkside"
            },
            {
              "value": 10,
              "label": "Invert"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Normalize",
      "shortDescription": "normalizes the image",
      "longDescription": "This node normalizes the image colors such that all values are within the given maximum and minimum interval.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Max",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum value",
          "defaultValue": 1
        },
        {
          "name": "Min",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum value",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.Histogram",
      "shortDescription": "computes a histogram",
      "longDescription": "This node computes the relative frequency of gray values for a grayscale image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageHistogramNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Bins",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of histogram intervals",
          "defaultValue": 256
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Output type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "RGBA"
            },
            {
              "value": 1,
              "label": "Grayscale"
            },
            {
              "value": 2,
              "label": "Red Channel"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Histogram",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Color.HistogramBars",
      "shortDescription": "computes histogram bars",
      "longDescription": "This node computes the histogram and its bar chart visualization for a given input image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageHistogramNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Bins",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of histogram intervals",
          "defaultValue": 32
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height output of image",
          "defaultValue": 256
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Output type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "RGBA"
            },
            {
              "value": 1,
              "label": "Grayscale"
            },
            {
              "value": 2,
              "label": "Red Channel"
            }
          ]
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Colorbar",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show color bar",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Histogram",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "HistogramBars",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Channel.Get",
      "shortDescription": "gets a color channel",
      "longDescription": "This node extracts a selected channel from an image as a grayscale image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the channel",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            },
            {
              "value": 3,
              "label": "Alpha"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Channel.Set",
      "shortDescription": "sets a color channel",
      "longDescription": "This node sets a selected channel of an image from a given channel image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "ChannelImage",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the channel",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            },
            {
              "value": 3,
              "label": "Alpha"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Filter",
      "shortDescription": "filters an image with a given kernel",
      "longDescription": "This node filters an image with a given kernel.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFilterNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Kernel",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Separable",
      "shortDescription": "filters an image with two 1D kernels",
      "longDescription": "This node filters an image with two 1D kernels in the x- and y-directions.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFilterNode.php#separable",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "KernelX",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "KernelY",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Coefficients",
      "shortDescription": "generates a kernel with coefficients for filtering",
      "longDescription": "This node generates a kernel with coefficients for different types of filters (Gaussian blur, Box blur, Binomial filter).",
      "inputSlots": [
        {
          "name": "Half-size",
          "type": "PublicParameters.Data.Integer",
          "description": "Half-size of the filter kernel",
          "defaultValue": 3
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Gaussian blur"
            },
            {
              "value": 1,
              "label": "Box blur"
            },
            {
              "value": 2,
              "label": "Binomial filter"
            }
          ]
        },
        {
          "name": "Separable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Generate separable filter",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Kernel",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Blur",
      "shortDescription": "applies a blur filter",
      "longDescription": "This node applies a blur filter.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Half-size",
          "type": "PublicParameters.Data.Integer",
          "description": "Half-size of the filter kernel",
          "defaultValue": 3
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Gaussian blur"
            },
            {
              "value": 1,
              "label": "Box blur"
            },
            {
              "value": 2,
              "label": "Binomial filter"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Edge",
      "shortDescription": "enhances edges",
      "longDescription": "This node enhances edges.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageEdgeNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Half-size",
          "type": "PublicParameters.Data.Integer",
          "description": "Half-size of the filter kernel",
          "defaultValue": 1
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Sobel"
            },
            {
              "value": 1,
              "label": "SobelXY"
            },
            {
              "value": 2,
              "label": "Prewitt"
            },
            {
              "value": 3,
              "label": "PrewittXY"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Magnitude/X",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Phase/Y",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Erode",
      "shortDescription": "applies an erode operation",
      "longDescription": "This node applies an erode operation.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the operation",
          "defaultValue": 3
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.Dilate",
      "shortDescription": "applies a dilate operation",
      "longDescription": "This node applies an dilate operation.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Size",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the operation",
          "defaultValue": 3
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Filter.MultiMirror",
      "shortDescription": "applies a mirror effect",
      "longDescription": "This node mirrors the image at multiple axes creating a kaleidoscope effect.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Axes",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of axes",
          "defaultValue": 4
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Mirror mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Circular"
            },
            {
              "value": 1,
              "label": "X"
            },
            {
              "value": 2,
              "label": "Y"
            },
            {
              "value": 3,
              "label": "XY"
            }
          ]
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Float",
          "description": "Selects the image offset",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Basic",
      "shortDescription": "composites two images",
      "longDescription": "This node composites a background and a foreground image.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Foreground",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor of foreground image",
          "defaultValue": 1
        },
        {
          "name": "Horz. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Horizontal alignment",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Left"
            },
            {
              "value": 2,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Vert. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Vertival alignment type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Bottom"
            },
            {
              "value": 2,
              "label": "Top"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.AtLocation",
      "shortDescription": "composites two images",
      "longDescription": "This node composites a foreground image at the given pixel location over a background image.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Foreground",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "LocX",
          "type": "PublicParameters.Data.Float",
          "description": "Pixel X location where to place the foreground",
          "defaultValue": 0
        },
        {
          "name": "LocY",
          "type": "PublicParameters.Data.Float",
          "description": "Pixel Y location where to place the foreground",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor of foreground image",
          "defaultValue": 1
        },
        {
          "name": "Horz. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Horizontal alignment of the foreground image to the given position",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Left"
            },
            {
              "value": 2,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Vert. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Vertival alignment of the foreground image to the given position",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Bottom"
            },
            {
              "value": 2,
              "label": "Top"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Area",
      "shortDescription": "composites two images",
      "longDescription": "This node composites a background and a foreground image that is transformed to match a given area in the background.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Foreground",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Scale type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select scaling type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Non-uniform"
            },
            {
              "value": 1,
              "label": "Uniform (left)"
            },
            {
              "value": 2,
              "label": "Uniform (centered)"
            },
            {
              "value": 3,
              "label": "Uniform (right)"
            }
          ]
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the target area in pixels",
          "defaultValue": 64
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the target area in pixels",
          "defaultValue": 64
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Rigid",
      "shortDescription": "composites two images",
      "longDescription": "This node composites a background and a rigidly transformed (and non-uniformly scaled) foreground image.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Foreground",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along x-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along y-axis",
          "defaultValue": 1
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation in degree",
          "defaultValue": 0
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Transform",
      "shortDescription": "composites two images",
      "longDescription": "This node composites a background and a foreground image that is transformed with an arbitrary 4x4 transformation matrix.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Foreground",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.AtMultipleLocations",
      "shortDescription": "composites multiple images",
      "longDescription": "This node composites multiple images. For each input image a pixel location can be set.",
      "inputSlots": [
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        },
        {
          "name": "Locations X",
          "type": "PublicParameters.Data.FloatVector",
          "description": "Pixel X locations where to place the input images",
          "defaultValue": 0
        },
        {
          "name": "Locations Y",
          "type": "PublicParameters.Data.FloatVector",
          "description": "Pixel Y locations where to place the input images",
          "defaultValue": 0
        },
        {
          "name": "Horz. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Horizontal alignment of the images to the given position",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Left"
            },
            {
              "value": 2,
              "label": "Right"
            }
          ]
        },
        {
          "name": "Vert. Align",
          "type": "PublicParameters.Data.Integer",
          "description": "Vertival alignment of the images to the given position",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Center"
            },
            {
              "value": 1,
              "label": "Bottom"
            },
            {
              "value": 2,
              "label": "Top"
            }
          ]
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Free",
      "shortDescription": "composites multiple images",
      "longDescription": "This node composites multiple images. For each image a transformation can be set.",
      "inputSlots": [
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        },
        {
          "name": "Transforms",
          "type": "Matrix.Data.MatrixVector"
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Pairwise",
      "shortDescription": "arranges two images",
      "longDescription": "This node arranges two images side-by-side or on top of each other.",
      "inputSlots": [
        {
          "name": "Image A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Image B",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of composition",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Horizontal"
            },
            {
              "value": 1,
              "label": "Vertical"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Grid",
      "shortDescription": "arranges multiple images on a grid",
      "longDescription": "This node arranges multiple images on a grid.",
      "inputSlots": [
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        },
        {
          "name": "Grid Cols",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of grid columns",
          "defaultValue": 3
        },
        {
          "name": "Grid Rows",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of grid rows",
          "defaultValue": 3
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Maintain aspect",
          "type": "PublicParameters.Data.Boolean",
          "description": "Maintain the aspect ratio of the input image",
          "defaultValue": true
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Accumulate",
      "shortDescription": "accumulates images over time",
      "longDescription": "This node accumulates image intensities over time.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageAccuNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Accumulation mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Add"
            },
            {
              "value": 1,
              "label": "Composite"
            }
          ]
        },
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Weight",
          "defaultValue": 1
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Clamp",
          "type": "PublicParameters.Data.Boolean",
          "description": "Clamp output to range [0.0, 1.0]",
          "defaultValue": true
        },
        {
          "name": "Reset",
          "type": "PublicParameters.Data.Boolean",
          "description": "Reset to background",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Tiles",
      "shortDescription": "composites an image from a tilemap",
      "longDescription": "This node composites an image from a tilemap according to a layout image in which each pixel represents a tile.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/Sprites.php#tiles",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "TileMap",
          "type": "ImageProcessing.Data.Image",
          "description": "Image containing regular tiles of image components"
        },
        {
          "name": "Layout",
          "type": "ImageProcessing.Data.Image",
          "description": "Layout image in which each pixel represents a tile"
        },
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Background mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Repeat background"
            },
            {
              "value": 1,
              "label": "Mirrored-repeat background"
            },
            {
              "value": 2,
              "label": "Black background"
            },
            {
              "value": 3,
              "label": "Transparent background"
            }
          ]
        },
        {
          "name": "Speed factor",
          "type": "PublicParameters.Data.Float",
          "description": "Speed factor at which the background is moving in relation to the foreground",
          "defaultValue": 1
        },
        {
          "name": "TileSizeX",
          "type": "PublicParameters.Data.Integer",
          "description": "The width of a tile in the tilemap",
          "defaultValue": 64
        },
        {
          "name": "TileSizeY",
          "type": "PublicParameters.Data.Integer",
          "description": "The height of a tile in the tilemap",
          "defaultValue": 64
        },
        {
          "name": "TileGapX",
          "type": "PublicParameters.Data.Integer",
          "description": "The gap in x-direction between two tiles in the tilemap",
          "defaultValue": 0
        },
        {
          "name": "TileGapY",
          "type": "PublicParameters.Data.Integer",
          "description": "The gap in y-direction between two tiles in the tilemap",
          "defaultValue": 0
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.Sprites",
      "shortDescription": "composites an image from sprites",
      "longDescription": "This node composites an image from sprites that are collectively passed in as a sprite sheet image (also called a sprite map or sprite atlas).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/Sprites.php#sprites",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "SpriteSheet",
          "type": "ImageProcessing.Data.Image",
          "description": "Image containing the sprites"
        },
        {
          "name": "SpriteInfo",
          "type": "PublicParameters.Data.Text",
          "description": "Text that describes where to find the sprite with a particular id in the sprite sheet image",
          "defaultValue": "id 0: 0 0 64 64\nid 1: 64 0 64 64"
        },
        {
          "name": "Positions",
          "type": "SignalProcessing.Data.Signal",
          "description": "Signal in which every four consecutive values specify a sprite id, x-, y-position, and rotation [id, xPos, yPos, rot]"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.SpriteGrid",
      "shortDescription": "composites sprites to a regular grid",
      "longDescription": "This node composites sprites into a regular grid in the output image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/Sprites.php#spritegrid",
      "inputSlots": [
        {
          "name": "SpriteSheet",
          "type": "ImageProcessing.Data.Image",
          "description": "Image containing the sprites"
        },
        {
          "name": "SpriteInfo",
          "type": "PublicParameters.Data.Text",
          "description": "Text that describes where to find the sprite for a particular letter in the sprite sheet image",
          "defaultValue": "a: 0 0 64 64\nb: 64 0 64 64"
        },
        {
          "name": "LayoutText",
          "type": "PublicParameters.Data.Text",
          "description": "Text in which each letter defines the sprite with which to fill the corresponding grid cell",
          "defaultValue": "abab bbaa\nbbbb aaaa"
        },
        {
          "name": "TileSizeX",
          "type": "PublicParameters.Data.Integer",
          "description": "The width of a grid cell in pixels",
          "defaultValue": 64
        },
        {
          "name": "TileSizeY",
          "type": "PublicParameters.Data.Integer",
          "description": "The height a grid cell in pixels",
          "defaultValue": 64
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image",
          "description": "Output image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Composite.SpriteSheet",
      "shortDescription": "packs multiple images into a sprite sheet",
      "longDescription": "This node packs multiple images into a sprite sheet (also called a sprite map or sprite atlas).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/Sprites.php#spritesheet",
      "inputSlots": [
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "selects the packing approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "BinaryTree"
            },
            {
              "value": 1,
              "label": "BinTreePow2"
            }
          ]
        },
        {
          "name": "Padding",
          "type": "PublicParameters.Data.Integer",
          "description": "adds space around an an image",
          "defaultValue": 0
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            0
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "SpriteSheet",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "SpriteInfo",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.ColorKey",
      "shortDescription": "performs keying based on a color",
      "longDescription": "This node performs keying in the RGB colorspace with a single key color.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Key Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color that should be keyed out",
          "defaultValue": [
            0,
            1,
            0,
            1
          ]
        },
        {
          "name": "Foreground Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Decrease this value to keep more foreground",
          "defaultValue": 1
        },
        {
          "name": "Background Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Increase this value to remove more background",
          "defaultValue": 0
        },
        {
          "name": "Map",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mapping function",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "SmoothStep"
            },
            {
              "value": 2,
              "label": "Volcano"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the output mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Keyed"
            },
            {
              "value": 1,
              "label": "Status"
            },
            {
              "value": 2,
              "label": "Transition"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Matte",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.ColorMultiKey",
      "shortDescription": "performs keying based on multiple colors",
      "longDescription": "This node performs keying in the RGB colorspace with multiple key colors.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Key Colors",
          "type": "PublicParameters.Data.ColorVector",
          "description": "Colors that should be keyed out"
        },
        {
          "name": "Foreground Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Decrease this value to keep more foreground",
          "defaultValue": 1
        },
        {
          "name": "Background Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Increase this value to remove more background",
          "defaultValue": 0
        },
        {
          "name": "Map",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mapping function",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "SmoothStep"
            },
            {
              "value": 2,
              "label": "Volcano"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the output mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Keyed"
            },
            {
              "value": 1,
              "label": "Status"
            },
            {
              "value": 2,
              "label": "Transition"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Matte",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.ChromaKey",
      "shortDescription": "performs keying based on chroma values",
      "longDescription": "This node performs keying in the YCbCr colorspace.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Key Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color that should be keyed out",
          "defaultValue": [
            0,
            1,
            0,
            1
          ]
        },
        {
          "name": "Chroma Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of chroma difference",
          "defaultValue": 1
        },
        {
          "name": "Chroma Balance",
          "type": "PublicParameters.Data.Float",
          "description": "Balance between Cb and Cr difference (0.5 equal, 0.0 only Cb, 1.0 only Cr)",
          "defaultValue": 0.5
        },
        {
          "name": "Lum Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of luminance difference",
          "defaultValue": 0
        },
        {
          "name": "Foreground Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Decrease this value to keep more foreground",
          "defaultValue": 1
        },
        {
          "name": "Background Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Increase this value to remove more background",
          "defaultValue": 0
        },
        {
          "name": "Map",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mapping function",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "SmoothStep"
            },
            {
              "value": 2,
              "label": "Volcano"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the output mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Keyed"
            },
            {
              "value": 1,
              "label": "Status"
            },
            {
              "value": 2,
              "label": "Transition"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Matte",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.HSVKey",
      "shortDescription": "performs keying based on HSV values",
      "longDescription": "This node performs keying in the Hue-Saturation-Value (HSV) colorspace.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Key Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color that should be keyed out",
          "defaultValue": [
            0,
            1,
            0,
            1
          ]
        },
        {
          "name": "H Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of hue difference",
          "defaultValue": 2
        },
        {
          "name": "S Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of saturation difference",
          "defaultValue": 0.5
        },
        {
          "name": "V Gain",
          "type": "PublicParameters.Data.Float",
          "description": "Gain of value difference",
          "defaultValue": 1
        },
        {
          "name": "Foreground Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Decrease this value to keep more foreground",
          "defaultValue": 1
        },
        {
          "name": "Background Clip",
          "type": "PublicParameters.Data.Float",
          "description": "Increase this value to remove more background",
          "defaultValue": 0
        },
        {
          "name": "Map",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mapping function",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "SmoothStep"
            },
            {
              "value": 2,
              "label": "Volcano"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the output mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Keyed"
            },
            {
              "value": 1,
              "label": "Status"
            },
            {
              "value": 2,
              "label": "Transition"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Matte",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.DespillChannel",
      "shortDescription": "despills a channel",
      "longDescription": "This node removes the spills from a selected channel.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the channel",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the output mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "avg"
            },
            {
              "value": 1,
              "label": "max"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Segmentation.Despill",
      "shortDescription": "performs spill suppression",
      "longDescription": "This node removes the spill of the keying color on foreground objects.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Matte",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Strength",
          "type": "PublicParameters.Data.Float",
          "description": "Strength of spill removal",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Convert.ToColor",
      "shortDescription": "gets the color of a pixel",
      "longDescription": "This node gets the color of a selected pixel.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "X",
          "type": "PublicParameters.Data.Integer",
          "description": "x position of pixel",
          "defaultValue": 0
        },
        {
          "name": "Y",
          "type": "PublicParameters.Data.Integer",
          "description": "y position of pixel",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Convert.ToText",
      "shortDescription": "converts an image to text",
      "longDescription": "This node generates a text containing comma-separated floating point values of the image intensities of a selected image channel.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Channel select",
          "defaultValue": 4,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            },
            {
              "value": 3,
              "label": "Alpha"
            },
            {
              "value": 4,
              "label": "RGBA"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text",
          "description": "Output text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Convert.ToSignal",
      "shortDescription": "converts an image to a signal",
      "longDescription": "This node generates a signal from the image intensities of a selected image channel.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Channel select",
          "defaultValue": 4,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            },
            {
              "value": 3,
              "label": "Alpha"
            },
            {
              "value": 4,
              "label": "RGBA"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "SignalProcessing.Data.Signal",
          "description": "Output signal"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Transform.Fourier",
      "shortDescription": "computes the 2D Fast Fourier Transform",
      "longDescription": "This node computes the 2D Fast Fourier Transform (2D FFT) of a given image.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFourierTransform.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Channel",
          "type": "PublicParameters.Data.Integer",
          "description": "Channel select",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Red"
            },
            {
              "value": 1,
              "label": "Green"
            },
            {
              "value": 2,
              "label": "Blue"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "FFT",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Transform.FourierInverse",
      "shortDescription": "computes the inverse 2D Fast Fourier Transform",
      "longDescription": "This node computes the inverse of the 2D Fast Fourier Transform (2D FFT).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFourierTransform.php#inverse",
      "inputSlots": [
        {
          "name": "FFT",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Transform.MagnitudePhase",
      "shortDescription": "converts complex FFT output to magnitude and phase",
      "longDescription": "This node converts the complex output of a fast Fourier transform (FFT) into a magnitude and phase representation.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFourierTransform.php#magphase",
      "inputSlots": [
        {
          "name": "FFT",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Format of magnitude",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "standard"
            },
            {
              "value": 1,
              "label": "dB"
            },
            {
              "value": 2,
              "label": "normalized"
            }
          ]
        },
        {
          "name": "Magn. Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Magnitude scaling factor",
          "defaultValue": 1
        },
        {
          "name": "Phase Thres",
          "type": "PublicParameters.Data.Float",
          "description": "Round phase to zero threshold",
          "defaultValue": 0.001
        }
      ],
      "outputSlots": [
        {
          "name": "Magnitude",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Phase",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Reduce.Max",
      "shortDescription": "computes the largest color",
      "longDescription": "This node computes the largest value of all pixels for each color channel (RGBA).",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Boolean",
          "description": "If true, the RGB-values are multiplied with the alpha value before computing the average.",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Maximum",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Reduce.Min",
      "shortDescription": "computes the smallest color",
      "longDescription": "This node computes the smallest value of all pixels for each color channel (RGBA).",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Boolean",
          "description": "If true, the pixel value is only considered as minumum if the alpha value is 1.0.",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Minimum",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Reduce.Average",
      "shortDescription": "computes the average color",
      "longDescription": "This node computes the average color value of all pixels in the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Boolean",
          "description": "If true, the RGB-values are multiplied with the alpha value before computing the average.",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Average",
          "type": "PublicParameters.Data.Color"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Reduce.Integrator",
      "shortDescription": "computes the sum of all colors",
      "longDescription": "This node computes an integration by summing all color values of the image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Red Sum",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Green Sum",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Blue Sum",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Alpha Sum",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Reduce.Size",
      "shortDescription": "returns the image size",
      "longDescription": "This node returns the width and height of a given image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.Location",
      "shortDescription": "selects a 2D image location",
      "longDescription": "This node allows manual selection of a 2D image location and outputs the coordinates in pixels.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixels (0 disables the grid)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Location X",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Location Y",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.MultipleLocations",
      "shortDescription": "selects multiple 2D image locations",
      "longDescription": "This node allows manual selection of multiple 2D image locations and outputs the coordinates in pixels.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Number",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of 2D locations",
          "defaultValue": 2
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixels (0 disables the grid)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Locations X",
          "type": "PublicParameters.Data.FloatVector"
        },
        {
          "name": "Locations Y",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.Area",
      "shortDescription": "selects a rectangular area",
      "longDescription": "This node allows manual selection of a rectangular area in an image and outputs the coordinates in pixels.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the selected area, measured in pixels"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the selected area, measured in pixels"
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in x-direction, measured in pixels"
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in y-direction, measured in pixels"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.Crop",
      "shortDescription": "selects a crop region",
      "longDescription": "This node crops the image according to a manually selected region.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Cropped",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the selected area, measured in pixels"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the selected area, measured in pixels"
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in x-direction, measured in pixels"
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in y-direction, measured in pixels"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.CropAspect",
      "shortDescription": "crops with a given aspect ratio",
      "longDescription": "This node crops the image according to a manually selected region with a fixed, given aspect ratio.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Aspect ratio",
          "type": "PublicParameters.Data.Float",
          "description": "Aspect ratio output image",
          "defaultValue": 1.777778
        }
      ],
      "outputSlots": [
        {
          "name": "Cropped",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the selected area, measured in pixels"
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the selected area, measured in pixels"
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in x-direction, measured in pixels"
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Integer",
          "description": "Offset of the selected area from the upper-left corner in y-direction, measured in pixels"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.ClippingMask",
      "shortDescription": "selects a clipping mask",
      "longDescription": "This node allows manual selection of a clipping mask and applies it to the given image.",
      "inputSlots": [
        {
          "name": "Input image",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Invert",
          "type": "PublicParameters.Data.Boolean",
          "description": "Invert mask",
          "defaultValue": false
        },
        {
          "name": "Feathering",
          "type": "PublicParameters.Data.Integer",
          "description": "Size of the feathering region at mask borders in pixels",
          "defaultValue": 0
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixel (0 disables the grid)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Clipped image",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Mask",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Path",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.ColorPicker",
      "shortDescription": "selects a color",
      "longDescription": "This node reads the color at a manually selected 2D image location.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color"
        },
        {
          "name": "Location X",
          "type": "PublicParameters.Data.Float"
        },
        {
          "name": "Location Y",
          "type": "PublicParameters.Data.Float"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Select.MultipleColors",
      "shortDescription": "selects colors at multiple locations",
      "longDescription": "This node reads the colors at a multiple manually selected 2D image locations.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Number",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of 2D locations",
          "defaultValue": 2
        }
      ],
      "outputSlots": [
        {
          "name": "Colors",
          "type": "PublicParameters.Data.ColorVector"
        },
        {
          "name": "Locations X",
          "type": "PublicParameters.Data.FloatVector"
        },
        {
          "name": "Locations Y",
          "type": "PublicParameters.Data.FloatVector"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Construct",
      "shortDescription": "allows constructing a path",
      "longDescription": "This node allows constructing a 2D path with an interactive interface.",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixel",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixel",
          "defaultValue": 256
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixel (0 disables the grid)",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Path",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.ConstructMulti",
      "shortDescription": "allows constructing multiple paths",
      "longDescription": "This node allows constructing multiple 2D paths with an interactive interface.",
      "inputSlots": [
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixel",
          "defaultValue": 400
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixel",
          "defaultValue": 400
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixel (0 disables the grid)",
          "defaultValue": 5
        }
      ],
      "outputSlots": [
        {
          "name": "Paths",
          "type": "PublicParameters.Data.TextVector"
        },
        {
          "name": "Styles",
          "type": "PublicParameters.Data.TextVector"
        },
        {
          "name": "Active Path",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Trace",
      "shortDescription": "allows tracing an image path",
      "longDescription": "This node allows manual tracing of a 2D path in a given image.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixels (0 disables the grid)",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Path",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.TraceMulti",
      "shortDescription": "allows tracing multiple paths",
      "longDescription": "This node allows manual tracing of multiple 2D paths in a given image.",
      "inputSlots": [
        {
          "name": "Background",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixel (0 disables the grid)",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Paths",
          "type": "PublicParameters.Data.TextVector"
        },
        {
          "name": "Styles",
          "type": "PublicParameters.Data.TextVector"
        },
        {
          "name": "Active Path",
          "type": "PublicParameters.Data.Integer"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.RenderPath",
      "shortDescription": "renders an image from SVG path data",
      "longDescription": "This node renders an image from SVG path data.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageFromPathNode.php",
      "inputSlots": [
        {
          "name": "StrokeColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Stroke",
          "type": "PublicParameters.Data.Boolean",
          "description": "Draw the path with stroke",
          "defaultValue": true
        },
        {
          "name": "Stroke Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the stroke",
          "defaultValue": 2
        },
        {
          "name": "FillColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path",
          "defaultValue": [
            0.52,
            0.7,
            1,
            1
          ]
        },
        {
          "name": "Fill",
          "type": "PublicParameters.Data.Boolean",
          "description": "Fill the path",
          "defaultValue": true
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor",
          "defaultValue": 1
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data",
          "defaultValue": "M 64 64 H 196 V 196 H  64  L 128 128 Z"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.RenderMultiPath",
      "shortDescription": "renders an image from multiple paths",
      "longDescription": "This node renders an image from multiple SVG path data.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderMultiPath.php",
      "inputSlots": [
        {
          "name": "Paths",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of texts that contains SVG path data"
        },
        {
          "name": "Styles",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of texts that contains SVG style data"
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor",
          "defaultValue": 1
        },
        {
          "name": "StyleScale",
          "type": "PublicParameters.Data.Float",
          "description": "Style scaling factor",
          "defaultValue": 1
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 400
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 400
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.PathStyle",
      "shortDescription": "generates SVG path style data",
      "longDescription": "This node generates SVG path style data.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderMultiPath.php#pathstyle",
      "inputSlots": [
        {
          "name": "Stroke",
          "type": "PublicParameters.Data.Boolean",
          "description": "Draw the path with stroke",
          "defaultValue": true
        },
        {
          "name": "StrokeColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Stroke Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the stroke",
          "defaultValue": 2
        },
        {
          "name": "Line Cap",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of line caps",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Butt"
            },
            {
              "value": 1,
              "label": "Square"
            },
            {
              "value": 2,
              "label": "Round"
            }
          ]
        },
        {
          "name": "Line Join",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of joint between two lines",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Miter"
            },
            {
              "value": 1,
              "label": "Round"
            },
            {
              "value": 2,
              "label": "Bevel"
            }
          ]
        },
        {
          "name": "Dashed",
          "type": "PublicParameters.Data.Integer",
          "description": "Distance of dashed lines in pixels (0 = disabled)",
          "defaultValue": 0
        },
        {
          "name": "Fill",
          "type": "PublicParameters.Data.Boolean",
          "description": "Fill the path",
          "defaultValue": true
        },
        {
          "name": "FillColor",
          "type": "PublicParameters.Data.Color",
          "description": "Fill color of the path",
          "defaultValue": [
            0.52,
            0.7,
            1,
            1
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Path style",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.PathStyleToColor",
      "shortDescription": "converts SVG path style data to a color",
      "longDescription": "This node converts SVG path style data to a color.",
      "inputSlots": [
        {
          "name": "Path style",
          "type": "PublicParameters.Data.Text"
        }
      ],
      "outputSlots": [
        {
          "name": "Stroke",
          "type": "PublicParameters.Data.Boolean",
          "description": "Draw the path with stroke"
        },
        {
          "name": "StrokeColor",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the path"
        },
        {
          "name": "Stroke Width",
          "type": "PublicParameters.Data.Float",
          "description": "Width of the stroke"
        },
        {
          "name": "Line Cap",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of line caps",
          "options": [
            {
              "value": 0,
              "label": "Butt"
            },
            {
              "value": 1,
              "label": "Square"
            },
            {
              "value": 2,
              "label": "Round"
            }
          ]
        },
        {
          "name": "Line Join",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of joint between two lines",
          "options": [
            {
              "value": 0,
              "label": "Miter"
            },
            {
              "value": 1,
              "label": "Round"
            },
            {
              "value": 2,
              "label": "Bevel"
            }
          ]
        },
        {
          "name": "Dashed",
          "type": "PublicParameters.Data.Integer",
          "description": "Distance of dashed lines in pixels (0 = disabled)"
        },
        {
          "name": "Fill",
          "type": "PublicParameters.Data.Boolean",
          "description": "Fill the path"
        },
        {
          "name": "FillColor",
          "type": "PublicParameters.Data.Color",
          "description": "Fill color of the path"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Rigid",
      "shortDescription": "applies a 2D transformation",
      "longDescription": "This node applies a rigid 2D transformation (and non-uniform scaling) to a path.",
      "inputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along x-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along y-axis",
          "defaultValue": 1
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation in degree",
          "defaultValue": 0
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction in pixels",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Transform",
      "shortDescription": "transforms a path",
      "longDescription": "This node transforms a path with an arbitrary 4x4 transformation matrix.",
      "inputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Interpolate",
      "shortDescription": "interpolates between two paths",
      "longDescription": "This node interpolates between two paths.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/PathInterpolateNode.php",
      "inputSlots": [
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Interpolation weight in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Path A",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data",
          "defaultValue": "M 64 64 H 196 V 196 H  64  L 128 128 Z"
        },
        {
          "name": "Path B",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data",
          "defaultValue": "M 128 64 H 520 V 196 H  123  L 128 128 Z"
        },
        {
          "name": "Enlarge mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects how to handle additional subpaths if both input paths have not the same number of subpaths",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Skip"
            },
            {
              "value": 1,
              "label": "Scale"
            },
            {
              "value": 2,
              "label": "Appear"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.Animate",
      "shortDescription": "interpolates between multiple paths",
      "longDescription": "This node interpolates between multiple paths.",
      "inputSlots": [
        {
          "name": "Weight",
          "type": "PublicParameters.Data.Float",
          "description": "Interpolation weight in range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Paths",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of path that are included in the animation"
        },
        {
          "name": "Enlarge mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects how to handle additional subpaths if both input paths have not the same number of subpaths",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Skip"
            },
            {
              "value": 1,
              "label": "Scale"
            },
            {
              "value": 2,
              "label": "Appear"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text",
          "description": "Text that containts SVG path data"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.ToSignal",
      "shortDescription": "converts a path to a signal",
      "longDescription": "This node generates samples along a given path and outputs the x-, y-, and rotation values as three signals.",
      "inputSlots": [
        {
          "name": "Samples",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of samples alone the path",
          "defaultValue": 256
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor",
          "defaultValue": 1
        },
        {
          "name": "OffsetX",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "OffsetY",
          "type": "PublicParameters.Data.Float",
          "description": "Offset in y-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "Path data",
          "type": "PublicParameters.Data.Text",
          "description": "Text that contains SVG path data",
          "defaultValue": "M 64 64 H 196 V 196 H  64  L 128 128 Z"
        }
      ],
      "outputSlots": [
        {
          "name": "TranslateX",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "TranslateY",
          "type": "SignalProcessing.Data.Signal"
        },
        {
          "name": "Rotate",
          "type": "SignalProcessing.Data.Signal"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Path.ToSVG",
      "shortDescription": "converts multiple paths to an SVG drawing",
      "longDescription": "This node converts multiple paths and styles to an SVG drawing.",
      "inputSlots": [
        {
          "name": "Paths",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of texts that contains SVG path data"
        },
        {
          "name": "Styles",
          "type": "PublicParameters.Data.TextVector",
          "description": "Vector of texts that contains SVG style data"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the image in pixels",
          "defaultValue": 256
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the image in pixels",
          "defaultValue": 256
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "ImageProcessing.Compute.Plugin.ImageShader",
      "shortDescription": "creates a plugin image shader",
      "longDescription": "This node creates a plugin image shader from user-provided GLSL code.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ImageShaderPluginNode.php",
      "inputSlots": [
        {
          "name": "width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "blue",
          "type": "PublicParameters.Data.Float",
          "description": "The value of the blue channel",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Data.Mesh",
      "shortDescription": "represents a 3D polygon mesh",
      "longDescription": "This node represents a 3D polygon mesh.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#mesh",
      "inputSlots": [
        {
          "name": "In",
          "type": "3D.Data.Mesh"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Data.MeshVector",
      "shortDescription": "represents an array of meshes",
      "longDescription": "This node represents an array of meshes.",
      "inputSlots": [
        {
          "name": "In",
          "type": "3D.Data.MeshVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.MeshVector"
        }
      ]
    },
    {
      "type": "3D.Data.Scene",
      "shortDescription": "represents a scene graph",
      "longDescription": "This node represents a scene graph.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#scene",
      "inputSlots": [
        {
          "name": "In",
          "type": "3D.Data.Scene"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Data.SceneVector",
      "shortDescription": "represents an array of scenes",
      "longDescription": "This node represents an array of scenes.",
      "inputSlots": [
        {
          "name": "In",
          "type": "3D.Data.SceneVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.SceneVector"
        }
      ]
    },
    {
      "type": "3D.Compute.File.LoadMesh",
      "shortDescription": "loads a 3D mesh from a file",
      "longDescription": "This node loads a 3D mesh from a file.",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of a mesh file in the project",
          "defaultValue": "default"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.File.SaveMesh",
      "shortDescription": "saves a 3D mesh to a file",
      "longDescription": "This node saves a 3D mesh to a file",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of the mesh file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Format",
          "type": "PublicParameters.Data.Integer",
          "description": "Output format",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "All"
            },
            {
              "value": 1,
              "label": "No Normals"
            },
            {
              "value": 2,
              "label": "No TexCoords"
            },
            {
              "value": 3,
              "label": "No Normals and TexCoords"
            },
            {
              "value": 4,
              "label": "All (incl. Non-Standard)"
            }
          ]
        },
        {
          "name": "Accuracy",
          "type": "PublicParameters.Data.Integer",
          "description": "Accuracy of decimal numbers",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Low"
            },
            {
              "value": 1,
              "label": "Medium"
            },
            {
              "value": 2,
              "label": "High"
            },
            {
              "value": 3,
              "label": "Very High"
            },
            {
              "value": 4,
              "label": "Full"
            }
          ]
        },
        {
          "name": "No Quads",
          "type": "PublicParameters.Data.Boolean",
          "description": "Convert all quads to triangles",
          "defaultValue": false
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable saving",
          "defaultValue": false
        }
      ]
    },
    {
      "type": "3D.Compute.File.LoadScene",
      "shortDescription": "loads a 3D scene from a file",
      "longDescription": "This node loads a 3D scene from a file.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#loadscene",
      "inputSlots": [
        {
          "name": "Filename",
          "type": "PublicParameters.Data.FileName",
          "description": "Filename of a scene file in the project",
          "defaultValue": "default"
        },
        {
          "name": "Materials",
          "type": "PublicParameters.Data.Boolean",
          "description": "Apply materials to the meshes",
          "defaultValue": true
        },
        {
          "name": "Transforms",
          "type": "PublicParameters.Data.Boolean",
          "description": "Apply transformations to the meshes",
          "defaultValue": true
        },
        {
          "name": "Cameras",
          "type": "PublicParameters.Data.Boolean",
          "description": "Add cameras to the scene",
          "defaultValue": false
        },
        {
          "name": "Lights",
          "type": "PublicParameters.Data.Boolean",
          "description": "Add lights to the scene",
          "defaultValue": false
        },
        {
          "name": "Normalize",
          "type": "PublicParameters.Data.Boolean",
          "description": "Normalize the output size to [-1, 1]",
          "defaultValue": false
        },
        {
          "name": "Recenter",
          "type": "PublicParameters.Data.Integer",
          "description": "Center to",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Bounding box"
            },
            {
              "value": 2,
              "label": "Min. X"
            },
            {
              "value": 3,
              "label": "Min. Y"
            },
            {
              "value": 4,
              "label": "Min. Z"
            },
            {
              "value": 5,
              "label": "Max. X"
            },
            {
              "value": 6,
              "label": "Max. Y"
            },
            {
              "value": 7,
              "label": "Max. Z"
            }
          ]
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable loading",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Meshes",
          "type": "3D.Data.MeshVector"
        },
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Cube",
      "shortDescription": "generates a cube",
      "longDescription": "This node generates a cube.",
      "inputSlots": [
        {
          "name": "SegmentsX",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments along the x-axis",
          "defaultValue": 1
        },
        {
          "name": "SegmentsY",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments along the y-axis",
          "defaultValue": 1
        },
        {
          "name": "SegmentsZ",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments along the z-axis",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Sphere",
      "shortDescription": "generates a sphere",
      "longDescription": "This node generates a sphere.",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 16
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Cylinder",
      "shortDescription": "generates a cylinder",
      "longDescription": "This node generates a cylinder.",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 1
        },
        {
          "name": "Cap Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings in the cap (0 = no cap)",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Cone",
      "shortDescription": "generates a cone",
      "longDescription": "This node generates a cone.",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 1
        },
        {
          "name": "Cap Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings in the cap (0 = no cap)",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Plane",
      "shortDescription": "generates a plane",
      "longDescription": "This node generates a plane.",
      "inputSlots": [
        {
          "name": "SegmentsX",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments along the x-axis",
          "defaultValue": 1
        },
        {
          "name": "SegmentsY",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments along the y-axis",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Disk",
      "shortDescription": "generates a disk",
      "longDescription": "This node generates a disk.",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Torus",
      "shortDescription": "generates a torus",
      "longDescription": "This node generates a torus.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/MeshTorusNode.php",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 16
        },
        {
          "name": "Tube radius",
          "type": "PublicParameters.Data.Float",
          "description": "Radius of the tube in percent",
          "defaultValue": 20
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.TorusKnot",
      "shortDescription": "generates a torus knot",
      "longDescription": "This node generates a (p,q)-torus knot.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/MeshTorusNode.php",
      "inputSlots": [
        {
          "name": "Segments",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of segments",
          "defaultValue": 16
        },
        {
          "name": "Rings",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of rings",
          "defaultValue": 128
        },
        {
          "name": "Tube radius",
          "type": "PublicParameters.Data.Float",
          "description": "Radius of the tube in percent",
          "defaultValue": 30
        },
        {
          "name": "Torus radius",
          "type": "PublicParameters.Data.Float",
          "description": "Radius of the inner torus in percent",
          "defaultValue": 50
        },
        {
          "name": "ScaleZ",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor in z-direction",
          "defaultValue": 2
        },
        {
          "name": "Winding up/down",
          "type": "PublicParameters.Data.Integer",
          "description": "p parameter of the pq torus knot",
          "defaultValue": 2
        },
        {
          "name": "Winding around",
          "type": "PublicParameters.Data.Integer",
          "description": "q parameter of the pq torus knot",
          "defaultValue": 3
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Triangle",
      "shortDescription": "generates a triangle",
      "longDescription": "This node generates a triangle.",
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.Grid",
      "shortDescription": "generates a coordinate system grid",
      "longDescription": "This node generates a mesh of a coordinate system grid in the x-y plane.",
      "inputSlots": [
        {
          "name": "Axis",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show coodinate axis",
          "defaultValue": true
        },
        {
          "name": "Axis labels",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show labels of coodinate axis",
          "defaultValue": true
        },
        {
          "name": "Grid",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show grid",
          "defaultValue": true
        },
        {
          "name": "Spacing",
          "type": "PublicParameters.Data.Float",
          "description": "Spacing of grid lines",
          "defaultValue": 0.1
        },
        {
          "name": "Steps",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of grid steps",
          "defaultValue": 10
        },
        {
          "name": "Line size",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the grid lines in percent of the grid step size",
          "defaultValue": 15
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Generate.QuadArray",
      "shortDescription": "generates a quad array",
      "longDescription": "This node generates an array of quads that can be used to render particles.",
      "inputSlots": [
        {
          "name": "SegmentsX",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of quads along the x-axis",
          "defaultValue": 32
        },
        {
          "name": "SegmentsY",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of quads along the y-axis",
          "defaultValue": 32
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.Similarity",
      "shortDescription": "applies a similarity transformation to the mesh",
      "longDescription": "This node transforms all mesh vertices, normals, and tangents with the a similarity transformation (a translation, rotation, and uniform scaling).",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale",
          "defaultValue": 1
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        },
        {
          "name": "Order",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the transformations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "T R S"
            },
            {
              "value": 1,
              "label": "R T S"
            },
            {
              "value": 2,
              "label": "T S R"
            },
            {
              "value": 3,
              "label": "S T R"
            },
            {
              "value": 4,
              "label": "R S T"
            },
            {
              "value": 5,
              "label": "S R T"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.Transform",
      "shortDescription": "transforms a mesh",
      "longDescription": "This node transforms all mesh vertices, normals, and tangents with the given transformation matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.Tangents",
      "shortDescription": "computes tangents for a mesh",
      "longDescription": "This node computes the tangent space for each vertex of a mesh.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the approach for computing the tangent space",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Default"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.Normalize",
      "shortDescription": "normalizes a mesh",
      "longDescription": "This node normalizes a mesh by scaling and optional recentering.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Length",
          "type": "PublicParameters.Data.Float",
          "description": "Length of resulting largest bounding box side",
          "defaultValue": 1
        },
        {
          "name": "Recenter",
          "type": "PublicParameters.Data.Integer",
          "description": "Center to",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Center of Mass"
            },
            {
              "value": 2,
              "label": "Bounding box"
            },
            {
              "value": 3,
              "label": "Min. X"
            },
            {
              "value": 4,
              "label": "Min. Y"
            },
            {
              "value": 5,
              "label": "Min. Z"
            },
            {
              "value": 6,
              "label": "Max. X"
            },
            {
              "value": 7,
              "label": "Max. Y"
            },
            {
              "value": 8,
              "label": "Max. Z"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.Shell",
      "shortDescription": "creates a shell around the mesh",
      "longDescription": "This node creates a shell around the input mesh.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Layers",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of shell layers",
          "defaultValue": 3
        },
        {
          "name": "Offset",
          "type": "PublicParameters.Data.Float",
          "description": "Offset length (relative to normal length)",
          "defaultValue": 0.05
        },
        {
          "name": "Fins",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of vertical layers",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.DepthSort",
      "shortDescription": "sorts triangles by depth from the camera",
      "longDescription": "This node sorts triangles by their depth from a camera viewpoint.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "EyeX",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position X",
          "defaultValue": 5
        },
        {
          "name": "EyeY",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position Y",
          "defaultValue": 5
        },
        {
          "name": "EyeZ",
          "type": "PublicParameters.Data.Float",
          "description": "Eye position Z",
          "defaultValue": 5
        },
        {
          "name": "CenterX",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target X",
          "defaultValue": 0
        },
        {
          "name": "CenterY",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Y",
          "defaultValue": 0
        },
        {
          "name": "CenterZ",
          "type": "PublicParameters.Data.Float",
          "description": "Center of target Z",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.TexCoorRigid",
      "shortDescription": "transforms texture coordinates",
      "longDescription": "This node applies a rigid 2D transformation (and non-uniform scaling) to the texture coordinates of a mesh.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "ScaleX",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along x-axis",
          "defaultValue": 1
        },
        {
          "name": "ScaleY",
          "type": "PublicParameters.Data.Float",
          "description": "Scale along y-axis",
          "defaultValue": 1
        },
        {
          "name": "Rotate",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation in degree",
          "defaultValue": 0
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction in pixels",
          "defaultValue": 0
        },
        {
          "name": "Origin",
          "type": "PublicParameters.Data.Integer",
          "description": "Center of the rotation",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Lower-left corner"
            },
            {
              "value": 1,
              "label": "Center"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.TexCoordTransform",
      "shortDescription": "transforms texture coordinates",
      "longDescription": "This node transforms the texture coordinates of a mesh with the given transformation matrix.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Mesh.TexCoordEdit",
      "shortDescription": "edits texture coordinates",
      "longDescription": "This node allows interactive editing of texture coordinates.",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Texture",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Grid size",
          "type": "PublicParameters.Data.Float",
          "description": "Grid size in pixel (0 disables the grid)",
          "defaultValue": 0
        },
        {
          "name": "Start",
          "type": "PublicParameters.Data.Integer",
          "description": "Start index of polygons that are displayed",
          "defaultValue": 0
        },
        {
          "name": "Count",
          "type": "PublicParameters.Data.Integer",
          "description": "Max. number of polygons that are displayed",
          "defaultValue": 200
        }
      ],
      "outputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Offsets",
          "type": "PublicParameters.Data.Text"
        }
      ]
    },
    {
      "type": "3D.Compute.MeshGroup.GetGroup",
      "shortDescription": "gets a mesh group",
      "longDescription": "This node gets a mesh group and creates a new mesh from it.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#getgroup",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Index",
          "type": "PublicParameters.Data.Integer",
          "description": "Index of mesh group",
          "defaultValue": 0
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.MeshGroup.AllGroups",
      "shortDescription": "gets all mesh groups",
      "longDescription": "This node generates a vector containing all groups of the input mesh as separate meshes.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.MeshVector"
        }
      ]
    },
    {
      "type": "3D.Compute.MeshGroup.JoinGroups",
      "shortDescription": "joins two meshes",
      "longDescription": "This node joins the mesh groups from two meshes to generate a new mesh.",
      "inputSlots": [
        {
          "name": "Mesh A",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Mesh B",
          "type": "3D.Data.Mesh"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.MeshGroup.MergeGroups",
      "shortDescription": "merges a mesh vector",
      "longDescription": "This node merges all elements of a mesh vector into a single mesh.",
      "inputSlots": [
        {
          "name": "Meshes",
          "type": "3D.Data.MeshVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.MeshGroup.FlattenGroups",
      "shortDescription": "flattens all mesh groups",
      "longDescription": "This node flattens all mesh groups into a single group.",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Change mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Tris and Quads"
            },
            {
              "value": 1,
              "label": "Only Triangles"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Mesh"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.MeshInstance",
      "shortDescription": "adds a mesh to the scene",
      "longDescription": "This node adds a mesh to the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#meshinstance",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale",
          "defaultValue": 1
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hide the mesh",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Camera",
      "shortDescription": "adds a camera to the scene",
      "longDescription": "This node adds a perspective camera to the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#camera",
      "inputSlots": [
        {
          "name": "Field of View",
          "type": "PublicParameters.Data.Float",
          "description": "Camera's field of view in up-direction in degrees",
          "defaultValue": 60
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 5
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": -10
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 5
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "Target X",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Target Y",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Target Z",
          "defaultValue": 0
        },
        {
          "name": "UpX",
          "type": "PublicParameters.Data.Float",
          "description": "Up X",
          "defaultValue": 0
        },
        {
          "name": "UpY",
          "type": "PublicParameters.Data.Float",
          "description": "Up Y",
          "defaultValue": 0
        },
        {
          "name": "UpZ",
          "type": "PublicParameters.Data.Float",
          "description": "Up Z",
          "defaultValue": 1
        },
        {
          "name": "Near plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of near plane",
          "defaultValue": 0.1
        },
        {
          "name": "Far plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of far plane",
          "defaultValue": 100
        },
        {
          "name": "Active",
          "type": "PublicParameters.Data.Boolean",
          "description": "sets the camera to be active. If multiple cameras are active, the first camera found while traversing the tree is used.",
          "defaultValue": true
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the camera",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.OrthographicCamera",
      "shortDescription": "adds an orthographic camera to the scene",
      "longDescription": "This node adds an orthographic camera to the scene.",
      "inputSlots": [
        {
          "name": "Magnification",
          "type": "PublicParameters.Data.Float",
          "description": "Magnification of the view in Y-direction",
          "defaultValue": 10
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 5
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": -10
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 5
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "Target X",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Target Y",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Target Z",
          "defaultValue": 0
        },
        {
          "name": "UpX",
          "type": "PublicParameters.Data.Float",
          "description": "Up X",
          "defaultValue": 0
        },
        {
          "name": "UpY",
          "type": "PublicParameters.Data.Float",
          "description": "Up Y",
          "defaultValue": 0
        },
        {
          "name": "UpZ",
          "type": "PublicParameters.Data.Float",
          "description": "Up Z",
          "defaultValue": 1
        },
        {
          "name": "Near plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of near plane",
          "defaultValue": 0.1
        },
        {
          "name": "Far plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of far plane",
          "defaultValue": 100
        },
        {
          "name": "Active",
          "type": "PublicParameters.Data.Boolean",
          "description": "sets the camera to be active. If multiple cameras are active, the first camera found while traversing the tree is used.",
          "defaultValue": true
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the camera",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.LightDirectional",
      "shortDescription": "adds a directional light to the scene",
      "longDescription": "This node adds a directional light to the scene.",
      "inputSlots": [
        {
          "name": "Irradiance",
          "type": "PublicParameters.Data.Float",
          "description": "Irradiance of the light in watts per square meter under perpendicular incidence.",
          "defaultValue": 1
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the light",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 10
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "X-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Y-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Z-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.LightPoint",
      "shortDescription": "adds a point light to the scene",
      "longDescription": "This node adds a point light to the scene.",
      "inputSlots": [
        {
          "name": "Flux",
          "type": "PublicParameters.Data.Float",
          "description": "Radiant flux in watts",
          "defaultValue": 1000
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the light",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 5
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 5
        },
        {
          "name": "Range",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum range at which the contribution of the light is clamped zero (-1 for infinite range)",
          "defaultValue": -1
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.LightSpot",
      "shortDescription": "adds a spotlight to the scene",
      "longDescription": "This node adds a spotlight to the scene.",
      "inputSlots": [
        {
          "name": "Flux",
          "type": "PublicParameters.Data.Float",
          "description": "Radiant flux in watts",
          "defaultValue": 1000
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the light",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 10
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "X-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Y-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Z-coordinate of the target to which the light points",
          "defaultValue": 0
        },
        {
          "name": "ConeAngle",
          "type": "PublicParameters.Data.Float",
          "description": "Angle of the spotlight cone in degrees",
          "defaultValue": 45
        },
        {
          "name": "Softness",
          "type": "PublicParameters.Data.Float",
          "description": "Softness of the spotlight edge in the range [0.0, 1.0]",
          "defaultValue": 0.25
        },
        {
          "name": "Range",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum range at which the contribution of the light is clamped zero (-1 for infinite range)",
          "defaultValue": -1
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.LightAmbient",
      "shortDescription": "adds an ambient light to the scene",
      "longDescription": "This node adds an ambient light to the scene.",
      "inputSlots": [
        {
          "name": "Radiance",
          "type": "PublicParameters.Data.Float",
          "description": "Radiance of the light in watts per steradian per square meter.",
          "defaultValue": 0.2
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the light",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.LightSphere",
      "shortDescription": "adds a spherical area light to the scene",
      "longDescription": "This node adds a spherical area light to the scene.",
      "inputSlots": [
        {
          "name": "Flux",
          "type": "PublicParameters.Data.Float",
          "description": "Radiant flux in watts",
          "defaultValue": 1000
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the light",
          "defaultValue": [
            1,
            1,
            1,
            1
          ]
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "Position in x-direction",
          "defaultValue": 5
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "Position in y-direction",
          "defaultValue": 0
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "Position in z-direction",
          "defaultValue": 5
        },
        {
          "name": "Radius",
          "type": "PublicParameters.Data.Float",
          "description": "Radius of the sphere light",
          "defaultValue": 0.3
        },
        {
          "name": "Range",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum range at which the contribution of the light is clamped zero (-1 for infinite range)",
          "defaultValue": -1
        },
        {
          "name": "Render",
          "type": "PublicParameters.Data.Boolean",
          "description": "Renders the sphere light",
          "defaultValue": true
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.MaterialBasic",
      "shortDescription": "sets a basic material",
      "longDescription": "This node sets a basic PBR metallic-roughness material for all of its child meshes in the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#material",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Metallic",
          "type": "PublicParameters.Data.Float",
          "description": "Metallic parameter is 0.0 for dielectrics and 1.0 for metals",
          "defaultValue": 0
        },
        {
          "name": "Roughness",
          "type": "PublicParameters.Data.Float",
          "description": "Roughness of the surface the range [0.0, 1.0]",
          "defaultValue": 0.25
        },
        {
          "name": "BaseColor",
          "type": "PublicParameters.Data.Color",
          "description": "Albedo for dielectrics or specular color for metals",
          "defaultValue": [
            0.5,
            0.5,
            0.5,
            1
          ]
        },
        {
          "name": "Reflectance",
          "type": "PublicParameters.Data.Float",
          "description": "Fresnel reflectance for non-metallic materials in the range [0.0, 1.0]",
          "defaultValue": 0.5
        },
        {
          "name": "Emission",
          "type": "PublicParameters.Data.Color",
          "description": "Emissive radiance (in watts per steradian per square meter)",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "MeshGroup",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mesh group to which the material is applied (-1 = all mesh groups)",
          "defaultValue": -1
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove material)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Texture",
      "shortDescription": "sets a texture",
      "longDescription": "This node sets a texture for all of its child meshes in the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#texture",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Target",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects which material property is changed by the texture",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "BaseColor"
            },
            {
              "value": 1,
              "label": "Roughness"
            },
            {
              "value": 2,
              "label": "Metallic"
            },
            {
              "value": 3,
              "label": "Normal"
            },
            {
              "value": 4,
              "label": "Emission"
            }
          ]
        },
        {
          "name": "Mesh Group",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mesh group to which the texture is applied (-1 = all mesh groups)",
          "defaultValue": -1
        },
        {
          "name": "Color Space",
          "type": "PublicParameters.Data.Integer",
          "description": "Color space of input image",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "sRGB"
            }
          ]
        },
        {
          "name": "WrapS",
          "type": "PublicParameters.Data.Integer",
          "description": "selects the wrap mode of the texture in S direction",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Clamp to Edge"
            },
            {
              "value": 1,
              "label": "Repeat"
            },
            {
              "value": 2,
              "label": "Mirrored Repeat"
            }
          ]
        },
        {
          "name": "WrapT",
          "type": "PublicParameters.Data.Integer",
          "description": "selects the wrap mode of the texture in T direction",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Clamp to Edge"
            },
            {
              "value": 1,
              "label": "Repeat"
            },
            {
              "value": 2,
              "label": "Mirrored Repeat"
            }
          ]
        },
        {
          "name": "Combine",
          "type": "PublicParameters.Data.Integer",
          "description": "selects how to combine the texture data with the material settings",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Replace"
            },
            {
              "value": 1,
              "label": "Modulate"
            },
            {
              "value": 2,
              "label": "Add"
            },
            {
              "value": 3,
              "label": "Subtract"
            }
          ]
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove texture)",
          "defaultValue": false
        },
        {
          "name": "Image",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Transparency",
      "shortDescription": "sets the transparency of a material",
      "longDescription": "This node sets the transparency of a material for all of its child meshes in the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#transparency",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Transparency mode",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Opaque"
            },
            {
              "value": 1,
              "label": "Blend"
            },
            {
              "value": 2,
              "label": "TextureBlend"
            },
            {
              "value": 3,
              "label": "Mask"
            }
          ]
        },
        {
          "name": "Alpha",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha value in the Blend mode / Multiplicative factor in the TextureBlend mode",
          "defaultValue": 0.5
        },
        {
          "name": "Cutoff",
          "type": "PublicParameters.Data.Float",
          "description": "Alpha cutoff for the Mask mode",
          "defaultValue": 0.5
        },
        {
          "name": "Culling",
          "type": "PublicParameters.Data.Integer",
          "description": "Enables back- or front-face culling",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Disabled"
            },
            {
              "value": 1,
              "label": "Back-Face"
            },
            {
              "value": 2,
              "label": "Front-Face"
            }
          ]
        },
        {
          "name": "MeshGroup",
          "type": "PublicParameters.Data.Integer",
          "description": "Selects the mesh group to which the transparency is applied (-1 = all mesh groups)",
          "defaultValue": -1
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove material)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Merge",
      "shortDescription": "merges two scenes",
      "longDescription": "This node merges two scenes. An output scene is generated in which the two input scenes are the children.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#merge",
      "inputSlots": [
        {
          "name": "In1",
          "type": "3D.Data.Scene"
        },
        {
          "name": "In2",
          "type": "3D.Data.Scene"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Merge3",
      "shortDescription": "merges three scenes",
      "longDescription": "This node merges three scenes. An output scene is generated in which the three input scenes are the children.",
      "inputSlots": [
        {
          "name": "In1",
          "type": "3D.Data.Scene"
        },
        {
          "name": "In2",
          "type": "3D.Data.Scene"
        },
        {
          "name": "In3",
          "type": "3D.Data.Scene"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.MergeMulti",
      "shortDescription": "merges multiple scenes",
      "longDescription": "This node merges multiple scenes. An output scene is generated in which the input scenes are the children.",
      "inputSlots": [
        {
          "name": "Inputs",
          "type": "3D.Data.SceneVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.AddName",
      "shortDescription": "adds a name",
      "longDescription": "This node adds a name to the subtree of child meshes in the scene.",
      "inputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Name",
          "type": "PublicParameters.Data.FileName",
          "description": "Name for the subtree of child meshes in the scene",
          "defaultValue": "default"
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.FilterByName",
      "shortDescription": "filters by name",
      "longDescription": "This node filters a scene by given name.",
      "inputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Operation",
          "type": "PublicParameters.Data.Integer",
          "description": "Mode of the filter operation",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Remove Match+Children"
            },
            {
              "value": 1,
              "label": "Keep Branch"
            },
            {
              "value": 2,
              "label": "Keep Match+Children"
            }
          ]
        },
        {
          "name": "MeshInstances",
          "type": "PublicParameters.Data.Boolean",
          "description": "MeshInstances are affected",
          "defaultValue": false
        },
        {
          "name": "Lights",
          "type": "PublicParameters.Data.Boolean",
          "description": "Lights are affected",
          "defaultValue": false
        },
        {
          "name": "Cameras",
          "type": "PublicParameters.Data.Boolean",
          "description": "Cameras are affected",
          "defaultValue": false
        },
        {
          "name": "Helpers",
          "type": "PublicParameters.Data.Boolean",
          "description": "Helpers are affected",
          "defaultValue": false
        },
        {
          "name": "Filter Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Type of filter to apply",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "All"
            },
            {
              "value": 1,
              "label": "Contain"
            },
            {
              "value": 2,
              "label": "Not contain"
            },
            {
              "value": 3,
              "label": "Start with"
            },
            {
              "value": 4,
              "label": "Not start with"
            },
            {
              "value": 5,
              "label": "Ends with"
            },
            {
              "value": 6,
              "label": "Not end with"
            }
          ]
        },
        {
          "name": "Filter String",
          "type": "PublicParameters.Data.Text",
          "description": "Part of file name to search for",
          "defaultValue": ""
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.FilterByType",
      "shortDescription": "filters by type",
      "longDescription": "This node filters a scene by given scene element type.",
      "inputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Operation",
          "type": "PublicParameters.Data.Integer",
          "description": "Mode of the filter operation",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Remove"
            },
            {
              "value": 1,
              "label": "Keep"
            }
          ]
        },
        {
          "name": "MeshInstances",
          "type": "PublicParameters.Data.Boolean",
          "description": "MeshInstances are affected",
          "defaultValue": false
        },
        {
          "name": "Lights",
          "type": "PublicParameters.Data.Boolean",
          "description": "Lights are affected",
          "defaultValue": false
        },
        {
          "name": "Cameras",
          "type": "PublicParameters.Data.Boolean",
          "description": "Cameras are affected",
          "defaultValue": false
        },
        {
          "name": "Helpers",
          "type": "PublicParameters.Data.Boolean",
          "description": "Helpers are affected",
          "defaultValue": false
        },
        {
          "name": "Filter0",
          "type": "PublicParameters.Data.Integer",
          "description": "Scene element type to filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Off"
            },
            {
              "value": 1,
              "label": "Materials"
            },
            {
              "value": 2,
              "label": "Textures"
            },
            {
              "value": 3,
              "label": "Transparencies"
            },
            {
              "value": 4,
              "label": "Name"
            },
            {
              "value": 5,
              "label": "Transforms"
            }
          ]
        },
        {
          "name": "Filter1",
          "type": "PublicParameters.Data.Integer",
          "description": "Scene element type to filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Off"
            },
            {
              "value": 1,
              "label": "Materials"
            },
            {
              "value": 2,
              "label": "Textures"
            },
            {
              "value": 3,
              "label": "Transparencies"
            },
            {
              "value": 4,
              "label": "Name"
            },
            {
              "value": 5,
              "label": "Transforms"
            }
          ]
        },
        {
          "name": "Filter2",
          "type": "PublicParameters.Data.Integer",
          "description": "Scene element type to filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Off"
            },
            {
              "value": 1,
              "label": "Materials"
            },
            {
              "value": 2,
              "label": "Textures"
            },
            {
              "value": 3,
              "label": "Transparencies"
            },
            {
              "value": 4,
              "label": "Name"
            },
            {
              "value": 5,
              "label": "Transforms"
            }
          ]
        },
        {
          "name": "Filter3",
          "type": "PublicParameters.Data.Integer",
          "description": "Scene element type to filter",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Off"
            },
            {
              "value": 1,
              "label": "Materials"
            },
            {
              "value": 2,
              "label": "Textures"
            },
            {
              "value": 3,
              "label": "Transparencies"
            },
            {
              "value": 4,
              "label": "Name"
            },
            {
              "value": 5,
              "label": "Transforms"
            }
          ]
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Similarity",
      "shortDescription": "applies a similarity transformation to the scene",
      "longDescription": "This node applies a similarity transformation (translation, rotation and uniform scaling) to all its children in the scene hierarchy.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#similarity",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        },
        {
          "name": "Scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scale",
          "defaultValue": 1
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        },
        {
          "name": "Order",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the transformations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "T R S"
            },
            {
              "value": 1,
              "label": "R T S"
            },
            {
              "value": 2,
              "label": "T S R"
            },
            {
              "value": 3,
              "label": "S T R"
            },
            {
              "value": 4,
              "label": "R S T"
            },
            {
              "value": 5,
              "label": "S R T"
            }
          ]
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove transformation)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Translation",
      "shortDescription": "applies a translation to the scene",
      "longDescription": "This node applies a translational transformation to all its children in the scene hierarchy.",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "TranslateX",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in x-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateY",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in y-direction",
          "defaultValue": 0
        },
        {
          "name": "TranslateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Translation in z-direction",
          "defaultValue": 0
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove transformtion)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Rotation",
      "shortDescription": "applies a rotation to the scene",
      "longDescription": "This node applies a rotational transformation to all its children in the scene hierarchy.",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "RotateX",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around x-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateY",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around y-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotateZ",
          "type": "PublicParameters.Data.Float",
          "description": "Rotation around z-axis in degrees",
          "defaultValue": 0
        },
        {
          "name": "RotOrder",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the order in which the rotations are applied",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Rx Ry Rz"
            },
            {
              "value": 1,
              "label": "Ry Rx Rz"
            },
            {
              "value": 2,
              "label": "Rx Rz Ry"
            },
            {
              "value": 3,
              "label": "Rz Rx Ry"
            },
            {
              "value": 4,
              "label": "Ry Rz Rx"
            },
            {
              "value": 5,
              "label": "Rz Ry Rx"
            }
          ]
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove transformation)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Transform",
      "shortDescription": "applies a matrix transformation to the scene",
      "longDescription": "This node applies a matrix transformation to all its children in the scene hierarchy.",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Transform",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (remove transformation)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.Layer",
      "shortDescription": "adds a new layer to the scene",
      "longDescription": "This node adds a new layer to the scene.",
      "inputSlots": [
        {
          "name": "Below",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Above",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Bypass",
          "type": "PublicParameters.Data.Boolean",
          "description": "Bypass the effect (ignore the layer provided by the ABOVE input)",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Out",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.Scene.ImageBasedLighting",
      "shortDescription": "adds IBL to the scene",
      "longDescription": "This node adds image-based lighting (IBL) to the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#ibl",
      "inputSlots": [
        {
          "name": "Image",
          "type": "ImageProcessing.Data.Image",
          "description": "Input image"
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the map type of the input image",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Spherical Map"
            }
          ]
        },
        {
          "name": "Color Space",
          "type": "PublicParameters.Data.Integer",
          "description": "Color space of the input image",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Linear"
            },
            {
              "value": 1,
              "label": "sRGB"
            }
          ]
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the image-based lighting approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Default"
            },
            {
              "value": 1,
              "label": "Default+Layers"
            }
          ]
        },
        {
          "name": "Resolution",
          "type": "PublicParameters.Data.Integer",
          "description": "Resolution of the generated pre-filtered envmaps",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Low"
            },
            {
              "value": 1,
              "label": "Normal"
            },
            {
              "value": 2,
              "label": "High"
            },
            {
              "value": 3,
              "label": "VeryHigh"
            }
          ]
        },
        {
          "name": "Samples",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the number of samples. Use more samples for less noise.",
          "defaultValue": 8000
        },
        {
          "name": "MipmapOffset",
          "type": "PublicParameters.Data.Integer",
          "description": "Mipmap level for sampling from the input image (as an offset from the default). Use positive numbers for less noise, negative numbers for more accuracy.",
          "defaultValue": 0
        },
        {
          "name": "Radiance Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative factor for the radiance",
          "defaultValue": 1
        },
        {
          "name": "Display",
          "type": "PublicParameters.Data.Boolean",
          "description": "Display the input image in the background",
          "defaultValue": true
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hide and disables the light",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ]
    },
    {
      "type": "3D.Compute.SceneHelper.ReferenceGrid",
      "shortDescription": "adds a reference grid to the scene",
      "longDescription": "This node adds a non-shaded reference grid with grid lines and coordinate axes to the scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#referencegrid",
      "inputSlots": [
        {
          "name": "X-Axis",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show coordinate x-axis",
          "defaultValue": true
        },
        {
          "name": "Y-Axis",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show coordinate y-axis",
          "defaultValue": true
        },
        {
          "name": "Z-Axis",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show coordinate z-axis",
          "defaultValue": true
        },
        {
          "name": "Grid",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show grid",
          "defaultValue": true
        },
        {
          "name": "Grid plane",
          "type": "PublicParameters.Data.Integer",
          "description": "Grid plane",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "x-y"
            },
            {
              "value": 1,
              "label": "x-z"
            },
            {
              "value": 2,
              "label": "y-z"
            }
          ]
        },
        {
          "name": "Spacing",
          "type": "PublicParameters.Data.Float",
          "description": "Spacing of grid lines",
          "defaultValue": 1
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the grid line",
          "defaultValue": [
            0.5,
            0.5,
            0.5,
            1
          ]
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides the reference grid",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.SceneHelper.WireBox",
      "shortDescription": "adds a wireframe box to the scene",
      "longDescription": "This node adds a non-shaded wireframe box to the scene as a guide for layout and scale reference.",
      "inputSlots": [
        {
          "name": "CenterX",
          "type": "PublicParameters.Data.Float",
          "description": "X-coordinate of the center of the box",
          "defaultValue": 0
        },
        {
          "name": "CenterY",
          "type": "PublicParameters.Data.Float",
          "description": "Y-coordinate of the center of the box",
          "defaultValue": 0
        },
        {
          "name": "CenterZ",
          "type": "PublicParameters.Data.Float",
          "description": "Z-coordinate of the center of the box",
          "defaultValue": 0
        },
        {
          "name": "SizeX",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the box in x-direction",
          "defaultValue": 2
        },
        {
          "name": "SizeY",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the box in y-direction",
          "defaultValue": 2
        },
        {
          "name": "SizeZ",
          "type": "PublicParameters.Data.Float",
          "description": "Size of the box in z-direction",
          "defaultValue": 2
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the box",
          "defaultValue": [
            1,
            0.25,
            1,
            1
          ]
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides the box",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.SceneHelper.WireArrow",
      "shortDescription": "adds a wireframe arrow to the scene",
      "longDescription": "This node adds a non-shaded wireframe arrow to the scene as a 3D spatial indicator.",
      "inputSlots": [
        {
          "name": "OriginX",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position X",
          "defaultValue": 0
        },
        {
          "name": "OriginY",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position Y",
          "defaultValue": 0
        },
        {
          "name": "OriginZ",
          "type": "PublicParameters.Data.Float",
          "description": "Origin position Z",
          "defaultValue": 0
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "Target position X",
          "defaultValue": 0
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "Target position Y",
          "defaultValue": 0
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "Target position Z",
          "defaultValue": 1
        },
        {
          "name": "Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the arrow",
          "defaultValue": [
            1,
            0.25,
            1,
            1
          ]
        },
        {
          "name": "Head",
          "type": "PublicParameters.Data.Integer",
          "description": "Choose the head marker type",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Arrow"
            },
            {
              "value": 2,
              "label": "Box"
            }
          ]
        },
        {
          "name": "Tail",
          "type": "PublicParameters.Data.Integer",
          "description": "Choose the tail marker type",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "None"
            },
            {
              "value": 1,
              "label": "Arrow"
            },
            {
              "value": 2,
              "label": "Box"
            }
          ]
        },
        {
          "name": "Marker scale",
          "type": "PublicParameters.Data.Float",
          "description": "Scaling factor for the head and tail marker",
          "defaultValue": 1
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hides the arrow",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Scene",
          "type": "3D.Data.Scene"
        }
      ]
    },
    {
      "type": "3D.Compute.SceneHelper.SceneInfo",
      "shortDescription": "outputs scene information",
      "longDescription": "This node generates a text with information about the given scene.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Scene",
          "description": "Input scene"
        }
      ],
      "outputSlots": [
        {
          "name": "Info",
          "type": "PublicParameters.Data.Text",
          "description": "Scene information"
        }
      ]
    },
    {
      "type": "3D.Compute.SceneHelper.SceneInspector",
      "shortDescription": "inspects a 3D scene",
      "longDescription": "This node allows the inspection of a given 3D scene.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#sceneinspector",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Render",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the render mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Albedo + Wire"
            },
            {
              "value": 1,
              "label": "Albedo"
            },
            {
              "value": 2,
              "label": "Shaded + Wire"
            },
            {
              "value": 3,
              "label": "Shaded"
            },
            {
              "value": 4,
              "label": "Normal + Wire"
            },
            {
              "value": 5,
              "label": "Normal"
            },
            {
              "value": 6,
              "label": "MeshID + Wire"
            },
            {
              "value": 7,
              "label": "MeshID"
            }
          ]
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0.27,
            0.27,
            0.27,
            1
          ]
        },
        {
          "name": "Wire Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the wireframe overlay",
          "defaultValue": [
            1,
            1,
            1,
            0.7
          ]
        },
        {
          "name": "Near plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of near plane",
          "defaultValue": 0.1
        },
        {
          "name": "Far plane",
          "type": "PublicParameters.Data.Float",
          "description": "Distance of far plane",
          "defaultValue": 100
        },
        {
          "name": "OutputScene Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Select how to modify the output scene",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Add Active Camera"
            },
            {
              "value": 1,
              "label": "Add Inactive Camera"
            },
            {
              "value": 2,
              "label": "Copy Input Scene"
            }
          ]
        },
        {
          "name": "ModeSelect",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the mode via the internal interface or external parameters",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Internal"
            },
            {
              "value": 1,
              "label": "External"
            },
            {
              "value": 2,
              "label": "External (Joystick)"
            }
          ]
        },
        {
          "name": "Mode",
          "type": "PublicParameters.Data.Integer",
          "description": "Mode",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Pan-Tilt"
            },
            {
              "value": 1,
              "label": "Zoom"
            },
            {
              "value": 2,
              "label": "Truck-Pedestal"
            },
            {
              "value": 3,
              "label": "Dolly"
            },
            {
              "value": 4,
              "label": "Orbit"
            }
          ]
        },
        {
          "name": "Keyboard",
          "type": "PublicParameters.Data.Boolean",
          "description": "Enable WASD keyboard input which allows moving around when holding down the left-mouse button in pan-tilt mode",
          "defaultValue": true
        },
        {
          "name": "Pan-Tilt Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the pan-tilt mode",
          "defaultValue": 1
        },
        {
          "name": "Zoom Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the zoom mode",
          "defaultValue": 1
        },
        {
          "name": "Truck Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the truck-pedestal mode",
          "defaultValue": 1
        },
        {
          "name": "Dolly Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the dolly mode",
          "defaultValue": 1
        },
        {
          "name": "Orbit Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the orbit mode",
          "defaultValue": 1
        },
        {
          "name": "Roll Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the roll mode",
          "defaultValue": 1
        },
        {
          "name": "Keyboard Factor",
          "type": "PublicParameters.Data.Float",
          "description": "Multiplicative speed factor for the WASD keyboard movement",
          "defaultValue": 1
        }
      ],
      "outputSlots": [
        {
          "name": "OutputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Field of View",
          "type": "PublicParameters.Data.Float",
          "description": "Field of View"
        },
        {
          "name": "PositionX",
          "type": "PublicParameters.Data.Float",
          "description": "PositionX"
        },
        {
          "name": "PositionY",
          "type": "PublicParameters.Data.Float",
          "description": "PositionY"
        },
        {
          "name": "PositionZ",
          "type": "PublicParameters.Data.Float",
          "description": "PositionZ"
        },
        {
          "name": "TargetX",
          "type": "PublicParameters.Data.Float",
          "description": "TargetX"
        },
        {
          "name": "TargetY",
          "type": "PublicParameters.Data.Float",
          "description": "TargetY"
        },
        {
          "name": "TargetZ",
          "type": "PublicParameters.Data.Float",
          "description": "TargetZ"
        },
        {
          "name": "UpX",
          "type": "PublicParameters.Data.Float",
          "description": "UpX"
        },
        {
          "name": "UpY",
          "type": "PublicParameters.Data.Float",
          "description": "UpY"
        },
        {
          "name": "UpZ",
          "type": "PublicParameters.Data.Float",
          "description": "UpZ"
        }
      ]
    },
    {
      "type": "3D.Compute.Render.MeshOrbit",
      "shortDescription": "renders a 3D mesh with an orbiting camera",
      "longDescription": "This node renders a 3D mesh with an orbiting camera.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderMeshOrbitNode.php",
      "inputSlots": [
        {
          "name": "Input",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Tick",
          "type": "PublicParameters.Data.Integer",
          "description": "Tick times speed gives the camera rotation angle in degrees. Typically connected to a TickCounter node.",
          "defaultValue": 0
        },
        {
          "name": "Speed",
          "type": "PublicParameters.Data.Float",
          "description": "Speed of camera orbit in degrees per tick",
          "defaultValue": 5
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Orbit plane",
          "type": "PublicParameters.Data.Integer",
          "description": "Orbit plane",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "x-y"
            },
            {
              "value": 1,
              "label": "x-z"
            },
            {
              "value": 2,
              "label": "y-z"
            }
          ]
        },
        {
          "name": "Orbit offset",
          "type": "PublicParameters.Data.Float",
          "description": "Offset of orbit plane",
          "defaultValue": 0.1
        },
        {
          "name": "Type",
          "type": "PublicParameters.Data.Integer",
          "description": "Mesh vertex attribute to render",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Position"
            },
            {
              "value": 1,
              "label": "Normal"
            },
            {
              "value": 2,
              "label": "TexCoord"
            },
            {
              "value": 3,
              "label": "Group"
            },
            {
              "value": 4,
              "label": "Tangent"
            },
            {
              "value": 5,
              "label": "Joints"
            },
            {
              "value": 6,
              "label": "JointWeights"
            },
            {
              "value": 7,
              "label": "VertexColor"
            },
            {
              "value": 8,
              "label": "SelectWeight"
            }
          ]
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Wireframe",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show mesh as wireframe",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Render.Rasterizer",
      "shortDescription": "renders a 3D scene using rasterization",
      "longDescription": "This node renders a 3D scene using a rasterization pipeline. This is faster than ray tracing but less realistic.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#rasterizer",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the rasterization approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Default"
            },
            {
              "value": 1,
              "label": "Forward"
            }
          ]
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Layer",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the scene layer to render (-1 for all layers )",
          "defaultValue": -1
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Tone Mapping",
          "type": "PublicParameters.Data.Integer",
          "description": "selects the tone mapping approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "sRGB"
            },
            {
              "value": 1,
              "label": "Filmic"
            },
            {
              "value": 2,
              "label": "Linear"
            },
            {
              "value": 3,
              "label": "Raw"
            }
          ]
        },
        {
          "name": "Wireframe",
          "type": "PublicParameters.Data.Boolean",
          "description": "Overlay a wireframe rendering of the meshes",
          "defaultValue": false
        },
        {
          "name": "Wire Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the wireframe overlay",
          "defaultValue": [
            1,
            1,
            1,
            0.7
          ]
        },
        {
          "name": "Glyphs",
          "type": "PublicParameters.Data.Boolean",
          "description": "Render glyphs for lights, cameras, transformations",
          "defaultValue": true
        },
        {
          "name": "Max. Lights",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum number of lights per rendered mesh",
          "defaultValue": 4
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Render.GBuffer",
      "shortDescription": "renders a geometry buffer of a 3D scene",
      "longDescription": "This node renders a gbuffer (geometry buffer) that contains attributes like positions, normals, or material properties.",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Layer",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the scene layer to render (-1 for all layers )",
          "defaultValue": -1
        },
        {
          "name": "Clear Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of pixels that do not have geometry",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Space",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the coordinate space for the geometry attributes",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Camera"
            },
            {
              "value": 1,
              "label": "Global"
            },
            {
              "value": 2,
              "label": "Local"
            }
          ]
        },
        {
          "name": "ChannelR",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the rendered attributes",
          "defaultValue": 2,
          "options": [
            {
              "value": 0,
              "label": "Zero"
            },
            {
              "value": 1,
              "label": "One"
            },
            {
              "value": 2,
              "label": "NormalX"
            },
            {
              "value": 3,
              "label": "NormalY"
            },
            {
              "value": 4,
              "label": "NormalZ"
            },
            {
              "value": 5,
              "label": "RawNormalX"
            },
            {
              "value": 6,
              "label": "RawNormalY"
            },
            {
              "value": 7,
              "label": "RawNormalZ"
            },
            {
              "value": 8,
              "label": "PositionX"
            },
            {
              "value": 9,
              "label": "PositionY"
            },
            {
              "value": 10,
              "label": "PositionZ"
            },
            {
              "value": 11,
              "label": "TexCoordS"
            },
            {
              "value": 12,
              "label": "TexCoordT"
            },
            {
              "value": 13,
              "label": "Depth"
            },
            {
              "value": 14,
              "label": "BaseColorR"
            },
            {
              "value": 15,
              "label": "BaseColorG"
            },
            {
              "value": 16,
              "label": "BaseColorB"
            },
            {
              "value": 17,
              "label": "Metallic"
            },
            {
              "value": 18,
              "label": "Roughness"
            },
            {
              "value": 19,
              "label": "Reflectance"
            },
            {
              "value": 20,
              "label": "EmissionR"
            },
            {
              "value": 21,
              "label": "EmissionG"
            },
            {
              "value": 22,
              "label": "EmissionB"
            },
            {
              "value": 23,
              "label": "DrawOrder"
            },
            {
              "value": 24,
              "label": "Group"
            },
            {
              "value": 25,
              "label": "MeshID"
            },
            {
              "value": 26,
              "label": "DrawOrderColorR"
            },
            {
              "value": 27,
              "label": "DrawOrderColorG"
            },
            {
              "value": 28,
              "label": "DrawOrderColorB"
            },
            {
              "value": 29,
              "label": "GroupColorR"
            },
            {
              "value": 30,
              "label": "GroupColorG"
            },
            {
              "value": 31,
              "label": "GroupColorB"
            },
            {
              "value": 32,
              "label": "MeshIDColorR"
            },
            {
              "value": 33,
              "label": "MeshIDColorG"
            },
            {
              "value": 34,
              "label": "MeshIDColorB"
            },
            {
              "value": 35,
              "label": "TangentX"
            },
            {
              "value": 36,
              "label": "TangentY"
            },
            {
              "value": 37,
              "label": "TangentZ"
            },
            {
              "value": 38,
              "label": "TangentW"
            }
          ]
        },
        {
          "name": "ChannelG",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the rendered attributes",
          "defaultValue": 3,
          "options": [
            {
              "value": 0,
              "label": "Zero"
            },
            {
              "value": 1,
              "label": "One"
            },
            {
              "value": 2,
              "label": "NormalX"
            },
            {
              "value": 3,
              "label": "NormalY"
            },
            {
              "value": 4,
              "label": "NormalZ"
            },
            {
              "value": 5,
              "label": "RawNormalX"
            },
            {
              "value": 6,
              "label": "RawNormalY"
            },
            {
              "value": 7,
              "label": "RawNormalZ"
            },
            {
              "value": 8,
              "label": "PositionX"
            },
            {
              "value": 9,
              "label": "PositionY"
            },
            {
              "value": 10,
              "label": "PositionZ"
            },
            {
              "value": 11,
              "label": "TexCoordS"
            },
            {
              "value": 12,
              "label": "TexCoordT"
            },
            {
              "value": 13,
              "label": "Depth"
            },
            {
              "value": 14,
              "label": "BaseColorR"
            },
            {
              "value": 15,
              "label": "BaseColorG"
            },
            {
              "value": 16,
              "label": "BaseColorB"
            },
            {
              "value": 17,
              "label": "Metallic"
            },
            {
              "value": 18,
              "label": "Roughness"
            },
            {
              "value": 19,
              "label": "Reflectance"
            },
            {
              "value": 20,
              "label": "EmissionR"
            },
            {
              "value": 21,
              "label": "EmissionG"
            },
            {
              "value": 22,
              "label": "EmissionB"
            },
            {
              "value": 23,
              "label": "DrawOrder"
            },
            {
              "value": 24,
              "label": "Group"
            },
            {
              "value": 25,
              "label": "MeshID"
            },
            {
              "value": 26,
              "label": "DrawOrderColorR"
            },
            {
              "value": 27,
              "label": "DrawOrderColorG"
            },
            {
              "value": 28,
              "label": "DrawOrderColorB"
            },
            {
              "value": 29,
              "label": "GroupColorR"
            },
            {
              "value": 30,
              "label": "GroupColorG"
            },
            {
              "value": 31,
              "label": "GroupColorB"
            },
            {
              "value": 32,
              "label": "MeshIDColorR"
            },
            {
              "value": 33,
              "label": "MeshIDColorG"
            },
            {
              "value": 34,
              "label": "MeshIDColorB"
            },
            {
              "value": 35,
              "label": "TangentX"
            },
            {
              "value": 36,
              "label": "TangentY"
            },
            {
              "value": 37,
              "label": "TangentZ"
            },
            {
              "value": 38,
              "label": "TangentW"
            }
          ]
        },
        {
          "name": "ChannelB",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the rendered attributes",
          "defaultValue": 4,
          "options": [
            {
              "value": 0,
              "label": "Zero"
            },
            {
              "value": 1,
              "label": "One"
            },
            {
              "value": 2,
              "label": "NormalX"
            },
            {
              "value": 3,
              "label": "NormalY"
            },
            {
              "value": 4,
              "label": "NormalZ"
            },
            {
              "value": 5,
              "label": "RawNormalX"
            },
            {
              "value": 6,
              "label": "RawNormalY"
            },
            {
              "value": 7,
              "label": "RawNormalZ"
            },
            {
              "value": 8,
              "label": "PositionX"
            },
            {
              "value": 9,
              "label": "PositionY"
            },
            {
              "value": 10,
              "label": "PositionZ"
            },
            {
              "value": 11,
              "label": "TexCoordS"
            },
            {
              "value": 12,
              "label": "TexCoordT"
            },
            {
              "value": 13,
              "label": "Depth"
            },
            {
              "value": 14,
              "label": "BaseColorR"
            },
            {
              "value": 15,
              "label": "BaseColorG"
            },
            {
              "value": 16,
              "label": "BaseColorB"
            },
            {
              "value": 17,
              "label": "Metallic"
            },
            {
              "value": 18,
              "label": "Roughness"
            },
            {
              "value": 19,
              "label": "Reflectance"
            },
            {
              "value": 20,
              "label": "EmissionR"
            },
            {
              "value": 21,
              "label": "EmissionG"
            },
            {
              "value": 22,
              "label": "EmissionB"
            },
            {
              "value": 23,
              "label": "DrawOrder"
            },
            {
              "value": 24,
              "label": "Group"
            },
            {
              "value": 25,
              "label": "MeshID"
            },
            {
              "value": 26,
              "label": "DrawOrderColorR"
            },
            {
              "value": 27,
              "label": "DrawOrderColorG"
            },
            {
              "value": 28,
              "label": "DrawOrderColorB"
            },
            {
              "value": 29,
              "label": "GroupColorR"
            },
            {
              "value": 30,
              "label": "GroupColorG"
            },
            {
              "value": 31,
              "label": "GroupColorB"
            },
            {
              "value": 32,
              "label": "MeshIDColorR"
            },
            {
              "value": 33,
              "label": "MeshIDColorG"
            },
            {
              "value": 34,
              "label": "MeshIDColorB"
            },
            {
              "value": 35,
              "label": "TangentX"
            },
            {
              "value": 36,
              "label": "TangentY"
            },
            {
              "value": 37,
              "label": "TangentZ"
            },
            {
              "value": 38,
              "label": "TangentW"
            }
          ]
        },
        {
          "name": "ChannelA",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the rendered attributes",
          "defaultValue": 1,
          "options": [
            {
              "value": 0,
              "label": "Zero"
            },
            {
              "value": 1,
              "label": "One"
            },
            {
              "value": 2,
              "label": "NormalX"
            },
            {
              "value": 3,
              "label": "NormalY"
            },
            {
              "value": 4,
              "label": "NormalZ"
            },
            {
              "value": 5,
              "label": "RawNormalX"
            },
            {
              "value": 6,
              "label": "RawNormalY"
            },
            {
              "value": 7,
              "label": "RawNormalZ"
            },
            {
              "value": 8,
              "label": "PositionX"
            },
            {
              "value": 9,
              "label": "PositionY"
            },
            {
              "value": 10,
              "label": "PositionZ"
            },
            {
              "value": 11,
              "label": "TexCoordS"
            },
            {
              "value": 12,
              "label": "TexCoordT"
            },
            {
              "value": 13,
              "label": "Depth"
            },
            {
              "value": 14,
              "label": "BaseColorR"
            },
            {
              "value": 15,
              "label": "BaseColorG"
            },
            {
              "value": 16,
              "label": "BaseColorB"
            },
            {
              "value": 17,
              "label": "Metallic"
            },
            {
              "value": 18,
              "label": "Roughness"
            },
            {
              "value": 19,
              "label": "Reflectance"
            },
            {
              "value": 20,
              "label": "EmissionR"
            },
            {
              "value": 21,
              "label": "EmissionG"
            },
            {
              "value": 22,
              "label": "EmissionB"
            },
            {
              "value": 23,
              "label": "DrawOrder"
            },
            {
              "value": 24,
              "label": "Group"
            },
            {
              "value": 25,
              "label": "MeshID"
            },
            {
              "value": 26,
              "label": "DrawOrderColorR"
            },
            {
              "value": 27,
              "label": "DrawOrderColorG"
            },
            {
              "value": 28,
              "label": "DrawOrderColorB"
            },
            {
              "value": 29,
              "label": "GroupColorR"
            },
            {
              "value": 30,
              "label": "GroupColorG"
            },
            {
              "value": 31,
              "label": "GroupColorB"
            },
            {
              "value": 32,
              "label": "MeshIDColorR"
            },
            {
              "value": 33,
              "label": "MeshIDColorG"
            },
            {
              "value": 34,
              "label": "MeshIDColorB"
            },
            {
              "value": 35,
              "label": "TangentX"
            },
            {
              "value": 36,
              "label": "TangentY"
            },
            {
              "value": 37,
              "label": "TangentZ"
            },
            {
              "value": 38,
              "label": "TangentW"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "CamProjection",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "CamLookAt",
          "type": "Matrix.Data.Matrix"
        },
        {
          "name": "CamPosition",
          "type": "Matrix.Data.Matrix"
        }
      ]
    },
    {
      "type": "3D.Compute.Render.Depthmap",
      "shortDescription": "renders a depth map of a 3D scene",
      "longDescription": "This node renders a depth map of a 3D scene.",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Layer",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the scene layer to render (-1 for all layers )",
          "defaultValue": -1
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Render.Raytracer",
      "shortDescription": "renders a 3D scene using ray tracing",
      "longDescription": "This node renders a 3D scene using a ray tracing approach. This is slower than rasterization but more realistic.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RenderNodes.php#raytracer",
      "inputSlots": [
        {
          "name": "InputScene",
          "type": "3D.Data.Scene"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the ray tracing approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Default"
            },
            {
              "value": 1,
              "label": "Pure Indirect"
            }
          ]
        },
        {
          "name": "Canvas Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Canvas Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the canvas in pixels",
          "defaultValue": 512
        },
        {
          "name": "Layer",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the scene layer to render (-1 for all layers )",
          "defaultValue": -1
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Tone Mapping",
          "type": "PublicParameters.Data.Integer",
          "description": "Select the tone mapping approach",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "sRGB"
            },
            {
              "value": 1,
              "label": "Filmic"
            },
            {
              "value": 2,
              "label": "Linear"
            },
            {
              "value": 3,
              "label": "Raw"
            }
          ]
        },
        {
          "name": "Wireframe",
          "type": "PublicParameters.Data.Boolean",
          "description": "Overlay a wireframe rendering of the meshes",
          "defaultValue": false
        },
        {
          "name": "Wire Color",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the wireframe overlay",
          "defaultValue": [
            1,
            1,
            1,
            0.7
          ]
        },
        {
          "name": "Glyphs",
          "type": "PublicParameters.Data.Boolean",
          "description": "Render glyphs for lights, cameras, transformations",
          "defaultValue": true
        },
        {
          "name": "Sampling",
          "type": "PublicParameters.Data.Integer",
          "description": "Number of primary ray samples per pixel. Use more samples for less noise.",
          "defaultValue": 1
        },
        {
          "name": "Patch Width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of render patch",
          "defaultValue": 64
        },
        {
          "name": "Patch Height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of render patch",
          "defaultValue": 64
        },
        {
          "name": "Light Bounces",
          "type": "PublicParameters.Data.Integer",
          "description": "Maximum number of indirect light bounces",
          "defaultValue": 4
        },
        {
          "name": "Max. ShadowBias",
          "type": "PublicParameters.Data.Float",
          "description": "Maximum slope-scaled shadow bias in meters",
          "defaultValue": 0.01
        },
        {
          "name": "Min. ShadowBias",
          "type": "PublicParameters.Data.Float",
          "description": "Minimum slope-scaled shadow bias in meters",
          "defaultValue": 0.001
        },
        {
          "name": "Clamp Indirect",
          "type": "PublicParameters.Data.Float",
          "description": "The maximum indirect radiance (clamping is disabled if values is smaller than 0)",
          "defaultValue": 5
        },
        {
          "name": "Disable",
          "type": "PublicParameters.Data.Boolean",
          "description": "Disable the raytracer",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Patch",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Depthmap.ExtractDepth",
      "shortDescription": "extracts a depthmap",
      "longDescription": "This node extracts a depthmap from a rendered image.",
      "inputSlots": [
        {
          "name": "Input",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Depth",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Depthmap.CompositeDepthmap",
      "shortDescription": "composites two renderings",
      "longDescription": "This node uses two depthmaps to composite two rendered images.",
      "inputSlots": [
        {
          "name": "Render A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Depth A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Render B",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Depth B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Composite",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Depth",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Depthmap.CompositeDepth",
      "shortDescription": "composites two renderings",
      "longDescription": "This node extracts the depthmaps from two rendered images and performs a depth composite.",
      "inputSlots": [
        {
          "name": "Render A",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Render B",
          "type": "ImageProcessing.Data.Image"
        }
      ],
      "outputSlots": [
        {
          "name": "Composite",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Depthmap.CompositeDepthMulti",
      "shortDescription": "composites multiple renderings",
      "longDescription": "This node extracts the depthmaps from multiple rendered images and performs a depth composite.",
      "inputSlots": [
        {
          "name": "Renderings",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Composite",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Mipmap.Mipmap",
      "shortDescription": "generates a mipmap from images",
      "longDescription": "This node generates a mipmap from a vector of input images.",
      "inputSlots": [
        {
          "name": "Images",
          "type": "ImageProcessing.Data.ImageVector"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.RaytracingShader.MeshToBLAS",
      "shortDescription": "converts a mesh to a BLAS",
      "longDescription": "This node converts a 3D mesh to a raytracing bottom-level acceleration structure (BLAS).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RaytracingShader.php",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Approach for creating the acceleration structure",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Partition sweep"
            }
          ]
        },
        {
          "name": "Hide",
          "type": "PublicParameters.Data.Boolean",
          "description": "Hide mesh by creating an empty output",
          "defaultValue": false
        }
      ],
      "outputSlots": [
        {
          "name": "AccelStruct",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Geometry",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.RaytracingShader.BoxesToBLAS",
      "shortDescription": "converts bounding boxes to a BLAS",
      "longDescription": "This node converts a list of axis-aligned bounding boxes to a raytracing bottom-level acceleration structure (BLAS).",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RaytracingShader.php",
      "inputSlots": [
        {
          "name": "Elements",
          "type": "PublicParameters.Data.Text",
          "description": "Locations and dimensions of the bounding boxes as text",
          "defaultValue": "(0.0, 1.0, 1.0), (0.5, 0.5, 0.5); // comment\n(0.0, 0.0, 3.0), 0.5;"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Approach for creating the acceleration structure",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Partition sweep"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "AccelStruct",
          "type": "ImageProcessing.Data.Image"
        },
        {
          "name": "Geometry",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.RaytracingShader.ToBLASMulti",
      "shortDescription": "converts meshes and bounding boxes to multiple BLASs",
      "longDescription": "This node converts multiple 3D meshes and axis-aligned bounding boxes to multiple raytracing bottom-level acceleration structures (BLAS), which are stored in a single texture.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/RaytracingShader.php",
      "inputSlots": [
        {
          "name": "Meshes",
          "type": "3D.Data.MeshVector"
        },
        {
          "name": "Boxes",
          "type": "PublicParameters.Data.TextVector"
        },
        {
          "name": "Approach",
          "type": "PublicParameters.Data.Integer",
          "description": "Approach for creating the acceleration structure",
          "defaultValue": 0,
          "options": [
            {
              "value": 0,
              "label": "Partition sweep"
            }
          ]
        }
      ],
      "outputSlots": [
        {
          "name": "AccelStructMulti",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    },
    {
      "type": "3D.Compute.Plugin.Shader",
      "shortDescription": "creates a plugin shader",
      "longDescription": "This node creates a plugin shader from user-provided GLSL code.",
      "documentationUrl": "https://www.gsn-lib.org/docs/nodes/ShaderPluginNode.php",
      "inputSlots": [
        {
          "name": "Mesh",
          "type": "3D.Data.Mesh"
        },
        {
          "name": "Background",
          "type": "PublicParameters.Data.Color",
          "description": "Color of the background",
          "defaultValue": [
            0,
            0,
            0,
            1
          ]
        },
        {
          "name": "Wireframe",
          "type": "PublicParameters.Data.Boolean",
          "description": "Show mesh as wireframe",
          "defaultValue": false
        },
        {
          "name": "width",
          "type": "PublicParameters.Data.Integer",
          "description": "Width of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "height",
          "type": "PublicParameters.Data.Integer",
          "description": "Height of the output image in pixels",
          "defaultValue": 512
        },
        {
          "name": "mode",
          "type": "PublicParameters.Data.Integer",
          "description": "mode 0 shows normals, 1 shows texture coordinates, and 2 the mesh group",
          "defaultValue": 0
        },
        {
          "name": "projection",
          "type": "Matrix.Data.Matrix",
          "description": "camera projection matrix"
        },
        {
          "name": "modelview",
          "type": "Matrix.Data.Matrix",
          "description": "modelview transformation"
        }
      ],
      "outputSlots": [
        {
          "name": "Output",
          "type": "ImageProcessing.Data.Image"
        }
      ]
    }
  ]
}