matlab/matlab-integrate-pytorch-vision
>- Creates MATLAB interfaces to Python image processing and computer vision models from GitHub repositories or pip-installable packages using MPyReq. Use when asked to interface MATLAB with a Python CV/image model (segmentation, depth estimation, object detection, image generation, super-resolution, etc.), given a GitHub repo URL for an image/vision model, or asked to create an MPyReq demo for a deep-learning vision pipeline. Do NOT use for general-purpose Python-MATLAB interfacing, non-vision models (NLP, tabular, audio), model deployment/serving, or MATLAB-only image processing workflows.
npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-integrate-pytorch-vision
Build a MATLAB interface to a Python/PyTorch model repository using the MPyReq framework.
Before generating any demo script, verify that MPyReq is available. Run which MPyReq via the MATLAB MCP server (if available) or ask the user to confirm.
https://mathworks.com/matlabcentral/fileexchange/182230-matlab-based-python-requirements-manager
.mltbx file in MATLAB (double-click), which installs it as a MATLAB Add-On automatically, orMPyReq.m to the MATLAB path: addpath("/path/to/mpyreq");
savepath; % persist across sessions
which MPyReq in MATLAB — it should return the path to MPyReq.m.Do not proceed with demo generation until MPyReq is confirmed on the path.
Ask the user for:
Fetch and analyze the GitHub repository to determine:
setup.py, setup.cfg, pyproject.toml, or README for the required Python version. Default to "3.12" if not specified. Use "3.11" if the project needs older compatibility.torch.hub.load(): only need torch and torchvision as pip packages (model downloads automatically)MPyReq.pipPackage()MPyReq.gitrepo() + MPyReq.requirementTextFile() if a requirements.txt existspip install git+<url>: use MPyReq.pipPackage("git+<url>", Name="<ProjectName>")torch, torchvision, etc.)torch.hub.load() — weights download automatically, no MPyReq.weights() neededMPyReq.weights() with the checkpoint URL.from_pretrained() — weights download automatically via the libraryCreate a MATLAB .m file that sets up the Python environment. Follow these patterns from the demo files:
Every generated script MUST begin with MPyReq.setInstallFolder(). This tells MPyReq where to download Python, packages, and model weights. Without this, MPyReq will show a GUI dialog which blocks non-interactive execution. Also include MPyReq.autoAcceptDownloadPrompts(true) to avoid interactive confirmation prompts.
% Set installation folder (SSD recommended, ~15+ GB free space)
% Change this path to a suitable location on your machine
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("<package_name>");
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("git+https://github.com/<org>/<repo>.git", Name="<RepoName>");
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.11");
MPyReq.gitrepo("https://github.com/<org>/<repo>.git");
reqTxt = MPyReq.pathTo("<repo>") + filesep + "requirements.txt";
MPyReq.requirementTextFile(reqTxt, Name="<repo>Packages");
When the model uses torch.hub.load(), no git clone or weights download is needed — just install torch/torchvision:
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("3.12");
MPyReq.pipPackage("torch");
MPyReq.pipPackage("torchvision");
% Model loads automatically via torch.hub:
model = py.torch.hub.load('org/repo', 'model_name');
Only needed when weights are NOT handled by torch.hub.load() or .from_pretrained():
MPyReq.weights("<weights_url>", DownloadTo=MPyReq.pathTo("<RepoName>") + filesep + "checkpoints");
Translate the Python inference example to MATLAB. Refer to these resource files for conversion rules and patterns:
Create a single demo<ModelName>.m file with clear sections:
%% Setup Python Environment
% Start with clean state (only if switching projects)
% terminate(pyenv); clear MPyReq
% Set installation folder (SSD recommended, ~15+ GB free space)
% Change this path to a suitable location on your machine
MPyReq.setInstallFolder(fullfile(tempdir, "MPyReq"));
MPyReq.autoAcceptDownloadPrompts(true);
MPyReq.python("<version>");
% ... package installation calls ...
%% Reference Python Code
%{
<paste the original Python inference code as a comment block>
%}
%% Load Model
% ... model loading code ...
%% Run Inference
% ... load input, run model, extract results ...
%% Visualize Results
% ... display/plot results ...
Check if a MATLAB MCP server tool is available in the current session (look for MCP tools like matlabRunCode, matlab_run, or similar).
MPyReq.python() and package installation calls through the MATLAB MCP server to verify the Python environment installs correctly.Track each fix-and-retry cycle as one attempt. Stop after a maximum of 5 attempts (combined across setup and inference). If the code is not fully working after 5 attempts:
demo<ModelName>.m — the version that got furthest (e.g., setup succeeded but inference failed, or partial inference ran).## What Works
- <list sections/steps that executed successfully>
## What Needs Attention
- <describe the remaining failure: error message, which line/section fails>
- <root cause hypothesis if known>
## Recommended Next Steps
1. <most likely fix — e.g., "Try Python 3.11 instead of 3.12 due to package compatibility">
2. <alternative approach — e.g., "Install system dependency X before running">
3. <manual verification — e.g., "Run `pip install <pkg>` in the MPyReq venv directly to check build logs">
## Environment Details
- Python version attempted: <version>
- Platform: <OS>
- Errors encountered: <brief summary of distinct errors across attempts>
%% Setup Python Environment — VERIFIED
% ... (code that ran successfully) ...
%% Run Inference — NEEDS MANUAL VERIFICATION
% The following section encountered errors during automated testing.
% See recommended next steps above.
% ... (best-effort code) ...
demo<ModelName>.m file to the user.Ctrl+Enter)UV_EXTRA_INDEX_URL).__enter__, __exit__, __init__, etc.) in MATLAB — double underscores are invalid MATLAB syntax. For context managers like torch.no_grad() or torch.inference_mode(), use the equivalent functional API (e.g., py.torch.set_grad_enabled(false/true)) instead of the with statement pattern.permute to reorder, then squeeze to remove singleton batch dims.[x1, y1, x2, y2] (corner pairs). MATLAB expects M x 4 as [startX, startY, width, height]. Convert with: boxes(:,3) - boxes(:,1) for width, boxes(:,4) - boxes(:,2) for height.imread for loading images — never use Python image libraries (PIL, OpenCV, etc.). Keep image I/O on the MATLAB side and convert to tensors for Python.%{ %} comment block for referencepy.importlib.import_module() when direct py.module.submodule doesn't work (deep nesting)UV_EXTRA_INDEX_URL may need to be setcd to a specific directory (e.g., for relative config paths), use cd(MPyReq.pathTo("<Name>"))For additional gotchas (class ID mapping, opencv-python issues, insertObjectAnnotation tips), see references/common_gotchas.md.
The following reference files are bundled with this skill. Read them from the skill's references/ directory:
The MPyReq class is in the project's mpyreq/MPyReq.m.
If this skill's guidance was wrong, incomplete, or didn't work, emit a plain-text
feedback marker in your response, then continue with the task.
Format: IPCV-SKILL-FEEDBACK [matlab-integrate-pytorch-vision] [category]: what failed; what you did instead
Categories: wrong-command (incorrect/outdated), missing-guidance (omitted step),
discovery-failure (suggested approach didn't work), platform-issue (environment-specific)
----
Copyright 2026 The MathWorks, Inc.
----
Take matlab/matlab-integrate-pytorch-vision from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.