Puppeteer screenshots? There's a faster way.
You wrote the Puppeteer script. It worked locally. Then in production: memory leaks, zombie processes, Chromium crashes at 3 AM. RendShot replaces all of that with one API call.
Sound familiar?
The production pains of self-hosted Puppeteer.
Chromium crashes and zombie processes at 3 AM
Memory leaks that grow until the container OOMs
Docker image is 400MB+ just for the browser
Cold starts take 2-5 seconds per render
Font rendering differs between local and production
Maintaining headless browser config across Node versions
Migration
25 lines → 3 lines.
Same HTML input. Same image output. No browser, no Docker, no cleanup.
// Before: Puppeteer (25 lines)
// const browser = await puppeteer.launch()
// const page = await browser.newPage()
// await page.setViewport({ width: 1200, height: 630 })
// await page.setContent(html)
// await page.waitForTimeout(500) // hope fonts loaded...
// const buffer = await page.screenshot({ type: 'png' })
// await browser.close() // don't forget this or you'll leak memory
// await uploadToS3(buffer)
// After: RendShot (3 lines)
import { RendShot } from '@rendshot/sdk'
const client = new RendShot({ apiKey: process.env.RENDSHOT_API_KEY })
const image = await client.renderImage({
html,
width: 1200,
height: 630,
format: 'png',
})
console.log(image.url) // CDN-hosted, no upload neededBenchmark
Puppeteer vs RendShot — side by side.
| Metric | Puppeteer | RendShot |
|---|---|---|
| Cold start | 2-5s (browser launch) | 0s (pre-warmed pool) |
| P50 render time | ~800ms | ~400ms |
| P99 render time | ~3.2s | ~1.8s |
| Concurrent renders | ~8 tabs (limited by RAM) | 100 req/min (Pro) |
| Memory usage | ~500MB per instance | 0 (managed) |
| Docker image | 400MB+ with Chromium | Not needed |
| Monthly cost (10k images) | $40+ VPS/container | $19 Pro plan |
| CSS support | Full | Full (Tailwind, Grid, Flexbox) |
| JavaScript execution | Yes | No (HTML/CSS only) |
| Maintenance | You — updates, crashes, scaling | Managed — zero ops |
Honest comparison
RendShot isn't the right tool for every job.
Puppeteer is a browser automation tool. RendShot is a rendering API. They overlap for HTML-to-image, but diverge everywhere else.
You need JavaScript execution
Use PuppeteerPuppeteer runs JS in the page. RendShot renders static HTML/CSS only.
You need PDF generation
Use PuppeteerPuppeteer has page.pdf(). RendShot produces images (PNG/JPEG/WebP).
You need browser interaction
Use PuppeteerClicking, scrolling, form filling — Puppeteer is a browser automation tool.
You need HTML → Image at scale
Use RendShotNo browser to host, no crashes, global CDN, sub-second renders.
You need URL screenshots
Use RendShotRendShot supports both HTML rendering and URL screenshots via /v1/screenshot.
FAQ
Migrating from Puppeteer
Can I use my existing HTML templates from Puppeteer?
Yes. If your Puppeteer code sets page content with page.setContent(html), that same HTML works with RendShot. Just send it as the html parameter in your API call. The rendering engine is the same (Chromium), so CSS behaves identically.
Does RendShot execute JavaScript in the page?
No. RendShot renders static HTML + CSS. If your templates use client-side JS to modify the DOM before screenshotting, you'll need to pre-render that logic server-side and send the final HTML to RendShot. For most image generation use cases (cards, banners, reports), JS execution is unnecessary.
How does RendShot handle fonts?
RendShot auto-loads 50+ Google Fonts. If your Puppeteer setup installs custom fonts in Docker, you can either use Google Fonts (no install needed) or reference font URLs in your CSS @font-face rules. No more font rendering differences between local and production.
What about URL screenshots?
RendShot supports URL screenshots via POST /v1/screenshot. Pass a URL and optional viewport settings, and get back an image. SSRF protection is built in — private IPs and internal networks are blocked automatically.
Is there a free tier?
Yes. 100 renders per month, 10 requests per minute, 7-day image retention. No credit card required. If you're evaluating as a Puppeteer replacement, the free tier is enough to test your entire workflow.
Same HTML. No infrastructure.
100 free renders to test your migration. No credit card, no Docker, no Chromium.