DEV Community

Custodia-Admin
Custodia-Admin

Posted on • Originally published at pagebolt.dev

Playwright alternative for screenshots and video recording: no browser to install

Playwright Alternative for Screenshots and Video Recording: No Browser to Install

Playwright is excellent for end-to-end testing. But if your use case is capturing screenshots, generating PDFs, or recording browser sessions — not testing assertions — Playwright is a lot of infrastructure for a side job.

Here's what the comparison looks like.

The Playwright approach

import { chromium } from 'playwright';

const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();
Enter fullscreen mode Exit fullscreen mode

This works. But it requires:

  • npm install playwright (~100MB)
  • npx playwright install chromium (~300MB browser binary download)
  • Managing the browser lifecycle (launch, close, error handling)
  • Memory management in production (browser processes leak)
  • Chromium compatibility on your deployment platform

The API approach

import fs from 'fs';

const res = await fetch('https://api.pagebolt.dev/v1/screenshot', {
  method: 'POST',
  headers: { 'x-api-key': process.env.PAGEBOLT_API_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({ url: 'https://example.com', fullPage: true, blockBanners: true })
});
fs.writeFileSync('screenshot.png', Buffer.from(await res.arrayBuffer()));
Enter fullscreen mode Exit fullscreen mode

No binary. No browser process. One dependency (fetch is built into Node 18+).

When Playwright is the right choice

  • You need to write assertions (expect(page.locator(...)).toBeVisible())
  • You're running hundreds of parallel test suites
  • You need fine-grained control over browser state between test steps
  • You're already running a Playwright test suite and screenshots are incidental

When an API is the right choice

  • Screenshots, PDFs, or OG images as a feature of your product
  • CI/CD demo recording (not test assertions)
  • Batch thumbnail generation
  • Scheduled monitoring captures
  • Anything running in a serverless or edge environment where Chromium can't run

Serverless is the decisive case. Lambda and Cloud Run have strict memory limits and don't support running Chromium without layers or containers. An API call works anywhere fetch works.

Video recording: what Playwright can't do

Playwright has a recordVideo option — it records a raw browser session. What it doesn't do:

  • AI voice narration synced to browser steps
  • Audio guide with a script and {{N}} step markers
  • Built-in browser chrome frame (macOS, Windows, minimal)
  • Automatic pacing between steps
// Narrated video recording — not possible in Playwright
const res = await fetch('https://api.pagebolt.dev/v1/video', {
  method: 'POST',
  headers: { 'x-api-key': process.env.PAGEBOLT_API_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    steps: [
      { action: 'navigate', url: 'https://yourapp.com' },
      { action: 'click', selector: '#get-started', note: 'Opening the form' },
      { action: 'screenshot', name: 'result' }
    ],
    audioGuide: { enabled: true, voice: 'nova', script: 'Welcome. {{2}} Click to open the form.' },
    frame: { enabled: true, style: 'macos' },
    pace: 'slow'
  })
});
fs.writeFileSync('demo.mp4', Buffer.from(await res.arrayBuffer()));
Enter fullscreen mode Exit fullscreen mode

The output is a production-ready MP4: narrated, framed, paced. Suitable for product demos, changelog videos, PR review recordings.

Summary

Playwright PageBolt API
Install size ~400MB 0
Browser process Required None
Serverless compatible No (without layers) Yes
Test assertions
Narrated video
Audio guide
PDF generation Basic Full CSS support

Use Playwright for tests. Use PageBolt for everything that returns a file.


Free tier: 100 requests/month, no credit card. → pagebolt.dev

Top comments (0)