[verdict][curated prompt][source: screenshotone.com]
Can I vibecode ScreenshotOne?
// buildable in a weekend, but real gaps stay open
A competent coding agent can build a useful self-hosted screenshot endpoint around Playwright in a weekend. Matching ScreenshotOne's reliable browser fleet, proxy locations, stealth behavior, maintained blocking rules, videos, and production edge-case handling is a much larger infrastructure product.
confidence: high
what it is: Managed API for rendering websites, HTML, and Markdown as images or PDFs
Buildability index · an editorial game
- Price from 17 $ · usage-based weight: plus 2
- Time weekend weight: plus 2
- Category developer tools no weight
- Moat infrastructure scale · proprietary data · execution quality weight: minus 5
- Confidence high weight: plus 1
- What you lose 5 items weight: minus 2
- Site screenshotone.com (si apre in una nuova scheda) no weight
The moat outweighs the price: rebuilding this is a project, not an evening.
Gioco editoriale: il verdetto dice se un agente può, l’indice se conviene.
What you build
Send a URL or HTML to an authenticated HTTP endpoint and receive a cached PNG, JPEG, WebP, or PDF rendered by a local Chrome/Chromium worker.
what you need
- Docker
- a machine with enough memory to run Chrome/Chromium
The basic API is buildable; dependable rendering at scale and the maintained cleanup data are the paid product.
The prompt
A weekend with a coding agent. The gaps that stay are right below, under “what you lose”.
Build me a self-hosted website screenshot API to replace ScreenshotOne for personal use. Requirements:
- Node 22 + Fastify + Playwright (Chromium) + better-sqlite3, one process, no queue system.
- GET /take?url=&format=png|jpeg|webp|pdf&width=&height=&full_page=&delay_ms= renders the
page in a pooled Chromium context and returns the image bytes directly.
- POST /take accepts raw HTML or Markdown in the body and renders that instead
(Markdown through marked into a plain template).
- Auth is one API key from .env, checked on every request; 401 without it.
- Cache by hash of the normalized options: metadata in SQLite, files under data/cache/,
with a cache_ttl option and a fresh=true bypass.
- Block ads and cookie banners the honest way: load EasyList and the
"I don't care about cookies" filter list at startup, apply them via request
interception, plus a small CSS hide-list for common consent overlays. Do not
promise it catches everything.
- Hard 15-second navigation timeout, one retry, then a JSON error with the reason;
never a hanging request.
- Concurrency capped at a small context pool (default 2) with an in-memory queue,
so the box does not fall over.
- Out of scope: proxies and IP locations, stealth evasion, scrolling video capture,
GPU rendering, dashboards, usage billing. That fleet is the paid product.
- README: npx playwright install chromium, .env keys, Chromium memory expectations,
and a one-line warning that hostile sites will beat this build. Curated prompt: written and reviewed by hand for this app. In English on purpose — it is the language coding agents work best in.
What you lose
- managed browser capacity, rate limiting, and high availability
- maintained ad, cookie banner, chat widget, and popup blocking rules
- residential proxies, selectable IP locations, and stealth tuning
- scrolling screenshots, video generation, and GPU rendering
- production support for difficult sites and browser edge cases
Why people still pay
They want a screenshot API that stays reliable across hostile, slow, dynamic, and consent-heavy sites without operating Chrome/Chromium workers, updating blocking rules, managing proxies, or debugging browser failures.
moat: Infrastructure scale Proprietary data Execution quality what a moat is
browser fleet, blocking-rule corpus, proxies, and rendering reliability
Free alternatives
Not in the mood to build it? These already exist, they are free or open source, and we checked them one by one.
Rejected (1) — and why
- Browserless (si apre in una nuova scheda) — Free only for non-commercial use; production proprietary work needs a paid licence.
Do you agree?
The vote balance
Ancora nessun voto: il tuo è il primo.
Nessun voto ancora — il primo pesa.