If this project helps you, a coffee helps me keep working on it.
Open ImageXpert · Download the latest release · See what's changed
ImageXpert is a private reverse image search workspace that runs in your browser. Drop in a photo, inspect its local fingerprints, then choose where to search. The original file stays on your device unless you explicitly authorize a temporary public upload.
No account. No server to maintain. Nothing gets uploaded behind your back.
- Search 12 services from one review queue, including Google Lens, Yandex, Bing, TinEye, SauceNAO, TraceMoe, and IQDB.
- Calculate SHA-256, pHash, and dHash locally before anything leaves the browser.
- Review batches, spot likely duplicates, crop a region, or extract frames from a short video.
- Save investigations as portable case files. Searchable history and settings stay in browser storage.
- Send an image from the right-click menu with the Chrome, Edge, or Firefox companion.
- Work in English or Spanish. ImageXpert is also installable as a PWA and keeps its local shell available offline.
These are real ImageXpert screens. The bridge photo and example case records are synthetic demo data created for the screenshots. No outside search provider received the image.
ImageXpert reads file facts and perceptual hashes locally. Rotate, crop, trim a caption strip, or select a specific region before sending a search.
Each engine gets its own queue entry and status. Manual-only services are clearly marked, so a blocked popup or unsupported handoff never disappears silently.
History, cases, language, and custom engines live in the same workspace. Metadata-only history export removes URLs, thumbnails, filenames, and query text.
| Mode | What leaves your device | When to use it |
|---|---|---|
| Local file | Nothing | Hashing, duplicate review, preprocessing, C2PA inspection, and case work |
| Public image URL | The URL is sent to the engines you select | The image is already public and directly reachable |
| Temporary upload | Your processed image is uploaded to litterbox.catbox.moe for one hour, then its public URL is sent only to approved engines |
A provider needs a reachable URL and you're comfortable sharing the file |
Local-only mode is the default. Temporary upload consent lasts for the current browser session and names the engines that will receive the link. Expired links can't be redispatched.
The hosted app needs no install:
To run it from a local checkout:
python -m http.server 8765Then open http://127.0.0.1:8765/. index.html is the app entry point. The older ImageXpert.html address remains as a redirect for saved bookmarks.
The companions add Send image to ImageXpert to the browser's image context menu. They don't inject scripts into pages, read browsing history, or collect analytics.
- Download
ImageXpert-Chrome-v1.3.1.ziporImageXpert-Edge-v1.3.1.zipfrom the v1.3.1 release. - Extract the archive to a permanent folder.
- Open the browser's extensions page and enable Developer mode.
- Choose Load unpacked, then select the extracted folder.
Chrome users can also install the self-hosted ImageXpert-Chrome-v1.3.1.crx. The ZIP remains the primary package because Chrome may restrict direct CRX installs outside managed environments.
On Firefox 142 or newer, download ImageXpert-Firefox-v1.3.1.zip, open about:debugging#/runtime/this-firefox, choose Load Temporary Add-on, and select manifest.json from the extracted archive. Firefox removes temporary add-ons when the browser closes.
MediaHunter_Lite.user.js adds a small media collection panel to supported stock and reference sites. Install the versioned file from the latest release with Tampermonkey or another compatible userscript manager.
MediaHunter userscript permissions
The script uses storage for its local queue and preferences, opens selected results in new tabs, copies links on request, and downloads files you choose. Network access is limited to the supported source domains listed in the script header. Requests use anonymous mode, and the script doesn't transmit cookies through its download helper.
ImageXpert has no runtime dependencies. Packaging and tests use Node.js plus the Windows copy of bsdtar.
npm run package
npm testPackaging produces the website archive, unpacked browser bundles, a verified CRX3 package, the versioned userscript, and SHA-256 checksums. The test suite exercises modules, release contracts, exact mobile widths, accessibility behavior, and the app in a real headless browser.
Engine URLs change occasionally. Check their current deterministic contracts with:
npm run check:enginesImageXpert includes a local-only adapter boundary for Content Credentials inspection. A deployment can provide globalThis.ImageXpertC2PAAdapter contract version 1 using @contentauth/c2pa-web 0.8.3 or newer. The adapter must run in a worker and support cancellation. ImageXpert reports signature validity separately from credential trust and won't fetch provenance code at runtime.
- Reverse search providers control their own upload forms, rate limits, and popup behavior. ImageXpert can't guarantee that an external service accepts every dispatch.
- Biometric search may be restricted where you live. Review local law and each provider's policy before using a face search engine.
- C2PA inspection needs a compatible same-origin adapter. Without one, the app reports the feature as unavailable and continues normally.
- The Firefox companion is distributed as an unsigned temporary add-on. Persistent installation requires Mozilla signing.
index.html,app.css, andapp.jscontain the dependency-free browser app.modules/holds the controllers for media, dispatch, cases, history, settings, uploads, and provenance.extension/contains the MV3 browser companions.MediaHunter_Lite.user.jsis the optional userscript.scripts/builds and verifies release packages locally.tests/covers unit behavior, release contracts, and browser smoke checks.
ImageXpert is available under the MIT License.



