Skip to content

Introduction

shotlist takes annotated UI screenshots. It drives a running site with Playwright, clips a region, draws callouts on it, and writes the image where the project asks.

Each screenshot is a YAML recipe. What the screenshots are for — a handbook, a landing page, a release post, a store listing — is not the tool's concern, and nothing in it assumes one of them.

A recipe

A recipe names the region to capture, the regions inside it worth pointing at, and what to draw on those. Everything else has a default.

screenshots/recipes/order-row.yaml
name: order-row
install: guide

clip: { css: '.order-row', contains: Acme Corp, pad: 20 }

marks:
  amount: { within: clip, text: $42.00 }

callouts:
  - { mark: amount, text: What they owe, place: left }

A project's config

One shotlist.config.yaml in the project root says where the site runs and where images are installed. Every drawing constant — colour, stroke, radius, font — is configurable here too, with a neutral default.

shotlist.config.yaml
site:
  url: http://localhost:3000
  viewport: { width: 1440, height: 900 }
  scale: 2

install:
  guide: content/guide/images

A recipe is data

Nothing in a recipe runs. There is no step that evaluates JavaScript, and there will not be one. That keeps a recipe readable by anyone, and a broken screenshot fixable by anyone.