Skip to main content

vismatch

Vis(ion)Match(ers) is a unified API for quickly and easily trying 50+ (and growing!) image matching models.

Open In Colab Models on HF Downloads Tracker PyPI Downloads HF Downloads/month ReadTheDocs Page Visitors

Jump to: Install | Use | Models | Add a Model / Contributing | Acknowledgements | Cite | Download Stats | Documentation

Matching Examples

Compare matching models across various scenes. For example, we show SIFT-LightGlue and LoFTR matches on pairs:

(1) outdoor, (2) indoor, (3) satellite remote sensing, (4) paintings, (5) a false positive, and (6) spherical.

SIFT-LightGlue

LoFTR

Extraction Examples

You can also extract keypoints and associated descriptors.

SIFT and DeDoDe

Install

vismatch can be installed directly from PyPi. We strongly recommend using uv, but pip should work too

pip install uv             # install uv
uv venv                    # create uv venv
source .venv/bin/activate  # activate uv venv
uv pip install vismatch
# or, if you don't want to use uv
pip install vismatch

or, for development, clone this git repo and install with:

# Clone recursively
git clone --recursive https://github.com/gmberton/vismatch
cd vismatch

uv venv                    # create uv venv
source .venv/bin/activate  # activate uv venv
# editable install for dev work
uv pip install -e . 
# or non-editable install
uv pip install .

Some models require additional optional dependencies which are not included in the default list, like torch-geometric (required by SphereGlue) and tensorflow/larq (required by OmniGlue/ZippyPoint). To install these, use

uv pip install ".[all]"
# or
pip install .[all]

Use

You can use any of the over 50 matchers simply like this. All model weights are automatically downloaded by vismatch.

Python API

from vismatch import get_matcher
from vismatch.viz import plot_matches, plot_keypoints

# Choose any of the 50+ matchers listed below
matcher = get_matcher("superpoint-lightglue", device="cuda")
img_size = 512  # optional

img0 = matcher.load_image("vismatch/assets/example_pairs/outdoor/montmartre_close.jpg", resize=img_size)
img1 = matcher.load_image("vismatch/assets/example_pairs/outdoor/montmartre_far.jpg", resize=img_size)

result = matcher(img0, img1)
# result.keys() = ["num_inliers", "H", "all_kpts0", "all_kpts1", "all_desc0", "all_desc1", "matched_kpts0", "matched_kpts1", "inlier_kpts0", "inlier_kpts1", "matched_confidences"]

# This will plot visualizations for matches as shown in the figures above
plot_matches(img0, img1, result, save_path="plot_matches.png")

# Or you can extract and visualize keypoints as easily as
result = matcher.extract(img0)
# result.keys() = ["all_kpts0", "all_desc0"]
plot_keypoints(img0, result, save_path="plot_keypoints.png")

Command Line Interface / Standalone Scripts

You can also run matching or extraction as standalone scripts, to get the same results as above.

Matching:

# if you cloned this repo, vismatch_match.py is available, else see CLI below
python vismatch_match.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input vismatch/assets/example_pairs/outdoor/montmartre_close.jpg vismatch/assets/example_pairs/outdoor/montmartre_far.jpg
# or
uv run vismatch_match.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input vismatch/assets/example_pairs/outdoor/montmartre_close.jpg vismatch/assets/example_pairs/outdoor/montmartre_far.jpg

From any location where an python enviroment with vismatch installed is active, you can also run

# for PyPi install, use CLI entry point
vismatch-match --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input path/to/img0 --input path/to/img2

Keypoints extraction:

# if you cloned this repo, vismatch_extract.py is available, else see CLI below
python vismatch_extract.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input vismatch/assets/example_pairs/outdoor/montmartre_close.jpg
# or
uv run vismatch_extract.py --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input vismatch/assets/example_pairs/outdoor/montmartre_close.jpg

From any location where an python enviroment with vismatch installed is active, you can also run

# for PyPi install, use CLI entry point
vismatch-extract --matcher superpoint-lightglue --out-dir outputs/superpoint-lightglue --input path/to/img0

These scripts can take as input images, folders with multiple images (or multiple pairs of images), or files with pairs of images paths. To see all possible parameters run

python vismatch_match.py -h
# or
python vismatch_extract.py -h

Available Models

We support the following methods:

Dense: roma, tiny-roma, duster, master, minima-roma, ufm, redimatch[-indoor]

Semi-dense: loftr, eloftr, se2loftr, xoftr, minima-loftr, aspanformer, matchformer, xfeat-star, xfeat-star-steerers[-perm/-learned], edm, rdd-star, topicfm[-plus]

Sparse: [sift, superpoint, disk, aliked, dedode, doghardnet, gim, xfeat, raco]-lightglue, dedode, steerers, affine-steerers, xfeat-steerers[-perm/learned], dedode-kornia, [sift, orb, doghardnet]-nn, patch2pix, superglue, r2d2, d2net, gim-dkm, xfeat, omniglue, [dedode, xfeat, aliked]-subpx, [sift, superpoint]-sphereglue, minima-superpoint-lightglue, liftfeat, rdd-[sparse,lightglue, aliked], ripe, lisrd, zippypoint, loma, loma-r, upal

See Model Details to see runtimes, supported devices, source, and license of each model.

Important: although VisMatch uses a BSD 3-Clause License, the matchers we wrap can have different licenses. Please refer to each matcher's license when using them.

Adding a new method

See CONTRIBUTING.md for details. We follow the 1st principle of PyTorch: Usability over Performance

Documentation

Please see docs at: https://vismatch.readthedocs.io/en/latest/

Acknowledgements

Special thanks to the authors of all models included in this repo (links in Model Details), and to authors of other libraries we wrap like the Image Matching Toolbox and Kornia.

Download Stats

Daily downloads across all vismatch HuggingFace models, updated daily. Click the plot for the interactive version.

Downloads per day

Cite

This repo was created as part of the EarthMatch paper. Please cite EarthMatch if this repo is helpful to you!

@InProceedings{Berton_2024_EarthMatch,
    author    = {Berton, Gabriele and Goletto, Gabriele and Trivigno, Gabriele and Stoken, Alex and Caputo, Barbara and Masone, Carlo},
    title     = {EarthMatch: Iterative Coregistration for Fine-grained Localization of Astronaut Photography},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
    month     = {June},
    year      = {2024},
}

Metadata

Release files for vismatch 1.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vismatch 1.4.0
File Size Uploaded
vismatch-1.4.0.tar.gz 38.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for vismatch 1.4.0
File Interpreter ABI Platform
vismatch-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 71.2 MB

Release files / vismatch-1.4.0.tar.gz

Download URL vismatch-1.4.0.tar.gz
Size 38.4 MB
Tags Source
SHA-256 checksum
How to use checksums
5535df688b44f00e100833777719b6d1818fc1a7c9533dfa25a01fac5f84e416
BLAKE2b-256 checksum
How to use checksums
d91412d7630d878d1e2b891aa74835d1da1a42605ad6888f1591a4ac5997740a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / vismatch-1.4.0-py3-none-any.whl

Download URL vismatch-1.4.0-py3-none-any.whl
Size 32.9 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f78784e0a5540e68459ebcea577340b97788b5f2816d080458f8ef21f05117cc
BLAKE2b-256 checksum
How to use checksums
df53086f0796f5ed377dbc64fbfc4fcb8937f782706869f3419738f5920f6ba2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.1

1 release file

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page