Thanks for your interest in contributing to IMM! To add a new method: 1. Create a new file in the `matching/im_models` folder called `[method].py` 2. If the method requires external modules, add them to `./matching/third_party` with `git submodule add`: for example, I've used this command to add the LightGlue module which is automatically downloaded when using `--recursive` ```bash git submodule add https://github.com/cvg/LightGlue matching/third_party/LightGlue ``` This command automatically modifies `.gitmodules` (and modifying it manually doesn't work). 3. Add the method by subclassing `BaseMatcher` and implementing `_forward`, which takes two image tensors as input and returns a dict with keys `['num_inliers','H', 'mkpts0', 'mkpts1', 'inliers0', 'inliers1', 'kpts0', 'kpts1', 'desc0', desc1']`. The value of any key may be 0, if that model does not produce that output, but they key must exist. See `TEMPLATE.py` for an example.

You may also want to implement `preprocess`, `download_weights`, and anything else necessary to make the model easy to run. 4. Open `__init__.py` and add the model name (all lowercase) to the `available_models` list.

Add an `elif` case to `get_matcher()` with this model name, following the template from the other matchers. 5. If it requires additional dependencies, add them to `requirements.txt` or to the `[project.optional-dependencies]` of `pyproject.toml`. 6. Format the code with [Black](https://github.com/psf/black), like this ``` pip install black cd image-matching-models && black --line-length 120 ./ ``` 7. Test your model and submit a PR! Note: as authors update their model repos, consider updating the submodule reference here using the below: To update a submodule to the head of the remote, run ```bash git submodule update --remote matching/third_party/[submodule_name] ```