{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/planetarium/Incanto/schemas/scene.schema.json",
  "title": "Incanto scene (format 1)",
  "type": "object",
  "properties": {
    "format": {
      "const": 1
    },
    "type": {
      "const": "scene"
    },
    "name": {
      "type": "string",
      "minLength": 1
    },
    "dimension": {
      "enum": ["2d", "3d"]
    },
    "assets": {
      "type": "object"
    },
    "constants": {
      "type": "object",
      "description": "Named reusable values. A prop references one as {\"@const\": \"NAME\"}; resolved to the literal AT LOAD."
    },
    "strings": {
      "type": "object",
      "description": "Translations, locale then key: {\"en\": {\"hud.score\": \"Score\"}}. A text prop references one as \"@t:hud.score\". `en` is the base — a key a locale omits falls back to it silently.",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": {
          "type": "string"
        }
      }
    },
    "orderGroups": {
      "type": "object",
      "description": "Extra draw-order bands as name → BASE OFFSET, layered over the built-in six (background -2000 … overlay 3000). Effective order is base(orderGroup) + renderOrder, so a band is a number; a bare name would sort as default. Re-declaring a built-in re-bases it for this scene.",
      "additionalProperties": {
        "type": "number"
      }
    },
    "input": {
      "type": "object",
      "description": "Declarative input actions (loaded into Engine.input on setScene; shape hard-validated at declare). Key arrays are KeyboardEvent.code strings.",
      "additionalProperties": {
        "type": "object",
        "oneOf": [
          {
            "properties": {
              "type": {
                "const": "button"
              },
              "keys": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "touch": {
                "const": "button"
              }
            },
            "required": ["type", "keys"]
          },
          {
            "properties": {
              "type": {
                "const": "vector2"
              },
              "keys": {
                "type": "object",
                "properties": {
                  "up": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "down": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "left": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "right": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": ["up", "down", "left", "right"]
              },
              "touch": {
                "const": "joystick"
              }
            },
            "required": ["type", "keys"]
          }
        ]
      }
    },
    "physics": {
      "type": "object",
      "description": "Physics config. The engine reads `gravity` ([x,y] px/s², y-down in 2D; [x,y,z] m/s², y-up in 3D); other keys are preserved verbatim.",
      "properties": {
        "gravity": {
          "type": "array",
          "items": {
            "type": "number"
          },
          "minItems": 2,
          "maxItems": 3
        }
      }
    },
    "multiplayer": {
      "type": "object",
      "description": "Multiplayer config. The engine reads `room` ('auto' = server-assigned room id); other keys (e.g. maxPlayers) are free metadata preserved verbatim.",
      "properties": {
        "room": {
          "type": "string"
        },
        "maxPlayers": {
          "type": "number"
        }
      }
    },
    "environment": {
      "type": "object",
      "description": "Renderer-interpreted environment settings, preserved verbatim: 3D `ambient`/`background`/`preset`/`hdri`/`skybox`, plus `rendering` ({antialias, pixelRatio}) for both renderers."
    },
    "viewport": {
      "type": "object",
      "description": "Design-resolution layout: author the world in fixed design pixels; the renderer maps them onto any canvas size (hard-validated at load).",
      "properties": {
        "design": {
          "type": "array",
          "items": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "minItems": 2,
          "maxItems": 2
        },
        "fit": {
          "enum": ["expand", "letterbox", "integer"],
          "default": "expand"
        }
      },
      "required": ["design"]
    },
    "root": {
      "$ref": "#/$defs/node"
    },
    "connections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "signal": {
            "type": "string"
          },
          "from": {
            "type": "string"
          },
          "to": {
            "type": "string"
          },
          "handler": {
            "type": "string"
          },
          "once": {
            "type": "boolean"
          },
          "filter": {
            "type": "object"
          }
        },
        "required": ["signal", "from", "to", "handler"]
      }
    }
  },
  "required": ["format", "type", "name", "root"],
  "$defs": {
    "node": {
      "anyOf": [
        {
          "$ref": "#/$defs/AnimatedSprite2D"
        },
        {
          "$ref": "#/$defs/AnimatedSprite3D"
        },
        {
          "$ref": "#/$defs/Area2D"
        },
        {
          "$ref": "#/$defs/Area3D"
        },
        {
          "$ref": "#/$defs/AudioPlayer"
        },
        {
          "$ref": "#/$defs/Billboard3D"
        },
        {
          "$ref": "#/$defs/BoneAttachment3D"
        },
        {
          "$ref": "#/$defs/BoneLookAt3D"
        },
        {
          "$ref": "#/$defs/Camera2D"
        },
        {
          "$ref": "#/$defs/Camera3D"
        },
        {
          "$ref": "#/$defs/CharacterBody2D"
        },
        {
          "$ref": "#/$defs/CharacterBody3D"
        },
        {
          "$ref": "#/$defs/CharacterController2D"
        },
        {
          "$ref": "#/$defs/CharacterController3D"
        },
        {
          "$ref": "#/$defs/ColorRect2D"
        },
        {
          "$ref": "#/$defs/DirectionalLight3D"
        },
        {
          "$ref": "#/$defs/Flock3D"
        },
        {
          "$ref": "#/$defs/Flowers3D"
        },
        {
          "$ref": "#/$defs/Foliage3D"
        },
        {
          "$ref": "#/$defs/HudLayer"
        },
        {
          "$ref": "#/$defs/InstancedMesh3D"
        },
        {
          "$ref": "#/$defs/Joint2D"
        },
        {
          "$ref": "#/$defs/Joint3D"
        },
        {
          "$ref": "#/$defs/Label"
        },
        {
          "$ref": "#/$defs/Label3D"
        },
        {
          "$ref": "#/$defs/LoftMesh3D"
        },
        {
          "$ref": "#/$defs/MeshInstance3D"
        },
        {
          "$ref": "#/$defs/ModelInstance3D"
        },
        {
          "$ref": "#/$defs/NetworkSpawner"
        },
        {
          "$ref": "#/$defs/Node"
        },
        {
          "$ref": "#/$defs/Node2D"
        },
        {
          "$ref": "#/$defs/Node3D"
        },
        {
          "$ref": "#/$defs/OmniLight3D"
        },
        {
          "$ref": "#/$defs/Particles2D"
        },
        {
          "$ref": "#/$defs/Particles3D"
        },
        {
          "$ref": "#/$defs/Ragdoll3D"
        },
        {
          "$ref": "#/$defs/Respawn"
        },
        {
          "$ref": "#/$defs/RigidBody2D"
        },
        {
          "$ref": "#/$defs/RigidBody3D"
        },
        {
          "$ref": "#/$defs/River3D"
        },
        {
          "$ref": "#/$defs/SpotLight3D"
        },
        {
          "$ref": "#/$defs/Sprite2D"
        },
        {
          "$ref": "#/$defs/Sprite3D"
        },
        {
          "$ref": "#/$defs/StaticBody2D"
        },
        {
          "$ref": "#/$defs/StaticBody3D"
        },
        {
          "$ref": "#/$defs/Terrain3D"
        },
        {
          "$ref": "#/$defs/TileMap2D"
        },
        {
          "$ref": "#/$defs/Timer"
        },
        {
          "$ref": "#/$defs/Trail3D"
        },
        {
          "$ref": "#/$defs/Tree3D"
        },
        {
          "$ref": "#/$defs/UILayer"
        },
        {
          "$ref": "#/$defs/UiBanner"
        },
        {
          "$ref": "#/$defs/UiBar"
        },
        {
          "$ref": "#/$defs/UiButton"
        },
        {
          "$ref": "#/$defs/UiDialogue"
        },
        {
          "$ref": "#/$defs/UiFrameCapSelect"
        },
        {
          "$ref": "#/$defs/UiImage"
        },
        {
          "$ref": "#/$defs/UiLanguageSelect"
        },
        {
          "$ref": "#/$defs/UiMinimap"
        },
        {
          "$ref": "#/$defs/UiMuteToggle"
        },
        {
          "$ref": "#/$defs/UiPanel"
        },
        {
          "$ref": "#/$defs/UiQualitySelect"
        },
        {
          "$ref": "#/$defs/UiRenderScaleSelect"
        },
        {
          "$ref": "#/$defs/UiSelect"
        },
        {
          "$ref": "#/$defs/UiSlider"
        },
        {
          "$ref": "#/$defs/UiText"
        },
        {
          "$ref": "#/$defs/UiToggle"
        },
        {
          "$ref": "#/$defs/UiVolumeSlider"
        },
        {
          "$ref": "#/$defs/UiWaypoint"
        },
        {
          "$ref": "#/$defs/Vehicle3D"
        },
        {
          "$ref": "#/$defs/VoxelGrid3D"
        },
        {
          "$ref": "#/$defs/Water3D"
        },
        {
          "$ref": "#/$defs/WaterCutout3D"
        },
        {
          "$ref": "#/$defs/Weather3D"
        },
        {
          "$ref": "#/$defs/_instance"
        }
      ]
    },
    "_instance": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "instance": {
          "type": "string"
        },
        "overrides": {
          "type": "object"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "instance"]
    },
    "AnimatedSprite2D": {
      "type": "object",
      "x-signals": ["animationFinished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "AnimatedSprite2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0.5]
            },
            "flipX": {
              "type": "boolean",
              "default": false
            },
            "flipY": {
              "type": "boolean",
              "default": false
            },
            "tint": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            },
            "sheet": {
              "type": "string",
              "default": ""
            },
            "animations": {
              "type": "object",
              "default": {}
            },
            "autoplay": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "AnimatedSprite3D": {
      "type": "object",
      "x-signals": ["animationFinished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "AnimatedSprite3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "billboard": {
              "type": "string",
              "enum": ["y", "full", "none"],
              "default": "y"
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0]
            },
            "tint": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            },
            "flipX": {
              "type": "boolean",
              "default": false
            },
            "pixelArt": {
              "type": "boolean",
              "default": true
            },
            "alphaTest": {
              "type": "number",
              "default": 0.5
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "shadowMode": {
              "type": "string",
              "enum": ["silhouette", "blob"],
              "default": "silhouette"
            },
            "sheet": {
              "type": "string",
              "default": ""
            },
            "frameWidth": {
              "type": "number",
              "default": 0
            },
            "frameHeight": {
              "type": "number",
              "default": 0
            },
            "animations": {
              "type": "object",
              "default": {}
            },
            "autoplay": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Area2D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Area2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Area3D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Area3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "AudioPlayer": {
      "type": "object",
      "x-signals": ["finished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "AudioPlayer"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "src": {
              "type": "string",
              "default": ""
            },
            "preset": {
              "type": "string",
              "enum": [
                "custom",
                "coin",
                "pickup",
                "jump",
                "hurt",
                "hit",
                "explosion",
                "powerup",
                "laser",
                "shoot",
                "blip",
                "select",
                "step",
                "win",
                "lose"
              ],
              "default": "custom"
            },
            "volume": {
              "type": "number",
              "default": 1
            },
            "pitch": {
              "type": "number",
              "default": 1
            },
            "seed": {
              "type": "number",
              "default": 0
            },
            "bus": {
              "type": "string",
              "enum": ["sfx", "music"],
              "default": "sfx"
            },
            "loop": {
              "type": "boolean",
              "default": false
            },
            "autoplay": {
              "type": "boolean",
              "default": false
            },
            "spatial": {
              "type": "boolean",
              "default": false
            },
            "refDistance": {
              "type": "number",
              "default": 1
            },
            "maxDistance": {
              "type": "number",
              "default": 50
            },
            "rolloff": {
              "type": "string",
              "enum": ["inverse", "linear", "exponential"],
              "default": "inverse"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Billboard3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Billboard3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "mode": {
              "type": "string",
              "enum": ["screen", "y", "none"],
              "default": "screen"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "BoneAttachment3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "BoneAttachment3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "bone": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "BoneLookAt3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "BoneLookAt3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "bone": {
              "type": "string",
              "default": "Head"
            },
            "lookAt": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "maxAngleDeg": {
              "type": "number",
              "default": 75
            },
            "weight": {
              "type": "number",
              "default": 0.85
            },
            "forwardAxis": {
              "type": "string",
              "enum": ["+x", "-x", "+y", "-y", "+z", "-z"],
              "default": "+z"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Camera2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Camera2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "follow": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "smoothing": {
              "type": "number",
              "default": 0
            },
            "zoom": {
              "type": "number",
              "default": 1
            },
            "limits": {
              "type": "array",
              "default": []
            },
            "current": {
              "type": "boolean",
              "default": false
            },
            "blendSeconds": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Camera3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Camera3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "fov": {
              "type": "number",
              "default": 60
            },
            "minHorizontalFov": {
              "type": "number",
              "default": 0
            },
            "near": {
              "type": "number",
              "default": 0.1
            },
            "far": {
              "type": "number",
              "default": 1000
            },
            "current": {
              "type": "boolean",
              "default": false
            },
            "lookAt": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "blendSeconds": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "CharacterBody2D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "CharacterBody2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "velocity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "stickToGround": {
              "type": "boolean",
              "default": true
            },
            "slopeLimitDeg": {
              "type": "number",
              "default": 45
            },
            "stepHeight": {
              "type": "number",
              "default": 35
            },
            "collideWithCharacters": {
              "type": "boolean",
              "default": true
            },
            "pushes": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "CharacterBody3D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "CharacterBody3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "velocity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "stickToGround": {
              "type": "boolean",
              "default": true
            },
            "slopeLimitDeg": {
              "type": "number",
              "default": 45
            },
            "stepHeight": {
              "type": "number",
              "default": 0.35
            },
            "collideWithCharacters": {
              "type": "boolean",
              "default": true
            },
            "pushes": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "CharacterController2D": {
      "type": "object",
      "x-signals": ["movementStateChanged"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "CharacterController2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": ["platformer", "topDown"],
              "default": "platformer"
            },
            "maxSpeed": {
              "type": "number",
              "default": 220
            },
            "jumpHeight": {
              "type": "number",
              "default": 64
            },
            "moveAction": {
              "type": "string",
              "default": "move"
            },
            "jumpAction": {
              "type": "string",
              "default": "jump"
            },
            "coyoteSeconds": {
              "type": "number",
              "default": 0
            },
            "jumpBufferSeconds": {
              "type": "number",
              "default": 0
            },
            "jumpCutMultiplier": {
              "type": "number",
              "default": 1
            },
            "maxJumps": {
              "type": "number",
              "default": 1
            },
            "dashSpeed": {
              "type": "number",
              "default": 0
            },
            "dashSeconds": {
              "type": "number",
              "default": 0.15
            },
            "dashAction": {
              "type": "string",
              "default": "dash"
            },
            "wallSlideSpeed": {
              "type": "number",
              "default": 0
            },
            "wallJumpImpulse": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "crouchHeight": {
              "type": "number",
              "default": 0
            },
            "crouchSpeedMultiplier": {
              "type": "number",
              "default": 0.5
            },
            "crouchAction": {
              "type": "string",
              "default": "crouch"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "CharacterController3D": {
      "type": "object",
      "x-signals": ["movementStateChanged", "wallJumped", "lockChanged", "dashed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "CharacterController3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "view": {
              "type": "string",
              "enum": ["free", "firstPerson", "quarter", "side"],
              "default": "free"
            },
            "camDistance": {
              "type": "number",
              "default": 4
            },
            "eyeHeight": {
              "type": "number",
              "default": 0.64
            },
            "maxSpeed": {
              "type": "number",
              "default": 2.5
            },
            "sprintMultiplier": {
              "type": "number",
              "default": 2
            },
            "jumpVelocity": {
              "type": "number",
              "default": 4
            },
            "sprintJumpMultiplier": {
              "type": "number",
              "default": 1.2
            },
            "coyoteSeconds": {
              "type": "number",
              "default": 0
            },
            "jumpBufferSeconds": {
              "type": "number",
              "default": 0
            },
            "jumpCutMultiplier": {
              "type": "number",
              "default": 1
            },
            "maxJumps": {
              "type": "number",
              "default": 1
            },
            "airControl": {
              "type": "number",
              "default": 0.2
            },
            "wallJumpImpulse": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "wallSlideSpeed": {
              "type": "number",
              "default": 0
            },
            "fallGravity": {
              "type": "number",
              "default": 2.5
            },
            "floatHeight": {
              "type": "number",
              "default": 0.01
            },
            "stepHeight": {
              "type": "number",
              "default": 0.35
            },
            "slopeLimitDeg": {
              "type": "number",
              "default": 55
            },
            "swimSpeed": {
              "type": "number",
              "default": 1.6
            },
            "swimDepth": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "diveAction": {
              "type": "string",
              "default": "dive"
            },
            "climbSpeed": {
              "type": "number",
              "default": 1.5
            },
            "ladderGroup": {
              "type": "string",
              "default": "ladder"
            },
            "mantleHeight": {
              "type": "number",
              "default": 0
            },
            "crouchHeight": {
              "type": "number",
              "default": 0
            },
            "crouchSpeedMultiplier": {
              "type": "number",
              "default": 0.5
            },
            "crouchAction": {
              "type": "string",
              "default": "crouch"
            },
            "dashSpeed": {
              "type": "number",
              "default": 0
            },
            "dashSeconds": {
              "type": "number",
              "default": 0.25
            },
            "dashCooldown": {
              "type": "number",
              "default": 0
            },
            "dashAction": {
              "type": "string",
              "default": "dash"
            },
            "dashBackstep": {
              "type": "boolean",
              "default": false
            },
            "mouseLook": {
              "type": "boolean",
              "default": true
            },
            "zoomMin": {
              "type": "number",
              "default": 0
            },
            "zoomMax": {
              "type": "number",
              "default": 0
            },
            "pitchMin": {
              "type": "number",
              "default": -1.3
            },
            "pitchMax": {
              "type": "number",
              "default": 1.5
            },
            "pitchStart": {
              "type": "number",
              "default": 0
            },
            "cameraCollision": {
              "type": "boolean",
              "default": true
            },
            "camera": {
              "type": "string",
              "enum": ["drive", "none"],
              "default": "drive"
            },
            "platformCarry": {
              "type": "boolean",
              "default": true
            },
            "turnSpeed": {
              "type": "number",
              "default": 100
            },
            "camLerp": {
              "type": "number",
              "default": 25
            },
            "moveAction": {
              "type": "string",
              "default": "move"
            },
            "jumpAction": {
              "type": "string",
              "default": "jump"
            },
            "sprintAction": {
              "type": "string",
              "default": "sprint"
            },
            "skinPath": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": "../Skin"
            },
            "skinYawOffset": {
              "type": "number",
              "default": 0
            },
            "lockOnAction": {
              "type": "string",
              "default": ""
            },
            "lockGroup": {
              "type": "string",
              "default": "enemy"
            },
            "lockRange": {
              "type": "number",
              "default": 12
            },
            "animations": {
              "type": "object",
              "default": {}
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "ColorRect2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "ColorRect2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [100, 100]
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0.5]
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "DirectionalLight3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "DirectionalLight3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "intensity": {
              "type": "number",
              "default": 1
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "shadowArea": {
              "type": "number",
              "default": 75
            },
            "shadowMapSize": {
              "type": "number",
              "default": 2048
            },
            "shadowFollowsCamera": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Flock3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Flock3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "mesh": {
              "type": "string",
              "enum": ["box", "sphere", "capsule", "plane", "cylinder", "gem"],
              "default": "box"
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "material": {
              "type": "object",
              "default": {}
            },
            "transforms": {
              "type": "array",
              "default": []
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "receiveShadow": {
              "type": "boolean",
              "default": false
            },
            "collider": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "object"
                }
              ],
              "default": null
            },
            "count": {
              "type": "number",
              "default": 30
            },
            "radius": {
              "type": "number",
              "default": 20
            },
            "height": {
              "type": "number",
              "default": 8
            },
            "speed": {
              "type": "number",
              "default": 6
            },
            "turn": {
              "type": "number",
              "default": 2.5
            },
            "separation": {
              "type": "number",
              "default": 1.5
            },
            "sight": {
              "type": "number",
              "default": 5
            },
            "alignment": {
              "type": "number",
              "default": 1
            },
            "cohesion": {
              "type": "number",
              "default": 1
            },
            "follow": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Flowers3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Flowers3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "density": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": ["lush", "sparse", "none"]
                },
                {
                  "type": "number"
                }
              ],
              "default": "sparse"
            },
            "area": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [20, 20]
            },
            "seed": {
              "type": "number",
              "default": 1
            },
            "varieties": {
              "type": "array",
              "default": []
            },
            "palette": {
              "type": "array",
              "default": []
            },
            "height": {
              "type": "number",
              "default": 0.45
            },
            "clustering": {
              "type": "number",
              "default": 0.6
            },
            "sway": {
              "type": "number",
              "default": 0.5
            },
            "drape": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            },
            "avoidWater": {
              "type": "boolean",
              "default": true
            },
            "terrain": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Foliage3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Foliage3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 2
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "kind": {
              "type": "string",
              "enum": ["grass", "flowers", "reeds"],
              "default": "grass"
            },
            "style": {
              "type": "string",
              "enum": ["blades", "simple", "mesh", "tufts"],
              "default": "mesh"
            },
            "tuftStyle": {
              "type": "string",
              "enum": ["grass", "fern"],
              "default": "grass"
            },
            "area": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [20, 20]
            },
            "density": {
              "type": "number",
              "default": 12
            },
            "maxInstances": {
              "type": "number",
              "default": 50000
            },
            "height": {
              "type": "number",
              "default": 0.25
            },
            "colorA": {
              "type": "string",
              "default": "#4d7232"
            },
            "colorB": {
              "type": "string",
              "default": "#9aab55"
            },
            "groundColor": {
              "type": "string",
              "default": "#1f3015"
            },
            "sunDirection": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0.5, 0.8, 0.3]
            },
            "fadeStart": {
              "type": "number",
              "default": 60
            },
            "fadeEnd": {
              "type": "number",
              "default": 90
            },
            "sway": {
              "type": "number",
              "default": 0.6
            },
            "interaction": {
              "type": "boolean",
              "default": true
            },
            "coverage": {
              "type": "number",
              "default": 0.85
            },
            "flowers": {
              "type": "number",
              "default": 0
            },
            "seed": {
              "type": "number",
              "default": 1
            },
            "drape": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            },
            "avoidWater": {
              "type": "boolean",
              "default": true
            },
            "terrain": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "HudLayer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "HudLayer"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "zIndex": {
              "type": "number",
              "default": 100
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusNavigation": {
              "type": "boolean",
              "default": false
            },
            "letterbox": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "InstancedMesh3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "InstancedMesh3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "mesh": {
              "type": "string",
              "enum": ["box", "sphere", "capsule", "plane", "cylinder", "gem"],
              "default": "box"
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "material": {
              "type": "object",
              "default": {}
            },
            "transforms": {
              "type": "array",
              "default": []
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "receiveShadow": {
              "type": "boolean",
              "default": false
            },
            "collider": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "object"
                }
              ],
              "default": null
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Joint2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Joint2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "type": {
              "type": "string",
              "enum": ["fixed", "revolute", "prismatic", "rope", "spring"],
              "default": "revolute"
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "targetAnchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "axis": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 1]
            },
            "limits": {
              "type": "array",
              "default": []
            },
            "motorSpeed": {
              "type": "number",
              "default": 0
            },
            "motorStrength": {
              "type": "number",
              "default": 20
            },
            "length": {
              "type": "number",
              "default": 0
            },
            "stiffness": {
              "type": "number",
              "default": 50
            },
            "damping": {
              "type": "number",
              "default": 5
            },
            "collide": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Joint3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Joint3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "type": {
              "type": "string",
              "enum": ["fixed", "spherical", "revolute", "prismatic", "rope", "spring"],
              "default": "spherical"
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "targetAnchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "axis": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 1, 0]
            },
            "limits": {
              "type": "array",
              "default": []
            },
            "motorSpeed": {
              "type": "number",
              "default": 0
            },
            "motorStrength": {
              "type": "number",
              "default": 20
            },
            "length": {
              "type": "number",
              "default": 0
            },
            "stiffness": {
              "type": "number",
              "default": 50
            },
            "damping": {
              "type": "number",
              "default": 5
            },
            "collide": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Label": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Label"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "text": {
              "type": "string",
              "default": ""
            },
            "fontSize": {
              "type": "number",
              "default": 16
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "font": {
              "type": "string",
              "default": "monospace"
            },
            "align": {
              "type": "string",
              "default": "left"
            },
            "opacity": {
              "type": "number",
              "default": 1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Label3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Label3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "billboard": {
              "type": "string",
              "enum": ["y", "full", "none"],
              "default": "full"
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0]
            },
            "tint": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            },
            "flipX": {
              "type": "boolean",
              "default": false
            },
            "pixelArt": {
              "type": "boolean",
              "default": true
            },
            "alphaTest": {
              "type": "number",
              "default": 0.5
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "shadowMode": {
              "type": "string",
              "enum": ["silhouette", "blob"],
              "default": "silhouette"
            },
            "text": {
              "type": "string",
              "default": ""
            },
            "height": {
              "type": "number",
              "default": 0.3
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "font": {
              "type": "string",
              "default": "sans-serif"
            },
            "outline": {
              "type": "string",
              "default": "#000000"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "LoftMesh3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "LoftMesh3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "sections": {
              "type": "array",
              "default": []
            },
            "slices": {
              "type": "number",
              "default": 24
            },
            "smooth": {
              "type": "number",
              "default": 4
            },
            "material": {
              "type": "object",
              "default": {}
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "receiveShadow": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "MeshInstance3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "MeshInstance3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "mesh": {
              "type": "string",
              "enum": ["box", "sphere", "capsule", "plane", "cylinder", "gem"],
              "default": "box"
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "material": {
              "type": "object",
              "default": {}
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "receiveShadow": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "ModelInstance3D": {
      "type": "object",
      "x-signals": ["animationFinished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "ModelInstance3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "model": {
              "type": "string",
              "default": ""
            },
            "animation": {
              "type": "string",
              "default": ""
            },
            "targetHeight": {
              "type": "number",
              "default": 0
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "animationLoop": {
              "type": "boolean",
              "default": true
            },
            "animationSpeed": {
              "type": "number",
              "default": 1
            },
            "animationOffset": {
              "type": "number",
              "default": 0
            },
            "animationUpper": {
              "type": "string",
              "default": ""
            },
            "animationUpperLoop": {
              "type": "boolean",
              "default": false
            },
            "upperBodyRoot": {
              "type": "string",
              "default": "Spine"
            },
            "receiveShadow": {
              "type": "boolean",
              "default": false
            },
            "tint": {
              "type": "string",
              "default": ""
            },
            "metalness": {
              "type": "number",
              "default": -1
            },
            "roughness": {
              "type": "number",
              "default": -1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "NetworkSpawner": {
      "type": "object",
      "x-signals": ["spawned", "despawned"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "NetworkSpawner"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "source": {
              "type": "string",
              "default": "users"
            },
            "scene": {
              "type": "string",
              "default": ""
            },
            "interpolate": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Node": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Node"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {},
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Node2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Node2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Node3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Node3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "OmniLight3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "OmniLight3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "intensity": {
              "type": "number",
              "default": 1
            },
            "range": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Particles2D": {
      "type": "object",
      "x-signals": ["finished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Particles2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "effects"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "preset": {
              "type": "string",
              "enum": [
                "custom",
                "fire",
                "smoke",
                "sparks",
                "fireworks",
                "explosion",
                "flash",
                "lightning",
                "rain",
                "snow",
                "magic"
              ],
              "default": "custom"
            },
            "emitting": {
              "type": "boolean",
              "default": true
            },
            "worldSpace": {
              "type": "boolean",
              "default": false
            },
            "rate": {
              "type": "number",
              "default": 40
            },
            "burst": {
              "type": "number",
              "default": 0
            },
            "lifetime": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.6, 1.2]
            },
            "speed": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [40, 120]
            },
            "directionDeg": {
              "type": "number",
              "default": -90
            },
            "spreadDeg": {
              "type": "number",
              "default": 30
            },
            "gravity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "drag": {
              "type": "number",
              "default": 0
            },
            "sizeStart": {
              "type": "number",
              "default": 8
            },
            "sizeEnd": {
              "type": "number",
              "default": 2
            },
            "colorStart": {
              "type": "string",
              "default": "#ffffff"
            },
            "colorEnd": {
              "type": "string",
              "default": "#ffffff"
            },
            "paletteColors": {
              "type": "array",
              "default": []
            },
            "alphaStart": {
              "type": "number",
              "default": 1
            },
            "alphaEnd": {
              "type": "number",
              "default": 0
            },
            "shimmer": {
              "type": "number",
              "default": 0
            },
            "blend": {
              "type": "string",
              "enum": ["add", "normal"],
              "default": "add"
            },
            "maxParticles": {
              "type": "number",
              "default": 256
            },
            "emitBox": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "drift": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Particles3D": {
      "type": "object",
      "x-signals": ["finished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Particles3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "effects"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "preset": {
              "type": "string",
              "enum": [
                "custom",
                "fire",
                "smoke",
                "sparks",
                "fireworks",
                "explosion",
                "flash",
                "lightning",
                "rain",
                "snow",
                "magic"
              ],
              "default": "custom"
            },
            "emitting": {
              "type": "boolean",
              "default": true
            },
            "worldSpace": {
              "type": "boolean",
              "default": false
            },
            "rate": {
              "type": "number",
              "default": 40
            },
            "burst": {
              "type": "number",
              "default": 0
            },
            "lifetime": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.6, 1.2]
            },
            "speed": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [40, 120]
            },
            "directionDeg": {
              "type": "number",
              "default": -90
            },
            "spreadDeg": {
              "type": "number",
              "default": 30
            },
            "gravity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "drag": {
              "type": "number",
              "default": 0
            },
            "sizeStart": {
              "type": "number",
              "default": 8
            },
            "sizeEnd": {
              "type": "number",
              "default": 2
            },
            "colorStart": {
              "type": "string",
              "default": "#ffffff"
            },
            "colorEnd": {
              "type": "string",
              "default": "#ffffff"
            },
            "paletteColors": {
              "type": "array",
              "default": []
            },
            "alphaStart": {
              "type": "number",
              "default": 1
            },
            "alphaEnd": {
              "type": "number",
              "default": 0
            },
            "shimmer": {
              "type": "number",
              "default": 0
            },
            "blend": {
              "type": "string",
              "enum": ["add", "normal"],
              "default": "add"
            },
            "depthTest": {
              "type": "boolean",
              "default": true
            },
            "maxParticles": {
              "type": "number",
              "default": 256
            },
            "emitBox": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "drift": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Ragdoll3D": {
      "type": "object",
      "x-signals": ["activated", "reset"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Ragdoll3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": "../Skin"
            },
            "mass": {
              "type": "number",
              "default": 70
            },
            "damping": {
              "type": "number",
              "default": 3
            },
            "lifetime": {
              "type": "number",
              "default": 0
            },
            "collide": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Respawn": {
      "type": "object",
      "x-signals": ["respawned"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Respawn"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ".."
            },
            "below": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "to": {
              "type": "array",
              "default": []
            },
            "resetVelocity": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "RigidBody2D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "RigidBody2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "mass": {
              "type": "number",
              "default": 1
            },
            "gravityScale": {
              "type": "number",
              "default": 1
            },
            "fixedRotation": {
              "type": "boolean",
              "default": false
            },
            "friction": {
              "type": "number",
              "default": 0.5
            },
            "restitution": {
              "type": "number",
              "default": 0
            },
            "linearVelocity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "angularVelocity": {
              "type": "number",
              "default": 0
            },
            "linearDamping": {
              "type": "number",
              "default": 0
            },
            "angularDamping": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "RigidBody3D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "RigidBody3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "mass": {
              "type": "number",
              "default": 1
            },
            "gravityScale": {
              "type": "number",
              "default": 1
            },
            "fixedRotation": {
              "type": "boolean",
              "default": false
            },
            "friction": {
              "type": "number",
              "default": 0.5
            },
            "restitution": {
              "type": "number",
              "default": 0
            },
            "linearVelocity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "angularVelocity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "linearDamping": {
              "type": "number",
              "default": 0
            },
            "angularDamping": {
              "type": "number",
              "default": 0
            },
            "buoyancy": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "River3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "River3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "path": {
              "type": "array",
              "default": []
            },
            "width": {
              "type": "number",
              "default": 6
            },
            "widths": {
              "type": "array",
              "default": []
            },
            "depth": {
              "type": "number",
              "default": 0.8
            },
            "flowSpeed": {
              "type": "number",
              "default": 1.6
            },
            "colors": {
              "type": "object",
              "default": {}
            },
            "absorption": {
              "type": "number",
              "default": 0.5
            },
            "opacity": {
              "type": "number",
              "default": 0.85
            },
            "foam": {
              "type": "number",
              "default": 1
            },
            "ripples": {
              "type": "number",
              "default": 1
            },
            "sunDirection": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0.5, 0.8, 0.3]
            },
            "sunColor": {
              "type": "string",
              "default": "#fff6e0"
            },
            "sunIntensity": {
              "type": "number",
              "default": 1
            },
            "terrain": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "carve": {
              "type": "boolean",
              "default": true
            },
            "flowForce": {
              "type": "number",
              "default": 1
            },
            "spray": {
              "type": "number",
              "default": 1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "SpotLight3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "SpotLight3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "intensity": {
              "type": "number",
              "default": 1
            },
            "range": {
              "type": "number",
              "default": 0
            },
            "coneDeg": {
              "type": "number",
              "default": 60
            },
            "penumbra": {
              "type": "number",
              "default": 0.3
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "shadowMapSize": {
              "type": "number",
              "default": 1024
            },
            "lookAt": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Sprite2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Sprite2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0.5]
            },
            "flipX": {
              "type": "boolean",
              "default": false
            },
            "flipY": {
              "type": "boolean",
              "default": false
            },
            "tint": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Sprite3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Sprite3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "billboard": {
              "type": "string",
              "enum": ["y", "full", "none"],
              "default": "y"
            },
            "anchor": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.5, 0]
            },
            "tint": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 1
            },
            "flipX": {
              "type": "boolean",
              "default": false
            },
            "pixelArt": {
              "type": "boolean",
              "default": true
            },
            "alphaTest": {
              "type": "number",
              "default": 0.5
            },
            "castShadow": {
              "type": "boolean",
              "default": false
            },
            "shadowMode": {
              "type": "string",
              "enum": ["silhouette", "blob"],
              "default": "silhouette"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "StaticBody2D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "StaticBody2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "friction": {
              "type": "number",
              "default": 0.5
            },
            "restitution": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "StaticBody3D": {
      "type": "object",
      "x-signals": ["triggerEnter", "triggerExit"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "StaticBody3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "collider": {
              "type": "object",
              "default": {}
            },
            "enabled": {
              "type": "boolean",
              "default": true
            },
            "friction": {
              "type": "number",
              "default": 0.5
            },
            "restitution": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Terrain3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Terrain3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "terrain"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [200, 200]
            },
            "maxHeight": {
              "type": "number",
              "default": 28
            },
            "seed": {
              "type": "number",
              "default": 1
            },
            "resolution": {
              "type": "number",
              "default": 128
            },
            "theme": {
              "type": "string",
              "enum": [
                "island",
                "alpine",
                "plains",
                "desert",
                "grassland",
                "forest",
                "savanna",
                "snow",
                "wetland",
                "volcanic",
                "custom"
              ],
              "default": "island"
            },
            "roughness": {
              "type": "number",
              "default": 0.5
            },
            "detail": {
              "type": "number",
              "default": 4
            },
            "flatThreshold": {
              "type": "number",
              "default": 0.95
            },
            "islandEdge": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            },
            "layers": {
              "type": "array",
              "default": []
            },
            "textureBase": {
              "type": "string",
              "default": "https://agent8-games.verse8.io/assets/3D/default/textures/terrain"
            },
            "basins": {
              "type": "array",
              "default": []
            },
            "channels": {
              "type": "array",
              "default": []
            },
            "wetline": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "object"
                }
              ],
              "default": null
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "TileMap2D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "TileMap2D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "rotation": {
              "type": "number",
              "default": 0
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [1, 1]
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "texture": {
              "type": "string",
              "default": ""
            },
            "tileSize": {
              "type": "number",
              "default": 32
            },
            "columns": {
              "type": "number",
              "default": 0
            },
            "cells": {
              "type": "array",
              "default": []
            },
            "legend": {
              "type": "object",
              "default": {}
            },
            "colors": {
              "type": "object",
              "default": {}
            },
            "solid": {
              "type": "array",
              "default": []
            },
            "opacity": {
              "type": "number",
              "default": 1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Timer": {
      "type": "object",
      "x-signals": ["timeout"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Timer"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "waitTime": {
              "type": "number",
              "default": 1
            },
            "oneShot": {
              "type": "boolean",
              "default": false
            },
            "autostart": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Trail3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Trail3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "width": {
              "type": "number",
              "default": 0.3
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "opacity": {
              "type": "number",
              "default": 0.8
            },
            "seconds": {
              "type": "number",
              "default": 0.6
            },
            "emitting": {
              "type": "boolean",
              "default": true
            },
            "additive": {
              "type": "boolean",
              "default": false
            },
            "minDistance": {
              "type": "number",
              "default": 0.05
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Tree3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Tree3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "tier": {
              "type": "string",
              "enum": ["simple", "medium", "high"],
              "default": "medium"
            },
            "type": {
              "type": "string",
              "enum": ["conifer", "broadleaf", "dead", "bush"],
              "default": "conifer"
            },
            "seed": {
              "type": "number",
              "default": 1
            },
            "height": {
              "type": "number",
              "default": 6
            },
            "count": {
              "type": "number",
              "default": 1
            },
            "area": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [10, 10]
            },
            "trunkColor": {
              "type": "string",
              "default": "#7a5a3a"
            },
            "canopyColor": {
              "type": "string",
              "default": "#4a7c3f"
            },
            "leafTexture": {
              "type": "string",
              "default": ""
            },
            "leafFadeStart": {
              "type": "number",
              "default": 0
            },
            "leafFadeEnd": {
              "type": "number",
              "default": 0
            },
            "leafShadows": {
              "type": "boolean",
              "default": true
            },
            "drape": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                }
              ],
              "default": null
            },
            "avoidWater": {
              "type": "boolean",
              "default": true
            },
            "terrain": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UILayer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UILayer"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "top-left",
                "top",
                "top-right",
                "left",
                "center",
                "right",
                "bottom-left",
                "bottom",
                "bottom-right"
              ],
              "default": "top-left"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiBanner": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "bannerShown"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiBanner"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "center"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "size": {
              "type": "number",
              "default": 42
            },
            "seconds": {
              "type": "number",
              "default": 2
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiBar": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiBar"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "value": {
              "type": "number",
              "default": 100
            },
            "max": {
              "type": "number",
              "default": 100
            },
            "width": {
              "type": "number",
              "default": 180
            },
            "height": {
              "type": "number",
              "default": 14
            },
            "color": {
              "type": "string",
              "default": "#4ade80"
            },
            "lowColor": {
              "type": "string",
              "default": "#ef4444"
            },
            "lowThreshold": {
              "type": "number",
              "default": 0.3
            },
            "background": {
              "type": "string",
              "default": "rgba(0,0,0,0.5)"
            },
            "label": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiButton": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "pressed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiButton"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "text": {
              "type": "string",
              "default": "OK"
            },
            "size": {
              "type": "number",
              "default": 16
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "background": {
              "type": "string",
              "default": "rgba(255,255,255,0.14)"
            },
            "disabled": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiDialogue": {
      "type": "object",
      "x-signals": [
        "dragStarted",
        "dragCancelled",
        "droppedOn",
        "dropped",
        "lineShown",
        "choiceMade",
        "dialogueFinished"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiDialogue"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "bottom"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "charsPerSecond": {
              "type": "number",
              "default": 40
            },
            "autoAdvanceSeconds": {
              "type": "number",
              "default": 0
            },
            "width": {
              "type": "number",
              "default": 520
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiFrameCapSelect": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiFrameCapSelect"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": "Frame rate"
            },
            "options": {
              "type": "string",
              "default": "30,60,120,0"
            },
            "value": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiImage": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiImage"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "src": {
              "type": "string",
              "default": ""
            },
            "width": {
              "type": "number",
              "default": 48
            },
            "height": {
              "type": "number",
              "default": 48
            },
            "fit": {
              "type": "string",
              "enum": ["contain", "cover", "fill"],
              "default": "contain"
            },
            "tint": {
              "type": "string",
              "default": ""
            },
            "opacity": {
              "type": "number",
              "default": 1
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiLanguageSelect": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiLanguageSelect"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": "Language"
            },
            "options": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiMinimap": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiMinimap"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "size": {
              "type": "number",
              "default": 160
            },
            "radius": {
              "type": "number",
              "default": 40
            },
            "follow": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "dots": {
              "type": "object",
              "default": {}
            },
            "heading": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "self": {
              "type": "string",
              "default": "#ffffff"
            },
            "dotSize": {
              "type": "number",
              "default": 6
            },
            "background": {
              "type": "string",
              "default": "rgba(0,0,0,0.45)"
            },
            "shape": {
              "type": "string",
              "enum": ["circle", "square"],
              "default": "circle"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiMuteToggle": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiMuteToggle"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiPanel": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiPanel"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "layout": {
              "type": "string",
              "enum": ["column", "row", "grid"],
              "default": "column"
            },
            "columns": {
              "type": "number",
              "default": 4
            },
            "gap": {
              "type": "number",
              "default": 8
            },
            "padding": {
              "type": "number",
              "default": 12
            },
            "background": {
              "type": "string",
              "default": "rgba(0,0,0,0.55)"
            },
            "radius": {
              "type": "number",
              "default": 10
            },
            "width": {
              "type": "number",
              "default": 0
            },
            "height": {
              "type": "number",
              "default": 0
            },
            "border": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiQualitySelect": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiQualitySelect"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": "Quality"
            },
            "options": {
              "type": "string",
              "default": "low,medium,high"
            },
            "value": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiRenderScaleSelect": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiRenderScaleSelect"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": "Resolution"
            },
            "options": {
              "type": "string",
              "default": "0.5,0.75,1"
            },
            "value": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiSelect": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiSelect"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "options": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "string",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiSlider": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiSlider"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "number",
              "default": 0.5
            },
            "min": {
              "type": "number",
              "default": 0
            },
            "max": {
              "type": "number",
              "default": 1
            },
            "step": {
              "type": "number",
              "default": 0.01
            },
            "width": {
              "type": "number",
              "default": 180
            },
            "color": {
              "type": "string",
              "default": "#6ee7dc"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiText": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiText"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "text": {
              "type": "string",
              "default": ""
            },
            "format": {
              "type": "string",
              "default": ""
            },
            "size": {
              "type": "number",
              "default": 16
            },
            "color": {
              "type": "string",
              "default": "#ffffff"
            },
            "shadow": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiToggle": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiToggle"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "boolean",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiVolumeSlider": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "changed"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiVolumeSlider"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": true
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "value": {
              "type": "number",
              "default": 0.5
            },
            "min": {
              "type": "number",
              "default": 0
            },
            "max": {
              "type": "number",
              "default": 1
            },
            "step": {
              "type": "number",
              "default": 0.01
            },
            "width": {
              "type": "number",
              "default": 180
            },
            "color": {
              "type": "string",
              "default": "#6ee7dc"
            },
            "bus": {
              "type": "string",
              "enum": ["master", "sfx", "music"],
              "default": "master"
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "UiWaypoint": {
      "type": "object",
      "x-signals": ["dragStarted", "dragCancelled", "droppedOn", "dropped", "arrived"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "UiWaypoint"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "anchor": {
              "type": "string",
              "enum": [
                "topLeft",
                "top",
                "topRight",
                "left",
                "center",
                "right",
                "bottomLeft",
                "bottom",
                "bottomRight"
              ],
              "default": "topLeft"
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "focusable": {
              "type": "boolean",
              "default": false
            },
            "draggable": {
              "type": "boolean",
              "default": false
            },
            "dropTarget": {
              "type": "boolean",
              "default": false
            },
            "target": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "label": {
              "type": "string",
              "default": ""
            },
            "color": {
              "type": "string",
              "default": "#ffd54f"
            },
            "size": {
              "type": "number",
              "default": 22
            },
            "distance": {
              "type": "boolean",
              "default": true
            },
            "clamp": {
              "type": "boolean",
              "default": true
            },
            "margin": {
              "type": "number",
              "default": 40
            },
            "hideWithin": {
              "type": "number",
              "default": 0
            },
            "arriveWithin": {
              "type": "number",
              "default": 0
            },
            "from": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Vehicle3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Vehicle3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "wheels": {
              "type": "array",
              "default": []
            },
            "suspensionStiffness": {
              "type": "number",
              "default": 30
            },
            "suspensionCompression": {
              "type": "number",
              "default": 2.3
            },
            "suspensionRelaxation": {
              "type": "number",
              "default": 3.5
            },
            "maxTravel": {
              "type": "number",
              "default": 0.3
            },
            "friction": {
              "type": "number",
              "default": 2.5
            },
            "sideFriction": {
              "type": "number",
              "default": 1
            },
            "maxSteerDeg": {
              "type": "number",
              "default": 32
            },
            "engineForce": {
              "type": "number",
              "default": 1500
            },
            "brakeForce": {
              "type": "number",
              "default": 40
            },
            "moveAction": {
              "type": "string",
              "default": "move"
            },
            "brakeAction": {
              "type": "string",
              "default": "brake"
            },
            "enabled": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "VoxelGrid3D": {
      "type": "object",
      "x-signals": ["blocksChanged"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "VoxelGrid3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "voxels": {
              "type": "array",
              "default": []
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Water3D": {
      "type": "object",
      "x-signals": ["entered", "exited"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Water3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 1
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [40, 40]
            },
            "color": {
              "type": "string",
              "default": "#2a6fbe"
            },
            "opacity": {
              "type": "number",
              "default": 0.8
            },
            "waveHeight": {
              "type": "number",
              "default": 0.04
            },
            "waveSpeed": {
              "type": "number",
              "default": 1
            },
            "drag": {
              "type": "number",
              "default": 1.5
            },
            "quality": {
              "type": "string",
              "enum": ["fancy", "simple"],
              "default": "fancy"
            },
            "colors": {
              "type": "object",
              "default": {}
            },
            "reflection": {
              "type": "boolean",
              "default": true
            },
            "reflectionInterval": {
              "type": "number",
              "default": 1000
            },
            "mirror": {
              "type": "boolean",
              "default": false
            },
            "mirrorInterval": {
              "type": "number",
              "default": 33
            },
            "ssr": {
              "type": "boolean",
              "default": true
            },
            "swellSteepness": {
              "type": "number",
              "default": 0.35
            },
            "foam": {
              "type": "boolean",
              "default": true
            },
            "reflectivity": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "interaction": {
              "type": "boolean",
              "default": true
            },
            "splash": {
              "type": "boolean",
              "default": true
            },
            "sunDirection": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0.5, 0.8, 0.3]
            },
            "sunColor": {
              "type": "string",
              "default": "#fff5d6"
            },
            "sunIntensity": {
              "type": "number",
              "default": 1
            },
            "detailStrength": {
              "type": "number",
              "default": 0.26
            },
            "absorption": {
              "type": "number",
              "default": 0.15
            },
            "refraction": {
              "type": "boolean",
              "default": true
            },
            "underwater": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "object"
                }
              ],
              "default": true
            },
            "swell": {
              "type": "number",
              "default": 0
            },
            "swellDirectionDeg": {
              "type": "number",
              "default": 0
            },
            "swellWavelength": {
              "type": "number",
              "default": 30
            },
            "whitecaps": {
              "type": "number",
              "default": 0
            },
            "bed": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            },
            "wind": {
              "type": "number",
              "default": 0
            },
            "choppiness": {
              "type": "number",
              "default": 0.85
            },
            "preset": {
              "type": "string",
              "enum": ["custom", "ocean", "pool", "lake", "pond"],
              "default": "custom"
            },
            "causticsAbove": {
              "type": "number",
              "default": 0
            },
            "shoreWaves": {
              "type": "number",
              "default": 0
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "WaterCutout3D": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "WaterCutout3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "default"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "size": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [2, 1, 1]
            },
            "enabled": {
              "type": "boolean",
              "default": true
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    },
    "Weather3D": {
      "type": "object",
      "x-signals": ["finished"],
      "properties": {
        "name": {
          "type": "string"
        },
        "uid": {
          "type": "string"
        },
        "type": {
          "const": "Weather3D"
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tags": {
          "type": "object"
        },
        "props": {
          "type": "object",
          "properties": {
            "position": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "rotation": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "static": {
              "type": "boolean",
              "default": false
            },
            "scale": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [1, 1, 1]
            },
            "visible": {
              "type": "boolean",
              "default": true
            },
            "renderOrder": {
              "type": "number",
              "default": 0
            },
            "orderGroup": {
              "type": "string",
              "enum": ["background", "terrain", "default", "characters", "effects", "overlay"],
              "default": "effects"
            },
            "snapToGround": {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "number"
                }
              ],
              "default": null
            },
            "preset": {
              "type": "string",
              "enum": [
                "custom",
                "fire",
                "smoke",
                "sparks",
                "fireworks",
                "explosion",
                "flash",
                "lightning",
                "rain",
                "snow",
                "magic"
              ],
              "default": "custom"
            },
            "emitting": {
              "type": "boolean",
              "default": true
            },
            "worldSpace": {
              "type": "boolean",
              "default": false
            },
            "rate": {
              "type": "number",
              "default": 40
            },
            "burst": {
              "type": "number",
              "default": 0
            },
            "lifetime": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0.6, 1.2]
            },
            "speed": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [40, 120]
            },
            "directionDeg": {
              "type": "number",
              "default": -90
            },
            "spreadDeg": {
              "type": "number",
              "default": 30
            },
            "gravity": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "drag": {
              "type": "number",
              "default": 0
            },
            "sizeStart": {
              "type": "number",
              "default": 8
            },
            "sizeEnd": {
              "type": "number",
              "default": 2
            },
            "colorStart": {
              "type": "string",
              "default": "#ffffff"
            },
            "colorEnd": {
              "type": "string",
              "default": "#ffffff"
            },
            "paletteColors": {
              "type": "array",
              "default": []
            },
            "alphaStart": {
              "type": "number",
              "default": 1
            },
            "alphaEnd": {
              "type": "number",
              "default": 0
            },
            "shimmer": {
              "type": "number",
              "default": 0
            },
            "blend": {
              "type": "string",
              "enum": ["add", "normal"],
              "default": "add"
            },
            "depthTest": {
              "type": "boolean",
              "default": true
            },
            "maxParticles": {
              "type": "number",
              "default": 256
            },
            "emitBox": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "drift": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 3,
              "maxItems": 3,
              "default": [0, 0, 0]
            },
            "kind": {
              "type": "string",
              "enum": ["rain", "snow"],
              "default": "rain"
            },
            "intensity": {
              "type": "number",
              "default": 0.6
            },
            "radius": {
              "type": "number",
              "default": 20
            },
            "height": {
              "type": "number",
              "default": 12
            },
            "wind": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2,
              "default": [0, 0]
            },
            "follow": {
              "type": "string",
              "description": "A node path: '%UniqueName', '/Absolute/From/Root', or relative to this node ('../Skin').",
              "default": ""
            }
          },
          "additionalProperties": false
        },
        "script": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "props": {
              "type": "object"
            }
          },
          "required": ["name"]
        },
        "network": {
          "type": "object",
          "properties": {
            "mode": {
              "enum": ["owner", "observer"]
            },
            "sync": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              }
            },
            "throttleMs": {
              "type": "number"
            }
          },
          "additionalProperties": false
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/node"
          }
        }
      },
      "required": ["name", "type"]
    }
  }
}
