changedOutput schema / properties / recipe / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "properties": {
- "connections": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "from": {
- "description": "Source node name.",
- "type": "string"
- },
- "from_output": {
- "default": 0,
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- },
- "to": {
- "description": "Target node name.",
- "type": "string"
- },
- "to_input": {
- "default": 0,
- "maximum": 9007199254740991,
- "minimum": 0,
- "type": "integer"
- }
- },
- "required": [
- "from",
- "to",
- "from_output",
- "to_input"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "controls": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "bind_to": {
- "description": "Parameters this control should drive, each written as 'nodePath.parName' (e.g. '/project1/sys/blur1.size'). Each target is switched to expression mode so moving the control moves the parameter live. Not supported for 'rgb'/'pulse'.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "default": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "boolean"
- },
- {
- "type": "string"
- }
- ],
- "description": "Initial value."
- },
- "label": {
- "description": "Display label (defaults to `name`).",
- "type": "string"
- },
- "max": {
- "description": "Slider upper bound (float/int) — also hard-clamped.",
- "type": "number"
- },
- "menu_items": {
- "description": "Options for a 'menu' control.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "min": {
- "description": "Slider lower bound (float/int) — also hard-clamped.",
- "type": "number"
- },
- "name": {
- "description": "Control label; also sanitized into a valid TD custom-parameter name (e.g. 'blur amount' → 'Bluramount').",
- "type": "string"
- },
- "type": {
- "default": "float",
- "description": "Widget kind: float/int sliders, a toggle, a dropdown menu, an RGB swatch, a momentary pulse, or a text field.",
- "enum": [
- "float",
- "int",
- "toggle",
- "menu",
- "rgb",
- "pulse",
- "string"
- ],
- "type": "string"
- }
- },
- "required": [
- "name",
- "type"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "description": {
- "default": "",
- "type": "string"
- },
- "difficulty": {
- "default": "intermediate",
- "enum": [
- "beginner",
- "intermediate",
- "advanced"
- ],
- "type": "string"
- },
- "glsl_code": {
- "additionalProperties": {
- "type": "string"
- },
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "glsl_uniforms": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "description": {
- "type": "string"
- },
- "kind": {
- "default": "float",
- "description": "Uniform kind: float (uniform float), vec (uniform vec2/3/4), color (rgba). float/vec use the Vectors page; color uses the Colors page.",
- "enum": [
- "float",
- "vec",
- "color"
- ],
- "type": "string"
- },
- "label": {
- "type": "string"
- },
- "max": {
- "type": "number"
- },
- "min": {
- "type": "number"
- },
- "name": {
- "description": "Uniform name as referenced in the shader, e.g. 'uFeed'.",
- "type": "string"
- },
- "node": {
- "description": "Recipe node name of the GLSL TOP that declares the uniform.",
- "type": "string"
- },
- "value": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "items": {
- "type": "number"
- },
- "type": "array"
- }
- ],
- "description": "Initial value: a number for float, or an array of components for vec/color."
- }
- },
- "required": [
- "node",
- "name",
- "kind"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "id": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "nodes": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "comment": {
- "type": "string"
- },
- "name": {
- "description": "Unique node name within the recipe (used for wiring).",
- "type": "string"
- },
- "parameters": {
- "additionalProperties": {},
- "default": {},
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "parent": {
- "description": "Name of another recipe node (a COMP, e.g. a geometryCOMP) to nest this node inside of. The parent must appear earlier in `nodes`. Used to place SOPs inside a Geometry COMP.",
- "type": "string"
- },
- "render": {
- "description": "For a SOP nested in a geometryCOMP: make this the rendered geometry. Sets the render/display flags on it and clears its siblings, so the COMP renders this instead of its default torus.",
- "type": "boolean"
- },
- "type": {
- "description": "Operator type, e.g. 'noiseTOP'.",
- "type": "string"
- }
- },
- "required": [
- "name",
- "type",
- "parameters"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "parameters": {
- "default": [],
- "items": {
- "additionalProperties": false,
- "properties": {
- "description": {
- "type": "string"
- },
- "label": {
- "type": "string"
- },
- "max": {
- "type": "number"
- },
- "min": {
- "type": "number"
- },
- "name": {
- "description": "Friendly name of the exposed control.",
- "type": "string"
- },
- "node": {
- "description": "Recipe node name the parameter belongs to.",
- "type": "string"
- },
- "param": {
- "description": "TD parameter name on that node.",
- "type": "string"
- },
- "value": {}
- },
- "required": [
- "name",
- "node",
- "param"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "preview_description": {
- "default": "",
- "type": "string"
- },
- "python_code": {
- "additionalProperties": {
- "type": "string"
- },
- "propertyNames": {
- "type": "string"
- },
- "type": "object"
- },
- "tags": {
- "default": [],
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "td_version_min": {
- "default": "2023",
- "type": "string"
- }
- },
- "required": [
- "id",
- "name",
- "description",
- "tags",
- "difficulty",
- "td_version_min",
- "nodes",
- "connections",
- "parameters",
- "glsl_uniforms",
- "controls",
- "preview_description"
- ],
- "type": "object"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "properties": {
+ "connections": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "from": {
+ "description": "Source node name.",
+ "type": "string"
+ },
+ "from_output": {
+ "default": 0,
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "to": {
+ "description": "Target node name.",
+ "type": "string"
+ },
+ "to_input": {
+ "default": 0,
+ "maximum": 9007199254740991,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "from",
+ "to",
+ "from_output",
+ "to_input"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "controls": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "bind_to": {
+ "description": "Parameters this control should drive, each written as 'nodePath.parName' (e.g. '/project1/sys/blur1.size'). Each target is switched to expression mode so moving the control moves the parameter live. Not supported for 'rgb'/'pulse'.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "default": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "string"
+ }
+ ],
+ "description": "Initial value."
+ },
+ "label": {
+ "description": "Display label (defaults to `name`).",
+ "type": "string"
+ },
+ "max": {
+ "description": "Slider upper bound (float/int) — also hard-clamped.",
+ "type": "number"
+ },
+ "menu_items": {
+ "description": "Options for a 'menu' control.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "min": {
+ "description": "Slider lower bound (float/int) — also hard-clamped.",
+ "type": "number"
+ },
+ "name": {
+ "description": "Control label; also sanitized into a valid TD custom-parameter name (e.g. 'blur amount' → 'Bluramount').",
+ "type": "string"
+ },
+ "type": {
+ "default": "float",
+ "description": "Widget kind: float/int sliders, a toggle, a dropdown menu, an RGB swatch, a momentary pulse, or a text field.",
+ "enum": [
+ "float",
+ "int",
+ "toggle",
+ "menu",
+ "rgb",
+ "pulse",
+ "string"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "type"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "description": {
+ "default": "",
+ "type": "string"
+ },
+ "difficulty": {
+ "default": "intermediate",
+ "enum": [
+ "beginner",
+ "intermediate",
+ "advanced"
+ ],
+ "type": "string"
+ },
+ "glsl_code": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "glsl_uniforms": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "kind": {
+ "default": "float",
+ "description": "Uniform kind: float (uniform float), vec (uniform vec2/3/4), color (rgba). float/vec use the Vectors page; color uses the Colors page.",
+ "enum": [
+ "float",
+ "vec",
+ "color"
+ ],
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "max": {
+ "type": "number"
+ },
+ "min": {
+ "type": "number"
+ },
+ "name": {
+ "description": "Uniform name as referenced in the shader, e.g. 'uFeed'.",
+ "type": "string"
+ },
+ "node": {
+ "description": "Recipe node name of the GLSL TOP that declares the uniform.",
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ }
+ ],
+ "description": "Initial value: a number for float, or an array of components for vec/color."
+ }
+ },
+ "required": [
+ "node",
+ "name",
+ "kind"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "nodes": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "comment": {
+ "type": "string"
+ },
+ "name": {
+ "description": "Unique node name within the recipe (used for wiring).",
+ "type": "string"
+ },
+ "parameters": {
+ "additionalProperties": {},
+ "default": {},
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "parent": {
+ "description": "Name of another recipe node (a COMP, e.g. a geometryCOMP) to nest this node inside of. The parent must appear earlier in `nodes`. Used to place SOPs inside a Geometry COMP.",
+ "type": "string"
+ },
+ "render": {
+ "description": "For a SOP nested in a geometryCOMP: make this the rendered geometry. Sets the render/display flags on it and clears its siblings, so the COMP renders this instead of its default torus.",
+ "type": "boolean"
+ },
+ "type": {
+ "description": "Operator type, e.g. 'noiseTOP'.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "type",
+ "parameters"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "parameters": {
+ "default": [],
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "expr": {
+ "description": "Python expression to drive the parameter (sets the param to expression mode). `op('<recipeNodeName>')` references are rewritten to the real created paths at build time. Takes precedence over `value`.",
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "max": {
+ "type": "number"
+ },
+ "min": {
+ "type": "number"
+ },
+ "name": {
+ "description": "Friendly name of the exposed control.",
+ "type": "string"
+ },
+ "node": {
+ "description": "Recipe node name the parameter belongs to.",
+ "type": "string"
+ },
+ "param": {
+ "description": "TD parameter name on that node.",
+ "type": "string"
+ },
+ "value": {}
+ },
+ "required": [
+ "name",
+ "node",
+ "param"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "preview_description": {
+ "default": "",
+ "type": "string"
+ },
+ "python_code": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "tags": {
+ "default": [],
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "td_version_min": {
+ "default": "2023",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "description",
+ "tags",
+ "difficulty",
+ "td_version_min",
+ "nodes",
+ "connections",
+ "parameters",
+ "glsl_uniforms",
+ "controls",
+ "preview_description"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+]