Config File
reshot.config.json is the capture contract that marketing pages and CI
workflows should both point to. It is JSON, not YAML.
Minimal starter config
JSON
{
"baseUrl": "http://localhost:3000",
"scenarios": [
{
"name": "billing-overview",
"steps": [
{ "action": "goto", "url": "/app/billing" },
{ "action": "capture", "key": "billing-overview" }
]
}
]
}Expanded structure
JSON
{
"baseUrl": "http://localhost:3000",
"assetDir": ".reshot/output",
"concurrency": 2,
"timeout": 45000,
"headless": true,
"viewport": {
"width": 1280,
"height": 720
},
"scenarios": [],
"variants": {}
}Common top-level fields
| Property | Type | Description |
|---|---|---|
baseUrl | string | Base URL for the target app |
assetDir | string | Local output directory |
concurrency | number | Parallel browser workers |
timeout | number | Scenario timeout in milliseconds |
headless | boolean | Headless browser mode |
viewport | object | Default viewport |
scenarios | array | Capture scenarios |
variants | object | Variant matrix definitions |
Certified target block
Use the target block when the app should pass release-grade certification:
JSON
{
"target": {
"key": "trueclara-docs",
"displayName": "TrueClara Docs Workflows",
"tier": "certified",
"owner": "TrueClara",
"baseUrl": "http://127.0.0.1:3030",
"captureSafe": true,
"supportedLocalCommand": "npm run build && RESHOT_CAPTURE=1 next start -p 3030",
"defaultAuthMode": "fixture",
"fixture": {
"command": "node scripts/docs-screenshot-pipeline.mjs prepare --base-url=http://127.0.0.1:3030",
"healthUrl": "/api/health/live"
},
"requiredEnv": ["SUPABASE_DB_URL"],
"certificationScenarioKeys": ["owner-workbench", "owner-report"]
}
}Use target.supportedLocalCommand when the launch-supported local server is
more specific than a generic npm run build && npm run start. reshot setup
prints this command directly for certified targets.
See Certified Targets for the full contract and onboarding path.
Storage configuration
JSON
{
"storage": {
"type": "reshot"
}
}Output configuration
JSON
{
"output": {
"primaryFormat": "gif",
"staticFormat": "png",
"gif": {
"loop": true,
"fps": 15,
"quality": "high",
"maxDuration": 10000
}
}
}Next read
Continue to Scenarios & Steps for the shape of each scenario entry.

