Comparison · Run your own browser, or use a managed template renderer
thirds.ai vs self-hosted Puppeteer or Playwright
Puppeteer and Playwright are code libraries that drive a browser. Both can load HTML or a page and print it to a PDF, and your code controls every step. thirds.ai runs that browser work for you, with fixed limits, to make branded PDFs and images again and again.
We aren't connected to Puppeteer, Playwright, Google, or Microsoft. Their names are trademarks of their owners. We checked the project docs, licences, and operating guides on 12 September 2026. Facts about the libraries come from the projects. Where we say which one fits or what it costs, that's our opinion.
- 1 credit
- makes 1 PDF or image
- 50 credits
- free every month, no card
- $29
- a month for Starter, with 2,500 credits
- 4 formats
- PDF, PNG, JPEG, and WebP
Try it yourself
Test the same job in both tools
Use one real design and details that look like production. Measure good files, peak memory and CPU, cold and warm starts, failed jobs, retries, storage, transfer, upgrades, alerts, and support time. Running your own browser fits when your team already runs browser services and accepts the security, scaling, and upgrade work. thirds.ai fits when people who don't code must edit the designs. It also fits when HTML from your customers needs a safe, limited place to run.

Feature by feature
Side by side
| What you need | thirds.ai | Self-hosted Puppeteer or Playwright |
|---|---|---|
| Input | A description for the AI, your own HTML, a picture that becomes a design you can edit, or plain HTML from your code. It can't load a page URL. | Your code can set page content or navigate to a URL before it prints or takes a screenshot (project-reported). |
| Output | PDF, PNG, JPEG, and WebP. | Chromium can print a page to PDF. Browser pages can produce screenshots; Playwright documents PNG, JPEG, and WebP types (project-reported). |
| Template work | A visual editor and an AI chat work on the same HTML design. Saved versions never change, and brand kits hold your logo, colours, and fonts. | The libraries do not provide a hosted template library, customer editor, brand kit, or saved template-version contract (our reading). Your app can build any of these. |
| Browser control | You set PDF and image options. You can't drive the browser step by step. | Your code controls navigation, page content, JavaScript, media mode, headers, footers, screenshots, and PDF options (project-reported). |
| API and delivery | REST and MCP endpoints, queued jobs, idempotency, polling, signed webhooks, and expiring downloads. | These libraries expose programming APIs. Your team builds any network API, authentication, queue, retry rule, idempotency key, webhook, storage, and download flow (our reading). |
| Limits | A PDF has fixed page, asset, time, memory, and output limits. Images have pixel and output limits. | The library APIs do not set a hosted-plan quota (our reading). Your machine, process limits, timeouts, browser stability, and application rules set practical limits. |
| Security work | The service isolates untrusted renders, blocks private and reserved destinations, rechecks redirects, and applies hard resource limits. | Your team configures browser users, sandboxing, containers, network access, resource limits, and cleanup. Playwright warns that its Docker image is for testing and development and is not recommended for untrusted sites (project guidance). |
| Software price | Starter is $29 a month for 2,500 credits. One credit makes one PDF or image. | Puppeteer and Playwright use the Apache License 2.0, which grants a no-charge, royalty-free licence under its terms (project licence). There is no hosted render service in the library price. |
| Total cost | Plan, overage, and pack prices are public. We run and maintain the browser for you. | Compute, storage, transfer, build work, maintenance, security, monitoring, incidents, and user support belong to your team. Their cost depends on your system and staff (our judgment). |
| Where it fits | Teams that want a managed service for repeat PDFs and images, with designs they can edit and fixed limits. | Engineering teams that need browser-level control and already own the operating work, or have a reason to build it (our judgment). |
Read before you decide
Limits on both sides
thirds.ai limits
- It doesn't load a page URL. Send the HTML text or use a saved template and data.
- It doesn't expose page navigation, selectors, scripts, cookies, browser contexts, or arbitrary Playwright or Puppeteer calls.
- A PDF can have up to 100 pages. The pictures and fonts it loads can total 20 MiB, and the finished file can be 25 MiB.
- An image can be up to 32 megapixels and 25 MiB.
- It uses one fixed version of Chromium that we manage. You can't choose Firefox, WebKit, a Chrome channel, or an arbitrary browser build.
- It's a shared hosted service, so each account has limits on files at once, request rate, spend, and abuse.
Self-hosting limits and the work you take on
- Playwright says each library version needs specific browser binaries and may need another browser install after an update (project guidance). Puppeteer downloads a compatible Chrome for Testing build by default (project guidance).
- Browser images and Linux hosts need system packages, fonts, writable temporary space, and correct process cleanup. Puppeteer's Docker guide requires an init process and documents a sandboxed image that uses the
SYS_ADMINcapability (project guidance). - Playwright's Docker image runs browsers as root by default, which disables the Chromium sandbox. Its guide recommends a separate user and seccomp profile for crawling or scraping (project guidance).
- A browser call alone does not give customers safe retries, duplicate protection, quotas, billing, job states, webhooks, signed downloads, retention, or support (our reading).
- Your service must treat HTML, JavaScript, assets, and URLs as untrusted when customers control them. Network blocks must cover redirects, DNS changes, loopback, private, link-local, metadata, and reserved addresses.
- No project page promises a maximum PDF page count, output size, request rate, service availability, or support response time for your deployment (our reading). You set and test those contracts.
Worth knowing
How to compare the total cost
The library licence price is not the operating cost. Choose the same comparison period and output count for both options. Record running costs with representative documents and include failed work. Label any cost you estimate rather than measure.
| Cost to measure | What to record |
|---|---|
| Compute | Browser hosts, warm idle capacity, peak concurrency, memory, CPU, temporary disk, and retries. |
| Storage and transfer | Inputs, finished files, backups, retention, and customer downloads. |
| Build work | API, auth, templates, queue, idempotency, webhooks, storage, limits, and admin tools. |
| Safety work | Browser sandbox, container policy, URL and redirect checks, network rules, secrets, and abuse controls. |
| Ongoing work | Browser and library updates, visual checks, alerts, incident response, capacity changes, and customer support. |
For self-hosting, spread one-time build and setup work across the chosen period and add compute, storage, transfer, and operating work for that period. For thirds.ai, include one-time integration and migration work, the plan or packs, and your own download, storage, and support work over the same period. Do not charge a whole build to one month while spreading the other option’s setup cost across a year.
Divide each period total by successful customer outputs during that period. Keep staff time as measured hours and apply the rate your business uses; this page does not invent one. Compare equal output counts, retention needs, and support needs.
Self-hosting can cost less when spare capacity, browser skills, and the needed service code already exist. It can cost more when the renderer needs new security and operations work. Measure your case instead of assuming either result.
Switching
Moving from self-hosted Puppeteer or Playwright
Start with one render path, its HTML, data, fonts, assets, browser settings, PDF or screenshot options, and a known-good output. Send the HTML directly to thirds.ai first. Map page size, orientation, margins, backgrounds, and image format to the supported request fields. A request that depends on navigation, cookies, selectors, or page scripts can need a new input path because thirds.ai does not expose those browser steps.
Then decide whether the HTML stays stateless or becomes a saved template. For repeat work, replace values with MiniJinja fields, add sample data and a schema, check the preview, and save the exact version. Replace local files or object-store writes with the job response, signed webhook, and expiring download. Keep your current renderer for any job that needs direct browser control.
Checked and dated
Sources
- Puppeteer PDF generation, checked 12 September 2026
- Puppeteer
Page.pdf(), checked 12 September 2026 - Puppeteer installation, checked 12 September 2026
- Puppeteer Docker guidance, checked 12 September 2026
- Puppeteer troubleshooting and Linux dependencies, checked 12 September 2026
- Puppeteer Apache 2.0 licence, checked 12 September 2026
- Playwright Page API, checked 12 September 2026
- Playwright browser installation and updates, checked 12 September 2026
- Playwright Docker and sandbox guidance, checked 12 September 2026
- Playwright Apache 2.0 licence, checked 12 September 2026
- thirds.ai facts come from our pricing page, API reference, billing guide, and renderer limits.
Try the same job here
Open the Campaign results report template to make a sample document. Or use Create your first PDF to send HTML you already have, without saving a design first.
Change the details and make a real file for free. It has a watermark. Sign in to keep working on the same design with the same details.