PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteIn 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.
#1 Best Overall
- 【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
- Launch Chromium and create the page.
- Navigate to the URL and prepare the state to capture.
- Call
await page.record({ path: 'recording.mp4' }). - Perform clicks, typing, scrolling, or other activity while recording.
- Call
await recorder.stop(). - 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.
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
- 【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.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →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.
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
- 【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/finallystructure.
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.
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.
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.
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
- 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.
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.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteFrequently 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.
Quick Recap
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.

