Model or dataset
enoche/MMRec avatar
enoche/MMRec

MMRec gives multimodal recommenders one shared training harness

A Toolbox for MultiModal Recommendation. Integrating 10+ Models...

701 stars108 forksPythonGPL-3.0

At a glance

What is it?
MMRec is a research toolbox for multimodal recommendation that puts more than twenty published models, from VBPR in 2016 to MSCA in 2026, behind one set of training, evaluation and configuration code so they can be compared on the same data. It is GPL-3.0 licensed, and its pinned requirements are old enough that adopting it means dealing with that.
Who is it for?
MMRec suits a researcher who wants to reproduce a published multimodal recommender or compare several of them on the same dataset, since the models share a common interface and the evaluation code is the same across all of them, which is the thing that is tedious to rebuild otherwise.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 103 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A toolbox for comparing models, not a recommender library

MMRec is described as a modern multimodal recommendation toolbox that simplifies your research, and it comes with two companion links: a comprehensive survey on MMRec on arXiv, and an awesome list of multimodal recommendation resources.

The framing matters. This is a research harness, not a library you drop into a service. Its purpose is to make published multimodal recommendation models comparable by giving them all the same training loop, the same configuration format, the same evaluation protocol and the same dataset loaders. That is unglamorous work, and it is the work that makes a paper's reported numbers mean something, because a number you reproduce on your own preprocessing is not the paper's number.

The paper associated with the toolbox is the MMRec one from the 5th ACM International Conference on Multimedia in Asia Workshops, and the survey is a separate arXiv article on the taxonomy, evaluation and future directions of multimodal recommender systems. The project also asks that you cite the BM3 paper, and the repository ships the BibTeX entries in the README so the citations can be copy-pasted.

The licence is GPL-3.0, the primary language is Python, and there are no GitHub releases. The last push was on 2026-07-14 and the repository is not archived, though most of the activity in the model table is concentrated in the entries dated to specific papers.

The model table, and what it shows about the field

The supported models table is the centre of the repository, and reading it as a timeline tells you how the field moved.

The earliest entry is VBPR, Visual Bayesian Personalized Ranking from Implicit Feedback, from AAAI 2016, which brought visual features into a Bayesian personalisation ranking model. The general models section, which are not multimodal, holds SelfCF, a self-supervised collaborative filtering framework from ACM TORS 2023, and LayerGCN, layer-refined graph convolutional networks from ICDE 2023.

The multimodal section runs from 2016 to 2026 and the trajectory is clear. MMGCN in 2019 for micro-video recommendation, ItemKNNCBF in 2019, which the README points at the paper Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation Approaches, GRCN in 2020, then a cluster of 2021 work: MVGAE, DualGNN, and LATTICE for mining latent structures. SLMRec on self-supervised learning came in 2022, BM3 and FREEDOM and MGCN in 2023, DRAGON in 2023 as well.

The 2024 and 2025 entries are where the field's current preoccupations show up. MG is Mirror Gradient, about reaching flat local minima. LGMRec does local and global graph learning. DA-MRS denoises and aligns multimodal content with user feedback, from KDD 2024. SMORE is spectrum-based modality representation fusion, from WSDM 2025. PGL is principal graph learning from AAAI 2025, and the last two entries are MMGCF from UMAP 2026 and MSCA, multi-view semantic contrastive alignment, from WWW 2026.

So the table spans a decade and shows the shift from hand-designed fusion of image and text features toward graph structures, alignment objectives and self-supervision. Each row names the paper, the venue and the file, so a reader can find both the method and the code for each.

The source code lives under src/models, and one entry is worth noting: the MG model is implemented in common/trainer.py rather than a dedicated file, which suggests it needed a different training loop.

The repository layout and what each directory is for

The top level of the repository is short and maps directly onto a research workflow: data/, preprocessing/, evaluation/, src/, reports/, images/, requirements.txt and a LICENSE.

data/ holds the datasets, which is the part of the layout that tells you the most about how the project is used. Multimodal recommendation research depends on preprocessed feature files for images and text, and those files are large, so a repository that ships the data directory is a repository that expects you to point the config at a dataset that is already there.

preprocessing/ is the step that turns raw items into the feature matrices the models consume. That step is where most of the unreproducible variation in this literature lives: the same paper, the same model, and a different feature extraction, gives a different number. A shared preprocessing directory is the project's answer to that.

evaluation/ holds the metrics, and this is the other half of the comparability claim. If every model in the table is scored by the same code on the same splits, then a comparison between two rows of the table means something.

src/ holds the implementation, with the models under src/models. reports/ is for result outputs, which is how you would run several configurations and compare them, and images/ holds the figures.

That is the whole structure, and there is no serving layer, no API and no deployment configuration, which is the clearest signal that this is a research artifact rather than a production library.

The pinned dependency set is the main adoption hurdle

The requirements.txt is short and every version is pinned exactly, which is good practice for reproducibility and a real obstacle for a modern environment.

code
numpy==1.21.5
pandas==1.3.5
python==3.7.11
scipy==1.7.3
torch==1.11.0
pyyaml==6.0

The python entry is unusual, since a requirements file normally does not pin the interpreter, but it documents the reference environment: Python 3.7.11. numpy 1.21.5 and pandas 1.3.5 are from the same period, and scipy 1.7.3 matches. torch 1.11.0 is the PyTorch release that supported Python 3.7.

That is a coherent set, and it is a coherent set from before Python 3.8, before numpy 2.0, and before the current PyTorch. For a project whose purpose is running models from papers published as recently as 2026, the environment is the mismatch to think about. Several of the newer models in the table were published against much later versions of torch, and the code for them was presumably developed against a newer stack and backported into this one, or the environment is simply not the one they were developed in.

None of the README explains the setup beyond the requirements file, so there is no documented answer to how to build a working environment for a 2026 model on a 2021 dependency set. Anyone planning to use this should expect to spend time on that, probably in a container, and should treat the pinned requirements as the reference point rather than a starting suggestion.

The absence of instructions for preprocessing is the other gap. Since the models expect specific feature files, and the preprocessing directory exists, the practical question is whether the preprocessed data in data/ covers the dataset you want to run on.

Where MMRec fits, and where it stops

The realistic comparisons are with a from-scratch implementation of one model, and with a general purpose recommendation library, and the differences are about scope.

Against implementing a single model yourself, the value is the harness. If you want to run BM3, you need the data loader, the config, the training loop, the evaluation and the model. MMRec gives you all of that plus twenty other models on the same footing, so when your paper needs a baseline, the baseline is a config change rather than a second implementation. The cost is that you inherit the project's training loop, and you may need to modify it to test a hypothesis the original code did not anticipate.

Against a general purpose recommender library such as a mainstream PyTorch based library, the difference is that this is domain specific. The models here know about item side features, about how an image embedding and a text embedding are fused, about the interaction graph between users and items. A general library gives you the training loop and the data pipeline and leaves the multimodal part to you, which is the hard part in this literature.

The limits are clear. This is a research toolbox with a GPL-3.0 licence, and the GPL matters if you were planning to use any of the code in a proprietary product, because a copyleft licence on a model implementation that ends up inside your serving stack is a different conversation from a permissive one. The dependency set is old. There is no release history, no version tags and no documentation beyond the README's table, so a reader has to read the source to learn how to configure a run. And the supported model list, while long, is a snapshot of the literature rather than a live registry.

There is also no test suite or CI in the top level entries, and the README does not mention one, which is worth knowing before you rely on the code as anything other than a research base.

What the project does offer that is hard to reproduce is comparability. Twenty models, one evaluation, one preprocessing pipeline, one config format. If your goal is a fair comparison between two methods, that is the thing to buy.

Editorial conclusion

MMRec suits a researcher who wants to reproduce a published multimodal recommender or compare several of them on the same dataset, since the models share a common interface and the evaluation code is the same across all of them, which is the thing that is tedious to rebuild otherwise. It is the wrong tool if you want to ship a recommender, because this is research scaffolding with pinned 2021 era dependencies and no service or serving layer, and it is the wrong tool if you need a current model, because the newest entry in the list is from 2026 but the dependency set is not. Before adopting it, read the requirements.txt and decide whether you can build an environment for numpy 1.21.5 and torch 1.11.0, and check the data/ directory for the preprocessed datasets the models expect.

Frequently asked questions

What models does MMRec support?

The table covers general models such as SelfCF and LayerGCN, and multimodal models from VBPR in 2016 through MMGCN, ItemKNNCBF, GRCN, MVGAE, DualGNN, LATTICE, SLMRec, BM3, FREEDOM, MGCN, DRAGON, MG, LGMRec, DA-MRS, SMORE, PGL, MMGCF and MSCA. Each row names the paper, the venue and the file under src/models.

What are MMRec's dependencies?

The requirements.txt pins numpy 1.21.5, pandas 1.3.5, scipy 1.7.3, torch 1.11.0 and pyyaml 6.0, and records python 3.7.11 as the reference interpreter. Those pins are the main practical obstacle to running the project in a current environment.

How is the MMRec repository organised?

The top level holds data/, preprocessing/, evaluation/, src/, reports/, images/ and requirements.txt. The models are implemented under src/models, and the shared preprocessing and evaluation code is what makes the models comparable to each other.

What licence does MMRec use?

GPL-3.0. The repository has a LICENSE file at the root, and the model implementations and the harness are covered by it, which matters if you intended to reuse the code in a closed-source product.

Does MMRec include anything for serving a recommender?

No. The repository has no API, serving layer or deployment configuration. It is a research toolbox for training and comparing models, with evaluation/ for metrics and reports/ for result outputs.

Official sources

  1. enoche/MMRec on GitHub
  2. Issues
  3. License: GPL-3.0
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/enoche-mmrec.svg)](https://hysenlabs.com/projects/enoche-mmrec)

Was this useful?