Free tools Windows power users keep installed
One-click scans. No signup required.
Use a Lambda-compatible Chromium build, drive it with Puppeteer, and call page.pdf(). The difficult part is not the PDF method itself; it is packaging a browser binary and its Linux libraries for the exact Lambda runtime and CPU architecture you deploy. This guide shows a ZIP/layer and container-image approach, print-versus-screen CSS behavior, a complete Node.js handler, deployment checks, and common failure fixes.
Choose the browser-rendering architecture
A headless browser is the appropriate route when your HTML depends on browser layout, modern CSS, web fonts, JavaScript, images, or client-side components. Puppeteer creates a page, loads HTML or a URL, and returns PDF bytes from page.pdf(). Your handler can return those bytes through API Gateway, upload them to object storage, or pass them to another service.
Lambda supports two deployment formats:
| Format | When it fits | Important constraint |
|---|---|---|
| ZIP package plus layers | Your browser and native libraries fit the package and layer limits, and you want conventional Lambda deployment. | The function and all layers together must be no more than 250 MB unzipped. Layer contents must be Linux-compatible. |
| Container image | You need direct control of Chromium, system libraries, or build tooling that is awkward to fit in a ZIP. | The image must be Lambda-compatible; a non-AWS base image must include the Node.js runtime interface client. |
AWS documents Node.js 22, 24, and 26 base-image tags, with Node.js 20 and later images based on Amazon Linux 2023. Confirm the currently supported tag before building. See AWS container-image guidance, Node.js ZIP packaging, and Lambda layers.
Pin compatible Chromium and Puppeteer versions
Puppeteer and Chromium are a matched pair. Install or select versions that explicitly support one another, then build for the Lambda runtime and architecture you actually use (for example, x86_64 or arm64). The Sparticuz Chromium project documents serverless use, including AWS Lambda, and points to Puppeteer’s Chromium support information. Its release and architecture support can change, so check the project documentation when you choose versions.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →#1 Best Overall
- Convert your PDF files into Word, Excel & Co. the easy way
- Convert scanned documents thanks to our new 2022 OCR technology
- Adjustable conversion settings
- No subscription! Lifetime license!
- Compatible with Windows 11, 10, 8.1, 7 - Internet connection required
Do not treat an old chrome-aws-lambda package as a current default: its npm listing says it was published five years ago. Likewise, AWS CloudWatch Synthetics examples such as Puppeteer-core 22.10.0 with Chromium 125.0.6422.112 describe a Synthetics runtime, not an arbitrary Lambda function. They are not a substitute for validating your own artifact.
Build a Lambda handler with Puppeteer
The following handler assumes a Chromium package exposes an executable path and that puppeteer-core supplies the automation API. The exact import and executable-path property depend on the Chromium package release you pin; verify those names in that package’s documentation.
- Install matching
puppeteer-coreand Chromium dependencies in a Linux build environment matching your Lambda architecture. - Package the browser binary and required shared libraries in the function, a layer, or a container image.
- Set the Chromium executable path supplied by your chosen package.
- Launch with serverless-safe flags, create a page, load the document, select media behavior, and call
page.pdf().
const chromium = require('@sparticuz/chromium');
const puppeteer = require('puppeteer-core');
exports.handler = async (event) => {
const html = event.html || '<!doctype html><html><body><h1>Hello</h1></body></html>';
let browser;
try {
browser = await puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath(),
headless: chromium.headless
});
const page = await browser.newPage();
await page.setContent(html, { waitUntil: 'networkidle0' });
// Omit this line for the default print CSS behavior.
// await page.emulateMediaType('screen');
const pdf = await page.pdf({
format: 'A4',
printBackground: true,
margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' },
preferCSSPageSize: true
});
return {
statusCode: 200,
headers: { 'Content-Type': 'application/pdf' },
isBase64Encoded: true,
body: pdf.toString('base64')
};
} finally {
if (browser) await browser.close();
}
};
For an external page, replace setContent with page.goto(url, { waitUntil: 'networkidle0' }). If the document loads fonts or images after that point, wait for a known selector or an application-specific readiness signal rather than assuming network idle always means the layout is complete.
Understand print CSS versus screen CSS
Puppeteer’s Page.pdf() uses the print CSS media type by default. To generate a PDF with screen media, call page.emulateMediaType('screen') before page.pdf(). This choice affects @media print, @media screen, visibility, colors, and layout.
await page.emulateMediaType('screen');
const pdf = await page.pdf({ printBackground: true });
PDF output also adjusts colors for printing by default. If exact on-screen colors matter, use CSS such as:
Rank #2
- RCA Female to HDMI Video Converters Adapter : The cable is used to convert analog composite input to HDMI 1080p output, displayed on a 1080p HD TV/TV/monitor.
- Input ports: 1xRCA Female (Yellow, White, Red), Output ports: 1xHDMI 1.3 1080p. NOT support 3D and 4K, NOT support HDMI Converts to AV
- AV to HDMI Converter: Plug and Play, Easy to Install and Operate, Powered by External USB Cable. Note: Please hook up the USB power cable (included) to 5V 1Apower source during use (not included power supply ).
- Support PAL, NTSC3.58, NTSC4.43, SECAM, PAL/M, PAL/N standard TV formats input. For PS2,PS3,Xbox,N64,STB, VHS, VCR, DVD Players and other devices with standard composite AV input.
- You Will Get : 1x RCA Female TO HDMI Converter, 1xHDMI cable, 1xUSB cable, 1xUser Manual. ONE YEAR WARRANTY - if you are not satisfied for any reason whatsoever, do not hesitate to contact us .
html {
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
Set the PDF options deliberately: paper format or CSS page size, margins, landscape orientation, background printing, page ranges, and whether CSS page dimensions should win. The correct values depend on your document; the API documentation does not guarantee a universal layout recipe.
Package as a ZIP and layer
ZIP deployment works when the browser distribution and native libraries fit. Build native modules and browser dependencies for Amazon Linux and your selected architecture, not from an incompatible desktop-only environment. Docker is one practical way to provide a matching Linux build environment.
- Keep Node.js dependencies under a recognized layer path such as
nodejs/node_modules, or include them in the function package. - Include every shared library required by Chromium.
- Measure the final unzipped function-plus-layer size. The combined limit is 250 MB, and Lambda allows up to five layers.
- Deploy and invoke the exact artifact you measured; a locally working browser does not prove Lambda compatibility.
When a browser distribution approaches the size limit or requires many operating-system packages, a container image can be simpler to reproduce and update. That is a packaging trade-off, not a guarantee that containers are faster or cheaper.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsPackage as a container image
Start with an AWS Node.js Lambda base image when its runtime meets your needs. Install the pinned Chromium build and system libraries during image construction, copy your handler, and set the Lambda command to the handler name. AWS base images include the runtime interface client and emulator. If you choose a non-AWS base image, add the Node.js runtime interface client yourself or Lambda will not be able to invoke the function.
Build the image for the same architecture selected in Lambda and run it locally with the Lambda runtime interface emulator. This catches missing libraries, incorrect executable paths, and handler errors before deployment. It does not replace validation in the deployed runtime.
Rank #3
- AUDIO ALL-ROUNDER – convert your audio or video files into almost any audio format - edit, trim, merge, adjust sample and bit rate, extract audio from videos
- Supported input formats - MP3, MP2, AAC, AC3, WAV, WMA, M4A, RM, RAM, OGG, AU, AIF, AIFF, PG, MPEG, MPEG 2, MP4, M4V, MJPG, MJPEG, HD TS, HD MTS, HD M2TS, HD MPG, HD MPEG, HD MP4, HD WMV, QuickTime HD MOV and others
- Supported output formats - AAC, AC3, AIFF, AMR, AU, FLAC, M4A, MKA, MP2, MP3, OGG, WAV, WMA
- EASY TO INSTALL AND USE - user-friendly and intuitive interface, free tech support whenever you need assistance
- compatible with Windows 10, 8 and 7 (32 and 64-bit versions) - single user license
Validate the deployed artifact
- Record the Lambda runtime, architecture, memory, timeout, deployment format, Puppeteer version, Chromium version, and package digest.
- Invoke with a small HTML document containing text, a background color, an image, and a page break.
- Check the returned
Content-Type, base64 handling, page count, fonts, images, margins, and print colors. - Repeat with the largest realistic document and with slow external assets.
- Inspect CloudWatch logs for launch failures, navigation timeouts, and memory exhaustion.
Choose timeout and memory from measured workload behavior. Browser startup, JavaScript execution, fonts, images, and document length all affect resource use; there is no workload-independent setting established here.
Secure HTML and URL inputs
Rendering user-controlled HTML or URLs is an application-security problem. Validate allowed schemes and hosts, restrict or proxy outbound network access where appropriate, limit document size and rendering time, and avoid passing untrusted values into shell commands. Consider whether rendered pages can reach internal services or expose credentials through custom headers. The browser package alone is not a complete isolation design.
Troubleshooting Lambda PDF failures
“Browser was not found” or executable-path errors
Cause: The binary is absent, in the wrong path, or the package API changed. Fix: Log the resolved executable path, verify it exists in the deployed artifact, and use the path function documented by your pinned Chromium release.
“Failed to launch” with missing shared libraries
Cause: Dependencies were built for a desktop OS, the wrong Amazon Linux generation, or the wrong architecture. Fix: rebuild in a matching Linux environment, include the required libraries, and test the same image or layer locally.
Works locally but times out in Lambda
Cause: Different network access, cold-start time, page scripts, or external assets. Fix: set an explicit navigation timeout, wait for a deterministic readiness selector, reduce unnecessary resources, and verify Lambda VPC and egress configuration.
Rank #4
- RCA to USB Converter: This USB Capture Device can convert anolog RCA composite input into high-definition USB output, the maximum output resolution can reach 1920x1080@30Hz, suitable for camcorders, set-top boxes, boxes, DV camcorders, DVD, VHS, VCD, VCR, DVR and other devices. (Note: Only compatible with NTSC/PAL formats)
- USB2.0 Video Capture: Supports RCA and S-Video input, USB 2.0/Type-C capture, the RCA to USB Capture Card is compatible with most current laptops, ensuring stable video capture and transmission.
- 3.3ft/1m USB Cable: avedio links USB2.0 capture card is equipped with 3.3 feet USB capture cable, reduce the use of troubles caused by short cables and improve operational flexibility.
- Wide Compatibility: Compatible with Windows and MacOS operating systems and supporting video capture software such as OBS, Potplayer, etc., this RCA to USB Capture Card is ideal for video production, screen recording and other scenarios.
- Packing List: RCA&S-Video to USB Capture Card*1, USB A to Type-C converter*1, CD*1, 5ft S-Video Cable*1, RCA Converter*1, User Manual*1.
Styles or colors differ from the browser preview
Cause: PDF uses print media by default or backgrounds are not enabled. Fix: call emulateMediaType('screen') when screen CSS is required, set printBackground: true, and use print-color-adjust CSS where exact colors are necessary.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Large documents fail or exceed limits
Cause: Memory, timeout, response-size, or deployment-package constraints. Fix: store output in object storage instead of returning large base64 responses, split exceptionally large jobs, and reassess ZIP versus container packaging. Confirm the 250 MB unzipped package limit for ZIP deployments.
Fonts or images are missing
Cause: The runtime cannot reach the asset, the asset loads after capture, or the font is not packaged. Fix: use reachable HTTPS assets or package fonts, wait for them explicitly, and inspect the generated PDF in a test invocation.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
ScreenshotNeo provides a website screenshot API and MCP server when you need a rendered capture without maintaining Chromium in Lambda. It accepts consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, with the result identified by X-Page-Verdict and X-Billed headers. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—work with Claude, Cursor, and other MCP clients.
For a PDF or screenshot-oriented workflow, call the API directly:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo documentation for output and options. The service also supports full-page captures, CSS-selector elements, device presets and custom viewports, retina scale, PDF paper settings and page ranges, custom CSS or JavaScript, waits, request blocking, headers, cookies, user agents, authorization, geolocation, caching, signed links, asynchronous webhooks, bulk capture, and a usage API.
Best Value
- Convert your VHS tapes to DVD or digital to enhance and preserve your home movies
- Capture analog video directly from your camcorder or VCR and burn to DVD or convert to popular digital formats to share freely across devices
- Trim video, make quick edits, enhance color, add transitions, reduce noise and stabilize old footage to breathe new life into your old videos
- Complete your video experience by selecting from creative, customizable DVD menu templates, or creating personalized disc labels
- Get 2 DVDs for your first projects: An Amazon exclusive extra
The Free plan includes 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account.
Node.js alternatives for direct API use
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}`);
Frequently Asked Questions
Can I use the full `puppeteer` package instead of `puppeteer-core`?
Only if your deployment also contains the Chromium revision and dependencies that package expects. In Lambda, teams commonly separate the automation library from a deliberately pinned serverless Chromium build so the executable and architecture can be verified together.
Should I select arm64 or x86_64?
Select the architecture supported by your chosen Chromium build and build every native dependency for it. Do not switch architecture without rebuilding and revalidating the complete artifact.
Can Lambda return a PDF directly through API Gateway?
Yes, if your integration supports binary responses and you base64-encode the PDF as shown. For larger files, storing the bytes in object storage and returning a download reference avoids response-size constraints.
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.

