Skip to main content
Glama

Houdini MCP

Connect SideFX Houdini to Claude, Codex, Gemini, Cursor, opencode or pi.

This MCP provides Full Markdown Documentation and Viewport Screenshots support to your agents of choice, enabling strong feedback loops and autonomous workflows.

Install

Windows

powershell -c "irm https://raw.githubusercontent.com/JTCHE/houdini-mcp/main/bootstrap.bat -OutFile bootstrap.bat; .\bootstrap.bat"

macOS / Linux

curl -sSL https://raw.githubusercontent.com/JTCHE/houdini-mcp/main/bootstrap.sh | bash

uv

uv tool install houdini-mcp-server && houdinimcp-install

The installer adds the plugin to Houdini and the server to your AI clients of choice. Restart both.
pi also needs pi install npm:pi-mcp-adapter.

Claude plugin

This repository is also a Claude plugin, for Claude Code and for Cowork on your computer. It needs uv. The plugin starts a headless Houdini without setup. To connect the Houdini that you have open, ask Claude to run the houdini-setup skill.

  • uv run --frozen builds an environment from uv.lock in the plugin folder, then starts the MCP server from this repository.

  • The server talks to Houdini on localhost only. It starts hython, or houdini on request, from your Houdini install, and ffmpeg to encode a flipbook movie.

  • docs reads the documentation out of your Houdini install with houdinimd-docs. It sends nothing over the network.

  • houdini-setup writes the HoudiniMCP package into your Houdini preferences folder, after you approve it.

  • No tool sends data to a remote service. execute runs any Python that Claude writes in your Houdini session.

Related MCP server: HoudiniMCP

Tools

Read

scene_overview node_inspect geometry_inspect stage_inspect select console

Edit

node_edit parm_set connect hda batch

Run

cook render pdg playbar scene_file

See

capture: the viewport, a camera, four views or a flipbook

Code

execute: Python, HScript, expressions, VEX check

Docs

docs: the Houdini documentation of your build, offline, from houdinimd-docs

Session

session: status; starts Houdini headless or with its window

No Houdini open? The server starts a headless hython.

batch builds a whole network in one call, and it is all or nothing: a failed step undoes the steps before it. A build that works comes back with the cooked point and primitive counts, and the nodes with errors.

Warning: execute runs any Python in Houdini. Save your work.

Problem

Fix

No Houdini listens for the bridge

Start Houdini, or click Toggle MCP Server on the HoudiniMCP shelf.

No HoudiniMCP shelf

Restart Houdini. houdinimcp-install --list shows where the plugin went.

Houdini started from Git Bash has no plugin

Git Bash sets HOME. Set the user variable HOUDINI_USER_PREF_DIR to %USERPROFILE%\Documents\houdini__HVER__.

capture says there is no viewport

The session is headless. Call session with action="start_gui".

You must have a fixed port

Set HOUDINIMCP_PORT for Houdini and for the bridge. Without it, the plugin takes a free port from the operating system and tells the bridge which one.

Without a terminal, the installer asks nothing and takes the defaults.

houdinimcp-install --list          # Houdini installs and clients found, as JSON
houdinimcp-install --yes --json    # newest Houdini, every client found; JSON report
houdinimcp-install --houdini-version 22.0 --harness claude-code --yes
houdinimcp-install --dry-run --yes # change nothing
houdinimcp-install --uninstall     # remove the plugin and every client entry

Flags: --houdini-version none skips the plugin, --prefs-dir PATH names the prefs folder, --harness none|all|KEY (repeatable), --quiet-start stops the first-launch dialogs. The bootstrap scripts pass every flag through.

Manual client setup: run houdinimcp-bridge with no arguments. claude mcp add --transport stdio houdini -- houdinimcp-bridge for Claude Code.

From a clone: uv run python -m bridge.onboarding.install.

Layout: src/houdinimcp/ is the plugin, a TCP server inside Houdini on localhost:9877. src/bridge/ is the MCP server and the installer. Messages are JSON with a 4-byte length prefix. HOUDINIMCP_NO_HEADLESS=1 stops the headless start. Read AGENTS.md before you change code.

Credits

Built on blender-mcp, capoomgit/houdini-mcp, eetumartola/houdini-mcp, Houdini21MCP and fxhoudinimcp. MIT licensed.

Not affiliated with SideFX. Houdini and SideFX are trademarks of SideFX Software Inc.

Available Tools

20 tools
batchA
Destructive

Run several Houdini tools in one call.

Use it to build a network: many nodes, their wires and their parameters go
in one round trip and one undo group, and a person can undo the whole thing
with one keystroke.

Do not use it when a later step needs to read what an earlier step made.
The list runs without you in the middle, so nothing can branch on a result.
A path is the exception: give a step an `id`, and a later step writes
"$<id>" where it needs the path of the node that step made. So a network of
default node names (box1, attribwrangle3) needs no guess of the name.

A failed batch changes nothing. Every step is checked before any step
runs, and a step with a wrong argument stops the batch. A step that fails
as it runs stops the list, and the steps before it are undone. A step whose
item failed is a failed step, and so is a parameter write that did not
apply. The error names the index of the step and its error.

Returns JSON with one result for each operation, in the order of the
operations, and the picture of every capture step.

A batch that works cooks the display node of each SOP network that it
touched: `check` gives its point and primitive counts, and the touched
nodes that have errors. Read it before you build on the result.

A capture step with no `output` writes to a file of its own, so one batch
can hold several captures.
NameRequiredDescriptionDefault
operationsYesThe steps, in order. Each is {"tool": "<tool name>", "params": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch. Add "id": "name" to a step, and a later step can write "$name" (or "$name/child") for the node path that step returned.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, so the agent already knows this mutates state; the description adds substantial context on top: atomicity ("A failed batch changes nothing", full pre-validation), rollback semantics (prior steps undone when a later step fails), one-undo-group behavior, and cooking of display nodes. It also notes that a capture step with no output writes its own file, which is a real side effect an agent must anticipate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the key exclusion are front-loaded, and every paragraph carries different information (undo grouping, no mid-list branching, atomicity, return shape, cooking). Some sentences are wordier than necessary ("...and a person can undo the whole thing with one keystroke"), and the paragraph on failure modes is dense loop-prone prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return contract itself: one result per operation in order, plus the picture of every capture step, plus the cooked display node's point/primitive counts and touched nodes with errors, and advice to read that before building on the result. Failure reporting (error names the step index and its error) and the multi-capture case are also covered, which is complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema coverage the schema already documents the shape, but the description adds real semantics: ordering, the rule that any server tool except batch is allowed, and how id/"$id" (or "$id/child") lets a later step consume an earlier step's node path instead of guessing names. It doesn't add argument-level detail for the individual sub-tools, which is appropriately left to them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Run several Houdini tools in one call" names a specific verb and resource, and the description immediately frames the scope (many nodes, wires and parameters in one round trip and one undo group). It is unmistakably distinct from the single-purpose siblings like node_edit, cook or parm_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a positive use case (build a network), an explicit exclusion ("Do not use it when a later step needs to read what an earlier step made"), and the reason (the list runs without the agent in the middle, so nothing can branch on a result). It also spells out the one exception, the id/"$<id>" path substitution, so the agent can decide between batching and sequential calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

captureA
Idempotent

Make a picture of the scene, or of the network editor, and look at it.

Modes: viewport, quad, camera, flipbook, sheet, movie, network.

Use it to confirm your own work: numbers in a node do not tell you that the
result looks wrong. Use it before you report that a task is done.

Do not use it for a final picture: render does that through a ROP.

The view goes back to where the user left it when the picture is written.
Nothing here changes the scene for good.

mode:
    "viewport" — the viewport as it is now.
    "quad"     — four pictures: top, front, right and perspective.
    "camera"   — through the camera node at `camera`.
    "flipbook" — a sequence over `frame_range` [start, end]. Returns the
                 path of the files, not a picture.
    "sheet"    — `node` at many frames on one picture, a tile for each
                 frame with its number, all from one camera that does not
                 move. Frames: `frames`, or `count` frames from `start`
                 (the current frame) at `step` (1). A step over 2 hides
                 movement and gives a warning: look at a short range at
                 step 1. `reference` is a picture to put first, to
                 compare. `columns`, `tile_width` set the grid. The
                 frames cook in order, forward, and the result gives
                 the cook seconds of each one.
                 `azimuths` (a list of angles) draws each frame from
                 each angle: one frame and 8 angles is a turntable.
                 `bounds` [xmin, ymin, zmin, xmax, ymax, zmax] is the
                 box to frame, for example the hands only.
    "movie"    — `node` over `frames` or `frame_range` (the playbar
                 range) as an MP4 at `fps`, `resolution` [width] wide.
                 Returns the path; open it in a player.
    "network"  — a drawing of the network `node` from the scene data:
                 node colors, flags, names, comments, path text, dots,
                 network boxes, sticky notes, and the wires in the wire
                 style of the network (straight or rounded, Shift+S).
                 `paths` are the items to frame (default all). It does
                 not touch the screen and works without a window.
    sheet and movie draw with an OpenGL ROP, with or without a window,
    over a flat grey `background`. To see where a point attribute lives, use
    "sheet" with one frame and `color_by`, with `contour`, `slab` or
    `vectors`.

A Houdini with no window has no viewport, and there an OpenGL ROP draws the
same picture from the same arguments over a grey background. It runs in a
new hython, so the scene gets no camera and no ROP.

Aim the view with `frame` and `fill`, with `target`, `look_from` and
`radius`, with `direction`, with `azimuth` and `elevation`, or with
`camera`.

Returns the picture, plus JSON with the state of the window: the frame, the
open file, the selection, the network in front, and which nodes carry the
display, the render and the template flag. A picture that does not change
after an edit is almost always a display flag on another node.

Houdini without a GUI has no viewport: then the result says so and names
the next action.
NameRequiredDescriptionDefault
fpsNomovie: frames per second.
fillNoHow much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it.
modeNoOne of "viewport", "quad", "camera", "flipbook", "sheet", "movie", "network".viewport
nodeNoThe node to look at. It gets the display flag for the picture, and the flag goes back after. The viewer shows its network, and goes back after. Without `frame`, the view also frames it.
slabNo[axis, thickness], for example ["z", 0.1]: draw only the points in a thin cut through the middle, so the inside of a solid cloud shows.
stepNosheet: the frames between tiles. Over 2 hides movement and gives a warning.
countNosheet: how many tiles, when frames is not given.
frameNoWhat to frame the view on: "selection", "all", or a node path (the box of what that node cooked).
pathsNonetwork: the items to frame in the network editor.
startNosheet: the first frame. Without it, the current frame.
boundsNosheet: [xmin, ymin, zmin, xmax, ymax, zmax], the box to frame.
cameraNocamera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim.
framesNoOne frame, a list, or {"start": 1, "end": 10, "step": 2}: one picture for each. sheet: the frames of the tiles. The playbar goes back after. A picture that holds only the background is an error.
outputNoThe file to write. Without it, a temporary file.
radiusNoThe distance between target and look_from.
settleNoSeconds that a renderer such as Karma draws before each picture. Karma starts from noise: 20 to 30 gives a clean frame. With frames or in flipbook mode it renders a sequence through the viewport, with no husk and no render license.
targetNo[x, y, z]: the point that the view turns around.
azimuthNoDegrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene.
columnsNosheet: tiles in each row.
contourNosheet: a step. Colour by the fraction of the value over the step, so the lines of equal value show, for example the shells of a distance field.
shadingNoOne of "smooth", "smooth_wire", "flat", "wireframe".
vectorsNosheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error.
azimuthsNosheet: a list of angles; each frame is drawn from each angle.
color_byNosheet and movie: colour the points by this attribute, blue at the low end of color_range and red at the high end. A vector uses its length.
rendererNoThe Hydra renderer of a viewer on a LOP network, for example "Karma CPU". An unknown name lists the ones available.
directionNoThe view axis: "top", "front", "left", "right", "back", "bottom" or "persp".
elevationNoDegrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view.
look_fromNo[x, y, z]: the point that the view looks from.
referenceNosheet: a picture file to put in the first tile, to compare.
backgroundNosheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey.
resolutionNo[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched.
tile_widthNosheet: the width of each tile in pixels.
color_rangeNo[low, high] for color_by. Without it, [0, 1].
frame_rangeNoflipbook and movie: [start, end].

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the view is restored, that nothing changes the scene permanently, that flipbook returns a path rather than a picture, that sheet/movie use an OpenGL ROP working without a window, that headless capture runs in a new hython, and that the return includes JSON window state. This is far richer than the readOnly/idempotent hints alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then exclusion, then a mode list, so the agent can stop reading early. It is long, and some details (grey background, no-window behavior) are restated in more than one place, but for a 34-parameter tool the length is largely earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 34 optional parameters and no output schema, the description carries the burden well: it explains what is returned (picture plus JSON window state), the headless fallback behavior, and how a picture's staleness points to a display flag issue. An agent can call this correctly without further documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic guidance the schema lacks: flipbook returns a file path, sheet with step > 2 hides motion and warns, azimuths produces a turntable, bounds can isolate just the hands, and how to aim the view via several parameter combinations. This is genuine value beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Make a picture of the scene, or of the network editor') and enumerates all seven modes, so an agent knows exactly what it produces. It also explicitly contrasts itself with the sibling 'render' tool, removing ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger ('confirm your own work... before you report that a task is done') and an explicit exclusion with the named alternative ('Do not use it for a final picture: render does that through a ROP'). No inference is left to the caller.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connectA
Idempotent

Change how nodes feed each other.

Modes: connect, disconnect, reorder.

Use it after node_edit made the nodes. A list of wires goes in one undo
group and one round trip.

Do not use it to wire a node that you make now: node_edit mode "create"
takes `input_path` and wires it in the same call. Do not use it to read the
wires: scene_overview mode "network" lists them.

mode:
    "connect"    — src_path feeds dst_path. dst_input_index chooses the
                   input, src_output_index the output. Both count from 0.
                   A wire into an input that has one replaces it.
                   Either end can be a network dot.
    "disconnect" — path loses the wire on input_index.
    "reorder"    — path takes its inputs in the order input_indices.

For several wires, give `items`: for "connect", each item has src_path and
dst_path, and can have dst_input_index and src_output_index; for
"disconnect", each item has path, and can have input_index.

Returns JSON, one line for each wire, with the paths that Houdini used.
An input index that the node does not have is reported, not dropped.
NameRequiredDescriptionDefault
modeNoOne of "connect", "disconnect", "reorder".connect
pathNodisconnect and reorder: the node whose inputs change.
itemsNoA list of wires for "connect" or "disconnect", each a dictionary with the keys of one wire, for example {"src_path": "/obj/geo1/grid1", "dst_path": "/obj/geo1/mountain1"}. An argument outside items is the default for each one.
dst_pathNoconnect: the node or network dot whose input takes the wire.
src_pathNoconnect: the node or network dot whose output feeds the wire.
input_indexNodisconnect: the input that loses its wire, from 0.
input_indicesNoreorder: the old input indices in their new order, for example [1, 0].
dst_input_indexNoconnect: the input of dst_path, from 0.
src_output_indexNoconnect: the output of src_path, from 0.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses that a wire into an occupied input replaces the existing one, that a list of wires lands in one undo group and one round trip, and that invalid input indices are reported rather than silently dropped. These are operationally important facts an agent would otherwise have to guess or test.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then alternatives, then a mode-by-mode breakdown – each block is short and every sentence carries information (replacement semantics, undo grouping, return shape). No filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, zero-required, mode-driven mutation tool with an output schema, the description covers purpose, mode semantics, item/default behavior, alternatives, and a brief return outline. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameter meaning is already documented; the description nonetheless adds mode-to-parameter mapping that the schema only signals via name prefixes, and restates that both indices count from 0 and either end may be a network dot. Much of this is reinforced rather than new, but the per-mode grouping genuinely helps select the right fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Change how nodes feed each other') and immediately enumerates the three modes (connect, disconnect, reorder). An agent can distinguish this from node_edit and scene_overview without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it after node_edit has created the nodes, then names two alternatives with the conditions that select them: node_edit mode "create" with input_path for wiring a node being made now, and scene_overview mode "network" for reading wires. When-to-use and when-not-to-use are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

consoleA
Read-only

Read the Houdini log and the node errors.

Use it when something did not do what you expected. A cook error often
hides behind an empty result: the geometry has no points, and the reason is
here.

Do not use it for the errors of nodes that you cook now: cook returns them,
with the nodes upstream that failed. scene_overview mode "errors" lists every
node with a cook error, without the log.

Each call takes the log entries away, so a call returns only what is new
since the call before it.

Returns JSON.
NameRequiredDescriptionDefault
limitNoHow many log entries come back, the newest ones.
sourceNoKeep the entries whose source holds this text, for example "Python".
severityNoKeep one level only: "message", "important", "warning", "error" or "fatal".
root_pathNoThe network that node_errors walks, for example /obj or /stage./obj
node_limitNoHow many nodes with an error or a warning come back. Errors come first, and the report says how many it left out.
node_errorsNoAlso report the nodes under root_path that hold an error or a warning. False gives the log alone.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It discloses the crucial destructive trait absent from annotations: 'Each call takes the log entries away, so a call returns only what is new since the call before it.' This is a consumption side effect that matters operationally and is consistent with idempotentHint=false. The readOnlyHint=true annotation sits alongside, and the description clarifies the non-persistent read nature rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then exclusions, then behavior. Every sentence earns its place except the trailing 'Returns JSON.', which is redundant given an output schema exists. Efficient overall with only that minor waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return structure. It fully covers purpose, routing to siblings, and the log-consumption behavior, so an agent has everything required to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (limit, source, severity, root_path, node_limit, node_errors) is already fully documented in the schema. The description adds the relationship hint that root_path is 'the network that node_errors walks' but otherwise introduces no parameter detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb (Read) and two concrete resources (the Houdini log and node errors). It is immediately distinguishable from cook (which returns live cook errors) and scene_overview (which lists erroring nodes), both named later in the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use it ('when something did not do what you expected', with the empty-geometry cook-error example), when NOT to use it ('Do not use it for the errors of nodes that you cook now'), and names the two alternatives (cook, scene_overview mode "errors") with the condition selecting each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cookA
Destructive

Force work to happen, and report what the work said and what it cost.

Modes: cook, cache_write, cache_clear, sim_step, sim_reset, recook.

Use it to run a test: write a few parameters, cook a range of frames, and
read the seconds for each frame. That is one call, and it is the loop that
every look iteration needs.

Do not use it to read the result: geometry_inspect does that, and it cooks
the node as well.

mode:
    "cook"        — cook the nodes and return the errors, the warnings and
                    the time. `frames` or `frame_range` cooks over more
                    than one frame; the playbar goes back to where it was.
    "cache_write" — write the file cache of the node. frame_range is
                    [start, end]; without it the node writes its own range.
    "cache_clear" — remove the cached files of the node.
    "sim_step"    — step a DOP network num_steps frames.
    "sim_reset"   — clear the cache of a simulation, so that the next cook
                    runs it again. It accepts a DOP network and a solver
                    SOP such as a Pyro, FLIP, Vellum or RBD solver. After
                    you change anything inside a solver, reset it: the node
                    gives its old result back with no error and no warning.
                    On a solver SOP it cooks the sources first, cooks the
                    start frame after the reset, and reports the
                    primitives there. It fails when the result is empty
                    while the sources are not: that simulation stays
                    empty on every frame.
    "recook"      — cook again each node at or under `paths` that holds
                    an error or a warning, the deepest first, and say
                    which messages were stale (gone) and which are
                    current. Use it when an error names a cause that the
                    network does not have, such as "Infinite recursion"
                    with no cycle.

Cook frames here, not in an execute loop of hou.setFrame and geometry():
the viewport cooks the same nodes during the loop, and that can leave
false errors on the nodes inside a solver.

Returns JSON: the seconds in total, for each frame, and the slowest frame,
with the errors and the warnings of every node. Each frame also gives the
point count, the primitive count and the bounds of each SOP: one call
checks that a result moves or grows over a range. `ok` is false when a
node failed to cook, and `failed` then names each node upstream of it or
inside it that holds an error, with the text: the node that broke is
often another node than the one you cooked. A cook, a cache or a
simulation can take hours, and the call waits for it: a client that reads
MCP tasks gets a task at once and polls it. Houdini answers no other call
until the cook ends; session action='interrupt' stops it.
NameRequiredDescriptionDefault
modeNoOne of "cook", "cache_write", "cache_clear", "sim_step", "sim_reset", "recook". The description says what each one does.cook
forceNoCook even when Houdini thinks the node is up to date.
pathsYesThe node to cook, or a list of nodes.
framesNoOne frame, a list of frames, or {"start": 1001, "end": 1010, "step": 2}. For cook. The playbar goes back after.
num_stepsNoHow many frames sim_step steps the DOP network.
parametersNoValues to write before the cook, as {"/obj/geo1/pyro": {"divsize": 0.05}}. The result says which writes changed nothing.
frame_rangeNo[start, end]: every frame between. For cook and cache_write.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, and the description is consistent with them: cache_clear removes cached files, sim_reset discards simulation state. It also adds genuinely valuable behavior that annotations cannot express: cooks can take hours, the call blocks, Houdini answers no other call until the cook ends, MCP task clients get a task immediately, and session action='interrupt' stops it. That blocking/interrupt information is non-obvious operational behavior beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with modes, then usage, then returns; each mode entry is a tight line. It runs long, and the 'Returns JSON' paragraph partly duplicates the output schema that already exists, which is the only real waste. The opening metaphor costs a sentence before the concrete content arrives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, six-mode, destructive and potentially hours-long blocking tool, the description covers everything an agent needs: mode semantics, the stale-error/recook case, sim_reset's silent-stale-result trap, failure reporting through 'failed', and how to interrupt. Output shape is covered by the output schema, so the description need not carry it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description earns a step above by explaining what each mode value actually does (schema only lists the strings), what frames/frame_range do across modes and that the playbar is restored, and that parameter writes report which ones changed nothing. It adds real semantics rather than restating field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence is stylized, but the mode list immediately pins down concrete verbs and resources: cook nodes, write/clear file caches, step/reset DOP simulations, recook errored nodes. It explicitly contrasts itself with geometry_inspect ('Do not use it to read the result'), so an agent can separate it from siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit positive recipe ('write a few parameters, cook a range of frames, and read the seconds'), an explicit exclusion with the named alternative (geometry_inspect for reading results), and an explicit anti-pattern ('Cook frames here, not in an execute loop of hou.setFrame and geometry()') with the reason. When-not guidance is as strong as when guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

docsA
Read-onlyIdempotent

Read the official Houdini documentation.

This is the authority on every node, parameter, VEX function and HOM call.
Read the page before you use an API that you have not confirmed in this
session: names and enum members change between Houdini releases, and a
wrong one often fails without a message.

Do not answer from memory, and do not read sidefx.com yourself.

The pages come from the Houdini install on this machine, so they match the
build exactly. The first search on a build indexes it once, which takes a
few seconds; the index stays on disk. A page read never waits for it.

Give exactly one of `query` (search), `page` (read a page from a hit) or
`node` (the page of a node type). A node path is the only input that needs
Houdini.

Returns markdown for a page, JSON for a search.
NameRequiredDescriptionDefault
nodeNoA node path in the scene, for example "/obj/geo1/attribwrangle1", or a node type name, for example "mountain". Returns the page of that node type.
pageNoA page path from a hit, for example "nodes/sop/copytopoints". A loose name or a sidefx.com address also works.
partNoA long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones.
buildNoThe Houdini build to read, for example "21.0.829". Default: the build of the attached session, then $HFS, then the newest build on this machine.
limitNoquery: how many hits come back.
queryNoWords to search, for example "copy to points". Returns the hits with their page paths.
sectionNoRead only the part of a page under one heading, for example "Quick renders and flipbooks". A long page lists its headings.
categoryNoquery: keep the search inside one folder, for example "nodes/sop", "vex/functions" or "hom/hou". node with a type name: the context, for example "sop" or "lop".

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safe-read profile (readOnly/idempotent/not open-world). The description adds real behavior: pages come from the local install so they match the build, the first search indexes a build in a few seconds and persists to disk, and page reads never wait on the index. It also discloses return formats (markdown for a page, JSON for a search).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then usage rules, then operational behavior, then the parameter contract. Short paragraphs, no filler; each sentence carries a distinct instruction or disclosure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need only light mention, and the description still summarizes them. Combined with the mode contract, build defaulting behavior (session build, then $HFS, then newest), and the indexing caveat, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds meaning beyond the schema by stating the mutually exclusive mode contract ('give exactly one of query, page, or node') which the schema does not express as a oneOf, and by noting that 'node' is the only input needing a live Houdini session. It does not add detail for part/build/section/limit/category.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read the official Houdini documentation') and immediately scopes it ('the authority on every node, parameter, VEX function and HOM call'). This clearly separates it from all siblings, which manipulate or inspect the live scene rather than read reference docs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('read the page before you use an API that you have not confirmed in this session'), why it matters (names and enum members change between releases and wrong ones fail silently), and explicit exclusions ('do not answer from memory, do not read sidefx.com yourself'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

executeA
Destructive

Run code in Houdini, with the full hou module and no guard.

Modes: python, hscript, expression, vex_check, env, job.

Use it for what no other tool covers, and to confirm an API in the live
session, for example `print(dir(hou.Node))`. The code runs with the rights
of the Houdini process: it can write files, delete nodes and quit Houdini.

Do not use it to build a network: one batch of node_edit create, connect
and parm_set is also one round trip, and each step reports its errors.
`hou.Node.inputs()` skips network dots and gives the node behind them; use
`inputConnections()` and `inputItem()` for the real wiring before you
rewire or delete.

Prefer a named tool when one exists. A write in code to a parameter that
holds an expression, that is disabled or hidden, or whose range clamps the
value changes nothing, and a write to a channel reference changes another
node. The answer lists each such write in `write_warnings`; read it. If you
write the same script twice, the named tool for it is missing: say so in
the feedback at the end of the session.

mode:
    "python"     — run `source` as Python. Returns stdout and stderr, and
                   keeps them when the script raises. Print what you want
                   to see: the value of the last line does not come back.
    "hscript"    — run `source` as an HScript command.
    "expression" — evaluate `source` as an expression. `language` is
                   "hscript" or "python".
    "vex_check"  — compile `source` as VEX and report the errors. Nothing
                   runs.
    "env"        — read the Houdini variable `name`, for example "HIP".
    "job"        — the state of the background job `job`: running, with
                   what it printed so far, or done, with its result.
                   `wait` waits for the end, up to that many seconds.

Use `file` for a script that you run again with other values. Houdini
answers nothing while a script runs: for long work, such as a sweep, use
`background` with a large `timeout`. session action='interrupt' stops it.
NameRequiredDescriptionDefault
jobNojob: the job id that background returned.
argsNofile: the values of sys.argv[1:].
fileNoA Python file to run instead of source, as from a shell: __file__ is its path, __name__ is "__main__", args are in sys.argv[1:]. The text travels once.
modeNoOne of "python", "hscript", "expression", "vex_check", "env", "job".python
nameNoenv: the Houdini variable to read, for example "HIP".
waitNojob: the most seconds to wait for the job to end. The answer comes when it ends or when the wait is over, with what it printed so far.
sourceNoThe code: Python, HScript, an expression or VEX, as mode says.
globalsNoNames that exist before the script runs, for example {"radius": 2.0}.
timeoutNoThe seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays.
languageNoexpression: "hscript" or "python".hscript
backgroundNopython: return at once with a job id and let the script run. Read it with mode job. Until it ends, other calls are refused.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that code runs with Houdini process rights, can write files, delete nodes, and quit Houdini. It also explains silent write failures and `write_warnings`, blocking behavior during execution, timeout side effects, and that background jobs refuse other calls until they end.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and organized by purpose, alternatives, warnings, and mode list. It is appropriately sized for a destructive multi-mode execution tool, though some sentences duplicate schema detail and the end-of-session feedback advice is slightly tangential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, destructive annotations, 11 parameters, and output schema, the description covers the critical gaps: modes, side effects, silent parameter-write behavior, blocking behavior, timeout semantics, and when to use alternatives. An agent has enough context to call it safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents parameters thoroughly, but the description adds useful mode-specific meaning: what each mode does, that Python does not return the last line's value, how `file` and `args` relate to `sys.argv`, and the semantics of `background`, `wait`, and `timeout`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Run code in Houdini, with the full `hou` module and no guard.' It enumerates all supported modes and distinguishes itself from siblings by saying it is for what no other tool covers and explicitly warning against rebuilding networks that `node_edit` handles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Use it for what no other tool covers', 'confirm an API in the live session') and when-not-to-use guidance ('Do not use it to build a network...', 'Prefer a named tool when one exists'). It also routes long-running work to `background` and interruption to `session action='interrupt'`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geometry_inspectA
Idempotent

Read the geometry that a node produces. This cooks the node.

Modes: summary, points, prims, attrib, groups, group_members, bbox, intrinsics, nearest, skeleton, compare, try, volume_stats, volume_voxels, volume_sample, volume_compare, image, volume, export, fingerprint, stretch, inside, crossings, distance, changes.

Use it to confirm that a node made what you expected: the point count, an
attribute that a wrangle wrote, the shape of a volume, the size of the
bounding box.

Do not use it to read parameters: node_inspect does that.

mode:
    "summary"        — counts, attributes, groups, volumes, bounds. Start
                       here. An empty result carries the errors and the
                       warnings of the node, which is where the reason is.
    "points"         — `count` points from `start`, with `attribs`.
    "prims"          — `count` primitives from `start`.
    "attrib"         — the values of `attrib_name` on `attrib_class`
                       ("point", "prim", "vertex", "detail"): min, max
                       and mean of each component over every element,
                       and `limit` (10) values from `start`. A vector
                       attribute keeps its shape. unique=True returns each
                       value that occurs and how many elements carry it,
                       which is how you find the pieces in a geometry.
    "groups"         — the groups of `group_type`.
    "group_members"  — the members of `group_name`.
    "bbox"           — the bounding box.
    "intrinsics"     — the intrinsic values of primitive `prim_index`.
    "nearest"        — the point nearest to `position`, for example [0,1,0].
    "skeleton"       — a KineFX skeleton: each joint with its name, its
                       parent and its transform. `pattern` keeps the names
                       that match ("|" between alternatives, * as a
                       wildcard). A KineFX import holds the skeletons on
                       output 1 and 2: give `output`.
    "compare"        — the difference from the node at `against`. Points are
                       matched by `match_attrib` ("name" by default), not by
                       their order. Use it to prove that a new node gives
                       the result of the node it replaces.
    "try"            — run `steps`, a list of
                       {"node_type": ..., "parameters": {...}}, on the
                       geometry of `path` as verbs. Nothing changes in the
                       scene. Use it to learn what a node would make. A
                       menu takes its token ("poly") or its index. A type
                       with no verb, such as an asset, runs as a temporary
                       node in a hidden network that is then deleted.
                       `attrib_name` reads that attribute on the result,
                       as mode "attrib" does, `unique` included.
    "volume_stats"   — every volume or VDB: resolution, voxel size, the
                       extremes, the mean, the sum, percentiles. `name`
                       reads one, `bins` adds a histogram, `threshold`
                       counts the voxels below and above it and gives the
                       world box of the voxels above it.
    "volume_voxels"  — one field as an array indexed [z][y][x], with its
                       shape and its transform. `name` is the field.
                       `reduce` gives one answer instead: "sum", "mean",
                       "max", "min", or "project_x", "project_y",
                       "project_z" (the sum along that axis, a 2D array).
                       An array past `limit` numbers is thinned.
    "volume_sample"  — read `names` (fields) at `positions`, or at the
                       points of `from_node`, with no node added to the
                       scene. Returns min, max, mean, percentiles, a
                       histogram of `bins` (10), the counts on each side of
                       `threshold`, and the values when there are at most
                       `limit` (1000).
    "volume_compare" — how much of the field `name` sits in each band of the
                       field `against`. The answer to "how much smoke is
                       inside the collider". `from_node` holds `against`
                       when another node does, such as the collider SDF.
    "image"          — a COP node: resolution, planes, and `plane_name`.
    "volume"         — the VDB grids in a COP node.
    "export"         — write the geometry to disk. `format` is "obj",
                       "bgeo" or another that Houdini writes, and `file`
                       is the file path. A file that is there is
                       overwritten. The other modes write nothing.
    "fingerprint"    — for each node of `path` and each frame: counts,
                       bounds, a hash of P and of the attribute names.
                       `name` saves it. After a refactor, call it again
                       with `against` (the saved name) and `renamed`, and
                       read `compare`: what differs, or same=true.
    "stretch"        — how much each edge grew against the same edge of
                       the rest mesh `against`: max, percentiles, the
                       count over `threshold`, the worst edges and the
                       places where they are, on the rest mesh.
    "inside"         — the points of `path` inside the closed mesh
                       `against`: the count, the depth, where they are.
                       Run it before a cloth sim.
    "crossings"      — the points where the surfaces of `path` cross,
                       themselves or `against`, counted for each pair of
                       parts of `split_by`. A part with itself is a self
                       crossing.
    "distance"       — the distance from each point to the surface of
                       `against`: min, max, mean, a histogram of `bins`,
                       and the point numbers farther than `threshold`.
                       With `frames`, one answer for each frame.
    "changes"        — cook over `frames` (two or more, step 1 to see
                       pops) and return a table: counts, box size and
                       center, and the mean, min and max of `attribs`
                       for each frame. `jumps` lists the frames where a
                       number changes by more than `threshold` (0.2)
                       from the frame before: pops, flicker and hard
                       stops that one frame does not show.

Returns JSON. A large read is slow: keep `count` small and page with
`start`.
NameRequiredDescriptionDefault
binsNovolume_stats, volume_sample, volume_compare: a count of equal bands, or a list of band edges, for example [-1, 0, 0.05, 0.15, 0.25].
fileNoexport: the file path to write.
modeNoOne of "summary", "points", "prims", "attrib", "groups", "group_members", "bbox", "intrinsics", "nearest", "skeleton", "compare", "try", "volume_stats", "volume_voxels", "volume_sample", "volume_compare", "image", "volume", "export", "fingerprint", "stretch", "inside", "crossings", "distance", "changes".summary
nameNovolume_stats: one volume to read. volume_voxels, volume_compare: the field. fingerprint: save the result under this name.
pathYesThe SOP or COP node to read, or a list. A list keeps going after a node that fails, and each result names its path.
countNopoints, prims: how many elements. Keep it small: a large read is slow.
limitNoattrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000). stretch: how many of the worst edges (10).
namesNovolume_sample: the fields to read.
startNopoints, prims, attrib: the first element. Page with it.
stepsNotry: a list of {"node_type": ..., "parameters": {...}} to run on the geometry. A menu takes its token or its index. Nothing changes in the scene.
formatNoexport: the file type, for example "obj" or "bgeo".obj
framesNoRead at other frames, without moving the playbar: one frame, a list, or {"start": 1001, "end": 1010, "step": 2}. One answer for each frame.
outputNoThe output of the node to read, 0 by default. A KineFX import has the mesh on 0, the rest skeleton on 1, the animated skeleton on 2.
reduceNovolume_voxels: one answer instead of the array: "sum", "mean", "max", "min", "project_x", "project_y" or "project_z".
uniqueNoattrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry.
againstNocompare: the node to compare with. distance: the node to measure to. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body.
attribsNopoints: the attributes to return, for example ["P", "Cd"]. changes: the attributes whose mean, min and max to follow.
patternNoskeleton: keep the joints whose name matches.
renamedNofingerprint: {"old path": "new path"} for the nodes that a refactor renamed or moved.
positionNonearest: [x, y, z].
split_byNocrossings: a prim attribute, such as "name", whose values are the parts that the count pairs.
from_nodeNovolume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF.
positionsNovolume_sample: the [x, y, z] points to read at.
thresholdNovolume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance. distance: list the points farther than it. changes: the ratio of change from one frame to the next that counts as a jump (0.2).
group_nameNogroup_members: the group to read.
group_typeNogroups, group_members: "point", "prim", "vertex" or "edge".point
plane_nameNoimage: the COP plane to read, for example "C".C
prim_indexNointrinsics: the primitive to read.
attrib_nameNoattrib, try: the attribute to read. try reads it on the result.
attrib_classNoattrib, try: "point", "prim", "vertex" or "detail".point
match_attribNocompare: the attribute that pairs the points of the two nodes, not their order.name

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations by disclosing that the tool cooks the node, that "try" runs verbs or temporary hidden nodes with no scene change, and that only "export" writes and silently overwrites an existing file while all other modes write nothing. Read-only-looking usage is thus clearly scoped. Minor deduction: the overwrite behavior sits in tension with destructiveHint=false and is buried in one mode's paragraph rather than flagged near the top.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded: purpose and the sibling exclusion come first, then a mode catalogue with per-mode paragraphs. The full 25-mode list is repeated verbatim from the schema's mode enum, which is redundant weight, but the structure is otherwise disciplined and each mode paragraph earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 25-mode, 31-parameter tool, the description covers every mode's intent, key parameter, notable defaults, and the paging/performance caveat ("keep count small and page with start"). An output schema exists, so return shapes need not be explained, and the remaining complexity is handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter guidance: which parameters each mode consumes (bins for the volume modes, limit for attrib/voxels/stretch, threshold with different defaults per mode), the "token or index" rule for menu values in steps, and wildcard syntax for pattern. Most of this duplicates the schema text, which keeps it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Read the geometry that a node produces. This cooks the node." names a specific verb and resource, and immediately states the side effect. It explicitly contrasts itself with node_inspect (parameters vs geometry), so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use it ("confirm that a node made what you expected: the point count, an attribute a wrangle wrote, the shape of a volume") and when not to ("Do not use it to read parameters: node_inspect does that"). It also names a default entry point, "summary" — "Start here."

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hdaA
Destructive

Read and change Houdini digital assets.

Modes: list, get, install, uninstall, reload, update, create, sections, section_get, section_set.

Use it when a node type comes from a .hda file: to find the file, to load a
new one, or to read the scripts and the help inside it.

Do not use it for the parameters of one node in the scene: node_inspect
does that.

mode:
    "list"        — the installed assets. `category` filters, for example
                    "Sop".
    "get"         — the definition of `node_type`: the file, the version
                    and the tools.
    "install"     — load the .hda file at `file_path` into the session.
    "uninstall"   — unload the .hda file at `file_path`.
    "reload"      — read the .hda file at `file_path` again, after an edit
                    on disk.
    "update"      — save the node at `node_path` back into its asset.
    "create"      — make an asset from the subnet at `node_path`, with
                    `name`, `label` and `file_path`.
    "sections"    — the section names inside `node_type`.
    "section_get" — the text of `section_name`, for example "PythonModule".
    "section_set" — write `content` into `section_name`.

Returns JSON. "install" and "uninstall" change every node of that type in
the session.
NameRequiredDescriptionDefault
modeNoOne of "list", "get", "install", "uninstall", "reload", "update", "create", "sections", "section_get", "section_set".list
nameNocreate: the type name of the new asset.
labelNocreate: the name that the TAB menu shows.
contentNosection_set: the text to write into the section.
categoryNolist: keep one node category, for example "Sop".
file_pathNoinstall, uninstall, reload: the .hda file. create: the file to write.
node_pathNoupdate: the node to save into its asset. create: the subnet to make an asset from.
node_typeNoget, sections, section_get, section_set: the asset type, as list names it, for example "labs::edge_damage::1.0", or with its category, "Sop/labs::edge_damage::1.0".
section_nameNosection_get, section_set: the section, for example "PythonModule".

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and non-idempotent, and the description goes beyond them by disclosing the blast radius: install and uninstall "change every node of that type in the session." That is exactly the kind of context annotations cannot express. It still doesn't say whether section_set overwrites existing text, what happens when a file_path is missing, or how errors surface, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a compact mode index, then one-line bullets per mode, then a return/impact note. Every bullet earns its place, but the bare mode list at the top partially duplicates the per-mode bullets below it, costing a little space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and a one-line "Returns JSON" suffices. For a 10-mode destructive mutation tool it covers triggers, mode semantics, and cross-session impact well; the remaining gap is overwrite/error semantics for the write modes (reload, update, create, section_set).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each property already carries a mode-prefixed description, so the baseline is 3. The description adds real value by organizing parameters by mode and thereby implying the per-mode required combinations (install needs file_path, create needs node_path plus name/label/file_path) even though the schema declares zero required parameters. It omits that mode defaults to "list".

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ("Read and change Houdini digital assets") and immediately enumerates the ten modes, so the agent knows the full surface of the tool. It also names the sibling it is not (node_inspect) and the domain boundary (.hda files), making it clearly separable from node_edit/parm_set/node_inspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ("when a node type comes from a .hda file: to find the file, to load a new one, or to read the scripts and help inside it") plus an explicit exclusion that redirects to node_inspect for scene-node parameters. The per-mode list further disambiguates internal alternatives so the agent can pick the right mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_editA
Destructive

Change the nodes in a network. One item, or a list in one undo group.

Modes: create, delete, copy, move, rename, flags, color, layout, insert, place_chain, wrangle, material, assign_material, take, current_network, note, box, split.

Use it to build a network. Then use parm_set for the values, and connect
for the wires. Keep the default names that Houdini gives: leave `name`
out, except for the one Output SOP of a network (OUT_<NAME>). A create
that breaks a house rule (an Expression SOP, a second Output SOP, a long
wrangle) gives `house_rule` in its result.

Do not compute positions: create with input_path, insert and place_chain
place the nodes the way the user lays out a graph, move a node of the user
only down to make room, and return every node that moved with its old and
new position. Each returns the layout faults it sees.

Do not use it to set parameters: parm_set does that, and it reports a write
that had no effect.

mode, and the arguments that each mode reads:
    "create"           — node_type, parent_path, name, position,
                         parameters, input_path. context selects the
                         network kind: "sop" (default), "cop", "chop",
                         "lop", "material_network".
    "delete"           — path or paths: nodes, dots, sticky notes or
                         network boxes. A node that still feeds a node
                         outside paths is refused, with the list of its
                         readers, unless force=true.
    "copy"             — paths (or path), destination_path, suffix,
                         names. Copies a set of nodes with the wires
                         between them; a wire from outside the set goes to
                         the same node. suffix is added to each name, or
                         names maps a source path or name to a new name.
                         Returns `copies`, each source path with the path
                         of its copy: use that map, never the order of a
                         list. Without destination_path the copies go to
                         the right of the sources.
    "move"             — path with destination_path to put it in another
                         network, or path with position to move it on the
                         canvas.
    "rename"           — path, new_name.
    "flags"            — path, display, render, bypass. The display flag
                         and the render flag are different flags.
    "color"            — path, color as [r, g, b] from 0 to 1.
    "layout"           — path: lay out the children of that network
                         with the user's Smart Layout shelf tool (the same
                         code): one row per input depth, each node under
                         its first input, other inputs in the columns to
                         the right. Give `paths` to lay out only
                         those nodes. Without it the whole network moves,
                         including the nodes the user placed by hand, and
                         the result says so.
    "insert"           — node_type (or path of a node), input_path, and
                         reader: put the node on every wire from
                         input_path into reader (all streams of a Vellum
                         chain), or into every reader. The nodes below
                         move down only by the room it needs.
    "place_chain"      — paths (in order), reader, input_index: wire the
                         chain into that input and place it as a side
                         chain, its own column right of the reader, last
                         node one row above it. Wire a side result into
                         the node that really reads it, not through
                         pass-through ports of a chain.
    "split"            — path (a SOP network) and stages: move the nodes
                         of each stage into a subnet of that name. Each
                         result that another stage reads gets an OUT_
                         Null, and each reader an IN_ Object Merge.
                         Node paths in parameters, expressions and VEX
                         code are rewritten for the new places. Returns
                         each rewrite and each path it could not
                         resolve. Undo puts it back in one step.
    "wrangle"          — parent_path with code to make a wrangle, or path
                         with code to write into one. code_file reads the
                         code from a file, so a long snippet travels once.
                         replace edits a snippet in place: a list of
                         {"old": ..., "new": ...}, and each `old` must
                         appear exactly once.
    "material"         — path, material_type, name, parameters.
    "assign_material"  — path, material_path.
    "take"             — name to make a take, or take_name to select one.
    "current_network"  — path: what the network editor shows.
    "note"             — parent_path, text, position, color: a sticky
                         note. Without position it goes to the right of
                         the nodes. Notes go here, never in a node
                         comment.
    "box"              — paths, text, color: a network box around those
                         nodes, with text as its title: one to three
                         words. A longer text is refused.

Returns JSON. Houdini adds a numeric suffix when a name is already used, so
read the path in the result and use that path from then on. Never look the
node up again by the name you asked for.
NameRequiredDescriptionDefault
codeNowrangle: the VEX snippet.
modeNoOne of "create", "delete", "copy", "move", "rename", "flags", "color", "layout", "insert", "place_chain", "wrangle", "material", "assign_material", "take", "current_network", "note", "box", "split".create
nameNocreate, material: the name of the new node. take: the name of a new take.
pathNoThe node to change. layout: the network. delete: a node, a sticky note or a network box.
textNonote: the text of the note. box: the comment of the box.
colorNocolor, note, box: [r, g, b] from 0 to 1.
forceNodelete: delete a node that still feeds a node that stays.
itemsNoA list of items for a repeated action, each a dictionary with the keys of one call. An argument outside items is the default for each one.
namesNocopy: a new name for each source, by source path or name.
pathsNocopy: the nodes to copy. delete: the nodes to delete together. layout: place only these nodes. place_chain: the chain, in order. box: the nodes to put in the box.
bypassNoflags: the bypass flag.
readerNoinsert: only the wires into this node. place_chain: the node that the chain feeds.
renderNoflags: the render flag, which is not the display flag.
stagesNosplit: {"stage name": ["node", ...]}, the nodes of `path` for each subnet.
suffixNocopy: text added to the name of each copy.
contextNocreate: the network kind, "sop" (default), "cop", "chop", "lop" or "material_network".
displayNoflags: the display flag.
replaceNowrangle: edit the snippet in place, a list of {"old": ..., "new": ...}. Each old must appear exactly once.
new_nameNorename: the new name.
positionNocreate, move, note: [x, y] on the canvas.
code_fileNowrangle: read the VEX from this file, so a long snippet travels once.
node_typeNocreate: the node type, for example "box" or "attribwrangle".
take_nameNotake: the take to make current.
input_pathNocreate: the node that feeds the new node. It saves a connect call and places the node under its input. insert: the node whose output wires get the new node.
parametersNocreate, material: values to set on the new node, by parameter name.
input_indexNoplace_chain: the input of reader that the chain feeds.
parent_pathNocreate, wrangle, note: the network that gets the new node.
material_pathNoassign_material: the material node.
material_typeNomaterial: the shader type, for example "principledshader".
destination_pathNocopy, move: the network to put the nodes in.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent, and the description goes well beyond them: house-rule violations return `house_rule`, deletes of still-feeding nodes are refused with the reader list, layout moves user-placed nodes and the result says so, split rewrites embedded paths and reports unresolvable ones, and undo grouping is specified. It also warns that Houdini adds numeric name suffixes and the caller must use the returned path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and routing guidance are correctly front-loaded, but the 18-line 'mode, and the arguments that each mode reads' block duplicates parameter documentation that is already at 100% schema coverage, inflating an already long description. Structure is scannable, but a meaningful fraction of the text does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 30-parameter, 18-mode, destructive, non-idempotent mutation tool this is complete: it covers mode selection, argument roles, failure modes, name-resolution behavior, and return-value quirks. An output schema exists, so return-format detail is rightly not expanded further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the 3 baseline is already met by structured data; the description adds real meaning on top, e.g. that copy returns a `copies` map that must be used instead of list order, that each `old` in replace must appear exactly once, and that a note without position is placed to the right. However, the long per-mode argument enumeration largely restates what the schema descriptions already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Change the nodes in a network') and then enumerates all 18 modes, so the agent knows the full action space. It explicitly distinguishes itself from parm_set (values) and connect (wires), which are the two siblings an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given: 'Use it to build a network. Then use parm_set for the values, and connect for the wires' plus the negative 'Do not use it to set parameters'. It also states when-not conditions ('Do not compute positions') and per-mode preconditions such as the delete refusal unless force=true.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

node_inspectA
Read-onlyIdempotent

Read one node, or a list of nodes, without changing anything.

Modes: info, parms, schema, changed, names, expression, keyframes, code, cook_chain, explain, material, image, channels, simulation, render_settings, cache, time_dependency, validate, layout, readers.

Use it before you write: to confirm a parameter name, to see whether a
parameter carries an expression, and to read what a node reports after a
cook.

Do not use it to list a network: scene_overview does that.

mode:
    "info"            — type, inputs, outputs, flags, changed parameters.
    "parms"           — every parameter, or one parameter when you give
                        `parm`. The result says whether the value comes
                        from an expression.
    "schema"          — the parameter templates: types, ranges, menus.
                        Read this before you write a menu parameter.
    "changed"         — only the parameters that a person set: not at the
                        default, or with an expression or keys. Folders,
                        labels, buttons and hidden fields are left out, and
                        a ramp is one entry with its keys.
    "names"           — the names of the parameters, and nothing else. Read
                        this first when you do not know the name to write.
    "expression"      — the expression on `parm`, and its language.
    "keyframes"       — the keys on `parm`.
    "code"            — the VEX snippet in a wrangle node.
    "cook_chain"      — what this node cooks from, upstream.
    "explain"         — a short account of what the node does here.
    "material"        — the shader parameters of a material node.
    "image"           — the COP node: resolution, planes, data type.
    "channels"        — CHOP channels. `channel`, `start` and `end` read
                        the samples of one channel.
    "simulation"      — the DOP network. `object_name` reads one object,
                        with `field_name` one field of it.
    "render_settings" — the parameters of a ROP node.
    "cache"           — the file cache state of a node.
    "time_dependency" — which nodes under this one cook again on every
                        frame, and what makes each one do it. With
                        `frames` it times each one and sorts by the time.
    "validate"        — the names in the parameters of the node that name
                        nothing: a group, an attribute or a volume that the
                        input geometry does not hold. That is the failure
                        that gives a wrong result with no error.
    "layout"          — for a network: each node that sits above its input,
                        each pair of nodes where one name covers the
                        other, wires behind nodes, and the house rules:
                        node comments, box titles that are sentences or
                        cut off, a box in a box, a node in a box it is not
                        part of, a Null OUT_ display node with no Output.
                        Read it after you add nodes.
    "readers"         — the parameters that read `parm` through a channel
                        reference or an expression: what else a write to
                        it changes.

A solver has hundreds of parameters: give pattern or fields.

Returns JSON. A cook error comes back in the result: an empty geometry with
no error line means the node cooked and made nothing.
NameRequiredDescriptionDefault
endNochannels: the last sample frame.
modeNoOne of "info", "parms", "schema", "changed", "names", "expression", "keyframes", "code", "cook_chain", "explain", "material", "image", "channels", "simulation", "render_settings", "cache", "time_dependency", "validate", "layout", "readers".info
parmNoparms, expression, keyframes, readers: the parameter name.
pathsYesOne node path, or a list. A list keeps going after a node that fails, and each result names its path.
startNochannels: the first sample frame.
fieldsNoparms, changed: keep only these keys of each parameter, for example ["value", "expression"]. The name is always kept.
framesNoRead at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. With time_dependency, time each node. The playbar goes back after.
channelNochannels: the CHOP channel whose samples to read.
patternNoparms, changed: keep the parameters whose name or label holds this text or matches it as a glob. "|" separates alternatives: "time|step|cfl".
field_nameNosimulation: the field of object_name to read.
object_nameNosimulation: the DOP object to read.
has_expressionNoparms: keep only the parameters that carry an expression.
include_all_parmsNoinfo: list every parameter, not only the ones that changed.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, but the description adds traits they cannot express: a list keeps going after a failing node and each result names its path, cook errors come back inside the result payload rather than throwing, an empty geometry with no error line means the node cooked and made nothing, and the playbar is restored after `frames`. These are genuine behavioral disclosures beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the exclusion, then mode semantics, so a reader can stop early. The mode name roll-call in the opening line is then repeated and expanded in the bullets, which is a modest redundancy in an otherwise tight, scannable layout.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be spelled out, and the description still covers the salient error semantics. For a 13-parameter, 20-mode inspection tool, the guidance on mode selection, prerequisites per mode, partial-failure behavior, and the validation mode's motivating failure mode leaves nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what each mode requires of the parameters (parm for expression/keyframes/readers, channel+start+end for channels, object_name+field_name for simulation, frames for time_dependency, pattern/fields for solver-sized parameter sets). It adds practical selection guidance such as "A solver has hundreds of parameters: give pattern or fields." It stops short of 5 only because the per-mode text largely restates the terse schema hints rather than adding new syntax or defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource plus scope: "Read one node, or a list of nodes, without changing anything." It also explicitly separates itself from the sibling that lists networks (scene_overview), so an agent can pick it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ("Use it before you write: to confirm a parameter name, to see whether a parameter carries an expression, to read what a node reports after a cook") and an explicit when-not with the named alternative ("Do not use it to list a network: scene_overview does that"). It additionally sequences modes for the agent ("Read this first when you do not know the name to write").

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parm_setA
Destructive

Write parameter values, or press a button. One write, or a list in one undo group.

Modes: value, press, expression, keyframe, keyframes, delete_keyframe, revert, lock, link, spare, render_settings, chop_export, snapshot, restore, diff.

Use it after node_inspect has confirmed the parameter name and the type.

A write can be accepted and change nothing, and Houdini says nothing. This
tool looks for all six causes and names the one it found:
  - the parameter carries an expression, which still decides the value;
  - the parameter is animated, so the value became a new key;
  - the parameter is locked;
  - another parameter disables or hides it, so the cook does not read it;
  - a strict range clamped the value;
  - the parameter reads another node through a channel reference, so the
    write would change that other node. It is refused; give
    `follow_reference=true` to write the node at the other end.
Read `warnings` and `not_applied` in the result before you report success.

mode, and the arguments that each mode reads:
    "value"           — path, parm, value. Or path and parameters, a
                        dictionary of several names and values. A menu
                        takes its token, for example "custom". A
                        bit-field menu takes a token or a list of them.
    "press"           — path, parm: press a button, for example Save to
                        Disk on a File Cache, Reload on a File SOP, or
                        Resimulate on a solver. The result holds the errors
                        and the warnings of the node after the press,
                        because work that a button starts fails later and
                        in silence.
    "expression"      — path, parm, expression, language ("hscript" or
                        "python").
    "keyframe"        — path, parm, frame, value.
    "keyframes"       — path, parm, keyframes: a list of {frame, value}.
    "delete_keyframe" — path, parm, frame.
    "revert"          — path, parm: back to the default, and the
                        expression goes away.
    "lock"            — path, parm, locked.
    "link"            — src_path, src_parm, path, parm: the parameter at
                        path follows the one at src_path.
    "spare"           — path, parameters: a list of controls to add, each
                        {name, label, type, default, min, max, strict,
                        help, value, expression, items}. type is "float",
                        "int", "vector", "toggle", "string", "menu" (with
                        items), "ramp" or "color_ramp" (default: a list of
                        [position, value]). One control can also come as
                        name, label, parm_type, default, expression.
                        On a wrangle it first does what the Create
                        Parameters button does, a parameter for each ch()
                        call, and puts every control in that folder above
                        the code. Use it instead of numbers typed into VEX:
                        the user tunes these. A control that exists is
                        replaced in place, so a second call is safe.
    "render_settings" — path, settings for a ROP node.
    "chop_export"     — chop_path, channel_name, path, parm.
    "snapshot"        — name, paths: save every parameter of these nodes,
                        with expressions, keys and the bypass flag, to the
                        record `name` on disk. "/obj/geo1/*" names every
                        node in a network. It overwrites a record of the
                        same name.
    "restore"         — name: put the record back, and list what changed.
                        `paths` limits it to some of the nodes.
    "diff"            — name: list how the scene differs from the record.
                        Changes nothing.
                        In a sweep, restore before each variant, not once
                        at the end: a variant that does not name a
                        parameter keeps the value of the one before.

Returns JSON with the value before, the value after, and a reason when the
write did not take.
NameRequiredDescriptionDefault
modeNoOne of "value", "press", "expression", "keyframe", "keyframes", "delete_keyframe", "revert", "lock", "link", "spare", "render_settings", "chop_export", "snapshot", "restore", "diff".value
nameNospare: the name of one control. snapshot, restore, diff: the record on disk.
parmNoThe parameter name, for example "tx" or "divsize".
pathNoThe node that holds the parameter.
frameNokeyframe, delete_keyframe: the frame of the key.
itemsNoA list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one.
labelNospare: the label of one control.
pathsNosnapshot: the nodes to save; "/obj/geo1/*" names every node in a network. restore: put back only these nodes.
valueNovalue, keyframe: the value to write. A menu takes its token.
lockedNolock: true locks the parameter, false unlocks it.
defaultNospare: the default of one control.
languageNoexpression: "hscript" or "python".
settingsNorender_settings: the ROP parameters to write, by name.
src_parmNolink: the parameter to follow.
src_pathNolink: the node to follow.
chop_pathNochop_export: the CHOP node.
keyframesNokeyframes: a list of {frame, value}.
parm_typeNospare: the type of one control, for example "float" or "toggle".
expressionNoexpression: the expression text.
parametersNovalue: several names and values in one write, as a dictionary. spare: the list of controls to add.
channel_nameNochop_export: the channel that drives the parameter.
follow_referenceNoWrite the node at the other end of a channel reference. Without it, a write through a reference is refused.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and non-idempotent, and the description adds substantial undisclosed-by-schema behavior: silent no-op writes with six named causes, refusal to write through channel references unless follow_reference=true, snapshot overwriting a same-named record, and the instruction to read `warnings` and `not_applied` before reporting success. Excellent coverage of what gets destroyed and where writes may silently fail; it stops short of stating permissions/auth needs, but the safety profile itself is thoroughly enriched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the silent-failure taxonomy, then mode-by-mode argument detail, then return shape – a sensible ordering for a 22-parameter multi-mode tool. It is long and the mode enumeration partially duplicates the schema's `mode` description, but nearly every line carries operational information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 22 parameters, nested objects, 15 modes and an output schema, the description supplies exactly what the structured fields cannot: mode-to-argument mapping, failure-mode diagnosis, prerequisite sequencing, and workflow caution for sweeps. The return contract is summarized ('value before, the value after, and a reason') without duplicating the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description goes beyond it by naming the exact argument set each mode reads and adding semantics the schema cannot express: a menu takes its token ('custom'), a bit-field menu takes a token or a list, a ramp defaults to a list of [position, value], and a second 'spare' call safely replaces a control in place. Remaining overlap with the schema's per-mode prefixes keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names the specific verb and resource ('Write parameter values, or press a button') and states the batching scope ('One write, or a list in one undo group'). The mode list enumerates the full surface, and it is clearly distinguished from the read-only sibling node_inspect, which it references as a prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing ('Use it after node_inspect has confirmed the parameter name and the type'), explicit substitution guidance ('Use it instead of numbers typed into VEX'), and a concrete sweep workflow ('restore before each variant, not once at the end'). Each mode also carries its own when-to-use context, e.g. 'press' is for buttons whose work fails later and in silence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pdgA
Destructive

Cook a TOP network, and read what its work items did.

Modes: status, workitems, cook, dirty, cancel.

Use it for a TOP network only. A TOP node does not cook like a SOP: it
makes work items, and each item runs on its own. For a SOP or a DOP, use
cook. For a ROP, use render.

mode:
    "status"    — the counts for each state, and whether a cook runs now.
    "workitems" — the items. `state` filters, for example "failed".
    "cook"      — start the cook. The call comes back at once; read
                  "status" after it to follow the work.
    "dirty"     — mark the node dirty. `dirty_all` also removes the
                  outputs on disk.
    "cancel"    — stop the cook that runs now.

Returns JSON. A failed item holds the command and the log path: read those
before you change the network.
NameRequiredDescriptionDefault
modeNoOne of "status", "workitems", "cook", "dirty", "cancel".status
pathYesThe TOP network or the TOP node.
stateNoworkitems: keep the items in this state, for example "failed" or "cooked".
dirty_allNodirty: also remove the outputs of the node on disk.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive=true, but the description adds the context that matters: 'cook' returns at once and must be followed by a status read, 'dirty_all' removes outputs on disk, 'cancel' stops the running cook, and failed items carry the command and log path. This is genuine behavioral detail beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose, then modes, then a returns note; the mode list is a scannable structure. Slight redundancy between 'Use it for a TOP network only' and 'A TOP node does not cook like a SOP' costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't document return shape, yet it still flags the actionable payload of a failed item (command and log path) and the async nature of the cook. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes further by explaining the semantics of each mode value and how 'state' filters workitems ("failed") and how 'dirty_all' removes on-disk outputs. That is more than the schema's one-line field descriptions, though it largely mirrors them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Cook a TOP network, and read what its work items did') and immediately scopes it to TOP networks as distinct from SOP/DOP/ROP. An agent can distinguish it from cook and render without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it ('Use it for a TOP network only') and routes to the alternatives with conditions: 'For a SOP or a DOP, use cook. For a ROP, use render.' The mode list further tells the agent which mode answers which question.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

playbarA
Idempotent

Read or set the time of the session.

Modes: get, frame, range, playback, play.

Use it before you read geometry that changes over time: a SOP cooks at the
current frame, so the frame decides what you see.

Do not use it only to read another frame: geometry_inspect, node_inspect
and stage_inspect take `frames` and put the playbar back after. A frame
that you set here stays for the person and for every later call, and
"range" also changes what a flipbook covers, and a ROP whose range
follows $FSTART and $FEND.

mode:
    "get"      — the current frame and time.
    "frame"    — go to `frame`.
    "range"    — set the scene frame range to `start` and `end`.
    "playback" — set the playback range inside the scene range.
    "play"     — `action` is "play", "stop", "next", "previous", "start"
                 or "end". Playback needs a GUI.

Returns JSON.
NameRequiredDescriptionDefault
endNorange and playback: the last frame.
modeNoOne of "get", "frame", "range", "playback", "play".get
frameNoframe: the frame to go to.
startNorange and playback: the first frame.
actionNoplay: "play", "stop", "next", "previous", "start" or "end".

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial state-change context beyond annotations: frame changes persist across calls and for the user, 'range' alters flipbook coverage and any ROP following $FSTART/$FEND, and 'play' requires a GUI. Annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) already flag mutation and idempotency; the description complements rather than contradicts, though it does not say what 'play' does to an in-progress cook or how long it blocks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and usage constraints are front-loaded in two short blocks, with the mode enumeration after — the right ordering for an agent deciding whether to call. The mode list duplicates the schema's enum, which is some redundancy, but each line adds a behavior not stated in the schema (e.g. playback range sits inside the scene range).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisites (GUI for playback), blast radius (persistence for the user, flipbook and $FSTART/$FEND ROP ranges), and the alternative tools to prefer for non-persistent reads. With an output schema present, no return-value explanation is needed, and nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns one better by mapping each parameter to the modes that consume it (frame for 'frame', start/end for 'range' and 'playback', action for 'play') and listing the action values, giving a coherent per-mode picture. Much of this restates the schema's own parameter descriptions, so it is not a large increment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read or set the time of the session') and immediately enumerates the five modes, so the agent knows exactly what surface the tool covers. It is clearly distinct from the read-only inspectors named as siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('before you read geometry that changes over time: a SOP cooks at the current frame') and explicit when-not-to-use (geometry_inspect, node_inspect, stage_inspect take `frames` and restore the playbar). The rationale for the distinction — a frame set here persists for the person and for later calls — makes the tradeoff legible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

renderA

Start a render, read its settings, or watch it run.

Modes: start, progress, settings, create, watch, stats, compare.

Use it for a final picture through a ROP node. For a fast look at the
viewport, use capture instead: it is much quicker.

mode:
    "start"    — render the ROP at `path`. `frame_range` is [start, end];
                 without it the node renders its own range. `output_path`
                 and `res_scale` hold for this render only: the ROP keeps
                 the output and the size of the user. Use them for test
                 renders. `wait=true` returns when every image is
                 complete (husk ended; up to about 28 minutes), with the
                 render stats of the last one. Without wait, husk can go
                 on after the call. `background=true` renders the saved
                 .hip file in a separate hython and returns at once with
                 its pid and log: the session stays free for the user
                 and for other calls while the stage cooks and husk
                 renders. Follow it with "watch".
    "progress" — what the ROP reports about the render.
    "settings" — the output file, the camera, the resolution and the
                 range of the ROP; the render delegate that really runs
                 (`engine` cpu or xpu, and `engine_from`: the ROP
                 renderer, else husk:default_delegate on the render
                 settings prim); a warning when a Karma settings node
                 says another engine; and the changed Karma settings,
                 split into the ones that engine reads and the ones it
                 ignores, with the reason. Karma XPU shows the CPU
                 Quality controls and ignores them; its Limits tab
                 counts. parm_set and execute warn on a write that the
                 engine of the node ignores.
    "create"   — make a ROP of `render_type` ("opengl", "karma", "mantra",
                 "ifd", …) named `name` under `parent_path`.
    "watch"    — count the husk and mantra processes on this machine, and
                 say whether the file at `output_path` is there and how big
                 it is. This mode does not need Houdini, so it also works
                 while Houdini is busy with the render.
    "stats"    — what husk wrote into the image at `output_path`
                 (husk:render_stats): render time, the engine that really
                 ran, each XPU device with its share of the samples,
                 shader compiles, peak memory, the AOVs. A GPU at 0 %
                 with compiles in progress is not a slow GPU.
    "compare"  — the mean and the largest absolute difference of each AOV
                 of `output_path` against `reference`, to tune samples
                 against a clean render.

Returns JSON. A render that writes no file, with no process running, has
failed: read the node with cook to see the error.
NameRequiredDescriptionDefault
modeNoOne of "start", "progress", "settings", "create", "watch", "stats", "compare".start
nameNocreate: the name of the new ROP.
pathNostart, progress, settings: the ROP node.
waitNostart: return when every image is complete, with its render stats.
referenceNocompare: the image to compare `output_path` with.
res_scaleNostart: a fraction of the resolution for this render only, 0.5 is half.
backgroundNostart: render the saved .hip file in a separate hython, so Houdini stays free. The scene must have no unsaved changes.
frame_rangeNostart: [start, end] or [start, end, step]. Without it the ROP renders its own range.
output_pathNostart: the image file for this render only (put $F4 in it for a range). watch, stats, compare: the image file.
parent_pathNocreate: the network that gets the ROP./out
render_typeNocreate: the ROP kind, for example "opengl", "karma", "mantra" or "ifd".opengl

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say non-read-only, non-destructive, non-idempotent, closed-world; the description adds far more: wait returns after up to ~28 minutes, without wait husk can continue after the call, background requires a saved .hip with no unsaved changes and returns a pid/log at once, watch works while Houdini is busy, and the failure signature of a render that writes no file with no process running. These are exactly the operational traits an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the mode list and organized per mode with indentation, so an agent can jump to the relevant block. A few lines are dense tangents (CPU Quality controls, the 0% GPU note), though they do aid interpretation rather than pad. Overall efficient but longer than strictly necessary for any single call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still sketches what each mode yields (pid and log, render stats, mean/max AOV differences, process counts). For an 11-parameter, seven-mode, side-effecting tool with modest annotations, nothing needed to call it correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: that output_path and res_scale apply to this render only while the ROP retains the user's output and size, that frame_range accepts [start, end] or [start, end, step], and that background operates on the saved .hip. Some mode text still restates what the schema descriptions already say, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb set and resource ('Start a render, read its settings, or watch it run') and immediately enumerates the seven modes, so the agent knows the full scope of the tool. It explicitly names the sibling it is not ('For a fast look at the viewport, use capture instead'), which disambiguates it from capture without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to prefer capture over render ('much quicker') and when to prefer render ('a final picture through a ROP node'). Per-mode guidance includes when to use background+watch versus blocking wait, and when res_scale/output_path are appropriate ('test renders'). No mode is left without a cue for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_fileA
Destructive

Read, save or load the scene file, or step its undo history.

Modes: info, save, load, undo, redo, merge, list_file.

Use "save" before a change that is hard to undo, and use "info" to learn
whether the session holds work that is not saved.

mode:
    "info" — the file name, the frame range, the counts, and whether the
             session has changes that are not saved.
    "save" — save to `path`, or over the open file when `path` is empty.
    "load" — open the .hip file at `path`. Everything in the session goes
             away, and the undo history with it.
    "undo" — undo `count` steps. Each call of a tool that changes the
             scene is one step. A batch is one step, except a batch with a
             step that waits (capture, render): there each step is one.
             Returns the labels it undid and the next ones.
    "redo" — redo `count` steps.
    "merge" — bring `nodes` from the .hip file at `path`, each with all
             its children and the wires inside. A name in use is
             renamed: read `made` for the new paths. One undo step.
    "list_file" — the nodes of the .hip file at `path` (type, inputs,
             child count), at the top or in the networks of `nodes`. A
             separate hython reads the file, so this session loads
             nothing. It takes some seconds.

Returns JSON.
NameRequiredDescriptionDefault
modeNoOne of "info", "save", "load", "undo", "redo", "merge", "list_file".info
pathNosave: the file to write; empty saves over the open file. load: the .hip file to open. merge, list_file: the other .hip file.
countNoundo and redo: how many steps.
nodesNomerge: the node paths to bring from the other file. list_file: the networks to list.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations declare destructiveHint=true and readOnlyHint=false, the description adds critical behavioral detail: load removes everything including undo history, merge renames conflicting names and is one undo step, list_file uses a separate hython and takes seconds. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite its length, the description is front-loaded with a one-line summary followed by a clean mode list and per-mode explanations. Every sentence carries useful information for a tool with seven modes and destructive operations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex multi-mode behavior, destructive load, undo-step semantics, and the existence of an output schema, the description is complete. It tells the agent what each mode does, the risks, and the expected side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaningful mode-specific semantics for path, count, and nodes, e.g., save over the open file when path is empty, merge brings children and wires, list_file lists networks. It enhances the schema rather than merely repeating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (read/save/load the scene file, step undo history) and enumerates seven distinct modes. It is clear enough to distinguish from most siblings, though it does not explicitly name alternative tools like scene_overview or session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear mode-specific usage guidance: use "save" before hard-to-undo changes, use "info" to check for unsaved work, and warns that "load" wipes the session and undo history. It lacks explicit exclusions or sibling-tool alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_overviewA
Read-onlyIdempotent

List what the scene holds. Start here, before you touch a node.

Modes: scene, network, children, search, node_types, errors, materials, lights, takes, caches, render_nodes, viewports, changes.

Use it to find a node path, to see the shape of a network, or to learn
which node types this Houdini has.

Do not use it to read one node in detail: node_inspect does that. Do not
use it to read geometry: geometry_inspect does that.

mode:
    "scene"        — file, frame range, counts, and the top of the tree.
    "network"      — the children of one network by name, with their
                     wires, flags and dots. Each input names the dot it
                     comes through, then the node behind the dot.
                     `pattern` and `node_type` keep some nodes;
                     compact=True gives only the wires.
    "children"     — the children of `path`. recursive=True walks down.
    "search"       — nodes whose name matches `pattern`, under `path`.
                     node_type filters by type name.
    "node_types"   — the node types this Houdini has, for one `category`
                     such as "Sop", "Object", "Lop", "Driver". `pattern`
                     keeps the names or labels that match.
    "errors"       — every node under `path` that has a cook error.
    "materials"    — the materials in `path` (default /mat) and the types.
    "lights"       — the lights on the USD stage of the LOP node `path`.
    "takes"        — the takes, and which take is current.
    "caches"       — file caches under `path` and their state on disk.
    "render_nodes" — the ROP nodes in /out.
    "viewports"    — the panes, and what the scene viewer shows.
    "changes"      — what the user changed in the network `path` since
                     your last call: nodes added, deleted, renamed or
                     moved, wires, flags and parameter values. Your own
                     changes are not listed. The first call starts to
                     watch the network; call it at the start of each
                     turn, before you change anything there.

Returns JSON. A path that does not exist comes back as an error, not as an
empty list.
NameRequiredDescriptionDefault
modeNoOne of "scene", "network", "children", "search", "node_types", "errors", "materials", "lights", "takes", "caches", "render_nodes", "viewports", "changes".scene
pathNoA node path such as "/obj" or "/obj/geo1": the network to list or to search.
compactNonetwork: return only the wires, one line each.
patternNosearch: the name to match, with * and ? as wildcards. network, node_types: keep the names that match; "|" separates alternatives, for example "*retarget*|*ik*".
categoryNonode_types: the context, for example "Sop", "Object", "Lop" or "Driver".
node_typeNosearch, network: keep the nodes of this type, for example "null".
recursiveNochildren: also list the children of the children.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description adds non-obvious behavior beyond them: a missing path returns an error rather than an empty list, `changes` excludes your own edits, and the first `changes` call begins watching. These are exactly the operational details an agent needs before relying on the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose and routing first, then the mode semantics, then return-value caveats — a logical order with no wasted sentences. The mode block is long but every entry earns its place given thirteen dispatch options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format needn't be spelled out, yet the description still notes the JSON/error contract. All modes, the path-error behavior, and the stateful `changes` lifecycle are covered, leaving no gap an agent would need to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining what each mode actually returns and how pattern/node_type/compact/recursive modify behavior per mode. The per-parameter schema docs already carry syntax, so the gain is semantic rather than syntactic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List what the scene holds") and front-loads its role as the entry-point discovery tool. It explicitly distinguishes itself from node_inspect and geometry_inspect, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ("Start here, before you touch a node", find a node path, see a network, learn node types) and explicit when-not-to-use, naming both alternatives (node_inspect, geometry_inspect). The modes list doubles as a selection guide for 13 distinct query shapes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selectA
Idempotent

Read the node selection, or set it.

Use it to see what the person works on before you change the scene, and to
show them your result when you are done. Do not use it to find nodes:
scene_overview mode "search" does that.

A path is the full path of a node, for example "/obj/geo1/mountain1". A
path that is not a node stops the call with an error, and the selection
stays as it was.

Returns JSON with the selected paths.
NameRequiredDescriptionDefault
pathsNoLeave it out to read the selection. One path or a list of paths replaces it. An empty list clears it.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the description's job is to add context beyond that, which it does: an invalid path aborts the call and leaves the selection unchanged, and the return is JSON with the selected paths. It stops short of stating permission or concurrency implications of a mutation, so a 4 rather than a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core read/write distinction, then usage, then the path format contract. The line-broken layout is slightly choppy but every sentence carries distinct information and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter dual-mode tool with annotations covering the safety profile and an output schema covering return shape, the description supplies everything needed: both modes, usage conditions, the alternative for searching, path format, and failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the three modes (omit to read, one/list to replace, empty list to clear). The description adds value on top of that by giving the path format with a concrete example ("/obj/geo1/mountain1") and the error behavior for a non-node path.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource with both modes: 'Read the node selection, or set it.' It then explicitly distinguishes itself from the sibling that could be confused for it (scene_overview mode "search"), so an agent can pick correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use contexts ("see what the person works on before you change the scene, and to show them your result when you are done") and an explicit when-not-to-use with the alternative named ("Do not use it to find nodes: scene_overview mode 'search' does that"). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sessionA
Destructive

Report the Houdini sessions, choose one, or start, stop or interrupt one.

Actions: status, list, attach, detach, interrupt, start, start_gui, stop.

Use it first when a tool says that Houdini is not reachable, and use it to
learn the Houdini version before you use an API that changed between
releases.

Several Houdini sessions can listen at the same time: the graphical one that
holds the work of the user, and a headless one for your own tests. Every
tool result names the session that answered, in `_session`. Read that line
when a scene looks empty or wrong: an empty scene is usually the wrong
session, not a lost scene.

Do not use it to read the scene: scene_overview does that.

action:
    "status"    — the session that the bridge talks to now, the other
                  sessions, and the port. Starts nothing, and always
                  answers.
    "list"      — every Houdini that runs, with its version, its process
                  id, its .hip file, whether it has a window and whether it
                  answers; and the Houdini versions installed.
    "attach"    — send every later command to the Houdini on `port`. Use it
                  when "list" shows more than one.
    "detach"    — forget the attached port and let the bridge choose again.
    "interrupt" — stop the call that runs now in the attached Houdini, or
                  in the one on `port`: a script past its budget, a loop
                  that will not end. Houdini answers again after it. A
                  single long cook does not return to Python; then, in a
                  Houdini with a window on Windows, it sends Escape to
                  the window, as the user would. A stopped simulation
                  keeps a partial cache.
    "start"     — start a headless Houdini (hython) and attach to it.
                  `version` chooses the release, for example "21.0" or
                  "21.0.829"; without it, the version of the Houdini window
                  that runs. A Houdini that already runs is not touched, so
                  this is the safe way to test while a person works.
    "start_gui" — start Houdini with its window and wait for the plugin to
                  answer, up to 4 minutes. It opens the .hip file at `hip`
                  when you give one, it stays open when the bridge stops,
                  and the bridge attaches to it. `version` as for "start".
    "stop"      — stop the headless Houdini that this bridge started. A
                  Houdini that you started yourself, or with "start_gui", is
                  not touched.

Returns JSON. The report says what to do next when nothing answers.
NameRequiredDescriptionDefault
hipNostart_gui: the .hip file to open.
portNoattach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one.
actionNoOne of "status", "list", "attach", "detach", "interrupt", "start", "start_gui", "stop".status
versionNostart and start_gui: the Houdini release, for example "21.0" or "21.0.829".

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark the tool non-read-only and destructive, and the description goes well beyond them: it says start never touches a running Houdini, stop only kills bridge-started headless sessions, start_gui waits up to 4 minutes and survives bridge exit, interrupt may send Escape on Windows, and an interrupted simulation leaves a partial cache. It also discloses the per-result `_session` field, which explains confusing empty-scene results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with a one-line summary, an action index, and usage guidance before the long action glossary, so the most important content comes first. It is long for a single description, but the length is warranted by eight distinct actions; a few phrases are marginally redundant but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-action lifecycle tool this covers everything an agent needs: which action to pick, what each does to processes and files, timeout behavior, and how to detect the wrong session. An output schema exists, so return format is correctly left out, with only the `_session` convention noted because it affects interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: version accepts partial or full releases and defaults to the running window's version, port comes from list and is used differently by attach vs interrupt, and hip is only meaningful for start_gui. These per-action scoping details are not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line gives a specific verb set and the exact resource: report Houdini sessions, pick one, start/stop/interrupt. It further distinguishes itself from scene_overview and lists all eight actions up front, so an agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names concrete trigger conditions ('use it first when a tool says that Houdini is not reachable', 'use it to learn the Houdini version before an API that changed') and an explicit exclusion ('Do not use it to read the scene: scene_overview does that'). It also tells the agent when to use attach ('when list shows more than one').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stage_inspectA
Read-onlyIdempotent

Read the USD stage at a LOP node. This cooks the node.

Modes: stage, prims, prim, search, layer, attribute, composition, variants, stats, modified, lights, transform, profile.

Use it in a Solaris (LOP) network to see the prims, the layers and the
composition that a node produces.

Do not use it for SOP geometry: geometry_inspect does that.

mode:
    "stage"       — the stage: prim count, layers, the default prim.
    "prims"       — the prim tree from `root_prim`, `max_depth` deep.
    "prim"        — one prim at `prim_path`. include_attrs=True adds its
                    attributes.
    "search"      — prims whose path matches `pattern`, filtered by
                    `type_name` such as "Mesh" or "SphereLight".
    "layer"       — the layer stack, and the layer at `layer_index`.
    "attribute"   — the value of `attr_name` on `prim_path`.
    "composition" — where the opinions on `prim_path` come from: each
                    layer of its prim stack, strongest first, with the
                    node that wrote it (the SOP behind an op: layer) and
                    its references and payloads.
    "variants"    — the variant sets on `prim_path` and the selection.
    "stats"       — counts under `prim_path`.
    "modified"    — the last `count` prims that this node changed. Use it
                    to see what one LOP did.
    "lights"      — the lights on the stage.
    "transform"   — where `prim_path` is in the world: translate, rotate
                    and scale composed through every parent. With
                    `frames`, the path of a moving prim.
    "profile"     — each LOP node of the chain up to `path`: cook time,
                    prims by type, and the prims it adds, slowest
                    first. It names the node that makes an export or a
                    render start slow, and flags a SOP Import that
                    writes each packed piece as its own Xform.

A layer file that another process wrote again (a cache from hython) is
reloaded before the read, and `reloaded_layers` names it.

Returns JSON.
NameRequiredDescriptionDefault
modeNoOne of "stage", "prims", "prim", "search", "layer", "attribute", "composition", "variants", "stats", "modified", "lights", "transform", "profile".stage
pathYesThe LOP node whose stage to read.
countNomodified: how many prims come back.
framesNoRead at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. The playbar goes back after.
patternNosearch: the prim path to match, with * as a wildcard.
attr_nameNoattribute: the attribute to read, for example "points".
max_depthNoprims: how many levels of the tree come back.
prim_pathNoprim, attribute, composition, variants, stats, transform: the prim, for example "/world/geo/rock".
root_primNoprims: the prim where the tree starts./
type_nameNosearch: keep the prims of this type, for example "Mesh" or "SphereLight".
layer_indexNolayer: which layer of the stack, from 0 (the strongest).
include_attrsNoprim: also return the attributes of the prim.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnlyHint/idempotentHint annotations: it discloses that reading cooks the node, that a layer rewritten by another process (hython cache) is reloaded and reported in reloaded_layers, and that frames temporarily moves the playbar and restores it. Those are exactly the side effects an agent would otherwise not anticipate from a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the mode list, then a scannable indented mode table; the negative guidance is placed before the bulk. The opening mode enumeration largely duplicates the schema's mode description, which is mild redundancy across a fairly long body, but the length is justified by 13 distinct modes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, 13-mode tool this covers what an agent needs: cooking cost implications, playbar restoration, layer reload behavior, mode selection, and a hard boundary against SOP geometry. Return values are handled by the existing output schema, so their absence from the description is not a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description earns more by binding parameters to modes and explaining effect rather than just type (include_attrs adds attributes, frames returns "the path of a moving prim", layer_index walks the stack, max_depth controls tree depth). It does not restate format details already in the schema, but it also adds no validation or edge-case behavior for conflicting mode/param combinations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Read the USD stage at a LOP node") and immediately names the sibling it must not be confused with ("Do not use it for SOP geometry: geometry_inspect does that"). The mode enumeration makes the read surface concrete, so an agent can pick this over geometry_inspect/node_inspect without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives positive context ("Use it in a Solaris (LOP) network to see the prims, the layers and the composition that a node produces"), an explicit exclusion with the alternative tool named, and per-mode guidance including when a mode is specifically warranted ("Use it to see what one LOP did", "It names the node that makes an export or a render start slow"). Nothing about routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.8.1
    • Changedbatch1 field changed
      • changedInput schema / properties / operations / description
        Previous value: -"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch."New value: +"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch. Add \"id\": \"name\" to a step, and a later step can write \"$name\" (or \"$name/child\") for the node path that step returned."
    • Changedgeometry_inspect4 fields changed
      • changedInput schema / properties / against / description
        Previous value: -"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body."New value: +"compare: the node to compare with. distance: the node to measure to. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body."
      • changedInput schema / properties / attribs / description
        Previous value: -"points: the attributes to return, for example [\"P\", \"Cd\"]."New value: +"points: the attributes to return, for example [\"P\", \"Cd\"]. changes: the attributes whose mean, min and max to follow."
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\"."New value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\", \"distance\", \"changes\"."
      • changedInput schema / properties / threshold / description
        Previous value: -"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance."New value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance. distance: list the points farther than it. changes: the ratio of change from one frame to the next that counts as a jump (0.2)."
    • Changedrender1 field changed
      • addedInput schema / properties / background
        Added value: +{
        +  "default": false,
        +  "description": "start: render the saved .hip file in a separate hython, so Houdini stays free. The scene must have no unsaved changes.",
        +  "type": "boolean"
        +}
    • Changedscene_file3 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"info\", \"save\", \"load\", \"undo\", \"redo\"."New value: +"One of \"info\", \"save\", \"load\", \"undo\", \"redo\", \"merge\", \"list_file\"."
      • addedInput schema / properties / nodes
        Added value: +{
        +  "description": "merge: the node paths to bring from the other file. list_file: the networks to list.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / path / description
        Previous value: -"save: the file to write; empty saves over the open file. load: the .hip file to open."New value: +"save: the file to write; empty saves over the open file. load: the .hip file to open. merge, list_file: the other .hip file."
    • Changedstage_inspect1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."New value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\", \"profile\"."
  2. 9 tool updatesv0.8.0
    • Changedcapture4 fields changed
      • addedInput schema / properties / azimuths
        Added value: +{
        +  "description": "sheet: a list of angles; each frame is drawn from each angle.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / bounds
        Added value: +{
        +  "description": "sheet: [xmin, ymin, zmin, xmax, ymax, zmax], the box to frame.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."New value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\", \"network\"."
      • addedInput schema / properties / paths
        Added value: +{
        +  "description": "network: the items to frame in the network editor.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedconnect2 fields changed
      • changedInput schema / properties / dst_path / description
        Previous value: -"connect: the node whose input takes the wire."New value: +"connect: the node or network dot whose input takes the wire."
      • changedInput schema / properties / src_path / description
        Previous value: -"connect: the node whose output feeds the wire."New value: +"connect: the node or network dot whose output feeds the wire."
    • Changedcook1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\". The description says what each one does."New value: +"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\", \"recook\". The description says what each one does."
    • Changedexecute1 field changed
      • addedInput schema / properties / wait
        Added value: +{
        +  "default": 0,
        +  "description": "job: the most seconds to wait for the job to end. The answer comes when it ends or when the wait is over, with what it printed so far.",
        +  "type": "number"
        +}
    • Changedgeometry_inspect14 fields changed
      • changedInput schema / properties / against / description
        Previous value: -"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`."New value: +"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body."
      • changedInput schema / properties / attrib_class / description
        Previous value: -"attrib: \"point\", \"prim\", \"vertex\" or \"detail\"."New value: +"attrib, try: \"point\", \"prim\", \"vertex\" or \"detail\"."
      • changedInput schema / properties / attrib_name / description
        Previous value: -"attrib: the attribute to read."New value: +"attrib, try: the attribute to read. try reads it on the result."
      • addedInput schema / properties / file
        Added value: +{
        +  "description": "export: the file path to write.",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000)."New value: +"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000). stretch: how many of the worst edges (10)."
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\"."New value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\"."
      • changedInput schema / properties / name / description
        Previous value: -"volume_stats: one volume to read. volume_voxels, volume_compare: the field."New value: +"volume_stats: one volume to read. volume_voxels, volume_compare: the field. fingerprint: save the result under this name."
      • addedInput schema / properties / output / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / output / description
        Previous value: -"export: the file path to write."New value: +"The output of the node to read, 0 by default. A KineFX import has the mesh on 0, the rest skeleton on 1, the animated skeleton on 2."
      • removedInput schema / properties / output / type
        Removed value: -"string"
      • addedInput schema / properties / renamed
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "fingerprint: {\"old path\": \"new path\"} for the nodes that a refactor renamed or moved.",
        +  "type": "object"
        +}
      • addedInput schema / properties / split_by
        Added value: +{
        +  "description": "crossings: a prim attribute, such as \"name\", whose values are the parts that the count pairs.",
        +  "type": "string"
        +}
      • changedInput schema / properties / steps / description
        Previous value: -"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry as verbs. Nothing changes in the scene."New value: +"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry. A menu takes its token or its index. Nothing changes in the scene."
      • changedInput schema / properties / threshold / description
        Previous value: -"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it."New value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance."
    • Changednode_edit7 fields changed
      • addedInput schema / properties / force
        Added value: +{
        +  "description": "delete: delete a node that still feeds a node that stays.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / input_index
        Added value: +{
        +  "description": "place_chain: the input of reader that the chain feeds.",
        +  "type": "integer"
        +}
      • changedInput schema / properties / input_path / description
        Previous value: -"create: the node that feeds the new node. It saves a connect call and places the node under its input."New value: +"create: the node that feeds the new node. It saves a connect call and places the node under its input. insert: the node whose output wires get the new node."
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\"."New value: +"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"insert\", \"place_chain\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\", \"split\"."
      • changedInput schema / properties / paths / description
        Previous value: -"copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box."New value: +"copy: the nodes to copy. delete: the nodes to delete together. layout: place only these nodes. place_chain: the chain, in order. box: the nodes to put in the box."
      • addedInput schema / properties / reader
        Added value: +{
        +  "description": "insert: only the wires into this node. place_chain: the node that the chain feeds.",
        +  "type": "string"
        +}
      • addedInput schema / properties / stages
        Added value: +{
        +  "additionalProperties": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "description": "split: {\"stage name\": [\"node\", ...]}, the nodes of `path` for each subnet.",
        +  "type": "object"
        +}
    • Changedparm_set1 field changed
      • removedInput schema / properties / language / default
        Removed value: -"hscript"
    • Changedrender6 fields changed
      • changedInput schema / properties / frame_range / description
        Previous value: -"start: [start, end]. Without it the ROP renders its own range."New value: +"start: [start, end] or [start, end, step]. Without it the ROP renders its own range."
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."New value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\", \"stats\", \"compare\"."
      • changedInput schema / properties / output_path / description
        Previous value: -"watch: the image file to look for on disk."New value: +"start: the image file for this render only (put $F4 in it for a range). watch, stats, compare: the image file."
      • addedInput schema / properties / reference
        Added value: +{
        +  "description": "compare: the image to compare `output_path` with.",
        +  "type": "string"
        +}
      • addedInput schema / properties / res_scale
        Added value: +{
        +  "description": "start: a fraction of the resolution for this render only, 0.5 is half.",
        +  "type": "number"
        +}
      • addedInput schema / properties / wait
        Added value: +{
        +  "default": false,
        +  "description": "start: return when every image is complete, with its render stats.",
        +  "type": "boolean"
        +}
    • Changedscene_overview4 fields changed
      • addedInput schema / properties / compact
        Added value: +{
        +  "default": false,
        +  "description": "network: return only the wires, one line each.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\"."New value: +"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\", \"changes\"."
      • changedInput schema / properties / node_type / description
        Previous value: -"search: keep the nodes of this type, for example \"null\"."New value: +"search, network: keep the nodes of this type, for example \"null\"."
      • changedInput schema / properties / pattern / description
        Previous value: -"search: the name to match, with * and ? as wildcards."New value: +"search: the name to match, with * and ? as wildcards. network, node_types: keep the names that match; \"|\" separates alternatives, for example \"*retarget*|*ik*\"."
  3. 1 tool updatev0.7.6
    • Changedconnect1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire. An argument outside items is the default for each one."New value: +"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire, for example {\"src_path\": \"/obj/geo1/grid1\", \"dst_path\": \"/obj/geo1/mountain1\"}. An argument outside items is the default for each one."
  4. 2 tool updatesv0.7.5
    • Changedexecute1 field changed
      • changedInput schema / properties / background / description
        Previous value: -"python: return at once with a job id and let the script run. Read it with mode job. Other calls wait until it ends."New value: +"python: return at once with a job id and let the script run. Read it with mode job. Until it ends, other calls are refused."
    • Changedhda1 field changed
      • changedInput schema / properties / node_type / description
        Previous value: -"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."New value: +"get, sections, section_get, section_set: the asset type, as list names it, for example \"labs::edge_damage::1.0\", or with its category, \"Sop/labs::edge_damage::1.0\"."
  5. 20 tool updatesv0.7.3
    • Changedbatch3 fields changed
      • addedInput schema / properties / operations / description
        Added value: +"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch."
      • removedInput schema / properties / operations / title
        Removed value: -"Operations"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedcapture154 fields changed
      • removedInput schema / properties / azimuth / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / azimuth / default
        Removed value: -null
      • addedInput schema / properties / azimuth / description
        Added value: +"Degrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene."
      • removedInput schema / properties / azimuth / title
        Removed value: -"Azimuth"
      • addedInput schema / properties / azimuth / type
        Added value: +"number"
      • removedInput schema / properties / background / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / background / description
        Added value: +"sheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey."
      • removedInput schema / properties / background / title
        Removed value: -"Background"
      • addedInput schema / properties / background / type
        Added value: +"integer"
      • removedInput schema / properties / camera / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / camera / default
        Removed value: -null
      • addedInput schema / properties / camera / description
        Added value: +"camera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim."
      • removedInput schema / properties / camera / title
        Removed value: -"Camera"
      • addedInput schema / properties / camera / type
        Added value: +"string"
      • removedInput schema / properties / color_by / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color_by / default
        Removed value: -null
      • addedInput schema / properties / color_by / description
        Added value: +"sheet and movie: colour the points by this attribute, blue at the low end of color_range and red at the high end. A vector uses its length."
      • removedInput schema / properties / color_by / title
        Removed value: -"Color By"
      • addedInput schema / properties / color_by / type
        Added value: +"string"
      • removedInput schema / properties / color_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color_range / default
        Removed value: -null
      • addedInput schema / properties / color_range / description
        Added value: +"[low, high] for color_by. Without it, [0, 1]."
      • addedInput schema / properties / color_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / color_range / title
        Removed value: -"Color Range"
      • addedInput schema / properties / color_range / type
        Added value: +"array"
      • removedInput schema / properties / columns / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / columns / default
        Removed value: -null
      • addedInput schema / properties / columns / description
        Added value: +"sheet: tiles in each row."
      • removedInput schema / properties / columns / title
        Removed value: -"Columns"
      • addedInput schema / properties / columns / type
        Added value: +"integer"
      • removedInput schema / properties / contour / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / contour / default
        Removed value: -null
      • addedInput schema / properties / contour / description
        Added value: +"sheet: a step. Colour by the fraction of the value over the step, so the lines of equal value show, for example the shells of a distance field."
      • removedInput schema / properties / contour / title
        Removed value: -"Contour"
      • addedInput schema / properties / contour / type
        Added value: +"number"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"sheet: how many tiles, when frames is not given."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • removedInput schema / properties / direction / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / direction / default
        Removed value: -null
      • addedInput schema / properties / direction / description
        Added value: +"The view axis: \"top\", \"front\", \"left\", \"right\", \"back\", \"bottom\" or \"persp\"."
      • removedInput schema / properties / direction / title
        Removed value: -"Direction"
      • addedInput schema / properties / direction / type
        Added value: +"string"
      • removedInput schema / properties / elevation / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / elevation / default
        Removed value: -null
      • addedInput schema / properties / elevation / description
        Added value: +"Degrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view."
      • removedInput schema / properties / elevation / title
        Removed value: -"Elevation"
      • addedInput schema / properties / elevation / type
        Added value: +"number"
      • removedInput schema / properties / fill / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fill / description
        Added value: +"How much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it."
      • removedInput schema / properties / fill / title
        Removed value: -"Fill"
      • addedInput schema / properties / fill / type
        Added value: +"number"
      • removedInput schema / properties / fps / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fps / description
        Added value: +"movie: frames per second."
      • removedInput schema / properties / fps / title
        Removed value: -"Fps"
      • addedInput schema / properties / fps / type
        Added value: +"number"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"What to frame the view on: \"selection\", \"all\", or a node path (the box of what that node cooked)."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"string"
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"flipbook and movie: [start, end]."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"One frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}: one picture for each. sheet: the frames of the tiles. The playbar goes back after. A picture that holds only the background is an error."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / look_from / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / look_from / default
        Removed value: -null
      • addedInput schema / properties / look_from / description
        Added value: +"[x, y, z]: the point that the view looks from."
      • addedInput schema / properties / look_from / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / look_from / title
        Removed value: -"Look From"
      • addedInput schema / properties / look_from / type
        Added value: +"array"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node / default
        Removed value: -null
      • addedInput schema / properties / node / description
        Added value: +"The node to look at. It gets the display flag for the picture, and the flag goes back after. The viewer shows its network, and goes back after. Without `frame`, the view also frames it."
      • removedInput schema / properties / node / title
        Removed value: -"Node"
      • addedInput schema / properties / node / type
        Added value: +"string"
      • removedInput schema / properties / output / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output / default
        Removed value: -null
      • addedInput schema / properties / output / description
        Added value: +"The file to write. Without it, a temporary file."
      • removedInput schema / properties / output / title
        Removed value: -"Output"
      • addedInput schema / properties / output / type
        Added value: +"string"
      • removedInput schema / properties / radius / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / radius / default
        Removed value: -null
      • addedInput schema / properties / radius / description
        Added value: +"The distance between target and look_from."
      • removedInput schema / properties / radius / title
        Removed value: -"Radius"
      • addedInput schema / properties / radius / type
        Added value: +"number"
      • removedInput schema / properties / reference / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / reference / default
        Removed value: -null
      • addedInput schema / properties / reference / description
        Added value: +"sheet: a picture file to put in the first tile, to compare."
      • removedInput schema / properties / reference / title
        Removed value: -"Reference"
      • addedInput schema / properties / reference / type
        Added value: +"string"
      • removedInput schema / properties / renderer / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / renderer / default
        Removed value: -null
      • addedInput schema / properties / renderer / description
        Added value: +"The Hydra renderer of a viewer on a LOP network, for example \"Karma CPU\". An unknown name lists the ones available."
      • removedInput schema / properties / renderer / title
        Removed value: -"Renderer"
      • addedInput schema / properties / renderer / type
        Added value: +"string"
      • removedInput schema / properties / resolution / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / resolution / default
        Removed value: -null
      • addedInput schema / properties / resolution / description
        Added value: +"[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched."
      • addedInput schema / properties / resolution / items
        Added value: +{
        +  "type": "integer"
        +}
      • removedInput schema / properties / resolution / title
        Removed value: -"Resolution"
      • addedInput schema / properties / resolution / type
        Added value: +"array"
      • removedInput schema / properties / settle / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / settle / default
        Removed value: -null
      • addedInput schema / properties / settle / description
        Added value: +"Seconds that a renderer such as Karma draws before each picture. Karma starts from noise: 20 to 30 gives a clean frame. With frames or in flipbook mode it renders a sequence through the viewport, with no husk and no render license."
      • removedInput schema / properties / settle / title
        Removed value: -"Settle"
      • addedInput schema / properties / settle / type
        Added value: +"number"
      • removedInput schema / properties / shading / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / shading / default
        Removed value: -null
      • addedInput schema / properties / shading / description
        Added value: +"One of \"smooth\", \"smooth_wire\", \"flat\", \"wireframe\"."
      • removedInput schema / properties / shading / title
        Removed value: -"Shading"
      • addedInput schema / properties / shading / type
        Added value: +"string"
      • removedInput schema / properties / slab / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / slab / default
        Removed value: -null
      • addedInput schema / properties / slab / description
        Added value: +"[axis, thickness], for example [\"z\", 0.1]: draw only the points in a thin cut through the middle, so the inside of a solid cloud shows."
      • addedInput schema / properties / slab / items
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "number"
        +    }
        +  ]
        +}
      • removedInput schema / properties / slab / title
        Removed value: -"Slab"
      • addedInput schema / properties / slab / type
        Added value: +"array"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"sheet: the first frame. Without it, the current frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / properties / step / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / step / description
        Added value: +"sheet: the frames between tiles. Over 2 hides movement and gives a warning."
      • removedInput schema / properties / step / title
        Removed value: -"Step"
      • addedInput schema / properties / step / type
        Added value: +"number"
      • removedInput schema / properties / target / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / target / default
        Removed value: -null
      • addedInput schema / properties / target / description
        Added value: +"[x, y, z]: the point that the view turns around."
      • addedInput schema / properties / target / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / target / title
        Removed value: -"Target"
      • addedInput schema / properties / target / type
        Added value: +"array"
      • removedInput schema / properties / tile_width / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tile_width / description
        Added value: +"sheet: the width of each tile in pixels."
      • removedInput schema / properties / tile_width / title
        Removed value: -"Tile Width"
      • addedInput schema / properties / tile_width / type
        Added value: +"integer"
      • removedInput schema / properties / vectors / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / vectors / default
        Removed value: -null
      • addedInput schema / properties / vectors / description
        Added value: +"sheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error."
      • removedInput schema / properties / vectors / title
        Removed value: -"Vectors"
      • addedInput schema / properties / vectors / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedconnect42 fields changed
      • removedInput schema / properties / dst_input_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dst_input_index / description
        Added value: +"connect: the input of dst_path, from 0."
      • removedInput schema / properties / dst_input_index / title
        Removed value: -"Dst Input Index"
      • addedInput schema / properties / dst_input_index / type
        Added value: +"integer"
      • removedInput schema / properties / dst_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / dst_path / default
        Removed value: -null
      • addedInput schema / properties / dst_path / description
        Added value: +"connect: the node whose input takes the wire."
      • removedInput schema / properties / dst_path / title
        Removed value: -"Dst Path"
      • addedInput schema / properties / dst_path / type
        Added value: +"string"
      • removedInput schema / properties / input_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / input_index / description
        Added value: +"disconnect: the input that loses its wire, from 0."
      • removedInput schema / properties / input_index / title
        Removed value: -"Input Index"
      • addedInput schema / properties / input_index / type
        Added value: +"integer"
      • removedInput schema / properties / input_indices / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / input_indices / default
        Removed value: -null
      • addedInput schema / properties / input_indices / description
        Added value: +"reorder: the old input indices in their new order, for example [1, 0]."
      • addedInput schema / properties / input_indices / items
        Added value: +{
        +  "type": "integer"
        +}
      • removedInput schema / properties / input_indices / title
        Removed value: -"Input Indices"
      • addedInput schema / properties / input_indices / type
        Added value: +"array"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of wires for \"connect\" or \"disconnect\", each a dictionary with the keys of one wire. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"connect\", \"disconnect\", \"reorder\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"disconnect and reorder: the node whose inputs change."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / src_output_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / src_output_index / description
        Added value: +"connect: the output of src_path, from 0."
      • removedInput schema / properties / src_output_index / title
        Removed value: -"Src Output Index"
      • addedInput schema / properties / src_output_index / type
        Added value: +"integer"
      • removedInput schema / properties / src_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_path / default
        Removed value: -null
      • addedInput schema / properties / src_path / description
        Added value: +"connect: the node whose output feeds the wire."
      • removedInput schema / properties / src_path / title
        Removed value: -"Src Path"
      • addedInput schema / properties / src_path / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedconsole27 fields changed
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / description
        Added value: +"How many log entries come back, the newest ones."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / node_errors / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / node_errors / description
        Added value: +"Also report the nodes under root_path that hold an error or a warning. False gives the log alone."
      • removedInput schema / properties / node_errors / title
        Removed value: -"Node Errors"
      • addedInput schema / properties / node_errors / type
        Added value: +"boolean"
      • removedInput schema / properties / node_limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / node_limit / description
        Added value: +"How many nodes with an error or a warning come back. Errors come first, and the report says how many it left out."
      • removedInput schema / properties / node_limit / title
        Removed value: -"Node Limit"
      • addedInput schema / properties / node_limit / type
        Added value: +"integer"
      • removedInput schema / properties / root_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / root_path / description
        Added value: +"The network that node_errors walks, for example /obj or /stage."
      • removedInput schema / properties / root_path / title
        Removed value: -"Root Path"
      • addedInput schema / properties / root_path / type
        Added value: +"string"
      • removedInput schema / properties / severity / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / severity / default
        Removed value: -null
      • addedInput schema / properties / severity / description
        Added value: +"Keep one level only: \"message\", \"important\", \"warning\", \"error\" or \"fatal\"."
      • removedInput schema / properties / severity / title
        Removed value: -"Severity"
      • addedInput schema / properties / severity / type
        Added value: +"string"
      • removedInput schema / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / source / default
        Removed value: -null
      • addedInput schema / properties / source / description
        Added value: +"Keep the entries whose source holds this text, for example \"Python\"."
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • addedInput schema / properties / source / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedcook31 fields changed
      • removedInput schema / properties / force / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / force / description
        Added value: +"Cook even when Houdini thinks the node is up to date."
      • removedInput schema / properties / force / title
        Removed value: -"Force"
      • addedInput schema / properties / force / type
        Added value: +"boolean"
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"[start, end]: every frame between. For cook and cache_write."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"One frame, a list of frames, or {\"start\": 1001, \"end\": 1010, \"step\": 2}. For cook. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\". The description says what each one does."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / num_steps / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / num_steps / description
        Added value: +"How many frames sim_step steps the DOP network."
      • removedInput schema / properties / num_steps / title
        Removed value: -"Num Steps"
      • addedInput schema / properties / num_steps / type
        Added value: +"integer"
      • addedInput schema / properties / parameters / additionalProperties
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / parameters / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"Values to write before the cook, as {\"/obj/geo1/pyro\": {\"divsize\": 0.05}}. The result says which writes changed nothing."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • addedInput schema / properties / parameters / type
        Added value: +"object"
      • addedInput schema / properties / paths / description
        Added value: +"The node to cook, or a list of nodes."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changeddocs39 fields changed
      • removedInput schema / properties / build / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / build / default
        Removed value: -null
      • addedInput schema / properties / build / description
        Added value: +"The Houdini build to read, for example \"21.0.829\". Default: the build of the attached session, then $HFS, then the newest build on this machine."
      • removedInput schema / properties / build / title
        Removed value: -"Build"
      • addedInput schema / properties / build / type
        Added value: +"string"
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"query: keep the search inside one folder, for example \"nodes/sop\", \"vex/functions\" or \"hom/hou\". node with a type name: the context, for example \"sop\" or \"lop\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / description
        Added value: +"query: how many hits come back."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node / default
        Removed value: -null
      • addedInput schema / properties / node / description
        Added value: +"A node path in the scene, for example \"/obj/geo1/attribwrangle1\", or a node type name, for example \"mountain\". Returns the page of that node type."
      • removedInput schema / properties / node / title
        Removed value: -"Node"
      • addedInput schema / properties / node / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / page / default
        Removed value: -null
      • addedInput schema / properties / page / description
        Added value: +"A page path from a hit, for example \"nodes/sop/copytopoints\". A loose name or a sidefx.com address also works."
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • addedInput schema / properties / page / type
        Added value: +"string"
      • removedInput schema / properties / part / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / part / description
        Added value: +"A long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones."
      • removedInput schema / properties / part / title
        Removed value: -"Part"
      • addedInput schema / properties / part / type
        Added value: +"integer"
      • removedInput schema / properties / query / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / query / default
        Removed value: -null
      • addedInput schema / properties / query / description
        Added value: +"Words to search, for example \"copy to points\". Returns the hits with their page paths."
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • addedInput schema / properties / query / type
        Added value: +"string"
      • removedInput schema / properties / section / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / section / default
        Removed value: -null
      • addedInput schema / properties / section / description
        Added value: +"Read only the part of a page under one heading, for example \"Quick renders and flipbooks\". A long page lists its headings."
      • removedInput schema / properties / section / title
        Removed value: -"Section"
      • addedInput schema / properties / section / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedexecute49 fields changed
      • removedInput schema / properties / args / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / args / default
        Removed value: -null
      • addedInput schema / properties / args / description
        Added value: +"file: the values of sys.argv[1:]."
      • addedInput schema / properties / args / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / args / title
        Removed value: -"Args"
      • addedInput schema / properties / args / type
        Added value: +"array"
      • removedInput schema / properties / background / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / background / description
        Added value: +"python: return at once with a job id and let the script run. Read it with mode job. Other calls wait until it ends."
      • removedInput schema / properties / background / title
        Removed value: -"Background"
      • addedInput schema / properties / background / type
        Added value: +"boolean"
      • removedInput schema / properties / file / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / file / default
        Removed value: -null
      • addedInput schema / properties / file / description
        Added value: +"A Python file to run instead of source, as from a shell: __file__ is its path, __name__ is \"__main__\", args are in sys.argv[1:]. The text travels once."
      • removedInput schema / properties / file / title
        Removed value: -"File"
      • addedInput schema / properties / file / type
        Added value: +"string"
      • addedInput schema / properties / globals / additionalProperties
        Added value: +true
      • removedInput schema / properties / globals / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / globals / default
        Removed value: -null
      • addedInput schema / properties / globals / description
        Added value: +"Names that exist before the script runs, for example {\"radius\": 2.0}."
      • removedInput schema / properties / globals / title
        Removed value: -"Globals"
      • addedInput schema / properties / globals / type
        Added value: +"object"
      • removedInput schema / properties / job / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / job / default
        Removed value: -null
      • addedInput schema / properties / job / description
        Added value: +"job: the job id that background returned."
      • removedInput schema / properties / job / title
        Removed value: -"Job"
      • addedInput schema / properties / job / type
        Added value: +"string"
      • removedInput schema / properties / language / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / language / description
        Added value: +"expression: \"hscript\" or \"python\"."
      • removedInput schema / properties / language / title
        Removed value: -"Language"
      • addedInput schema / properties / language / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"python\", \"hscript\", \"expression\", \"vex_check\", \"env\", \"job\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"env: the Houdini variable to read, for example \"HIP\"."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / source / default
        Removed value: -null
      • addedInput schema / properties / source / description
        Added value: +"The code: Python, HScript, an expression or VEX, as mode says."
      • removedInput schema / properties / source / title
        Removed value: -"Source"
      • addedInput schema / properties / source / type
        Added value: +"string"
      • removedInput schema / properties / timeout / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / timeout / description
        Added value: +"The seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays."
      • removedInput schema / properties / timeout / title
        Removed value: -"Timeout"
      • addedInput schema / properties / timeout / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedgeometry_inspect131 fields changed
      • removedInput schema / properties / against / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / against / default
        Removed value: -null
      • addedInput schema / properties / against / description
        Added value: +"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`."
      • removedInput schema / properties / against / title
        Removed value: -"Against"
      • addedInput schema / properties / against / type
        Added value: +"string"
      • removedInput schema / properties / attrib_class / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attrib_class / description
        Added value: +"attrib: \"point\", \"prim\", \"vertex\" or \"detail\"."
      • removedInput schema / properties / attrib_class / title
        Removed value: -"Attrib Class"
      • addedInput schema / properties / attrib_class / type
        Added value: +"string"
      • removedInput schema / properties / attrib_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attrib_name / default
        Removed value: -null
      • addedInput schema / properties / attrib_name / description
        Added value: +"attrib: the attribute to read."
      • removedInput schema / properties / attrib_name / title
        Removed value: -"Attrib Name"
      • addedInput schema / properties / attrib_name / type
        Added value: +"string"
      • removedInput schema / properties / attribs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attribs / default
        Removed value: -null
      • addedInput schema / properties / attribs / description
        Added value: +"points: the attributes to return, for example [\"P\", \"Cd\"]."
      • addedInput schema / properties / attribs / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / attribs / title
        Removed value: -"Attribs"
      • addedInput schema / properties / attribs / type
        Added value: +"array"
      • changedInput schema / properties / bins / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / bins / default
        Removed value: -null
      • addedInput schema / properties / bins / description
        Added value: +"volume_stats, volume_sample, volume_compare: a count of equal bands, or a list of band edges, for example [-1, 0, 0.05, 0.15, 0.25]."
      • removedInput schema / properties / bins / title
        Removed value: -"Bins"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"points, prims: how many elements. Keep it small: a large read is slow."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • removedInput schema / properties / format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / format / description
        Added value: +"export: the file type, for example \"obj\" or \"bgeo\"."
      • removedInput schema / properties / format / title
        Removed value: -"Format"
      • addedInput schema / properties / format / type
        Added value: +"string"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at other frames, without moving the playbar: one frame, a list, or {\"start\": 1001, \"end\": 1010, \"step\": 2}. One answer for each frame."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / from_node / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / from_node / default
        Removed value: -null
      • addedInput schema / properties / from_node / description
        Added value: +"volume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF."
      • removedInput schema / properties / from_node / title
        Removed value: -"From Node"
      • addedInput schema / properties / from_node / type
        Added value: +"string"
      • removedInput schema / properties / group_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / group_name / default
        Removed value: -null
      • addedInput schema / properties / group_name / description
        Added value: +"group_members: the group to read."
      • removedInput schema / properties / group_name / title
        Removed value: -"Group Name"
      • addedInput schema / properties / group_name / type
        Added value: +"string"
      • removedInput schema / properties / group_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / group_type / description
        Added value: +"groups, group_members: \"point\", \"prim\", \"vertex\" or \"edge\"."
      • removedInput schema / properties / group_type / title
        Removed value: -"Group Type"
      • addedInput schema / properties / group_type / type
        Added value: +"string"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / limit / default
        Removed value: -null
      • addedInput schema / properties / limit / description
        Added value: +"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000)."
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / match_attrib / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_attrib / description
        Added value: +"compare: the attribute that pairs the points of the two nodes, not their order."
      • removedInput schema / properties / match_attrib / title
        Removed value: -"Match Attrib"
      • addedInput schema / properties / match_attrib / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"volume_stats: one volume to read. volume_voxels, volume_compare: the field."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / names / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / names / default
        Removed value: -null
      • addedInput schema / properties / names / description
        Added value: +"volume_sample: the fields to read."
      • addedInput schema / properties / names / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / names / title
        Removed value: -"Names"
      • addedInput schema / properties / names / type
        Added value: +"array"
      • removedInput schema / properties / output / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output / default
        Removed value: -null
      • addedInput schema / properties / output / description
        Added value: +"export: the file path to write."
      • removedInput schema / properties / output / title
        Removed value: -"Output"
      • addedInput schema / properties / output / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The SOP or COP node to read, or a list. A list keeps going after a node that fails, and each result names its path."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"skeleton: keep the joints whose name matches."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / plane_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / plane_name / description
        Added value: +"image: the COP plane to read, for example \"C\"."
      • removedInput schema / properties / plane_name / title
        Removed value: -"Plane Name"
      • addedInput schema / properties / plane_name / type
        Added value: +"string"
      • removedInput schema / properties / position / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / position / default
        Removed value: -null
      • addedInput schema / properties / position / description
        Added value: +"nearest: [x, y, z]."
      • addedInput schema / properties / position / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / position / title
        Removed value: -"Position"
      • addedInput schema / properties / position / type
        Added value: +"array"
      • removedInput schema / properties / positions / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "items": {
        -        "type": "number"
        -      },
        -      "type": "array"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / positions / default
        Removed value: -null
      • addedInput schema / properties / positions / description
        Added value: +"volume_sample: the [x, y, z] points to read at."
      • addedInput schema / properties / positions / items
        Added value: +{
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / positions / title
        Removed value: -"Positions"
      • addedInput schema / properties / positions / type
        Added value: +"array"
      • removedInput schema / properties / prim_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / prim_index / description
        Added value: +"intrinsics: the primitive to read."
      • removedInput schema / properties / prim_index / title
        Removed value: -"Prim Index"
      • addedInput schema / properties / prim_index / type
        Added value: +"integer"
      • removedInput schema / properties / reduce / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / reduce / default
        Removed value: -null
      • addedInput schema / properties / reduce / description
        Added value: +"volume_voxels: one answer instead of the array: \"sum\", \"mean\", \"max\", \"min\", \"project_x\", \"project_y\" or \"project_z\"."
      • removedInput schema / properties / reduce / title
        Removed value: -"Reduce"
      • addedInput schema / properties / reduce / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start / description
        Added value: +"points, prims, attrib: the first element. Page with it."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"integer"
      • removedInput schema / properties / steps / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / steps / default
        Removed value: -null
      • addedInput schema / properties / steps / description
        Added value: +"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry as verbs. Nothing changes in the scene."
      • addedInput schema / properties / steps / items
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / steps / title
        Removed value: -"Steps"
      • addedInput schema / properties / steps / type
        Added value: +"array"
      • removedInput schema / properties / threshold / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / threshold / default
        Removed value: -null
      • addedInput schema / properties / threshold / description
        Added value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it."
      • removedInput schema / properties / threshold / title
        Removed value: -"Threshold"
      • addedInput schema / properties / threshold / type
        Added value: +"number"
      • removedInput schema / properties / unique / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / unique / description
        Added value: +"attrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry."
      • removedInput schema / properties / unique / title
        Removed value: -"Unique"
      • addedInput schema / properties / unique / type
        Added value: +"boolean"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedhda45 fields changed
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"list: keep one node category, for example \"Sop\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / content / default
        Removed value: -null
      • addedInput schema / properties / content / description
        Added value: +"section_set: the text to write into the section."
      • removedInput schema / properties / content / title
        Removed value: -"Content"
      • addedInput schema / properties / content / type
        Added value: +"string"
      • removedInput schema / properties / file_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / file_path / default
        Removed value: -null
      • addedInput schema / properties / file_path / description
        Added value: +"install, uninstall, reload: the .hda file. create: the file to write."
      • removedInput schema / properties / file_path / title
        Removed value: -"File Path"
      • addedInput schema / properties / file_path / type
        Added value: +"string"
      • removedInput schema / properties / label / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / label / default
        Removed value: -null
      • addedInput schema / properties / label / description
        Added value: +"create: the name that the TAB menu shows."
      • removedInput schema / properties / label / title
        Removed value: -"Label"
      • addedInput schema / properties / label / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"list\", \"get\", \"install\", \"uninstall\", \"reload\", \"update\", \"create\", \"sections\", \"section_get\", \"section_set\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create: the type name of the new asset."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / node_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_path / default
        Removed value: -null
      • addedInput schema / properties / node_path / description
        Added value: +"update: the node to save into its asset. create: the subnet to make an asset from."
      • removedInput schema / properties / node_path / title
        Removed value: -"Node Path"
      • addedInput schema / properties / node_path / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • removedInput schema / properties / section_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / section_name / default
        Removed value: -null
      • addedInput schema / properties / section_name / description
        Added value: +"section_get, section_set: the section, for example \"PythonModule\"."
      • removedInput schema / properties / section_name / title
        Removed value: -"Section Name"
      • addedInput schema / properties / section_name / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changednode_edit131 fields changed
      • removedInput schema / properties / bypass / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / bypass / default
        Removed value: -null
      • addedInput schema / properties / bypass / description
        Added value: +"flags: the bypass flag."
      • removedInput schema / properties / bypass / title
        Removed value: -"Bypass"
      • addedInput schema / properties / bypass / type
        Added value: +"boolean"
      • removedInput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / code / default
        Removed value: -null
      • addedInput schema / properties / code / description
        Added value: +"wrangle: the VEX snippet."
      • removedInput schema / properties / code / title
        Removed value: -"Code"
      • addedInput schema / properties / code / type
        Added value: +"string"
      • removedInput schema / properties / code_file / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / code_file / default
        Removed value: -null
      • addedInput schema / properties / code_file / description
        Added value: +"wrangle: read the VEX from this file, so a long snippet travels once."
      • removedInput schema / properties / code_file / title
        Removed value: -"Code File"
      • addedInput schema / properties / code_file / type
        Added value: +"string"
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / color / default
        Removed value: -null
      • addedInput schema / properties / color / description
        Added value: +"color, note, box: [r, g, b] from 0 to 1."
      • addedInput schema / properties / color / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / color / title
        Removed value: -"Color"
      • addedInput schema / properties / color / type
        Added value: +"array"
      • removedInput schema / properties / context / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / context / default
        Removed value: -null
      • addedInput schema / properties / context / description
        Added value: +"create: the network kind, \"sop\" (default), \"cop\", \"chop\", \"lop\" or \"material_network\"."
      • removedInput schema / properties / context / title
        Removed value: -"Context"
      • addedInput schema / properties / context / type
        Added value: +"string"
      • removedInput schema / properties / destination_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / destination_path / default
        Removed value: -null
      • addedInput schema / properties / destination_path / description
        Added value: +"copy, move: the network to put the nodes in."
      • removedInput schema / properties / destination_path / title
        Removed value: -"Destination Path"
      • addedInput schema / properties / destination_path / type
        Added value: +"string"
      • removedInput schema / properties / display / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / display / default
        Removed value: -null
      • addedInput schema / properties / display / description
        Added value: +"flags: the display flag."
      • removedInput schema / properties / display / title
        Removed value: -"Display"
      • addedInput schema / properties / display / type
        Added value: +"boolean"
      • removedInput schema / properties / input_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / input_path / default
        Removed value: -null
      • addedInput schema / properties / input_path / description
        Added value: +"create: the node that feeds the new node. It saves a connect call and places the node under its input."
      • removedInput schema / properties / input_path / title
        Removed value: -"Input Path"
      • addedInput schema / properties / input_path / type
        Added value: +"string"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of items for a repeated action, each a dictionary with the keys of one call. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / material_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / material_path / default
        Removed value: -null
      • addedInput schema / properties / material_path / description
        Added value: +"assign_material: the material node."
      • removedInput schema / properties / material_path / title
        Removed value: -"Material Path"
      • addedInput schema / properties / material_path / type
        Added value: +"string"
      • removedInput schema / properties / material_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / material_type / default
        Removed value: -null
      • addedInput schema / properties / material_type / description
        Added value: +"material: the shader type, for example \"principledshader\"."
      • removedInput schema / properties / material_type / title
        Removed value: -"Material Type"
      • addedInput schema / properties / material_type / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create, material: the name of the new node. take: the name of a new take."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • addedInput schema / properties / names / additionalProperties
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / names / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": {
        -      "type": "string"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / names / default
        Removed value: -null
      • addedInput schema / properties / names / description
        Added value: +"copy: a new name for each source, by source path or name."
      • removedInput schema / properties / names / title
        Removed value: -"Names"
      • addedInput schema / properties / names / type
        Added value: +"object"
      • removedInput schema / properties / new_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / new_name / default
        Removed value: -null
      • addedInput schema / properties / new_name / description
        Added value: +"rename: the new name."
      • removedInput schema / properties / new_name / title
        Removed value: -"New Name"
      • addedInput schema / properties / new_name / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"create: the node type, for example \"box\" or \"attribwrangle\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • addedInput schema / properties / parameters / additionalProperties
        Added value: +true
      • removedInput schema / properties / parameters / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"create, material: values to set on the new node, by parameter name."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • addedInput schema / properties / parameters / type
        Added value: +"object"
      • removedInput schema / properties / parent_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parent_path / default
        Removed value: -null
      • addedInput schema / properties / parent_path / description
        Added value: +"create, wrangle, note: the network that gets the new node."
      • removedInput schema / properties / parent_path / title
        Removed value: -"Parent Path"
      • addedInput schema / properties / parent_path / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"The node to change. layout: the network. delete: a node, a sticky note or a network box."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / paths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box."
      • addedInput schema / properties / paths / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • addedInput schema / properties / paths / type
        Added value: +"array"
      • removedInput schema / properties / position / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / position / default
        Removed value: -null
      • addedInput schema / properties / position / description
        Added value: +"create, move, note: [x, y] on the canvas."
      • addedInput schema / properties / position / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / position / title
        Removed value: -"Position"
      • addedInput schema / properties / position / type
        Added value: +"array"
      • removedInput schema / properties / render / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / render / default
        Removed value: -null
      • addedInput schema / properties / render / description
        Added value: +"flags: the render flag, which is not the display flag."
      • removedInput schema / properties / render / title
        Removed value: -"Render"
      • addedInput schema / properties / render / type
        Added value: +"boolean"
      • removedInput schema / properties / replace / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": {
        -        "type": "string"
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / replace / default
        Removed value: -null
      • addedInput schema / properties / replace / description
        Added value: +"wrangle: edit the snippet in place, a list of {\"old\": ..., \"new\": ...}. Each old must appear exactly once."
      • addedInput schema / properties / replace / items
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • removedInput schema / properties / replace / title
        Removed value: -"Replace"
      • addedInput schema / properties / replace / type
        Added value: +"array"
      • removedInput schema / properties / suffix / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / suffix / default
        Removed value: -null
      • addedInput schema / properties / suffix / description
        Added value: +"copy: text added to the name of each copy."
      • removedInput schema / properties / suffix / title
        Removed value: -"Suffix"
      • addedInput schema / properties / suffix / type
        Added value: +"string"
      • removedInput schema / properties / take_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / take_name / default
        Removed value: -null
      • addedInput schema / properties / take_name / description
        Added value: +"take: the take to make current."
      • removedInput schema / properties / take_name / title
        Removed value: -"Take Name"
      • addedInput schema / properties / take_name / type
        Added value: +"string"
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "note: the text of the note. box: the comment of the box.",
        +  "type": "string"
        +}
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changednode_inspect60 fields changed
      • removedInput schema / properties / channel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel / default
        Removed value: -null
      • addedInput schema / properties / channel / description
        Added value: +"channels: the CHOP channel whose samples to read."
      • removedInput schema / properties / channel / title
        Removed value: -"Channel"
      • addedInput schema / properties / channel / type
        Added value: +"string"
      • removedInput schema / properties / end / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / end / default
        Removed value: -null
      • addedInput schema / properties / end / description
        Added value: +"channels: the last sample frame."
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • addedInput schema / properties / end / type
        Added value: +"number"
      • removedInput schema / properties / field_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / field_name / default
        Removed value: -null
      • addedInput schema / properties / field_name / description
        Added value: +"simulation: the field of object_name to read."
      • removedInput schema / properties / field_name / title
        Removed value: -"Field Name"
      • addedInput schema / properties / field_name / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / fields / default
        Removed value: -null
      • addedInput schema / properties / fields / description
        Added value: +"parms, changed: keep only these keys of each parameter, for example [\"value\", \"expression\"]. The name is always kept."
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / fields / title
        Removed value: -"Fields"
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. With time_dependency, time each node. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / has_expression / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / has_expression / description
        Added value: +"parms: keep only the parameters that carry an expression."
      • removedInput schema / properties / has_expression / title
        Removed value: -"Has Expression"
      • addedInput schema / properties / has_expression / type
        Added value: +"boolean"
      • removedInput schema / properties / include_all_parms / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_all_parms / description
        Added value: +"info: list every parameter, not only the ones that changed."
      • removedInput schema / properties / include_all_parms / title
        Removed value: -"Include All Parms"
      • addedInput schema / properties / include_all_parms / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"info\", \"parms\", \"schema\", \"changed\", \"names\", \"expression\", \"keyframes\", \"code\", \"cook_chain\", \"explain\", \"material\", \"image\", \"channels\", \"simulation\", \"render_settings\", \"cache\", \"time_dependency\", \"validate\", \"layout\", \"readers\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / object_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / object_name / default
        Removed value: -null
      • addedInput schema / properties / object_name / description
        Added value: +"simulation: the DOP object to read."
      • removedInput schema / properties / object_name / title
        Removed value: -"Object Name"
      • addedInput schema / properties / object_name / type
        Added value: +"string"
      • removedInput schema / properties / parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm / default
        Removed value: -null
      • addedInput schema / properties / parm / description
        Added value: +"parms, expression, keyframes, readers: the parameter name."
      • removedInput schema / properties / parm / title
        Removed value: -"Parm"
      • addedInput schema / properties / parm / type
        Added value: +"string"
      • addedInput schema / properties / paths / description
        Added value: +"One node path, or a list. A list keeps going after a node that fails, and each result names its path."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"parms, changed: keep the parameters whose name or label holds this text or matches it as a glob. \"|\" separates alternatives: \"time|step|cfl\"."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"channels: the first sample frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedparm_set107 fields changed
      • removedInput schema / properties / channel_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / channel_name / default
        Removed value: -null
      • addedInput schema / properties / channel_name / description
        Added value: +"chop_export: the channel that drives the parameter."
      • removedInput schema / properties / channel_name / title
        Removed value: -"Channel Name"
      • addedInput schema / properties / channel_name / type
        Added value: +"string"
      • removedInput schema / properties / chop_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / chop_path / default
        Removed value: -null
      • addedInput schema / properties / chop_path / description
        Added value: +"chop_export: the CHOP node."
      • removedInput schema / properties / chop_path / title
        Removed value: -"Chop Path"
      • addedInput schema / properties / chop_path / type
        Added value: +"string"
      • removedInput schema / properties / default / anyOf
        Removed value: -[
        -  {},
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / default / default
        Removed value: -null
      • addedInput schema / properties / default / description
        Added value: +"spare: the default of one control."
      • removedInput schema / properties / default / title
        Removed value: -"Default"
      • removedInput schema / properties / expression / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / expression / default
        Removed value: -null
      • addedInput schema / properties / expression / description
        Added value: +"expression: the expression text."
      • removedInput schema / properties / expression / title
        Removed value: -"Expression"
      • addedInput schema / properties / expression / type
        Added value: +"string"
      • removedInput schema / properties / follow_reference / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / follow_reference / description
        Added value: +"Write the node at the other end of a channel reference. Without it, a write through a reference is refused."
      • removedInput schema / properties / follow_reference / title
        Removed value: -"Follow Reference"
      • addedInput schema / properties / follow_reference / type
        Added value: +"boolean"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"keyframe, delete_keyframe: the frame of the key."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"number"
      • changedInput schema / properties / items / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / items / default
        Removed value: -null
      • addedInput schema / properties / items / description
        Added value: +"A list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one."
      • removedInput schema / properties / items / title
        Removed value: -"Items"
      • removedInput schema / properties / keyframes / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / keyframes / default
        Removed value: -null
      • addedInput schema / properties / keyframes / description
        Added value: +"keyframes: a list of {frame, value}."
      • addedInput schema / properties / keyframes / items
        Added value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
      • removedInput schema / properties / keyframes / title
        Removed value: -"Keyframes"
      • addedInput schema / properties / keyframes / type
        Added value: +"array"
      • removedInput schema / properties / label / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / label / default
        Removed value: -null
      • addedInput schema / properties / label / description
        Added value: +"spare: the label of one control."
      • removedInput schema / properties / label / title
        Removed value: -"Label"
      • addedInput schema / properties / label / type
        Added value: +"string"
      • removedInput schema / properties / language / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / language / description
        Added value: +"expression: \"hscript\" or \"python\"."
      • removedInput schema / properties / language / title
        Removed value: -"Language"
      • addedInput schema / properties / language / type
        Added value: +"string"
      • removedInput schema / properties / locked / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / locked / default
        Removed value: -null
      • addedInput schema / properties / locked / description
        Added value: +"lock: true locks the parameter, false unlocks it."
      • removedInput schema / properties / locked / title
        Removed value: -"Locked"
      • addedInput schema / properties / locked / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"value\", \"press\", \"expression\", \"keyframe\", \"keyframes\", \"delete_keyframe\", \"revert\", \"lock\", \"link\", \"spare\", \"render_settings\", \"chop_export\", \"snapshot\", \"restore\", \"diff\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"spare: the name of one control. snapshot, restore, diff: the record on disk."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / properties / parameters / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / parameters / default
        Removed value: -null
      • addedInput schema / properties / parameters / description
        Added value: +"value: several names and values in one write, as a dictionary. spare: the list of controls to add."
      • removedInput schema / properties / parameters / title
        Removed value: -"Parameters"
      • removedInput schema / properties / parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm / default
        Removed value: -null
      • addedInput schema / properties / parm / description
        Added value: +"The parameter name, for example \"tx\" or \"divsize\"."
      • removedInput schema / properties / parm / title
        Removed value: -"Parm"
      • addedInput schema / properties / parm / type
        Added value: +"string"
      • removedInput schema / properties / parm_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / parm_type / default
        Removed value: -null
      • addedInput schema / properties / parm_type / description
        Added value: +"spare: the type of one control, for example \"float\" or \"toggle\"."
      • removedInput schema / properties / parm_type / title
        Removed value: -"Parm Type"
      • addedInput schema / properties / parm_type / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"The node that holds the parameter."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / paths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"snapshot: the nodes to save; \"/obj/geo1/*\" names every node in a network. restore: put back only these nodes."
      • addedInput schema / properties / paths / items
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • addedInput schema / properties / paths / type
        Added value: +"array"
      • addedInput schema / properties / settings / additionalProperties
        Added value: +true
      • removedInput schema / properties / settings / anyOf
        Removed value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / settings / default
        Removed value: -null
      • addedInput schema / properties / settings / description
        Added value: +"render_settings: the ROP parameters to write, by name."
      • removedInput schema / properties / settings / title
        Removed value: -"Settings"
      • addedInput schema / properties / settings / type
        Added value: +"object"
      • removedInput schema / properties / src_parm / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_parm / default
        Removed value: -null
      • addedInput schema / properties / src_parm / description
        Added value: +"link: the parameter to follow."
      • removedInput schema / properties / src_parm / title
        Removed value: -"Src Parm"
      • addedInput schema / properties / src_parm / type
        Added value: +"string"
      • removedInput schema / properties / src_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / src_path / default
        Removed value: -null
      • addedInput schema / properties / src_path / description
        Added value: +"link: the node to follow."
      • removedInput schema / properties / src_path / title
        Removed value: -"Src Path"
      • addedInput schema / properties / src_path / type
        Added value: +"string"
      • removedInput schema / properties / value / anyOf
        Removed value: -[
        -  {},
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / value / default
        Removed value: -null
      • addedInput schema / properties / value / description
        Added value: +"value, keyframe: the value to write. A menu takes its token."
      • removedInput schema / properties / value / title
        Removed value: -"Value"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedpdg16 fields changed
      • removedInput schema / properties / dirty_all / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dirty_all / description
        Added value: +"dirty: also remove the outputs of the node on disk."
      • removedInput schema / properties / dirty_all / title
        Removed value: -"Dirty All"
      • addedInput schema / properties / dirty_all / type
        Added value: +"boolean"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"status\", \"workitems\", \"cook\", \"dirty\", \"cancel\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The TOP network or the TOP node."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / state / default
        Removed value: -null
      • addedInput schema / properties / state / description
        Added value: +"workitems: keep the items in this state, for example \"failed\" or \"cooked\"."
      • removedInput schema / properties / state / title
        Removed value: -"State"
      • addedInput schema / properties / state / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedplaybar25 fields changed
      • removedInput schema / properties / action / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / action / default
        Removed value: -null
      • addedInput schema / properties / action / description
        Added value: +"play: \"play\", \"stop\", \"next\", \"previous\", \"start\" or \"end\"."
      • removedInput schema / properties / action / title
        Removed value: -"Action"
      • addedInput schema / properties / action / type
        Added value: +"string"
      • removedInput schema / properties / end / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / end / default
        Removed value: -null
      • addedInput schema / properties / end / description
        Added value: +"range and playback: the last frame."
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • addedInput schema / properties / end / type
        Added value: +"number"
      • removedInput schema / properties / frame / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame / default
        Removed value: -null
      • addedInput schema / properties / frame / description
        Added value: +"frame: the frame to go to."
      • removedInput schema / properties / frame / title
        Removed value: -"Frame"
      • addedInput schema / properties / frame / type
        Added value: +"number"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"get\", \"frame\", \"range\", \"playback\", \"play\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / start / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / start / default
        Removed value: -null
      • addedInput schema / properties / start / description
        Added value: +"range and playback: the first frame."
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • addedInput schema / properties / start / type
        Added value: +"number"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedrender34 fields changed
      • removedInput schema / properties / frame_range / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / frame_range / default
        Removed value: -null
      • addedInput schema / properties / frame_range / description
        Added value: +"start: [start, end]. Without it the ROP renders its own range."
      • addedInput schema / properties / frame_range / items
        Added value: +{
        +  "type": "number"
        +}
      • removedInput schema / properties / frame_range / title
        Removed value: -"Frame Range"
      • addedInput schema / properties / frame_range / type
        Added value: +"array"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / name / default
        Removed value: -null
      • addedInput schema / properties / name / description
        Added value: +"create: the name of the new ROP."
      • removedInput schema / properties / name / title
        Removed value: -"Name"
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / output_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / output_path / default
        Removed value: -null
      • addedInput schema / properties / output_path / description
        Added value: +"watch: the image file to look for on disk."
      • removedInput schema / properties / output_path / title
        Removed value: -"Output Path"
      • addedInput schema / properties / output_path / type
        Added value: +"string"
      • removedInput schema / properties / parent_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_path / description
        Added value: +"create: the network that gets the ROP."
      • removedInput schema / properties / parent_path / title
        Removed value: -"Parent Path"
      • addedInput schema / properties / parent_path / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"start, progress, settings: the ROP node."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / render_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / render_type / description
        Added value: +"create: the ROP kind, for example \"opengl\", \"karma\", \"mantra\" or \"ifd\"."
      • removedInput schema / properties / render_type / title
        Removed value: -"Render Type"
      • addedInput schema / properties / render_type / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedscene_file11 fields changed
      • addedInput schema / properties / count
        Added value: +{
        +  "default": 1,
        +  "description": "undo and redo: how many steps.",
        +  "type": "integer"
        +}
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"info\", \"save\", \"load\", \"undo\", \"redo\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"save: the file to write; empty saves over the open file. load: the .hip file to open."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedscene_overview29 fields changed
      • removedInput schema / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / category / default
        Removed value: -null
      • addedInput schema / properties / category / description
        Added value: +"node_types: the context, for example \"Sop\", \"Object\", \"Lop\" or \"Driver\"."
      • removedInput schema / properties / category / title
        Removed value: -"Category"
      • addedInput schema / properties / category / type
        Added value: +"string"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • removedInput schema / properties / node_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / node_type / default
        Removed value: -null
      • addedInput schema / properties / node_type / description
        Added value: +"search: keep the nodes of this type, for example \"null\"."
      • removedInput schema / properties / node_type / title
        Removed value: -"Node Type"
      • addedInput schema / properties / node_type / type
        Added value: +"string"
      • removedInput schema / properties / path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / path / default
        Removed value: -null
      • addedInput schema / properties / path / description
        Added value: +"A node path such as \"/obj\" or \"/obj/geo1\": the network to list or to search."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • addedInput schema / properties / path / type
        Added value: +"string"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"search: the name to match, with * and ? as wildcards."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / recursive / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / recursive / description
        Added value: +"children: also list the children of the children."
      • removedInput schema / properties / recursive / title
        Removed value: -"Recursive"
      • addedInput schema / properties / recursive / type
        Added value: +"boolean"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedselect5 fields changed
      • changedInput schema / properties / paths / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / paths / default
        Removed value: -null
      • addedInput schema / properties / paths / description
        Added value: +"Leave it out to read the selection. One path or a list of paths replaces it. An empty list clears it."
      • removedInput schema / properties / paths / title
        Removed value: -"Paths"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedsession20 fields changed
      • removedInput schema / properties / action / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / action / description
        Added value: +"One of \"status\", \"list\", \"attach\", \"detach\", \"interrupt\", \"start\", \"start_gui\", \"stop\"."
      • removedInput schema / properties / action / title
        Removed value: -"Action"
      • addedInput schema / properties / action / type
        Added value: +"string"
      • removedInput schema / properties / hip / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / hip / default
        Removed value: -null
      • addedInput schema / properties / hip / description
        Added value: +"start_gui: the .hip file to open."
      • removedInput schema / properties / hip / title
        Removed value: -"Hip"
      • addedInput schema / properties / hip / type
        Added value: +"string"
      • removedInput schema / properties / port / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / port / default
        Removed value: -null
      • addedInput schema / properties / port / description
        Added value: +"attach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one."
      • removedInput schema / properties / port / title
        Removed value: -"Port"
      • addedInput schema / properties / port / type
        Added value: +"integer"
      • removedInput schema / properties / version / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / version / default
        Removed value: -null
      • addedInput schema / properties / version / description
        Added value: +"start and start_gui: the Houdini release, for example \"21.0\" or \"21.0.829\"."
      • removedInput schema / properties / version / title
        Removed value: -"Version"
      • addedInput schema / properties / version / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
    • Changedstage_inspect51 fields changed
      • removedInput schema / properties / attr_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / attr_name / default
        Removed value: -null
      • addedInput schema / properties / attr_name / description
        Added value: +"attribute: the attribute to read, for example \"points\"."
      • removedInput schema / properties / attr_name / title
        Removed value: -"Attr Name"
      • addedInput schema / properties / attr_name / type
        Added value: +"string"
      • removedInput schema / properties / count / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count / description
        Added value: +"modified: how many prims come back."
      • removedInput schema / properties / count / title
        Removed value: -"Count"
      • addedInput schema / properties / count / type
        Added value: +"integer"
      • changedInput schema / properties / frames / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "items": {
        -      "type": "number"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "additionalProperties": {
        -      "type": "number"
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "items": {
        +      "type": "number"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "additionalProperties": {
        +      "type": "number"
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / frames / default
        Removed value: -null
      • addedInput schema / properties / frames / description
        Added value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. The playbar goes back after."
      • removedInput schema / properties / frames / title
        Removed value: -"Frames"
      • removedInput schema / properties / include_attrs / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_attrs / description
        Added value: +"prim: also return the attributes of the prim."
      • removedInput schema / properties / include_attrs / title
        Removed value: -"Include Attrs"
      • addedInput schema / properties / include_attrs / type
        Added value: +"boolean"
      • removedInput schema / properties / layer_index / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / layer_index / description
        Added value: +"layer: which layer of the stack, from 0 (the strongest)."
      • removedInput schema / properties / layer_index / title
        Removed value: -"Layer Index"
      • addedInput schema / properties / layer_index / type
        Added value: +"integer"
      • removedInput schema / properties / max_depth / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / max_depth / description
        Added value: +"prims: how many levels of the tree come back."
      • removedInput schema / properties / max_depth / title
        Removed value: -"Max Depth"
      • addedInput schema / properties / max_depth / type
        Added value: +"integer"
      • removedInput schema / properties / mode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mode / description
        Added value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."
      • removedInput schema / properties / mode / title
        Removed value: -"Mode"
      • addedInput schema / properties / mode / type
        Added value: +"string"
      • addedInput schema / properties / path / description
        Added value: +"The LOP node whose stage to read."
      • removedInput schema / properties / path / title
        Removed value: -"Path"
      • removedInput schema / properties / pattern / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / pattern / default
        Removed value: -null
      • addedInput schema / properties / pattern / description
        Added value: +"search: the prim path to match, with * as a wildcard."
      • removedInput schema / properties / pattern / title
        Removed value: -"Pattern"
      • addedInput schema / properties / pattern / type
        Added value: +"string"
      • removedInput schema / properties / prim_path / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / prim_path / default
        Removed value: -null
      • addedInput schema / properties / prim_path / description
        Added value: +"prim, attribute, composition, variants, stats, transform: the prim, for example \"/world/geo/rock\"."
      • removedInput schema / properties / prim_path / title
        Removed value: -"Prim Path"
      • addedInput schema / properties / prim_path / type
        Added value: +"string"
      • removedInput schema / properties / root_prim / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / root_prim / description
        Added value: +"prims: the prim where the tree starts."
      • removedInput schema / properties / root_prim / title
        Removed value: -"Root Prim"
      • addedInput schema / properties / root_prim / type
        Added value: +"string"
      • removedInput schema / properties / type_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / type_name / default
        Removed value: -null
      • addedInput schema / properties / type_name / description
        Added value: +"search: keep the prims of this type, for example \"Mesh\" or \"SphereLight\"."
      • removedInput schema / properties / type_name / title
        Removed value: -"Type Name"
      • addedInput schema / properties / type_name / type
        Added value: +"string"
      • removedInput schema / title
        Removed value: -"toolArguments"
  6. 187 tool updatesv0.1.1
    • Removedassign_material
    • Removedassign_material_workflow
    • Changedbatch5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / operations / default
        Removed value: -[]
      • addedInput schema / properties / operations / items / additionalProperties
        Added value: +true
      • addedInput schema / required
        Added value: +[
        +  "operations"
        +]
      • changedInput schema / title
        Previous value: -"batchArguments"New value: +"toolArguments"
    • Removedbuild_sop_chain
    • Addedcapture
    • Removedcapture_screenshot
    • Removedclear_cache
    • Addedconnect
    • Removedconnect_nodes
    • Removedconnect_nodes_batch
    • Addedconsole
    • Addedcook
    • Removedcopy_node
    • Removedcreate_chop_node
    • Removedcreate_cop_node
    • Removedcreate_lop_node
    • Removedcreate_material_network
    • Removedcreate_material_workflow
    • Removedcreate_node
    • Removedcreate_render_node
    • Removedcreate_spare_parameter
    • Removedcreate_spare_parameters
    • Removedcreate_take
    • Removedcreate_vex_expression
    • Removedcreate_wrangle
    • Removeddelete_keyframe
    • Removeddelete_node
    • Removeddisconnect_node_input
    • Addeddocs
    • Removedevaluate_expression
    • Addedexecute
    • Removedexecute_houdini_code
    • Removedexecute_hscript
    • Removedexplain_node
    • Removedexport_chop_to_parm
    • Removedfind_error_nodes
    • Removedfind_nearest_point
    • Removedfind_nodes
    • Removedframe_all
    • Removedframe_selection
    • Removedgeo_export
    • Addedgeometry_inspect
    • Removedget_attrib_values
    • Removedget_bounding_box
    • Removedget_cache_status
    • Removedget_changed_parms
    • Removedget_chop_data
    • Removedget_connection_status
    • Removedget_cook_chain
    • Removedget_cop_geometry
    • Removedget_cop_info
    • Removedget_cop_layer
    • Removedget_cop_vdb
    • Removedget_current_take
    • Removedget_doc
    • Removedget_dop_field
    • Removedget_dop_object
    • Removedget_dop_relationships
    • Removedget_env_variable
    • Removedget_expression
    • Removedget_frame
    • Removedget_geo_summary
    • Removedget_group_members
    • Removedget_groups
    • Removedget_hda_section_content
    • Removedget_hda_sections
    • Removedget_houdini_events
    • Removedget_keyframes
    • Removedget_last_modified_prims
    • Removedget_material_info
    • Removedget_network_overview
    • Removedget_node_doc
    • Removedget_node_info
    • Removedget_parameter
    • Removedget_parameter_schema
    • Removedget_points
    • Removedget_prim_intrinsics
    • Removedget_prims
    • Removedget_render_progress
    • Removedget_render_settings
    • Removedget_scene_info
    • Removedget_scene_summary
    • Removedget_selection
    • Removedget_sim_memory_usage
    • Removedget_simulation_info
    • Removedget_usd_attribute
    • Removedget_usd_composition
    • Removedget_usd_prim_stats
    • Removedget_usd_variants
    • Removedget_viewport_info
    • Removedget_wrangle_code
    • Addedhda
    • Removedhda_create
    • Removedhda_get
    • Removedhda_install
    • Removedhda_list
    • Removedinspect_usd_layer
    • Removedlayout_children
    • Removedlink_parameters
    • Removedlist_caches
    • Removedlist_children
    • Removedlist_chop_channels
    • Removedlist_cop_node_types
    • Removedlist_dop_objects
    • Removedlist_lights
    • Removedlist_material_types
    • Removedlist_materials
    • Removedlist_node_types
    • Removedlist_panes
    • Removedlist_render_nodes
    • Removedlist_takes
    • Removedlist_usd_prims
    • Removedload_scene
    • Removedlock_parameter
    • Removedlop_import
    • Removedlop_layer_info
    • Removedlop_prim_get
    • Removedlop_prim_search
    • Removedlop_stage_info
    • Removedmodify_node
    • Removedmonitor_render
    • Removedmove_node
    • Addednode_edit
    • Addednode_inspect
    • Addedparm_set
    • Addedpdg
    • Removedpdg_cancel
    • Removedpdg_cook
    • Removedpdg_dirty
    • Removedpdg_status
    • Removedpdg_workitems
    • Removedping
    • Addedplaybar
    • Removedplaybar_control
    • Removedreload_hda
    • Removedrename_node
    • Addedrender
    • Removedrender_flipbook
    • Removedrender_quad_views
    • Removedrender_single_view
    • Removedrender_specific_camera
    • Removedreorder_inputs
    • Removedreset_simulation
    • Removedrevert_parameter
    • Removedsave_scene
    • Addedscene_file
    • Addedscene_overview
    • Removedsearch_docs
    • Addedselect
    • Addedsession
    • Removedset_cop_flags
    • Removedset_current_network
    • Removedset_current_take
    • Removedset_detail_attrib
    • Removedset_expression
    • Removedset_frame
    • Removedset_frame_range
    • Removedset_hda_section_content
    • Removedset_keyframe
    • Removedset_keyframes
    • Removedset_material
    • Removedset_node_color
    • Removedset_node_flags
    • Removedset_parameter
    • Removedset_parameters
    • Removedset_playback_range
    • Removedset_render_settings
    • Removedset_selection
    • Removedset_usd_attribute
    • Removedset_viewport_camera
    • Removedset_viewport_direction
    • Removedset_viewport_display
    • Removedset_viewport_renderer
    • Removedset_wrangle_code
    • Removedsetup_flip_sim
    • Removedsetup_pyro_sim
    • Removedsetup_rbd_sim
    • Removedsetup_render
    • Removedsetup_vellum_sim
    • Addedstage_inspect
    • Removedstart_render
    • Removedstep_simulation
    • Removedsubscribe_houdini_events
    • Removeduninstall_hda
    • Removedupdate_hda
    • Removedvalidate_vex
    • Removedwrite_cache
  7. 168 tool updatesv0.1.0
    • First observedassign_material
    • First observedassign_material_workflow
    • First observedbatch
    • First observedbuild_sop_chain
    • First observedcapture_screenshot
    • First observedclear_cache
    • First observedconnect_nodes
    • First observedconnect_nodes_batch
    • First observedcopy_node
    • First observedcreate_chop_node
    • First observedcreate_cop_node
    • First observedcreate_lop_node
    • First observedcreate_material_network
    • First observedcreate_material_workflow
    • First observedcreate_node
    • First observedcreate_render_node
    • First observedcreate_spare_parameter
    • First observedcreate_spare_parameters
    • First observedcreate_take
    • First observedcreate_vex_expression
    • First observedcreate_wrangle
    • First observeddelete_keyframe
    • First observeddelete_node
    • First observeddisconnect_node_input
    • First observedevaluate_expression
    • First observedexecute_houdini_code
    • First observedexecute_hscript
    • First observedexplain_node
    • First observedexport_chop_to_parm
    • First observedfind_error_nodes
    • First observedfind_nearest_point
    • First observedfind_nodes
    • First observedframe_all
    • First observedframe_selection
    • First observedgeo_export
    • First observedget_attrib_values
    • First observedget_bounding_box
    • First observedget_cache_status
    • First observedget_changed_parms
    • First observedget_chop_data
    • First observedget_connection_status
    • First observedget_cook_chain
    • First observedget_cop_geometry
    • First observedget_cop_info
    • First observedget_cop_layer
    • First observedget_cop_vdb
    • First observedget_current_take
    • First observedget_doc
    • First observedget_dop_field
    • First observedget_dop_object
    • First observedget_dop_relationships
    • First observedget_env_variable
    • First observedget_expression
    • First observedget_frame
    • First observedget_geo_summary
    • First observedget_group_members
    • First observedget_groups
    • First observedget_hda_section_content
    • First observedget_hda_sections
    • First observedget_houdini_events
    • First observedget_keyframes
    • First observedget_last_modified_prims
    • First observedget_material_info
    • First observedget_network_overview
    • First observedget_node_doc
    • First observedget_node_info
    • First observedget_parameter
    • First observedget_parameter_schema
    • First observedget_points
    • First observedget_prim_intrinsics
    • First observedget_prims
    • First observedget_render_progress
    • First observedget_render_settings
    • First observedget_scene_info
    • First observedget_scene_summary
    • First observedget_selection
    • First observedget_sim_memory_usage
    • First observedget_simulation_info
    • First observedget_usd_attribute
    • First observedget_usd_composition
    • First observedget_usd_prim_stats
    • First observedget_usd_variants
    • First observedget_viewport_info
    • First observedget_wrangle_code
    • First observedhda_create
    • First observedhda_get
    • First observedhda_install
    • First observedhda_list
    • First observedinspect_usd_layer
    • First observedlayout_children
    • First observedlink_parameters
    • First observedlist_caches
    • First observedlist_children
    • First observedlist_chop_channels
    • First observedlist_cop_node_types
    • First observedlist_dop_objects
    • First observedlist_lights
    • First observedlist_material_types
    • First observedlist_materials
    • First observedlist_node_types
    • First observedlist_panes
    • First observedlist_render_nodes
    • First observedlist_takes
    • First observedlist_usd_prims
    • First observedload_scene
    • First observedlock_parameter
    • First observedlop_import
    • First observedlop_layer_info
    • First observedlop_prim_get
    • First observedlop_prim_search
    • First observedlop_stage_info
    • First observedmodify_node
    • First observedmonitor_render
    • First observedmove_node
    • First observedpdg_cancel
    • First observedpdg_cook
    • First observedpdg_dirty
    • First observedpdg_status
    • First observedpdg_workitems
    • First observedping
    • First observedplaybar_control
    • First observedreload_hda
    • First observedrename_node
    • First observedrender_flipbook
    • First observedrender_quad_views
    • First observedrender_single_view
    • First observedrender_specific_camera
    • First observedreorder_inputs
    • First observedreset_simulation
    • First observedrevert_parameter
    • First observedsave_scene
    • First observedsearch_docs
    • First observedset_cop_flags
    • First observedset_current_network
    • First observedset_current_take
    • First observedset_detail_attrib
    • First observedset_expression
    • First observedset_frame
    • First observedset_frame_range
    • First observedset_hda_section_content
    • First observedset_keyframe
    • First observedset_keyframes
    • First observedset_material
    • First observedset_node_color
    • First observedset_node_flags
    • First observedset_parameter
    • First observedset_parameters
    • First observedset_playback_range
    • First observedset_render_settings
    • First observedset_selection
    • First observedset_usd_attribute
    • First observedset_viewport_camera
    • First observedset_viewport_direction
    • First observedset_viewport_display
    • First observedset_viewport_renderer
    • First observedset_wrangle_code
    • First observedsetup_flip_sim
    • First observedsetup_pyro_sim
    • First observedsetup_rbd_sim
    • First observedsetup_render
    • First observedsetup_vellum_sim
    • First observedstart_render
    • First observedstep_simulation
    • First observedsubscribe_houdini_events
    • First observeduninstall_hda
    • First observedupdate_hda
    • First observedvalidate_vex
    • First observedwrite_cache

TDQS

A4.4/5.0

Scored across 20 tools

Disambiguation4/5

Each tool has a clearly stated domain, and the descriptions explicitly route between capture/render/cook/pdg and between scene_overview/node_inspect/geometry_inspect/stage_inspect. The main residual ambiguity comes from batch and execute, which can overlap with any mutation tool, though the descriptions warn against misuse.

Naming Consistency3/5

All names are lowercase snake_case and readable, but the set mixes bare verbs (capture, cook, render), bare nouns (batch, console, docs, hda, pdg, session), and noun_verb compounds (node_edit, parm_set, geometry_inspect). There is no single predictable pattern, though it is not chaotic.

Tool Count4/5

20 tools is on the heavy side, but Houdini is a very broad domain and the tools partition major subsystems such as scene, nodes, geometry, USD, rendering, PDG, HDA, and sessions. Each tool earns its place, though several are mega-tools with many modes.

Completeness5/5

The surface covers scene files, node lifecycle, parameter writes, wiring, inspection across SOP/COP/CHOP/DOP/LOP/TOP, rendering, caching, simulation, HDA management, docs, console, selection, playbar, sessions, and an escape hatch. No major workflow dead end is apparent.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Connects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender for AI-assisted 3D modeling, scene manipulation, and rendering.
    21
    32,810
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects Houdini to Claude AI through Model Context Protocol, enabling AI-assisted 3D modeling, scene creation, simulation setup, and rendering through natural language commands.
    59
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude AI to Houdini via the Model Context Protocol, enabling prompt-assisted 3D modeling, scene manipulation, and rendering within Houdini.
    11
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude AI to Houdini through the Model Context Protocol, enabling direct interaction and control for 3D modeling, scene creation, simulation, and rendering.
    20
    MIT