High-performance Python port of mapbox/pixelmatch for perceptual image comparison
Project description
pixelmatch-fast
High-performance Python port of mapbox/pixelmatch for perceptual image comparison
Pixelmatch is a tool that automatically highlights differences between two images while ignoring anti-aliasing artifacts.
For more information about pixelmatch capabilities and examples, see the mapbox/pixelmatch repository.
This project tries to stay up to date with the current pixelmatch version (currently matches with v7.1.0).
Similar Projects
This project is similar to pixelmatch-py. The key difference is that pixelmatch-fast is much faster by leveraging numpy for array operations and numba for JIT compilation.
Use pixelmatch-py if you want a clean port with very little dependencies, use pixelmatch-fast if you need high performance.
Installation
Install the package:
pip install pixelmatch-fast
CLI Usage
$ pixelmatch --help
Usage: pixelmatch [OPTIONS] IMG1 IMG2
Compare two images pixel-by-pixel and visualize differences.
Options:
--version Show the version and exit.
-o, --output PATH Path to save diff image (PNG format)
-t, --threshold FLOAT Matching threshold (0 to 1); smaller is more
sensitive [default: 0.1]
--include-aa Count anti-aliased pixels as different
-a, --alpha FLOAT Opacity of original image in diff output [default:
0.1]
--aa-color TEXT Color of anti-aliased pixels (R,G,B) [default:
255,255,0]
--diff-color TEXT Color of different pixels (R,G,B) [default: 255,0,0]
--diff-color-alt TEXT Alternative diff color for darkened pixels (R,G,B)
--diff-mask Draw diff over transparent background
--help Show this message and exit.
Example (using test images from the mapbox/pixelmatch repository):
$ pixelmatch 1a.png 1b.png -o diff.png
Mismatched pixels: 106
The CLI exits with code 0 if images match and 1 if they differ (i.e., one or more mismatched pixels).
Library Usage
from pixelmatch import pixelmatch
# Compare two images and get mismatch count
num_diff = pixelmatch(
"image1.png",
"image2.png",
diff_path="diff.png", # Optional: save diff image
)
print(f"Found {num_diff} mismatched pixels")
Development
Install with dev dependencies (pytest, ruff):
pip install -e .[dev]
Run tests:
pytest tests/
Run tests with coverage (disables numba JIT compilation):
NUMBA_DISABLE_JIT=1 pytest tests/ --cov
Check code quality:
ruff check
ruff format --check
Install pre-commit hook (runs ruff automatically before commits):
cp hooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
The CI workflow automatically runs tests both with and without numba enabled, ensuring both the optimized and fallback code paths are tested.
License
MIT
Project details
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 pixelmatch_fast-1.2.0.tar.gz.
File metadata
- Download URL: pixelmatch_fast-1.2.0.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a89e52f2f34bc139f3424923285cba0f17800a7c175f5b61a8fc55f0edfa80c
|
|
| MD5 |
d070bf290d7dc7f3674fab65e75175f5
|
|
| BLAKE2b-256 |
61f1f803d8dead14f5c80ee1266a6324bb0d26a451d77cf59e5edf78c1be8edf
|
Provenance
The following attestation bundles were made for pixelmatch_fast-1.2.0.tar.gz:
Publisher:
pypi-publish.yml on JustusRijke/pixelmatch-fast
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pixelmatch_fast-1.2.0.tar.gz -
Subject digest:
8a89e52f2f34bc139f3424923285cba0f17800a7c175f5b61a8fc55f0edfa80c - Sigstore transparency entry: 787125324
- Sigstore integration time:
-
Permalink:
JustusRijke/pixelmatch-fast@1c568c8bfd021f0ba072867d794bfb1c4d4a9896 -
Branch / Tag:
refs/tags/1.2.0 - Owner: https://github.com/JustusRijke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1c568c8bfd021f0ba072867d794bfb1c4d4a9896 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pixelmatch_fast-1.2.0-py3-none-any.whl.
File metadata
- Download URL: pixelmatch_fast-1.2.0-py3-none-any.whl
- Upload date:
- Size: 8.5 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 |
4de3896224799b2e0ba78fdbf31ed85d311c6e2d698b2fc49c9067dcfa8c24dd
|
|
| MD5 |
c821ed97fddd945af5825e739ad8d45b
|
|
| BLAKE2b-256 |
4b9b13bf83e1f2dddac0289ba2568c3fc671b4ee1c36d0940fddfebaacd6750d
|
Provenance
The following attestation bundles were made for pixelmatch_fast-1.2.0-py3-none-any.whl:
Publisher:
pypi-publish.yml on JustusRijke/pixelmatch-fast
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pixelmatch_fast-1.2.0-py3-none-any.whl -
Subject digest:
4de3896224799b2e0ba78fdbf31ed85d311c6e2d698b2fc49c9067dcfa8c24dd - Sigstore transparency entry: 787125325
- Sigstore integration time:
-
Permalink:
JustusRijke/pixelmatch-fast@1c568c8bfd021f0ba072867d794bfb1c4d4a9896 -
Branch / Tag:
refs/tags/1.2.0 - Owner: https://github.com/JustusRijke
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@1c568c8bfd021f0ba072867d794bfb1c4d4a9896 -
Trigger Event:
release
-
Statement type: