Image verification and geolocation playbook
Check a photo's metadata, find earlier copies, and work out where and when it was taken
intermediate
Computes perceptual hashes of an online image to match copies and near-duplicates
Community-packaged from github.com/osintverse-community/image-hash: the registry's community pins the upstream release; the tool is its authors' work. Maintain that project? Claim this package.
Run
Through ot mcp, an agent calls run_tool with this; ot asks you before anything that goes online or touches a target. Set it up: ot mcp install claude (or cursor, vscode, codex, gemini).
{"tool":"osintverse-community/image-hash","target":"https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg","input_type":"url"}Or just say: "Run osintverse-community/image-hash on https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg with OTInstaller." The registry's read-only MCP server at api.otinstaller.com/mcp can find tools without installing anything.
ot run osintverse-community/image-hash url:https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg --format tableot install osintverse-community/image-hashDocker image in a read-only container · network allowed · no key · up to 2 min. The first ot run installs the tool after asking once. The example value is the registry's own test input, so this command has run. Drop --format table for JSON.
ot? Install it in one linecurl -fsSL https://get.otinstaller.com/ot | shot release for your machine from GitHub Releases.checksums.txt, and the Ed25519 signature on that file against the key built into the script.ot in /usr/local/bin or ~/.local/bin. Nothing else is written. Read the script.irm https://get.otinstaller.com/ot.ps1 | iexot release for your machine from GitHub Releases.checksums.txt, and the Ed25519 signature on that file against the key built into the script.ot in %LOCALAPPDATA%\Programs\ot, and adds it to your PATH. Nothing else is written. Read the script.sha256:588a79f1…185017. The same bytes on every install; ot pulls by digest, never by tag.ot checks the same identity before every install and refuses another signer.ot pulls the same digest from the mirror and checks the same signature.{
"envelope": 1,
"tool": "osintverse-community/image-hash@0.1.0",
"runtime": "docker",
"input": {
"url": "https://raw.githubusercontent.com/ianare/exif-samples/master/jpg/gps/DSCN0010.jpg"
},
"started_at": "2026-10-21T09:00:00Z",
"duration_ms": 4100,
"exit_code": 0,
"entities": [
{
"type": "image",
"value": "https://example.com/photo.jpg",
"attrs": {
"phash": "8f373714acfcf4d0"
}
}
],
"warnings": []
}Every tool returns this shape, shaped here from what this tool declares it finds. --format table to read it; ot extract and ot auto to continue.
Downloads an image and computes its average, perceptual, difference, wavelet and colour hashes, plus the SHA-256 of the exact file. Perceptual hashes stay nearly the same when a picture is resized, recompressed or lightly edited, so they show whether two images are the same photo.
ot run osintverse-community/image-hash --url https://example.com/a.jpg --compare https://example.org/b.jpg
| Input | Required | |
|---|---|---|
url |
yes | URL of the image |
compare |
no | URL of a second image to compare with |
With --compare, the second image carries the Hamming distance for each hash; a pHash distance of 8 or less usually means the same picture. Crops and mirror images change the hashes a lot.
Search the web for copies with osintverse-community/reverse-image-links.
pip install ImageHash==4.3.2 Pillow==13.0.0
python -m unittest
ot validate
Releases are built, signed and published by the otinstaller release workflow (Actions tab, with the version to release).
MIT
Check a photo's metadata, find earlier copies, and work out where and when it was taken
From a name or one handle to verified accounts across thousands of sites
Alternatives to image-hash that also take an url; ot auto runs every installed one on the same value.
Lists the images and metadata of posts and galleries on Reddit, Flickr, Imgur, Tumblr and 300+ sites
Splits a URL or hostname into subdomain, registered domain and public suffix
Breaks a URL into everything it encodes: timestamps, IDs, search terms, tracking and session data
Finds the oldest or newest Wayback Machine capture of a URL, or every archived URL of a site
Extracts metadata from videos and channels on YouTube, TikTok, X, Instagram and 1,000+ other sites