Repository navigation
Store Listing Images
This page covers how the Chrome Web Store images are produced: two scripts turn the real extension, running on made-up data, into upload-ready PNGs. Read it to rebuild the images after a UI change or to add one. The repo docs hold the full detail, and this page links to them instead of repeating them:
- Listing screenshots covers capturing the views, the sample data, and adding a capture.
- Listing image style sets the Web Store rules, colours, type, layouts, copy and the pre-upload checklist.
The images come from two stages, each a package script. Run them in order from the repo root:
pnpm screenshots # writes out/screenshots/
pnpm showcase # writes out/showcase/-
scripts/capture-screenshots.tsbuilds the extension, loads it into headless Chromium, fills it with sample data and saves 7 views toout/screenshots/at 1280 × 800 and 2× pixel density. -
scripts/build-showcase.tslays crops of those captures into HTML pages in the listing style, renders each page in Chromium, and saves 5 screenshots, a small promo tile and a marquee promo tile toout/showcase/, with alt text inalt-text.txt.
Both scripts use Playwright, which is a dev dependency. On a new machine, the first run can fail with "Executable doesn't exist"; run pnpm exec playwright install chromium once and rerun. out/ is in .gitignore, so the generated images never get committed. CI doesn't run either script.
The capture script calls WXT's build API for the Chrome build, then starts Chromium with .output/chrome-mv3 loaded through --load-extension and opens the extension's own pages (app.html#/… and popup.html). The script tests the real extension rather than a dev server with stubbed extension APIs. Every browser.* call works as it does for a user, and no capture code goes into src/. The scripts only cover Chrome: nothing builds or captures the Firefox add-on, so there are no addons.mozilla.org images.
Before capturing, the script's seed function writes the sample data straight into the extension's IndexedDB and localStorage:
-
Screenshots.
scripts/listing-samples.tsholds 4 invented web pages as HTML: an analytics dashboard, a docs site, a bakery and a task board. The script renders each at 1440 × 900 and stores the result as a screenshot with the page's title and URL. Every address in the samples uses the.exampledomain. - Recordings. The script records an 8-second WebM of a pointer moving over the dashboard and stores it as 5 recordings with different dates and saved states. One has no duration, so Latest videos shows it as interrupted and recovered.
- Settings. The Record page shows Screen + camera and System + mic picked.
seed writes rows in the schema of src/lib/db.ts. It opens the database itself, with its own version number and stores, so those have to match db.ts too. When that schema changes, update seed in the same pull request, or the captures show empty or broken views. The seed writes no thumbnails: Latest videos makes them when it opens, as it does for a user.
Each view is an entry in the SHOTS array: a file name, the page to open, a ready locator to wait for, and optional prepare and element fields. The guide's Adding a screenshot section explains those fields and the workarounds in the editor shot.
The IMAGES array in the showcase script sets each image's layout, headline, ticks, crops, highlighted element and alt text. Crops are in CSS pixels of the capture, half its pixel size. When a captured view's layout moves, update the crop in IMAGES, or the image shows the wrong part of the UI.
The script stops in two cases:
- A capture an image needs is missing from
out/screenshots/. Runpnpm screenshotsfirst. - An output PNG has an alpha channel. The Web Store rejects those, so the script checks the PNG colour type on every image.
The script loads Inter from rsms.me, so build the images with a network connection. Offline, the headline falls back to the system sans-serif.
The colours, type and layouts appear twice: in the style reference and in the script's CSS. Change both together.
After a UI change that shows in the listing:
- Run
pnpm screenshotsand check the 7 captures inout/screenshots/. - If a view's layout moved, adjust its crop and highlight in
IMAGESinscripts/build-showcase.ts. - Run
pnpm showcase. - Work through the checklist in the style reference for each image.
- Upload the PNGs from
out/showcase/with the alt text fromalt-text.txt.
Never edit a captured image by hand. If a view needs different data, change the samples or seed and capture again.
Using Screen Tools
- Installation and Updating
- Firefox
- Recording
- Screenshots
- Uploading
- Settings
- Troubleshooting and FAQ
- Privacy
How it works
Contributing