{
	"nodes": [
		{
			"name": "Inputs",
			"icon": "stack-push",
			"children": [
				{
					"name": "Primitives",
					"icon": "forms",
					"children": [
						{
							"name": "Color",
							"icon": "palette",
							"editorClass": "ColorEditor"
						},
						{
							"name": "Float",
							"icon": "box-multiple-1",
							"editorClass": "FloatEditor"
						},
						{
							"name": "Slider",
							"icon": "adjustments-horizontal",
							"editorClass": "SliderEditor"
						},
						{
							"name": "String",
							"icon": "forms",
							"editorClass": "StringEditor"
						},
						{
							"name": "Texture",
							"icon": "photo",
							"editorClass": "TextureEditor"
						},
						{
							"name": "Vector 2",
							"icon": "box-multiple-2",
							"editorClass": "Vector2Editor"
						},
						{
							"name": "Vector 3",
							"icon": "box-multiple-3",
							"editorClass": "Vector3Editor"
						},
						{
							"name": "Vector 4",
							"icon": "box-multiple-4",
							"editorClass": "Vector4Editor"
						}
					]
				},
				{
					"name": "Camera",
					"icon": "video",
					"children": [
						{
							"name": "Camera Normal Matrix",
							"icon": "video",
							"nodeType": "mat3",
							"shaderNode": "cameraNormalMatrix"
						},
						{
							"name": "Camera Position",
							"icon": "video",
							"description": "Returns the global transform of the camera.",
							"nodeType": "vec3",
							"shaderNode": "cameraPosition"
						},
						{
							"name": "Camera Projection Matrix",
							"icon": "video",
							"nodeType": "mat4",
							"description": "Returns the matrix which contains the projection.",
							"shaderNode": "cameraProjectionMatrix"
						},
						{
							"name": "Camera View Matrix",
							"icon": "video",
							"nodeType": "mat4",
							"shaderNode": "cameraViewMatrix"
						},
						{
							"name": "Camera World Matrix",
							"icon": "video",
							"description": "Returns the global transform of the camera.",
							"nodeType": "mat4",
							"shaderNode": "cameraWorldMatrix"
						}
					]
				},
				{
					"name": "Normal",
					"icon": "arrow-bar-up",
					"children": [
						{
							"name": "Normal Geometry",
							"icon": "arrow-bar-up",
							"description": "Return the normal vector from the coordinate space Geometry.",
							"nodeType": "vec3",
							"shaderNode": "normalGeometry"
						},
						{
							"name": "Normal Local",
							"icon": "arrow-bar-up",
							"description": "Return the normal vector from the coordinate space Local.",
							"nodeType": "vec3",
							"shaderNode": "normalLocal"
						},
						{
							"name": "Normal View",
							"icon": "arrow-bar-up",
							"description": "Return the normal vector from the coordinate space View.",
							"nodeType": "vec3",
							"shaderNode": "normalView"
						},
						{
							"name": "Normal World",
							"icon": "arrow-bar-up",
							"description": "Return the normal vector from the coordinate space World.",
							"nodeType": "vec3",
							"shaderNode": "normalWorld"
						},
						{
							"name": "Transformed Normal View",
							"icon": "arrow-bar-up",
							"nodeType": "vec3",
							"shaderNode": "transformedNormalView"
						},
						{
							"name": "Transformed Normal World",
							"icon": "arrow-bar-up",
							"nodeType": "vec3",
							"shaderNode": "transformedNormalWorld"
						}
					]
				},
				{
					"name": "Tangent",
					"icon": "arrows-up-right",
					"children": [
						{
							"name": "Tangent Geometry",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "tangentGeometry"
						},
						{
							"name": "Tangent Local",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "tangentLocal"
						},
						{
							"name": "Tangent View",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "tangentView"
						},
						{
							"name": "Tangent World",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "tangentWorld"
						},
						{
							"name": "Transformed Tangent View",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "transformedTangentView"
						},
						{
							"name": "Transformed Tangent World",
							"icon": "arrows-up-right",
							"nodeType": "vec3",
							"shaderNode": "transformedTangentWorld"
						}
					]
				},
				{
					"name": "Bitangent",
					"icon": "arrows-up-left",
					"children": [
						{
							"name": "Bitangent Geometry",
							"icon": "arrows-up-left",
							"nodeType": "vec3",
							"shaderNode": "bitangentGeometry"
						},
						{
							"name": "Bitangent Local",
							"icon": "arrows-up-left",
							"nodeType": "vec3",
							"shaderNode": "bitangentLocal"
						},
						{
							"name": "Bitangent View",
							"icon": "arrow-up-left",
							"nodeType": "vec3",
							"shaderNode": "bitangentView"
						},
						{
							"name": "Bitangent World",
							"icon": "arrows-up-left",
							"nodeType": "vec3",
							"shaderNode": "bitangentWorld"
						},
						{
							"name": "Transformed Bitangent View",
							"icon": "arrows-up-left",
							"nodeType": "vec3",
							"shaderNode": "transformedBitangentView"
						},
						{
							"name": "Transformed Bitangent World",
							"icon": "arrows-up-left",
							"nodeType": "vec3",
							"shaderNode": "transformedBitangentWorld"
						}
					]
				},
				{
					"name": "Model",
					"icon": "box",
					"children": [
						{
							"name": "Model Direction",
							"icon": "box",
							"nodeType": "vec3",
							"shaderNode": "modelDirection"
						},
						{
							"name": "Model Normal Matrix",
							"icon": "box",
							"nodeType": "mat3",
							"shaderNode": "modelNormalMatrix"
						},
						{
							"name": "Model Position",
							"icon": "box",
							"nodeType": "vec3",
							"shaderNode": "modelPosition"
						},
						{
							"name": "Model View Matrix",
							"icon": "box",
							"nodeType": "mat4",
							"shaderNode": "modelViewMatrix"
						},
						{
							"name": "Model View Position",
							"icon": "box",
							"nodeType": "vec3",
							"shaderNode": "modelViewPosition"
						},
						{
							"name": "Model World Matrix",
							"icon": "box",
							"nodeType": "mat4",
							"shaderNode": "modelWorldMatrix"
						}
					]
				},
				{
					"name": "Object",
					"icon": "3d-cube-sphere",
					"children": [
						{
							"name": "Object Direction",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectDirection",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						},
						{
							"name": "Object Normal Matrix",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectNormalMatrix",
							"nodeType": "mat3",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						},
						{
							"name": "Object Position",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectPosition",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						},
						{
							"name": "Object View Matrix",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectViewMatrix",
							"nodeType": "mat4",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						},
						{
							"name": "Object View Position",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectViewPosition",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						},
						{
							"name": "Object World Matrix",
							"icon": "3d-cube-sphere",
							"shaderNode": "objectWorldMatrix",
							"properties": [
								{
									"name": "object3d",
									"nodeType": "Object3D"
								}
							]
						}
					]
				},
				{
					"name": "Position",
					"icon": "gizmo",
					"children": [
						{
							"name": "Position Geometry",
							"icon": "gizmo",
							"nodeType": "vec3",
							"shaderNode": "positionGeometry"
						},
						{
							"name": "Position Local",
							"icon": "gizmo",
							"nodeType": "mat4",
							"shaderNode": "positionLocal"
						},
						{
							"name": "Position View",
							"icon": "gizmo",
							"nodeType": "vec3",
							"shaderNode": "positionView"
						},
						{
							"name": "Position View Direction",
							"icon": "gizmo",
							"nodeType": "vec3",
							"shaderNode": "positionViewDirection"
						},
						{
							"name": "Position World",
							"icon": "gizmo",
							"nodeType": "mat3",
							"shaderNode": "positionWorld"
						},
						{
							"name": "Position World Direction",
							"icon": "gizmo",
							"nodeType": "mat4",
							"shaderNode": "positionWorldDirection"
						}
					]
				},
				{
					"name": "Viewport",
					"icon": "device-desktop",
					"children": [
						{
							"name": "Viewport Bottom Left",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportBottomLeft"
						},
						{
							"name": "Viewport Bottom Right",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportBottomRight"
						},
						{
							"name": "Viewport Coordinate",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportCoordinate"
						},
						{
							"name": "Viewport Resolution",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportResolution"
						},
						{
							"name": "Viewport Top Left",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportTopLeft"
						},
						{
							"name": "Viewport Top Right",
							"icon": "device-desktop",
							"nodeType": "vec3",
							"shaderNode": "viewportTopRight"
						}
					]
				},
				{
					"name": "UV",
					"icon": "chart-treemap",
					"children": [
						{
							"name": "UV",
							"icon": "chart-treemap",
							"nodeType": "vec2",
							"editorClass": "UVEditor"
						},
						{
							"name": "Matcap UV",
							"icon": "chart-treemap",
							"nodeType": "vec1",
							"shaderNode": "matcapUV"
						},
						{
							"name": "Point UV",
							"icon": "chart-treemap",
							"nodeType": "vec1",
							"shaderNode": "pointUV"
						}
					]
				},
				{
					"name": "Geometry",
					"icon": "world",
					"children": [
						{
							"name": "Attribute",
							"icon": "book-upload",
							"shaderNode": "attribute",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Face Direction",
							"icon": "brightness",
							"nodeType": "float",
							"shaderNode": "faceDirection"
						},
						{
							"name": "Front Facing",
							"icon": "brightness",
							"shaderNode": "frontFacing",
							"nodeType": "bool"
						},
						{
							"name": "Geometry Color",
							"icon": "palette",
							"shaderNode": "geometryColor",
							"nodeType": "color"
						}
					]
				}
			]
		},
		{
			"name": "Math",
			"icon": "calculator",
			"children": [
				{
					"name": "Arithmetic Operators",
					"icon": "math-symbols",
					"children": [
						{
							"name": "Addition",
							"icon": "plus",
							"description": "Addition operator.",
							"shaderNode": "add",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Division",
							"icon": "divide",
							"description": "Division operator.",
							"shaderNode": "div",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Multiply",
							"icon": "x",
							"tags": "tag1,tag2",
							"description": "Multiply operator.",
							"shaderNode": "mul",
							"nodeType": "node",
							"renderers": "WebGPU",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "float"
								},
								{
									"name": "bNode",
									"nodeType": "float"
								}
							]
						},
						{
							"name": "Power",
							"icon": "arrow-up-right",
							"description": "Exponentiation operator.",
							"shaderNode": "pow",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Remainder",
							"icon": "percentage",
							"description": "Remainder operator.",
							"shaderNode": "remainder",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Subtraction",
							"icon": "minus",
							"description": "Subtraction operator.",
							"shaderNode": "sub",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						}
					]
				},
				{
					"name": "Logic Operators",
					"icon": "math-symbols",
					"children": [
						{
							"name": "Less Than",
							"icon": "math-lower",
							"description": "Less than operator..",
							"shaderNode": "lessThan",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Less Than Or Equal",
							"icon": "math-equal-lower",
							"description": "Less than or equal operator.",
							"shaderNode": "lessThanEqual",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Greater Than",
							"icon": "math-greater",
							"description": "Greater than operator.",
							"shaderNode": "greaterThan",
							"nodeType": "bool",
							"renderers": "WebGPU",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Greater Than Or Equal",
							"icon": "math-equal-greater",
							"description": "Greater than or equal operator.",
							"shaderNode": "greaterThanEqual",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Equality",
							"icon": "equal-double",
							"description": "Equality operator.",
							"shaderNode": "equal",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Inequality",
							"icon": "equal-not",
							"description": "Inequality operator.",
							"shaderNode": "notEqual",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "And",
							"icon": "ampersand",
							"description": "Logical AND operator.",
							"shaderNode": "and",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Or",
							"icon": "switch-horizontal",
							"description": "Logical OR operator.",
							"shaderNode": "or",
							"nodeType": "bool",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Conditional",
							"icon": "arrows-split",
							"description": "Logical OR operator.",
							"shaderNode": "Conditional",
							"nodeType": "bool",
							"properties": [
								{
									"name": "condNode",
									"nodeType": "node"
								},
								{
									"name": "ifNode",
									"nodeType": "node"
								},
								{
									"name": "elseNode",
									"nodeType": "node"
								}
							]
						}
					]
				},
				{
					"name": "Bitwise Operators",
					"icon": "math-symbols",
					"children": [
						{
							"name": "Bitwise AND",
							"icon": "binary",
							"description": "Bitwise AND operator.",
							"shaderNode": "bitAnd",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Bitwise OR",
							"icon": "binary",
							"description": "Bitwise OR operator.",
							"shaderNode": "bitOr",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Bitwise XOR",
							"icon": "binary",
							"description": "Bitwise XOR operator.",
							"shaderNode": "bitXor",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Shift left",
							"icon": "binary",
							"description": "Bitwise left shift operator.",
							"shaderNode": "shiftLeft",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Shift right",
							"icon": "binary",
							"description": "Bitwise right shift operator.",
							"shaderNode": "shiftRight",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "XOR",
							"icon": "binary",
							"description": "Bitwise XOR operator.",
							"shaderNode": "xor",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								},
								{
									"name": "bNode",
									"nodeType": "node"
								}
							]
						}
					]
				},
				{
					"name": "Functions",
					"icon": "math-function",
					"children": [
						{
							"name": "Abs",
							"icon": "math-function",
							"description": "Returns the absolute value of x.",
							"shaderNode": "abs",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value of which to return the absolute."
								}
							]
						},
						{
							"name": "Acos",
							"icon": "math-function",
							"description": "Returns the angle whose trigonometric cosine is x.",
							"shaderNode": "acos",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value whose arccosine to return."
								}
							]
						},
						{
							"name": "Asin",
							"icon": "math-function",
							"description": "Returns the angle whose trigonometric sine is X.",
							"shaderNode": "asin",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value whose arcsine to return."
								}
							]
						},
						{
							"name": "Atan",
							"icon": "math-function",
							"description": "Returns either the angle whose trigonometric arctangent is yx or y_over_x, depending on which overload is invoked. In the first overload, the signs of y and x are used to determine the quadrant that the angle lies in.",
							"shaderNode": "atan",
							"nodeType": "node",
							"properties": [
								{
									"name": "aSNode",
									"nodeType": "node",
									"label": "y_over_x",
									"description": "Specify the fraction whose arctangent to return."
								}
							]
						},
						{
							"name": "Atan2",
							"icon": "math-function",
							"description": "Return the arc-tangent of the parameters",
							"shaderNode": "atan2",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specify the numerator of the fraction whose arctangent to return."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the denominator of the fraction whose arctangent to return."
								}
							]
						},
						{
							"name": "Ceil",
							"icon": "math-function",
							"description": "Returns a value equal to the nearest integer that is greater than or equal to x.",
							"shaderNode": "ceil",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to evaluate."
								}
							]
						},
						{
							"name": "Clamp",
							"icon": "math-function",
							"description": "Constrain a value to lie between two further values",
							"shaderNode": "clamp",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to constrain."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "minVal",
									"description": "Specify the lower end of the range into which to constrain."
								},
								{
									"name": "cNode",
									"nodeType": "node",
									"label": "maxVal",
									"description": "Specify the upper end of the range into which to constrain."
								}
							]
						},
						{
							"name": "Cosine",
							"icon": "math-function",
							"description": "Returns the trigonometric cosine of angle.",
							"shaderNode": "cos",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "angle",
									"description": "Specify the quantity, in radians, of which to return the cosine."
								}
							]
						},
						{
							"name": "Cross",
							"icon": "math-function",
							"description": "Calculate the cross product of two vectors",
							"shaderNode": "cross",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specifies the first of two points."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specifies the second of two points."
								}
							]
						},
						{
							"name": "Degrees",
							"icon": "math-function",
							"description": "Converts a quantity specified in radians into degrees.",
							"shaderNode": "degrees",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "radians",
									"description": "Specify the quantity, in radians, to be converted to degrees."
								}
							]
						},
						{
							"name": "Distance",
							"icon": "math-function",
							"description": "Calculate the distance between two points",
							"shaderNode": "distance",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "p0",
									"description": "Specifies the first of two points."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "p1",
									"description": "Specifies the second of two points."
								}
							]
						},
						{
							"name": "Dot",
							"icon": "math-function",
							"description": "Calculate the dot product of two vectors",
							"shaderNode": "dot",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specifies the first of two points."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specifies the second of two points."
								}
							]
						},
						{
							"name": "Exp",
							"icon": "math-function",
							"description": "Returns the natural exponentiation of x. i.e., ex.",
							"shaderNode": "exp",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to exponentiate."
								}
							]
						},
						{
							"name": "Face Forward",
							"icon": "math-function",
							"description": "Return a vector pointing in the same direction as another",
							"shaderNode": "faceForward",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "n",
									"description": "Specifies the vector to orient."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "i",
									"description": "Specifies the incident vector."
								},
								{
									"name": "cNode",
									"nodeType": "node",
									"label": "nref",
									"description": "Specifies the reference vector."
								}
							]
						},
						{
							"name": "Floor",
							"icon": "math-function",
							"description": "Returns a value equal to the nearest integer that is less than or equal to x.",
							"shaderNode": "floor",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to evaluate."
								}
							]
						},
						{
							"name": "Fract",
							"icon": "math-function",
							"description": "Returns the fractional part of x. This is calculated as x - floor(x).",
							"shaderNode": "fract",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to evaluate."
								}
							]
						},
						{
							"name": "Inverse Sqrt",
							"icon": "math-function",
							"description": "Returns the inverse of the square root of x; i.e. the value 1x√.",
							"shaderNode": "inversesqrt",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value of which to take the inverse of the square root."
								}
							]
						},
						{
							"name": "Length",
							"icon": "math-function",
							"description": "Returns the length of the vector, i.e.",
							"shaderNode": "length",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the vector of which to calculate the length."
								}
							]
						},
						{
							"name": "Log",
							"icon": "math-function",
							"description": "Returns the natural logarithm of x, i.e. the value y which satisfies x=ey.",
							"shaderNode": "log",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value of which to take the natural logarithm."
								}
							]
						},
						{
							"name": "Log2",
							"icon": "math-function",
							"description": "Returns the base 2 logarithm of x, i.e. the value y which satisfies x=2y.",
							"shaderNode": "log2",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value of which to take the base 2 logarithm."
								}
							]
						},
						{
							"name": "Max",
							"icon": "math-function",
							"description": "Returns the maximun of the two parameters.",
							"shaderNode": "max",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the first value to compare."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specify the second value to compare."
								}
							]
						},
						{
							"name": "Min",
							"icon": "math-function",
							"description": "Returns the minimum of the two parameters.",
							"shaderNode": "min",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the first value to compare."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specify the second value to compare."
								}
							]
						},
						{
							"name": "Mix",
							"icon": "math-function",
							"description": "Linearly interpolate between two values",
							"shaderNode": "mix",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the start of the range in which to interpolate."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specify the end of the range in which to interpolate."
								},
								{
									"name": "cNode",
									"nodeType": "node",
									"label": "a",
									"description": "Specify the value to use to interpolate between x and y."
								}
							]
						},
						{
							"name": "Modulo",
							"icon": "math-function",
							"description": "Returns the value of x modulo y.",
							"shaderNode": "mod",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to evaluate."
								},
								{
									"name": "bNode",
									"nodeType": "float",
									"label": "y",
									"description": "Specify the value to evaluate."
								}
							]
						},
						{
							"name": "Negate",
							"icon": "math-function",
							"description": "Returns the flipped sign value of input In",
							"shaderNode": "negate",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"description": "Input value."
								}
							]
						},
						{
							"name": "Normalize",
							"icon": "math-function",
							"description": "Returns a vector with the same direction as its parameter, v, but with length 1.",
							"shaderNode": "normalize",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "v",
									"description": "Specifies the vector to normalize."
								}
							]
						},
						{
							"name": "One Minus",
							"icon": "math-function",
							"description": "Returns the result of input `a` subtracted from 1.",
							"shaderNode": "oneMinus",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"description": "Input value."
								}
							]
						},
						{
							"name": "Pow",
							"icon": "math-function",
							"description": "Return the value of the first parameter raised to the power of the second",
							"shaderNode": "pow",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to raise to the power y."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "y",
									"description": "Specify the value to whitch to raise x."
								}
							]
						},
						{
							"name": "Radians",
							"icon": "math-function",
							"description": "Converts a quantity specified in degrees into radians.",
							"shaderNode": "radians",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "degrees",
									"description": "Specify the quantity, in degrees, to be converted to radians."
								}
							]
						},
						{
							"name": "Reciprocal",
							"icon": "math-function",
							"description": "Returns the result of dividing 1 by the input.",
							"shaderNode": "reciprocal",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"description": "Input value."
								}
							]
						},
						{
							"name": "Reflect",
							"icon": "math-function",
							"description": "Calculate the reflection direction for an incident vector",
							"shaderNode": "reflect",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "i",
									"description": "Specifies the incident vector."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "n",
									"description": "Specifies the normal vector."
								}
							]
						},
						{
							"name": "Refract",
							"icon": "math-function",
							"description": "Calculate the refraction direction for an incident vector",
							"shaderNode": "refract",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "i",
									"description": "Specifies the incident vector."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "n",
									"description": "Specifies the normal vector."
								},
								{
									"name": "cNode",
									"nodeType": "node",
									"label": "eta",
									"description": "Specifies the ratio of indices of refraction."
								}
							]
						},
						{
							"name": "Remap",
							"icon": "math-function",
							"nodeType": "node",
							"shaderNode": "remap",
							"properties": [
								{
									"name": "node",
									"nodeType": "node"
								},
								{
									"name": "inLowNode",
									"nodeType": "node"
								},
								{
									"name": "inHighNode",
									"nodeType": "node"
								},
								{
									"name": "outLowNode",
									"nodeType": "node"
								},
								{
									"name": "outHighNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Round",
							"icon": "math-function",
							"description": "Round returns a value equal to the nearest integer to x.",
							"shaderNode": "round",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to evaluate."
								}
							]
						},
						{
							"name": "Saturate",
							"icon": "math-function",
							"shaderNode": "saturate",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node"
								}
							]
						},
						{
							"name": "Sign",
							"icon": "math-function",
							"description": "Returns -1.0 if x is less than 0.0, 0.0 if x is equal to 0.0, and +1.0 if x is greater than 0.0.",
							"shaderNode": "sign",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value from wich to extract the sign."
								}
							]
						},
						{
							"name": "Sine",
							"icon": "math-function",
							"description": "Returns the trigonometric sine of angle.",
							"shaderNode": "sin",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "angle",
									"description": "Specify the quantity, in radians, of which to return the sine."
								}
							]
						},
						{
							"name": "Smoothstep",
							"icon": "math-function",
							"description": "Perform Hermite interpolation between two values",
							"shaderNode": "smoothstep",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "edge0",
									"description": "Specifies the value of the lower edge of the Hermite function."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "edge1",
									"description": "Specifies the value of the upper edge of the Hermite function."
								},
								{
									"name": "cNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specifies the value to be used to generate the Hermite function."
								}
							]
						},
						{
							"name": "Sqrt",
							"icon": "math-function",
							"description": "Returns the square root of x, i.e.",
							"shaderNode": "sqrt",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value of which to take the square root."
								}
							]
						},
						{
							"name": "Tangent",
							"icon": "math-function",
							"description": "Returns the trigonometric tangent of angle.",
							"shaderNode": "tan",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "angle",
									"description": "Specify the quantity, in radians, of which to return the tangent."
								}
							]
						},
						{
							"name": "Transform Direction",
							"icon": "math-function",
							"description": "Transforms the direction of vector by a matrix and then normalizes the result.",
							"shaderNode": "transformDirection",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "dir"
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "matrix"
								}
							]
						},
						{
							"name": "dFdx",
							"icon": "math-function",
							"description": "Return the partial derivative of expression p with respect to the window x coordinate.",
							"shaderNode": "dFdx",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "p",
									"description": "Specifies the expression of which to take the partial derivative."
								}
							]
						},
						{
							"name": "dFdy",
							"icon": "math-function",
							"description": "Return the partial derivative of expression p with respect to the window y coordinate.",
							"shaderNode": "dFdy",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "p",
									"description": "Specifies the expression of which to take the partial derivative."
								}
							]
						},
						{
							"name": "Step",
							"icon": "math-function",
							"description": "Generates a step function by comparing x to edge.",
							"shaderNode": "step",
							"nodeType": "node",
							"properties": [
								{
									"name": "aNode",
									"nodeType": "node",
									"label": "edge",
									"description": "Specifies the location of the edge of the step function."
								},
								{
									"name": "bNode",
									"nodeType": "node",
									"label": "x",
									"description": "Specify the value to be used to generate the step function."
								}
							]
						}
					]
				},
				{
					"name": "Constants",
					"icon": "123",
					"children": [
						{
							"name": "Epsilon",
							"icon": "letter-e",
							"shaderNode": "EPSILON",
							"nodeType": "float",
							"value": 1000000
						},
						{
							"name": "Infinity",
							"icon": "infinity",
							"shaderNode": "INFINITY",
							"nodeType": "float",
							"value": 0.000001
						},
						{
							"name": "PI",
							"icon": "math-pi",
							"shaderNode": "PI",
							"nodeType": "float",
							"value": 3.141592653589793
						}
					]
				}
			]
		},
		{
			"name": "Filters",
			"icon": "color-filter",
			"children": [
				{
					"name": "Burn",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "burn",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Difference",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "difference",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Dodge",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "dodge",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Hue",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "hue",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Luminance",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "luminance",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Overlay",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "overlay",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Posterize",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "posterize",
					"visible": false,
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Saturation",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "saturation",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Screen",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "screen",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				},
				{
					"name": "Vibrance",
					"icon": "color-filter",
					"nodeType": "color",
					"shaderNode": "vibrance",
					"properties": [
						{
							"name": "blendNode",
							"nodeType": "color"
						},
						{
							"name": "baseNode",
							"nodeType": "color"
						}
					]
				}
			]
		},
		{
			"name": "Utils",
			"icon": "apps",
			"children": [
				{
					"name": "Channel",
					"icon": "server-2",
					"children": [
						{
							"name": "Join",
							"icon": "arrows-join",
							"nodeType": "node",
							"editorClass": "JoinEditor"
						},
						{
							"name": "Split",
							"icon": "arrows-split",
							"nodeType": "node",
							"editorClass": "SplitEditor"
						},
						{
							"name": "Swizzle",
							"icon": "switch-3",
							"nodeType": "node",
							"editorClass": "SwizzleEditor"
						}
					]
				},
				{
					"name": "UV",
					"icon": "chart-treemap",
					"children": [
						{
							"name": "Rotate UV",
							"icon": "rotate-clockwise-2",
							"nodeType": "float",
							"shaderNode": "rotateUV"
						}
					]
				},
				{
					"name": "Preview",
					"icon": "square-check",
					"nodeType": "float",
					"editorClass": "PreviewEditor"
				},
				{
					"name": "Timer",
					"icon": "clock",
					"editorClass": "TimerEditor"
				}
			]
		},
		{
			"name": "Conversions",
			"icon": "arrows-exchange",
			"children": [
				{
					"name": "Color To Direction",
					"icon": "arrows-exchange",
					"nodeType": "color",
					"shaderNode": "colorToDirection"
				},
				{
					"name": "Direction To Color",
					"icon": "arrows-exchange",
					"nodeType": "color",
					"shaderNode": "directionToColor"
				}
			]
		},
		{
			"name": "Procedural",
			"icon": "binary-tree",
			"children": [
				{
					"name": "Checker",
					"icon": "border-all",
					"nodeType": "float",
					"shaderNode": "checker",
					"properties": [
						{
							"name": "uvNode",
							"nodeType": "vec2"
						}
					]
				},
				{
					"name": "Range",
					"icon": "sort-ascending-2",
					"nodeType": "node",
					"shaderNode": "range",
					"properties": [
						{
							"name": "minNode",
							"nodeType": "InputNode"
						},
						{
							"name": "maxNode",
							"nodeType": "InputNode"
						}
					]
				}
			]
		},
		{
			"name": "Prototype",
			"icon": "code",
			"children": [
				{
					"name": "Node Prototype",
					"icon": "components",
					"editorClass": "NodePrototypeEditor"
				},
				{
					"name": "Scriptable",
					"icon": "variable",
					"editorClass": "ScriptableEditor"
				}
			]
		},
		{
			"name": "Material",
			"icon": "circles",
			"children": [
				{
					"name": "Basic Material",
					"icon": "circle",
					"nodeType": "float",
					"editorClass": "BasicMaterialEditor",
					"editorURL": "./materials/BasicMaterialEditor.js"
				},
				{
					"name": "Points Material",
					"icon": "circle-dotted",
					"nodeType": "float",
					"editorClass": "PointsMaterialEditor"
				},
				{
					"name": "Standard Material",
					"icon": "inner-shadow-top-left",
					"nodeType": "float",
					"editorClass": "StandardMaterialEditor"
				}
			]
		}
	]
}
