Matlab Integrate Pytorch Vision
matlab/matlab-agentic-toolkit
Creates MATLAB interfaces to Python image processing and computer vision models from GitHub repositories or pip-installable packages using MPyReq.
Adds a new local feature matching model from a GitHub repository to the image-matching-webui project as a working WebUI option.
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcher --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/integrate-matcher .claude/skills/integrate-matcher && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .claude/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcherType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcher --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/integrate-matcher .agents/skills/integrate-matcher && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .agents/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcher --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/integrate-matcher .cursor/skills/integrate-matcher && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .cursor/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Vincentqyw/image-matching-webui.git --path .claude/skills/integrate-matcher--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcher --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/integrate-matcher .gemini/skills/integrate-matcher && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .gemini/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcherInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/integrate-matcher .github/skills/integrate-matcher && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .github/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Vincentqyw/image-matching-webui integrate-matcher --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vincentqyw/image-matching-webui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/integrate-matcher .opencode/skills/integrate-matcher && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "integrate-matcher" agent skill from https://github.com/Vincentqyw/image-matching-webui/tree/main/.claude/skills/integrate-matcher into .opencode/skills/integrate-matcher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "integrate-matcher", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
integrate-matcherAdds a new local feature matching model from a GitHub repository to the image-matching-webui project as a working WebUI option.
Given the URL of a feature matching repository, the skill follows the project's established pattern for integrating a matcher. It starts by cloning the repository to a temporary folder for analysis: whether the matcher is dense or standalone, taking raw images, or sparse, taking keypoints and descriptors; how the model class is initialized and run; what it outputs; where weights are downloaded; its dependencies; and its variants. It also checks for mixed-precision and device issues on MPS and CPU.
Next the repository is added as a git submodule under `imcui/third_party/`, using the original repository name or a fork in the project's organization when one exists. Third-party code there is pinned and must never be edited in place; if a compatibility fix is needed, the fix goes into a fork and the submodule URL is pointed at it. You must be working in the `image-matching-webui` project root, and the target must be a local feature matching method.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aa4a6d0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitpythonghruffFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comclaude.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Image Matcher Integration loads about 4.8k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 1,580 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Vincentqyw/image-matching-webui at commit aa4a6d0, republished under its Apache-2.0 licence (© Vincentqyw). 1,580 words, ~4,797 tokens.
.claude/skills/integrate-matcher/SKILL.md (or your agent's skills folder).This skill automates the integration of a new local feature matching method into the image-matching-webui project. Given a GitHub repository URL, it follows the project's established patterns to add the matcher as a fully functional option in the WebUI.
image-matching-webui project root/tmp/<repo-name> for analysis (do NOT add as submodule yet)required_inputs = ["image0", "image1"]required_inputs includes keypoints0, descriptors0, etc.pyproject.toml or requirements.txttorch.autocast or mixed precision (mp, amp)?loma.device)?git submodule add <repo-url> imcui/third_party/<RepoName>Vincentqyw/xxx or agipro/xxx), prefer the forkimcui/third_party/ contains pinned third-party submodules — you are NOT the owner of this code. If a dependency needs a compatibility fix (e.g., API changes in PyTorch/kornia, import path changes):
agipro GitHub accountgit submodule deinit -f imcui/third_party/<RepoName>
git rm -f imcui/third_party/<RepoName>
rm -rf .git/modules/imcui/third_party/<RepoName>
git submodule add https://github.com/agipro/<RepoName>.git imcui/third_party/<RepoName>.gitmodules — the URL must point to the forkExample: EfficientLoFTR was forked to agipro/EfficientLoFTR to fix a kornia.utils.grid → kornia.utils import change required by kornia 0.8+.
Create imcui/hloc/matchers/<matcher-name>.py following these rules:
import sys
from pathlib import Path
from .. import logger
from ..utils.base_model import BaseModel
# Add third_party to sys.path for import
<matcher>_path = Path(__file__).parent / "../../third_party/<RepoName>/src"
sys.path.append(str(<matcher>_path))
# Import the model class
from <module> import <ModelClass>src/ as the package root, append <path>/srcThe class MUST:
BaseModelBaseModel subclass in the file (the dynamic_load function asserts this)default_conf dict with all configurable parametersrequired_inputs listclass MatcherName(BaseModel):
default_conf = {
"name": "two_view_pipeline",
"model_name": "<default_variant>",
"max_keypoints": 2048,
# ... other config
}
required_inputs = [
"image0",
"image1",
# For sparse matchers, also include:
# "keypoints0", "scores0", "descriptors0",
# "keypoints1", "scores1", "descriptors1",
]_init Methodself.conf (not the conf parameter) to access merged configlogger.info()self._download_model(repo_id=MODEL_REPO_ID, filename=...)torch.hub), let it handleif not torch.cuda.is_available():
# Disable mp/amp for CPU/MPS compatibility_forward MethodFor standalone matchers (input: raw images):
The data dict contains preprocessed tensors:
data["image0"]: shape (1, C, H, W), float32, range [0, 1]data["image1"]: shape (1, C, H, W)`, float32, range [0, 1]If the model expects PIL images or file paths, convert:
img0 = data["image0"].cpu().numpy().squeeze() * 255
img0 = img0.transpose(1, 2, 0) # CHW -> HWC
img0 = Image.fromarray(img0.astype("uint8"))For sparse matchers (input: keypoints + descriptors):
# Repackage data for the model's expected format
input = {
"image0": {"image": data["image0"], "keypoints": data["keypoints0"], ...},
"image1": {"image": data["image1"], "keypoints": data["keypoints1"], ...},
}
return self.net(input)The _forward method MUST return a dict with these keys:
Dense matchers that output matched keypoints only:
pred = {
"keypoints0": kpts0, # torch.Tensor, shape (N, 2), pixel coords in resized image
"keypoints1": kpts1, # torch.Tensor, shape (N, 2)
"mconf": confidence, # torch.Tensor, shape (N,), match confidence scores
}Dense matchers that can separate detected vs matched keypoints (PREFERRED):
pred = {
"keypoints0": all_kpts0, # All detected keypoints (for UI "Keypoints" display)
"keypoints1": all_kpts1, # All detected keypoints
"mkeypoints0": matched_kpts0, # Matched keypoints (for UI match lines)
"mkeypoints1": matched_kpts1, # Matched keypoints
"mconf": confidence, # Match confidence scores
}Sparse matchers (LightGlue-style):
# Return the model's raw output — match_dense.py handles the rest
return self.net(input)Key output rules:
keypoints0/1: ALL detected keypoints (shown in UI "Open for More: Keypoints")mkeypoints0/1: Only MATCHED keypoints (shown as match lines in UI)mkeypoints0/1 is missing, match_dense.py falls back to keypoints0/1mconf should be real confidence scores (not all-ones)imcui/hloc/configs/matchers.pyAdd a configuration entry for each model variant:
"<matcher-name>": {
"output": "matches-<matcher-name>",
"model": {
"name": "<matcher-module-name>", # Must match the .py filename in matchers/
"model_name": "<variant>", # Passed as conf["model_name"]
"max_keypoints": 2048,
# ... other model-specific config
},
"preprocessing": {
"grayscale": False, # True for LoFTR-style; False for most modern matchers
"force_resize": True,
"resize_max": 1024,
"width": 640,
"height": 480,
"dfactor": 8, # Image dimensions must be divisible by this
},
},Key rules:
"name" in model must match the Python filename (e.g., "loma" → loma.py)loma-b, loma-l, loma-g)preprocessing.grayscale: Set True only for models that expect 1-channel input (e.g., LoFTR)preprocessing.dfactor: Ensure resized dimensions are divisible by this valueconfig/app.yaml (local dev) AND imcui/config/app.yaml (package default)BOTH files must be updated identically. Add an entry under matcher_zoo:
<DisplayName>:
matcher: <matcher-config-name> # Must match key in matchers.py
standalone: true # true = takes two images directly (no separate extractor needed)
skip_ci: false # DEFAULT: false. Only set to true for heavy matchers (see rule below)
info:
name: <DisplayName> # Display name in WebUI dropdown
source: "Venue Year" # e.g., "ECCV 2026", "ICCV 2023"
paper: <paper-url> # arXiv or published paper URL
github: <github-url> # Official GitHub repo
display: true # Whether to show in WebUI
efficiency: medium # low (heavy), medium, high (fast)Key rules:
standalone: true means the matcher takes two raw images directly (no separate feature extractor needed)standalone: false means the matcher requires a feature extractor (e.g., SuperPoint+LightGlue)<extractor>+<matcher> format (e.g., superpoint+lightglue)enable: false for very heavy models that most users won't use by defaultconfig/app.yaml and imcui/config/app.yaml must be kept in syncskip_ci ruleskip_ci defaults to false — you can omit the field entirely for most matchers. Only set skip_ci: true when the model is too heavy to run in CI (GitHub Actions CPU-only Ubuntu runner with 7GB RAM):
| Condition | skip_ci |
|---|---|
| Lightweight matcher (e.g., LightGlue, SuperGlue, XFeat, ALIKED-based) | false (or omit) |
| Heavy dense matcher prone to CI OOM/timeout (e.g., RoMa, DKM, GIM, Mast3R, LoMa-L/G/R, MINIMA large) | true |
Rule of thumb: if the model has variants like B/L/G/R, the "B" (base) variant usually passes CI, larger ones may not. When unsure, omit skip_ci (defaults to false) and let CI tell you — if it OOMs, set it to true in a follow-up commit.
Common issues and fixes:
On MPS/CPU, torch.autocast with float16/bfloat16 causes:
RuntimeError: Input type (c10::Half) and bias type (float) should be the sameRuntimeError: Input type (MPSFloatType) and weight type (torch.FloatTensor) should be the sameFix pattern (before importing third-party code):
# Patch module-level amp_dtype before import
import <module>.device as _device
if not torch.cuda.is_available():
_device.amp_dtype = torch.float32
# Also patch submodule local bindings
import <module>.submod as _submod
if not torch.cuda.is_available():
_submod.amp_dtype = torch.float32After model construction:
if not torch.cuda.is_available():
cfg = dataclasses.replace(cfg, mp=False)
for module in self.net.modules():
if hasattr(module, "amp"):
module.amp = FalseIf the model manages its own device (like LoMa's loma.device):
# Override .to() to keep model on its expected device
def to(self, device=None, **kwargs):
return super().to(<model_expected_device>, **kwargs)If a model uses @torch.inference_mode() but you need to pass its outputs to another module that requires grad tracking:
with torch.no_grad():
output = model.detect_and_describe(...)
output = output.clone() # Detach from inference mode graphThe README.md contains a "The tool currently supports..." table listing all algorithms with their support status.
| Algorithm | Supported | Conference/Journal | Year | GitHub Link |
|------------------|-----------|--------------------|------|-------------|
| LoMa | ✅ | ECCV | 2026 | [Link](https://github.com/davnords/LoMa) |
| RIPE | ✅ | ICCV | 2025 | [Link](https://github.com/fraunhoferhhi/RIPE) |Rows are sorted by year descending, then alphabetically by algorithm name within the same year.
| Scenario | Action |
|---|---|
Algorithm exists with ❌ | Change to ✅ |
| Algorithm not in table | Add new row, maintaining sort order |
Algorithm already has ✅ | Skip (no change needed) |
After integrating "DaD" published at ARXIV 2025:
| DaD | ✅ | ARXIV | 2025 | [Link](https://github.com/Parskatt/dad) |Insert between RIPE (ICCV 2025) and MINIMA (ARXIV 2024).
Before committing, pre-commit MUST pass. This is non-negotiable — commits that fail pre-commit will be rejected at the PR stage.
# Run ALL pre-commit hooks on all files
pre-commit run -a
# Or run specific hooks if you only changed certain files
pre-commit run ruff --all-files # Python linting
pre-commit run mypy --all-files # Type checking (if new Python code)Common issues and fixes:
| Hook | Common failure | Fix |
|---|---|---|
ruff | unused imports, line too long | Remove unused imports, wrap long lines |
ruff-format | inconsistent indentation | Let ruff format: ruff format <file> |
mypy | missing type annotations | Add type hints to new functions |
trailing-whitespace | blank lines with spaces | Strip trailing whitespace |
check-yaml | invalid YAML syntax | Fix indentation/quoting in app.yaml |
end-of-file-fixer | missing newline at EOF | Add trailing newline |
If pre-commit run -a fails, fix all errors before proceeding to commit. Do NOT skip hooks with --no-verify.
After integration and pre-commit pass, verify:
python -c "from imcui.hloc.matchers import <name>"python app.py → select the matcher → run matchingconfig/app.yaml and imcui/config/app.yaml are identical for the new matcherpre-commit run -a exits with zeroOnce pre-commit passes and all verification checks are green:
# Stage the changes
git add .gitmodules imcui/third_party/<RepoName>
git add imcui/hloc/matchers/<name>.py
git add imcui/hloc/configs/matchers.py
git add imcui/config/app.yaml
git add config/app.yaml
git add README.md
# Commit with a descriptive message following convention
git commit -m "feat: integrate <MatcherName>
Add <MatcherName> matcher from <venue> <year>.
- Add submodule: imcui/third_party/<RepoName>
- Add matcher implementation: imcui/hloc/matchers/<name>.py
- Add matcher config entries
- Update app.yaml matcher zoo (both package and user configs)
- Update README.md algorithm table
Co-Authored-By: Claude <noreply@anthropic.com>"
# Push and create PR
git push origin main
gh pr create --title "feat: integrate <MatcherName>" \
--body "Integrate <MatcherName> matcher from <paper-link>.
## Changes
- [x] Submodule added
- [x] Matcher implementation
- [x] Config entries in both app.yaml files
- [x] README.md updated
- [x] Pre-commit passes
## Tested on
- [ ] CPU
- [ ] CUDA
- [ ] MPS
🤖 Generated with [Claude Code](https://claude.com/claude-code)"Important notes:
feat: prefix for new matcher integrations (following conventional commits)Co-Authored-By: Claude <noreply@anthropic.com> in commit messages🤖 Generated with [Claude Code](https://claude.com/claude-code)skip_ci: true in a follow-up commitFor each integration, these files are typically modified:
| File | Action | Description |
|---|---|---|
.gitmodules | Modify | Add submodule entry |
imcui/third_party/<RepoName> | Add | Git submodule |
imcui/hloc/matchers/<name>.py | Create | Matcher implementation |
imcui/hloc/configs/matchers.py | Modify | Add matcher config entries |
config/app.yaml | Modify | Add WebUI display config |
imcui/config/app.yaml | Modify | Add WebUI display config (must match config/app.yaml) |
README.md | Modify | Update supported algorithms table (add row or flip ❌→✅) |
Before committing all changes, run pre-commit run -a — all hooks must pass.
| Pattern | File | Description |
|---|---|---|
| Dense standalone | imcui/hloc/matchers/roma.py | RoMa — raw images → matched keypoints |
| Dense standalone + separate detected/matched kpts | imcui/hloc/matchers/loma.py | LoMa — separates all detected from matched keypoints |
| Sparse matcher | imcui/hloc/matchers/lightglue.py | LightGlue — keypoints+descriptors → matches |
| Detector-only + external descriptor | imcui/hloc/extractors/raco.py | RaCo — detects keypoints, delegates descriptor to ALIKED |
Some models are keypoint detectors only — they output keypoints/scores but no descriptors. The RaCo integration demonstrates chaining RaCo detection with ALIKED description:
imcui/hloc/extractors/raco.py_forward, first run RaCo detection → keypoints, then run ALIKED descriptor on those keypointsconfigs/extractors.py with max_num_keypoints / nms_radius parametersconfigs/matchers.py with features: "raco-aliked" — a custom LightGlue+ checkpoint trained for RaCo+ALIKED featuresapp.yaml, the entry uses feature: raco (the extractor) + matcher: raco-lightglue (the LightGlue variant)When a submodule needs a compatibility fix:
| Repo owner | Action |
|---|---|
Vincentqyw/* | Push fix directly to the Vincentqyw fork |
agipro/* | Push fix directly to the agipro fork |
| Anyone else | Fork to agipro, apply fix, switch submodule URL |
Always verify push succeeded with git log --oneline -1 in the submodule directory.
Kornia 0.8.0 removed the kornia.utils.grid submodule. create_meshgrid moved to kornia.utils (0.8.0-0.8.2), then to kornia.geometry (0.8.3+). When fixing submodule imports, use this future-proof pattern:
try:
from kornia.geometry import create_meshgrid # kornia >= 0.8.3
except ImportError:
from kornia.utils import create_meshgrid # kornia < 0.8.3© Vincentqyw, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/integrate-matcher of Vincentqyw/image-matching-webui.
Open the folder on GitHubat commit aa4a6d0
Image Matcher Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Image Matcher Integration this skillVincentqyw/image-matching-webui | 1.3k | — | ~4.8k | Automated safety check: Pass | Apache-2.0 | |
| Matlab Integrate Pytorch Visionmatlab/matlab-agentic-toolkit | 1.1k | — | ~3.7k | Automated safety check: Pass | Custom licence | |
| Fix Art IssuesOpenPipe/ART | 11k | — | ~840 | Automated safety check: Notes | Apache-2.0 | |
| Performance Optimizationalbumentations-team/AlbumentationsX | 567 | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| Issue Triageintel/torch-xpu-ops | 115 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Fix Issuepytorch/pytorch | 104k | — | ~2.3k | Automated safety check: Pass | Custom licence |
matlab/matlab-agentic-toolkit
Creates MATLAB interfaces to Python image processing and computer vision models from GitHub repositories or pip-installable packages using MPyReq.
OpenPipe/ART
Fix a GitHub issue on OpenPipe/ART and open a PR. An agent skill from OpenPipe/ART.
albumentations-team/AlbumentationsX
Systematic performance audit for AlbumentationsX runtime code.
intel/torch-xpu-ops
Shallow, text-only triage of a GitHub issue on pytorch or torch-xpu-ops.
pytorch/pytorch
Fix bugs reported in PyTorch GitHub issues by reproducing, root-causing, and implementing a fix in the local working tree.
wanshuiyin/ARIS-in-AI-Offer
Generate a fact-checked academic personal homepage from a CV, optionally augmented by an existing manual homepage and an assets directory.
Vincentqyw/image-matching-webui
Releases a new imcui version on GitHub, then deploys it to a test and a production Hugging Face Space from a dedicated huggingface branch.
Categories
Adds a new local feature matching model from a GitHub repository to the image-matching-webui project as a working WebUI option. Given the URL of a feature matching repository, the skill follows the project's established pattern for integrating a matcher. It starts by cloning the repository to a temporary folder for analysis: whether the matcher is dense or standalone, taking raw images, or sparse, taking keypoints and descriptors; how the model class is initialized and run; what it outputs; where weights are downloaded; its dependencies; and its variants.
Image Matcher Integration fits situations like: adding a new feature matching model to image-matching-webui; classifying a matcher as dense or sparse before wiring it in; fixing a dependency compatibility problem without editing third-party submodules.
Run `npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a claude-code`. Or copy the skill folder (.claude/skills/integrate-matcher in Vincentqyw/image-matching-webui) into .claude/skills/integrate-matcher in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a codex`. Or copy the skill folder (.claude/skills/integrate-matcher in Vincentqyw/image-matching-webui) into .agents/skills/integrate-matcher in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Vincentqyw/image-matching-webui --skill integrate-matcher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/integrate-matcher, .gemini/skills/integrate-matcher, .github/skills/integrate-matcher and .opencode/skills/integrate-matcher in your project.
Going by SKILL.md and its folder, Image Matcher Integration needs the command-line tools its instructions call (git, python, gh and ruff). Our summary lists: A checkout of the image-matching-webui project; Git with submodule support.
SKILL.md names 2 domains. In commands or code: github.com and claude.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Image Matcher Integration is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Image Matcher Integration: Matlab Integrate Pytorch Vision (matlab/matlab-agentic-toolkit, 1.1k stars), Fix Art Issues (OpenPipe/ART, 11k stars), Performance Optimization (albumentations-team/AlbumentationsX, 567 stars) and Issue Triage (intel/torch-xpu-ops, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Vincentqyw (a GitHub user) maintains it in Vincentqyw/image-matching-webui, which has 1,308 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 5, 2026.
Source: Vincentqyw/image-matching-webui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.