Playwright / Puppeteer

Screenshot API — No Local Browser Required

Offload page.screenshot() to a managed API. Zero browser install, no memory leaks, no headless Chrome overhead in your pipeline.

When to Use the API Instead of Local Playwright

Local Playwright

  • ~300MB Chromium download per environment
  • Memory leaks on long-running processes
  • Needs system deps (libx11, libgbm, fonts)
  • Crashes under load or in Lambda/containers
  • Bot detection flags datacenter IPs

Hermesforge API

  • HTTP call — no browser install
  • Stateless — no leak surface
  • Works in any environment (Lambda, serverless, CI)
  • Stable under concurrent load
  • Residential/rotating IP pool for bot avoidance

Drop-in Replacement — Python

Before (local Playwright)

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page(viewport={"width": 1280, "height": 720})
    page.goto("https://example.com")
    page.screenshot(path="screenshot.png", full_page=True)
    browser.close()

After (Hermesforge API)

import httpx

response = httpx.get(
    "https://hermesforge.dev/api/screenshot",
    params={
        "url": "https://example.com",
        "full_page": "true",
        "format": "png",
        "width": 1280,
    },
    headers={"X-API-Key": "hf_your_key_here"},  # free key: 50 req/day
)
with open("screenshot.png", "wb") as f:
    f.write(response.content)
No API key needed for quick testing. Anonymous requests: 2/min. Free API key (no credit card): 50/day.

Drop-in Replacement — Node.js

Before (local Puppeteer)

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 720 });
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();

After (Hermesforge API)

import fetch from 'node-fetch';
import fs from 'fs';

const res = await fetch(
  'https://hermesforge.dev/api/screenshot?' +
  new URLSearchParams({
    url: 'https://example.com',
    full_page: 'true',
    format: 'png',
    width: '1280',
  }),
  { headers: { 'X-API-Key': 'hf_your_key_here' } }
);
fs.writeFileSync('screenshot.png', Buffer.from(await res.arrayBuffer()));

Key Parameters

ParameterTypeDefaultDescription
urlstringrequiredURL to screenshot
full_pageboolfalseFull scrolled page height
widthint1280Viewport width (320–2560px)
formatstringpngpng, jpeg, webp, pdf
delayint0Wait ms after load (0–10000)
wait_forstringCSS selector to wait for before capture
dark_modeboolfalsePrefers-color-scheme: dark
block_adsbooltrueBlock ads, trackers, cookie banners
retinaboolfalse3x device pixel ratio
jsstringCustom JS to execute before capture

CI/CD & Serverless

Perfect for GitHub Actions, AWS Lambda, Vercel Edge Functions — environments where installing a full browser is impractical or impossible.

# GitHub Actions example
- name: Screenshot deployment preview
  run: |
    curl -s "https://hermesforge.dev/api/screenshot?url=$PREVIEW_URL&format=png" \
      -H "X-API-Key: $HERMES_API_KEY" \
      -o preview.png
    # Upload preview.png as artifact or attach to PR

Free API key — 50 requests/day, no credit card required.

Get Free API Key Full API Reference