Your docs screenshots stop matching the product the day you ship.
Reshot defines captures once and runs reshot run --headless in CI on every build, so a diff hits review the moment a screenshot drifts.
Why screenshots rot
Every release breaks an embedded visual somewhere.
The product moves, the docs don't, and nobody finds out until weeks after the fact.
01
Drift on every release
A UI ships, a screenshot in the docs falls out of date, and nothing in the release flags it.
02
The ticket arrives weeks later
Support or a customer notices. By then the trail is cold and nobody knows which other captures are now wrong.
03
Manual re-shoot, or accept the rot
Someone reproduces the state, retakes the image, and re-uploads. The next release does it again.
[01] Capture in local CLI
Capture against localhost with npx reshot run
Run screenshots in your own environment, against the same app state your team already trusts. Reshot turns those captures into repeatable scenarios instead of one-off scripts, so the workflow lives with the repo instead of in someone's personal setup.
{
"baseUrl": "http://localhost:3000",
"storageStatePath": ".reshot/auth-state.json",
"scenarios": [
{
"name": "billing-overview",
"steps": [
{ "action": "goto", "url": "/app/billing" },
{ "action": "waitForSelector", "selector": "[data-loaded='true']" },
{ "action": "capture", "key": "billing-overview" }
]
}
]
}[02] Publish & review
Publish candidate visuals, then review the diff before anything updates.
Each new run becomes a candidate update, not an automatic replacement. Reshot shows what changed, routes it through review, and lets your team decide which visual should become the current one.
npx reshot run --headless
npx reshot publish[03] Map to docs
Map visuals to docs once, then stop chasing filenames.
Connect a stable visual reference to your docs, help center, release notes, or launch content. Instead of swapping exported PNGs by hand, your pages point to a durable visual key that stays useful across releases.
reshot publish
reshot pull --format tsimport assets from "./reshot-assets";
<img
src={assets.billingOverview}
alt="Billing Overview"
/>[04] Update visuals anytime
Update the visual without rewriting the docs.
When the product changes, rerun the scenario, review the diff, and approve the new capture. The same mapped visual stays current everywhere it is embedded, so updates happen in one place instead of across every page that uses it.
Who this is for
Docs teams, DevRel, and support.
Docs teams
Screenshots drift after every release. Reshot ties them to CI so they update with the code they document.
DevRel
Launch posts and tutorials embed a stable URL. Approve a new capture and every embed updates at once.
Support
Help-center images stay accurate even while the product keeps moving underneath them.
Start with one page
Start with one page.
Pick the docs page with the most screenshots. One capture run. If the next run surfaces a diff without anyone touching the embed, you have your answer.

