Skip to main content
Glama

Record a scrolling video of a web page

record_scrolling_video

Records a browser-scrolling video of a web page and returns a hosted URL, letting you set scroll speed, duration, and scroll-back; use viewport mode for animations or live dashboards.

Instructions

Records a video (mp4, webm, or gif) of the browser scrolling down a web page and returns the hosted video URL. Control scroll speed, duration, and scrolling back to the top. Set video=true to record the viewport without scrolling (for animations or live dashboards). Pass 'sizes' to record the same page at several viewport sizes in one request. Rendering takes noticeably longer than a screenshot.

Input Schema

NameRequiredDescriptionDefault
jsNoJavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();".
cssNoCSS injected before capture, e.g. '.header { display: none; }'.
urlNoWebsite URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required.
blockNoResources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or hide content — use only when needed. Others: images, media (audio/video), fonts, text_tracks, event_source, websockets, manifest.
delayNoExtra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content.
proxyNoProxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites.
sizesNoRecord one video per viewport size, e.g. [{width:1920,height:1080},{width:390,height:844}]. Overrides width/height.
videoNoRecord the visible viewport for 'duration' seconds without scrolling. Default false.
widthNoBrowser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet.
heightNoBrowser viewport height in pixels (max 4320). Default 876.
js_urlNoURL of an external JavaScript file to execute before capture.
cookiesNoCookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login.
css_urlNoURL of an external stylesheet to inject before capture.
headersNoExtra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'.
timeoutNoMaximum milliseconds the API waits for the page to load before aborting. Default 100000.
durationNoHow long the scrolling (or viewport recording) lasts, in seconds, 0-60.
latitudeNoLatitude reported by the browser Geolocation API.
timezoneNoIANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone.
dark_modeNoRender with the dark color scheme (for sites that support it). Default false.
file_typeNoVideo format. Default mp4. gif loops and has no sound; webm is smaller.
grayscaleNoDesaturate the output, 0 (full color, default) to 100 (fully grayscale).
lazy_loadNoScroll through the whole page first so lazy-loaded images and sections render. Default false.
longitudeNoLongitude reported by the browser Geolocation API.
save_pathNoOptional local path to save the video to (ignored when 'sizes' is used, since that returns several files).
adjust_topNoScroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs.
user_agentNoCustom User-Agent string, e.g. a mobile Safari UA to get the mobile site.
custom_htmlNoRaw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable.
scroll_backNoScroll back up to the top after reaching the bottom. Default false.
template_idNoID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation.
scroll_delayNoMilliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout.
scroll_speedNoScrolling speed. Default normal.
blur_selectorNoCSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data.
wait_for_eventNoPage lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms — best for SPAs and dashboards.
click_recursionNoHow many times to click selector_to_click in sequence. Requires selector_to_click. Default 0.
remove_selectorNoCSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored.
accept_languagesNoAccept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'.
enable_incognitoNoRender in an isolated incognito session with no persisted cookies or storage. Default false.
scroll_to_elementNoCSS selector of an element to scroll into view before a viewport capture.
selector_to_clickNoCSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion.
start_immediatelyNoStart recording as soon as navigation begins instead of after load, to capture the page loading. Default false.
block_specific_requestsNoSpecific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.2

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the returned artifact (hosted video URL), supported formats, the cost warning that rendering is slower than a screenshot, the optional scroll-back and viewport-recording behaviors, and that sizes produces multiple recordings. It does not discuss authentication, rate limits, local file saving behavior, or what happens on partial failure, which keeps it from a 5.

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 five tight sentences with no waste. It is front-loaded with the core purpose and output, then moves to the key mode switches and the performance warning, all of which are useful for selection.

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?

For a complex 41-parameter tool with no annotations and no output schema, the description covers the essential modes, output artifact, and cost profile needed to select and invoke it correctly. It is slightly thin on the many advanced rendering options, but since the schema fully documents those, the description is largely complete.

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 schema already documents all 41 parameters and a baseline of 3 would be acceptable. The description still adds useful meaning beyond the schema by clarifying the non-obvious semantics of video=true (viewport recording without scrolling), sizes (multiple viewports in one request), duration, scroll speed, and scroll_back, though most of the 41 parameters are not discussed in the description.

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 states a specific verb and resource — recording a video of a browser scrolling a web page — and names the output formats and returned artifact (hosted video URL). It also distinguishes the non-scrolling 'video=true' mode and the multi-size mode, so an agent can tell exactly what this tool does and how it differs from screenshotting.

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?

It gives concrete usage guidance for the main modes: 'Set video=true to record the viewport without scrolling (for animations or live dashboards)' and 'Pass sizes to record the same page at several viewport sizes in one request.' It also implicitly contrasts with the sibling take_screenshot by warning that rendering takes noticeably longer than a screenshot, but it does not explicitly say when to prefer take_screenshot or generate_pdf instead.

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