Skip to main content
Glama

render

Generates a narrated, captioned product-demo MP4 from a storyboard.json. Returns a job ID immediately and rejects concurrent jobs.

Instructions

Full pipeline: voice → record → captions → compose (the CLI render). Returns a jobId immediately — poll job_status. Rejects if another job is running.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dirYesdemo project directory — pass an absolute path
gifNoalso export output/final-demo.gif
langNorender a language variant from scene.narrations[<code>] over the shared take (artifacts namespaced: audio/<code>/, captions.<code>.*, output/final-demo.<code>.mp4). Omit for the default single-language render.
freshNorun against a WIPED throwaway profile — use for any demo whose story starts at a first-run gate, onboarding, an empty state or a one-shot flow, since carried-over cookies/localStorage silently record the wrong story. Not for logged-in demos (a fresh profile has no login).
paramsNostoryboard template params (name → value); each must be declared in the storyboard's params block. Substitutes {{name}} across all stages.
captureNo
cookiesNocookies to seed before the first action (name, value, domain[, path, secure, httpOnly, sameSite, expires]). Also storyboard setup.cookies.
profileNoChrome user-data dir (logged-in profile)
headlessNorun Chrome headless (default false — headed, like the CLI)
fromSceneNoresume: keep the previous take's scenes before this scene id (footage + timeline, verified unchanged by hash) and record from it — after a late-scene failure or a change to the tail of the storyboard
forceVoiceNo
storageStateNoabsolute path to a Playwright storageState JSON (cookies + per-origin localStorage) to seed into the profile before the first action — for cookie-gated sites. Also available as storyboard setup.storageState.
profileSeededNothe profile is seeded on purpose (login / cookie gate): silence the carried-over-state warning. Implied by storageState/cookies.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindYes
jobIdYes
statusYes
demoDirYesresolved absolute demo directory
logFileYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.14.1
    • addedInput schema / properties / cookies
      Added value: +{
      +  "description": "cookies to seed before the first action (name, value, domain[, path, secure, httpOnly, sameSite, expires]). Also storyboard setup.cookies.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "domain": {
      +        "type": "string"
      +      },
      +      "expires": {
      +        "type": "number"
      +      },
      +      "httpOnly": {
      +        "type": "boolean"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "path": {
      +        "type": "string"
      +      },
      +      "sameSite": {
      +        "enum": [
      +          "Strict",
      +          "Lax",
      +          "None"
      +        ],
      +        "type": "string"
      +      },
      +      "secure": {
      +        "type": "boolean"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / fresh
      Added value: +{
      +  "description": "run against a WIPED throwaway profile — use for any demo whose story starts at a first-run gate, onboarding, an empty state or a one-shot flow, since carried-over cookies/localStorage silently record the wrong story. Not for logged-in demos (a fresh profile has no login).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / fromScene
      Added value: +{
      +  "description": "resume: keep the previous take's scenes before this scene id (footage + timeline, verified unchanged by hash) and record from it — after a late-scene failure or a change to the tail of the storyboard",
      +  "type": "string"
      +}
    • addedInput schema / properties / profileSeeded
      Added value: +{
      +  "description": "the profile is seeded on purpose (login / cookie gate): silence the carried-over-state warning. Implied by storageState/cookies.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / storageState
      Added value: +{
      +  "description": "absolute path to a Playwright storageState JSON (cookies + per-origin localStorage) to seed into the profile before the first action — for cookie-gated sites. Also available as storyboard setup.storageState.",
      +  "type": "string"
      +}
  2. First observedv0.9.0

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It reveals that the tool returns a jobId immediately and requires polling job_status, and that it rejects if another job is running. This covers async behavior and concurrency. It does not mention file outputs or long-running nature, but it addresses the most critical operational behaviors.

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

Conciseness5/5

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

The description is two sentences with zero filler. It front-loads the core purpose (the pipeline) and immediately follows with the key behavioral traits (async jobId and concurrency rejection). Every word earns its place.

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

Completeness4/5

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

Given the complexity (13 parameters, nested objects, and an output schema), the description covers the essential workflow and constraints. It does not repeat schema parameter details, and the output schema handles return values. It lacks explicit prerequisites like a valid storyboard, but for a tool this size, the description is adequately complete.

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

Parameters3/5

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

The schema description coverage is 85%, so the schema already documents the parameters thoroughly. The description text does not add parameter-specific meaning beyond the schema—it only provides the pipeline overview and two behavioral notes. Since the schema handles the heavy lifting, the baseline of 3 is appropriate.

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?

The description clearly states the tool performs a full pipeline (voice → record → captions → compose) and identifies it as the CLI `render`. It distinguishes this from the individual step tools (voice, record, captions, compose) by explicitly naming the pipeline, giving the agent a precise idea of what this tool does and what it is not.

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

Usage Guidelines3/5

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

The description implies this is for complete renders (the full pipeline) but does not explicitly state when to use this versus the individual step tools. It mentions a concurrency constraint (rejects if another job is running) but lacks a clear 'use this when X, use individual tools when Y' statement, leaving the decision partially to inference.

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