HoudiniMCP
HoudiniMCP connects AI agents to a live SideFX Houdini session so they can inspect, build, run, render and visually verify 3D scenes.
Inspect the scene —
scene_overviewlists networks, nodes, wires, materials, lights, caches, ROPs and errors;node_inspectreads parameters, expressions, keyframes, VEX code, simulations and render settings.Read geometry and USD —
geometry_inspectsummarises points, prims, attributes, groups, volumes, skeletons, fingerprints and comparisons;stage_inspectexplores USD prims, layers, composition, variants and transforms.Build networks —
node_editcreates, deletes, copies, moves, renames, lays out, inserts, splits and wires nodes, makes materials, sticky notes and boxes;connectwires nodes;parm_setwrites values, expressions, keyframes and spare parameters.Batch operations —
batchruns many of these tools in one all-or-nothing undo group.Run work —
cookcooks nodes, simulates, writes and clears caches, steps DOPs and recooks errors;pdgcooks TOP networks;renderstarts and monitors ROP renders and compares against references.See results —
captureproduces viewport, quad, camera, flipbook, sheet, movie and network-editor images.Run code —
executeruns Python, HScript, expressions, VEX checks and background jobs inside Houdini.Read documentation —
docssearches and reads the offline Houdini docs matching the installed build.Manage assets and files —
hdalists, installs, updates and edits digital assets;scene_filesaves, loads, undoes and redoes;playbarcontrols time.Manage sessions —
sessionlists, attaches, starts (headless or GUI) and interrupts Houdini sessions;selectreads or sets the node selection;consolereads logs and node errors.
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 path is the exception: give a step an `id`, and a later step writes
"$<id>" where it needs the path of the node that step made. So a network of
default node names (box1, attribwrangle3) needs no guess of the name.
A failed batch changes nothing. Every step is checked before any step
runs, and a step with a wrong argument stops the batch. A step that fails
as it runs stops the list, and the steps before it are undone. A step whose
item failed is a failed step, and so is a parameter write that did not
apply. The error names the index of the step and its error.
Returns JSON with one result for each operation, in the order of the
operations, and the picture of every capture step.
A batch that works cooks the display node of each SOP network that it
touched: `check` gives its point and primitive counts, and the touched
nodes that have errors. Read it before you build on the result.
A capture step with no `output` writes to a file of its own, so one batch
can hold several captures.
| 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. Add "id": "name" to a step, and a later step can write "$name" (or "$name/child") for the node path that step returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, so the agent already knows this mutates state; the description adds substantial context on top: atomicity ("A failed batch changes nothing", full pre-validation), rollback semantics (prior steps undone when a later step fails), one-undo-group behavior, and cooking of display nodes. It also notes that a capture step with no output writes its own file, which is a real side effect an agent must anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key exclusion are front-loaded, and every paragraph carries different information (undo grouping, no mid-list branching, atomicity, return shape, cooking). Some sentences are wordier than necessary ("...and a person can undo the whole thing with one keystroke"), and the paragraph on failure modes is dense loop-prone prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return contract itself: one result per operation in order, plus the picture of every capture step, plus the cooked display node's point/primitive counts and touched nodes with errors, and advice to read that before building on the result. Failure reporting (error names the step index and its error) and the multi-capture case are also covered, which is complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage the schema already documents the shape, but the description adds real semantics: ordering, the rule that any server tool except batch is allowed, and how id/"$id" (or "$id/child") lets a later step consume an earlier step's node path instead of guessing names. It doesn't add argument-level detail for the individual sub-tools, which is appropriately left to them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Run several Houdini tools in one call" names a specific verb and resource, and the description immediately frames the scope (many nodes, wires and parameters in one round trip and one undo group). It is unmistakably distinct from the single-purpose siblings like node_edit, cook or parm_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a positive use case (build a network), an explicit exclusion ("Do not use it when a later step needs to read what an earlier step made"), and the reason (the list runs without the agent in the middle, so nothing can branch on a result). It also spells out the one exception, the id/"$<id>" path substitution, so the agent can decide between batching and sequential calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
captureAIdempotent
Make a picture of the scene, or of the network editor, and look at it.
Modes: viewport, quad, camera, flipbook, sheet, movie, network.
Use it to confirm your own work: numbers in a node do not tell you that the
result looks wrong. Use it before you report that a task is done.
Do not use it for a final picture: render does that through a ROP.
The view goes back to where the user left it when the picture is written.
Nothing here changes the scene for good.
mode:
"viewport" — the viewport as it is now.
"quad" — four pictures: top, front, right and perspective.
"camera" — through the camera node at `camera`.
"flipbook" — a sequence over `frame_range` [start, end]. Returns the
path of the files, not a picture.
"sheet" — `node` at many frames on one picture, a tile for each
frame with its number, all from one camera that does not
move. Frames: `frames`, or `count` frames from `start`
(the current frame) at `step` (1). A step over 2 hides
movement and gives a warning: look at a short range at
step 1. `reference` is a picture to put first, to
compare. `columns`, `tile_width` set the grid. The
frames cook in order, forward, and the result gives
the cook seconds of each one.
`azimuths` (a list of angles) draws each frame from
each angle: one frame and 8 angles is a turntable.
`bounds` [xmin, ymin, zmin, xmax, ymax, zmax] is the
box to frame, for example the hands only.
"movie" — `node` over `frames` or `frame_range` (the playbar
range) as an MP4 at `fps`, `resolution` [width] wide.
Returns the path; open it in a player.
"network" — a drawing of the network `node` from the scene data:
node colors, flags, names, comments, path text, dots,
network boxes, sticky notes, and the wires in the wire
style of the network (straight or rounded, Shift+S).
`paths` are the items to frame (default all). It does
not touch the screen and works without a window.
sheet and movie draw with an OpenGL ROP, with or without a window,
over a flat grey `background`. To see where a point attribute lives, use
"sheet" with one frame and `color_by`, with `contour`, `slab` or
`vectors`.
A Houdini with no window has no viewport, and there an OpenGL ROP draws the
same picture from the same arguments over a grey background. It runs in a
new hython, so the scene gets no camera and no ROP.
Aim the view with `frame` and `fill`, with `target`, `look_from` and
`radius`, with `direction`, with `azimuth` and `elevation`, or with
`camera`.
Returns the picture, plus JSON with the state of the window: the frame, the
open file, the selection, the network in front, and which nodes carry the
display, the render and the template flag. A picture that does not change
after an edit is almost always a display flag on another node.
Houdini without a GUI has no viewport: then the result says so and names
the next action.
| 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", "network". | 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). | |
| paths | No | network: the items to frame in the network editor. | |
| start | No | sheet: the first frame. Without it, the current frame. | |
| bounds | No | sheet: [xmin, ymin, zmin, xmax, ymax, zmax], the box to 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. | |
| azimuths | No | sheet: a list of angles; each frame is drawn from each angle. | |
| 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?
Beyond the annotations, the description discloses that the view is restored, that nothing changes the scene permanently, that flipbook returns a path rather than a picture, that sheet/movie use an OpenGL ROP working without a window, that headless capture runs in a new hython, and that the return includes JSON window state. This is far richer than the readOnly/idempotent hints alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then exclusion, then a mode list, so the agent can stop reading early. It is long, and some details (grey background, no-window behavior) are restated in more than one place, but for a 34-parameter tool the length is largely earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 34 optional parameters and no output schema, the description carries the burden well: it explains what is returned (picture plus JSON window state), the headless fallback behavior, and how a picture's staleness points to a display flag issue. An agent can call this correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic guidance the schema lacks: flipbook returns a file path, sheet with step > 2 hides motion and warns, azimuths produces a turntable, bounds can isolate just the hands, and how to aim the view via several parameter combinations. This is genuine value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Make a picture of the scene, or of the network editor') and enumerates all seven modes, so an agent knows exactly what it produces. It also explicitly contrasts itself with the sibling 'render' tool, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive trigger ('confirm your own work... before you report that a task is done') and an explicit exclusion with the named alternative ('Do not use it for a final picture: render does that through a ROP'). No inference is left to the caller.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectAIdempotent
Change how nodes feed each other.
Modes: connect, disconnect, reorder.
Use it after node_edit made the nodes. A list of wires goes in one undo
group and one round trip.
Do not use it to wire a node that you make now: node_edit mode "create"
takes `input_path` and wires it in the same call. Do not use it to read the
wires: scene_overview mode "network" lists them.
mode:
"connect" — src_path feeds dst_path. dst_input_index chooses the
input, src_output_index the output. Both count from 0.
A wire into an input that has one replaces it.
Either end can be a network dot.
"disconnect" — path loses the wire on input_index.
"reorder" — path takes its inputs in the order input_indices.
For several wires, give `items`: for "connect", each item has src_path and
dst_path, and can have dst_input_index and src_output_index; for
"disconnect", each item has path, and can have input_index.
Returns JSON, one line for each wire, with the paths that Houdini used.
An input index that the node does not have is reported, not dropped.
| 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 or network dot whose input takes the wire. | |
| src_path | No | connect: the node or network dot 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?
Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses that a wire into an occupied input replaces the existing one, that a list of wires lands in one undo group and one round trip, and that invalid input indices are reported rather than silently dropped. These are operationally important facts an agent would otherwise have to guess or test.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then alternatives, then a mode-by-mode breakdown – each block is short and every sentence carries information (replacement semantics, undo grouping, return shape). No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, zero-required, mode-driven mutation tool with an output schema, the description covers purpose, mode semantics, item/default behavior, alternatives, and a brief return outline. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter meaning is already documented; the description nonetheless adds mode-to-parameter mapping that the schema only signals via name prefixes, and restates that both indices count from 0 and either end may be a network dot. Much of this is reinforced rather than new, but the per-mode grouping genuinely helps select the right fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Change how nodes feed each other') and immediately enumerates the three modes (connect, disconnect, reorder). An agent can distinguish this from node_edit and scene_overview without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it after node_edit has created the nodes, then names two alternatives with the conditions that select them: node_edit mode "create" with input_path for wiring a node being made now, and scene_overview mode "network" for reading wires. When-to-use and when-not-to-use are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
Modes: cook, cache_write, cache_clear, sim_step, sim_reset, recook.
Use it to run a test: write a few parameters, cook a range of frames, and
read the seconds for each frame. That is one call, and it is the loop that
every look iteration needs.
Do not use it to read the result: geometry_inspect does that, and it cooks
the node as well.
mode:
"cook" — cook the nodes and return the errors, the warnings and
the time. `frames` or `frame_range` cooks over more
than one frame; the playbar goes back to where it was.
"cache_write" — write the file cache of the node. frame_range is
[start, end]; without it the node writes its own range.
"cache_clear" — remove the cached files of the node.
"sim_step" — step a DOP network num_steps frames.
"sim_reset" — clear the cache of a simulation, so that the next cook
runs it again. It accepts a DOP network and a solver
SOP such as a Pyro, FLIP, Vellum or RBD solver. After
you change anything inside a solver, reset it: the node
gives its old result back with no error and no warning.
On a solver SOP it cooks the sources first, cooks the
start frame after the reset, and reports the
primitives there. It fails when the result is empty
while the sources are not: that simulation stays
empty on every frame.
"recook" — cook again each node at or under `paths` that holds
an error or a warning, the deepest first, and say
which messages were stale (gone) and which are
current. Use it when an error names a cause that the
network does not have, such as "Infinite recursion"
with no cycle.
Cook frames here, not in an execute loop of hou.setFrame and geometry():
the viewport cooks the same nodes during the loop, and that can leave
false errors on the nodes inside a solver.
Returns JSON: the seconds in total, for each frame, and the slowest frame,
with the errors and the warnings of every node. Each frame also gives the
point count, the primitive count and the bounds of each SOP: one call
checks that a result moves or grows over a range. `ok` is false when a
node failed to cook, and `failed` then names each node upstream of it or
inside it that holds an error, with the text: the node that broke is
often another node than the one you cooked. A cook, a cache or a
simulation can take hours, and the call waits for it: a client that reads
MCP tasks gets a task at once and polls it. Houdini answers no other call
until the cook ends; session action='interrupt' stops it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "cook", "cache_write", "cache_clear", "sim_step", "sim_reset", "recook". 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 already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, and the description is consistent with them: cache_clear removes cached files, sim_reset discards simulation state. It also adds genuinely valuable behavior that annotations cannot express: cooks can take hours, the call blocks, Houdini answers no other call until the cook ends, MCP task clients get a task immediately, and session action='interrupt' stops it. That blocking/interrupt information is non-obvious operational behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with modes, then usage, then returns; each mode entry is a tight line. It runs long, and the 'Returns JSON' paragraph partly duplicates the output schema that already exists, which is the only real waste. The opening metaphor costs a sentence before the concrete content arrives.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, six-mode, destructive and potentially hours-long blocking tool, the description covers everything an agent needs: mode semantics, the stale-error/recook case, sim_reset's silent-stale-result trap, failure reporting through 'failed', and how to interrupt. Output shape is covered by the output schema, so the description need not carry it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns a step above by explaining what each mode value actually does (schema only lists the strings), what frames/frame_range do across modes and that the playbar is restored, and that parameter writes report which ones changed nothing. It adds real semantics rather than restating field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence is stylized, but the mode list immediately pins down concrete verbs and resources: cook nodes, write/clear file caches, step/reset DOP simulations, recook errored nodes. It explicitly contrasts itself with geometry_inspect ('Do not use it to read the result'), so an agent can separate it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit positive recipe ('write a few parameters, cook a range of frames, and read the seconds'), an explicit exclusion with the named alternative (geometry_inspect for reading results), and an explicit anti-pattern ('Cook frames here, not in an execute loop of hou.setFrame and geometry()') with the reason. When-not guidance is as strong as when guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
Modes: python, hscript, expression, vex_check, env, job.
Use it for what no other tool covers, and to confirm an API in the live
session, for example `print(dir(hou.Node))`. The code runs with the rights
of the Houdini process: it can write files, delete nodes and quit Houdini.
Do not use it to build a network: one batch of node_edit create, connect
and parm_set is also one round trip, and each step reports its errors.
`hou.Node.inputs()` skips network dots and gives the node behind them; use
`inputConnections()` and `inputItem()` for the real wiring before you
rewire or delete.
Prefer a named tool when one exists. A write in code to a parameter that
holds an expression, that is disabled or hidden, or whose range clamps the
value changes nothing, and a write to a channel reference changes another
node. The answer lists each such write in `write_warnings`; read it. If you
write the same script twice, the named tool for it is missing: say so in
the feedback at the end of the session.
mode:
"python" — run `source` as Python. Returns stdout and stderr, and
keeps them when the script raises. Print what you want
to see: the value of the last line does not come back.
"hscript" — run `source` as an HScript command.
"expression" — evaluate `source` as an expression. `language` is
"hscript" or "python".
"vex_check" — compile `source` as VEX and report the errors. Nothing
runs.
"env" — read the Houdini variable `name`, for example "HIP".
"job" — the state of the background job `job`: running, with
what it printed so far, or done, with its result.
`wait` waits for the end, up to that many seconds.
Use `file` for a script that you run again with other values. Houdini
answers nothing while a script runs: for long work, such as a sweep, use
`background` with a large `timeout`. session action='interrupt' stops it.
| 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". | |
| wait | No | job: the most seconds to wait for the job to end. The answer comes when it ends or when the wait is over, with what it printed so far. | |
| 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?
Beyond the annotations, it discloses that code runs with Houdini process rights, can write files, delete nodes, and quit Houdini. It also explains silent write failures and `write_warnings`, blocking behavior during execution, timeout side effects, and that background jobs refuse other calls until they end.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and organized by purpose, alternatives, warnings, and mode list. It is appropriately sized for a destructive multi-mode execution tool, though some sentences duplicate schema detail and the end-of-session feedback advice is slightly tangential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, destructive annotations, 11 parameters, and output schema, the description covers the critical gaps: modes, side effects, silent parameter-write behavior, blocking behavior, timeout semantics, and when to use alternatives. An agent has enough context to call it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameters thoroughly, but the description adds useful mode-specific meaning: what each mode does, that Python does not return the last line's value, how `file` and `args` relate to `sys.argv`, and the semantics of `background`, `wait`, and `timeout`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run code in Houdini, with the full `hou` module and no guard.' It enumerates all supported modes and distinguishes itself from siblings by saying it is for what no other tool covers and explicitly warning against rebuilding networks that `node_edit` handles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('Use it for what no other tool covers', 'confirm an API in the live session') and when-not-to-use guidance ('Do not use it to build a network...', 'Prefer a named tool when one exists'). It also routes long-running work to `background` and interruption to `session action='interrupt'`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geometry_inspectAIdempotent
Read the geometry that a node produces. This cooks the node.
Modes: summary, points, prims, attrib, groups, group_members, bbox, intrinsics, nearest, skeleton, compare, try, volume_stats, volume_voxels, volume_sample, volume_compare, image, volume, export, fingerprint, stretch, inside, crossings, distance, changes.
Use it to confirm that a node made what you expected: the point count, an
attribute that a wrangle wrote, the shape of a volume, the size of the
bounding box.
Do not use it to read parameters: node_inspect does that.
mode:
"summary" — counts, attributes, groups, volumes, bounds. Start
here. An empty result carries the errors and the
warnings of the node, which is where the reason is.
"points" — `count` points from `start`, with `attribs`.
"prims" — `count` primitives from `start`.
"attrib" — the values of `attrib_name` on `attrib_class`
("point", "prim", "vertex", "detail"): min, max
and mean of each component over every element,
and `limit` (10) values from `start`. A vector
attribute keeps its shape. unique=True returns each
value that occurs and how many elements carry it,
which is how you find the pieces in a geometry.
"groups" — the groups of `group_type`.
"group_members" — the members of `group_name`.
"bbox" — the bounding box.
"intrinsics" — the intrinsic values of primitive `prim_index`.
"nearest" — the point nearest to `position`, for example [0,1,0].
"skeleton" — a KineFX skeleton: each joint with its name, its
parent and its transform. `pattern` keeps the names
that match ("|" between alternatives, * as a
wildcard). A KineFX import holds the skeletons on
output 1 and 2: give `output`.
"compare" — the difference from the node at `against`. Points are
matched by `match_attrib` ("name" by default), not by
their order. Use it to prove that a new node gives
the result of the node it replaces.
"try" — run `steps`, a list of
{"node_type": ..., "parameters": {...}}, on the
geometry of `path` as verbs. Nothing changes in the
scene. Use it to learn what a node would make. A
menu takes its token ("poly") or its index. A type
with no verb, such as an asset, runs as a temporary
node in a hidden network that is then deleted.
`attrib_name` reads that attribute on the result,
as mode "attrib" does, `unique` included.
"volume_stats" — every volume or VDB: resolution, voxel size, the
extremes, the mean, the sum, percentiles. `name`
reads one, `bins` adds a histogram, `threshold`
counts the voxels below and above it and gives the
world box of the voxels above it.
"volume_voxels" — one field as an array indexed [z][y][x], with its
shape and its transform. `name` is the field.
`reduce` gives one answer instead: "sum", "mean",
"max", "min", or "project_x", "project_y",
"project_z" (the sum along that axis, a 2D array).
An array past `limit` numbers is thinned.
"volume_sample" — read `names` (fields) at `positions`, or at the
points of `from_node`, with no node added to the
scene. Returns min, max, mean, percentiles, a
histogram of `bins` (10), the counts on each side of
`threshold`, and the values when there are at most
`limit` (1000).
"volume_compare" — how much of the field `name` sits in each band of the
field `against`. The answer to "how much smoke is
inside the collider". `from_node` holds `against`
when another node does, such as the collider SDF.
"image" — a COP node: resolution, planes, and `plane_name`.
"volume" — the VDB grids in a COP node.
"export" — write the geometry to disk. `format` is "obj",
"bgeo" or another that Houdini writes, and `file`
is the file path. A file that is there is
overwritten. The other modes write nothing.
"fingerprint" — for each node of `path` and each frame: counts,
bounds, a hash of P and of the attribute names.
`name` saves it. After a refactor, call it again
with `against` (the saved name) and `renamed`, and
read `compare`: what differs, or same=true.
"stretch" — how much each edge grew against the same edge of
the rest mesh `against`: max, percentiles, the
count over `threshold`, the worst edges and the
places where they are, on the rest mesh.
"inside" — the points of `path` inside the closed mesh
`against`: the count, the depth, where they are.
Run it before a cloth sim.
"crossings" — the points where the surfaces of `path` cross,
themselves or `against`, counted for each pair of
parts of `split_by`. A part with itself is a self
crossing.
"distance" — the distance from each point to the surface of
`against`: min, max, mean, a histogram of `bins`,
and the point numbers farther than `threshold`.
With `frames`, one answer for each frame.
"changes" — cook over `frames` (two or more, step 1 to see
pops) and return a table: counts, box size and
center, and the mean, min and max of `attribs`
for each frame. `jumps` lists the frames where a
number changes by more than `threshold` (0.2)
from the frame before: pops, flicker and hard
stops that one frame does not show.
Returns JSON. A large read is slow: keep `count` small and page with
`start`.
| 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]. | |
| file | No | export: the file path to write. | |
| 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", "fingerprint", "stretch", "inside", "crossings", "distance", "changes". | summary |
| name | No | volume_stats: one volume to read. volume_voxels, volume_compare: the field. fingerprint: save the result under this name. | |
| 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). stretch: how many of the worst edges (10). | |
| 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. A menu takes its token or its index. 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 | The output of the node to read, 0 by default. A KineFX import has the mesh on 0, the rest skeleton on 1, the animated skeleton on 2. | |
| 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. distance: the node to measure to. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body. | |
| attribs | No | points: the attributes to return, for example ["P", "Cd"]. changes: the attributes whose mean, min and max to follow. | |
| pattern | No | skeleton: keep the joints whose name matches. | |
| renamed | No | fingerprint: {"old path": "new path"} for the nodes that a refactor renamed or moved. | |
| position | No | nearest: [x, y, z]. | |
| split_by | No | crossings: a prim attribute, such as "name", whose values are the parts that the count pairs. | |
| 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. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance. distance: list the points farther than it. changes: the ratio of change from one frame to the next that counts as a jump (0.2). | |
| group_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, try: the attribute to read. try reads it on the result. | |
| attrib_class | No | attrib, try: "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?
Goes well past the annotations by disclosing that the tool cooks the node, that "try" runs verbs or temporary hidden nodes with no scene change, and that only "export" writes and silently overwrites an existing file while all other modes write nothing. Read-only-looking usage is thus clearly scoped. Minor deduction: the overwrite behavior sits in tension with destructiveHint=false and is buried in one mode's paragraph rather than flagged near the top.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded: purpose and the sibling exclusion come first, then a mode catalogue with per-mode paragraphs. The full 25-mode list is repeated verbatim from the schema's mode enum, which is redundant weight, but the structure is otherwise disciplined and each mode paragraph earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 25-mode, 31-parameter tool, the description covers every mode's intent, key parameter, notable defaults, and the paging/performance caveat ("keep count small and page with start"). An output schema exists, so return shapes need not be explained, and the remaining complexity is handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter guidance: which parameters each mode consumes (bins for the volume modes, limit for attrib/voxels/stretch, threshold with different defaults per mode), the "token or index" rule for menu values in steps, and wildcard syntax for pattern. Most of this duplicates the schema text, which keeps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read the geometry that a node produces. This cooks the node." names a specific verb and resource, and immediately states the side effect. It explicitly contrasts itself with node_inspect (parameters vs geometry), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use it ("confirm that a node made what you expected: the point count, an attribute a wrangle wrote, the shape of a volume") and when not to ("Do not use it to read parameters: node_inspect does that"). It also names a default entry point, "summary" — "Start here."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hdaADestructive
Read and change Houdini digital assets.
Modes: list, get, install, uninstall, reload, update, create, sections, section_get, section_set.
Use it when a node type comes from a .hda file: to find the file, to load a
new one, or to read the scripts and the help inside it.
Do not use it for the parameters of one node in the scene: node_inspect
does that.
mode:
"list" — the installed assets. `category` filters, for example
"Sop".
"get" — the definition of `node_type`: the file, the version
and the tools.
"install" — load the .hda file at `file_path` into the session.
"uninstall" — unload the .hda file at `file_path`.
"reload" — read the .hda file at `file_path` again, after an edit
on disk.
"update" — save the node at `node_path` back into its asset.
"create" — make an asset from the subnet at `node_path`, with
`name`, `label` and `file_path`.
"sections" — the section names inside `node_type`.
"section_get" — the text of `section_name`, for example "PythonModule".
"section_set" — write `content` into `section_name`.
Returns JSON. "install" and "uninstall" change every node of that type in
the session.
| 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 non-idempotent, and the description goes beyond them by disclosing the blast radius: install and uninstall "change every node of that type in the session." That is exactly the kind of context annotations cannot express. It still doesn't say whether section_set overwrites existing text, what happens when a file_path is missing, or how errors surface, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then a compact mode index, then one-line bullets per mode, then a return/impact note. Every bullet earns its place, but the bare mode list at the top partially duplicates the per-mode bullets below it, costing a little space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and a one-line "Returns JSON" suffices. For a 10-mode destructive mutation tool it covers triggers, mode semantics, and cross-session impact well; the remaining gap is overwrite/error semantics for the write modes (reload, update, create, section_set).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each property already carries a mode-prefixed description, so the baseline is 3. The description adds real value by organizing parameters by mode and thereby implying the per-mode required combinations (install needs file_path, create needs node_path plus name/label/file_path) even though the schema declares zero required parameters. It omits that mode defaults to "list".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ("Read and change Houdini digital assets") and immediately enumerates the ten modes, so the agent knows the full surface of the tool. It also names the sibling it is not (node_inspect) and the domain boundary (.hda files), making it clearly separable from node_edit/parm_set/node_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ("when a node type comes from a .hda file: to find the file, to load a new one, or to read the scripts and help inside it") plus an explicit exclusion that redirects to node_inspect for scene-node parameters. The per-mode list further disambiguates internal alternatives so the agent can pick the right mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_editADestructive
Change the nodes in a network. One item, or a list in one undo group.
Modes: create, delete, copy, move, rename, flags, color, layout, insert, place_chain, wrangle, material, assign_material, take, current_network, note, box, split.
Use it to build a network. Then use parm_set for the values, and connect
for the wires. Keep the default names that Houdini gives: leave `name`
out, except for the one Output SOP of a network (OUT_<NAME>). A create
that breaks a house rule (an Expression SOP, a second Output SOP, a long
wrangle) gives `house_rule` in its result.
Do not compute positions: create with input_path, insert and place_chain
place the nodes the way the user lays out a graph, move a node of the user
only down to make room, and return every node that moved with its old and
new position. Each returns the layout faults it sees.
Do not use it to set parameters: parm_set does that, and it reports a write
that had no effect.
mode, and the arguments that each mode reads:
"create" — node_type, parent_path, name, position,
parameters, input_path. context selects the
network kind: "sop" (default), "cop", "chop",
"lop", "material_network".
"delete" — path or paths: nodes, dots, sticky notes or
network boxes. A node that still feeds a node
outside paths is refused, with the list of its
readers, unless force=true.
"copy" — paths (or path), destination_path, suffix,
names. Copies a set of nodes with the wires
between them; a wire from outside the set goes to
the same node. suffix is added to each name, or
names maps a source path or name to a new name.
Returns `copies`, each source path with the path
of its copy: use that map, never the order of a
list. Without destination_path the copies go to
the right of the sources.
"move" — path with destination_path to put it in another
network, or path with position to move it on the
canvas.
"rename" — path, new_name.
"flags" — path, display, render, bypass. The display flag
and the render flag are different flags.
"color" — path, color as [r, g, b] from 0 to 1.
"layout" — path: lay out the children of that network
with the user's Smart Layout shelf tool (the same
code): one row per input depth, each node under
its first input, other inputs in the columns to
the right. Give `paths` to lay out only
those nodes. Without it the whole network moves,
including the nodes the user placed by hand, and
the result says so.
"insert" — node_type (or path of a node), input_path, and
reader: put the node on every wire from
input_path into reader (all streams of a Vellum
chain), or into every reader. The nodes below
move down only by the room it needs.
"place_chain" — paths (in order), reader, input_index: wire the
chain into that input and place it as a side
chain, its own column right of the reader, last
node one row above it. Wire a side result into
the node that really reads it, not through
pass-through ports of a chain.
"split" — path (a SOP network) and stages: move the nodes
of each stage into a subnet of that name. Each
result that another stage reads gets an OUT_
Null, and each reader an IN_ Object Merge.
Node paths in parameters, expressions and VEX
code are rewritten for the new places. Returns
each rewrite and each path it could not
resolve. Undo puts it back in one step.
"wrangle" — parent_path with code to make a wrangle, or path
with code to write into one. code_file reads the
code from a file, so a long snippet travels once.
replace edits a snippet in place: a list of
{"old": ..., "new": ...}, and each `old` must
appear exactly once.
"material" — path, material_type, name, parameters.
"assign_material" — path, material_path.
"take" — name to make a take, or take_name to select one.
"current_network" — path: what the network editor shows.
"note" — parent_path, text, position, color: a sticky
note. Without position it goes to the right of
the nodes. Notes go here, never in a node
comment.
"box" — paths, text, color: a network box around those
nodes, with text as its title: one to three
words. A longer text is refused.
Returns JSON. Houdini adds a numeric suffix when a name is already used, so
read the path in the result and use that path from then on. Never look the
node up again by the name you asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | wrangle: the VEX snippet. | |
| mode | No | One of "create", "delete", "copy", "move", "rename", "flags", "color", "layout", "insert", "place_chain", "wrangle", "material", "assign_material", "take", "current_network", "note", "box", "split". | 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. | |
| force | No | delete: delete a node that still feeds a node that stays. | |
| 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. delete: the nodes to delete together. layout: place only these nodes. place_chain: the chain, in order. box: the nodes to put in the box. | |
| bypass | No | flags: the bypass flag. | |
| reader | No | insert: only the wires into this node. place_chain: the node that the chain feeds. | |
| render | No | flags: the render flag, which is not the display flag. | |
| stages | No | split: {"stage name": ["node", ...]}, the nodes of `path` for each subnet. | |
| 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. insert: the node whose output wires get the new node. | |
| parameters | No | create, material: values to set on the new node, by parameter name. | |
| input_index | No | place_chain: the input of reader that the chain feeds. | |
| 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 declare destructive/non-idempotent, and the description goes well beyond them: house-rule violations return `house_rule`, deletes of still-feeding nodes are refused with the reader list, layout moves user-placed nodes and the result says so, split rewrites embedded paths and reports unresolvable ones, and undo grouping is specified. It also warns that Houdini adds numeric name suffixes and the caller must use the returned path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and routing guidance are correctly front-loaded, but the 18-line 'mode, and the arguments that each mode reads' block duplicates parameter documentation that is already at 100% schema coverage, inflating an already long description. Structure is scannable, but a meaningful fraction of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 30-parameter, 18-mode, destructive, non-idempotent mutation tool this is complete: it covers mode selection, argument roles, failure modes, name-resolution behavior, and return-value quirks. An output schema exists, so return-format detail is rightly not expanded further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the 3 baseline is already met by structured data; the description adds real meaning on top, e.g. that copy returns a `copies` map that must be used instead of list order, that each `old` in replace must appear exactly once, and that a note without position is placed to the right. However, the long per-mode argument enumeration largely restates what the schema descriptions already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Change the nodes in a network') and then enumerates all 18 modes, so the agent knows the full action space. It explicitly distinguishes itself from parm_set (values) and connect (wires), which are the two siblings an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing is given: 'Use it to build a network. Then use parm_set for the values, and connect for the wires' plus the negative 'Do not use it to set parameters'. It also states when-not conditions ('Do not compute positions') and per-mode preconditions such as the delete refusal unless force=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_inspectARead-onlyIdempotent
Read one node, or a list of nodes, without changing anything.
Modes: info, parms, schema, changed, names, expression, keyframes, code, cook_chain, explain, material, image, channels, simulation, render_settings, cache, time_dependency, validate, layout, readers.
Use it before you write: to confirm a parameter name, to see whether a
parameter carries an expression, and to read what a node reports after a
cook.
Do not use it to list a network: scene_overview does that.
mode:
"info" — type, inputs, outputs, flags, changed parameters.
"parms" — every parameter, or one parameter when you give
`parm`. The result says whether the value comes
from an expression.
"schema" — the parameter templates: types, ranges, menus.
Read this before you write a menu parameter.
"changed" — only the parameters that a person set: not at the
default, or with an expression or keys. Folders,
labels, buttons and hidden fields are left out, and
a ramp is one entry with its keys.
"names" — the names of the parameters, and nothing else. Read
this first when you do not know the name to write.
"expression" — the expression on `parm`, and its language.
"keyframes" — the keys on `parm`.
"code" — the VEX snippet in a wrangle node.
"cook_chain" — what this node cooks from, upstream.
"explain" — a short account of what the node does here.
"material" — the shader parameters of a material node.
"image" — the COP node: resolution, planes, data type.
"channels" — CHOP channels. `channel`, `start` and `end` read
the samples of one channel.
"simulation" — the DOP network. `object_name` reads one object,
with `field_name` one field of it.
"render_settings" — the parameters of a ROP node.
"cache" — the file cache state of a node.
"time_dependency" — which nodes under this one cook again on every
frame, and what makes each one do it. With
`frames` it times each one and sorts by the time.
"validate" — the names in the parameters of the node that name
nothing: a group, an attribute or a volume that the
input geometry does not hold. That is the failure
that gives a wrong result with no error.
"layout" — for a network: each node that sits above its input,
each pair of nodes where one name covers the
other, wires behind nodes, and the house rules:
node comments, box titles that are sentences or
cut off, a box in a box, a node in a box it is not
part of, a Null OUT_ display node with no Output.
Read it after you add nodes.
"readers" — the parameters that read `parm` through a channel
reference or an expression: what else a write to
it changes.
A solver has hundreds of parameters: give pattern or fields.
Returns JSON. A cook error comes back in the result: an empty geometry with
no error line means the node cooked and made nothing.
| 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 declare readOnly/idempotent/closed-world, but the description adds traits they cannot express: a list keeps going after a failing node and each result names its path, cook errors come back inside the result payload rather than throwing, an empty geometry with no error line means the node cooked and made nothing, and the playbar is restored after `frames`. These are genuine behavioral disclosures beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the exclusion, then mode semantics, so a reader can stop early. The mode name roll-call in the opening line is then repeated and expanded in the bullets, which is a modest redundancy in an otherwise tight, scannable layout.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be spelled out, and the description still covers the salient error semantics. For a 13-parameter, 20-mode inspection tool, the guidance on mode selection, prerequisites per mode, partial-failure behavior, and the validation mode's motivating failure mode leaves nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what each mode requires of the parameters (parm for expression/keyframes/readers, channel+start+end for channels, object_name+field_name for simulation, frames for time_dependency, pattern/fields for solver-sized parameter sets). It adds practical selection guidance such as "A solver has hundreds of parameters: give pattern or fields." It stops short of 5 only because the per-mode text largely restates the terse schema hints rather than adding new syntax or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus scope: "Read one node, or a list of nodes, without changing anything." It also explicitly separates itself from the sibling that lists networks (scene_overview), so an agent can pick it without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ("Use it before you write: to confirm a parameter name, to see whether a parameter carries an expression, to read what a node reports after a cook") and an explicit when-not with the named alternative ("Do not use it to list a network: scene_overview does that"). It additionally sequences modes for the agent ("Read this first when you do not know the name to write").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parm_setADestructive
Write parameter values, or press a button. One write, or a list in one undo group.
Modes: value, press, expression, keyframe, keyframes, delete_keyframe, revert, lock, link, spare, render_settings, chop_export, snapshot, restore, diff.
Use it after node_inspect has confirmed the parameter name and the type.
A write can be accepted and change nothing, and Houdini says nothing. This
tool looks for all six causes and names the one it found:
- the parameter carries an expression, which still decides the value;
- the parameter is animated, so the value became a new key;
- the parameter is locked;
- another parameter disables or hides it, so the cook does not read it;
- a strict range clamped the value;
- the parameter reads another node through a channel reference, so the
write would change that other node. It is refused; give
`follow_reference=true` to write the node at the other end.
Read `warnings` and `not_applied` in the result before you report success.
mode, and the arguments that each mode reads:
"value" — path, parm, value. Or path and parameters, a
dictionary of several names and values. A menu
takes its token, for example "custom". A
bit-field menu takes a token or a list of them.
"press" — path, parm: press a button, for example Save to
Disk on a File Cache, Reload on a File SOP, or
Resimulate on a solver. The result holds the errors
and the warnings of the node after the press,
because work that a button starts fails later and
in silence.
"expression" — path, parm, expression, language ("hscript" or
"python").
"keyframe" — path, parm, frame, value.
"keyframes" — path, parm, keyframes: a list of {frame, value}.
"delete_keyframe" — path, parm, frame.
"revert" — path, parm: back to the default, and the
expression goes away.
"lock" — path, parm, locked.
"link" — src_path, src_parm, path, parm: the parameter at
path follows the one at src_path.
"spare" — path, parameters: a list of controls to add, each
{name, label, type, default, min, max, strict,
help, value, expression, items}. type is "float",
"int", "vector", "toggle", "string", "menu" (with
items), "ramp" or "color_ramp" (default: a list of
[position, value]). One control can also come as
name, label, parm_type, default, expression.
On a wrangle it first does what the Create
Parameters button does, a parameter for each ch()
call, and puts every control in that folder above
the code. Use it instead of numbers typed into VEX:
the user tunes these. A control that exists is
replaced in place, so a second call is safe.
"render_settings" — path, settings for a ROP node.
"chop_export" — chop_path, channel_name, path, parm.
"snapshot" — name, paths: save every parameter of these nodes,
with expressions, keys and the bypass flag, to the
record `name` on disk. "/obj/geo1/*" names every
node in a network. It overwrites a record of the
same name.
"restore" — name: put the record back, and list what changed.
`paths` limits it to some of the nodes.
"diff" — name: list how the scene differs from the record.
Changes nothing.
In a sweep, restore before each variant, not once
at the end: a variant that does not name a
parameter keeps the value of the one before.
Returns JSON with the value before, the value after, and a reason when the
write did not take.
| 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". | |
| 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 declare destructiveHint=true and non-idempotent, and the description adds substantial undisclosed-by-schema behavior: silent no-op writes with six named causes, refusal to write through channel references unless follow_reference=true, snapshot overwriting a same-named record, and the instruction to read `warnings` and `not_applied` before reporting success. Excellent coverage of what gets destroyed and where writes may silently fail; it stops short of stating permissions/auth needs, but the safety profile itself is thoroughly enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the silent-failure taxonomy, then mode-by-mode argument detail, then return shape – a sensible ordering for a 22-parameter multi-mode tool. It is long and the mode enumeration partially duplicates the schema's `mode` description, but nearly every line carries operational information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 22 parameters, nested objects, 15 modes and an output schema, the description supplies exactly what the structured fields cannot: mode-to-argument mapping, failure-mode diagnosis, prerequisite sequencing, and workflow caution for sweeps. The return contract is summarized ('value before, the value after, and a reason') without duplicating the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description goes beyond it by naming the exact argument set each mode reads and adding semantics the schema cannot express: a menu takes its token ('custom'), a bit-field menu takes a token or a list, a ramp defaults to a list of [position, value], and a second 'spare' call safely replaces a control in place. Remaining overlap with the schema's per-mode prefixes keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names the specific verb and resource ('Write parameter values, or press a button') and states the batching scope ('One write, or a list in one undo group'). The mode list enumerates the full surface, and it is clearly distinguished from the read-only sibling node_inspect, which it references as a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing ('Use it after node_inspect has confirmed the parameter name and the type'), explicit substitution guidance ('Use it instead of numbers typed into VEX'), and a concrete sweep workflow ('restore before each variant, not once at the end'). Each mode also carries its own when-to-use context, e.g. 'press' is for buttons whose work fails later and in silence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdgADestructive
Cook a TOP network, and read what its work items did.
Modes: status, workitems, cook, dirty, cancel.
Use it for a TOP network only. A TOP node does not cook like a SOP: it
makes work items, and each item runs on its own. For a SOP or a DOP, use
cook. For a ROP, use render.
mode:
"status" — the counts for each state, and whether a cook runs now.
"workitems" — the items. `state` filters, for example "failed".
"cook" — start the cook. The call comes back at once; read
"status" after it to follow the work.
"dirty" — mark the node dirty. `dirty_all` also removes the
outputs on disk.
"cancel" — stop the cook that runs now.
Returns JSON. A failed item holds the command and the log path: read those
before you change the network.
| 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?
Annotations declare destructive=true, but the description adds the context that matters: 'cook' returns at once and must be followed by a status read, 'dirty_all' removes outputs on disk, 'cancel' stops the running cook, and failed items carry the command and log path. This is genuine behavioral detail beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then modes, then a returns note; the mode list is a scannable structure. Slight redundancy between 'Use it for a TOP network only' and 'A TOP node does not cook like a SOP' costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't document return shape, yet it still flags the actionable payload of a failed item (command and log path) and the async nature of the cook. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by explaining the semantics of each mode value and how 'state' filters workitems ("failed") and how 'dirty_all' removes on-disk outputs. That is more than the schema's one-line field descriptions, though it largely mirrors them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Cook a TOP network, and read what its work items did') and immediately scopes it to TOP networks as distinct from SOP/DOP/ROP. An agent can distinguish it from cook and render without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it ('Use it for a TOP network only') and routes to the alternatives with conditions: 'For a SOP or a DOP, use cook. For a ROP, use render.' The mode list further tells the agent which mode answers which question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playbarAIdempotent
Read or set the time of the session.
Modes: get, frame, range, playback, play.
Use it before you read geometry that changes over time: a SOP cooks at the
current frame, so the frame decides what you see.
Do not use it only to read another frame: geometry_inspect, node_inspect
and stage_inspect take `frames` and put the playbar back after. A frame
that you set here stays for the person and for every later call, and
"range" also changes what a flipbook covers, and a ROP whose range
follows $FSTART and $FEND.
mode:
"get" — the current frame and time.
"frame" — go to `frame`.
"range" — set the scene frame range to `start` and `end`.
"playback" — set the playback range inside the scene range.
"play" — `action` is "play", "stop", "next", "previous", "start"
or "end". Playback needs a GUI.
Returns JSON.
| 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?
Adds substantial state-change context beyond annotations: frame changes persist across calls and for the user, 'range' alters flipbook coverage and any ROP following $FSTART/$FEND, and 'play' requires a GUI. Annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) already flag mutation and idempotency; the description complements rather than contradicts, though it does not say what 'play' does to an in-progress cook or how long it blocks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and usage constraints are front-loaded in two short blocks, with the mode enumeration after — the right ordering for an agent deciding whether to call. The mode list duplicates the schema's enum, which is some redundancy, but each line adds a behavior not stated in the schema (e.g. playback range sits inside the scene range).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites (GUI for playback), blast radius (persistence for the user, flipbook and $FSTART/$FEND ROP ranges), and the alternative tools to prefer for non-persistent reads. With an output schema present, no return-value explanation is needed, and nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns one better by mapping each parameter to the modes that consume it (frame for 'frame', start/end for 'range' and 'playback', action for 'play') and listing the action values, giving a coherent per-mode picture. Much of this restates the schema's own parameter descriptions, so it is not a large increment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read or set the time of the session') and immediately enumerates the five modes, so the agent knows exactly what surface the tool covers. It is clearly distinct from the read-only inspectors named as siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('before you read geometry that changes over time: a SOP cooks at the current frame') and explicit when-not-to-use (geometry_inspect, node_inspect, stage_inspect take `frames` and restore the playbar). The rationale for the distinction — a frame set here persists for the person and for later calls — makes the tradeoff legible.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renderA
Start a render, read its settings, or watch it run.
Modes: start, progress, settings, create, watch, stats, compare.
Use it for a final picture through a ROP node. For a fast look at the
viewport, use capture instead: it is much quicker.
mode:
"start" — render the ROP at `path`. `frame_range` is [start, end];
without it the node renders its own range. `output_path`
and `res_scale` hold for this render only: the ROP keeps
the output and the size of the user. Use them for test
renders. `wait=true` returns when every image is
complete (husk ended; up to about 28 minutes), with the
render stats of the last one. Without wait, husk can go
on after the call. `background=true` renders the saved
.hip file in a separate hython and returns at once with
its pid and log: the session stays free for the user
and for other calls while the stage cooks and husk
renders. Follow it with "watch".
"progress" — what the ROP reports about the render.
"settings" — the output file, the camera, the resolution and the
range of the ROP; the render delegate that really runs
(`engine` cpu or xpu, and `engine_from`: the ROP
renderer, else husk:default_delegate on the render
settings prim); a warning when a Karma settings node
says another engine; and the changed Karma settings,
split into the ones that engine reads and the ones it
ignores, with the reason. Karma XPU shows the CPU
Quality controls and ignores them; its Limits tab
counts. parm_set and execute warn on a write that the
engine of the node ignores.
"create" — make a ROP of `render_type` ("opengl", "karma", "mantra",
"ifd", …) named `name` under `parent_path`.
"watch" — count the husk and mantra processes on this machine, and
say whether the file at `output_path` is there and how big
it is. This mode does not need Houdini, so it also works
while Houdini is busy with the render.
"stats" — what husk wrote into the image at `output_path`
(husk:render_stats): render time, the engine that really
ran, each XPU device with its share of the samples,
shader compiles, peak memory, the AOVs. A GPU at 0 %
with compiles in progress is not a slow GPU.
"compare" — the mean and the largest absolute difference of each AOV
of `output_path` against `reference`, to tune samples
against a clean render.
Returns JSON. A render that writes no file, with no process running, has
failed: read the node with cook to see the error.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "start", "progress", "settings", "create", "watch", "stats", "compare". | start |
| name | No | create: the name of the new ROP. | |
| path | No | start, progress, settings: the ROP node. | |
| wait | No | start: return when every image is complete, with its render stats. | |
| reference | No | compare: the image to compare `output_path` with. | |
| res_scale | No | start: a fraction of the resolution for this render only, 0.5 is half. | |
| background | No | start: render the saved .hip file in a separate hython, so Houdini stays free. The scene must have no unsaved changes. | |
| frame_range | No | start: [start, end] or [start, end, step]. Without it the ROP renders its own range. | |
| output_path | No | start: the image file for this render only (put $F4 in it for a range). watch, stats, compare: the image file. | |
| 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?
Annotations only say non-read-only, non-destructive, non-idempotent, closed-world; the description adds far more: wait returns after up to ~28 minutes, without wait husk can continue after the call, background requires a saved .hip with no unsaved changes and returns a pid/log at once, watch works while Houdini is busy, and the failure signature of a render that writes no file with no process running. These are exactly the operational traits an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the mode list and organized per mode with indentation, so an agent can jump to the relevant block. A few lines are dense tangents (CPU Quality controls, the 0% GPU note), though they do aid interpretation rather than pad. Overall efficient but longer than strictly necessary for any single call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, yet the description still sketches what each mode yields (pid and log, render stats, mean/max AOV differences, process counts). For an 11-parameter, seven-mode, side-effecting tool with modest annotations, nothing needed to call it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: that output_path and res_scale apply to this render only while the ROP retains the user's output and size, that frame_range accepts [start, end] or [start, end, step], and that background operates on the saved .hip. Some mode text still restates what the schema descriptions already say, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set and resource ('Start a render, read its settings, or watch it run') and immediately enumerates the seven modes, so the agent knows the full scope of the tool. It explicitly names the sibling it is not ('For a fast look at the viewport, use capture instead'), which disambiguates it from capture without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to prefer capture over render ('much quicker') and when to prefer render ('a final picture through a ROP node'). Per-mode guidance includes when to use background+watch versus blocking wait, and when res_scale/output_path are appropriate ('test renders'). No mode is left without a cue for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_fileADestructive
Read, save or load the scene file, or step its undo history.
Modes: info, save, load, undo, redo, merge, list_file.
Use "save" before a change that is hard to undo, and use "info" to learn
whether the session holds work that is not saved.
mode:
"info" — the file name, the frame range, the counts, and whether the
session has changes that are not saved.
"save" — save to `path`, or over the open file when `path` is empty.
"load" — open the .hip file at `path`. Everything in the session goes
away, and the undo history with it.
"undo" — undo `count` steps. Each call of a tool that changes the
scene is one step. A batch is one step, except a batch with a
step that waits (capture, render): there each step is one.
Returns the labels it undid and the next ones.
"redo" — redo `count` steps.
"merge" — bring `nodes` from the .hip file at `path`, each with all
its children and the wires inside. A name in use is
renamed: read `made` for the new paths. One undo step.
"list_file" — the nodes of the .hip file at `path` (type, inputs,
child count), at the top or in the networks of `nodes`. A
separate hython reads the file, so this session loads
nothing. It takes some seconds.
Returns JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "info", "save", "load", "undo", "redo", "merge", "list_file". | info |
| path | No | save: the file to write; empty saves over the open file. load: the .hip file to open. merge, list_file: the other .hip file. | |
| count | No | undo and redo: how many steps. | |
| nodes | No | merge: the node paths to bring from the other file. list_file: the networks to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations declare destructiveHint=true and readOnlyHint=false, the description adds critical behavioral detail: load removes everything including undo history, merge renames conflicting names and is one undo step, list_file uses a separate hython and takes seconds. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite its length, the description is front-loaded with a one-line summary followed by a clean mode list and per-mode explanations. Every sentence carries useful information for a tool with seven modes and destructive operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex multi-mode behavior, destructive load, undo-step semantics, and the existence of an output schema, the description is complete. It tells the agent what each mode does, the risks, and the expected side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful mode-specific semantics for path, count, and nodes, e.g., save over the open file when path is empty, merge brings children and wires, list_file lists networks. It enhances the schema rather than merely repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (read/save/load the scene file, step undo history) and enumerates seven distinct modes. It is clear enough to distinguish from most siblings, though it does not explicitly name alternative tools like scene_overview or session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear mode-specific usage guidance: use "save" before hard-to-undo changes, use "info" to check for unsaved work, and warns that "load" wipes the session and undo history. It lacks explicit exclusions or sibling-tool alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_overviewARead-onlyIdempotent
List what the scene holds. Start here, before you touch a node.
Modes: scene, network, children, search, node_types, errors, materials, lights, takes, caches, render_nodes, viewports, changes.
Use it to find a node path, to see the shape of a network, or to learn
which node types this Houdini has.
Do not use it to read one node in detail: node_inspect does that. Do not
use it to read geometry: geometry_inspect does that.
mode:
"scene" — file, frame range, counts, and the top of the tree.
"network" — the children of one network by name, with their
wires, flags and dots. Each input names the dot it
comes through, then the node behind the dot.
`pattern` and `node_type` keep some nodes;
compact=True gives only the wires.
"children" — the children of `path`. recursive=True walks down.
"search" — nodes whose name matches `pattern`, under `path`.
node_type filters by type name.
"node_types" — the node types this Houdini has, for one `category`
such as "Sop", "Object", "Lop", "Driver". `pattern`
keeps the names or labels that match.
"errors" — every node under `path` that has a cook error.
"materials" — the materials in `path` (default /mat) and the types.
"lights" — the lights on the USD stage of the LOP node `path`.
"takes" — the takes, and which take is current.
"caches" — file caches under `path` and their state on disk.
"render_nodes" — the ROP nodes in /out.
"viewports" — the panes, and what the scene viewer shows.
"changes" — what the user changed in the network `path` since
your last call: nodes added, deleted, renamed or
moved, wires, flags and parameter values. Your own
changes are not listed. The first call starts to
watch the network; call it at the start of each
turn, before you change anything there.
Returns JSON. A path that does not exist comes back as an error, not as an
empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "scene", "network", "children", "search", "node_types", "errors", "materials", "lights", "takes", "caches", "render_nodes", "viewports", "changes". | scene |
| path | No | A node path such as "/obj" or "/obj/geo1": the network to list or to search. | |
| compact | No | network: return only the wires, one line each. | |
| pattern | No | search: the name to match, with * and ? as wildcards. network, node_types: keep the names that match; "|" separates alternatives, for example "*retarget*|*ik*". | |
| category | No | node_types: the context, for example "Sop", "Object", "Lop" or "Driver". | |
| node_type | No | search, network: 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, closed-world), and the description adds non-obvious behavior beyond them: a missing path returns an error rather than an empty list, `changes` excludes your own edits, and the first `changes` call begins watching. These are exactly the operational details an agent needs before relying on the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose and routing first, then the mode semantics, then return-value caveats — a logical order with no wasted sentences. The mode block is long but every entry earns its place given thirteen dispatch options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format needn't be spelled out, yet the description still notes the JSON/error contract. All modes, the path-error behavior, and the stateful `changes` lifecycle are covered, leaving no gap an agent would need to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining what each mode actually returns and how pattern/node_type/compact/recursive modify behavior per mode. The per-parameter schema docs already carry syntax, so the gain is semantic rather than syntactic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List what the scene holds") and front-loads its role as the entry-point discovery tool. It explicitly distinguishes itself from node_inspect and geometry_inspect, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ("Start here, before you touch a node", find a node path, see a network, learn node types) and explicit when-not-to-use, naming both alternatives (node_inspect, geometry_inspect). The modes list doubles as a selection guide for 13 distinct query shapes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
Actions: status, list, attach, detach, interrupt, start, start_gui, stop.
Use it first when a tool says that Houdini is not reachable, and use it to
learn the Houdini version before you use an API that changed between
releases.
Several Houdini sessions can listen at the same time: the graphical one that
holds the work of the user, and a headless one for your own tests. Every
tool result names the session that answered, in `_session`. Read that line
when a scene looks empty or wrong: an empty scene is usually the wrong
session, not a lost scene.
Do not use it to read the scene: scene_overview does that.
action:
"status" — the session that the bridge talks to now, the other
sessions, and the port. Starts nothing, and always
answers.
"list" — every Houdini that runs, with its version, its process
id, its .hip file, whether it has a window and whether it
answers; and the Houdini versions installed.
"attach" — send every later command to the Houdini on `port`. Use it
when "list" shows more than one.
"detach" — forget the attached port and let the bridge choose again.
"interrupt" — stop the call that runs now in the attached Houdini, or
in the one on `port`: a script past its budget, a loop
that will not end. Houdini answers again after it. A
single long cook does not return to Python; then, in a
Houdini with a window on Windows, it sends Escape to
the window, as the user would. A stopped simulation
keeps a partial cache.
"start" — start a headless Houdini (hython) and attach to it.
`version` chooses the release, for example "21.0" or
"21.0.829"; without it, the version of the Houdini window
that runs. A Houdini that already runs is not touched, so
this is the safe way to test while a person works.
"start_gui" — start Houdini with its window and wait for the plugin to
answer, up to 4 minutes. It opens the .hip file at `hip`
when you give one, it stays open when the bridge stops,
and the bridge attaches to it. `version` as for "start".
"stop" — stop the headless Houdini that this bridge started. A
Houdini that you started yourself, or with "start_gui", is
not touched.
Returns JSON. The report says what to do next when nothing answers.
| 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?
Annotations mark the tool non-read-only and destructive, and the description goes well beyond them: it says start never touches a running Houdini, stop only kills bridge-started headless sessions, start_gui waits up to 4 minutes and survives bridge exit, interrupt may send Escape on Windows, and an interrupted simulation leaves a partial cache. It also discloses the per-result `_session` field, which explains confusing empty-scene results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with a one-line summary, an action index, and usage guidance before the long action glossary, so the most important content comes first. It is long for a single description, but the length is warranted by eight distinct actions; a few phrases are marginally redundant but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action lifecycle tool this covers everything an agent needs: which action to pick, what each does to processes and files, timeout behavior, and how to detect the wrong session. An output schema exists, so return format is correctly left out, with only the `_session` convention noted because it affects interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: version accepts partial or full releases and defaults to the running window's version, port comes from list and is used differently by attach vs interrupt, and hip is only meaningful for start_gui. These per-action scoping details are not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line gives a specific verb set and the exact resource: report Houdini sessions, pick one, start/stop/interrupt. It further distinguishes itself from scene_overview and lists all eight actions up front, so an agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete trigger conditions ('use it first when a tool says that Houdini is not reachable', 'use it to learn the Houdini version before an API that changed') and an explicit exclusion ('Do not use it to read the scene: scene_overview does that'). It also tells the agent when to use attach ('when list shows more than one').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stage_inspectARead-onlyIdempotent
Read the USD stage at a LOP node. This cooks the node.
Modes: stage, prims, prim, search, layer, attribute, composition, variants, stats, modified, lights, transform, profile.
Use it in a Solaris (LOP) network to see the prims, the layers and the
composition that a node produces.
Do not use it for SOP geometry: geometry_inspect does that.
mode:
"stage" — the stage: prim count, layers, the default prim.
"prims" — the prim tree from `root_prim`, `max_depth` deep.
"prim" — one prim at `prim_path`. include_attrs=True adds its
attributes.
"search" — prims whose path matches `pattern`, filtered by
`type_name` such as "Mesh" or "SphereLight".
"layer" — the layer stack, and the layer at `layer_index`.
"attribute" — the value of `attr_name` on `prim_path`.
"composition" — where the opinions on `prim_path` come from: each
layer of its prim stack, strongest first, with the
node that wrote it (the SOP behind an op: layer) and
its references and payloads.
"variants" — the variant sets on `prim_path` and the selection.
"stats" — counts under `prim_path`.
"modified" — the last `count` prims that this node changed. Use it
to see what one LOP did.
"lights" — the lights on the stage.
"transform" — where `prim_path` is in the world: translate, rotate
and scale composed through every parent. With
`frames`, the path of a moving prim.
"profile" — each LOP node of the chain up to `path`: cook time,
prims by type, and the prims it adds, slowest
first. It names the node that makes an export or a
render start slow, and flags a SOP Import that
writes each packed piece as its own Xform.
A layer file that another process wrote again (a cache from hython) is
reloaded before the read, and `reloaded_layers` names it.
Returns JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | One of "stage", "prims", "prim", "search", "layer", "attribute", "composition", "variants", "stats", "modified", "lights", "transform", "profile". | 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?
Goes well past the readOnlyHint/idempotentHint annotations: it discloses that reading cooks the node, that a layer rewritten by another process (hython cache) is reloaded and reported in reloaded_layers, and that frames temporarily moves the playbar and restores it. Those are exactly the side effects an agent would otherwise not anticipate from a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the mode list, then a scannable indented mode table; the negative guidance is placed before the bulk. The opening mode enumeration largely duplicates the schema's mode description, which is mild redundancy across a fairly long body, but the length is justified by 13 distinct modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, 13-mode tool this covers what an agent needs: cooking cost implications, playbar restoration, layer reload behavior, mode selection, and a hard boundary against SOP geometry. Return values are handled by the existing output schema, so their absence from the description is not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns more by binding parameters to modes and explaining effect rather than just type (include_attrs adds attributes, frames returns "the path of a moving prim", layer_index walks the stack, max_depth controls tree depth). It does not restate format details already in the schema, but it also adds no validation or edge-case behavior for conflicting mode/param combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Read the USD stage at a LOP node") and immediately names the sibling it must not be confused with ("Do not use it for SOP geometry: geometry_inspect does that"). The mode enumeration makes the read surface concrete, so an agent can pick this over geometry_inspect/node_inspect without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives positive context ("Use it in a Solaris (LOP) network to see the prims, the layers and the composition that a node produces"), an explicit exclusion with the alternative tool named, and per-mode guidance including when a mode is specifically warranted ("Use it to see what one LOP did", "It names the node that makes an export or a render start slow"). Nothing about routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.8.1- Changed
batch1 field changed- changed
Input schema / properties / operations / descriptionPrevious value: -"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch."New value: +"The steps, in order. Each is {\"tool\": \"<tool name>\", \"params\": {...}}, with the arguments that the tool takes on its own. Any tool of this server except batch. Add \"id\": \"name\" to a step, and a later step can write \"$name\" (or \"$name/child\") for the node path that step returned."
- Changed
geometry_inspect4 fields changed- changed
Input schema / properties / against / descriptionPrevious value: -"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body."New value: +"compare: the node to compare with. distance: the node to measure to. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body." - changed
Input schema / properties / attribs / descriptionPrevious value: -"points: the attributes to return, for example [\"P\", \"Cd\"]."New value: +"points: the attributes to return, for example [\"P\", \"Cd\"]. changes: the attributes whose mean, min and max to follow." - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\"."New value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\", \"distance\", \"changes\"." - changed
Input schema / properties / threshold / descriptionPrevious value: -"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance."New value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance. distance: list the points farther than it. changes: the ratio of change from one frame to the next that counts as a jump (0.2)."
- Changed
render1 field changed- added
Input schema / properties / backgroundAdded value: +{ + "default": false, + "description": "start: render the saved .hip file in a separate hython, so Houdini stays free. The scene must have no unsaved changes.", + "type": "boolean" +}
- Changed
scene_file3 fields changed- changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"info\", \"save\", \"load\", \"undo\", \"redo\"."New value: +"One of \"info\", \"save\", \"load\", \"undo\", \"redo\", \"merge\", \"list_file\"." - added
Input schema / properties / nodesAdded value: +{ + "description": "merge: the node paths to bring from the other file. list_file: the networks to list.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / path / descriptionPrevious value: -"save: the file to write; empty saves over the open file. load: the .hip file to open."New value: +"save: the file to write; empty saves over the open file. load: the .hip file to open. merge, list_file: the other .hip file."
- Changed
stage_inspect1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\"."New value: +"One of \"stage\", \"prims\", \"prim\", \"search\", \"layer\", \"attribute\", \"composition\", \"variants\", \"stats\", \"modified\", \"lights\", \"transform\", \"profile\"."
9 tool updates
v0.8.0- Changed
capture4 fields changed- added
Input schema / properties / azimuthsAdded value: +{ + "description": "sheet: a list of angles; each frame is drawn from each angle.", + "items": { + "type": "number" + }, + "type": "array" +} - added
Input schema / properties / boundsAdded value: +{ + "description": "sheet: [xmin, ymin, zmin, xmax, ymax, zmax], the box to frame.", + "items": { + "type": "number" + }, + "type": "array" +} - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."New value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\", \"network\"." - added
Input schema / properties / pathsAdded value: +{ + "description": "network: the items to frame in the network editor.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
connect2 fields changed- changed
Input schema / properties / dst_path / descriptionPrevious value: -"connect: the node whose input takes the wire."New value: +"connect: the node or network dot whose input takes the wire." - changed
Input schema / properties / src_path / descriptionPrevious value: -"connect: the node whose output feeds the wire."New value: +"connect: the node or network dot whose output feeds the wire."
- Changed
cook1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\". The description says what each one does."New value: +"One of \"cook\", \"cache_write\", \"cache_clear\", \"sim_step\", \"sim_reset\", \"recook\". The description says what each one does."
- Changed
execute1 field changed- added
Input schema / properties / waitAdded value: +{ + "default": 0, + "description": "job: the most seconds to wait for the job to end. The answer comes when it ends or when the wait is over, with what it printed so far.", + "type": "number" +}
- Changed
geometry_inspect14 fields changed- changed
Input schema / properties / against / descriptionPrevious value: -"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`."New value: +"compare: the node to compare with. volume_compare: the field whose bands hold the field `name`. fingerprint: the name of a saved fingerprint to compare with. stretch: the rest mesh. inside: the closed mesh. crossings: a second geometry, such as the body." - changed
Input schema / properties / attrib_class / descriptionPrevious value: -"attrib: \"point\", \"prim\", \"vertex\" or \"detail\"."New value: +"attrib, try: \"point\", \"prim\", \"vertex\" or \"detail\"." - changed
Input schema / properties / attrib_name / descriptionPrevious value: -"attrib: the attribute to read."New value: +"attrib, try: the attribute to read. try reads it on the result." - added
Input schema / properties / fileAdded value: +{ + "description": "export: the file path to write.", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000)."New value: +"attrib: how many values (10). volume_voxels: how many numbers before the array is thinned. volume_sample: return the values when there are at most this many (1000). stretch: how many of the worst edges (10)." - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\"."New value: +"One of \"summary\", \"points\", \"prims\", \"attrib\", \"groups\", \"group_members\", \"bbox\", \"intrinsics\", \"nearest\", \"skeleton\", \"compare\", \"try\", \"volume_stats\", \"volume_voxels\", \"volume_sample\", \"volume_compare\", \"image\", \"volume\", \"export\", \"fingerprint\", \"stretch\", \"inside\", \"crossings\"." - changed
Input schema / properties / name / descriptionPrevious value: -"volume_stats: one volume to read. volume_voxels, volume_compare: the field."New value: +"volume_stats: one volume to read. volume_voxels, volume_compare: the field. fingerprint: save the result under this name." - added
Input schema / properties / output / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "string" + } +] - changed
Input schema / properties / output / descriptionPrevious value: -"export: the file path to write."New value: +"The output of the node to read, 0 by default. A KineFX import has the mesh on 0, the rest skeleton on 1, the animated skeleton on 2." - removed
Input schema / properties / output / typeRemoved value: -"string" - added
Input schema / properties / renamedAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "fingerprint: {\"old path\": \"new path\"} for the nodes that a refactor renamed or moved.", + "type": "object" +} - added
Input schema / properties / split_byAdded value: +{ + "description": "crossings: a prim attribute, such as \"name\", whose values are the parts that the count pairs.", + "type": "string" +} - changed
Input schema / properties / steps / descriptionPrevious value: -"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry as verbs. Nothing changes in the scene."New value: +"try: a list of {\"node_type\": ..., \"parameters\": {...}} to run on the geometry. A menu takes its token or its index. Nothing changes in the scene." - changed
Input schema / properties / threshold / descriptionPrevious value: -"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it."New value: +"volume_stats, volume_sample: count the voxels below and above it. volume_stats also gives the world box of the voxels above it. stretch: the growth to count, 0.1 (10 %) by default. inside: count the points deeper than this distance."
- Changed
node_edit7 fields changed- added
Input schema / properties / forceAdded value: +{ + "description": "delete: delete a node that still feeds a node that stays.", + "type": "boolean" +} - added
Input schema / properties / input_indexAdded value: +{ + "description": "place_chain: the input of reader that the chain feeds.", + "type": "integer" +} - changed
Input schema / properties / input_path / descriptionPrevious value: -"create: the node that feeds the new node. It saves a connect call and places the node under its input."New value: +"create: the node that feeds the new node. It saves a connect call and places the node under its input. insert: the node whose output wires get the new node." - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\"."New value: +"One of \"create\", \"delete\", \"copy\", \"move\", \"rename\", \"flags\", \"color\", \"layout\", \"insert\", \"place_chain\", \"wrangle\", \"material\", \"assign_material\", \"take\", \"current_network\", \"note\", \"box\", \"split\"." - changed
Input schema / properties / paths / descriptionPrevious value: -"copy: the nodes to copy. layout: place only these nodes. box: the nodes to put in the box."New value: +"copy: the nodes to copy. delete: the nodes to delete together. layout: place only these nodes. place_chain: the chain, in order. box: the nodes to put in the box." - added
Input schema / properties / readerAdded value: +{ + "description": "insert: only the wires into this node. place_chain: the node that the chain feeds.", + "type": "string" +} - added
Input schema / properties / stagesAdded value: +{ + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "split: {\"stage name\": [\"node\", ...]}, the nodes of `path` for each subnet.", + "type": "object" +}
- Changed
parm_set1 field changed- removed
Input schema / properties / language / defaultRemoved value: -"hscript"
- Changed
render6 fields changed- changed
Input schema / properties / frame_range / descriptionPrevious value: -"start: [start, end]. Without it the ROP renders its own range."New value: +"start: [start, end] or [start, end, step]. Without it the ROP renders its own range." - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."New value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\", \"stats\", \"compare\"." - changed
Input schema / properties / output_path / descriptionPrevious value: -"watch: the image file to look for on disk."New value: +"start: the image file for this render only (put $F4 in it for a range). watch, stats, compare: the image file." - added
Input schema / properties / referenceAdded value: +{ + "description": "compare: the image to compare `output_path` with.", + "type": "string" +} - added
Input schema / properties / res_scaleAdded value: +{ + "description": "start: a fraction of the resolution for this render only, 0.5 is half.", + "type": "number" +} - added
Input schema / properties / waitAdded value: +{ + "default": false, + "description": "start: return when every image is complete, with its render stats.", + "type": "boolean" +}
- Changed
scene_overview4 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "network: return only the wires, one line each.", + "type": "boolean" +} - changed
Input schema / properties / mode / descriptionPrevious value: -"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\"."New value: +"One of \"scene\", \"network\", \"children\", \"search\", \"node_types\", \"errors\", \"materials\", \"lights\", \"takes\", \"caches\", \"render_nodes\", \"viewports\", \"changes\"." - changed
Input schema / properties / node_type / descriptionPrevious value: -"search: keep the nodes of this type, for example \"null\"."New value: +"search, network: keep the nodes of this type, for example \"null\"." - changed
Input schema / properties / pattern / descriptionPrevious value: -"search: the name to match, with * and ? as wildcards."New value: +"search: the name to match, with * and ? as wildcards. network, node_types: keep the names that match; \"|\" separates alternatives, for example \"*retarget*|*ik*\"."
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
Each tool has a clearly stated domain, and the descriptions explicitly route between capture/render/cook/pdg and between scene_overview/node_inspect/geometry_inspect/stage_inspect. The main residual ambiguity comes from batch and execute, which can overlap with any mutation tool, though the descriptions warn against misuse.
All names are lowercase snake_case and readable, but the set mixes bare verbs (capture, cook, render), bare nouns (batch, console, docs, hda, pdg, session), and noun_verb compounds (node_edit, parm_set, geometry_inspect). There is no single predictable pattern, though it is not chaotic.
20 tools is on the heavy side, but Houdini is a very broad domain and the tools partition major subsystems such as scene, nodes, geometry, USD, rendering, PDG, HDA, and sessions. Each tool earns its place, though several are mega-tools with many modes.
The surface covers scene files, node lifecycle, parameter writes, wiring, inspection across SOP/COP/CHOP/DOP/LOP/TOP, rendering, caching, simulation, HDA management, docs, console, selection, playbar, sessions, and an escape hatch. No major workflow dead end is apparent.
Maintenance
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.2132,810MIT
- 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