Skip to main content
Glama

render_video

Render a page's animation timelines to an MP4 video. The page's scripts must expose window.__timelines — objects with duration() and pause(t) (a paused gsap.timeline registered there works as-is). Each frame seeks every timeline to t=i/fps and paints the viewport, so the output is deterministic — no wall clock in the pixel values. Audio: narration[] places TTS/voice clips at start times (mixed into one AAC track), audio adds looped background music, and subtitles_srt muxes an SRT as a soft mov_text track. Requires ffmpeg on the server. Returns base64 MP4 (H.264, yuv420p) plus frame count and durations.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fpsNoFrames per second. Default 24.
urlYesPage URL whose scripts register timelines in `window.__timelines` (GSAP-style objects with `duration()` + `pause(t)`).
audioNoBackground music: looped to cover the video, volume-scaled, faded out at the tail.
widthNoViewport width in CSS pixels (floored to even — yuv420p). Default 1280.
heightNoViewport height in CSS pixels. Default 720.
narrationNoVoiceover clips, each starting at its own time (any TTS output; mixed into one AAC track).
use_proxyNoRoute through proxy (for blocked foreign sites)
subtitles_srtNoInline SRT subtitles muxed as a soft (toggleable) mov_text track.
hold_tail_secsNoFreeze the final timeline state for this many extra seconds. Default 0.5.
tls_fingerprintNoTLS fingerprint override (stealth mode only)
max_duration_secsNoSafety cap on timeline + hold tail, seconds. Default 120.
wait_timelines_msNoHow long to wait for `window.__timelines` to appear, ms. Default 10000.
subtitles_languageNoISO language tag for the subtitle track, e.g. "eng" / "zh".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.3/5.0
Behavior5/5

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

Annotations contain only a title, so the description carries the full burden — and it delivers richly. It discloses the rendering mechanism (seeks every timeline to t=i/fps), a deterministic guarantee ('no wall clock in the pixel values'), audio behaviour (narration mixed into one AAC track, looped background music, SRT muxed as soft mov_text), the ffmpeg server dependency, and the exact output shape (base64 MP4 H.264/yuv420p, frame count, durations).

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?

The description is a dense single paragraph, but every clause earns its place: purpose, non-obvious page requirement, rendering mechanism, audio variants, server dependency, and return format. It is somewhat longer than ideal, but for a tool with 13 parameters the density is justified and the purpose is front-loaded.

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 no output schema and rich annotations, the description compensates well: it specifies return value (base64 H.264/yuv420p plus frame count and durations) and covers the non-obvious invocation prerequisites (window.__timelines contract, ffmpeg). Remaining gaps are minor — e.g., no mention of safety caps (max_duration_secs), hold-tail behaviour, or proxy/TLS options — but those are fully described in the 100% schema.

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?

Schema coverage is 100% with per-parameter descriptions already present, establishing a baseline of 3. The description adds functional context for narration[], audio, and subtitles_srt (e.g., 'mixed into one AAC track', 'looped to cover the video'), and it explains fps/width/height implications (deterministic seeking, yuv420p flooring), but it does not add substantial meaning beyond what the schema already documents.

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 first sentence states a specific verb+resource: 'Render a page's animation timelines to an MP4 video.' This clearly distinguishes it from sibling tools like render_pdf and render_markdown (document rendering) and session_screenshot (static capture), making the tool's niche unmistakable.

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

Usage Guidelines4/5

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

The description gives explicit prerequisites for use: 'The page's scripts must expose window.__timelines — objects with duration() and pause(t)', plus 'Requires ffmpeg on the server.' This tells an agent when the tool will work, though it does not explicitly name alternatives or state when NOT to use it — the exclusion is implied by the animation-timeline requirement rather than stated.

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.