Browser extensions for Chrome & Firefox
Capture screenshots from any page and send them straight to ImageTools โ or just grab a region to your clipboard. Manifest V3 for Chrome, WebExtensions for Firefox, same capture UX in both.
Get the extensions
Chrome / Chromium / Edge
Published on the Chrome Web Store. Works in any Chromium-based browser including Edge and Brave.
Add to Chrome โFirefox
Published on Mozilla Add-ons (AMO). Signed by Mozilla โ installs persist across restarts.
Add to Firefox โAlternatively grab the source from GitHub and build manually โ see the developer install notes below.
Features
Capture visible area
Grabs exactly what's on screen right now. A preview modal opens before anything leaves your browser โ copy it, upload it, or discard it.
Capture full page
Stitches the entire scrolling page into one tall image, correctly scaled even under DevTools device emulation and on HiDPI displays.
Capture selection
Drag a region on the page. An action panel appears with tag picker and ๐ Copy / โ Capture / Reselect / Cancel. Esc cancels, Enter captures, Ctrl/Cmd+C copies.
Copy vs. lodge
Every capture can go one of two ways: ๐ Copy puts the PNG on your system clipboard entirely client-side (nothing is uploaded), while โ Capture / โ Upload lodges it with your ImageTools instance.
Tag uploads
Set a default tag in the popup ("Tag uploads as"), pick from up to 8 recent-tag chips in the capture overlay, or type a brand-new one. Untagged uploads are fine too โ just clear the tag.
OAuth-style pairing
A short-lived, single-use registration URL pairs the extension with your session. No passwords are typed into the extension; tokens are revocable from the web UI at any time.
Pairing flow (generate โ paste โ connect)
Connecting an extension to your ImageTools instance takes about fifteen seconds:
- Open the addon settings in the web UIOpen ImageTools in your browser, go to Settings (About modal) โ click Browser Addon.
- Generate a registration URLClick Generate Registration URL. The backend creates an authorization code with a 5-minute expiry.
- Paste it into the extensionClick the ImageTools extension icon, paste the registration URL into the field, and click Connect.
- Capture awayThe extension exchanges the code for an access token (30 days) and a refresh token (90 days), then uses the access token for all uploads โ refreshing automatically when it expires.
What happens under the hood
| Step | Detail |
|---|---|
| Authorization code | Single-use, expires after 5 minutes |
| Access token | Issued on exchange, valid 30 days, used for screenshot uploads |
| Refresh token | Valid 90 days; silently obtains a fresh access token |
| Storage | Tokens live in browser storage; never in the page DOM |
| Revocation | Revoke any connected addon from the ImageTools settings โ effective immediately |
The addon talks to these backend endpoints: POST /api/v1/addon/authorize, /token, /refresh, /upload, plus list/revoke endpoints for managing authorizations.
Developer install
Both extensions are published on the Chrome Web Store and Mozilla Add-ons โ use those for normal installs. The steps below are for loading the development build directly from the repo.
Chrome / Chromium
- Get the extension folder: clone the repo (
browser-addons/chrome/) or grabdist/imagetools-chrome-1.12.0.zipfrom a release build and unzip it. - Open
chrome://extensions/. - Enable Developer mode (top-right toggle).
- Click Load unpacked and select the
chromefolder. - The ImageTools icon appears in the toolbar โ pin it if you like.
Firefox
- Get the extension folder:
browser-addons/firefox/from the repo, or the packageddist/imagetools-firefox-1.12.0.zip. - Open
about:debuggingin Firefox. - Click This Firefox โ Load Temporary Add-on.
- Select the
manifest.jsonfile inside thefirefoxfolder. - Note: temporary add-ons are removed when Firefox closes โ for a persistent install, use the signed add-on from Mozilla Add-ons.
Capture UX in detail
- Selection overlay: action panel shows a Tag input pre-filled with the popup's current tag, up to 8 recent-tag chips above the buttons, then ๐ Copy / โ Capture / Reselect / Cancel. Typing in the tag input never triggers page keyboard shortcuts.
- Preview modal (visible area & full page): nothing uploads until you confirm. The modal shows the captured image, tag picker, and ๐ Copy / โ Upload / โ Discard โ and the modal itself is not part of the capture. Full-page previews scroll so you can check the whole stitch.
- Clipboard copy: entirely client-side; pairing isn't required for the copy path, nothing is uploaded, and the popup's current tag is untouched. Paste into any image-capable target (editor, Slack, etc.).
- Failure handling: if the backend is down, the preview modal stays open with an error and a Retry button โ Discard still works.
Security notes
- No shared secrets: pairing uses a single-use authorization code that expires in 5 minutes โ the extension never sees your password.
- Short-lived access tokens: access tokens last 30 days, refresh tokens 90 days; both are stored in browser storage only.
- Server-side control: every pairing is listed in ImageTools settings and can be revoked there at any time โ subsequent uploads fail immediately.
- Copy is local: the ๐ Copy path performs no network upload at all; only โ Capture / โ Upload contacts your instance (with the bearer access token).
- Least privilege: the extensions request only the permissions needed for capture and API calls โ review the manifests in
browser-addons/chrome/manifest.json(MV3) andbrowser-addons/firefox/manifest.json.
Development
Both builds share the same structure: background.js (service worker / background script for auth and capture), popup.html/js, content.js (selection overlay), and icons. Load them unpacked/temporarily as above for live testing โ see MANUAL_TEST.md for the manual test plan covering edge selections, device emulation, tagging and clipboard copy.