Vincentqyw/image-matching-webui

🤗 image matching webui

Python

1,310

348 commits

updated Oct 5, 2026

See the code

README


Image Matching WebUI
Matching Keypoints between two images

PyPI Release PyPI - Version Docker Image Version PyPI Downloads DeepWiki

Description

Image Matching WebUI (IMCUI) efficiently matches image pairs using multiple famous image matching algorithms. The tool features a Graphical User Interface (GUI) designed using gradio. You can effortlessly select two images and a matching algorithm and obtain a precise matching result. Note: the images source can be either local images or webcam images.

Try it on Open In Studio

Here is a demo of the tool:

https://github.com/Vincentqyw/image-matching-webui/assets/18531182/263534692-c3484d1b-cc00-4fdc-9b31-e5b7af07ecd9

The tool currently supports various popular image matching algorithms, namely:

AlgorithmSupportedConference/JournalYearGitHub Link
LoMa✅ECCV2026Link
RaCo✅3DV2026Link
RIPE✅ICCV2025Link
RDD✅CVPR2025Link
LiftFeat✅ICRA2025Link
DaD✅ARXIV2025Link
MINIMA✅ARXIV2024Link
XoFTR✅CVPR2024Link
EfficientLoFTR✅CVPR2024Link
MASt3R✅CVPR2024Link
DUSt3R✅CVPR2024Link
OmniGlue✅CVPR2024Link
XFeat✅CVPR2024Link
RoMa✅CVPR2024Link
DeDoDe✅3DV2024Link
Mickey❌CVPR2024Link
GIM✅ICLR2024Link
ALIKED✅ICCV2023Link
LightGlue✅ICCV2023Link
DarkFeat✅AAAI2023Link
SFD2✅CVPR2023Link
SphereGlue✅CVPRW2023Link
IMP✅CVPR2023Link
ASTR❌CVPR2023Link
SEM❌CVPR2023Link
DeepLSD❌CVPR2023Link
GlueStick✅ICCV2023Link
ConvMatch❌AAAI2023Link
LoFTR✅CVPR2021Link
SOLD2✅CVPR2021Link
LineTR❌RA-L2021Link
DKM✅CVPR2023Link
NCMNet❌CVPR2023Link
TopicFM✅AAAI2023Link
AspanFormer✅ECCV2022Link
LANet✅ACCV2022Link
LISRD✅ECCV2022Link
REKD❌CVPR2022Link
CoTR✅ICCV2021Link
ALIKE✅TMM2022Link
RoRD✅IROS2021Link
SGMNet✅ICCV2021Link
SuperPoint✅CVPRW2018Link
SuperGlue✅CVPR2020Link
D2Net✅CVPR2019Link
R2D2✅NeurIPS2019Link
DISK✅NeurIPS2020Link
Key.Net❌ICCV2019Link
OANet❌ICCV2019Link
SOSNet✅CVPR2019Link
HardNet✅NeurIPS2017Link
SIFT✅IJCV2004Link

How to use

HuggingFace / Lightning AI

Just try it on Open In Studio

or deploy it locally following the instructions below.

Requirements

Install from pip [NEW]

Update: now support install from pip, just run:

pip install imcui

Install from source

git clone --recursive https://github.com/Vincentqyw/image-matching-webui.git
cd image-matching-webui
conda env create -f environment.yaml
conda activate imcui
pip install -e .

or using docker:

docker pull vincentqin/image-matching-webui:latest

# Start the WebUI service
docker-compose up webui

# Or run in the background
docker-compose up -d webui
More Docker Compose Commands (click to expand)
# Build and start the WebUI service
docker-compose up --build webui

# Check the status of the WebUI service
docker-compose ps webui

# View logs for the WebUI service
docker-compose logs webui
docker-compose logs -f webui  # Follow logs in real time

# Stop the WebUI service
docker-compose stop webui

# Restart the WebUI service
docker-compose restart webui

# Remove the WebUI service container
docker-compose rm webui

# Remove all containers
docker-compose down

Deploy to Railway

Deploy to Railway, setting up a Custom Start Command in Deploy section:

python -m imcui.api.server

Run demo

# Using the package CLI (recommended)
imcui

# Or using the direct script
python app.py

then open http://localhost:7860 in your browser.

Command Line Interface

The imcui package provides a powerful command-line interface with various options:

Basic Usage

Basic Usage Commands (click to expand)
# Install the package
pip install imcui

# Run with default settings
imcui

# Run with verbose output
imcui --verbose

# Run on a specific port
imcui -p 7860

# Run on a specific host
imcui -s 127.0.0.1

# Help
imcui --help

Command Line Options

Basic Usage Commands (click to expand)
OptionShortDefaultDescription
--server-name-s0.0.0.0Hostname or IP address to bind the server to
--server-port-p7860Port number to run the server on
--config-cAuto-detectedPath to custom configuration YAML file
--example-data-root-dimcui/datasetsRoot directory containing example datasets
--verbose-vFalseEnable verbose output for debugging
--versionShow version information and exit

Add your own feature / matcher

I provide an example to add local feature in imcui/hloc/extractors/example.py. Then add feature settings in confs in file imcui/hloc/extract_features.py. Last step is adding some settings to matcher_zoo in your configuration file.

For a detailed step-by-step guide, see CLAUDE.md and the integrate-matcher skill at .claude/skills/integrate-matcher/SKILL.md.

Configuration file locations (in priority order):

  1. Custom config file specified with --config parameter
  2. config.yaml in current directory
  3. config/config.yaml in current directory
  4. Package default config (imcui/config/app.yaml)

Upload models

IMCUI hosts all models on Huggingface. You can upload your model to Huggingface and add it to the Realcat/imcui_checkpoints repository.

Contributions welcome!

External contributions are very much welcome. Please follow the PEP8 style guidelines using a linter like flake8. This is a non-exhaustive list of features that might be valuable additions:

  • support pip install command
  • add CPU CI
  • add webcam support
  • add line feature matching algorithms
  • example to add a new feature extractor / matcher
  • ransac to filter outliers
  • add rotation images options before matching
  • support export matches to colmap (#issue 6)
  • add config file to set default parameters
  • dynamically load models and reduce GPU overload

Adding local features / matchers as submodules is very easy. For example, to add the GlueStick:

git submodule add https://github.com/cvg/GlueStick.git imcui/third_party/GlueStick

If remote submodule repositories are updated, don't forget to pull submodules with:

git submodule update --init --recursive  # init and download
git submodule update --remote  # update

If you only want to update one submodule, use git submodule update --remote imcui/third_party/GlueStick.

To remove a submodule, follow these steps:

More Remove Submodule Commands (click to expand)
git submodule deinit -f imcui/third_party/GlueStick
git rm -f imcui/third_party/GlueStick
rm -rf .git/modules/imcui/third_party/GlueStick
git add .gitmodules && \
git commit -m "Remove submodule imcui/third_party/dust3r"

To format code before committing, run:

pre-commit run -a  # Auto-checks and fixes

Contributors

Resources

Acknowledgement

This code is built based on Hierarchical-Localization. We express our gratitude to the authors for their valuable source code.

aspanformer
deep-learning
feature-matching
gradio
image-matching
keypoint-matching
kornia
lightglue
loftr
pose-estimation
sift
superglue
superpoint
topicfm
visual-localization

Vincentqyw/image-matching-webui

🤗 image matching webui

Python

1,310

348 commits

updated Oct 5, 2026

See the code

README


Image Matching WebUI
Matching Keypoints between two images

PyPI Release PyPI - Version Docker Image Version PyPI Downloads DeepWiki

Description

Image Matching WebUI (IMCUI) efficiently matches image pairs using multiple famous image matching algorithms. The tool features a Graphical User Interface (GUI) designed using gradio. You can effortlessly select two images and a matching algorithm and obtain a precise matching result. Note: the images source can be either local images or webcam images.

Try it on Open In Studio

Here is a demo of the tool:

https://github.com/Vincentqyw/image-matching-webui/assets/18531182/263534692-c3484d1b-cc00-4fdc-9b31-e5b7af07ecd9

The tool currently supports various popular image matching algorithms, namely:

AlgorithmSupportedConference/JournalYearGitHub Link
LoMa✅ECCV2026Link
RaCo✅3DV2026Link
RIPE✅ICCV2025Link
RDD✅CVPR2025Link
LiftFeat✅ICRA2025Link
DaD✅ARXIV2025Link
MINIMA✅ARXIV2024Link
XoFTR✅CVPR2024Link
EfficientLoFTR✅CVPR2024Link
MASt3R✅CVPR2024Link
DUSt3R✅CVPR2024Link
OmniGlue✅CVPR2024Link
XFeat✅CVPR2024Link
RoMa✅CVPR2024Link
DeDoDe✅3DV2024Link
Mickey❌CVPR2024Link
GIM✅ICLR2024Link
ALIKED✅ICCV2023Link
LightGlue✅ICCV2023Link
DarkFeat✅AAAI2023Link
SFD2✅CVPR2023Link
SphereGlue✅CVPRW2023Link
IMP✅CVPR2023Link
ASTR❌CVPR2023Link
SEM❌CVPR2023Link
DeepLSD❌CVPR2023Link
GlueStick✅ICCV2023Link
ConvMatch❌AAAI2023Link
LoFTR✅CVPR2021Link
SOLD2✅CVPR2021Link
LineTR❌RA-L2021Link
DKM✅CVPR2023Link
NCMNet❌CVPR2023Link
TopicFM✅AAAI2023Link
AspanFormer✅ECCV2022Link
LANet✅ACCV2022Link
LISRD✅ECCV2022Link
REKD❌CVPR2022Link
CoTR✅ICCV2021Link
ALIKE✅TMM2022Link
RoRD✅IROS2021Link
SGMNet✅ICCV2021Link
SuperPoint✅CVPRW2018Link
SuperGlue✅CVPR2020Link
D2Net✅CVPR2019Link
R2D2✅NeurIPS2019Link
DISK✅NeurIPS2020Link
Key.Net❌ICCV2019Link
OANet❌ICCV2019Link
SOSNet✅CVPR2019Link
HardNet✅NeurIPS2017Link
SIFT✅IJCV2004Link

How to use

HuggingFace / Lightning AI

Just try it on Open In Studio

or deploy it locally following the instructions below.

Requirements

Install from pip [NEW]

Update: now support install from pip, just run:

pip install imcui

Install from source

git clone --recursive https://github.com/Vincentqyw/image-matching-webui.git
cd image-matching-webui
conda env create -f environment.yaml
conda activate imcui
pip install -e .

or using docker:

docker pull vincentqin/image-matching-webui:latest

# Start the WebUI service
docker-compose up webui

# Or run in the background
docker-compose up -d webui
More Docker Compose Commands (click to expand)
# Build and start the WebUI service
docker-compose up --build webui

# Check the status of the WebUI service
docker-compose ps webui

# View logs for the WebUI service
docker-compose logs webui
docker-compose logs -f webui  # Follow logs in real time

# Stop the WebUI service
docker-compose stop webui

# Restart the WebUI service
docker-compose restart webui

# Remove the WebUI service container
docker-compose rm webui

# Remove all containers
docker-compose down

Deploy to Railway

Deploy to Railway, setting up a Custom Start Command in Deploy section:

python -m imcui.api.server

Run demo

# Using the package CLI (recommended)
imcui

# Or using the direct script
python app.py

then open http://localhost:7860 in your browser.

Command Line Interface

The imcui package provides a powerful command-line interface with various options:

Basic Usage

Basic Usage Commands (click to expand)
# Install the package
pip install imcui

# Run with default settings
imcui

# Run with verbose output
imcui --verbose

# Run on a specific port
imcui -p 7860

# Run on a specific host
imcui -s 127.0.0.1

# Help
imcui --help

Command Line Options

Basic Usage Commands (click to expand)
OptionShortDefaultDescription
--server-name-s0.0.0.0Hostname or IP address to bind the server to
--server-port-p7860Port number to run the server on
--config-cAuto-detectedPath to custom configuration YAML file
--example-data-root-dimcui/datasetsRoot directory containing example datasets
--verbose-vFalseEnable verbose output for debugging
--versionShow version information and exit

Add your own feature / matcher

I provide an example to add local feature in imcui/hloc/extractors/example.py. Then add feature settings in confs in file imcui/hloc/extract_features.py. Last step is adding some settings to matcher_zoo in your configuration file.

For a detailed step-by-step guide, see CLAUDE.md and the integrate-matcher skill at .claude/skills/integrate-matcher/SKILL.md.

Configuration file locations (in priority order):

  1. Custom config file specified with --config parameter
  2. config.yaml in current directory
  3. config/config.yaml in current directory
  4. Package default config (imcui/config/app.yaml)

Upload models

IMCUI hosts all models on Huggingface. You can upload your model to Huggingface and add it to the Realcat/imcui_checkpoints repository.

Contributions welcome!

External contributions are very much welcome. Please follow the PEP8 style guidelines using a linter like flake8. This is a non-exhaustive list of features that might be valuable additions:

  • support pip install command
  • add CPU CI
  • add webcam support
  • add line feature matching algorithms
  • example to add a new feature extractor / matcher
  • ransac to filter outliers
  • add rotation images options before matching
  • support export matches to colmap (#issue 6)
  • add config file to set default parameters
  • dynamically load models and reduce GPU overload

Adding local features / matchers as submodules is very easy. For example, to add the GlueStick:

git submodule add https://github.com/cvg/GlueStick.git imcui/third_party/GlueStick

If remote submodule repositories are updated, don't forget to pull submodules with:

git submodule update --init --recursive  # init and download
git submodule update --remote  # update

If you only want to update one submodule, use git submodule update --remote imcui/third_party/GlueStick.

To remove a submodule, follow these steps:

More Remove Submodule Commands (click to expand)
git submodule deinit -f imcui/third_party/GlueStick
git rm -f imcui/third_party/GlueStick
rm -rf .git/modules/imcui/third_party/GlueStick
git add .gitmodules && \
git commit -m "Remove submodule imcui/third_party/dust3r"

To format code before committing, run:

pre-commit run -a  # Auto-checks and fixes

Contributors

Resources

Acknowledgement

This code is built based on Hierarchical-Localization. We express our gratitude to the authors for their valuable source code.

aspanformer
deep-learning
feature-matching
gradio
image-matching
keypoint-matching
kornia
lightglue
loftr
pose-estimation
sift
superglue
superpoint
topicfm
visual-localization

Significant stargazers

hysts

346 followers · starred Jul 2025

ewrfcas

227 followers · starred Dec 2023

Zeyu Huang

57 followers · starred Aug 2025

Chris Taylor

544 followers · starred Aug 2023