puppeteer-renderer alternatives
More input modes, streaming, and a built-in UI.
What puppeteer-renderer is
puppeteer-renderer (by zenato) is an open-source Node.js service that wraps Puppeteer in a small HTTP server. It exposes three endpoints:
GET /screenshot?url=…— returns a PNG/JPEG/WebP screenshotGET /pdf?url=…— returns a PDFGET /html?url=…— returns the fully-rendered HTML
All three also accept POST with a JSON body for more complex options (viewport, headers, cookies, wait conditions). It is actively maintained — v4.0.1 was released in December 2024 — and ships a Dockerfile for easy deployment.
For simple URL-to-screenshot use cases, puppeteer-renderer works well. Its limitations appear when you need to render HTML you wrote yourself, crawl multiple pages in a single call, or stream progress to a client.
Where puppeteer-renderer falls short
- URL-only input — you must pass a URL. Rendering an HTML string directly (e.g. a generated report or OG image template) requires hosting that HTML somewhere first, adding a round-trip.
- No file upload — there is no endpoint that accepts a raw
.htmlfile as a multipart upload. - No crawling — each request screenshots one page. Capturing a multi-page site requires calling the API once per URL.
- Synchronous responses only — the server returns the result inline. There are no Server-Sent Events for progress updates, which makes it harder to integrate with agent workflows or show live feedback.
- No web UI — puppeteer-renderer is API-only. There is no browser interface to test conversions or browse past results.
Comparison
| Feature | puppeteer-renderer | Openkova |
|---|---|---|
| Captures URLs | ✓ | ✓ |
| Captures HTML snippets | ✗ | ✓ |
| Captures HTML file uploads | ✗ | ✓ |
| Depth-based URL crawling | ✗ | ✓ depth 1–2 |
| SSE progress streaming | ✗ | ✓ |
| PDF output | ✓ | ✓ |
| Rendered HTML output | ✓ | ✗ |
| PNG / JPEG / WebP output | ✓ | ✓ |
| Web UI | ✗ | ✓ |
| Session gallery | ✗ | ✓ |
| Docker support | ✓ | ✓ |
| Self-hosted | ✓ | ✓ |
| License | MIT | MIT |
| Cost | Free | Free |
Note: puppeteer-renderer can return fully-rendered HTML — Openkova does not support that output mode. For screenshots and PDFs, both tools are equivalent.
Getting started with Openkova
git clone https://github.com/scnix-git/openkova
docker compose upRender an HTML snippet directly — no URL needed:
curl -N -X POST http://localhost:3000/api/convert/snippet \
-H "Content-Type: application/json" \
-d '{"html": "<h1 style=\"font-family:sans-serif\">Hello</h1>"}'Or crawl a URL and its sub-pages in one call:
curl -N -X POST http://localhost:3000/api/convert/url \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "depth": 2}'See the API reference for the full endpoint list and SSE event format, or read how to deploy Openkova with Docker.
Frequently asked questions
What is puppeteer-renderer?
An open-source Docker service that converts URLs to screenshots, PDFs, or rendered HTML via a simple REST API. Actively maintained by zenato on GitHub.
Can puppeteer-renderer convert an HTML snippet to an image?
No — it requires a URL. To render raw HTML, you would need to serve it first. Openkova's POST /api/convert/snippet accepts an HTML string directly with no hosting step.
Does puppeteer-renderer support SSE streaming?
No. It returns results as a synchronous HTTP response. Openkova streams progress events via SSE, useful for long crawls or agent workflows.
What is the main difference between puppeteer-renderer and Openkova?
puppeteer-renderer is minimal and focused: URL in, screenshot/PDF/HTML out. Openkova is broader: three input modes (URL, snippet, file), depth crawling, SSE streaming, and a web UI — and now matches on PNG, JPEG, WebP, and PDF output. puppeteer-renderer's unique advantage is returning rendered HTML. Both are MIT-licensed and Docker-deployable.
Also compare: Urlbox alternatives, html2canvas alternatives, and wkhtmltopdf alternatives.