Skip to main content
Glama

render

Start, monitor, and inspect Houdini final-image jobs from ROP nodes: check settings and progress, read stats, compare images, and create ROPs.

Instructions

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.

Input Schema

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

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.1
    • addedInput schema / properties / background
      Added value: +{
      +  "default": false,
      +  "description": "start: render the saved .hip file in a separate hython, so Houdini stays free. The scene must have no unsaved changes.",
      +  "type": "boolean"
      +}
  2. Changed6 schema fields changedv0.8.0
    • changedInput schema / properties / frame_range / description
      Previous value: -"start: [start, end]. Without it the ROP renders its own range."New value: +"start: [start, end] or [start, end, step]. Without it the ROP renders its own range."
    • changedInput schema / properties / mode / description
      Previous value: -"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."New value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\", \"stats\", \"compare\"."
    • changedInput schema / properties / output_path / description
      Previous value: -"watch: the image file to look for on disk."New value: +"start: the image file for this render only (put $F4 in it for a range). watch, stats, compare: the image file."
    • addedInput schema / properties / reference
      Added value: +{
      +  "description": "compare: the image to compare `output_path` with.",
      +  "type": "string"
      +}
    • addedInput schema / properties / res_scale
      Added value: +{
      +  "description": "start: a fraction of the resolution for this render only, 0.5 is half.",
      +  "type": "number"
      +}
    • addedInput schema / properties / wait
      Added value: +{
      +  "default": false,
      +  "description": "start: return when every image is complete, with its render stats.",
      +  "type": "boolean"
      +}
  3. Changed34 schema fields changedv0.7.3
    • removedInput schema / properties / frame_range / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / frame_range / default
      Removed value: -null
    • addedInput schema / properties / frame_range / description
      Added value: +"start: [start, end]. Without it the ROP renders its own range."
    • addedInput schema / properties / frame_range / items
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / frame_range / title
      Removed value: -"Frame Range"
    • addedInput schema / properties / frame_range / type
      Added value: +"array"
    • removedInput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / mode / description
      Added value: +"One of \"start\", \"progress\", \"settings\", \"create\", \"watch\"."
    • removedInput schema / properties / mode / title
      Removed value: -"Mode"
    • addedInput schema / properties / mode / type
      Added value: +"string"
    • removedInput schema / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / name / default
      Removed value: -null
    • addedInput schema / properties / name / description
      Added value: +"create: the name of the new ROP."
    • removedInput schema / properties / name / title
      Removed value: -"Name"
    • addedInput schema / properties / name / type
      Added value: +"string"
    • removedInput schema / properties / output_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / output_path / default
      Removed value: -null
    • addedInput schema / properties / output_path / description
      Added value: +"watch: the image file to look for on disk."
    • removedInput schema / properties / output_path / title
      Removed value: -"Output Path"
    • addedInput schema / properties / output_path / type
      Added value: +"string"
    • removedInput schema / properties / parent_path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / parent_path / description
      Added value: +"create: the network that gets the ROP."
    • removedInput schema / properties / parent_path / title
      Removed value: -"Parent Path"
    • addedInput schema / properties / parent_path / type
      Added value: +"string"
    • removedInput schema / properties / path / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / path / default
      Removed value: -null
    • addedInput schema / properties / path / description
      Added value: +"start, progress, settings: the ROP node."
    • removedInput schema / properties / path / title
      Removed value: -"Path"
    • addedInput schema / properties / path / type
      Added value: +"string"
    • removedInput schema / properties / render_type / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / render_type / description
      Added value: +"create: the ROP kind, for example \"opengl\", \"karma\", \"mantra\" or \"ifd\"."
    • removedInput schema / properties / render_type / title
      Removed value: -"Render Type"
    • addedInput schema / properties / render_type / type
      Added value: +"string"
    • removedInput schema / title
      Removed value: -"toolArguments"
  4. Addedv0.1.1

TDQS

A4.8/5.0
Behavior5/5

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

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

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

Conciseness4/5

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

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

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

Completeness5/5

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

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

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

Parameters4/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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