Skip to main content
Glama
yinnho

AginxBrowser

render_video

Render page animation timelines to MP4 video, with optional narration, background music, and subtitles, producing deterministic frame output.

Instructions

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 and (by default, burn_subtitles: false to opt out) burns the same cues into the frame pixels — QuickTime, WeChat and most social embeds ignore the soft 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.
burn_subtitlesNoBurn the cues into the frame pixels too (hardsub) — on by default when `subtitles_srt` is present; QuickTime, WeChat and most social embeds ignore the soft mov_text track. `false` keeps the soft track only.
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. Addedv0.5.1

TDQS

A4.8/5.0
Behavior5/5

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

With only a title annotation, the description carries the full burden and does an excellent job: it discloses the deterministic frame-seeking behavior, the audio mixing rules, the subtitle muxing and default burn behavior, the ffmpeg dependency, and the exact return value (base64 MP4 plus frame count and durations).

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 multi-sentence but every clause earns its place. It is logically organized: core mechanism first, then audio, then subtitles, then requirements and output. No filler or repetition.

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?

Given 14 parameters, no output schema, and the tool's complexity, the description covers all essential aspects an agent needs to invoke it correctly: what it does, how it works, the audio and subtitle behaviors, the server dependency, and the return format. Nothing critical is missing.

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?

Although the schema already covers all 14 parameters (100% coverage), the description adds critical meaning beyond it: how timelines are sought, how audio clips are mixed, why burn_subtitles defaults to true (social embeds ignore soft track), and the hold-tail freeze behavior. This is far more than the schema provides.

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 opens with a specific verb-resource pairing: 'Render a page's animation timelines to an MP4 video.' It then details the exact mechanism (seeking timelines per frame) and the output format, which fully distinguishes it from sibling tools like render_pdf and render_markdown.

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 clearly implies when to use it — when a page exposes window.__timelines and you need a deterministic MP4 of the animation. It also states the ffmpeg requirement. However, it does not explicitly name alternative rendering tools or state when not to use it, so it falls just short of a 5.

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