fuzzyworld

when-am-i / files / scripts / screenshot-calendar.mts

screenshot-calendar.mts

Blame: the commit that last changed each line · file · history

48a625b7 2026-06-19 Pavel Safronov1// Screenshot one calendar data file across its eras, for inclusion in a
2// calendar PR (so reviewers can see geometry/era/conversion issues visually).
3//
26a02b71 2026-06-19 Pavel Safronov4// npm run screenshot:calendar -- src/data/calendars/massachusett.json
48a625b7 2026-06-19 Pavel Safronov5//
6// For each era it pins a point inside the region and a representative date in
7// that era, then captures the answer panel + shaded map. Output:
8// screenshots/calendars/<file>/
73912a47 2026-06-20 Pavel Safronov9//
10// To regenerate shots for every calendar at once, use `npm run screenshot:calendars`.
48a625b7 2026-06-19 Pavel Safronov11
12import { chromium } from 'playwright';
13import path from 'node:path';
73912a47 2026-06-20 Pavel Safronov14import { startDevServer } from './lib/server.mts';
15import { screenshotCalendar } from './lib/calendar-shots.mts';
48a625b7 2026-06-19 Pavel Safronov16
17async function run() {
18 const fileArg = process.argv[2];
19 if (!fileArg) {
20 console.error('usage: npm run screenshot:calendar -- <path/to/calendar.json>');
21 process.exit(1);
22 }
23
24 const server = await startDevServer();
25 try {
26 const browser = await chromium.launch();
27 const page = await browser.newPage({ viewport: { width: 1100, height: 920 }, deviceScaleFactor: 2 });
73912a47 2026-06-20 Pavel Safronov28 await screenshotCalendar(page, fileArg);
48a625b7 2026-06-19 Pavel Safronov29 await browser.close();
73912a47 2026-06-20 Pavel Safronov30 console.log(`\n✨ Done — screenshots/calendars/${path.basename(fileArg, '.json')}/\n`);
48a625b7 2026-06-19 Pavel Safronov31 } finally {
32 server.stop();
33 }
34}
35
36run().catch((err) => {
37 console.error(err);
38 process.exit(1);
39});