#Screenshot Generator (Local-only)
Route:
/{locale}/{product}/screenshots-generator
This page is development-only (NODE_ENV=development) and returns 404 in production builds.
#Source Image Directory
The generator reads source images from:
public/products/{slug}/raw-screenshots/{locale}/phonepublic/products/{slug}/raw-screenshots/{locale}/tablet
Example:
public/products/aurora-eos/raw-screenshots/en-US/phone/home.pngpublic/products/aurora-eos/raw-screenshots/en-US/tablet/home.png
Recommended file names:
home.pngcapture.pnginsights.pngshared.pngcustomize.pngreminder.png
#Per-product Customization
To manage copy/theme separately per product, create:
public/products/{slug}/raw-screenshots/screenshot-generator.config.json
To separate screenshot copy by locale only, add this file:
public/products/{slug}/raw-screenshots/{locale}/screenshot-generator.json
To sync locale input folders from the App Store / Google Play supported locales in
~/.config/pabal-mcp/registered-apps.json and generate final screenshot PNGs, run:
yarn screenshots:generate
The command lists apps in public/products and lets you select one by number. You can also pass a
slug directly:
yarn screenshots:generate pabal
This command first prepares the raw-screenshots/{locale}/phone and
raw-screenshots/{locale}/tablet input folders. It does not rewrite existing
screenshot-generator.json copy files. Then it starts an internal Next dev server plus a
Playwright browser, captures the same React/html-to-image output as the local generator UI, and
saves PNG files here. You do not need to open localhost manually.
public/products/{slug}/screenshots/{locale}/phone/1.pngpublic/products/{slug}/screenshots/{locale}/tablet/1.pngpublic/products/{slug}/screenshots/{locale}/feature-graphic.png
Example config:
{
"title": "Aurora EOS App Store Screenshots",
"subtitle": "Localized marketing screenshots for weather intelligence",
"statusLabel": "Export Status",
"accentGradient": "linear-gradient(120deg, #0f172a 0%, #134e4a 55%, #0ea5e9 100%)",
"theme": {
"backgroundStart": "#0b1220",
"backgroundEnd": "#12263a",
"panel": "rgba(255,255,255,0.9)",
"textPrimary": "#f8fafc",
"textSecondary": "#cbd5e1",
"accent": "#22c55e"
},
"slides": [
{
"fileName": "home.png",
"headline": "Know tomorrow's aurora chance"
},
{
"fileName": "capture.png",
"headline": "Track Kp, cloud cover, and visibility"
}
],
"tabletSlides": [
{
"fileName": "home.png",
"headline": "Know tomorrow's aurora chance"
},
{
"fileName": "capture.png",
"headline": "Track Kp, cloud cover, and visibility"
},
{
"fileName": "insights.png",
"headline": "Plan the night from a wider view"
}
]
}
Locale copy example:
{
"title": "Post Black Belt: BJJ Journal",
"subtitle": "BJJ log & belt tracker",
"slides": [
{
"fileName": "home.png",
"headline": "Know what to train next after every session",
"subheadline": "Clear next steps after every class."
}
],
"tabletSlides": [
{
"fileName": "home.png",
"headline": "Review the training flow on a wider screen",
"subheadline": "Tablet screenshots are generated as a 3-image set by default."
}
]
}
#Notes
- If
slidesis omitted, the generator auto-builds slide labels from file names. - Add
tabletSlidesto use iPad-only copy/file names. The generate script creates tablet content as a 3-image set by default. - If
slidesis omitted, the generator prioritizes this order:home.png,capture.png,insights.png,shared.png,customize.png,reminder.png. screenshots:generatedoes not automatically overwrite existingscreenshot-generator.jsoncopy.- If a locale folder has no files, it falls back to default locale and then
config.jsonscreenshot metadata. - The local generator UI is for development preview/manual export.
yarn screenshots:generatecaptures that same UI in an internal browser and writes PNG files.