AnimGraphLab Beta
UI Nodegraph Overview

Nograph is the primary place where you create and connect nodes to build your illustrations, designs. It provides a visual representation of entire data flow like creating a start then bending it. Nodegraph allows to create complex system that layers can’t offer in a organized manner.

Inputs and outputs

Generic Node

Source (Input)

The primary shape input. Most nodes that modify shapes have this.

Target (Input)

A secondary input, often used for cutters in Boolean operations or targets in Match Size.

Mask (Input)

A tertiary input, typically used for masking operations in nodes like Blend.

Output

The output of the node, which can be connected to other nodes' inputs.

  • Inputs (Top): Receive shape or properties from other nodes.
  • Outputs (Bottom): Send the processed shape or properties to other nodes.

Node wings

When hovered over a node, colored “wings” appear on left and right sides. These are quick-access toggles for important node states.

WingDescriptionVisual Example
DisableTemporarily bypasses the node's operation, as if it wasn't there.
Node
PreviewSimilar to render target but previews results as a ghosted shape in the viewport.
Node
Render targetMarks this node as the final output in the viewport. Only one node can be the render target at a time.
Node

Tip: use shortcuts to quickly set render flag 'R', preview node 'E' or disable node 'Q'.

Auto wiring

Abuse auto wiring feature as much as possible as it’s the fastest way to connect nodes.

  1. Select a node.
  2. Use TAB or RMB to search node.
  3. Add node and it will auto wire to selected node.

Tip: auto wiring supports multi-input nodes as well. First selected node will be first input, second selected node will be second input.

Quick add hotkeys

The fastest way to build graph is by using Quick add hotkeys. This allows to add common utility and shape nodes without opening the search menu.

  • Add in empty space: Hold a mapped key (e.g., R for Rectangle, T for Transform) and click anywhere in the nodegraph.
  • Insert on a wire: Hold a Quick add key and click directly on an existing wire to instantly insert and auto-wire new node between two existing nodes.

Info: Quick add keys are mapped to the left side of the keyboard by default to keep your right hand on the mouse. You can switch to a left-handed layout (right side of keyboard) in Settings -> General -> Node Hotkeys.

AI-generated workflows

AnimGraphLab’s architecture relies on a open JSON format. This means you can use AI tools, chatbots to generate complex node networks for you.

You can prompt an LLM to generate an AnimGraphLab-compatible JSON payload representing a specific procedural effect, copy the resulting code block, and simply press Ctrl + V (or Cmd + V) directly on in Nodegraph to paste the entire network.

Below are three examples showcasing static, animation, and state machine scene.

1. Static scene payload

It creates a base Star, scatters points using the Scatter node, and uses copyToPoints to instance Circle dots along the edge of the star.

Copy this block and press Ctrl+V in Nodegraph:

{
  "nodes": [
    {
      "id": "star2",
      "type": "star",
      "position": { "x": 490, "y": 726 },
      "data": { 
        "label": "Base Star 2", 
        "points": 8, 
        "outerRadius": 200, 
        "innerRadius": 100,
        "layers": [
          { "id": "f1", "type": "fill", "color": "#2f65be", "visible": true, "opacity": 1 }
        ]
      }
    },
    {
      "id": "ellipse2",
      "type": "ellipse",
      "position": { "x": 809, "y": 736 },
      "data": { 
        "label": "Dot 2", 
        "radiusX": 8, 
        "radiusY": 8,
        "layers": [
          { "id": "f2", "type": "fill", "color": "#ef4444", "visible": true, "opacity": 1 }
        ] 
      }
    },
    {
      "id": "scatter1",
      "type": "scatter",
      "position": { "x": 639, "y": 871 },
      "data": { 
        "label": "Outline Scatter 1", 
        "method": "outline", 
        "distribution": "count", 
        "count": 40 
      }
    },
    {
      "id": "copyToPoints1",
      "type": "copyToPoints",
      "position": { "x": 847, "y": 982 },
      "data": { "label": "Instance Dots 1", "alignToNormal": true }
    },
    {
      "id": "merge2",
      "type": "merge",
      "position": { "x": 494, "y": 1072 },
      "data": { "label": "Merge 2", "inputOrder": ["copyToPoints1", "star2"] }
    }
  ],
  "edges": [
    { "id": "e1", "source": "star2", "target": "scatter1" },
    { "id": "e2", "source": "ellipse2", "target": "copyToPoints1", "targetHandle": "target" },
    { "id": "e3", "source": "scatter1", "target": "copyToPoints1", "targetHandle": "secondaryTarget" },
    { "id": "e4", "source": "star2", "target": "merge2" },
    { "id": "e5", "source": "copyToPoints1", "target": "merge2" }
  ],
  "renderTargetId": "merge2"
}

2. Animation payload

Includes an animations object mapped to node parameters, along with basic timeline configuration. It will auto-play a rotation loop.

Copy this block and press Ctrl+V in Nodegraph:

{
  "nodes": [
    {
      "id": "rect1",
      "type": "rectangle",
      "position": { "x": 100, "y": 100 },
      "data": { 
        "label": "Spinning Box", 
        "width": 100, 
        "height": 100,
        "layers": [{ "id": "f1", "type": "fill", "color": "#3b82f6", "visible": true, "opacity": 1 }]
      },
      "animations": {
        "rotation": {
          "keys": [
            { "frame": 0, "value": 0, "type": "linear" },
            { "frame": 60, "value": 360, "type": "linear" }
          ]
        }
      }
    }
  ],
  "edges": [],
  "renderTargetId": "rect1",
  "animation": { "fps": 24, "start": 0, "end": 60, "exposure": 1, "clips": [] }
}

3. State Machine payload

Defines a fully interactive component to react to native interactions like hover, triggering transitions between animation clips.

Copy this block and press Ctrl+V in Nodegraph:

{
  "nodes": [
    {
      "id": "rect1",
      "type": "rectangle",
      "position": { "x": 300, "y": 100 },
      "data": { 
        "label": "Hover Button", 
        "width": 150, 
        "height": 50,
        "layers": [{ "id": "f1", "type": "fill", "color": "#8b5cf6", "visible": true, "opacity": 1 }]
      },
      "animations": {
        "scale": {
          "keys": [
            { "frame": 0, "value": 1, "type": "linear" },
            { "frame": 1, "value": 1, "type": "bezier", "outHandle": { "x": 5, "y": 0 } },
            { "frame": 11, "value": 1.2, "type": "bezier", "inHandle": { "x": -5, "y": 0 }, "outHandle": { "x": 5, "y": 0 } },
            { "frame": 21, "value": 1, "type": "bezier", "inHandle": { "x": -5, "y": 0 } }
          ]
        }
      }
    }
  ],
  "edges": [],
  "renderTargetId": "rect1",
  "animation": { 
    "fps": 24, "start": 0, "end": 60, "exposure": 1, 
    "clips": [
      { "id": "clip-idle", "name": "Idle", "start": 0, "end": 1, "color": "#888888" },
      { "id": "clip-hover-in", "name": "Hover In", "start": 1, "end": 11, "color": "#22c55e" },
      { "id": "clip-hover-out", "name": "Hover Out", "start": 11, "end": 21, "color": "#ef4444" }
    ] 
  },
  "stateMachine": {
    "variables": [
      { "id": "var-hover", "name": "hover", "type": "string", "value": "", "active": false }
    ],
    "nodes": [
      { "id": "state-entry", "type": "entry", "x": 100, "y": 0, "label": "Entry" },
      { "id": "state-idle", "type": "state", "x": 100, "y": 150, "label": "Idle", "clipId": "clip-idle" },
      { "id": "state-hover-in", "type": "state", "x": 100, "y": 300, "label": "Hover In", "clipId": "clip-hover-in", "loop": false },
      { "id": "state-hover-out", "type": "state", "x": 100, "y": 450, "label": "Hover Out", "clipId": "clip-hover-out", "loop": false }
    ],
    "edges": [
      { "id": "edge1", "source": "state-entry", "target": "state-idle" },
      { 
        "id": "edge2", 
        "source": "state-idle", 
        "target": "state-hover-in",
        "conditions": [
          { "id": "cond1", "variableId": "var-hover", "operator": "==", "compareValue": "rect1" }
        ]
      },
      { 
        "id": "edge3", 
        "source": "state-hover-in", 
        "target": "state-hover-out",
        "conditions": [
          { "id": "cond2", "variableId": "var-hover", "operator": "!=", "compareValue": "rect1" }
        ]
      },
      { 
        "id": "edge4", 
        "source": "state-hover-out", 
        "target": "state-idle",
        "hasExitTime": true
      },
      { 
        "id": "edge5", 
        "source": "state-hover-out", 
        "target": "state-hover-in",
        "conditions": [
          { "id": "cond3", "variableId": "var-hover", "operator": "==", "compareValue": "rect1" }
        ]
      }
    ]
  }
}

JSON payload schema

To instruct an AI (LLM) to generate valid nodegraph without structural errors, provide it with the following JSON interface block.

{
  "nodes": [
    {
      "id": "string",
      "type": "arrow",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "shaftLength?": "number | string",
        "shaftWidth?": "number | string",
        "headLength?": "number | string",
        "headWidth?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "artboard",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "size?": {
          "width?": "number | string",
          "height?": "number | string",
          "proportional?": "boolean"
        },
        "scaleContent?": "boolean",
        "referenceSize?": {
          "width?": "number | string",
          "height?": "number | string",
          "proportional?": "boolean"
        },
        "backgroundVisible?": "boolean",
        "backgroundType?": "any",
        "backgroundColor?": "string",
        "gradientStops?": [
          {
            "color": "string",
            "offset": "number"
          }
        ],
        "gradientStart?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "gradientEnd?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "gradientCenter?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "gradientRadius?": "number | string",
        "centerContent?": "boolean",
        "resizeToFit?": "boolean",
        "padding?": "number | string",
        "fitOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "watermarkEnabled?": "boolean",
        "watermarkSrc?": "any",
        "watermarkPlacement?": "any",
        "watermarkOpacity?": "number | string",
        "watermarkScale?": "number | string",
        "watermarkPadding?": "number | string",
        "watermarkFileName?": "string",
        "watermarkIsSvg?": "boolean",
        "watermarkIsSvgZ?": "boolean",
        "watermarkOriginalWidth?": "number",
        "watermarkOriginalHeight?": "number"
      }
    },
    {
      "id": "string",
      "type": "artboardMerge",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "columns?": "number | string",
        "rows?": "number | string",
        "paddingX?": "number | string",
        "paddingY?": "number | string",
        "backgroundColor?": "string",
        "backgroundVisible?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "attributeRandomize",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "mode?": "any",
        "group?": "string",
        "attributeName?": "string",
        "attributeSettings?": [
          {
            "name": "string",
            "min": "any",
            "max": "any",
            "colors?": [
              "string"
            ],
            "seed": "any",
            "probability?": "any",
            "distribution?": "continuous | integer | binary | stepped",
            "step?": "any",
            "outlierPercent?": "any",
            "outlierRange?": "any",
            "outlierMode?": "additive | multiplicative",
            "outlierDirection?": "max | min | both",
            "outlierSeed?": "any"
          }
        ],
        "operation?": "any",
        "distribution?": "any",
        "minFloat?": "number | string",
        "maxFloat?": "number | string",
        "minRotation?": "number | string",
        "maxRotation?": "number | string",
        "minColor?": "string",
        "maxColor?": "string",
        "frequency?": "number | string",
        "offset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "seed?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "bend",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "composition?": "any",
        "mode?": "any",
        "bendAngle?": "number | string",
        "captureOrigin?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "captureDirection?": "number | string",
        "captureLength?": "number | string",
        "deformInBothDirections?": "boolean",
        "preservePoints?": "boolean",
        "resampleLength?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "bevel",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "amount?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "blend",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "mode?": "any",
        "opacity?": "number | string",
        "swapInputs?": "boolean",
        "groupBlur?": "number | string",
        "enableThreshold?": "boolean",
        "alphaThreshold?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "blur",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "applyTo?": "any",
        "type?": "any",
        "blurAmount?": "number | string",
        "angle?": "number | string",
        "start?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "end?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "boolean",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "operation?": "any",
        "outputGroups?": {
          "createSeamGroups?": "boolean",
          "abSeamGroupName?": "string",
          "baSeamGroupName?": "string"
        }
      }
    },
    {
      "id": "string",
      "type": "bounds",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "boundsType?": "any",
        "padding?": "number | string",
        "keepHoles?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "centralLine",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "resampleLength?": "number | string",
        "pruningThreshold?": "number | string",
        "smoothness?": "number | string",
        "outputRadius?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "clip",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "keep?": "any",
        "origin?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "direction?": "number | string",
        "distance?": "number | string",
        "resample?": "number | string",
        "createSeamGroup?": "boolean",
        "seamGroupName?": "string"
      }
    },
    {
      "id": "string",
      "type": "color",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "colorMode?": "any",
        "reverseRange?": "boolean",
        "applyFill?": "boolean",
        "fillColor?": "string",
        "fillColorStops?": [
          {
            "color": "string",
            "offset": "number"
          }
        ],
        "applyStroke?": "boolean",
        "strokeColor?": "string",
        "strokeColorStops?": [
          {
            "color": "string",
            "offset": "number"
          }
        ],
        "blendMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "controller",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "_controls?": [
          {
            "key": "string",
            "label": "string",
            "type": "number | color | boolean | text | dropdown | attrRange | folder | ramp",
            "min?": "number",
            "max?": "number",
            "step?": "number",
            "defaultValue?": "any",
            "options?": [
              {
                "label": "string",
                "value": "any"
              }
            ],
            "controls?": "any",
            "collapsed?": "boolean"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "copyAndTransform",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "outputMode?": "any",
        "distribution?": "any",
        "totalNumber?": "number | string",
        "columns?": "number | string",
        "translate?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "rowTranslate?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "radius?": "number | string",
        "startAngle?": "number | string",
        "totalAngle?": "number | string",
        "alignRotation?": "boolean",
        "rotate?": "number | string",
        "scale?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "uniformScale?": "number | [object Object]",
        "pivot?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "accumulateScale?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "copyToPoints",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "seed?": "number | string",
        "transformUsingPointAttributes?": "boolean",
        "attributeTargets?": [
          {
            "label": "string",
            "params": "string"
          }
        ],
        "outputMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "delete",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "groupType?": "any",
        "invert?": "boolean",
        "heal?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "donut",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "outerRadius?": "number | string",
        "innerRadius?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "ellipse",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "radiusX?": "number | string",
        "radiusY?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "export",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "fileName?": "string",
        "_hasAnimation?": "boolean",
        "format?": "any",
        "formatAnimated?": "any",
        "quality?": "number | string",
        "withWatermark?": "boolean",
        "limitResolution?": "boolean",
        "paramError?": "string"
      }
    },
    {
      "id": "string",
      "type": "extractCenter",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "placement?": "any",
        "offset?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "extrude",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "preset?": "any",
        "depth?": "number | string",
        "rotateX?": "number | string",
        "rotateY?": "number | string",
        "rotateZ?": "number | string",
        "perspective?": "number | string",
        "fidelity?": "number | string",
        "lightAzimuth?": "number | string",
        "lightElevation?": "number | string",
        "outputGroups?": {
          "createFaceGroups?": "boolean",
          "frontGroupName?": "string",
          "backGroupName?": "string",
          "sideGroupName?": "string",
          "topGroupName?": "string",
          "bottomGroupName?": "string",
          "leftGroupName?": "string",
          "rightGroupName?": "string"
        }
      }
    },
    {
      "id": "string",
      "type": "freeformGradient",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "targetLayer?": "any",
        "baseColor?": "string",
        "gradientPoints?": [
          {
            "x": "number",
            "y": "number",
            "color": "string",
            "radius?": "number"
          }
        ],
        "smoothing?": "number | string",
        "blendMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "fuse",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "target?": "any",
        "distance?": "number | string",
        "removeInternalEdges?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "group",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "groupName?": "string",
        "baseGroup?": "string",
        "mergeOp?": "any",
        "group?": "any"
      }
    },
    {
      "id": "string",
      "type": "groupExpand",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "replaceOriginal?": "boolean",
        "groupName?": "string",
        "type?": "any",
        "steps?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "groupInvert",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "replaceOriginal?": "boolean",
        "groupName?": "string",
        "selectMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "hatch",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "outputMode?": "any",
        "hatchType?": "any",
        "angle?": "number | string",
        "spacingMode?": "any",
        "spacing?": "number | string",
        "maxSpacing?": "number | string",
        "gradientStart?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "gradientEnd?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "dashLength?": "number | string",
        "offset?": "number | string",
        "thickness?": "number | string",
        "color?": "string",
        "useShapeColor?": "boolean",
        "keepOriginal?": "boolean",
        "angleJitter?": "number | string",
        "spacingJitter?": "number | string",
        "dashLengthJitter?": "number | string",
        "waviness?": "number | string",
        "waveFrequency?": "number | string",
        "resample?": "number | string",
        "seed?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "import",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "sourceFile?": "any",
        "sourceUrl?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "size?": {
          "width?": "number | string",
          "height?": "number | string"
        },
        "sizeLinked?": "boolean",
        "scale?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "rotation?": "number | string",
        "opacity?": "number | string",
        "blur?": "number | string",
        "fileName?": "string",
        "isSvg?": "boolean",
        "originalWidth?": "number",
        "originalHeight?": "number"
      }
    },
    {
      "id": "string",
      "type": "interpolate",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "inputOrder?": [
          "string"
        ],
        "steps?": "number | string",
        "easing?": "any",
        "includeEnds?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "light",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "pattern?": "string",
        "lightType?": "any",
        "applyTo?": "any",
        "shadowOnly?": "boolean",
        "shadowOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "shadowBlur?": "number | string",
        "shadowColor?": "string",
        "shadowOpacity?": "number | string",
        "preset?": "any",
        "projectionAngle?": "number | string",
        "projectionScale?": "number | string",
        "projectionAxisAngle?": "number | string",
        "shadowPivotOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "lightColor?": "string",
        "intensity?": "number | string",
        "softness?": "number | string",
        "surfaceScale?": "number | string",
        "enableSpecular?": "boolean",
        "specularExponent?": "number | string",
        "specularConstant?": "number | string",
        "azimuth?": "number | string",
        "elevation?": "number | string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string",
          "z?": "number | string"
        },
        "blendMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "linearGradient",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "applyTo?": "any",
        "targetLayer?": "any",
        "start?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "end?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "halftone?": "boolean",
        "halftoneSize?": "number | string",
        "invertHalftone?": "boolean",
        "stops?": [
          {
            "color": "string",
            "offset": "number"
          }
        ],
        "blendMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "mask",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "mode?": "any",
        "opacity?": "number | string",
        "swapInputs?": "boolean",
        "invertMask?": "boolean",
        "bake?": "boolean",
        "hardEdge?": "boolean",
        "offset?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "matchSize",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "alignment?": "any",
        "offset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "scaleToFit?": "boolean",
        "uniformScale?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "merge",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "inputOrder?": [
          "string"
        ]
      }
    },
    {
      "id": "string",
      "type": "metadata",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "title?": "string",
        "description?": "string",
        "author?": "string",
        "license?": "string",
        "version?": "string",
        "link?": "string",
        "customFields?": [
          {
            "key": "string",
            "value": "string"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "mirror",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "direction?": "any",
        "axisOffset?": "number | string",
        "mirrorOnly?": "boolean",
        "weld?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "morph",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "amount?": "number | string",
        "density?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "noise",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "resample?": "number | string",
        "noiseType?": "any",
        "amplitude?": "number | string",
        "frequency?": "number | string",
        "offset?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "null",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string"
      }
    },
    {
      "id": "string",
      "type": "packShapes",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "iterations?": "number | string",
        "rotationStep?": "number | string",
        "spacing?": "number | string",
        "invertMask?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "parentConstraint",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "translate?": "boolean",
        "maintainOffset?": "boolean",
        "offsetPos?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "rotate?": "boolean",
        "offsetRot?": "number | string",
        "scale?": "boolean",
        "offsetScale?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "path",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "isClosed?": "boolean",
        "points?": [
          {
            "x": "number",
            "y": "number",
            "h1x": "number",
            "h1y": "number",
            "h2x": "number",
            "h2y": "number",
            "handleType?": "mirrored | aligned | asymmetric",
            "join?": "miter | round | bevel",
            "break?": "boolean"
          }
        ],
        "selectedPointIds?": [
          "string"
        ],
        "d?": "string",
        "layers?": [
          "any"
        ],
        "markers?": [
          {
            "position?": "start | mid | end",
            "shape?": "arrow | circle | rect",
            "size?": "number",
            "color?": "string"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "pattern",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "layout?": "any",
        "spacing?": "number | string",
        "stagger?": "number | string",
        "rowOffset?": "number | string",
        "colOffset?": "number | string",
        "waveAmplitude?": "number | string",
        "waveFrequency?": "number | string",
        "rings?": "number | string",
        "rotation?": "number | string",
        "jitterPos?": "number | string",
        "jitterRot?": "number | string",
        "jitterScale?": "number | string",
        "nthStep?": "number | string",
        "nthOffset?": "number | string",
        "nthRotation?": "number | string",
        "nthScale?": "number | string",
        "nthTranslateX?": "number | string",
        "nthTranslateY?": "number | string",
        "seed?": "number | string",
        "outputMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "pencil",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "points?": [
          [
            {
              "x": "number",
              "y": "number",
              "pressure?": "number"
            }
          ]
        ],
        "size?": "number | string",
        "eraseSize?": "number | string",
        "thinning?": "number | string",
        "smoothing?": "number | string",
        "streamline?": "number | string",
        "easing?": "any",
        "taperStart?": "number | string",
        "capStart?": "boolean",
        "taperEnd?": "number | string",
        "capEnd?": "boolean",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "perspective",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "preset?": "any",
        "rotateX?": "number | string",
        "rotateY?": "number | string",
        "rotateZ?": "number | string",
        "topLeft?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "topRight?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "bottomRight?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "bottomLeft?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "pixelate",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "pixelSize?": "number | string",
        "gap?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "polygon",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "sides?": "number | string",
        "radius?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "portal",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "targets?": [
          {
            "targetNodeId": "string",
            "group?": "string"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "radialGradient",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "applyTo?": "any",
        "targetLayer?": "any",
        "center?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "radius?": "number | string",
        "halftone?": "boolean",
        "halftoneSize?": "number | string",
        "invertHalftone?": "boolean",
        "stops?": [
          {
            "color": "string",
            "offset": "number"
          }
        ],
        "blendMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "rectangle",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "width?": "number | string",
        "height?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "cornerRadius?": {
          "tl?": "number | string",
          "tr?": "number | string",
          "bl?": "number | string",
          "br?": "number | string"
        },
        "cornerRadiusLinked?": "boolean",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "resample",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "length?": "number | string",
        "count?": "number | string",
        "useSimplify?": "boolean",
        "tolerance?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "retime",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "triggerBake?": "any",
        "mode?": "any",
        "speed?": "number | string",
        "offset?": "number | string",
        "customFrame?": "number | string",
        "outOfBounds?": "any",
        "useCustomRange?": "boolean",
        "frameRange?": {
          "start?": "number | string",
          "end?": "number | string"
        },
        "smooth?": "boolean",
        "_isBaking?": "boolean",
        "_bakeProgress?": "number",
        "_isBaked?": "boolean",
        "_bakedUpstreamHash?": "string",
        "_isDirty?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "scatter",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "method?": "any",
        "arrangement?": "any",
        "distribution?": "any",
        "density?": "number | string",
        "count?": "number | string",
        "spacing?": "number | string",
        "invertMask?": "boolean",
        "seed?": "number | string",
        "relaxIterations?": "number | string",
        "jitter?": "number | string",
        "scaleMode?": "any",
        "minScale?": "number | string",
        "maxScale?": "number | string",
        "outlierPercent?": "number | string",
        "outlierRange?": "number | string",
        "outlierMode?": "any",
        "outlierDirection?": "any",
        "outlierSeed?": "number | string",
        "gradientStart?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "gradientEnd?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "noiseFrequency?": "number | string",
        "noiseOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "alignToNormal?": "boolean",
        "minRotation?": "number | string",
        "maxRotation?": "number | string",
        "blendVector?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "blendAmount?": "number | string",
        "transferAttributes?": "string"
      }
    },
    {
      "id": "string",
      "type": "separateShapes",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string"
      }
    },
    {
      "id": "string",
      "type": "shapeAlongPath",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "mode?": "any",
        "composition?": "any",
        "itemOrder?": "any",
        "seed?": "number | string",
        "deform?": "boolean",
        "count?": "number | string",
        "spacing?": "number | string",
        "offset?": "number | string",
        "normalOffset?": "number | string",
        "alignY?": "any",
        "scale?": "number | string",
        "reverse?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "shapeMixer",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "mode?": "any",
        "pieces?": [
          {
            "originalId": "string",
            "name": "string",
            "weight": "number"
          }
        ],
        "seed?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "smooth",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "iterations?": "number | string",
        "strength?": "number | string"
      }
    },
    {
      "id": "string",
      "type": "snippet",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "code?": "string",
        "_controls?": [
          {
            "key": "string",
            "label": "string",
            "type": "number | color | boolean | text | dropdown | attrRange | folder | ramp",
            "min?": "number",
            "max?": "number",
            "step?": "number",
            "defaultValue?": "any",
            "options?": [
              {
                "label": "string",
                "value": "any"
              }
            ],
            "controls?": "any",
            "collapsed?": "boolean"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "spiral",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "spiralType?": "any",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "startRadius?": "number | string",
        "endRadius?": "number | string",
        "arms?": "number | string",
        "height?": "number | string",
        "perspectiveTilt?": "number | string",
        "revolutions?": "number | string",
        "points?": "number | string",
        "divergence?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "split",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "groupType?": "any",
        "invert?": "boolean",
        "discardGeometry?": "boolean",
        "deleteUnusedGroups?": "boolean"
      }
    },
    {
      "id": "string",
      "type": "star",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "points?": "number | string",
        "outerRadius?": "number | string",
        "innerRadius?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "subnet",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "nodes?": [
          "any"
        ],
        "edges?": [
          "any"
        ],
        "renderTargetId?": "string",
        "previewNodeId?": "string"
      }
    },
    {
      "id": "string",
      "type": "subnetInput",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string"
      }
    },
    {
      "id": "string",
      "type": "subnetOutput",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string"
      }
    },
    {
      "id": "string",
      "type": "switch",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "combineRule?": "any",
        "conditions?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "text",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "content?": "string",
        "align?": "any",
        "orientation?": "any",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "fontFamily?": "string",
        "fontSize?": "number | string",
        "fontVariant?": "string",
        "obliqueAngle?": "number | string",
        "letterSpacing?": "number | string",
        "lineHeight?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "textPath",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "startOffset?": "number | string",
        "side?": "any"
      }
    },
    {
      "id": "string",
      "type": "transform",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "pivotPlacement?": "any",
        "pivot?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "scale": "any",
        "rotation?": "number | string",
        "skew?": {
          "x?": "number | string",
          "y?": "number | string"
        }
      }
    },
    {
      "id": "string",
      "type": "trapezoid",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "position?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "topWidth?": "number | string",
        "bottomWidth?": "number | string",
        "height?": "number | string",
        "scale?": "number | string",
        "rotation?": "number | string",
        "blur?": "number | string",
        "layers?": [
          "any"
        ]
      }
    },
    {
      "id": "string",
      "type": "triangulate",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "resample?": "number | string",
        "maxArea?": "number | string",
        "autoScatter?": "number | string",
        "seed?": "number | string",
        "showLines?": "boolean",
        "lineColor?": "string",
        "lineWidth?": "number | string",
        "outputGroups?": {
          "steinerGroupName?": "string"
        }
      }
    },
    {
      "id": "string",
      "type": "trimPath",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "group?": "string",
        "start?": "number | string",
        "end?": "number | string",
        "offset?": "number | string",
        "reverse?": "boolean",
        "preservePoints?": "boolean",
        "mode?": "any"
      }
    },
    {
      "id": "string",
      "type": "variations",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "amount?": "number | string",
        "seed?": "number | string",
        "targets?": [
          {
            "label": "string",
            "param": "string",
            "type": "number | color",
            "min?": "number",
            "max?": "number",
            "colors?": [
              "string"
            ]
          }
        ],
        "layoutMode?": "any",
        "columns?": "number | string",
        "padding?": "number | string",
        "outputMode?": "any"
      }
    },
    {
      "id": "string",
      "type": "vectorize",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "label?": "string",
        "colorMode?": "color | binary",
        "hierarchical?": "stacked | cutout",
        "mode?": "spline | polygon | pixel",
        "filterSpeckle?": "number",
        "colorPrecision?": "number",
        "gradientStep?": "number",
        "cornerThreshold?": "number",
        "segmentLength?": "number",
        "spliceThreshold?": "number",
        "pathPrecision?": "number",
        "resample?": "number",
        "simplify?": "number",
        "smoothness?": "number",
        "vectorizeGroups?": [
          {
            "name?": "string",
            "selection": "any",
            "simplify?": "number",
            "smoothness?": "number",
            "resample?": "number"
          }
        ]
      }
    },
    {
      "id": "string",
      "type": "warp",
      "position": {
        "x": "number",
        "y": "number"
      },
      "data": {
        "paramError?": "string",
        "label?": "string",
        "group?": "string",
        "mode?": "any",
        "amount?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "frequency?": "number | string",
        "noiseOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "center?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "radial?": "boolean",
        "resample?": "number | string",
        "targetFace?": "any",
        "mapOffset?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "mapScale?": {
          "x?": "number | string",
          "y?": "number | string"
        },
        "mapFlipX?": "boolean",
        "mapFlipY?": "boolean",
        "mapRotation?": "number | string"
      }
    }
  ],
  "edges": [
    {
      "id": "string",
      "source": "string (node id)",
      "target": "string (node id)",
      "sourceHandle?": "string",
      "targetHandle?": "string"
    }
  ],
  "renderTargetId?": "string (node id)"
}

See also