Skip to main content
Glama

Estimate render time

render_estimate
Read-onlyIdempotent

Estimate a render before starting it (no GPU time): GPU seconds, queue wait, the wall-clock time as text (estimate.human, e.g. 'about 3 minutes') and whether it fits the free GPU time left (the welcome credit, or 2 preview GPU-minutes a day after it) and the size limits. Call it before render_final when the time or quota is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes; tell the user the result. With scene_id the estimate uses measured render times and returns calibration.final_path_measured and tell_user / tell_user_ja, the one sentence to give the user (time and price). If final_path_measured is false the sentence says it is an unmeasured figure: do not present it as the time the final will take; run a short contiguous final-path test and estimate again before the full animation. It also says when to split a job.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "render_estimate"
  }
}

Input Schema

NameRequiredDescriptionDefault
kindNo'final' (frame_start..frame_end at width x height, samples) or 'preview' (frames like '1-24').final
testNoAnimations: 'contiguous' renders only test_frames frames from frame_start (default 10) and 'spread' only the first, middle and last frame, with exactly the settings of this final, billed like any final. The reply's final_test then gives the GPU seconds per frame, a check of the frames (black, broken, repeated), a contact sheet and the full range estimated again from this measurement, plus render_final_args to render the full range after the user agrees (the test frames are reused). Leave empty to render the whole range.
widthNoOutput width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit).
framesNoPreview frames: '' = frame 1; '12' = one frame; '1,8,16,24' or '1-24' = up to 4 frames tiled in one labeled image (to judge camera motion and animation; same GPU time as one 720p frame).
heightNoOutput height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit).
presetNoPurpose preset: 'product' (4 studio shots at 0/90/180/270 deg on a plain backdrop; the final gives 4 PNGs at 1440x1440), 'turntable' (one full turn as an MP4, studio light, plain backdrop), 'animation' (the scene's own camera, lights and frame range; the scene is read first when the range is unknown), or '' (none). It fills what you do not pass; environment, orbit_frames, width/height and the frames still win when given.
camerasNoSeveral camera object names (up to 8) rendered from the same frame in one job: the preview tiles them in one labeled sheet, the final returns one PNG/EXR per camera (camera_files maps names to files). For product shots from fixed angles. Not combinable with orbit, environment='compare' or camera.
samplesNoCycles samples per pixel (preview: up to 32, default 16; final: default 128).
scene_idNoscene_id returned by an earlier call (reuses the uploaded scene without sending it again).
settingsNo'scene' (final, .blend): render with the .blend's own resolution (with its percentage), samples, fps, engine and frame range; width, height, samples, fps and frame_start/frame_end left at their defaults (1920, 1080, 128, 24, 1/1) are taken from the scene, other values you pass win. The reply lists what the service still changes (scene_settings.overrides). Leave empty for the service defaults.
frame_endNoLast frame to render (inclusive); equal to frame_start for a single image. With orbit=True and no frame_end, one full turn is rendered.
variationsNo2-8 variants of the same frame, each {label, environment, environment_strength, camera, colors}; rendered in parallel and tiled in one sheet labelled A, B, ... Leave empty for a normal preview.
frame_startNoFirst frame to render (inclusive).
probe_frameNoWith auto_samples: the frame to test (0 = the middle frame).
test_framesNotest='contiguous': how many frames from frame_start to test (1-24, default 10; 0 = default).
auto_samplesNoTrue (final, Cycles, 100 frames or more): a small test render of one frame picks the lowest samples, up to samples, that looks the same as samples; billed like a preview. A shorter final skips the test and renders at samples (the reply's auto_samples.summary says so). render_estimate with it shows the test's cost and the saving.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / auto_samples / description
      Previous value: -"True (final, Cycles): a small test render of one frame picks the lowest samples, up to samples, that looks the same as samples; billed like a preview. render_estimate with it shows the test's cost and the saving."New value: +"True (final, Cycles, 100 frames or more): a small test render of one frame picks the lowest samples, up to samples, that looks the same as samples; billed like a preview. A shorter final skips the test and renders at samples (the reply's auto_samples.summary says so). render_estimate with it shows the test's cost and the saving."
  2. Changed3 schema fields changed
    • addedInput schema / properties / settings
      Added value: +{
      +  "default": "",
      +  "description": "'scene' (final, .blend): render with the .blend's own resolution (with its percentage), samples, fps, engine and frame range; width, height, samples, fps and frame_start/frame_end left at their defaults (1920, 1080, 128, 24, 1/1) are taken from the scene, other values you pass win. The reply lists what the service still changes (scene_settings.overrides). Leave empty for the service defaults.",
      +  "title": "Settings",
      +  "type": "string"
      +}
    • addedInput schema / properties / test
      Added value: +{
      +  "default": "",
      +  "description": "Animations: 'contiguous' renders only test_frames frames from frame_start (default 10) and 'spread' only the first, middle and last frame, with exactly the settings of this final, billed like any final. The reply's final_test then gives the GPU seconds per frame, a check of the frames (black, broken, repeated), a contact sheet and the full range estimated again from this measurement, plus render_final_args to render the full range after the user agrees (the test frames are reused). Leave empty to render the whole range.",
      +  "title": "Test",
      +  "type": "string"
      +}
    • addedInput schema / properties / test_frames
      Added value: +{
      +  "default": 0,
      +  "description": "test='contiguous': how many frames from frame_start to test (1-24, default 10; 0 = default).",
      +  "title": "Test Frames",
      +  "type": "integer"
      +}
  3. Changed4 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "Variant": {
      +    "description": "One variant; anything left out uses the call's own settings.",
      +    "properties": {
      +      "camera": {
      +        "title": "Camera",
      +        "type": "string"
      +      },
      +      "colors": {
      +        "additionalProperties": true,
      +        "title": "Colors",
      +        "type": "object"
      +      },
      +      "environment": {
      +        "title": "Environment",
      +        "type": "string"
      +      },
      +      "environment_strength": {
      +        "title": "Environment Strength",
      +        "type": "number"
      +      },
      +      "label": {
      +        "title": "Label",
      +        "type": "string"
      +      }
      +    },
      +    "title": "Variant",
      +    "type": "object"
      +  }
      +}
    • addedInput schema / properties / auto_samples
      Added value: +{
      +  "default": false,
      +  "description": "True (final, Cycles): a small test render of one frame picks the lowest samples, up to samples, that looks the same as samples; billed like a preview. render_estimate with it shows the test's cost and the saving.",
      +  "title": "Auto Samples",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / probe_frame
      Added value: +{
      +  "default": 0,
      +  "description": "With auto_samples: the frame to test (0 = the middle frame).",
      +  "title": "Probe Frame",
      +  "type": "integer"
      +}
    • addedInput schema / properties / variations
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/Variant"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "2-8 variants of the same frame, each {label, environment, environment_strength, camera, colors}; rendered in parallel and tiled in one sheet labelled A, B, ... Leave empty for a normal preview.",
      +  "title": "Variations"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / height / description
      Previous value: -"Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels)."New value: +"Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit)."
    • changedInput schema / properties / width / description
      Previous value: -"Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels)."New value: +"Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit)."
  5. Changed1 schema field changed
    • addedInput schema / properties / preset
      Added value: +{
      +  "default": "",
      +  "description": "Purpose preset: 'product' (4 studio shots at 0/90/180/270 deg on a plain backdrop; the final gives 4 PNGs at 1440x1440), 'turntable' (one full turn as an MP4, studio light, plain backdrop), 'animation' (the scene's own camera, lights and frame range; the scene is read first when the range is unknown), or '' (none). It fills what you do not pass; environment, orbit_frames, width/height and the frames still win when given.",
      +  "title": "Preset",
      +  "type": "string"
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / height / description
      Previous value: -"Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; during the free beta a final frame can have at most 1920x1080 pixels)."New value: +"Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels)."
    • changedInput schema / properties / width / description
      Previous value: -"Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; during the free beta a final frame can have at most 1920x1080 pixels)."New value: +"Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels)."
  7. Changed9 schema fields changed
    • addedInput schema / properties / cameras / description
      Added value: +"Several camera object names (up to 8) rendered from the same frame in one job: the preview tiles them in one labeled sheet, the final returns one PNG/EXR per camera (camera_files maps names to files). For product shots from fixed angles. Not combinable with orbit, environment='compare' or camera."
    • addedInput schema / properties / frame_end / description
      Added value: +"Last frame to render (inclusive); equal to frame_start for a single image. With orbit=True and no frame_end, one full turn is rendered."
    • addedInput schema / properties / frame_start / description
      Added value: +"First frame to render (inclusive)."
    • addedInput schema / properties / frames / description
      Added value: +"Preview frames: '' = frame 1; '12' = one frame; '1,8,16,24' or '1-24' = up to 4 frames tiled in one labeled image (to judge camera motion and animation; same GPU time as one 720p frame)."
    • addedInput schema / properties / height / description
      Added value: +"Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; during the free beta a final frame can have at most 1920x1080 pixels)."
    • addedInput schema / properties / kind / description
      Added value: +"'final' (frame_start..frame_end at width x height, samples) or 'preview' (frames like '1-24')."
    • addedInput schema / properties / samples / description
      Added value: +"Cycles samples per pixel (preview: up to 32, default 16; final: default 128)."
    • addedInput schema / properties / scene_id / description
      Added value: +"scene_id returned by an earlier call (reuses the uploaded scene without sending it again)."
    • addedInput schema / properties / width / description
      Added value: +"Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; during the free beta a final frame can have at most 1920x1080 pixels)."
  8. Changed1 schema field changed
    • addedInput schema / properties / cameras
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Cameras"
      +}
  9. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial behavior beyond them: no GPU time is consumed, the welcome credit and 2 preview GPU-minutes/day quota, 1920x1080 free vs 3840x2160 prepaid caps, and the critical warning not to present an unmeasured figure as the final time. It also discloses that a 'contiguous' test is billed like a final and that test frames are reused by render_final.

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

Conciseness4/5

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

Purpose and output contents are front-loaded, and every clause carries operational content (quota, warning, split advice) rather than filler. The cost is a single dense run-on paragraph with some redundancy around the tell_user sentence, which makes it harder to scan than a short bulleted structure would be.

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

Completeness5/5

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

For a 16-parameter, zero-required tool with an output schema, the description supplies everything an agent needs to decide to call it, correct the estimate path via scene_id, and act on the result. Return values are covered by the output schema, yet the description still highlights the two fields that drive downstream behavior (final_path_measured, tell_user).

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 the schema does not carry on its own: why scene_id matters (measured render times, calibration.final_path_measured), the consequence of the 'contiguous'/'spread' test choices, and when the estimate suggests splitting a job. It does not walk through the remaining parameters, which the schema already covers.

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

Purpose5/5

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

Opens with a specific verb and resource: 'Estimate a render before starting it (no GPU time)' and immediately enumerates what the estimate contains (GPU seconds, queue wait, wall-clock text, quota fit, size limits). This is clearly distinguishable from render_final, render_status and render_info without opening any schema.

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

Usage Guidelines5/5

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

Explicit routing rules: 'Call it before render_final when the time or quota is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes', plus the fallback instruction to run a short contiguous final-path test and re-estimate when final_path_measured is false. The alternative (render_final) and the condition that selects it are both named.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.