Skip to main content
Glama

capture

Idempotent

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

Instructions

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.

Input Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.8.0
    • addedInput schema / properties / azimuths
      Added value: +{
      +  "description": "sheet: a list of angles; each frame is drawn from each angle.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / bounds
      Added value: +{
      +  "description": "sheet: [xmin, ymin, zmin, xmax, ymax, zmax], the box to frame.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / mode / description
      Previous value: -"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."New value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\", \"network\"."
    • addedInput schema / properties / paths
      Added value: +{
      +  "description": "network: the items to frame in the network editor.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed154 schema fields changedv0.7.3
    • removedInput schema / properties / azimuth / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / azimuth / default
      Removed value: -null
    • addedInput schema / properties / azimuth / description
      Added value: +"Degrees around the up axis, around what the view frames. 0 looks from the front. Nothing is added to the scene."
    • removedInput schema / properties / azimuth / title
      Removed value: -"Azimuth"
    • addedInput schema / properties / azimuth / type
      Added value: +"number"
    • removedInput schema / properties / background / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / background / description
      Added value: +"sheet and movie: the grey of the background, 0-255. Smoke reads best on mid grey."
    • removedInput schema / properties / background / title
      Removed value: -"Background"
    • addedInput schema / properties / background / type
      Added value: +"integer"
    • removedInput schema / properties / camera / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / camera / default
      Removed value: -null
    • addedInput schema / properties / camera / description
      Added value: +"camera mode: the camera node to look through. On a LOP network with `renderer`, a USD camera prim."
    • removedInput schema / properties / camera / title
      Removed value: -"Camera"
    • addedInput schema / properties / camera / type
      Added value: +"string"
    • removedInput schema / properties / color_by / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / color_by / default
      Removed value: -null
    • addedInput schema / properties / color_by / description
      Added value: +"sheet and movie: colour the points by this attribute, blue at the low end of color_range and red at the high end. A vector uses its length."
    • removedInput schema / properties / color_by / title
      Removed value: -"Color By"
    • addedInput schema / properties / color_by / type
      Added value: +"string"
    • removedInput schema / properties / color_range / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / color_range / default
      Removed value: -null
    • addedInput schema / properties / color_range / description
      Added value: +"[low, high] for color_by. Without it, [0, 1]."
    • addedInput schema / properties / color_range / items
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / color_range / title
      Removed value: -"Color Range"
    • addedInput schema / properties / color_range / type
      Added value: +"array"
    • removedInput schema / properties / columns / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / columns / default
      Removed value: -null
    • addedInput schema / properties / columns / description
      Added value: +"sheet: tiles in each row."
    • removedInput schema / properties / columns / title
      Removed value: -"Columns"
    • addedInput schema / properties / columns / type
      Added value: +"integer"
    • removedInput schema / properties / contour / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / contour / default
      Removed value: -null
    • addedInput schema / properties / contour / description
      Added value: +"sheet: a step. Colour by the fraction of the value over the step, so the lines of equal value show, for example the shells of a distance field."
    • removedInput schema / properties / contour / title
      Removed value: -"Contour"
    • addedInput schema / properties / contour / type
      Added value: +"number"
    • removedInput schema / properties / count / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / count / description
      Added value: +"sheet: how many tiles, when frames is not given."
    • removedInput schema / properties / count / title
      Removed value: -"Count"
    • addedInput schema / properties / count / type
      Added value: +"integer"
    • removedInput schema / properties / direction / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / direction / default
      Removed value: -null
    • addedInput schema / properties / direction / description
      Added value: +"The view axis: \"top\", \"front\", \"left\", \"right\", \"back\", \"bottom\" or \"persp\"."
    • removedInput schema / properties / direction / title
      Removed value: -"Direction"
    • addedInput schema / properties / direction / type
      Added value: +"string"
    • removedInput schema / properties / elevation / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / elevation / default
      Removed value: -null
    • addedInput schema / properties / elevation / description
      Added value: +"Degrees above the ground, with azimuth. 30 with azimuth 45 is a three-quarter view."
    • removedInput schema / properties / elevation / title
      Removed value: -"Elevation"
    • addedInput schema / properties / elevation / type
      Added value: +"number"
    • removedInput schema / properties / fill / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / fill / description
      Added value: +"How much of the picture the framed thing takes: 0.9 leaves air around it, 1.0 fills it."
    • removedInput schema / properties / fill / title
      Removed value: -"Fill"
    • addedInput schema / properties / fill / type
      Added value: +"number"
    • removedInput schema / properties / fps / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / fps / description
      Added value: +"movie: frames per second."
    • removedInput schema / properties / fps / title
      Removed value: -"Fps"
    • addedInput schema / properties / fps / type
      Added value: +"number"
    • removedInput schema / properties / frame / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / frame / default
      Removed value: -null
    • addedInput schema / properties / frame / description
      Added value: +"What to frame the view on: \"selection\", \"all\", or a node path (the box of what that node cooked)."
    • removedInput schema / properties / frame / title
      Removed value: -"Frame"
    • addedInput schema / properties / frame / type
      Added value: +"string"
    • removedInput schema / properties / frame_range / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / frame_range / default
      Removed value: -null
    • addedInput schema / properties / frame_range / description
      Added value: +"flipbook and movie: [start, end]."
    • addedInput schema / properties / frame_range / items
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / frame_range / title
      Removed value: -"Frame Range"
    • addedInput schema / properties / frame_range / type
      Added value: +"array"
    • changedInput schema / properties / frames / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "additionalProperties": {
      -      "type": "number"
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "type": "number"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "additionalProperties": {
      +      "type": "number"
      +    },
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / frames / default
      Removed value: -null
    • addedInput schema / properties / frames / description
      Added value: +"One frame, a list, or {\"start\": 1, \"end\": 10, \"step\": 2}: one picture for each. sheet: the frames of the tiles. The playbar goes back after. A picture that holds only the background is an error."
    • removedInput schema / properties / frames / title
      Removed value: -"Frames"
    • removedInput schema / properties / look_from / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / look_from / default
      Removed value: -null
    • addedInput schema / properties / look_from / description
      Added value: +"[x, y, z]: the point that the view looks from."
    • addedInput schema / properties / look_from / items
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / look_from / title
      Removed value: -"Look From"
    • addedInput schema / properties / look_from / type
      Added value: +"array"
    • removedInput schema / properties / mode / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / mode / description
      Added value: +"One of \"viewport\", \"quad\", \"camera\", \"flipbook\", \"sheet\", \"movie\"."
    • removedInput schema / properties / mode / title
      Removed value: -"Mode"
    • addedInput schema / properties / mode / type
      Added value: +"string"
    • removedInput schema / properties / node / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / node / default
      Removed value: -null
    • addedInput schema / properties / node / description
      Added value: +"The node to look at. It gets the display flag for the picture, and the flag goes back after. The viewer shows its network, and goes back after. Without `frame`, the view also frames it."
    • removedInput schema / properties / node / title
      Removed value: -"Node"
    • addedInput schema / properties / node / type
      Added value: +"string"
    • removedInput schema / properties / output / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / output / default
      Removed value: -null
    • addedInput schema / properties / output / description
      Added value: +"The file to write. Without it, a temporary file."
    • removedInput schema / properties / output / title
      Removed value: -"Output"
    • addedInput schema / properties / output / type
      Added value: +"string"
    • removedInput schema / properties / radius / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / radius / default
      Removed value: -null
    • addedInput schema / properties / radius / description
      Added value: +"The distance between target and look_from."
    • removedInput schema / properties / radius / title
      Removed value: -"Radius"
    • addedInput schema / properties / radius / type
      Added value: +"number"
    • removedInput schema / properties / reference / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / reference / default
      Removed value: -null
    • addedInput schema / properties / reference / description
      Added value: +"sheet: a picture file to put in the first tile, to compare."
    • removedInput schema / properties / reference / title
      Removed value: -"Reference"
    • addedInput schema / properties / reference / type
      Added value: +"string"
    • removedInput schema / properties / renderer / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / renderer / default
      Removed value: -null
    • addedInput schema / properties / renderer / description
      Added value: +"The Hydra renderer of a viewer on a LOP network, for example \"Karma CPU\". An unknown name lists the ones available."
    • removedInput schema / properties / renderer / title
      Removed value: -"Renderer"
    • addedInput schema / properties / renderer / type
      Added value: +"string"
    • removedInput schema / properties / resolution / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "integer"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / resolution / default
      Removed value: -null
    • addedInput schema / properties / resolution / description
      Added value: +"[width, height] in pixels. The height follows the shape of the viewport, so the picture is not stretched."
    • addedInput schema / properties / resolution / items
      Added value: +{
      +  "type": "integer"
      +}
    • removedInput schema / properties / resolution / title
      Removed value: -"Resolution"
    • addedInput schema / properties / resolution / type
      Added value: +"array"
    • removedInput schema / properties / settle / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / settle / default
      Removed value: -null
    • addedInput schema / properties / settle / description
      Added value: +"Seconds that a renderer such as Karma draws before each picture. Karma starts from noise: 20 to 30 gives a clean frame. With frames or in flipbook mode it renders a sequence through the viewport, with no husk and no render license."
    • removedInput schema / properties / settle / title
      Removed value: -"Settle"
    • addedInput schema / properties / settle / type
      Added value: +"number"
    • removedInput schema / properties / shading / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / shading / default
      Removed value: -null
    • addedInput schema / properties / shading / description
      Added value: +"One of \"smooth\", \"smooth_wire\", \"flat\", \"wireframe\"."
    • removedInput schema / properties / shading / title
      Removed value: -"Shading"
    • addedInput schema / properties / shading / type
      Added value: +"string"
    • removedInput schema / properties / slab / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "number"
      -        }
      -      ]
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / slab / default
      Removed value: -null
    • addedInput schema / properties / slab / description
      Added value: +"[axis, thickness], for example [\"z\", 0.1]: draw only the points in a thin cut through the middle, so the inside of a solid cloud shows."
    • addedInput schema / properties / slab / items
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "number"
      +    }
      +  ]
      +}
    • removedInput schema / properties / slab / title
      Removed value: -"Slab"
    • addedInput schema / properties / slab / type
      Added value: +"array"
    • removedInput schema / properties / start / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / start / default
      Removed value: -null
    • addedInput schema / properties / start / description
      Added value: +"sheet: the first frame. Without it, the current frame."
    • removedInput schema / properties / start / title
      Removed value: -"Start"
    • addedInput schema / properties / start / type
      Added value: +"number"
    • removedInput schema / properties / step / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / step / description
      Added value: +"sheet: the frames between tiles. Over 2 hides movement and gives a warning."
    • removedInput schema / properties / step / title
      Removed value: -"Step"
    • addedInput schema / properties / step / type
      Added value: +"number"
    • removedInput schema / properties / target / anyOf
      Removed value: -[
      -  {
      -    "items": {
      -      "type": "number"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / target / default
      Removed value: -null
    • addedInput schema / properties / target / description
      Added value: +"[x, y, z]: the point that the view turns around."
    • addedInput schema / properties / target / items
      Added value: +{
      +  "type": "number"
      +}
    • removedInput schema / properties / target / title
      Removed value: -"Target"
    • addedInput schema / properties / target / type
      Added value: +"array"
    • removedInput schema / properties / tile_width / anyOf
      Removed value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedInput schema / properties / tile_width / description
      Added value: +"sheet: the width of each tile in pixels."
    • removedInput schema / properties / tile_width / title
      Removed value: -"Tile Width"
    • addedInput schema / properties / tile_width / type
      Added value: +"integer"
    • removedInput schema / properties / vectors / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • removedInput schema / properties / vectors / default
      Removed value: -null
    • addedInput schema / properties / vectors / description
      Added value: +"sheet: a scale. Draw a line along the color_by vector from up to about 3000 points. An empty result is an error."
    • removedInput schema / properties / vectors / title
      Removed value: -"Vectors"
    • addedInput schema / properties / vectors / type
      Added value: +"number"
    • removedInput schema / title
      Removed value: -"toolArguments"
  3. Addedv0.1.1

TDQS

A4.9/5.0
Behavior5/5

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

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

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

Conciseness4/5

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

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

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

Completeness5/5

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

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

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

Parameters5/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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