OpenScreenShot
The whole page. One click. Yours to keep.
Open-source full-page screenshot extension for Chrome and Firefox. Capture, annotate, blur, export as PNG, JPEG, WebP, or PDF, and record a tab. Everything runs on your device. No account.
Website · Docs · Roadmap · Report a bug
Chrome preview. Screenshot capture and editing are also available in Firefox.
Capture the whole web page, crop it, mark it up, blur what is private, and save it as an image or a PDF. Every step runs in your browser: nothing is uploaded, and there is no account.
Capture → edit → share
- One click, whole page — the toolbar icon captures the entire scrolling page, even behind sticky headers and inside nested scrollers (a settings toggle restores the mode picker)
- Visible area, region, and element capture from the popup, the right-click menu, or keyboard shortcuts, with an optional 3, 5, or 10 second delay
- Annotate with arrows, shapes, text, numbered steps, spotlight, highlighter, and crop, with full undo
- Blur or redact secrets before you share: soft blur, mosaic, or an opaque fill
- Record the tab in Chrome with auto-zoom at your clicks, mic and webcam, and trim. Pick the part of the tab to record and check your camera first; the controls stay out of the video
- Export as PNG, JPEG, WebP, or multi-page PDF, or copy straight to the clipboard
- Script it from a terminal, CI, or an AI agent with the CLI and MCP server
The full tour, every shortcut, and the settings reference live in the docs.
Guides
- How to take a full-page screenshot in Chrome, and the same for Edge, Firefox, Safari, Brave, Opera, Vivaldi, and Arc
- Save a screenshot as a PDF · Redact a screenshot
- Screenshots from the command line · A local screenshot MCP server · Screenshots in CI
- Full-page screenshot extensions compared · Alternatives to GoFullPage, FireShot, Awesome Screenshot, and more
Install
Firefox requires desktop version 140 or later. The Chrome extension also works in Edge, Brave, Arc, and other Chromium browsers. Screen-wide color picking and floating capture windows appear only when the browser supports them.
Your first screenshot
- Install from your browser’s store and pin the extension to the toolbar.
- Click the icon to capture the whole page. Right-click for visible-area and region capture.
- Edit and share — annotate, redact, copy, or save an image or PDF.
Prefer a capture menu on every click? Turn off Express mode in settings. For alternatives and a sourced feature comparison, see How it compares.
Element capture
Choose Capture element from the page or extension right-click menu, or from the popup when Express mode is off. Hover over a card, image, chart, or table to highlight it. Use ↑ / ↓ to select a larger or smaller area, or ← / → to move between elements without a mouse. Click or press Enter to capture; Esc cancels.
The capture follows your existing Editor, Clipboard, or Download setting. The element must be fully visible: scroll it into view, or use the Capture full page fallback offered for clipped elements. Content inside an iframe is captured as part of the iframe's visible rectangle. No new permissions are needed.
Private by design
host_permissions is empty: activeTab grants access on your click, and the extension
does not have standing access to every website. Captures, recordings, and edits stay
in local browser storage until you export or delete them. Chrome can optionally request
broader access for recording across sites; Firefox does not request recording permissions. Full policy: PRIVACY.md.
Development
TypeScript (strict) + Preact, bundled by Vite + @crxjs/vite-plugin. One runtime dependency (Preact); unit tests with Vitest. Node.js 22.19+ and pnpm 10.33.0.
pnpm install --frozen-lockfile
pnpm run icons
pnpm typecheck
pnpm lint
pnpm test
pnpm format:check
pnpm lint:firefox # validate dist-firefox/ after building
The Firefox release guide covers reviewer source archives, verification, and automated Mozilla submissions. Tagged releases have separate Chrome and Firefox workflows; store review determines when each update becomes available.
For the website, use pnpm site:dev; a push to main deploys it. See
CONTRIBUTING.md for the contribution workflow.
openscreenshot/
├── manifest.json # MV3 manifest (crxjs entry)
├── public/ # icons + i18n messages
├── src/
│ ├── background/ # service worker (capture + recording coordinator)
│ ├── content/ # on-demand capture funcs (scroll, region, recording click tracker)
│ ├── control/ # recording control tab: area, camera preview, Start/Stop (Preact)
│ ├── editor/ # annotation editor + export (Preact, own tab)
│ ├── offscreen/ # recording engine: MediaRecorder + IndexedDB chunks
│ ├── popup/ # popup UI (Preact)
│ ├── recorder/ # recording editor: timeline, zoom, trim, export (Preact, own tab)
│ └── shared/ # design tokens, messaging, storage, types, utils
├── mcp/ # optional local CLI + MCP server
├── site/ # Astro website + localized content
├── site-dist/ # generated site build, served by site-worker.js
├── tests/unit/ # unit tests (Vitest)
└── scripts/ # icon + screenshot pipelines
CLI & MCP
openscreenshot (npm) is a separate, optional tool that drives the Chrome already on your
machine. It is local by default and needs no account. Node.js 22.12 or newer and Chrome,
Chromium, or Edge are required. The package README has every option.
Optional: openscreenshot auth login, then --cloud on the CLI or cloud: true on the MCP
tool, renders the page on OpenScreenShot Cloud, a hosted
screenshot API with a free plan. In Cloud mode, the URL and the options go to Cloud.
CLI
npx openscreenshot shot https://example.com --out shot.png --full
Cover secrets before the pixels are written: --redact "<css selector>",
--redact-pattern email,phone,secret, and --redact-rect x,y,w,h put black boxes over
their targets, and the capture fails rather than writes an image if a target moves.
MCP
Add this server entry to your MCP client’s configuration, then call capture_screenshot
with { "url": "https://example.com", "fullPage": true }:
{
"mcpServers": {
"openscreenshot": { "command": "npx", "args": ["-y", "openscreenshot"] }
}
}
Claude Code: claude mcp add openscreenshot -- npx -y openscreenshot.
The server runs locally over stdio. Your client must support launching a local MCP
process. For clients that accept only remote MCP URLs, OpenScreenShot Cloud serves
https://cloud.openscreenshot.app/mcp (Streamable HTTP, Authorization: Bearer <api-key>). The tool returns
the PNG to the client, which may send it to a hosted model: use the redact input for data
that must not leave the device.
Built for the terminal-heavy parts of the job:
- DevOps — snapshot dashboards, status pages, and admin UIs straight into incident reports, runbooks, and postmortems, from cron or a chat command
- CI/CD — capture pages in your pipeline for docs, release notes, and visual diffs on every deploy: one command, no hosted service needed
Contributing
Desktop and web apps are also in progress. Follow their development on the roadmap.
See CONTRIBUTING.md and the roadmap. If OpenScreenShot is useful to you, you can buy me a coffee.
License
MIT © OpenScreenShot @PGHQdev