A modern VisiPics replacement.
Project description
PixMatch
PixMatch is a modern, cross-platform duplicate-image finder inspired by VisiPics, built with PySide6.
PixMatch scans folders (and ZIP archives) for visually similar images, groups matches, and lets you quickly keep, ignore, or delete files from a clean GUI. Rotated, mirrored or recompressed imgaes are no match for PixMatch! PixMatch can even detect visually similar GIFs and animated WebP files. Files inside ZIPs are treated as read-only “sources of truth” —never deleted—so you can safely compare against archived libraries.
Supported extensions: .jpg, .jpeg, .png, .webp, .tif, .tiff, .bmp, .gif, .zip.
Install
PixMatch is a standard Python app (GUI via PySide6).
python -m pip install pixmatch[gui]
Running
python -m pixmatch
Usage
Simply select some folders to parse and then click begin.
Once duplicate groups begin to appear in the duplicates view, you can start to select actions for them and then execute those actions. Clicking on a tile will cycle through actions, with red being delete, yellow being ignore, and green being no action.
Images which are in zips and cannot be deleted will have a rar icon to denote such, and they cannot be marked for deletion.
The status bar under each image shows the full path, the file size, the uncompressed file size, the frames in the image if it is an animated image, the image dimensions and the last modified date.
Basic status bar example:
Animated image status bar example:
Notes
- An exact match checkbox is provided. If strength is 10 and this checkbox is checked, SHA-256 file hashes will be used instead of perceptual hashes.
Optional Args:
positional arguments:
folders Folders to load into the selected file path display (to speed up testing).
options:
--verbose More detailed logging
Acknowledgements
- Thanks to anyone who supported this effort, including the teams behind PySide6, Pillow, PyPI, and many other projects.
- Thanks to Johannes Buchner and the team behind imagehash, which serves as a large backbone in this application and saved me a lot of time.
- Thanks to Guillaume Fouet (aka Ozone) for VisiPics and the inspiration. Please don't be mad, I just wanted some new features like better gif and zip support.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pixmatch-0.1.0.tar.gz.
File metadata
- Download URL: pixmatch-0.1.0.tar.gz
- Upload date:
- Size: 13.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4158ca36cc7a0b0ba1ceb9f08ee3ddee0245be8cc2ffe0fba59aeb667340b023
|
|
| MD5 |
8b92c726c6d401393a0c83f3343702b3
|
|
| BLAKE2b-256 |
8c32eb1e834fa6eab414c829f6cff33243a48e2734dc3df020be01e0a962ba0a
|
Provenance
The following attestation bundles were made for pixmatch-0.1.0.tar.gz:
Publisher:
ci.yml on rheard/pixmatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pixmatch-0.1.0.tar.gz -
Subject digest:
4158ca36cc7a0b0ba1ceb9f08ee3ddee0245be8cc2ffe0fba59aeb667340b023 - Sigstore transparency entry: 701542760
- Sigstore integration time:
-
Permalink:
rheard/pixmatch@0c2938b54778e9ee3cce426f8214bc62599e5119 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/rheard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0c2938b54778e9ee3cce426f8214bc62599e5119 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pixmatch-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pixmatch-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ba46f2a812692f0f8db6cd73533f60bd4e6fc8492b1a4573d2702fd97ccd5d7
|
|
| MD5 |
66196ac71ddb2544231cfb029bdb2ddc
|
|
| BLAKE2b-256 |
6ad06391179764404882bd1930bbd949c064dc19921fdc744bf708e23742a2fd
|
Provenance
The following attestation bundles were made for pixmatch-0.1.0-py3-none-any.whl:
Publisher:
ci.yml on rheard/pixmatch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pixmatch-0.1.0-py3-none-any.whl -
Subject digest:
4ba46f2a812692f0f8db6cd73533f60bd4e6fc8492b1a4573d2702fd97ccd5d7 - Sigstore transparency entry: 701542763
- Sigstore integration time:
-
Permalink:
rheard/pixmatch@0c2938b54778e9ee3cce426f8214bc62599e5119 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/rheard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@0c2938b54778e9ee3cce426f8214bc62599e5119 -
Trigger Event:
push
-
Statement type: