HoudiniMCP
Connects AI agents to SideFX Houdini for reading, editing, running, rendering, documenting, and automating scenes via MCP.
Read scenes and nodes:
scene_overview,node_inspect,geometry_inspect,stage_inspect,select,console.Edit networks and assets: create/delete/copy/move/rename/color/layout nodes, set parameters, connect wires, manage HDAs, and run atomic multi-step
batchbuilds.Run Houdini operations: cook nodes/frames, manage caches and simulations, render through ROPs, run PDG/TOP work items, control playbar, and save/load/undo scene files.
See visual results: capture viewport, quad views, camera views, flipbooks, frame sheets, or MP4 movies.
Execute code: Python, HScript, expressions, VEX compile checks, environment lookups, and background jobs.
Read offline Houdini docs: search/read node, VEX, HOM, and manual pages from the installed build.
Manage sessions: status/list/attach/detach/start headless/GUI/interrupt/stop Houdini sessions.
Supports headless Hython when no GUI is open and returns JSON results with errors, warnings, and session info.
Controls SideFX Houdini via MCP, providing tools for scene management, node operations, parameters, rendering, geometry, PDG/TOPs, USD/Solaris, HDAs, animation, VEX, DOPs, viewport, COPs, CHOPs, takes, cache, and more through Houdini's Python API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HoudiniMCPcreate a sphere and apply a noise to it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 | bashuv
uv tool install houdini-mcp-server && houdinimcp-installThe 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 --frozenbuilds an environment fromuv.lockin the plugin folder, then starts the MCP server from this repository.The server talks to Houdini on
localhostonly. It startshython, orhoudinion request, from your Houdini install, andffmpegto encode a flipbook movie.docsreads the documentation out of your Houdini install with houdinimd-docs. It sends nothing over the network.houdini-setupwrites the HoudiniMCP package into your Houdini preferences folder, after you approve it.No tool sends data to a remote service.
executeruns any Python that Claude writes in your Houdini session.
Related MCP server: HoudiniMCP
Tools
Read |
|
Edit |
|
Run |
|
See |
|
Code |
|
Docs |
|
Session |
|
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:
executeruns 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. |
Houdini started from Git Bash has no plugin | Git Bash sets |
| The session is headless. Call |
You must have a fixed port | Set |
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 entryFlags: --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 toolsbatchADestructive
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/non-idempotent, and the description adds substantial context beyond them: validation-before-execution, the exact failure/rollback semantics (a failed batch changes nothing, prior steps undone), the error format naming step index, the return shape, and the side effect of cooking touched SOP networks so `check` must be read afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and constraints are front-loaded in the first two paragraphs, failure semantics follow, and return behavior closes. Despite length, every paragraph carries a distinct operational fact with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-step mutation tool with no output schema, the description covers the essentials: atomic rollback, error identification, return ordering, cook side effects, and capture file behavior. Nothing critical to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents that each step is {"tool": ..., "params": ...} with any tool except batch. The description reinforces ordering ('in the order of the operations') but does not add syntax or format beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: run several Houdini tools in one call. It is unmistakably the batch executor among siblings like cook, parm_set, and connect, which run one operation each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use (building a network in one round trip and one undo group) and an explicit when-not-to-use condition: 'Do not use it when a later step needs to read what an earlier step made.' The branching limitation is stated as a hard rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
captureAIdempotent
Make a picture of the scene and look at it.
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.
"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.
Both 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.
There is no picture of the network editor: every Houdini pane is a native
GL drawable, and Qt draws nothing into it. Read the graph with node_inspect.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | movie: frames per second. | |
| fill | No | How much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it. | |
| mode | No | One of "viewport", "quad", "camera", "flipbook", "sheet", "movie". | viewport |
| node | No | 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. | |
| slab | No | [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. | |
| step | No | sheet: the frames between tiles. Over 2 hides movement and gives a warning. | |
| count | No | sheet: how many tiles, when frames is not given. | |
| frame | No | What to frame the view on: "selection", "all", or a node path (the box of what that node cooked). | |
| start | No | sheet: the first frame. Without it, the current frame. | |
| camera | No | camera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim. | |
| frames | No | 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. | |
| output | No | The file to write. Without it, a temporary file. | |
| radius | No | The distance between target and look_from. | |
| settle | No | 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. | |
| target | No | [x, y, z]: the point that the view turns around. | |
| azimuth | No | Degrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene. | |
| columns | No | sheet: tiles in each row. | |
| contour | No | 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. | |
| shading | No | One of "smooth", "smooth_wire", "flat", "wireframe". | |
| vectors | No | sheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error. | |
| color_by | No | 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. | |
| renderer | No | The Hydra renderer of a viewer on a LOP network, for example "Karma CPU". An unknown name lists the ones available. | |
| direction | No | The view axis: "top", "front", "left", "right", "back", "bottom" or "persp". | |
| elevation | No | Degrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view. | |
| look_from | No | [x, y, z]: the point that the view looks from. | |
| reference | No | sheet: a picture file to put in the first tile, to compare. | |
| background | No | sheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey. | |
| resolution | No | [width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched. | |
| tile_width | No | sheet: the width of each tile in pixels. | |
| color_range | No | [low, high] for color_by. Without it, [0, 1]. | |
| frame_range | No | flipbook and movie: [start, end]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the view and display flag are restored afterward ('Nothing here changes the scene for good'), that headless Houdini has no viewport and runs in a new hython with no camera or ROP, that flipbook/movie return paths rather than pictures, that frames cook in order, and that certain inputs emit warnings. This is exactly the temporary-mutation nuance that the readOnlyHint=false/destructiveHint=false annotations only hint at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose and mode list are good, but the prose is long and stylistically loose, and the headless 'no window has no viewport' point is made twice (once in the mode block, once later), which is wasted space for a 31-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains the return (the picture plus JSON with frame, open file, selection, visible network, and display/render/template flags) and the headless failure path that names the next action. For a zero-required-parameter tool with 100% schema coverage, the agent has what it needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds real cross-parameter routing the schema lacks: which parameters each mode consumes (sheet uses count/start/step/columns/tile_width, movie uses fps/frame_range/resolution), that step>2 hides movement and warns, and the aiming-equivalents among frame/fill/target/azimuth/elevation/camera. It stops short of documenting every parameter, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Make a picture of the scene and look at it') and immediately distinguishes itself from the sibling that would otherwise be confusable, render, plus node_inspect for graph reading. An agent can pick this over render 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('confirm your own work', 'before you report that a task is done'), an explicit when-not ('Do not use it for a final picture: render does that through a ROP'), and names the alternative for the network-editor case. 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.
connectAIdempotent
Change how nodes feed each other.
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.
"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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "connect", "disconnect", "reorder". | connect |
| path | No | disconnect and reorder: the node whose inputs change. | |
| items | No | 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. | |
| dst_path | No | connect: the node whose input takes the wire. | |
| src_path | No | connect: the node whose output feeds the wire. | |
| input_index | No | disconnect: the input that loses its wire, from 0. | |
| input_indices | No | reorder: the old input indices in their new order, for example [1, 0]. | |
| dst_input_index | No | connect: the input of dst_path, from 0. | |
| src_output_index | No | connect: the output of src_path, from 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true), and the description adds genuinely new behavioral context: a wire into an occupied input is replaced, a batch of wires lands in one undo group and one round trip, and invalid input indices are reported rather than silently dropped. That is exactly the kind of operational detail the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose, then when-to-use/when-not-to-use, then mode semantics, then return shape. The mode block is somewhat verbose and partially duplicates schema descriptions, but every line is functional for a 9-parameter, 3-mode tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all three modes, batching via `items`, index conventions, conflict resolution, and return format, and it even notes the outcome for invalid indices despite an output schema existing. An agent has everything needed to call it correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the floor, and the description earns above it by explaining what the indices mean behaviorally (count from 0, dst_input_index picks the input, replacement on conflict) and which keys each `items` entry takes per mode. It still restates a fair amount of what the schema already says, keeping it out of 5 territory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names the resource (node wiring) and the mode list makes the specific operations concrete: connect, disconnect, reorder, each with the exact semantics of src_path/dst_path/indices. 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing ('Use it after node_edit made the nodes') plus two named exclusions with the alternative to use instead: node_edit mode "create" for wiring a node made in the same call, and scene_overview mode "network" for reading wires. 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.
consoleARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many log entries come back, the newest ones. | |
| source | No | Keep the entries whose source holds this text, for example "Python". | |
| severity | No | Keep one level only: "message", "important", "warning", "error" or "fatal". | |
| root_path | No | The network that node_errors walks, for example /obj or /stage. | /obj |
| node_limit | No | How many nodes with an error or a warning come back. Errors come first, and the report says how many it left out. | |
| node_errors | No | Also report the nodes under root_path that hold an error or a warning. False gives the log alone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
cookADestructive
Force work to happen, and report what the work said and what it cost.
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.
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 can take minutes:
the call waits, and a timeout does not stop the cook. Cook a long range in
parts of a few seconds, so that one call does not block Houdini past the
timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "cook", "cache_write", "cache_clear", "sim_step", "sim_reset". The description says what each one does. | cook |
| force | No | Cook even when Houdini thinks the node is up to date. | |
| paths | Yes | The node to cook, or a list of nodes. | |
| frames | No | One frame, a list of frames, or {"start": 1001, "end": 1010, "step": 2}. For cook. The playbar goes back after. | |
| num_steps | No | How many frames sim_step steps the DOP network. | |
| parameters | No | Values to write before the cook, as {"/obj/geo1/pyro": {"divsize": 0.05}}. The result says which writes changed nothing. | |
| frame_range | No | [start, end]: every frame between. For cook and cache_write. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a destructive, non-idempotent mutation, and the description goes well beyond them: it explains playbar restoration, sim_reset's silent-stale-result failure mode, that a timeout does not stop the cook, and that a long cook should be split into parts. It also discloses the `ok`/`failed` upstream-error reporting and empty-simulation failure condition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, then usage, then a mode table, then returns; each section is purposeful. It is dense and occasionally restates schema text (playbar restoration, frame_range semantics), which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex seven-parameter, multi-mode, destructive tool, the description covers every mode's behavior, the return contract, failure semantics, and timeout guidance. Nothing needed to invoke it correctly is missing, even though an output schema already exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: it explains how mode selects the meaning of frames vs frame_range, that parameters writes report which changes had no effect, and the default range behavior for cache_write. This is above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Force work to happen, and report what the work said and what it cost') and enumerates the five modes with distinct semantics. It explicitly differentiates itself from the sibling geometry_inspect, so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('run a test: write a few parameters, cook a range of frames, and read the seconds'), and an explicit exclusion ('Do not use it to read the result: geometry_inspect does that, and it cooks the node as well'). When-to-use, when-not, and the alternative are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | 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. | |
| page | No | A page path from a hit, for example "nodes/sop/copytopoints". A loose name or a sidefx.com address also works. | |
| part | No | A long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones. | |
| build | No | 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. | |
| limit | No | query: how many hits come back. | |
| query | No | Words to search, for example "copy to points". Returns the hits with their page paths. | |
| section | No | Read only the part of a page under one heading, for example "Quick renders and flipbooks". A long page lists its headings. | |
| category | No | 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". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
executeADestructive
Run code in Houdini, with the full hou module and no guard.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | job: the job id that background returned. | |
| args | No | file: the values of sys.argv[1:]. | |
| file | No | 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. | |
| mode | No | One of "python", "hscript", "expression", "vex_check", "env", "job". | python |
| name | No | env: the Houdini variable to read, for example "HIP". | |
| source | No | The code: Python, HScript, an expression or VEX, as mode says. | |
| globals | No | Names that exist before the script runs, for example {"radius": 2.0}. | |
| timeout | No | The seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays. | |
| language | No | expression: "hscript" or "python". | hscript |
| background | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/openWorld/non-idempotent, but the description adds concrete consequences beyond them: code runs with Houdini process rights and can write files, delete nodes and quit Houdini; writes to expression-driven, disabled/hidden, or range-clamped parameters silently do nothing; channel-reference writes affect other nodes; write_warnings must be read. It also discloses blocking behavior ('Houdini answers nothing while a script runs', 'other calls are refused' during a background job) and that a timed-out script's changes persist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the capability, the danger, and the routing rule before the mode enumeration. Dense and mostly waste-free, though the mode list makes it long enough that some readers may skim past the write_warnings and blocking notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, output-schema-bearing power tool, it covers everything an agent needs: mode semantics, safety consequences, blocking/timeout behavior, and the write_warnings field it must read. Nothing essential is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further than the schema by explaining what each `mode` actually does — stdout/stderr retention on python, that vex_check compiles without running, that env reads a Houdini variable, that job reports running/output/done state. It also clarifies file/args/globals interplay and timeout persistence, adding real meaning over the terse schema strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run code in Houdini') and immediately qualifies scope with 'with the full `hou` module and no guard', which distinguishes it from the named node/parameter tools. It also positions itself against siblings: 'Use it for what no other tool covers.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: 'Prefer a named tool when one exists', use `file` for re-run scripts, use `background` with a large `timeout` for long work, and session action='interrupt' to stop it. It even tells the agent what to do when it finds itself repeating a script (report the missing named tool in session feedback).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geometry_inspectAIdempotent
Read the geometry that a node produces. This cooks the node.
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.
"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.
"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 `output`
is the file path. A file that is there is
overwritten. The other modes write nothing.
Returns JSON. A large read is slow: keep `count` small and page with
`start`.
| Name | Required | Description | Default |
|---|---|---|---|
| bins | No | 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]. | |
| mode | No | 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". | summary |
| name | No | volume_stats: one volume to read. volume_voxels, volume_compare: the field. | |
| path | Yes | 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. | |
| count | No | points, prims: how many elements. Keep it small: a large read is slow. | |
| limit | No | 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). | |
| names | No | volume_sample: the fields to read. | |
| start | No | points, prims, attrib: the first element. Page with it. | |
| steps | No | try: a list of {"node_type": ..., "parameters": {...}} to run on the geometry as verbs. Nothing changes in the scene. | |
| format | No | export: the file type, for example "obj" or "bgeo". | obj |
| frames | No | Read at other frames, without moving the playbar: one frame, a list, or {"start": 1001, "end": 1010, "step": 2}. One answer for each frame. | |
| output | No | export: the file path to write. | |
| reduce | No | volume_voxels: one answer instead of the array: "sum", "mean", "max", "min", "project_x", "project_y" or "project_z". | |
| unique | No | attrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry. | |
| against | No | compare: the node to compare with. volume_compare: the field whose bands hold the field `name`. | |
| attribs | No | points: the attributes to return, for example ["P", "Cd"]. | |
| pattern | No | skeleton: keep the joints whose name matches. | |
| position | No | nearest: [x, y, z]. | |
| from_node | No | volume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF. | |
| positions | No | volume_sample: the [x, y, z] points to read at. | |
| threshold | No | volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. | |
| group_name | No | group_members: the group to read. | |
| group_type | No | groups, group_members: "point", "prim", "vertex" or "edge". | point |
| plane_name | No | image: the COP plane to read, for example "C". | C |
| prim_index | No | intrinsics: the primitive to read. | |
| attrib_name | No | attrib: the attribute to read. | |
| attrib_class | No | attrib: "point", "prim", "vertex" or "detail". | point |
| match_attrib | No | compare: the attribute that pairs the points of the two nodes, not their order. | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects beyond the annotations: cooking the node, that 'export' overwrites an existing file while 'the other modes write nothing', that 'try' leaves the scene unchanged, that an empty summary carries the node's errors/warnings, and a performance warning ('A large read is slow: keep count small and page with start'). This is consistent with readOnlyHint=false and adds real context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then when-to-use, then a scannable mode list, which is the right structure for a 19-mode tool. It is long, and some mode entries duplicate the schema's own parameter descriptions (bins, limit, reduce), but almost every sentence carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 28-parameter, 19-mode tool this covers the selection surface thoroughly: mode purposes, defaults, side effects, performance guidance, and multi-path/frames behavior. An output schema exists, so return-value shape is correctly left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so baseline is 3, but the description goes further by binding parameters to specific modes and explaining behavior the schema states only tersely (e.g. 'unique=True returns each value that occurs and how many elements carry it', 'An array past limit numbers is thinned', the skeleton 'pattern' filter). It is largely a restatement of the per-mode parameter map rather than new syntax detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Read the geometry that a node produces') and immediately scopes it against the closest sibling ('Do not use it to read parameters: node_inspect does that'). An agent can distinguish this from node_inspect 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('confirm that a node made what you expected'), when not to ('read parameters'), and gives a recommended starting mode ('summary ... Start here'). It also routes the agent to the right mode for a given question (e.g. 'compare' to prove a replacement node matches, 'try' to learn what a node would make).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hdaADestructive
Read and change Houdini digital assets.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "list", "get", "install", "uninstall", "reload", "update", "create", "sections", "section_get", "section_set". | list |
| name | No | create: the type name of the new asset. | |
| label | No | create: the name that the TAB menu shows. | |
| content | No | section_set: the text to write into the section. | |
| category | No | list: keep one node category, for example "Sop". | |
| file_path | No | install, uninstall, reload: the .hda file. create: the file to write. | |
| node_path | No | update: the node to save into its asset. create: the subnet to make an asset from. | |
| node_type | No | 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". | |
| section_name | No | section_get, section_set: the section, for example "PythonModule". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description adds the key scope warning that 'install' and 'uninstall' change every node of that type in the session, and notes the return type (JSON). It does not call out which modes are read-only vs mutating explicitly, but the destructive blast radius is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and routing, then a well-structured mode-by-mode list where each line adds actionable detail. Slightly verbose overall but nearly every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained, and the description covers all ten modes with their parameter bindings plus the session-wide side effect. Complete enough for correct invocation, with only minor gaps in per-mode read/write labeling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already binds each parameter to its modes (the baseline would be 3). The description adds semantic value by explaining what each mode does with the parameters, e.g. section_set writes `content` into `section_name` and install loads the file at `file_path`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read and change Houdini digital assets') and immediately scopes the domain to .hda files. It explicitly distinguishes itself from the sibling node_inspect, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('when a node type comes from a .hda file') and when-not ('Do not use it for the parameters of one node in the scene: node_inspect does that'), naming the alternative. The mode list further maps each intent to an action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_editADestructive
Change the nodes in a network. One item, or a list in one undo group.
Use it to build a network. Then use parm_set for the values, and connect
for the wires.
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, of a node, a sticky note or a network box.
"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 in
rows, each node under its inputs. Give `paths` to
place only those nodes next to what they connect
to. Without it the whole network moves, including
the nodes the user placed by hand, and the result
says so.
"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.
"box" — paths, text, color: a network box around those
nodes, with text as its comment.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | wrangle: the VEX snippet. | |
| mode | No | One of "create", "delete", "copy", "move", "rename", "flags", "color", "layout", "wrangle", "material", "assign_material", "take", "current_network", "note", "box". | create |
| name | No | create, material: the name of the new node. take: the name of a new take. | |
| path | No | The node to change. layout: the network. delete: a node, a sticky note or a network box. | |
| text | No | note: the text of the note. box: the comment of the box. | |
| color | No | color, note, box: [r, g, b] from 0 to 1. | |
| items | No | 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. | |
| names | No | copy: a new name for each source, by source path or name. | |
| paths | No | copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box. | |
| bypass | No | flags: the bypass flag. | |
| render | No | flags: the render flag, which is not the display flag. | |
| suffix | No | copy: text added to the name of each copy. | |
| context | No | create: the network kind, "sop" (default), "cop", "chop", "lop" or "material_network". | |
| display | No | flags: the display flag. | |
| replace | No | wrangle: edit the snippet in place, a list of {"old": ..., "new": ...}. Each old must appear exactly once. | |
| new_name | No | rename: the new name. | |
| position | No | create, move, note: [x, y] on the canvas. | |
| code_file | No | wrangle: read the VEX from this file, so a long snippet travels once. | |
| node_type | No | create: the node type, for example "box" or "attribwrangle". | |
| take_name | No | take: the take to make current. | |
| input_path | No | create: the node that feeds the new node. It saves a connect call and places the node under its input. | |
| parameters | No | create, material: values to set on the new node, by parameter name. | |
| parent_path | No | create, wrangle, note: the network that gets the new node. | |
| material_path | No | assign_material: the material node. | |
| material_type | No | material: the shader type, for example "principledshader". | |
| destination_path | No | copy, move: the network to put the nodes in. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, readOnlyHint=false. The description adds real value beyond them: undo-group batching, the warning that 'layout' moves hand-placed nodes, that delete also removes sticky notes/boxes, copy wire-following behavior, and the critical Houdini auto-suffix caveat plus 'never look the node up again by the name you asked for.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but for a 26-param, 15-mode dispatcher the length is justified and heavily structured with a mode-to-arguments table. The purpose and the parm_set/connect routing are front-loaded. Slightly dense but no clearly wasted sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, nested params, and 15 modes, the description is complete: it covers argument selection per mode, undo semantics, and the key post-call invariant about reading the returned path. An output schema exists, so return-value details are not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 grouping arguments by mode and stating cross-parameter interactions (path vs destination_path for move, replace's 'must appear exactly once' rule, code_file for long snippets) that the flat schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change/edit) and resource (nodes in a network) and immediately distinguishes itself from siblings by naming parm_set for values and connect for wires. The mode list makes the full scope of the tool concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: build the network with this, set values with parm_set, make wires with connect, and 'Do not use it to set parameters: parm_set does that.' This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_inspectARead-onlyIdempotent
Read one node, or a list of nodes, without changing anything.
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,
and each pair of nodes in one slot, where one name
covers the other. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | channels: the last sample frame. | |
| mode | No | 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". | info |
| parm | No | parms, expression, keyframes, readers: the parameter name. | |
| paths | Yes | One node path, or a list. A list keeps going after a node that fails, and each result names its path. | |
| start | No | channels: the first sample frame. | |
| fields | No | parms, changed: keep only these keys of each parameter, for example ["value", "expression"]. The name is always kept. | |
| frames | No | 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. | |
| channel | No | channels: the CHOP channel whose samples to read. | |
| pattern | No | parms, changed: keep the parameters whose name or label holds this text or matches it as a glob. "|" separates alternatives: "time|step|cfl". | |
| field_name | No | simulation: the field of object_name to read. | |
| object_name | No | simulation: the DOP object to read. | |
| has_expression | No | parms: keep only the parameters that carry an expression. | |
| include_all_parms | No | info: list every parameter, not only the ones that changed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint), yet the description still adds real behavioral context: a failed node in a list does not abort the rest and each result names its path, the playbar is restored after multi-frame reads, and an empty geometry with no error line means the node cooked and produced nothing. That is disclosure beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, usage and exclusion before the mode reference, which is well structured as a scannable block. The size is largely justified by 20 mode values, though several lines are chatty ('and nothing else', 'Read this first when you do not know the name to write') and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, 20-mode inspection tool with an output schema and full annotation coverage, the description covers mode semantics, pre-write usage, failure behavior and list semantics. Nothing an agent needs to select a mode and call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the per-parameter terse descriptions already exist; the description adds value by binding parameters to modes ('With `frames` it times each one', '`channel`, `start` and `end` read the samples of one channel', 'give pattern or fields' for solvers) and by expanding every `mode` value beyond the schema's flat list. It stops short of adding format/syntax detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 then explicitly distinguishes itself from the sibling that could be confused with it: 'Do not use it to list a network: scene_overview does that.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage trigger ('Use it before you write: to confirm a parameter name, to see whether a parameter carries an expression...'), an explicit exclusion, and names the alternative tool (scene_overview) for the excluded case. It also routes within itself ('Read this first when you do not know the name to write', 'Read it after you add nodes').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parm_setADestructive
Write parameter values, or press a button. One write, or a list in one undo group.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "value", "press", "expression", "keyframe", "keyframes", "delete_keyframe", "revert", "lock", "link", "spare", "render_settings", "chop_export", "snapshot", "restore", "diff". | value |
| name | No | spare: the name of one control. snapshot, restore, diff: the record on disk. | |
| parm | No | The parameter name, for example "tx" or "divsize". | |
| path | No | The node that holds the parameter. | |
| frame | No | keyframe, delete_keyframe: the frame of the key. | |
| items | No | A list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one. | |
| label | No | spare: the label of one control. | |
| paths | No | snapshot: the nodes to save; "/obj/geo1/*" names every node in a network. restore: put back only these nodes. | |
| value | No | value, keyframe: the value to write. A menu takes its token. | |
| locked | No | lock: true locks the parameter, false unlocks it. | |
| default | No | spare: the default of one control. | |
| language | No | expression: "hscript" or "python". | hscript |
| settings | No | render_settings: the ROP parameters to write, by name. | |
| src_parm | No | link: the parameter to follow. | |
| src_path | No | link: the node to follow. | |
| chop_path | No | chop_export: the CHOP node. | |
| keyframes | No | keyframes: a list of {frame, value}. | |
| parm_type | No | spare: the type of one control, for example "float" or "toggle". | |
| expression | No | expression: the expression text. | |
| parameters | No | value: several names and values in one write, as a dictionary. spare: the list of controls to add. | |
| channel_name | No | chop_export: the channel that drives the parameter. | |
| follow_reference | No | Write the node at the other end of a channel reference. Without it, a write through a reference is refused. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the generic destructiveHint/readOnlyHint/idempotentHint profile; the description adds substantial non-obvious behavior: the six causes of a silently-accepted no-op write, the refusal of writes through channel references unless follow_reference=true, the instruction to read warnings and not_applied before reporting success, snapshot overwriting an existing record, and diff being a no-op. This is exactly the context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but it is front-loaded (purpose, prerequisite, failure modes, then mode-by-mode arguments) and nearly every sentence carries operational weight. The mode enumeration partly restates the schema's mode enum, which is the main redundancy, but the per-mode argument detail justifies the length for a 15-mode tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained, and the description still adds the key caveat that success must be verified via warnings and not_applied. With 15 modes, 22 optional parameters and nested objects, nothing an agent needs to invoke this correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes well past the schema: it maps every mode to the arguments it reads, clarifies menu/bit-field token syntax, and documents the spare control dictionary (name, label, type, default, min, max, strict, help, value, expression, items) with per-type defaults like ramp as [position, value]. That is meaning beyond the schema's per-field strings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource — 'Write parameter values, or press a button' — and immediately scopes batching ('One write, or a list in one undo group'). It also positions itself relative to sibling node_inspect ('Use it after node_inspect has confirmed the parameter name and the type'), so an agent can route between inspection and mutation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real prerequisite (confirm name/type via node_inspect first), mode-selection guidance ('Use it instead of numbers typed into VEX' for spare), and workflow guidance ('In a sweep, restore before each variant, not once at the end'). It does not name alternative siblings for overlapping mutations (e.g. node_edit), so it stops short of explicit when-not-to-use routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdgADestructive
Cook a TOP network, and read what its work items did.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "status", "workitems", "cook", "dirty", "cancel". | status |
| path | Yes | The TOP network or the TOP node. | |
| state | No | workitems: keep the items in this state, for example "failed" or "cooked". | |
| dirty_all | No | dirty: also remove the outputs of the node on disk. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: cook is asynchronous and returns immediately, cancel stops the currently running cook, dirty_all deletes outputs on disk (the concrete destructive action behind destructiveHint=true), and failed items carry a command plus log path. Nothing contradicts the readOnlyHint=false / destructiveHint=true / idempotentHint=false annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose then routing, followed by a clean mode list — every line earns its place. The multi-line indented mode block is slightly heavy for a four-parameter tool, but there is no filler or repeated content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 flags the actionable failure detail (command + log path) and warns to read it before mutating the network. All five modes, the async cook lifecycle, and the destructive dirty_all path are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 defining the semantics of each mode value and how `state` filters results (e.g. "failed") and what `dirty_all` actually removes. It stops short of documenting the `path` parameter's accepted forms beyond 'TOP network or TOP node'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('Cook a TOP network, and read what its work items did') and immediately differentiates itself from the sibling tools cook (SOP/DOP) and render (ROP). An agent can pick this over cook/render 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes usage ('Use it for a TOP network only') and routes alternatives by node type: cook for SOP/DOP, render for ROP. It also enumerates every mode with a when-to-use condition, including the async cook pattern ('start the cook... read status after it to follow the work').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playbarAIdempotent
Read or set the time of the session.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | range and playback: the last frame. | |
| mode | No | One of "get", "frame", "range", "playback", "play". | get |
| frame | No | frame: the frame to go to. | |
| start | No | range and playback: the first frame. | |
| action | No | play: "play", "stop", "next", "previous", "start" or "end". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing persistent side effects: a frame set here 'stays for the person and for every later call', and 'range' also alters flipbook coverage and ROP ranges bound to $FSTART/$FEND. It also notes playback requires a GUI. It does not, however, clarify how 'get' versus mutation modes interact with the declared idempotentHint for playback actions, leaving one small behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose and the key timing constraint before the mode enumeration, and every sentence carries information. The mode list is necessarily long for a five-mode tool, though the parenthetical explanation of the 'play' action values duplicates the schema slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-mode read/write session tool with an output schema available, the description covers timing, alternatives, per-mode semantics, persistence, and the GUI prerequisite. An agent has everything needed to choose a mode and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: each mode value is glossed ('range' sets the scene frame range vs 'playback' sets the playback range inside the scene range), which the schema's bare enum list does not convey. The start/end/frame/action roles are also tied to specific modes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb pair and resource ('Read or set the time of the session') and immediately names the operational context (SOP cooks at the current frame). It is clearly distinguishable from siblings like node_edit or render, which do not touch the session playhead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('before you read geometry that changes over time') and an explicit when-not-to-use, naming three alternatives (geometry_inspect, node_inspect, stage_inspect) and the parameter ('frames') that makes them preferable. 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.
renderA
Start a render, read its settings, or watch it run.
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. A render can
take a long time.
"progress" — what the ROP reports about the render.
"settings" — the output file, the camera, the resolution and the
renderer of the ROP.
"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.
Returns JSON. A render that writes no file, with no process running, has
failed: read the node with cook to see the error.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "start", "progress", "settings", "create", "watch". | start |
| name | No | create: the name of the new ROP. | |
| path | No | start, progress, settings: the ROP node. | |
| frame_range | No | start: [start, end]. Without it the ROP renders its own range. | |
| output_path | No | watch: the image file to look for on disk. | |
| parent_path | No | create: the network that gets the ROP. | /out |
| render_type | No | create: the ROP kind, for example "opengl", "karma", "mantra" or "ifd". | opengl |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing each mode's behavior, such as that a render can take a long time, that 'watch' counts processes and checks file existence, and that it works even when Houdini is busy. It also explains failure conditions and how to debug. Annotations only provide generic hints, while the description adds substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loaded with the main purpose, then details modes, returns, and error handling. It is concise and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, multiple modes) and the presence of an output schema, the description provides all necessary context: mode behaviors, return format, failure diagnosis, and alternative tool. It is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds some mode-specific context (e.g., what frame_range means, what output_path is for) but largely repeats what is in the schema descriptions. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts, reads, or watches a render, and it explicitly differentiates itself from the sibling 'capture' by explaining that render is for a final picture through a ROP node, while capture is a faster viewport look. This distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance on when to use this tool versus the alternative ('capture'), and it details the different modes and their purposes, including when to use 'watch' (for monitoring without Houdini). It also explains failure condition and how to diagnose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_fileADestructive
Read, save or load the scene file, or step its undo history.
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.
Returns JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "info", "save", "load", "undo", "redo". | info |
| path | No | save: the file to write; empty saves over the open file. load: the .hip file to open. | |
| count | No | undo and redo: how many steps. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, readOnlyHint=false) by spelling out that 'load' discards everything in the session and the undo history, and by defining what constitutes an undo step (one scene-changing tool call, a batch as one step except when it waits on capture/render). This is exactly the behavioral detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then a usage hint, then a clean mode list. The undo-step paragraph is somewhat verbose but each sentence carries operational meaning, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no elaboration, and the description still notes 'Returns JSON' plus which mode returns undone labels. Destructive 'load' behavior and undo semantics are disclosed, leaving no gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds real meaning: it explains what each mode does with `path` (save over open file when empty, open .hip on load) and what `count` means per undo step. This exceeds the schema's terse per-parameter notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb set and resource (read/save/load the scene file, step its undo history) and enumerates all five modes with their exact effect. An agent can distinguish this from siblings like scene_overview or session 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance for two modes: 'save' before a hard-to-undo change, and 'info' to check for unsaved work. It does not name alternative tools or state when NOT to use this one (e.g. versus scene_overview), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_overviewARead-onlyIdempotent
List what the scene holds. Start here, before you touch a node.
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, with their connections.
"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".
"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.
Returns JSON. A path that does not exist comes back as an error, not as an
empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "scene", "network", "children", "search", "node_types", "errors", "materials", "lights", "takes", "caches", "render_nodes", "viewports". | scene |
| path | No | A node path such as "/obj" or "/obj/geo1": the network to list or to search. | |
| pattern | No | search: the name to match, with * and ? as wildcards. | |
| category | No | node_types: the context, for example "Sop", "Object", "Lop" or "Driver". | |
| node_type | No | search: keep the nodes of this type, for example "null". | |
| recursive | No | children: also list the children of the children. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld=false), yet the description still adds a concrete behavioral fact the annotations do not: a nonexistent path returns an error rather than an empty list. It also documents recursion behavior per mode. It stops short of cost/performance or output-shape hints, but the safety-critical ground is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then usage constraints, then the mode catalog, then a return-behavior caveat. The long mode list is necessary because the schema exposes mode as a free-form string with no enum, so every line earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary; the description still notes JSON output and the error-vs-empty-list distinction. All 12 modes are enumerated and mapped to their parameters, which is exactly what is missing from the schema for this multi-purpose tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description meaningfully binds parameters to modes (pattern/node_type only for search, category only for node_types, recursive only for children), which the flat schema does not convey. This is genuine added meaning beyond the schema, though it largely paraphrases the per-parameter text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource ("List what the scene holds") and positions itself as the entry point ("Start here, before you touch a node"). It explicitly names the two siblings it is not (node_inspect for one node, geometry_inspect for geometry), so an agent can discriminate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering instruction plus two explicit when-not clauses routed to named alternatives. The per-mode breakdown further tells the agent which mode to pick for which question, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
selectAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Leave it out to read the selection. One path or a list of paths replaces it. An empty list clears it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
sessionADestructive
Report the Houdini sessions, choose one, or start, stop or interrupt one.
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.
"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.
| Name | Required | Description | Default |
|---|---|---|---|
| hip | No | start_gui: the .hip file to open. | |
| port | No | attach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one. | |
| action | No | One of "status", "list", "attach", "detach", "interrupt", "start", "start_gui", "stop". | status |
| version | No | start and start_gui: the Houdini release, for example "21.0" or "21.0.829". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite coverage from annotations (destructiveHint=true), the description adds substantial behavioral detail: start does not touch an already-running Houdini, stop only kills the bridge-started headless instance, start_gui waits up to 4 minutes and stays open after the bridge stops, interrupt restores Houdini responsiveness. No contradiction with a process-control tool being flagged destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then guidance, then a scannable per-action breakdown. It is long, but nearly every line carries operative information; only the _session explanation edges toward repetition of the result-handling theme.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be described, and the description still notes that results name the answering session in `_session` and that the report says what to do when nothing answers. For an eight-action stateful tool this is complete enough to invoke safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 it: version accepts a partial release like '21.0' and defaults to the running window's version, and port's role differs per action (attach vs interrupt). hip is tied specifically to start_gui.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set and resource: reporting, choosing, starting, stopping, or interrupting Houdini sessions. It explicitly distinguishes itself from sibling scene_overview, so an agent can tell it apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers ('Use it first when a tool says that Houdini is not reachable') and an explicit exclusion ('Do not use it to read the scene: scene_overview does that'). Each action's use case is spelled out, e.g. attach 'when list shows more than one', interrupt for a runaway script.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stage_inspectARead-onlyIdempotent
Read the USD stage at a LOP node. This cooks the node.
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.
"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.
Returns JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "stage", "prims", "prim", "search", "layer", "attribute", "composition", "variants", "stats", "modified", "lights", "transform". | stage |
| path | Yes | The LOP node whose stage to read. | |
| count | No | modified: how many prims come back. | |
| frames | No | Read at another frame, or at several: one frame, a list, or {"start": 1, "end": 10, "step": 2}. The playbar goes back after. | |
| pattern | No | search: the prim path to match, with * as a wildcard. | |
| attr_name | No | attribute: the attribute to read, for example "points". | |
| max_depth | No | prims: how many levels of the tree come back. | |
| prim_path | No | prim, attribute, composition, variants, stats, transform: the prim, for example "/world/geo/rock". | |
| root_prim | No | prims: the prim where the tree starts. | / |
| type_name | No | search: keep the prims of this type, for example "Mesh" or "SphereLight". | |
| layer_index | No | layer: which layer of the stack, from 0 (the strongest). | |
| include_attrs | No | prim: also return the attributes of the prim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, but the description adds two non-obvious behaviors: "This cooks the node" (a read that triggers evaluation and can have side effects) and "The playbar goes back after" for frame reads. These are real behavioral facts not derivable from the annotations, though return-shape and cost details are absent (partly covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and the SOP exclusion before the long mode enumeration, and each mode entry is one tight clause. The twelve-mode block is lengthy but the entries carry distinct semantics; only light redundancy with the schema's own mode prefixes keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explained, and the description covers everything else an agent needs: LOP vs SOP routing, the cooking side effect, playbar restoration, and a complete mode-to-parameter contract. Nothing required for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mapping each mode to the parameters it consumes (e.g. "search" pairs with pattern and type_name, "modified" uses count, "prim" pairs with include_attrs) and clarifying semantics like the recursive world transform composed through every parent. This is mode-routing meaning beyond the flat per-param schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read the USD stage at a LOP node") and immediately scopes it to Solaris/LOP networks. It explicitly names the sibling it is not (geometry_inspect) so an agent can separate it from the SOP-geometry inspection tool 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.
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") plus an explicit exclusion ("Do not use it for SOP geometry: geometry_inspect does that"), naming the alternative. The mode list further tells the agent which selection to make for each intent.
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 tool update
v0.7.6- Changed
connect1 field changed- changed
Input schema / properties / items / descriptionPrevious 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."
2 tool updates
v0.7.5- Changed
execute1 field changed- changed
Input schema / properties / background / descriptionPrevious 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."
- Changed
hda1 field changed- changed
Input schema / properties / node_type / descriptionPrevious 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\"."
20 tool updates
v0.7.3- Changed
batch3 fields changed- added
Input schema / properties / operations / descriptionAdded 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." - removed
Input schema / properties / operations / titleRemoved value: -"Operations" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
capture154 fields changed- removed
Input schema / properties / azimuth / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / azimuth / defaultRemoved value: -null - added
Input schema / properties / azimuth / descriptionAdded value: +"Degrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene." - removed
Input schema / properties / azimuth / titleRemoved value: -"Azimuth" - added
Input schema / properties / azimuth / typeAdded value: +"number" - removed
Input schema / properties / background / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / background / descriptionAdded value: +"sheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey." - removed
Input schema / properties / background / titleRemoved value: -"Background" - added
Input schema / properties / background / typeAdded value: +"integer" - removed
Input schema / properties / camera / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / camera / defaultRemoved value: -null - added
Input schema / properties / camera / descriptionAdded value: +"camera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim." - removed
Input schema / properties / camera / titleRemoved value: -"Camera" - added
Input schema / properties / camera / typeAdded value: +"string" - removed
Input schema / properties / color_by / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / color_by / defaultRemoved value: -null - added
Input schema / properties / color_by / descriptionAdded 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." - removed
Input schema / properties / color_by / titleRemoved value: -"Color By" - added
Input schema / properties / color_by / typeAdded value: +"string" - removed
Input schema / properties / color_range / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / color_range / defaultRemoved value: -null - added
Input schema / properties / color_range / descriptionAdded value: +"[low, high] for color_by. Without it, [0, 1]." - added
Input schema / properties / color_range / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / color_range / titleRemoved value: -"Color Range" - added
Input schema / properties / color_range / typeAdded value: +"array" - removed
Input schema / properties / columns / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - removed
Input schema / properties / columns / defaultRemoved value: -null - added
Input schema / properties / columns / descriptionAdded value: +"sheet: tiles in each row." - removed
Input schema / properties / columns / titleRemoved value: -"Columns" - added
Input schema / properties / columns / typeAdded value: +"integer" - removed
Input schema / properties / contour / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / contour / defaultRemoved value: -null - added
Input schema / properties / contour / descriptionAdded 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." - removed
Input schema / properties / contour / titleRemoved value: -"Contour" - added
Input schema / properties / contour / typeAdded value: +"number" - removed
Input schema / properties / count / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / count / descriptionAdded value: +"sheet: how many tiles, when frames is not given." - removed
Input schema / properties / count / titleRemoved value: -"Count" - added
Input schema / properties / count / typeAdded value: +"integer" - removed
Input schema / properties / direction / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / direction / defaultRemoved value: -null - added
Input schema / properties / direction / descriptionAdded value: +"The view axis: \"top\", \"front\", \"left\", \"right\", \"back\", \"bottom\" or \"persp\"." - removed
Input schema / properties / direction / titleRemoved value: -"Direction" - added
Input schema / properties / direction / typeAdded value: +"string" - removed
Input schema / properties / elevation / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / elevation / defaultRemoved value: -null - added
Input schema / properties / elevation / descriptionAdded value: +"Degrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view." - removed
Input schema / properties / elevation / titleRemoved value: -"Elevation" - added
Input schema / properties / elevation / typeAdded value: +"number" - removed
Input schema / properties / fill / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / fill / descriptionAdded value: +"How much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it." - removed
Input schema / properties / fill / titleRemoved value: -"Fill" - added
Input schema / properties / fill / typeAdded value: +"number" - removed
Input schema / properties / fps / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / fps / descriptionAdded value: +"movie: frames per second." - removed
Input schema / properties / fps / titleRemoved value: -"Fps" - added
Input schema / properties / fps / typeAdded value: +"number" - removed
Input schema / properties / frame / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame / defaultRemoved value: -null - added
Input schema / properties / frame / descriptionAdded value: +"What to frame the view on: \"selection\", \"all\", or a node path (the box of what that node cooked)." - removed
Input schema / properties / frame / titleRemoved value: -"Frame" - added
Input schema / properties / frame / typeAdded value: +"string" - removed
Input schema / properties / frame_range / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame_range / defaultRemoved value: -null - added
Input schema / properties / frame_range / descriptionAdded value: +"flipbook and movie: [start, end]." - added
Input schema / properties / frame_range / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / frame_range / titleRemoved value: -"Frame Range" - added
Input schema / properties / frame_range / typeAdded value: +"array" - changed
Input schema / properties / frames / anyOfPrevious 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" + } +] - removed
Input schema / properties / frames / defaultRemoved value: -null - added
Input schema / properties / frames / descriptionAdded 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." - removed
Input schema / properties / frames / titleRemoved value: -"Frames" - removed
Input schema / properties / look_from / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / look_from / defaultRemoved value: -null - added
Input schema / properties / look_from / descriptionAdded value: +"[x, y, z]: the point that the view looks from." - added
Input schema / properties / look_from / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / look_from / titleRemoved value: -"Look From" - added
Input schema / properties / look_from / typeAdded value: +"array" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / node / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node / defaultRemoved value: -null - added
Input schema / properties / node / descriptionAdded 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." - removed
Input schema / properties / node / titleRemoved value: -"Node" - added
Input schema / properties / node / typeAdded value: +"string" - removed
Input schema / properties / output / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / output / defaultRemoved value: -null - added
Input schema / properties / output / descriptionAdded value: +"The file to write. Without it, a temporary file." - removed
Input schema / properties / output / titleRemoved value: -"Output" - added
Input schema / properties / output / typeAdded value: +"string" - removed
Input schema / properties / radius / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / radius / defaultRemoved value: -null - added
Input schema / properties / radius / descriptionAdded value: +"The distance between target and look_from." - removed
Input schema / properties / radius / titleRemoved value: -"Radius" - added
Input schema / properties / radius / typeAdded value: +"number" - removed
Input schema / properties / reference / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / reference / defaultRemoved value: -null - added
Input schema / properties / reference / descriptionAdded value: +"sheet: a picture file to put in the first tile, to compare." - removed
Input schema / properties / reference / titleRemoved value: -"Reference" - added
Input schema / properties / reference / typeAdded value: +"string" - removed
Input schema / properties / renderer / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / renderer / defaultRemoved value: -null - added
Input schema / properties / renderer / descriptionAdded value: +"The Hydra renderer of a viewer on a LOP network, for example \"Karma CPU\". An unknown name lists the ones available." - removed
Input schema / properties / renderer / titleRemoved value: -"Renderer" - added
Input schema / properties / renderer / typeAdded value: +"string" - removed
Input schema / properties / resolution / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / resolution / defaultRemoved value: -null - added
Input schema / properties / resolution / descriptionAdded value: +"[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched." - added
Input schema / properties / resolution / itemsAdded value: +{ + "type": "integer" +} - removed
Input schema / properties / resolution / titleRemoved value: -"Resolution" - added
Input schema / properties / resolution / typeAdded value: +"array" - removed
Input schema / properties / settle / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / settle / defaultRemoved value: -null - added
Input schema / properties / settle / descriptionAdded 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." - removed
Input schema / properties / settle / titleRemoved value: -"Settle" - added
Input schema / properties / settle / typeAdded value: +"number" - removed
Input schema / properties / shading / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / shading / defaultRemoved value: -null - added
Input schema / properties / shading / descriptionAdded value: +"One of \"smooth\", \"smooth_wire\", \"flat\", \"wireframe\"." - removed
Input schema / properties / shading / titleRemoved value: -"Shading" - added
Input schema / properties / shading / typeAdded value: +"string" - removed
Input schema / properties / slab / anyOfRemoved value: -[ - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / slab / defaultRemoved value: -null - added
Input schema / properties / slab / descriptionAdded 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." - added
Input schema / properties / slab / itemsAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] +} - removed
Input schema / properties / slab / titleRemoved value: -"Slab" - added
Input schema / properties / slab / typeAdded value: +"array" - removed
Input schema / properties / start / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / start / defaultRemoved value: -null - added
Input schema / properties / start / descriptionAdded value: +"sheet: the first frame. Without it, the current frame." - removed
Input schema / properties / start / titleRemoved value: -"Start" - added
Input schema / properties / start / typeAdded value: +"number" - removed
Input schema / properties / step / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / step / descriptionAdded value: +"sheet: the frames between tiles. Over 2 hides movement and gives a warning." - removed
Input schema / properties / step / titleRemoved value: -"Step" - added
Input schema / properties / step / typeAdded value: +"number" - removed
Input schema / properties / target / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / target / defaultRemoved value: -null - added
Input schema / properties / target / descriptionAdded value: +"[x, y, z]: the point that the view turns around." - added
Input schema / properties / target / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / target / titleRemoved value: -"Target" - added
Input schema / properties / target / typeAdded value: +"array" - removed
Input schema / properties / tile_width / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / tile_width / descriptionAdded value: +"sheet: the width of each tile in pixels." - removed
Input schema / properties / tile_width / titleRemoved value: -"Tile Width" - added
Input schema / properties / tile_width / typeAdded value: +"integer" - removed
Input schema / properties / vectors / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / vectors / defaultRemoved value: -null - added
Input schema / properties / vectors / descriptionAdded value: +"sheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error." - removed
Input schema / properties / vectors / titleRemoved value: -"Vectors" - added
Input schema / properties / vectors / typeAdded value: +"number" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
connect42 fields changed- removed
Input schema / properties / dst_input_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / dst_input_index / descriptionAdded value: +"connect: the input of dst_path, from 0." - removed
Input schema / properties / dst_input_index / titleRemoved value: -"Dst Input Index" - added
Input schema / properties / dst_input_index / typeAdded value: +"integer" - removed
Input schema / properties / dst_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / dst_path / defaultRemoved value: -null - added
Input schema / properties / dst_path / descriptionAdded value: +"connect: the node whose input takes the wire." - removed
Input schema / properties / dst_path / titleRemoved value: -"Dst Path" - added
Input schema / properties / dst_path / typeAdded value: +"string" - removed
Input schema / properties / input_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / input_index / descriptionAdded value: +"disconnect: the input that loses its wire, from 0." - removed
Input schema / properties / input_index / titleRemoved value: -"Input Index" - added
Input schema / properties / input_index / typeAdded value: +"integer" - removed
Input schema / properties / input_indices / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / input_indices / defaultRemoved value: -null - added
Input schema / properties / input_indices / descriptionAdded value: +"reorder: the old input indices in their new order, for example [1, 0]." - added
Input schema / properties / input_indices / itemsAdded value: +{ + "type": "integer" +} - removed
Input schema / properties / input_indices / titleRemoved value: -"Input Indices" - added
Input schema / properties / input_indices / typeAdded value: +"array" - changed
Input schema / properties / items / anyOfPrevious 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" + } +] - removed
Input schema / properties / items / defaultRemoved value: -null - added
Input schema / properties / items / descriptionAdded 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." - removed
Input schema / properties / items / titleRemoved value: -"Items" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"connect\", \"disconnect\", \"reorder\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"disconnect and reorder: the node whose inputs change." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / properties / src_output_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / src_output_index / descriptionAdded value: +"connect: the output of src_path, from 0." - removed
Input schema / properties / src_output_index / titleRemoved value: -"Src Output Index" - added
Input schema / properties / src_output_index / typeAdded value: +"integer" - removed
Input schema / properties / src_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / src_path / defaultRemoved value: -null - added
Input schema / properties / src_path / descriptionAdded value: +"connect: the node whose output feeds the wire." - removed
Input schema / properties / src_path / titleRemoved value: -"Src Path" - added
Input schema / properties / src_path / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
console27 fields changed- removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / descriptionAdded value: +"How many log entries come back, the newest ones." - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / node_errors / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / node_errors / descriptionAdded value: +"Also report the nodes under root_path that hold an error or a warning. False gives the log alone." - removed
Input schema / properties / node_errors / titleRemoved value: -"Node Errors" - added
Input schema / properties / node_errors / typeAdded value: +"boolean" - removed
Input schema / properties / node_limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / node_limit / descriptionAdded value: +"How many nodes with an error or a warning come back. Errors come first, and the report says how many it left out." - removed
Input schema / properties / node_limit / titleRemoved value: -"Node Limit" - added
Input schema / properties / node_limit / typeAdded value: +"integer" - removed
Input schema / properties / root_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / root_path / descriptionAdded value: +"The network that node_errors walks, for example /obj or /stage." - removed
Input schema / properties / root_path / titleRemoved value: -"Root Path" - added
Input schema / properties / root_path / typeAdded value: +"string" - removed
Input schema / properties / severity / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / severity / defaultRemoved value: -null - added
Input schema / properties / severity / descriptionAdded value: +"Keep one level only: \"message\", \"important\", \"warning\", \"error\" or \"fatal\"." - removed
Input schema / properties / severity / titleRemoved value: -"Severity" - added
Input schema / properties / severity / typeAdded value: +"string" - removed
Input schema / properties / source / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / source / defaultRemoved value: -null - added
Input schema / properties / source / descriptionAdded value: +"Keep the entries whose source holds this text, for example \"Python\"." - removed
Input schema / properties / source / titleRemoved value: -"Source" - added
Input schema / properties / source / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
cook31 fields changed- removed
Input schema / properties / force / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / force / descriptionAdded value: +"Cook even when Houdini thinks the node is up to date." - removed
Input schema / properties / force / titleRemoved value: -"Force" - added
Input schema / properties / force / typeAdded value: +"boolean" - removed
Input schema / properties / frame_range / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame_range / defaultRemoved value: -null - added
Input schema / properties / frame_range / descriptionAdded value: +"[start, end]: every frame between. For cook and cache_write." - added
Input schema / properties / frame_range / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / frame_range / titleRemoved value: -"Frame Range" - added
Input schema / properties / frame_range / typeAdded value: +"array" - changed
Input schema / properties / frames / anyOfPrevious 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" + } +] - removed
Input schema / properties / frames / defaultRemoved value: -null - added
Input schema / properties / frames / descriptionAdded value: +"One frame, a list of frames, or {\"start\": 1001, \"end\": 1010, \"step\": 2}. For cook. The playbar goes back after." - removed
Input schema / properties / frames / titleRemoved value: -"Frames" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\". The description says what each one does." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / num_steps / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / num_steps / descriptionAdded value: +"How many frames sim_step steps the DOP network." - removed
Input schema / properties / num_steps / titleRemoved value: -"Num Steps" - added
Input schema / properties / num_steps / typeAdded value: +"integer" - added
Input schema / properties / parameters / additionalPropertiesAdded value: +{ + "additionalProperties": true, + "type": "object" +} - removed
Input schema / properties / parameters / anyOfRemoved value: -[ - { - "additionalProperties": { - "additionalProperties": true, - "type": "object" - }, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parameters / defaultRemoved value: -null - added
Input schema / properties / parameters / descriptionAdded value: +"Values to write before the cook, as {\"/obj/geo1/pyro\": {\"divsize\": 0.05}}. The result says which writes changed nothing." - removed
Input schema / properties / parameters / titleRemoved value: -"Parameters" - added
Input schema / properties / parameters / typeAdded value: +"object" - added
Input schema / properties / paths / descriptionAdded value: +"The node to cook, or a list of nodes." - removed
Input schema / properties / paths / titleRemoved value: -"Paths" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
docs39 fields changed- removed
Input schema / properties / build / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / build / defaultRemoved value: -null - added
Input schema / properties / build / descriptionAdded 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." - removed
Input schema / properties / build / titleRemoved value: -"Build" - added
Input schema / properties / build / typeAdded value: +"string" - removed
Input schema / properties / category / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / category / defaultRemoved value: -null - added
Input schema / properties / category / descriptionAdded 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\"." - removed
Input schema / properties / category / titleRemoved value: -"Category" - added
Input schema / properties / category / typeAdded value: +"string" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / descriptionAdded value: +"query: how many hits come back." - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / node / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node / defaultRemoved value: -null - added
Input schema / properties / node / descriptionAdded 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." - removed
Input schema / properties / node / titleRemoved value: -"Node" - added
Input schema / properties / node / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / page / defaultRemoved value: -null - added
Input schema / properties / page / descriptionAdded value: +"A page path from a hit, for example \"nodes/sop/copytopoints\". A loose name or a sidefx.com address also works." - removed
Input schema / properties / page / titleRemoved value: -"Page" - added
Input schema / properties / page / typeAdded value: +"string" - removed
Input schema / properties / part / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / part / descriptionAdded value: +"A long page comes in parts of about 20,000 characters: 2, 3 and so on read the next ones." - removed
Input schema / properties / part / titleRemoved value: -"Part" - added
Input schema / properties / part / typeAdded value: +"integer" - removed
Input schema / properties / query / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / query / defaultRemoved value: -null - added
Input schema / properties / query / descriptionAdded value: +"Words to search, for example \"copy to points\". Returns the hits with their page paths." - removed
Input schema / properties / query / titleRemoved value: -"Query" - added
Input schema / properties / query / typeAdded value: +"string" - removed
Input schema / properties / section / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / section / defaultRemoved value: -null - added
Input schema / properties / section / descriptionAdded value: +"Read only the part of a page under one heading, for example \"Quick renders and flipbooks\". A long page lists its headings." - removed
Input schema / properties / section / titleRemoved value: -"Section" - added
Input schema / properties / section / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
execute49 fields changed- removed
Input schema / properties / args / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / args / defaultRemoved value: -null - added
Input schema / properties / args / descriptionAdded value: +"file: the values of sys.argv[1:]." - added
Input schema / properties / args / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / args / titleRemoved value: -"Args" - added
Input schema / properties / args / typeAdded value: +"array" - removed
Input schema / properties / background / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / background / descriptionAdded 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." - removed
Input schema / properties / background / titleRemoved value: -"Background" - added
Input schema / properties / background / typeAdded value: +"boolean" - removed
Input schema / properties / file / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / file / defaultRemoved value: -null - added
Input schema / properties / file / descriptionAdded 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." - removed
Input schema / properties / file / titleRemoved value: -"File" - added
Input schema / properties / file / typeAdded value: +"string" - added
Input schema / properties / globals / additionalPropertiesAdded value: +true - removed
Input schema / properties / globals / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / globals / defaultRemoved value: -null - added
Input schema / properties / globals / descriptionAdded value: +"Names that exist before the script runs, for example {\"radius\": 2.0}." - removed
Input schema / properties / globals / titleRemoved value: -"Globals" - added
Input schema / properties / globals / typeAdded value: +"object" - removed
Input schema / properties / job / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / job / defaultRemoved value: -null - added
Input schema / properties / job / descriptionAdded value: +"job: the job id that background returned." - removed
Input schema / properties / job / titleRemoved value: -"Job" - added
Input schema / properties / job / typeAdded value: +"string" - removed
Input schema / properties / language / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / language / descriptionAdded value: +"expression: \"hscript\" or \"python\"." - removed
Input schema / properties / language / titleRemoved value: -"Language" - added
Input schema / properties / language / typeAdded value: +"string" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"python\", \"hscript\", \"expression\", \"vex_check\", \"env\", \"job\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"env: the Houdini variable to read, for example \"HIP\"." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / source / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / source / defaultRemoved value: -null - added
Input schema / properties / source / descriptionAdded value: +"The code: Python, HScript, an expression or VEX, as mode says." - removed
Input schema / properties / source / titleRemoved value: -"Source" - added
Input schema / properties / source / typeAdded value: +"string" - removed
Input schema / properties / timeout / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Input schema / properties / timeout / descriptionAdded value: +"The seconds the script may run. Past it, the script stops where it is, the answer says where, and what it changed stays." - removed
Input schema / properties / timeout / titleRemoved value: -"Timeout" - added
Input schema / properties / timeout / typeAdded value: +"number" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
geometry_inspect131 fields changed- removed
Input schema / properties / against / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / against / defaultRemoved value: -null - added
Input schema / properties / against / descriptionAdded value: +"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`." - removed
Input schema / properties / against / titleRemoved value: -"Against" - added
Input schema / properties / against / typeAdded value: +"string" - removed
Input schema / properties / attrib_class / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / attrib_class / descriptionAdded value: +"attrib: \"point\", \"prim\", \"vertex\" or \"detail\"." - removed
Input schema / properties / attrib_class / titleRemoved value: -"Attrib Class" - added
Input schema / properties / attrib_class / typeAdded value: +"string" - removed
Input schema / properties / attrib_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / attrib_name / defaultRemoved value: -null - added
Input schema / properties / attrib_name / descriptionAdded value: +"attrib: the attribute to read." - removed
Input schema / properties / attrib_name / titleRemoved value: -"Attrib Name" - added
Input schema / properties / attrib_name / typeAdded value: +"string" - removed
Input schema / properties / attribs / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / attribs / defaultRemoved value: -null - added
Input schema / properties / attribs / descriptionAdded value: +"points: the attributes to return, for example [\"P\", \"Cd\"]." - added
Input schema / properties / attribs / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / attribs / titleRemoved value: -"Attribs" - added
Input schema / properties / attribs / typeAdded value: +"array" - changed
Input schema / properties / bins / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "integer" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } +] - removed
Input schema / properties / bins / defaultRemoved value: -null - added
Input schema / properties / bins / descriptionAdded 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]." - removed
Input schema / properties / bins / titleRemoved value: -"Bins" - removed
Input schema / properties / count / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / count / descriptionAdded value: +"points, prims: how many elements. Keep it small: a large read is slow." - removed
Input schema / properties / count / titleRemoved value: -"Count" - added
Input schema / properties / count / typeAdded value: +"integer" - removed
Input schema / properties / format / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / format / descriptionAdded value: +"export: the file type, for example \"obj\" or \"bgeo\"." - removed
Input schema / properties / format / titleRemoved value: -"Format" - added
Input schema / properties / format / typeAdded value: +"string" - changed
Input schema / properties / frames / anyOfPrevious 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" + } +] - removed
Input schema / properties / frames / defaultRemoved value: -null - added
Input schema / properties / frames / descriptionAdded 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." - removed
Input schema / properties / frames / titleRemoved value: -"Frames" - removed
Input schema / properties / from_node / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / from_node / defaultRemoved value: -null - added
Input schema / properties / from_node / descriptionAdded value: +"volume_sample: read at the points of this node. volume_compare: the node that holds `against`, such as a collider SDF." - removed
Input schema / properties / from_node / titleRemoved value: -"From Node" - added
Input schema / properties / from_node / typeAdded value: +"string" - removed
Input schema / properties / group_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / group_name / defaultRemoved value: -null - added
Input schema / properties / group_name / descriptionAdded value: +"group_members: the group to read." - removed
Input schema / properties / group_name / titleRemoved value: -"Group Name" - added
Input schema / properties / group_name / typeAdded value: +"string" - removed
Input schema / properties / group_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / group_type / descriptionAdded value: +"groups, group_members: \"point\", \"prim\", \"vertex\" or \"edge\"." - removed
Input schema / properties / group_type / titleRemoved value: -"Group Type" - added
Input schema / properties / group_type / typeAdded value: +"string" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - removed
Input schema / properties / limit / defaultRemoved value: -null - added
Input schema / properties / limit / descriptionAdded 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)." - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / match_attrib / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_attrib / descriptionAdded value: +"compare: the attribute that pairs the points of the two nodes, not their order." - removed
Input schema / properties / match_attrib / titleRemoved value: -"Match Attrib" - added
Input schema / properties / match_attrib / typeAdded value: +"string" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded 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\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"volume_stats: one volume to read. volume_voxels, volume_compare: the field." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / names / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / names / defaultRemoved value: -null - added
Input schema / properties / names / descriptionAdded value: +"volume_sample: the fields to read." - added
Input schema / properties / names / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / names / titleRemoved value: -"Names" - added
Input schema / properties / names / typeAdded value: +"array" - removed
Input schema / properties / output / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / output / defaultRemoved value: -null - added
Input schema / properties / output / descriptionAdded value: +"export: the file path to write." - removed
Input schema / properties / output / titleRemoved value: -"Output" - added
Input schema / properties / output / typeAdded value: +"string" - added
Input schema / properties / path / descriptionAdded 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." - removed
Input schema / properties / path / titleRemoved value: -"Path" - removed
Input schema / properties / pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / pattern / defaultRemoved value: -null - added
Input schema / properties / pattern / descriptionAdded value: +"skeleton: keep the joints whose name matches." - removed
Input schema / properties / pattern / titleRemoved value: -"Pattern" - added
Input schema / properties / pattern / typeAdded value: +"string" - removed
Input schema / properties / plane_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / plane_name / descriptionAdded value: +"image: the COP plane to read, for example \"C\"." - removed
Input schema / properties / plane_name / titleRemoved value: -"Plane Name" - added
Input schema / properties / plane_name / typeAdded value: +"string" - removed
Input schema / properties / position / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / position / defaultRemoved value: -null - added
Input schema / properties / position / descriptionAdded value: +"nearest: [x, y, z]." - added
Input schema / properties / position / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / position / titleRemoved value: -"Position" - added
Input schema / properties / position / typeAdded value: +"array" - removed
Input schema / properties / positions / anyOfRemoved value: -[ - { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / positions / defaultRemoved value: -null - added
Input schema / properties / positions / descriptionAdded value: +"volume_sample: the [x, y, z] points to read at." - added
Input schema / properties / positions / itemsAdded value: +{ + "items": { + "type": "number" + }, + "type": "array" +} - removed
Input schema / properties / positions / titleRemoved value: -"Positions" - added
Input schema / properties / positions / typeAdded value: +"array" - removed
Input schema / properties / prim_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / prim_index / descriptionAdded value: +"intrinsics: the primitive to read." - removed
Input schema / properties / prim_index / titleRemoved value: -"Prim Index" - added
Input schema / properties / prim_index / typeAdded value: +"integer" - removed
Input schema / properties / reduce / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / reduce / defaultRemoved value: -null - added
Input schema / properties / reduce / descriptionAdded value: +"volume_voxels: one answer instead of the array: \"sum\", \"mean\", \"max\", \"min\", \"project_x\", \"project_y\" or \"project_z\"." - removed
Input schema / properties / reduce / titleRemoved value: -"Reduce" - added
Input schema / properties / reduce / typeAdded value: +"string" - removed
Input schema / properties / start / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / start / descriptionAdded value: +"points, prims, attrib: the first element. Page with it." - removed
Input schema / properties / start / titleRemoved value: -"Start" - added
Input schema / properties / start / typeAdded value: +"integer" - removed
Input schema / properties / steps / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / steps / defaultRemoved value: -null - added
Input schema / properties / steps / descriptionAdded value: +"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry as verbs. Nothing changes in the scene." - added
Input schema / properties / steps / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - removed
Input schema / properties / steps / titleRemoved value: -"Steps" - added
Input schema / properties / steps / typeAdded value: +"array" - removed
Input schema / properties / threshold / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / threshold / defaultRemoved value: -null - added
Input schema / properties / threshold / descriptionAdded value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it." - removed
Input schema / properties / threshold / titleRemoved value: -"Threshold" - added
Input schema / properties / threshold / typeAdded value: +"number" - removed
Input schema / properties / unique / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / unique / descriptionAdded value: +"attrib: return each value that occurs and how many elements carry it. That is how you find the pieces in a geometry." - removed
Input schema / properties / unique / titleRemoved value: -"Unique" - added
Input schema / properties / unique / typeAdded value: +"boolean" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
hda45 fields changed- removed
Input schema / properties / category / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / category / defaultRemoved value: -null - added
Input schema / properties / category / descriptionAdded value: +"list: keep one node category, for example \"Sop\"." - removed
Input schema / properties / category / titleRemoved value: -"Category" - added
Input schema / properties / category / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / content / defaultRemoved value: -null - added
Input schema / properties / content / descriptionAdded value: +"section_set: the text to write into the section." - removed
Input schema / properties / content / titleRemoved value: -"Content" - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / file_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / file_path / defaultRemoved value: -null - added
Input schema / properties / file_path / descriptionAdded value: +"install, uninstall, reload: the .hda file. create: the file to write." - removed
Input schema / properties / file_path / titleRemoved value: -"File Path" - added
Input schema / properties / file_path / typeAdded value: +"string" - removed
Input schema / properties / label / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / label / defaultRemoved value: -null - added
Input schema / properties / label / descriptionAdded value: +"create: the name that the TAB menu shows." - removed
Input schema / properties / label / titleRemoved value: -"Label" - added
Input schema / properties / label / typeAdded value: +"string" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"list\", \"get\", \"install\", \"uninstall\", \"reload\", \"update\", \"create\", \"sections\", \"section_get\", \"section_set\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"create: the type name of the new asset." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / node_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node_path / defaultRemoved value: -null - added
Input schema / properties / node_path / descriptionAdded value: +"update: the node to save into its asset. create: the subnet to make an asset from." - removed
Input schema / properties / node_path / titleRemoved value: -"Node Path" - added
Input schema / properties / node_path / typeAdded value: +"string" - removed
Input schema / properties / node_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node_type / defaultRemoved value: -null - added
Input schema / properties / node_type / descriptionAdded value: +"get, sections, section_get, section_set: the asset type, for example \"Sop/my_tool\"." - removed
Input schema / properties / node_type / titleRemoved value: -"Node Type" - added
Input schema / properties / node_type / typeAdded value: +"string" - removed
Input schema / properties / section_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / section_name / defaultRemoved value: -null - added
Input schema / properties / section_name / descriptionAdded value: +"section_get, section_set: the section, for example \"PythonModule\"." - removed
Input schema / properties / section_name / titleRemoved value: -"Section Name" - added
Input schema / properties / section_name / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
node_edit131 fields changed- removed
Input schema / properties / bypass / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - removed
Input schema / properties / bypass / defaultRemoved value: -null - added
Input schema / properties / bypass / descriptionAdded value: +"flags: the bypass flag." - removed
Input schema / properties / bypass / titleRemoved value: -"Bypass" - added
Input schema / properties / bypass / typeAdded value: +"boolean" - removed
Input schema / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / code / defaultRemoved value: -null - added
Input schema / properties / code / descriptionAdded value: +"wrangle: the VEX snippet." - removed
Input schema / properties / code / titleRemoved value: -"Code" - added
Input schema / properties / code / typeAdded value: +"string" - removed
Input schema / properties / code_file / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / code_file / defaultRemoved value: -null - added
Input schema / properties / code_file / descriptionAdded value: +"wrangle: read the VEX from this file, so a long snippet travels once." - removed
Input schema / properties / code_file / titleRemoved value: -"Code File" - added
Input schema / properties / code_file / typeAdded value: +"string" - removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / color / defaultRemoved value: -null - added
Input schema / properties / color / descriptionAdded value: +"color, note, box: [r, g, b] from 0 to 1." - added
Input schema / properties / color / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / color / titleRemoved value: -"Color" - added
Input schema / properties / color / typeAdded value: +"array" - removed
Input schema / properties / context / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / context / defaultRemoved value: -null - added
Input schema / properties / context / descriptionAdded value: +"create: the network kind, \"sop\" (default), \"cop\", \"chop\", \"lop\" or \"material_network\"." - removed
Input schema / properties / context / titleRemoved value: -"Context" - added
Input schema / properties / context / typeAdded value: +"string" - removed
Input schema / properties / destination_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / destination_path / defaultRemoved value: -null - added
Input schema / properties / destination_path / descriptionAdded value: +"copy, move: the network to put the nodes in." - removed
Input schema / properties / destination_path / titleRemoved value: -"Destination Path" - added
Input schema / properties / destination_path / typeAdded value: +"string" - removed
Input schema / properties / display / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - removed
Input schema / properties / display / defaultRemoved value: -null - added
Input schema / properties / display / descriptionAdded value: +"flags: the display flag." - removed
Input schema / properties / display / titleRemoved value: -"Display" - added
Input schema / properties / display / typeAdded value: +"boolean" - removed
Input schema / properties / input_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / input_path / defaultRemoved value: -null - added
Input schema / properties / input_path / descriptionAdded value: +"create: the node that feeds the new node. It saves a connect call and places the node under its input." - removed
Input schema / properties / input_path / titleRemoved value: -"Input Path" - added
Input schema / properties / input_path / typeAdded value: +"string" - changed
Input schema / properties / items / anyOfPrevious 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" + } +] - removed
Input schema / properties / items / defaultRemoved value: -null - added
Input schema / properties / items / descriptionAdded 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." - removed
Input schema / properties / items / titleRemoved value: -"Items" - removed
Input schema / properties / material_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / material_path / defaultRemoved value: -null - added
Input schema / properties / material_path / descriptionAdded value: +"assign_material: the material node." - removed
Input schema / properties / material_path / titleRemoved value: -"Material Path" - added
Input schema / properties / material_path / typeAdded value: +"string" - removed
Input schema / properties / material_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / material_type / defaultRemoved value: -null - added
Input schema / properties / material_type / descriptionAdded value: +"material: the shader type, for example \"principledshader\"." - removed
Input schema / properties / material_type / titleRemoved value: -"Material Type" - added
Input schema / properties / material_type / typeAdded value: +"string" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"create, material: the name of the new node. take: the name of a new take." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - added
Input schema / properties / names / additionalPropertiesAdded value: +{ + "type": "string" +} - removed
Input schema / properties / names / anyOfRemoved value: -[ - { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / names / defaultRemoved value: -null - added
Input schema / properties / names / descriptionAdded value: +"copy: a new name for each source, by source path or name." - removed
Input schema / properties / names / titleRemoved value: -"Names" - added
Input schema / properties / names / typeAdded value: +"object" - removed
Input schema / properties / new_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / new_name / defaultRemoved value: -null - added
Input schema / properties / new_name / descriptionAdded value: +"rename: the new name." - removed
Input schema / properties / new_name / titleRemoved value: -"New Name" - added
Input schema / properties / new_name / typeAdded value: +"string" - removed
Input schema / properties / node_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node_type / defaultRemoved value: -null - added
Input schema / properties / node_type / descriptionAdded value: +"create: the node type, for example \"box\" or \"attribwrangle\"." - removed
Input schema / properties / node_type / titleRemoved value: -"Node Type" - added
Input schema / properties / node_type / typeAdded value: +"string" - added
Input schema / properties / parameters / additionalPropertiesAdded value: +true - removed
Input schema / properties / parameters / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parameters / defaultRemoved value: -null - added
Input schema / properties / parameters / descriptionAdded value: +"create, material: values to set on the new node, by parameter name." - removed
Input schema / properties / parameters / titleRemoved value: -"Parameters" - added
Input schema / properties / parameters / typeAdded value: +"object" - removed
Input schema / properties / parent_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parent_path / defaultRemoved value: -null - added
Input schema / properties / parent_path / descriptionAdded value: +"create, wrangle, note: the network that gets the new node." - removed
Input schema / properties / parent_path / titleRemoved value: -"Parent Path" - added
Input schema / properties / parent_path / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"The node to change. layout: the network. delete: a node, a sticky note or a network box." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / properties / paths / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / paths / defaultRemoved value: -null - added
Input schema / properties / paths / descriptionAdded value: +"copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box." - added
Input schema / properties / paths / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / paths / titleRemoved value: -"Paths" - added
Input schema / properties / paths / typeAdded value: +"array" - removed
Input schema / properties / position / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / position / defaultRemoved value: -null - added
Input schema / properties / position / descriptionAdded value: +"create, move, note: [x, y] on the canvas." - added
Input schema / properties / position / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / position / titleRemoved value: -"Position" - added
Input schema / properties / position / typeAdded value: +"array" - removed
Input schema / properties / render / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - removed
Input schema / properties / render / defaultRemoved value: -null - added
Input schema / properties / render / descriptionAdded value: +"flags: the render flag, which is not the display flag." - removed
Input schema / properties / render / titleRemoved value: -"Render" - added
Input schema / properties / render / typeAdded value: +"boolean" - removed
Input schema / properties / replace / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / replace / defaultRemoved value: -null - added
Input schema / properties / replace / descriptionAdded value: +"wrangle: edit the snippet in place, a list of {\"old\": ..., \"new\": ...}. Each old must appear exactly once." - added
Input schema / properties / replace / itemsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "type": "object" +} - removed
Input schema / properties / replace / titleRemoved value: -"Replace" - added
Input schema / properties / replace / typeAdded value: +"array" - removed
Input schema / properties / suffix / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / suffix / defaultRemoved value: -null - added
Input schema / properties / suffix / descriptionAdded value: +"copy: text added to the name of each copy." - removed
Input schema / properties / suffix / titleRemoved value: -"Suffix" - added
Input schema / properties / suffix / typeAdded value: +"string" - removed
Input schema / properties / take_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / take_name / defaultRemoved value: -null - added
Input schema / properties / take_name / descriptionAdded value: +"take: the take to make current." - removed
Input schema / properties / take_name / titleRemoved value: -"Take Name" - added
Input schema / properties / take_name / typeAdded value: +"string" - added
Input schema / properties / textAdded value: +{ + "description": "note: the text of the note. box: the comment of the box.", + "type": "string" +} - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
node_inspect60 fields changed- removed
Input schema / properties / channel / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / channel / defaultRemoved value: -null - added
Input schema / properties / channel / descriptionAdded value: +"channels: the CHOP channel whose samples to read." - removed
Input schema / properties / channel / titleRemoved value: -"Channel" - added
Input schema / properties / channel / typeAdded value: +"string" - removed
Input schema / properties / end / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / end / defaultRemoved value: -null - added
Input schema / properties / end / descriptionAdded value: +"channels: the last sample frame." - removed
Input schema / properties / end / titleRemoved value: -"End" - added
Input schema / properties / end / typeAdded value: +"number" - removed
Input schema / properties / field_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / field_name / defaultRemoved value: -null - added
Input schema / properties / field_name / descriptionAdded value: +"simulation: the field of object_name to read." - removed
Input schema / properties / field_name / titleRemoved value: -"Field Name" - added
Input schema / properties / field_name / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / fields / defaultRemoved value: -null - added
Input schema / properties / fields / descriptionAdded value: +"parms, changed: keep only these keys of each parameter, for example [\"value\", \"expression\"]. The name is always kept." - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / fields / titleRemoved value: -"Fields" - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / properties / frames / anyOfPrevious 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" + } +] - removed
Input schema / properties / frames / defaultRemoved value: -null - added
Input schema / properties / frames / descriptionAdded 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." - removed
Input schema / properties / frames / titleRemoved value: -"Frames" - removed
Input schema / properties / has_expression / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / has_expression / descriptionAdded value: +"parms: keep only the parameters that carry an expression." - removed
Input schema / properties / has_expression / titleRemoved value: -"Has Expression" - added
Input schema / properties / has_expression / typeAdded value: +"boolean" - removed
Input schema / properties / include_all_parms / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_all_parms / descriptionAdded value: +"info: list every parameter, not only the ones that changed." - removed
Input schema / properties / include_all_parms / titleRemoved value: -"Include All Parms" - added
Input schema / properties / include_all_parms / typeAdded value: +"boolean" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded 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\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / object_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / object_name / defaultRemoved value: -null - added
Input schema / properties / object_name / descriptionAdded value: +"simulation: the DOP object to read." - removed
Input schema / properties / object_name / titleRemoved value: -"Object Name" - added
Input schema / properties / object_name / typeAdded value: +"string" - removed
Input schema / properties / parm / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parm / defaultRemoved value: -null - added
Input schema / properties / parm / descriptionAdded value: +"parms, expression, keyframes, readers: the parameter name." - removed
Input schema / properties / parm / titleRemoved value: -"Parm" - added
Input schema / properties / parm / typeAdded value: +"string" - added
Input schema / properties / paths / descriptionAdded value: +"One node path, or a list. A list keeps going after a node that fails, and each result names its path." - removed
Input schema / properties / paths / titleRemoved value: -"Paths" - removed
Input schema / properties / pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / pattern / defaultRemoved value: -null - added
Input schema / properties / pattern / descriptionAdded value: +"parms, changed: keep the parameters whose name or label holds this text or matches it as a glob. \"|\" separates alternatives: \"time|step|cfl\"." - removed
Input schema / properties / pattern / titleRemoved value: -"Pattern" - added
Input schema / properties / pattern / typeAdded value: +"string" - removed
Input schema / properties / start / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / start / defaultRemoved value: -null - added
Input schema / properties / start / descriptionAdded value: +"channels: the first sample frame." - removed
Input schema / properties / start / titleRemoved value: -"Start" - added
Input schema / properties / start / typeAdded value: +"number" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
parm_set107 fields changed- removed
Input schema / properties / channel_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / channel_name / defaultRemoved value: -null - added
Input schema / properties / channel_name / descriptionAdded value: +"chop_export: the channel that drives the parameter." - removed
Input schema / properties / channel_name / titleRemoved value: -"Channel Name" - added
Input schema / properties / channel_name / typeAdded value: +"string" - removed
Input schema / properties / chop_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / chop_path / defaultRemoved value: -null - added
Input schema / properties / chop_path / descriptionAdded value: +"chop_export: the CHOP node." - removed
Input schema / properties / chop_path / titleRemoved value: -"Chop Path" - added
Input schema / properties / chop_path / typeAdded value: +"string" - removed
Input schema / properties / default / anyOfRemoved value: -[ - {}, - { - "type": "null" - } -] - removed
Input schema / properties / default / defaultRemoved value: -null - added
Input schema / properties / default / descriptionAdded value: +"spare: the default of one control." - removed
Input schema / properties / default / titleRemoved value: -"Default" - removed
Input schema / properties / expression / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / expression / defaultRemoved value: -null - added
Input schema / properties / expression / descriptionAdded value: +"expression: the expression text." - removed
Input schema / properties / expression / titleRemoved value: -"Expression" - added
Input schema / properties / expression / typeAdded value: +"string" - removed
Input schema / properties / follow_reference / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / follow_reference / descriptionAdded value: +"Write the node at the other end of a channel reference. Without it, a write through a reference is refused." - removed
Input schema / properties / follow_reference / titleRemoved value: -"Follow Reference" - added
Input schema / properties / follow_reference / typeAdded value: +"boolean" - removed
Input schema / properties / frame / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame / defaultRemoved value: -null - added
Input schema / properties / frame / descriptionAdded value: +"keyframe, delete_keyframe: the frame of the key." - removed
Input schema / properties / frame / titleRemoved value: -"Frame" - added
Input schema / properties / frame / typeAdded value: +"number" - changed
Input schema / properties / items / anyOfPrevious 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" + } +] - removed
Input schema / properties / items / defaultRemoved value: -null - added
Input schema / properties / items / descriptionAdded value: +"A list of writes, each a dictionary with the keys of one call. An argument outside items is the default for each one." - removed
Input schema / properties / items / titleRemoved value: -"Items" - removed
Input schema / properties / keyframes / anyOfRemoved value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / keyframes / defaultRemoved value: -null - added
Input schema / properties / keyframes / descriptionAdded value: +"keyframes: a list of {frame, value}." - added
Input schema / properties / keyframes / itemsAdded value: +{ + "additionalProperties": true, + "type": "object" +} - removed
Input schema / properties / keyframes / titleRemoved value: -"Keyframes" - added
Input schema / properties / keyframes / typeAdded value: +"array" - removed
Input schema / properties / label / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / label / defaultRemoved value: -null - added
Input schema / properties / label / descriptionAdded value: +"spare: the label of one control." - removed
Input schema / properties / label / titleRemoved value: -"Label" - added
Input schema / properties / label / typeAdded value: +"string" - removed
Input schema / properties / language / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / language / descriptionAdded value: +"expression: \"hscript\" or \"python\"." - removed
Input schema / properties / language / titleRemoved value: -"Language" - added
Input schema / properties / language / typeAdded value: +"string" - removed
Input schema / properties / locked / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - removed
Input schema / properties / locked / defaultRemoved value: -null - added
Input schema / properties / locked / descriptionAdded value: +"lock: true locks the parameter, false unlocks it." - removed
Input schema / properties / locked / titleRemoved value: -"Locked" - added
Input schema / properties / locked / typeAdded value: +"boolean" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"value\", \"press\", \"expression\", \"keyframe\", \"keyframes\", \"delete_keyframe\", \"revert\", \"lock\", \"link\", \"spare\", \"render_settings\", \"chop_export\", \"snapshot\", \"restore\", \"diff\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"spare: the name of one control. snapshot, restore, diff: the record on disk." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / properties / parameters / anyOfPrevious 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" + } +] - removed
Input schema / properties / parameters / defaultRemoved value: -null - added
Input schema / properties / parameters / descriptionAdded value: +"value: several names and values in one write, as a dictionary. spare: the list of controls to add." - removed
Input schema / properties / parameters / titleRemoved value: -"Parameters" - removed
Input schema / properties / parm / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parm / defaultRemoved value: -null - added
Input schema / properties / parm / descriptionAdded value: +"The parameter name, for example \"tx\" or \"divsize\"." - removed
Input schema / properties / parm / titleRemoved value: -"Parm" - added
Input schema / properties / parm / typeAdded value: +"string" - removed
Input schema / properties / parm_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / parm_type / defaultRemoved value: -null - added
Input schema / properties / parm_type / descriptionAdded value: +"spare: the type of one control, for example \"float\" or \"toggle\"." - removed
Input schema / properties / parm_type / titleRemoved value: -"Parm Type" - added
Input schema / properties / parm_type / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"The node that holds the parameter." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / properties / paths / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / paths / defaultRemoved value: -null - added
Input schema / properties / paths / descriptionAdded value: +"snapshot: the nodes to save; \"/obj/geo1/*\" names every node in a network. restore: put back only these nodes." - added
Input schema / properties / paths / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / paths / titleRemoved value: -"Paths" - added
Input schema / properties / paths / typeAdded value: +"array" - added
Input schema / properties / settings / additionalPropertiesAdded value: +true - removed
Input schema / properties / settings / anyOfRemoved value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -] - removed
Input schema / properties / settings / defaultRemoved value: -null - added
Input schema / properties / settings / descriptionAdded value: +"render_settings: the ROP parameters to write, by name." - removed
Input schema / properties / settings / titleRemoved value: -"Settings" - added
Input schema / properties / settings / typeAdded value: +"object" - removed
Input schema / properties / src_parm / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / src_parm / defaultRemoved value: -null - added
Input schema / properties / src_parm / descriptionAdded value: +"link: the parameter to follow." - removed
Input schema / properties / src_parm / titleRemoved value: -"Src Parm" - added
Input schema / properties / src_parm / typeAdded value: +"string" - removed
Input schema / properties / src_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / src_path / defaultRemoved value: -null - added
Input schema / properties / src_path / descriptionAdded value: +"link: the node to follow." - removed
Input schema / properties / src_path / titleRemoved value: -"Src Path" - added
Input schema / properties / src_path / typeAdded value: +"string" - removed
Input schema / properties / value / anyOfRemoved value: -[ - {}, - { - "type": "null" - } -] - removed
Input schema / properties / value / defaultRemoved value: -null - added
Input schema / properties / value / descriptionAdded value: +"value, keyframe: the value to write. A menu takes its token." - removed
Input schema / properties / value / titleRemoved value: -"Value" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
pdg16 fields changed- removed
Input schema / properties / dirty_all / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / dirty_all / descriptionAdded value: +"dirty: also remove the outputs of the node on disk." - removed
Input schema / properties / dirty_all / titleRemoved value: -"Dirty All" - added
Input schema / properties / dirty_all / typeAdded value: +"boolean" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"status\", \"workitems\", \"cook\", \"dirty\", \"cancel\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - added
Input schema / properties / path / descriptionAdded value: +"The TOP network or the TOP node." - removed
Input schema / properties / path / titleRemoved value: -"Path" - removed
Input schema / properties / state / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / state / defaultRemoved value: -null - added
Input schema / properties / state / descriptionAdded value: +"workitems: keep the items in this state, for example \"failed\" or \"cooked\"." - removed
Input schema / properties / state / titleRemoved value: -"State" - added
Input schema / properties / state / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
playbar25 fields changed- removed
Input schema / properties / action / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / action / defaultRemoved value: -null - added
Input schema / properties / action / descriptionAdded value: +"play: \"play\", \"stop\", \"next\", \"previous\", \"start\" or \"end\"." - removed
Input schema / properties / action / titleRemoved value: -"Action" - added
Input schema / properties / action / typeAdded value: +"string" - removed
Input schema / properties / end / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / end / defaultRemoved value: -null - added
Input schema / properties / end / descriptionAdded value: +"range and playback: the last frame." - removed
Input schema / properties / end / titleRemoved value: -"End" - added
Input schema / properties / end / typeAdded value: +"number" - removed
Input schema / properties / frame / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame / defaultRemoved value: -null - added
Input schema / properties / frame / descriptionAdded value: +"frame: the frame to go to." - removed
Input schema / properties / frame / titleRemoved value: -"Frame" - added
Input schema / properties / frame / typeAdded value: +"number" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"get\", \"frame\", \"range\", \"playback\", \"play\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / start / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - removed
Input schema / properties / start / defaultRemoved value: -null - added
Input schema / properties / start / descriptionAdded value: +"range and playback: the first frame." - removed
Input schema / properties / start / titleRemoved value: -"Start" - added
Input schema / properties / start / typeAdded value: +"number" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
render34 fields changed- removed
Input schema / properties / frame_range / anyOfRemoved value: -[ - { - "items": { - "type": "number" - }, - "type": "array" - }, - { - "type": "null" - } -] - removed
Input schema / properties / frame_range / defaultRemoved value: -null - added
Input schema / properties / frame_range / descriptionAdded value: +"start: [start, end]. Without it the ROP renders its own range." - added
Input schema / properties / frame_range / itemsAdded value: +{ + "type": "number" +} - removed
Input schema / properties / frame_range / titleRemoved value: -"Frame Range" - added
Input schema / properties / frame_range / typeAdded value: +"array" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / name / defaultRemoved value: -null - added
Input schema / properties / name / descriptionAdded value: +"create: the name of the new ROP." - removed
Input schema / properties / name / titleRemoved value: -"Name" - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / output_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / output_path / defaultRemoved value: -null - added
Input schema / properties / output_path / descriptionAdded value: +"watch: the image file to look for on disk." - removed
Input schema / properties / output_path / titleRemoved value: -"Output Path" - added
Input schema / properties / output_path / typeAdded value: +"string" - removed
Input schema / properties / parent_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_path / descriptionAdded value: +"create: the network that gets the ROP." - removed
Input schema / properties / parent_path / titleRemoved value: -"Parent Path" - added
Input schema / properties / parent_path / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"start, progress, settings: the ROP node." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / properties / render_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / render_type / descriptionAdded value: +"create: the ROP kind, for example \"opengl\", \"karma\", \"mantra\" or \"ifd\"." - removed
Input schema / properties / render_type / titleRemoved value: -"Render Type" - added
Input schema / properties / render_type / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
scene_file11 fields changed- added
Input schema / properties / countAdded value: +{ + "default": 1, + "description": "undo and redo: how many steps.", + "type": "integer" +} - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"info\", \"save\", \"load\", \"undo\", \"redo\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"save: the file to write; empty saves over the open file. load: the .hip file to open." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
scene_overview29 fields changed- removed
Input schema / properties / category / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / category / defaultRemoved value: -null - added
Input schema / properties / category / descriptionAdded value: +"node_types: the context, for example \"Sop\", \"Object\", \"Lop\" or \"Driver\"." - removed
Input schema / properties / category / titleRemoved value: -"Category" - added
Input schema / properties / category / typeAdded value: +"string" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - removed
Input schema / properties / node_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / node_type / defaultRemoved value: -null - added
Input schema / properties / node_type / descriptionAdded value: +"search: keep the nodes of this type, for example \"null\"." - removed
Input schema / properties / node_type / titleRemoved value: -"Node Type" - added
Input schema / properties / node_type / typeAdded value: +"string" - removed
Input schema / properties / path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / path / defaultRemoved value: -null - added
Input schema / properties / path / descriptionAdded value: +"A node path such as \"/obj\" or \"/obj/geo1\": the network to list or to search." - removed
Input schema / properties / path / titleRemoved value: -"Path" - added
Input schema / properties / path / typeAdded value: +"string" - removed
Input schema / properties / pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / pattern / defaultRemoved value: -null - added
Input schema / properties / pattern / descriptionAdded value: +"search: the name to match, with * and ? as wildcards." - removed
Input schema / properties / pattern / titleRemoved value: -"Pattern" - added
Input schema / properties / pattern / typeAdded value: +"string" - removed
Input schema / properties / recursive / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / recursive / descriptionAdded value: +"children: also list the children of the children." - removed
Input schema / properties / recursive / titleRemoved value: -"Recursive" - added
Input schema / properties / recursive / typeAdded value: +"boolean" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
select5 fields changed- changed
Input schema / properties / paths / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - removed
Input schema / properties / paths / defaultRemoved value: -null - added
Input schema / properties / paths / descriptionAdded value: +"Leave it out to read the selection. One path or a list of paths replaces it. An empty list clears it." - removed
Input schema / properties / paths / titleRemoved value: -"Paths" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
session20 fields changed- removed
Input schema / properties / action / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / action / descriptionAdded value: +"One of \"status\", \"list\", \"attach\", \"detach\", \"interrupt\", \"start\", \"start_gui\", \"stop\"." - removed
Input schema / properties / action / titleRemoved value: -"Action" - added
Input schema / properties / action / typeAdded value: +"string" - removed
Input schema / properties / hip / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / hip / defaultRemoved value: -null - added
Input schema / properties / hip / descriptionAdded value: +"start_gui: the .hip file to open." - removed
Input schema / properties / hip / titleRemoved value: -"Hip" - added
Input schema / properties / hip / typeAdded value: +"string" - removed
Input schema / properties / port / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - removed
Input schema / properties / port / defaultRemoved value: -null - added
Input schema / properties / port / descriptionAdded value: +"attach: the port of the Houdini to talk to, from list. interrupt: the Houdini to interrupt, when not the attached one." - removed
Input schema / properties / port / titleRemoved value: -"Port" - added
Input schema / properties / port / typeAdded value: +"integer" - removed
Input schema / properties / version / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / version / defaultRemoved value: -null - added
Input schema / properties / version / descriptionAdded value: +"start and start_gui: the Houdini release, for example \"21.0\" or \"21.0.829\"." - removed
Input schema / properties / version / titleRemoved value: -"Version" - added
Input schema / properties / version / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
- Changed
stage_inspect51 fields changed- removed
Input schema / properties / attr_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / attr_name / defaultRemoved value: -null - added
Input schema / properties / attr_name / descriptionAdded value: +"attribute: the attribute to read, for example \"points\"." - removed
Input schema / properties / attr_name / titleRemoved value: -"Attr Name" - added
Input schema / properties / attr_name / typeAdded value: +"string" - removed
Input schema / properties / count / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / count / descriptionAdded value: +"modified: how many prims come back." - removed
Input schema / properties / count / titleRemoved value: -"Count" - added
Input schema / properties / count / typeAdded value: +"integer" - changed
Input schema / properties / frames / anyOfPrevious 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" + } +] - removed
Input schema / properties / frames / defaultRemoved value: -null - added
Input schema / properties / frames / descriptionAdded value: +"Read at another frame, or at several: one frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}. The playbar goes back after." - removed
Input schema / properties / frames / titleRemoved value: -"Frames" - removed
Input schema / properties / include_attrs / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_attrs / descriptionAdded value: +"prim: also return the attributes of the prim." - removed
Input schema / properties / include_attrs / titleRemoved value: -"Include Attrs" - added
Input schema / properties / include_attrs / typeAdded value: +"boolean" - removed
Input schema / properties / layer_index / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / layer_index / descriptionAdded value: +"layer: which layer of the stack, from 0 (the strongest)." - removed
Input schema / properties / layer_index / titleRemoved value: -"Layer Index" - added
Input schema / properties / layer_index / typeAdded value: +"integer" - removed
Input schema / properties / max_depth / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / max_depth / descriptionAdded value: +"prims: how many levels of the tree come back." - removed
Input schema / properties / max_depth / titleRemoved value: -"Max Depth" - added
Input schema / properties / max_depth / typeAdded value: +"integer" - removed
Input schema / properties / mode / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mode / descriptionAdded value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"." - removed
Input schema / properties / mode / titleRemoved value: -"Mode" - added
Input schema / properties / mode / typeAdded value: +"string" - added
Input schema / properties / path / descriptionAdded value: +"The LOP node whose stage to read." - removed
Input schema / properties / path / titleRemoved value: -"Path" - removed
Input schema / properties / pattern / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / pattern / defaultRemoved value: -null - added
Input schema / properties / pattern / descriptionAdded value: +"search: the prim path to match, with * as a wildcard." - removed
Input schema / properties / pattern / titleRemoved value: -"Pattern" - added
Input schema / properties / pattern / typeAdded value: +"string" - removed
Input schema / properties / prim_path / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / prim_path / defaultRemoved value: -null - added
Input schema / properties / prim_path / descriptionAdded value: +"prim, attribute, composition, variants, stats, transform: the prim, for example \"/world/geo/rock\"." - removed
Input schema / properties / prim_path / titleRemoved value: -"Prim Path" - added
Input schema / properties / prim_path / typeAdded value: +"string" - removed
Input schema / properties / root_prim / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / root_prim / descriptionAdded value: +"prims: the prim where the tree starts." - removed
Input schema / properties / root_prim / titleRemoved value: -"Root Prim" - added
Input schema / properties / root_prim / typeAdded value: +"string" - removed
Input schema / properties / type_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / type_name / defaultRemoved value: -null - added
Input schema / properties / type_name / descriptionAdded value: +"search: keep the prims of this type, for example \"Mesh\" or \"SphereLight\"." - removed
Input schema / properties / type_name / titleRemoved value: -"Type Name" - added
Input schema / properties / type_name / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"toolArguments"
187 tool updates
v0.1.1- Removed
assign_material - Removed
assign_material_workflow - Changed
batch5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / operations / defaultRemoved value: -[] - added
Input schema / properties / operations / items / additionalPropertiesAdded value: +true - added
Input schema / requiredAdded value: +[ + "operations" +] - changed
Input schema / titlePrevious value: -"batchArguments"New value: +"toolArguments"
- Removed
build_sop_chain - Added
capture - Removed
capture_screenshot - Removed
clear_cache - Added
connect - Removed
connect_nodes - Removed
connect_nodes_batch - Added
console - Added
cook - Removed
copy_node - Removed
create_chop_node - Removed
create_cop_node - Removed
create_lop_node - Removed
create_material_network - Removed
create_material_workflow - Removed
create_node - Removed
create_render_node - Removed
create_spare_parameter - Removed
create_spare_parameters - Removed
create_take - Removed
create_vex_expression - Removed
create_wrangle - Removed
delete_keyframe - Removed
delete_node - Removed
disconnect_node_input - Added
docs - Removed
evaluate_expression - Added
execute - Removed
execute_houdini_code - Removed
execute_hscript - Removed
explain_node - Removed
export_chop_to_parm - Removed
find_error_nodes - Removed
find_nearest_point - Removed
find_nodes - Removed
frame_all - Removed
frame_selection - Removed
geo_export - Added
geometry_inspect - Removed
get_attrib_values - Removed
get_bounding_box - Removed
get_cache_status - Removed
get_changed_parms - Removed
get_chop_data - Removed
get_connection_status - Removed
get_cook_chain - Removed
get_cop_geometry - Removed
get_cop_info - Removed
get_cop_layer - Removed
get_cop_vdb - Removed
get_current_take - Removed
get_doc - Removed
get_dop_field - Removed
get_dop_object - Removed
get_dop_relationships - Removed
get_env_variable - Removed
get_expression - Removed
get_frame - Removed
get_geo_summary - Removed
get_group_members - Removed
get_groups - Removed
get_hda_section_content - Removed
get_hda_sections - Removed
get_houdini_events - Removed
get_keyframes - Removed
get_last_modified_prims - Removed
get_material_info - Removed
get_network_overview - Removed
get_node_doc - Removed
get_node_info - Removed
get_parameter - Removed
get_parameter_schema - Removed
get_points - Removed
get_prim_intrinsics - Removed
get_prims - Removed
get_render_progress - Removed
get_render_settings - Removed
get_scene_info - Removed
get_scene_summary - Removed
get_selection - Removed
get_sim_memory_usage - Removed
get_simulation_info - Removed
get_usd_attribute - Removed
get_usd_composition - Removed
get_usd_prim_stats - Removed
get_usd_variants - Removed
get_viewport_info - Removed
get_wrangle_code - Added
hda - Removed
hda_create - Removed
hda_get - Removed
hda_install - Removed
hda_list - Removed
inspect_usd_layer - Removed
layout_children - Removed
link_parameters - Removed
list_caches - Removed
list_children - Removed
list_chop_channels - Removed
list_cop_node_types - Removed
list_dop_objects - Removed
list_lights - Removed
list_material_types - Removed
list_materials - Removed
list_node_types - Removed
list_panes - Removed
list_render_nodes - Removed
list_takes - Removed
list_usd_prims - Removed
load_scene - Removed
lock_parameter - Removed
lop_import - Removed
lop_layer_info - Removed
lop_prim_get - Removed
lop_prim_search - Removed
lop_stage_info - Removed
modify_node - Removed
monitor_render - Removed
move_node - Added
node_edit - Added
node_inspect - Added
parm_set - Added
pdg - Removed
pdg_cancel - Removed
pdg_cook - Removed
pdg_dirty - Removed
pdg_status - Removed
pdg_workitems - Removed
ping - Added
playbar - Removed
playbar_control - Removed
reload_hda - Removed
rename_node - Added
render - Removed
render_flipbook - Removed
render_quad_views - Removed
render_single_view - Removed
render_specific_camera - Removed
reorder_inputs - Removed
reset_simulation - Removed
revert_parameter - Removed
save_scene - Added
scene_file - Added
scene_overview - Removed
search_docs - Added
select - Added
session - Removed
set_cop_flags - Removed
set_current_network - Removed
set_current_take - Removed
set_detail_attrib - Removed
set_expression - Removed
set_frame - Removed
set_frame_range - Removed
set_hda_section_content - Removed
set_keyframe - Removed
set_keyframes - Removed
set_material - Removed
set_node_color - Removed
set_node_flags - Removed
set_parameter - Removed
set_parameters - Removed
set_playback_range - Removed
set_render_settings - Removed
set_selection - Removed
set_usd_attribute - Removed
set_viewport_camera - Removed
set_viewport_direction - Removed
set_viewport_display - Removed
set_viewport_renderer - Removed
set_wrangle_code - Removed
setup_flip_sim - Removed
setup_pyro_sim - Removed
setup_rbd_sim - Removed
setup_render - Removed
setup_vellum_sim - Added
stage_inspect - Removed
start_render - Removed
step_simulation - Removed
subscribe_houdini_events - Removed
uninstall_hda - Removed
update_hda - Removed
validate_vex - Removed
write_cache
168 tool updates
v0.1.0- First observed
assign_material - First observed
assign_material_workflow - First observed
batch - First observed
build_sop_chain - First observed
capture_screenshot - First observed
clear_cache - First observed
connect_nodes - First observed
connect_nodes_batch - First observed
copy_node - First observed
create_chop_node - First observed
create_cop_node - First observed
create_lop_node - First observed
create_material_network - First observed
create_material_workflow - First observed
create_node - First observed
create_render_node - First observed
create_spare_parameter - First observed
create_spare_parameters - First observed
create_take - First observed
create_vex_expression - First observed
create_wrangle - First observed
delete_keyframe - First observed
delete_node - First observed
disconnect_node_input - First observed
evaluate_expression - First observed
execute_houdini_code - First observed
execute_hscript - First observed
explain_node - First observed
export_chop_to_parm - First observed
find_error_nodes - First observed
find_nearest_point - First observed
find_nodes - First observed
frame_all - First observed
frame_selection - First observed
geo_export - First observed
get_attrib_values - First observed
get_bounding_box - First observed
get_cache_status - First observed
get_changed_parms - First observed
get_chop_data - First observed
get_connection_status - First observed
get_cook_chain - First observed
get_cop_geometry - First observed
get_cop_info - First observed
get_cop_layer - First observed
get_cop_vdb - First observed
get_current_take - First observed
get_doc - First observed
get_dop_field - First observed
get_dop_object - First observed
get_dop_relationships - First observed
get_env_variable - First observed
get_expression - First observed
get_frame - First observed
get_geo_summary - First observed
get_group_members - First observed
get_groups - First observed
get_hda_section_content - First observed
get_hda_sections - First observed
get_houdini_events - First observed
get_keyframes - First observed
get_last_modified_prims - First observed
get_material_info - First observed
get_network_overview - First observed
get_node_doc - First observed
get_node_info - First observed
get_parameter - First observed
get_parameter_schema - First observed
get_points - First observed
get_prim_intrinsics - First observed
get_prims - First observed
get_render_progress - First observed
get_render_settings - First observed
get_scene_info - First observed
get_scene_summary - First observed
get_selection - First observed
get_sim_memory_usage - First observed
get_simulation_info - First observed
get_usd_attribute - First observed
get_usd_composition - First observed
get_usd_prim_stats - First observed
get_usd_variants - First observed
get_viewport_info - First observed
get_wrangle_code - First observed
hda_create - First observed
hda_get - First observed
hda_install - First observed
hda_list - First observed
inspect_usd_layer - First observed
layout_children - First observed
link_parameters - First observed
list_caches - First observed
list_children - First observed
list_chop_channels - First observed
list_cop_node_types - First observed
list_dop_objects - First observed
list_lights - First observed
list_material_types - First observed
list_materials - First observed
list_node_types - First observed
list_panes - First observed
list_render_nodes - First observed
list_takes - First observed
list_usd_prims - First observed
load_scene - First observed
lock_parameter - First observed
lop_import - First observed
lop_layer_info - First observed
lop_prim_get - First observed
lop_prim_search - First observed
lop_stage_info - First observed
modify_node - First observed
monitor_render - First observed
move_node - First observed
pdg_cancel - First observed
pdg_cook - First observed
pdg_dirty - First observed
pdg_status - First observed
pdg_workitems - First observed
ping - First observed
playbar_control - First observed
reload_hda - First observed
rename_node - First observed
render_flipbook - First observed
render_quad_views - First observed
render_single_view - First observed
render_specific_camera - First observed
reorder_inputs - First observed
reset_simulation - First observed
revert_parameter - First observed
save_scene - First observed
search_docs - First observed
set_cop_flags - First observed
set_current_network - First observed
set_current_take - First observed
set_detail_attrib - First observed
set_expression - First observed
set_frame - First observed
set_frame_range - First observed
set_hda_section_content - First observed
set_keyframe - First observed
set_keyframes - First observed
set_material - First observed
set_node_color - First observed
set_node_flags - First observed
set_parameter - First observed
set_parameters - First observed
set_playback_range - First observed
set_render_settings - First observed
set_selection - First observed
set_usd_attribute - First observed
set_viewport_camera - First observed
set_viewport_direction - First observed
set_viewport_display - First observed
set_viewport_renderer - First observed
set_wrangle_code - First observed
setup_flip_sim - First observed
setup_pyro_sim - First observed
setup_rbd_sim - First observed
setup_render - First observed
setup_vellum_sim - First observed
start_render - First observed
step_simulation - First observed
subscribe_houdini_events - First observed
uninstall_hda - First observed
update_hda - First observed
validate_vex - First observed
write_cache
TDQS
Scored across 20 tools
Most tools have clearly distinct purposes, and descriptions explicitly cross-reference alternatives (e.g., cook vs pdg vs render, node_inspect vs scene_overview vs geometry_inspect). Minor overlaps remain: scene_overview lights and stage_inspect lights both read USD stage lights, geometry_inspect image and node_inspect image both inspect COP nodes, and selection/cache data can be obtained from multiple tools. These are edge cases, but they keep the set from being perfectly unambiguous.
All names use lowercase snake_case or single lowercase tokens, with no camelCase or case-style mixing. The pattern is not strictly verb_noun: there are single verbs (capture, connect, select, cook, render, execute), single nouns (batch, console, docs, hda, pdg, playbar, session), and noun_verb compounds (node_edit, node_inspect, parm_set). Still readable and mostly predictable, with only minor deviations.
20 tools is above the typical 3-15 sweet spot and lands in the heavier 16-25 range, so it is mildly over rather than perfectly scoped. However, each tool maps to a distinct Houdini subsystem, and many operations are consolidated into mode-based tools, avoiding an even larger surface. The count is reasonable given Houdini's breadth.
The surface covers session management, scene files, inspection, node editing, parameter writing, wiring, cooking, simulation, PDG, USD, rendering, capture, HDA editing, docs, execution, undo, and more. No obvious lifecycle gap remains for the stated domain; agents have both high-level and low-level escape hatches where needed.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
The OpenRouter MCP server plugs OpenRouter into the AI tools you already use. Once connected, your assistant can pull live OpenRouter data (models, prices, your credits, rankings, and docs) and send quick test messages, all without leaving your editor.
Related MCP Servers
- AlicenseBqualityBmaintenanceConnects 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.2130,209MIT
- FlicenseNot gradedqualityDmaintenanceConnects Houdini to Claude AI through Model Context Protocol, enabling AI-assisted 3D modeling, scene creation, simulation setup, and rendering through natural language commands.59-
- AlicenseNot gradedqualityDmaintenanceConnects Claude AI to Houdini via the Model Context Protocol, enabling prompt-assisted 3D modeling, scene manipulation, and rendering within Houdini.11GPL 3.0
- AlicenseNot gradedqualityDmaintenanceConnects Claude AI to Houdini through the Model Context Protocol, enabling direct interaction and control for 3D modeling, scene creation, simulation, and rendering.20MIT