Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In Puppeteer 25.12.0, start a page video with the experimental page.record() method, then call await recorder.stop() before closing the browser. The method records through Chrome DevTools Protocol’s Page.startScreenRecording API and writes an MP4 file.

Quick answer: record a Puppeteer page to MP4

This is the smallest complete example documented for the current API:

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.example.com');

const recorder = await page.record({ path: 'recording.mp4' });

// Perform the actions or wait for the page activity to capture.

await recorder.stop();
await browser.close();

page.record() returns a ScreenRecording object. Start it before the interaction, animation, or page activity you want in the video. Stopping the recorder finalizes the MP4; close the browser only after that stop has completed.

What Page.record() does in Puppeteer 25.12.0

It is the current API, but still experimental

The Puppeteer 25.12.0 API reference labels Page.record() experimental. That means the method is available in that documented version, but its interface and behavior can change in a later release. Pin the Puppeteer version used by your automation and check the matching API reference when upgrading.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
Guermok Video Capture Card, 4K USB3.0 HDMI to USB C, 1080P 60FPS & 2K 30FPS
  • 【1080P 60FPS Video Capture Card】 This HDMI game capture card is based on USB3.0 high speed transmission port, input resolution up to 4K@30HZ, output resolution up to 2K@30Hz or 1920×1080@60Hz. Type c and USB interface can meet most of the devices in daily life. Easily meet the online capture, real-time recording, online meetings, live gaming and other functions, so you have a better visual enjoyment. Note: For capture use only; requires capture software to function and is not intended for direct screen casting to a monitor or TV
  • 【Ultra Low Latency Screen Sharing】 HDMI capture card is made of good quality aluminum alloy with strong heat dissipation, allowing you to enjoy ultra low latency while live gaming or video recording or live streaming, avoiding blue screens and lag. This HDMI to USBC capture card supports easy recording of good quality audio or HD video and transferring it to your computer or streaming platform, allowing you to record 60 fps HD video directly on your hard drive and real-time preview
  • 【Plug and Play, Easy to Carry】 This HDMI 1080P video capture card does not require any additional drivers or external power supply, just plug and play for fast capture. The capture card is small and lightweight, so you can put it in your bag for emergencies, making it very portable for outdoor live streaming. It's also a great way to share content in game recording, video conference, video recorder and online teaching
  • 【Wide Compatibility USB Capture Card】 Easily streams to Facebook, Youtube or Twitch. With the connection, this HDMI to USB C/3.0 video capture devices can be working on several Operating Systems and various software: Windows 7/ 8/ 10, Mac OS or above, Linux, Android, Laptop, Xbox One, PS3/PS4/PS5, Camera, DVDs, Set Top Box, Webcame, DSLR, Switch/Switch 2, TV BOX, HDTV, Potplayer/VLC, ZOOM, OBS Studio etc.
  • 【Package Content & Note】 1x HD Audio Capture Card , 1x USB 3.0 to USB C Adapter (A-side 3.0, B-side 2.0), 1x user manual. Please note that you need to restart the OBS Studio software after the audio setup is complete, otherwise it will result in no sound output. When using an adapter, if the device is recognized as USB 2.0, try using the other side with the USB-C port. Simply flip the capture card and reconnect it to be recognized as USB 3.0

It records the page through Chrome DevTools Protocol

Puppeteer describes the method as recording the page with the Chrome DevTools Protocol Page.startScreenRecording API. The documented output is MP4. The reference does not promise a particular frame rate, resolution limit, codec selector, duration limit, or cross-platform performance level for Page.record().

The recording has an explicit lifecycle

  1. Launch Chromium and create the page.
  2. Navigate to the URL and prepare the state to capture.
  3. Call await page.record({ path: 'recording.mp4' }).
  4. Perform clicks, typing, scrolling, or other activity while recording.
  5. Call await recorder.stop().
  6. Close the browser after the file has been finalized.

A robust script that records real interactions

For anything beyond a static page, put the recorder around the exact activity you want to show. Waiting for a selector before starting avoids spending the beginning of the video on an incomplete page.

import puppeteer from 'puppeteer';

const browser = await puppeteer.launch();
let recorder;

try {
  const page = await browser.newPage();
  await page.goto('https://www.example.com');
  await page.waitForSelector('body');

  recorder = await page.record({ path: 'interaction.mp4' });

  // Replace these with the actions your page needs.
  await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
  await page.waitForSelector('.results');
  await page.click('.results a');
  await new Promise(resolve => setTimeout(resolve, 1500));
} finally {
  if (recorder) {
    await recorder.stop();
  }
  await browser.close();
}

The finally blocks make the intended order explicit: stop the recording first, then release Chromium. If an interaction fails, the recorder still gets a chance to finish the file.

Choosing when recording starts and ends

Start after setup when setup should not appear

Navigate, dismiss an application-specific dialog, select the required account or route, and set the page state before calling page.record(). Only subsequent activity is part of the recording.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Start before the first event when the setup is the demonstration

If the video should show the page loading, call page.record() before navigation or before the first interaction, then perform the navigation and actions while the recorder is active.

Stop after the last visual change

Do not stop immediately after triggering an asynchronous update. Wait for a selector, a known application state, or a short application-specific delay, then await recorder.stop(). The API reference does not define an automatic duration or “record until idle” behavior, so your script must decide when the demonstration is complete.

File paths, streams, and output expectations

Use a path for the simplest workflow

The documented form is page.record({ path: 'recording.mp4' }). Use an absolute path when a CI runner’s working directory is uncertain, and ensure the parent directory exists and is writable by the process running Puppeteer.

Rank #2
Sale
Capture Card, 4K HDMI Video Capture Card, Game Capture Card, 1080P 60FPS Video Capture Device, HDMI to USB 3.0 Capture Card for Streaming, Work with Camera/Xbox/PS4/PS5/PC/OBS
  • 【1080P HD High Quality】Capture resolution up to 1080p for video source and it is ideal for all HDMI devices such as PS4, PS3, Xbox One, Xbox 360, Wii U, DVDs, DSLR, Camera, Security Camera and set top box. Note: Video input supports 4K30/60Hz and 1080p120/144Hz. Does not support 4K120Hz/144Hz. Output supports up to 2K30Hz.
  • 【Plug and Play】No driver or external power supply required, true PnP. Once plugged in, the device is identified automatically as a webcam. Detect input and adjust output automatically. Won't occupy CPU, optional audio capture. No freeze with correct setting.
  • 【Compatible with Multiple Systems】suitable for Windows and Mac OS. High speed USB 3.0 technology and superior low latency technology makes it easier for you to transmit live streaming to Twitch, Youtube, Facebook, Twitter, OBS, Potplayer and VLC.
  • 【HDMI LOOP-OUT】Based on the high-speed USB 3.0 technology, it can capture one single channel HD HDMI video signal. There is no delay when you are playing game live.
  • 【Support Mic-in for Commentary】Rybozen capture card has microphone input and you can use it to add external commentary when playing a game. Please note: it only accepts 3.5mm TRS standard microphone headset.

The return value is a readable stream

Puppeteer documents ScreenRecording as a readable stream with a stop() method. The path option is convenient for a finished file; stream-oriented code can consume the returned object when your application needs to handle recording data itself. Keep the documented stop() call in either design so the recording is finalized.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Expect MP4 from the current method

Use an .mp4 filename and treat MP4 as the documented output for Page.record(). The reference does not document codec, frame-rate, bitrate, or resolution options for this method, so do not add undocumented recording parameters and assume they will work.

Page.record() versus the obsolete page.screencast()

Older examples often use page.screencast(). Puppeteer 25.12.0 marks that API obsolete and directs users to Page.record().

Detail Page.record() page.screencast()
Status Current API, documented as experimental Obsolete; the API reference recommends Page.record() instead
Documented output MP4 WebM using VP9 by default
Documented frame rate Not stated in the current reference 30 FPS by default
Documented browser requirement Not stated in the current reference Chrome 153 or newer
FFmpeg The current reference does not state an FFmpeg requirement The legacy documentation says FFmpeg is required
Recommendation Use for new code that targets the documented current API Do not start new integrations with it

The Chrome 153+, WebM/VP9, 30 FPS, and FFmpeg details belong to the obsolete screencast documentation. They should not be carried over as requirements for Page.record().

Compatibility and upgrade planning

Match your code to the API version

The facts above are tied to the Puppeteer 25.12.0 documentation. If your installed package is older and page.record is missing, either upgrade to a version that documents the method or follow the API reference for the version you actually run. Do not mix a current example with an older package and infer that a failure is a page problem.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Verify the browser that Puppeteer launches

Puppeteer normally manages the browser used by its launch call. If your project supplies a custom executable, container image, or remote browser, confirm that the browser and Puppeteer versions are supported together. The current Page.record() reference does not publish a universal Chrome-version threshold, so avoid treating the legacy screencast threshold as a current requirement.

Troubleshooting recording failures

page.record is not a function

Your installed Puppeteer does not expose the method you are calling, or your code is running against a different page object than expected. Check the package version, make sure the import is the Puppeteer package you intended to use, and consult the API reference for that exact version. The method described here is from Puppeteer 25.12.0.

Rank #3
Video Capture Card, 4K USB3.0 HDMI to USB C, 1080P60FPS HDMI Capture Card for Streaming, Gaming, Video Recording Compatible with Switch, Xbox, PS4/5, OBS,iPad Mac OS Windows,Camera, Zoom(Silver)
  • 【4K HDMI Input, 2K@30Hz Recording】Powered by a true USB 3.0 high-speed interface, the capture card supports up to 4K@30Hz HDMI input and records at 2K@30Hz or 1080P@60Hz. Perfect for gamers, streamers, and professionals who need crisp, smooth video for live streaming, gameplay recording, or online meetings.
  • 【Ultra Low Latency Screen Sharing】Built with a premium aluminum alloy shell and advanced chipset for stable heat dissipation, ensuring ultra-low latency transmission. Capture high-quality video and dual-channel audio in real time—no lag, no frame drop—ideal for Twitch, YouTube, or OBS streaming.
  • 【Easy Plug and Play, Compact & Portable】No driver or external power required—just plug and play via USB 3.0 or Type-C connection to your Windows or macOS computer. Lightweight and compact design makes it easy to carry for outdoor streaming, live shows, or mobile recording setups.
  • 【Wide Compatibility & Multi-Device Support】Compatible with Windows 7 8 10 11, macOS, Linux,Android and supports most popular software such as OBS, Zoom, VLC, Twitch Studio, and more. Works seamlessly with PS4, PS5, Xbox, Switch, DSLR cameras, TV boxes, and other HDMI-output devices for streaming to YouTube, Twitch, etc.
  • 【What You Get】Includes: HDMI Capture Card, USB 3.0 to USB-C Adapter, User Manual. Tips: Make sure your tablet’s OTG function is enabled before connecting. Test your HDMI device with a monitor first to confirm video and audio output, then connect to the Video Capture Card for recording.

The MP4 is missing, empty, or cannot be opened

  • Confirm that await recorder.stop() completed before the process exited.
  • Confirm that the output directory exists and is writable.
  • Do not close the browser before stopping the recorder.
  • Check that the process did not terminate on an earlier navigation or interaction exception; use a try/finally structure.

The video begins after the important action

Recording starts only when page.record() resolves. Move that call before the click, typing sequence, navigation, or animation you need to show. Conversely, move it later when the initial page setup should be excluded.

The page appears incomplete

Recording does not replace page synchronization. Wait for the selector or application state that proves the content is ready before starting, and wait again after triggering asynchronous work before stopping. Use conditions that describe your page rather than relying on an arbitrary delay whenever possible.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

You expected WebM or an FFmpeg conversion step

Those expectations come from the obsolete page.screencast() documentation. Page.record() is documented as producing MP4, and its current reference does not state that FFmpeg is required. Do not add legacy setup solely because an old example includes it.

Stopping throws after an interrupted run

Keep the recorder variable outside the interaction block and call stop() only when a recorder was successfully created. Always close the browser in a final cleanup path so a failed capture does not leave a Chromium process running.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Reliability and performance considerations

Keep the capture deterministic

Use a fixed URL, predictable test data, explicit selectors, and a defined end condition. Dynamic ads, clocks, random content, and network-dependent transitions can make successive videos differ even when the script is unchanged.

Budget time for page work, not an undocumented recorder limit

The current API reference does not state a maximum duration, frame-rate guarantee, file-size ceiling, or resolution limit. Measure the output for your own page and workload rather than promising a particular fidelity or recording length based on the method signature alone.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Separate capture errors from application errors

Log the URL, the action currently running, and whether the recorder was started. This makes it easier to distinguish a failed page navigation from a failure to finalize the recording. Preserve the original exception while still attempting cleanup in finally.

Rank #4
Sale
Capture Card 4K HDMI Video Streaming to USB 3.0 1080P 60FPS Capture Device
  • High-Quality Video Capture, 4K HDMI Capture Card Ready: Capture smooth and vibrant video with this 4K HDMI capture card, engineered for gamers and content creators who demand crisp 1080P 60FPS video quality. Whether you're streaming to Twitch or recording gameplay for YouTube, your footage will look professional and detailed
  • Plug-and-Play USB Capture Card, No Drivers Needed: Designed as a USB capture card for streaming, this device works instantly out of the box, just plug into your PC or laptop and start capturing. Fully compatible with popular software like OBS Studio, Streamlabs, and XSplit, making setup quick and stress-free for beginners and pros alike
  • Universal Compatibility PS5, Xbox, Switch & More: Stream or record gameplay from virtually any HDMI-enabled device including Nintendo Switch, PS5, Xbox Series X, DSLR cameras, and PCs. The video capture card for gaming supports seamless passthrough so you can play without lag while your audience watches every frame in real time
  • Low-Latency Performance for Smooth Streaming: This capture card for streaming minimizes delay between gameplay and broadcast, so you get reliable, low-latency capture that works well for competitive gaming, live broadcasts, and podcast sessions. Suitable for those building their channel with high-quality, engaging content
  • Compact & Portable Design for Content Creators: Lightweight and portable, this USB 3.0 capture card works well for creators who travel or switch gaming setups often. Throw it in your bag and stream or record wherever you are, at home, events, LAN parties, streaming or studio sessions

Or skip the browser setup: ScreenshotNeo for clean still captures

If you need a page image or PDF rather than a time-based video, ScreenshotNeo is the first alternative to try: it removes common consent banners, popups, and chat widgets before capture, and bills only clean results.

ScreenshotNeo is a website screenshot API and MCP server, not a video recorder. One GET request returns a PNG, JPEG, WebP, or PDF. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—let Claude, Cursor, or another MCP client request captures without you wiring up a browser. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and each response identifies the result with X-Page-Verdict and X-Billed headers.

cURL

See the ScreenshotNeo API documentation for authentication and all options.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Python

import requests

r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)

Node.js

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Every plan includes the full feature set, including full-page captures with lazy images loaded, CSS-selector element capture, dark mode, device presets and custom viewports, retina scale, PDF paper and page-range controls, custom CSS and JavaScript, clicks before capture, hidden selectors, selector/delay/network-idle waits, request and resource blocking, custom headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, configurable-TTL caching, signed image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Parameter names used by other screenshot APIs are also accepted to ease migration.

The free plan includes 1,000 screenshots each month with no card. Paid plans start at $5 for 3,000 shots; annual billing provides two months free. Create a free ScreenshotNeo account to try it without adding a card.

FAQ

Can Page.record() be configured to emit WebM instead of MP4?

The Puppeteer 25.12.0 reference identifies MP4 output but does not document a codec or container option for Page.record(). Treat MP4 as the supported documented result unless a later version adds an explicit setting.

Does Page.record() capture the browser’s address bar and tabs?

The API is described as recording the page through the DevTools Protocol page-recording API. The reference does not promise capture of browser chrome such as tabs, menus, or the address bar.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Can Page.record() be configured to emit WebM instead of MP4?

The Puppeteer 25.12.0 reference identifies MP4 output but does not document a codec or container option for Page.record(). Treat MP4 as the supported documented result unless a later version adds an explicit setting.

Does Page.record() capture the browser’s address bar and tabs?

The API is described as recording the page through the DevTools Protocol page-recording API. The reference does not promise capture of browser chrome such as tabs, menus, or the address bar.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.