A Chrome extension that finds and removes duplicate photos from your Google Photos library.
Uses Google Photos Toolkit (GPTK) to access your library via Google Photos' web interface. Built with Plasmo, MediaPipe, React, and MUI.
- Unzip to a permanent folder (don't delete it — Chrome needs it to stay there)
- Open
chrome://extensions→ enable Developer mode (toggle, top-right) - Click Load unpacked → select the unzipped folder
- Pin the extension icon in your toolbar for easy access
- Open Google Photos in Chrome with the extension installed
- Click the extension icon → Open Deduper
- Click Scan Library - the extension fetches your media items and uses MediaPipe image embeddings locally to find visually identical photos
- Review the duplicate groups, select which to keep, and click Move to Trash
No OAuth setup. No Google Cloud project. No data leaves your browser.
Prerequisites: Google Chrome, Node.js 24
git clone https://github.com/mtalcott/google-photos-deduper.git
cd google-photos-deduper
git submodule update --init --recursive
npm install
npm run dev # builds into build/chrome-mv3-dev/Load in Chrome: chrome://extensions → enable Developer mode → Load unpacked → select build/chrome-mv3-dev/.
# Start the Plasmo dev server (rebuilds on file changes)
npm run dev
# Build the Chrome extension (builds into build/chrome-mv3-prod/)
npm run build
# Run unit and integration tests
npm test
# Run full E2E tests (requires Chrome with remote debugging — see below)
npm run test:e2eFull E2E tests connect to a running Chrome instance via the Chrome DevTools Protocol (CDP). Start Chrome with remote debugging before running:
macOS:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/chrome-debug"Windows WSL:
"/mnt/c/Program Files/Google/Chrome/Application/chrome.exe" \
--remote-debugging-port=9222 \
--user-data-dir="C:\Users\<you>\Chrome Profiles\chrome-debug"Then run: npm run test:e2e
Google deprecated the Photos Library API's write access in 2025, and duplicate detection has never been a built-in Google Photos feature. This extension uses @xob0t's Google Photos Toolkit (GPTK) — an open-source wrapper around Google Photos' undocumented web API — to access your library without OAuth, and runs MediaPipe's MobileNet V3 image embedder locally to find visually identical photos.
Found a bug or have a feature request? Open an issue.
Have questions? Post on the discussions page.
If you found this project useful, give it a star!
