Your screenshots stop matching the product the day you ship.

Set up once by your engineers, used forever by your entire team. Engineers wire reshot run --headless into CI one time. After that, every drifting screenshot lands in a review inbox your non-technical team approves — no repo access required.

why screenshots rot

The rot is invisible until your customer finds it.

The product moves, the docs don’t. By the time a customer notices, the trail is cold and no one knows which other captures are wrong too.

3 releases stale
the idea

Map a visual once. Approve. Every embed updates.

Docs, help center, changelog, and launch posts all point at one durable key — not a PNG filename you swap by hand. One approval reaches every place the visual is embedded.

assets.billingOverview
one stable reference
Docs
Help
Changelog
Launch
Landing

Stop chasing filenames.

When the product changes, you rerun the scenario and approve the diff — the same key stays current everywhere.

That key is one published CDN URL that Reshot serves.

docs-page.tsx
import assets from "./reshot-assets";

<img src={assets.billingOverview} />
in your stack

Captures live in the repo, not in someone’s head.

Run screenshots in your own environment against the same app state your team already trusts. Capture rules are reviewable in pull requests instead of hiding in one-off scripts.

reshot.config.json
{
  "version": "2.0",
  "baseUrl": "http://localhost:3000",
  "scenarios": [
    {
      "key": "billing-overview",
      "name": "Billing Overview",
      "url": "/app/billing",
      "requiresAuth": true,
      "steps": [
        { "action": "wait", "ms": 1000 },
        { "action": "screenshot", "key": "billing-overview" }
      ]
    }
  ]
}

It runs where your app already runs.

In your environment, no extra permissions

Capture against localhost with the same auth and data your team already trusts — no separate staging dance. Auth lives in a local .reshot/auth-state.json file you generate and control.

Reviewable in PRs

Capture rules live in the repo as config, so changes show up in code review like everything else.

Authored or recorded

Write a scenario by hand, or generate one with the recorder. Either way it lives with the code.

the docs & support surface

The review inbox your non-technical team runs every day.

Once engineers wire capture into CI, this is the only screen the docs and support team touches. Each drifting capture shows up as a candidate — old, new, and diff side by side. Approve it, and the live pointer flips to the new image everywhere it’s embedded. Every plan includes 5 review approvals to start — unlimited on Pro and above.

candidate
billing-overview detected from localhost capture · awaiting approval
deploy #2184
in review
analytics-panel assigned to docs reviewer
2h ago
approved
settings-overview live pointer updated · every embed now current
just now
security & your data

Your screenshots and auth state stay on your side of the line.

Reshot runs captures in environments you control and stores only what you approve. Here’s the honest posture — the full security overview.

how it’s handled

Captures run where your app runs.

The capture runtime executes on your localhost or in your own CI — not on a Reshot server reaching into your product.

  • You decide what’s stored. Only approved screenshots, baselines, diffs, and metadata are uploaded — redact or use fixture data for anything sensitive.
  • Access control & encryption. Role-based workspace access, TLS in transit, encryption at rest, and bring-your-own-storage on request.
Can i review this

An open, in-the-open devtool.

The CLI and capture tooling are actively under development. The published screenshot CLI is Apache-2.0 licensed — audit it, fork it, or open a PR.

Start with one page.

Start with one tour. Author it once, render it in CI, and let it re-render itself every time the product moves.