diff --git a/meidnet/studio/ask_prism.js b/meidnet/studio/ask_prism.js index d18e79050fad397df388d365a80e651666310f5f..774d2cd9a507331f4f760c15c193fd587016fb24 100644 --- a/meidnet/studio/ask_prism.js +++ b/meidnet/studio/ask_prism.js @@ -34,7 +34,7 @@ text: "Each candidate lists every rule with its measured value, and the predicted properties next to your targets. " + "Predictions are the model's estimates; targets outside the range of the training data are extrapolations.", links: [["Interpreting a candidate", "/docs/understand/interpretability.html"], ["Reading the reports", "/docs/use/reports.html"], - ["How MEIDNet works", "/docs/understand/how-it-works.html"], ["Screen stability with MACE", "/docs/recipes/screen.html"]]}, + ["How MEIDNet works", "/docs/understand/how-it-works.html"], ["Screen with MACE", "/docs/recipes/screen.html"]]}, {id: "benchmark", title: "I cannot reproduce a benchmark", text: "Each benchmark page states its protocol and data split. When a number differs, include the command you ran " + "and the value you obtained in your question.", @@ -42,13 +42,14 @@ ["Perov-5 example", "/docs/examples/perov5.html"], ["Contribute a result", "/docs/community/contribute.html"]]}, {id: "score", title: "Can I benchmark my own model's structures?", text: "Yes: `meidnet score generated/ --reference data/perov5` reports validity, uniqueness, novelty, diversity and " + - "distribution for a folder of CIF files from any model, with stability through MACE and the conditional " + + "distribution for a folder of CIF files from any model, with a MACE formation-energy filter and the conditional " + "metrics when you add targets.csv. The metric families are named as in LeMat-GenBench.", links: [["Benchmark compatibility", "/docs/benchmarks/compatibility.html"], ["MEIDNet Benchmarks", "/docs/benchmarks/index.html"], ["Contribute a result", "/docs/community/contribute.html"]]}, {id: "matter", title: "Where do I design with my own data?", - text: "MEIDNet Matter is the companion application for that: bring a dataset, set a design goal, read whether the " + - "data and model support it, search for candidates with evidence next to each one, and export them. Prism " + + text: "MEIDNet Matter is the companion application for that: set a design goal, read whether the data and model " + + "support it, search for candidates with evidence next to each one, and export them; your own data runs on " + + "your computer with its package. Prism " + "stays the place to learn the method, benchmark models and develop with the package.", links: [["Open MEIDNet Matter", "https://babu09-meidnet-matter.hf.space/"], ["The ecosystem", "/docs/ecosystem.html"], ["Bring your own dataset (package)", "/docs/use/your-data.html"]]}, diff --git a/meidnet/studio/landing.html b/meidnet/studio/landing.html index 422b936ed921c59387045369ef791823ff64c6f1..7deceba4e718f60ea3c74838adac798252ba7d7f 100644 --- a/meidnet/studio/landing.html +++ b/meidnet/studio/landing.html @@ -151,7 +151,7 @@ footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:
Learn the method, benchmark any model against it, develop with the package and the Studio, and design with your own data in MEIDNet Matter.
Modalities and the five challenges of multimodal learning, contrastive learning with a playground, the Architecture Atlas with an advisor, how MEIDNet works and where it stops.
+Modalities and the five challenges of multimodal learning, contrastive learning with a playground, the Architecture Atlas with an advisor, how MEIDNet works and where it stops.
Fixed protocols per dataset, metric families named as in LeMat-GenBench plus a conditional extension, datasets and databases, and meidnet score for any model's generated structures. Results are contributed through GitHub and re-run before they are marked as computed here.
Install meidnet, train on a table of structures and properties, set targets and rules in one YAML file, run the search and inspect every candidate in 3D, from the command line, Python or the Studio in the browser.
MEIDNet Matter is the companion application for researchers: bring a dataset, set a design goal, read whether the data and model support it, search for candidates with evidence next to each one, and export them with a validation ladder.
+MEIDNet Matter is the companion application for researchers: set a design goal, read whether the data and model support it, search for candidates with evidence next to each one, and export them with a validation ladder; your own data runs on your computer with its package.
Are the predicted properties reliable? They are the model's estimates. Targets outside the range of the training data are extrapolations; confirm candidates with calculations or experiments: Interpreting a candidate and -Screen stability with MACE.
+Screen with MACE. diff --git a/site/community/index.html b/site/community/index.html index c4a00d5538c18930d56765baec9137d9dd7a02c3..1b061d5e8f43d5255bdc1f9fb6cc838b42d1430b 100644 --- a/site/community/index.html +++ b/site/community/index.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/develop.html b/site/develop.html index 4d353eb583a1373e7601c7c0e968013071c1e893..c82d195fe0f2472d9d91e38859c398e7aa299d45 100644 --- a/site/develop.html +++ b/site/develop.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap @@ -2209,7 +2209,7 @@ meidnet studioData. Materials Project, NOMAD, the datasets on the datasets page and the 31 databases by application, and your own tables of structures and properties. Matter reads a table with CIF files; imports from Materials Project and NOMAD are planned.
+Data. Materials Project, NOMAD, the datasets on the datasets page and the 31 databases by application, and your own tables of structures and properties. Matter's package reads your table with CIF files on your computer; a browser upload and imports from Materials Project and NOMAD are planned.
Methods. MEIDNet (this package) and any other model: the benchmarks score the predictions or candidate structures of any method with the same code, and meidnet score reports the generation quality of any folder of CIF files (benchmark compatibility). Matter runs MEIDNet as its first backend behind one backend interface.
Benchmarks. The MEIDNet protocols per dataset, and metric families named as in LeMat-GenBench so that results can be read side by side, with MEIDNet's conditional extension for property-conditioned generation.
Synthesis knowledge. Not here: LeMat-Synth and the Materials Project Synthesis Explorer hold the recipes; Matter will link a candidate to them rather than extract its own.
diff --git a/site/examples/double-perovskite.html b/site/examples/double-perovskite.html index 01aa5d546d1385406587bfae8c48ba2dd84960d0..99bf2537c64c6a3b42a32fb9410b6bafea2c9688 100644 --- a/site/examples/double-perovskite.html +++ b/site/examples/double-perovskite.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/examples/perov5.html b/site/examples/perov5.html index 16824c0d25ecc13362fe3dbfd7cdb382386a8989..5a0253d37f16a36d8f82f14a60a5311f128bde75 100644 --- a/site/examples/perov5.html +++ b/site/examples/perov5.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/explore/capabilities.html b/site/explore/capabilities.html index 5633b8025300c6c55e0db277c18f6e9c6a6bf3e0..7fcf218842da39683df31c98db4c2fb85a70e60e 100644 --- a/site/explore/capabilities.html +++ b/site/explore/capabilities.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/explore/databases.html b/site/explore/databases.html index 21c8ed3f28c3bfcd9d7d3edff073686fc935e38b..9b5405a0e27c84428fad2ea3491e09b57693c36c 100644 --- a/site/explore/databases.html +++ b/site/explore/databases.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/explore/datasets.html b/site/explore/datasets.html index 95a69a94ffdfe4e3bad7e1a95df2a34432365239..a6ad127073ace20fd2c738741ccd0420762e896f 100644 --- a/site/explore/datasets.html +++ b/site/explore/datasets.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/index.html b/site/index.html index 98e33313505022405b766e102c80a9b0d5da965e..fb361a80694fbe4e8200c57bef8a3cb3f2111050 100644 --- a/site/index.html +++ b/site/index.html @@ -682,7 +682,7 @@ - Scope and roadmap + Scope, limitations and roadmap @@ -2280,9 +2280,10 @@ with evidence, and a validation ladder.What MEIDNet generates, and what it does not
-Generation works for prototype families: a fixed arrangement of sites whose occupants and cell size are -chosen (ABX₃ perovskites, A₂BB′X₆ double perovskites, and anything you describe the same way). MEIDNet does -not invent new atomic arrangements. Details and roadmap.
+In this package (meidnet 2.3.1), generation works for prototype families: a fixed arrangement of sites whose +occupants and cell size are chosen (cubic ABX₃ perovskites, A₂BB′X₆ double perovskites, and anything you describe +the same way); it does not invent new atomic arrangements. The development engine that MEIDNet Matter runs adds a +family-free generator. Scope, limitations and roadmap.
Predicted properties are the model's estimates, and the reports say when a prediction is an extrapolation.
Confirm candidates with DFT or experiment; meidnet screen is a first filter.
The full objective and every step are in How MEIDNet works.
Two limits that matter
-MEIDNet does not invent new atomic arrangements: candidates are compositions on a known prototype. Its -predicted properties are estimates to confirm with DFT or experiment (scope and roadmap).
+The released package (2.3.1) does not invent new atomic arrangements: candidates are compositions on a known +prototype (the engine MEIDNet Matter runs adds a family-free generator). Its predicted properties are estimates to +confirm with DFT or experiment (scope, limitations and roadmap).
Further reading: the MEIDNet paper (Babu et al. 2026) · Babu, Gouvêa and Rignanese 2026 (generative models, multimodal learning and closed-loop workflows in inverse materials design) · Moro, Loh et al. 2025 (multimodal diff --git a/site/learn/recipes.html b/site/learn/recipes.html index b184db603ff001ae70eff0bf44238dff31336f9b..a19f97f6b643e49e6dd50d7bc21be80e5c45a99e 100644 --- a/site/learn/recipes.html +++ b/site/learn/recipes.html @@ -733,7 +733,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/recipes/add-constraint.html b/site/recipes/add-constraint.html index 5d6d0bd4707765ccde90cfe89b0806da126b4019..b845c229bcfe58bed5c4046ca11417ce5d525e1e 100644 --- a/site/recipes/add-constraint.html +++ b/site/recipes/add-constraint.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/recipes/add-property.html b/site/recipes/add-property.html index 977df890988d3bbcc4b2b2e72b2a9d0734f178c1..0f37f4057b1eff03211349d040056b938d3180b4 100644 --- a/site/recipes/add-property.html +++ b/site/recipes/add-property.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/recipes/change-family.html b/site/recipes/change-family.html index cd0271622b34c066b482d35332bdaa547b95a89c..abf23ab8fc13ae43609ef6749b1ee715f8018d37 100644 --- a/site/recipes/change-family.html +++ b/site/recipes/change-family.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap @@ -2257,8 +2257,8 @@ meidnet space meidnet.yamlErrors name the problem: unknown element symbols, a prototype group without a definition, an override that matches no rule, a group left empty after your filters.
The double perovskite page walks through a 10-site, non-cubic-primitive -family written this way.
+The double perovskite page walks through a 10-site family in the rhombohedral primitive +cell of the cubic Fm-3m lattice, written this way.
diff --git a/site/recipes/change-targets.html b/site/recipes/change-targets.html index 42c5db9c5721824dd6392f298b29627e8fd9a00e..cfeae6ae2a536077433a5f666d0eb396210501c5 100644 --- a/site/recipes/change-targets.html +++ b/site/recipes/change-targets.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/recipes/elements.html b/site/recipes/elements.html index f373eee5eaf15ae2c00819c6b22ecb164cf8ed0f..e2ee845c8bbb551c086e6b9b2711a4f0504f19d3 100644 --- a/site/recipes/elements.html +++ b/site/recipes/elements.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/recipes/screen.html b/site/recipes/screen.html index 8ab628d81a553c11f913a48634c51e7393ddc7e3..6e6921b06c4fbf4aaab87c5f6d04bdfb73d04807 100644 --- a/site/recipes/screen.html +++ b/site/recipes/screen.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/reference/api.html b/site/reference/api.html index 5182dd6615ae5a95af3b383225b65591ea46f368..d760912825b9019a9a1b01c82a50f40a058a3b5f 100644 --- a/site/reference/api.html +++ b/site/reference/api.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/reference/cli.html b/site/reference/cli.html index 3dc8d89127212bef8e702c2abb96791bd45dd05a..ad3fdb95e2e0b4719eaee20f32b9694e891965b2 100644 --- a/site/reference/cli.html +++ b/site/reference/cli.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/reference/config.html b/site/reference/config.html index f32ac2bf4d36deb67c58dec30fd0e3e8332212fa..a614b2680f597582ad7db9903c08dc8f707c0e97 100644 --- a/site/reference/config.html +++ b/site/reference/config.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap diff --git a/site/reference/families.html b/site/reference/families.html index 955529861033ff0cdd98c7eb3b6b3a63036eb0be..cf01d12011f774d1e32b3fc9a810c2b8493141d1 100644 --- a/site/reference/families.html +++ b/site/reference/families.html @@ -593,7 +593,7 @@ - Scope and roadmap + Scope, limitations and roadmap @@ -2087,7 +2087,7 @@ explanations; errors name the offending key or element.prototype.latticecubic, fcc_primitive, bcc_primitive, or explicit a, b, c, alpha, beta, gammacubic, fcc_primitive, bcc_primitive, or explicit a, b, c, alpha, beta, gamma (a general cell is scaled from one edge with its shape fixed; no non-cubic family ships or has been tested)prototype.reference_aLearn, build and benchmark multimodal AI for materials discovery. MEIDNet, the reference implementation, learns one latent space shared by crystal structures and their properties, and searches it for materials with the properties you want, using your own data, rules and material families.
\u25b6 Open the Studio 5-minute quickstart Learn multimodality \u2190 MEIDNet Prism home
"},{"location":"index.html#the-workflow","title":"The workflow","text":"Seven blocks, from a table of known materials to new candidates. Each block is a section of meidnet.yaml, a node in MEIDNet Studio (where a change in one block updates every block after it) and a section of the report that each step writes. Click a block to read about it.
The seven blocks at work on the published perovskite model. Click a block to jump to it.
\u25b6 Play \u25c0 \u25b6 0:00 Open the Studio \u2192"},{"location":"index.html#where-to-start","title":"Where to start","text":"Learn multimodality
What a modality is, the five challenges of multimodal learning, contrastive learning with a playground, and an interactive map of materials modalities.
Learn
Choose an architecture
Early fusion, late fusion, shared latent spaces, cross-attention and contrastive learning, and an advisor that recommends one for your data and goal.
Architecture Atlas
Try MEIDNet
The live Studio runs in the browser without installation; meidnet demo runs on a laptop CPU.
5-minute quickstart
Use MEIDNet on my data
A table with an id, property columns and CIFs. Four commands lead from a data check to candidates with reports.
Bring your own dataset
Change what it does
Targets, elements, rules and family are set in one YAML file, or with the controls of MEIDNet Studio, which exports the same file.
Recipes
Understand it
How the two modalities are aligned, how the search works, what the reports mean, and where the limits are.
How MEIDNet works
Benchmark any model
Leaderboards under fixed protocols, and meidnet score for a folder of generated structures from any model: the LeMat-GenBench metric families plus the conditional extension.
Benchmark compatibility
Design with my data in Matter
MEIDNet Matter is the companion application: a dataset, a design goal, a readiness report, candidates with evidence, and a validation ladder.
The ecosystem
What MEIDNet generates, and what it does not
Generation works for prototype families: a fixed arrangement of sites whose occupants and cell size are chosen (ABX\u2083 perovskites, A\u2082BB\u2032X\u2086 double perovskites, and anything you describe the same way). MEIDNet does not invent new atomic arrangements. Details and roadmap.
Predicted properties are the model's estimates, and the reports say when a prediction is an extrapolation. Confirm candidates with DFT or experiment; meidnet screen is a first filter.
A. Babu, R. Almeida Gouv\u00eaa, P. Vandergheynst, G.-M. Rignanese, MEIDNet: Multimodal generative AI framework for inverse materials design, npj Computational Materials (2026). Citation and benchmarks \u00b7 code as published (v1.0).
Further reading: A. Babu, R. Almeida Gouv\u00eaa, G.-M. Rignanese, Toward automated discovery with generative models multimodal learning and closed loop workflows in inverse materials design, Cell Reports Physical Science 7, 103561 (2026), doi:10.1016/j.xcrp.2026.103561 \u00b7 A. Babu, N. M. A. Krishnan, Multimodal and cross-modal learning techniques, APL Machine Learning 4, 030901 (2026), doi:10.1063/5.0346744.
"},{"location":"develop.html","title":"Develop with MEIDNet","text":"meidnet is the reference implementation of the method: one shared latent space for crystal structures and their properties, a prototype-family design space checked by chemistry rules, and a search in the latent space for candidates with the properties you want. Everything on this site runs on it.
pip install meidnet # Python 3.10+; CPU is enough\nmeidnet demo # the published Perov-5 model, three oxide perovskites in a few minutes\nmeidnet studio # the same workflow in your browser\n"},{"location":"develop.html#where-to-start","title":"Where to start","text":"I want to Page see the whole workflow once 5-minute quickstart know whether my data fits What data do I need?, bring your own dataset train and design without installing anything Run in Colab, the Studio change what the search looks for targets, properties, elements, family, rules check candidates with a machine-learned potential Screen stability with MACE score my own model's structures Benchmark compatibility call it from Python Python API, the configuration file, family files read the reports Reading the reports, interpreting a candidate"},{"location":"develop.html#the-package","title":"The package","text":"init, check, train, generate, studio, space, demo, screen, score, info, families, schema, download-data.MEIDNet Matter is the first application built on the package: a FastAPI service and a React interface around meidnet.generate.Designer, with the model behind one backend interface so that other engines can be plugged in. Its source is at github.com/ABnano/MEIDNet-Matter; the ecosystem page says how the two relate.
MEIDNet Prism and MEIDNet Matter do two jobs, and connect to what already exists rather than repeating it.
MEIDNet Prism MEIDNet Matter Job Learn a method, reproduce it, compare it, benchmark it, implement it. Bring a dataset and answer \"what material should I investigate next?\" You come here to read how multimodal learning works, run the published model, score a model against a fixed protocol, contribute a result, use themeidnet package. set property targets and chemistry rules, read whether the data and model support them, search for candidates, read the evidence next to each one, export CIFs and a run bundle. Address babu09-meidnet.hf.space babu09-meidnet-matter.hf.space"},{"location":"ecosystem.html#what-meidnet-works-with","title":"What MEIDNet works with","text":"Data. Materials Project, NOMAD, the datasets on the datasets page and the 31 databases by application, and your own tables of structures and properties. Matter reads a table with CIF files; imports from Materials Project and NOMAD are planned.
Methods. MEIDNet (this package) and any other model: the benchmarks score the predictions or candidate structures of any method with the same code, and meidnet score reports the generation quality of any folder of CIF files (benchmark compatibility). Matter runs MEIDNet as its first backend behind one backend interface.
Benchmarks. The MEIDNet protocols per dataset, and metric families named as in LeMat-GenBench so that results can be read side by side, with MEIDNet's conditional extension for property-conditioned generation.
Synthesis knowledge. Not here: LeMat-Synth and the Materials Project Synthesis Explorer hold the recipes; Matter will link a candidate to them rather than extract its own.
Validation. Machine-learned potentials (MACE through meidnet screen), DFT, and experiment. Matter records each candidate's stage on a validation ladder; the benchmarks count DFT-confirmed hits separately from predicted ones.
A candidate leaves Matter as a JSON record (structure, targets, predicted values, domain status, rules, novelty, stability stage, model, dataset, provenance) and as a CIF file. meidnet score reads a folder of such CIF files with their targets.csv, so a Matter run can be scored on Prism with the same metrics as any other generator's output, and a scored set can go on to MLIP screening, DFT or an experiment.
Copied unchanged from the npm registry (tarball checksums verified against the registry), so that the documentation and the Studio load no script from a content-delivery network.
library version used for licence MathJax 3.2.2 equations in the documentation:es5/tex-mml-chtml.js and the parts it loads on demand (fonts, TeX extensions, menu, accessibility) Apache-2.0 tablesort 5.3.0 sortable leaderboard tables MIT chemiscope 1.1.0 the 3D explorer of the Studio BSD-3-Clause"},{"location":"benchmarks/index.html","title":"MEIDNet Benchmarks","text":"Standardised tasks for multimodal materials models, each with a fixed protocol: the data split, the targets, the candidate budget and the metrics. Every method is evaluated the same way, the outputs behind each number are kept, and the scoring works for any model, not only MEIDNet. Results are compared within one dataset and one protocol version.
1protocols3tasks10methods11computed here"},{"location":"benchmarks/index.html#leaderboards","title":"Leaderboards","text":"dataset protocol tasks models baselines Perov-5perov5-v1.1 inverse design, property prediction, representation 5 5 Carbon-24 not yet defined \u2013 \u2013 \u2013 MP-20 not yet defined \u2013 \u2013 \u2013"},{"location":"benchmarks/index.html#analysis","title":"Analysis","text":"What the benchmark runs show beyond one number per method: the spread between training seeds, results on materials held out of training, where reconstruction fails, and what the shared space contains.
benchmarks/datasets/<dataset>.json: splits, property targets, candidate budget, metrics and the direction in which each is better.python scripts/benchmarks.py run evaluates a MEIDNet checkpoint end to end; python scripts/benchmarks.py score evaluates the predictions or candidate structures of any other model with the same code.benchmarks/submissions/<dataset>/<method>.json) holds the description, the numbers per task and the folder with the outputs behind them.benchmarks/verified/; submitted results are re-scored from their outputs before they are marked as computed here.meidnet score generated/ --reference data/perov5 [--targets targets.csv] [--mlip] reports the generation quality of a folder of CIF files from any model in the metric families of LeMat-GenBench (validity, uniqueness, novelty, diversity, distribution, stability, SUN; stability and SUN here rest on a formation-energy filter, not on the convex hull) and MEIDNet's conditional extension (target success, target error, multi-property success, constraint satisfaction, conditional diversity, target coverage). The compatibility page defines every metric and states where this implementation differs from LeMat-GenBench. A run bundle from MEIDNet Matter is scored the same way.
Contribute a method \u00b7 Benchmark compatibility \u00b7 Databases by application
"},{"location":"benchmarks/carbon24.html","title":"Carbon-24","text":"About 10,000 carbon structures with up to 24 atoms per cell (CDVAE split). In the MEIDNet paper it is the second structure-representation generalization test; no property modality and no checkpoint here.
10,153 materials \u00b7 split: CDVAE: 6,091 train / 2,031 val / 2,031 test \u00b7 dataset source
"},{"location":"benchmarks/carbon24.html#no-protocol-yet","title":"No protocol yet","text":"The paper uses this dataset for structure-representation results; no benchmark protocol has been defined for it yet. A protocol is a protocol section in benchmarks/datasets/carbon24.json with its tasks, settings and metrics: Perov-5 is the template (how to add a dataset).
Two families of metrics, so that a result here can be read next to results elsewhere.
"},{"location":"benchmarks/compatibility.html#crystal-generation-quality-the-lemat-genbench-families","title":"Crystal-generation quality: the LeMat-GenBench families","text":"LeMat-GenBench (Siron et al., 2025) evaluates crystal generative models in eight families. meidnet score reports the same families, from a folder of CIF files produced by any model, with the definitions below. Where this implementation differs from LeMat-GenBench, the table says so; for leaderboard-comparable numbers, run LeMat-GenBench itself.
meidnet score validity charge neutrality, minimum interatomic distance, coordination environment, physical plausibility charge neutrality (an oxidation-state assignment that sums to zero), closest pair \u2265 max(0.8 \u00c5, 0.6 \u00d7 the sum of the atomic radii), density 0.5\u201325 g/cm\u00b3, cell lengths 1\u201360 \u00c5, angles 10\u2013170\u00b0. Coordination environments are not checked. uniqueness BAWL fingerprints or StructureMatcher within the set pymatgen StructureMatcher (ltol 0.2, stol 0.3, angle_tol 5\u00b0, primitive cells) novelty fraction not in LeMat-Bulk (BAWL or StructureMatcher) against a reference you name (--reference: the Perov-5 split, or any CSV with cif/formula columns): by composition (reduced formula) and by structure (StructureMatcher against the reference entries of the same composition) diversity Vendi scores and Shannon entropy of elements, space groups, site numbers, physical size Shannon entropy (bits) and counts of the elements, space groups (spglib, symprec 0.1) and site numbers; the density's mean and spread distribution JSD of categorical properties, MMD of volume and density, Fr\u00e9chet distance of MLIP embeddings Jensen\u2013Shannon distance (base 2) of the element frequencies and of the site numbers against the reference. MMD and Fr\u00e9chet distances are not computed. stability energy above the convex hull from several MLIPs (stable \u2264 0, metastable \u2264 0.1 eV/atom) with --mlip: relaxation with MACE-MP and the formation energy per atom against elemental reference phases (meidnet screen's filter); the report counts a structure as stable when it passes the filter (\u2264 0.1 eV/atom). This is a formation-energy filter, not the energy above the hull: its rates are not comparable with LeMat-GenBench's. hhi production and reserve supply risk not computed sun stable \u2227 unique \u2227 novel; MetaSUN passes the formation-energy filter \u2227 unique \u2227 novel by structure, with --mlip and a reference with CIFs; reported as sun, but not comparable with LeMat-GenBench's hull-based SUN"},{"location":"benchmarks/compatibility.html#conditional-inverse-design-quality-the-meidnet-extension","title":"Conditional inverse-design quality: the MEIDNet extension","text":"A conditional generator is asked for a property; these metrics say whether it delivered. They need targets.csv with a file column (the CIF file name) and, per property, a point target <p>_target, a window <p>_min / <p>_max, or both. A bound such as \"formation energy at most 1.0 eV/atom\" is a window with only <p>_max = 1.0, not a point target. An optional <p>_value holds the value the submitter reports for the structure, with a source column saying how it was obtained (dft, experiment, predicted). Without a value, --model <checkpoint> predicts it with a MEIDNet model, and the report labels those values model-predicted.
file,dir_gap_target,dir_gap_min,dir_gap_max,dir_gap_value,heat_all_max,heat_all_value,source\ncand-001.cif,1.5,1.2,1.8,1.47,1.0,-0.62,dft\n metric definition target success rate share of structures whose value lies inside the window when one is given, else with |value \u2212 target| \u2264 tolerance, per property; the tolerance is --tolerance p=\u2026 or 5 % of the reference's range target error mean |value \u2212 target|, or the distance outside the window for a property with a window and no point target multi-property success share with every targeted property within tolerance constraint success valid structures (the validity family) among the successes conditional diversity distinct compositions among the successes, over the successes target coverage distinct target vectors with at least one success, over the distinct targets interpolation share targets inside the reference's property range (needs property columns in the reference) Oracle efficiency, the number of candidates evaluated per success, is a property of a run, not of a set of structures: the Perov-5 protocol reports it as the candidate budget and the delivered count.
"},{"location":"benchmarks/compatibility.html#running-it","title":"Running it","text":"pip install \"meidnet>=2.3.1\" # or: pip install \"meidnet[stability]\" for --mlip\nmeidnet download-data # Perov-5 as a reference (data/perov5/)\nmeidnet score generated/ --reference data/perov5\nmeidnet score generated/ --reference data/perov5 --targets targets.csv --tolerance dir_gap=0.3\nmeidnet score generated/ --reference data/perov5 --mlip --out report.json\n generated/ is a folder of CIF files (any depth) or a CSV with a cif column. The report prints as a table; --out writes the JSON with the per-structure checks. A run bundle from MEIDNet Matter contains cifs/ and targets.csv in this layout.
Example: the 26 candidate structures shipped with the paper (examples/perov5/paper_results) scored against the full Perov-5 set, without MLIP, in three seconds:
| validity | valid (all checks) | 100.0 % |\n| uniqueness | unique structures | 24 of 26 (92.3 %) |\n| novelty | new compositions vs perov5 | 69.2 % |\n| novelty | new structures vs perov5 | 69.2 % |\n| diversity | elements (entropy) | 25 (3.48 bits) |\n| diversity | space groups (entropy) | 1 (0.00 bits) |\n| distribution | element JSD vs reference | 0.717 |\n One space group, because every structure is a cubic ABX\u2083 prototype: the diversity family shows where a prototype-family generator sits next to a free-form one.
Numbers from the metric families go into a submission under results.generation; the contribute page has the record layout.
About 45,000 Materials Project structures with at most 20 atoms per cell (CDVAE split). In the MEIDNet paper it tests how the crystal encoder and decoder generalise beyond perovskites; no property modality was aligned on it and no MP-20 checkpoint is shipped in this repository. The split files hold 45,229 structures; the size often quoted for MP-20, 45,231, does not match them.
45,229 materials \u00b7 split: CDVAE: 27,136 train / 9,047 val / 9,046 test \u00b7 dataset source
"},{"location":"benchmarks/mp20.html#no-protocol-yet","title":"No protocol yet","text":"The paper uses this dataset for structure-representation results; no benchmark protocol has been defined for it yet. A protocol is a protocol section in benchmarks/datasets/mp20.json with its tasks, settings and metrics: Perov-5 is the template (how to add a dataset).
From nothing installed to candidate materials checked with a machine-learned interatomic potential (MLIP), with the commands that were run for this page and what they printed. Then: which of the public checkpoints to use for what.
Quick start \u00b7 Which model \u00b7 Your own targets \u00b7 Your own data
"},{"location":"benchmarks/perov5-guide.html#quick-start","title":"Quick start","text":"Three candidates for a direct band gap of 2 eV, generated and screened. Run on a laptop for this page: 29 seconds to generate, under 2 minutes to screen.
Install.
pip install \"meidnet[stability] @ git+https://github.com/ABnano/MEIDNet.git\"\n [stability] adds the MACE potential for step 3. Without it, steps 1 and 2 work the same.
Generate. The demo uses the published model and the cubic halide perovskite family.
meidnet demo --family halide --band-gap 2.0 --enthalpy -0.10 -n 3 --out runs/demo\n It printed:
candidate predicted band gap (eV) predicted formation enthalpy (eV/atom) note NaNiI\u2083 1.97 -0.10 KMnI\u2083 2.09 0.35 NaSnI\u2083 1.98 -1.31 extrapolating: outside the range of the training dataEach candidate is a CIF file in runs/demo/generation/cifs/; runs/demo/generation_report.html shows every rule each one passed.
Screen with the MLIP. MACE-MP-0 relaxes each crystal and computes its formation energy.
meidnet screen runs/demo/generation/cifs --train-csv data/perov5/train.csv\n It printed:
candidate MACE formation energy (eV/atom) passes the \u0394Hf filter unique novel NaNiI\u2083 -0.72 yes yes yes KMnI\u2083 -1.08 yes yes yes NaSnI\u2083 -0.94 yes yes yes3 of 3 pass the formation-energy filter (at most 0.10 eV/atom against the elements; the report calls them stable) and are unique and novel. --train-csv needs meidnet download-data once; without it, novelty is skipped.
Confirm. An MLIP is a first filter. Before any claim about a candidate, confirm its stability (the energy above the convex hull) and its band gap with DFT.
The outputs of this run are kept in benchmarks/reproduction/perov5/demo/. No installation: the same search runs in the Studio.
All public checkpoints, measured under the same protocol (leaderboard): 54 candidates for three band-gap targets in three chemical families, screened with MACE-MP-0.
model delivered (of 54) \u0394Hf\u00b7U\u00b7N (of 54) passes the \u0394Hf filter (share) band-gap target met, of candidates with a DFT value alignment (cosine) retrieval, top 1 MEIDNet (published model) 53 33 0.96 1 of 18 0.772 0.336 MEIDNet (shorter training) 52 30 0.92 1 of 18 0.480 0.297 MEIDNet (first early-fusion model) 54 35 0.94 3 of 16 0.655 0.028 MEIDNet (alignment training, seed 3) 47 33 0.87 2 of 8 0.954 \u00b1 0.011 0.297 \u00b1 0.062 Encoder screening (baseline) 54 46 0.85 \u2013 \u2013 \u2013 Random sampling (baseline) 54 42 0.89 0 of 6 \u2013 \u2013Checkpoint files: MEIDNet (published model): dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth; MEIDNet (shorter training): \u2026_propertyaware.pth; MEIDNet (first early-fusion model): dual_autoencoder_clip_earlyfusion.pth; MEIDNet (alignment training, seed 3): reproduction/meidnet_paper_rerun_seed3.pth. The alignment columns of the seed-3 row are the mean of the seven alignment models.
How to read this table, and what to start with
meidnet demo and of the Studio, and its decoder (like that of the shorter training) was trained to rebuild a crystal from the property latent alone, which is what inverse design asks of it. Compare its candidates with the encoder screening of the same family (meidnet space), which needs no search.Targets, families, elements and rules are settings of one file, meidnet.yaml.
meidnet init --template perov5 -o meidnet.yaml # a starting file\n# edit generation.targets, generation.variant, generation.exclude_elements \u2026\nmeidnet generate meidnet.yaml --model checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth\nmeidnet screen runs/perov5/generation/cifs --train-csv data/perov5/train.csv\n Change the target properties \u00b7 Exclude or restrict elements \u00b7 Change the material family \u00b7 Add a rule
"},{"location":"benchmarks/perov5-guide.html#your-own-data","title":"Your own data","text":"A table with one row per material, a CIF for each row and one numeric column per property is enough to train your own model: Bring your own dataset. When you train:
Seven training runs of the alignment model, three without the curriculum and three with materials held out give more than one number per model. This page reads them for what they say about training, about failures and about the shared space, and turns each result into something you can use. Every number is generated from findings.json; the runs are described on Alignment across seeds.
How the model learns \u00b7 Where it fails \u00b7 What the shared space contains \u00b7 In practice
"},{"location":"benchmarks/perov5-insights.html#how-the-model-learns","title":"How the model learns","text":""},{"location":"benchmarks/perov5-insights.html#the-curriculum-builds-the-structures-first","title":"The curriculum builds the structures first","text":"With the curriculum, the contrastive weight starts at zero and grows over the first 1,500 epochs. In a paired run (seed 6, the same starting weights and data order), structure matching reaches 88.3 % at epoch 50 with the curriculum and 8.5 % without it; without the curriculum it is still 36.2 % at epoch 300. The alignment behaves the other way round: without the curriculum the cosine is already 0.88 at epoch 10, against 0.03 with it.
Structure matching (most likely element), seed 6
Structure matching during the first 300 epochs, with and without the curriculum01002003000255075epochstructure matching (%)with the curriculumwithoutCosine between the two latents, seed 6
Cosine during the first 300 epochs, with and without the curriculum010020030000.20.40.60.8epochcosinewith the curriculumwithoutAfter the full training, over three and seven seeds:
cosine L2 structure matching, sampled element with the curriculum (7 seeds, 2,200 epochs) 0.954 \u00b1 0.011 0.301 \u00b1 0.034 86.1 \u00b1 5.0 % without (3 seeds, 2,500 epochs) 0.949 \u00b1 0.009 0.316 \u00b1 0.028 67.1 \u00b1 7.6 %What this means for you
The curriculum does not change how well the modalities align in the end. It decides whether the model also learns to rebuild crystals. Keep training.contrastive_warmup_epochs on when you train on your own data.
In the seed-6 run, structure matching is highest at epoch 300 (93.7 %), when the cosine is only 0.82. From there to the end it moves between 77.8 % and 93.7 % from one snapshot to the next, and ends at 88.5 % (cosine 0.94).
Structure matching and cosine over 2,200 epochs, seed 6 (29 snapshots)
Structure matching and cosine over the whole training, seed 605001,0001,5002,0000255075epochstructure matching (%)cosine \u00d7 100What this means for you
The last epoch is not the best checkpoint for reconstruction. Save checkpoints during training and choose one on a validation measure. This is one seed; the swings may differ for others.
"},{"location":"benchmarks/perov5-insights.html#early-alignment-does-not-predict-the-final-one","title":"Early alignment does not predict the final one","text":"At epoch 50 the cosine of the seven seeds ranges from 0.17 to 0.73; at the end from 0.94 to 0.96. The order of the seeds at epoch 100 has a rank correlation of only 0.32 with their final order (figure on Alignment across seeds).
What this means for you
Do not judge a model, or stop a run, on its alignment after a few dozen epochs. A short training, such as the 30 epochs of the hosted Studio, gives a rough model whose quality depends on the seed.
"},{"location":"benchmarks/perov5-insights.html#alignment-and-reconstruction-are-independent","title":"Alignment and reconstruction are independent","text":"Across the seven seeds, the correlation between the final cosine and structure matching is 0.17 (sampled element) and 0.02 (most likely element). The seed with the highest cosine (0.965) has the lowest structure matching (78.2 %).
What this means for you
Report both. A high cosine says nothing about how well crystals are rebuilt.
"},{"location":"benchmarks/perov5-insights.html#where-it-fails","title":"Where it fails","text":""},{"location":"benchmarks/perov5-insights.html#failures-are-seed-noise-not-hard-materials","title":"Failures are seed noise, not hard materials","text":"Of the 18,928 materials, 99.94 % are reconstructed by at least one of the seven seeds and 51.9 % by all seven; only 11 are missed by every seed. Whether one seed fails on a material says almost nothing about another seed (correlation 0.06).
Number of materials reconstructed by k of the seven seeds
Materials reconstructed by k of the seven seeds7 of 7 seeds9,8316 of 7 seeds6,2695 of 7 seeds2,0424 of 7 seeds5123 of 7 seeds1652 of 7 seeds691 of 7 seeds290 of 7 seeds11Right element per site, seven seeds pooled (A and B: cations; X: anions)
Share of materials with the right element on each sitesite X299.96 %site X199.90 %site X399.89 %site A96.65 %site B95.47 %So several seeds can be combined. Adding the element probabilities of the seeds, site by site, and taking the most likely element gives the exact composition for 99.77 % of the materials with three seeds and 99.99 % with seven, against 92.1 % for one seed on average (85.6\u201396.2 %).
What this means for you
Three models trained with different seeds, with their element probabilities added, remove almost all composition errors on the training materials. It costs three trainings and no change to the model.
"},{"location":"benchmarks/perov5-insights.html#the-bottleneck-is-naming-the-cation","title":"The bottleneck is naming the cation","text":"79 % of the failed reconstructions have a wrong element, and almost always on a cation site: the A site is right for 96.7 % of the materials and the B site for 95.5 %, the three anion sites for 99.9 % or more. When the composition is right, 97.8 % of the crystals match; the lattice length is off by 0.10 \u00c5 on average.
"},{"location":"benchmarks/perov5-insights.html#unseen","title":"On unseen materials the whole loss is the cation","text":"trained on 80 %, three seeds A site right B site right anion sites right match when the composition is right lattice error materials seen in training 97.4 % 97.2 % 99.9 % 96.2 % 0.104 \u00c5 held-out materials 86.5 % 84.0 % 99.4 % 96.0 % 0.115 \u00c5What this means for you
The geometry generalises: lattice and positions are as good on unseen materials as on seen ones. What does not generalise is choosing the A and B elements. Work on the model should go there first; candidates should have their composition checked first.
"},{"location":"benchmarks/perov5-insights.html#take-the-most-likely-element","title":"Take the most likely element","text":"The training script's evaluation samples the element of each site. Taking the most likely element instead raises structure matching by 3.9 points on average (2.8 to 5.4 over the seven seeds).
"},{"location":"benchmarks/perov5-insights.html#the-decoder-knows-when-it-is-unsure","title":"The decoder knows when it is unsure","text":"Take the lowest of the five top probabilities of a decoded crystal (one per site) as its confidence. It needs no reference structure.
confidence share of materials (seen) reconstructed correctly (seen) share (held-out) reconstructed correctly (held-out) \u2265 0.9 77.9 % 96.0 % 63.7 % 82.3 % 0.6 to 0.9 17.6 % 74.5 % 26.9 % 51.5 % < 0.6 4.5 % 49.0 % 9.4 % 34.3 % all 100 % 90.1 % 100 % 69.5 %Area under the ROC curve: 0.81 on seen materials (seven seeds), 0.75 on held-out materials (three seeds).
What this means for you
Rank or filter decoded crystals by this confidence before spending computing time on them.
"},{"location":"benchmarks/perov5-insights.html#chemistry-matters-little-some-cations-more","title":"Chemistry matters little, some cations more","text":"Structure matching by anion set, seven seeds pooled:
anions O\u2082N ONF O\u2082F O\u2083 ON\u2082 O\u2082S N\u2083 structure matching 91.7 % 91.2 % 91.0 % 91.0 % 89.3 % 89.1 % 87.2 %The cations with the lowest structure matching (elements with at least 100 materials):
site lowest highest A Os 82 %, Cs 84 %, Ir 85 %, Rb 85 %, B 85 %, K 87 % Sn 95 %, Bi 94 %, Sb 94 %, Ga 94 % B Ca 82 %, Hf 85 %, Mn 86 %, B 86 %, Ta 86 %, La 87 % Cu 94 %, Ni 94 %, Sb 93 %, Ga 93 %"},{"location":"benchmarks/perov5-insights.html#what-the-shared-space-contains","title":"What the shared space contains","text":""},{"location":"benchmarks/perov5-insights.html#the-modalities-are-aligned-before-the-projection-heads","title":"The modalities are aligned before the projection heads","text":"The contrastive loss of this model acts on the normalised encoder outputs. There the cosine is 0.954 \u00b1 0.011. After the projection heads, which feed the decoder, the same pairs have a cosine of -0.978 \u00b1 0.002: the two projected vectors point in nearly opposite directions, and the decoder reads their mean.
In the benchmark
The representation task compares the two latents in the space where each model aligns them, declared per method. The cosine in both spaces is recorded on each method's page.
"},{"location":"benchmarks/perov5-insights.html#the-128-number-latents-use-about-two-directions","title":"The 128-number latents use about two directions","text":"The participation ratio, the effective number of directions a set of vectors uses, is 2.2 \u00b1 0.0 for the structure latents and 2.3 \u00b1 0.1 for the property latents, out of 128; the joint latent that the decoder reads uses 8.5 \u00b1 0.8.
What this means for you
Two scalar properties can organise two directions, and the alignment pulls the structure latent onto them. A richer second modality, such as a diffraction pattern or a density of states, is the way to a richer shared space (roadmap).
"},{"location":"benchmarks/perov5-insights.html#the-property-modality-of-perov-5-is-thin","title":"The property modality of Perov-5 is thin","text":"96.1 % of the materials (18,193) have a direct band gap of 0, and the 18,928 materials share only 903 distinct pairs of (formation enthalpy, band gap). 94 % of the materials have the same pair as at least ten others; the largest group has 261.
"},{"location":"benchmarks/perov5-insights.html#retrieval-works-in-one-direction","title":"Retrieval works in one direction","text":"top 1 median rank from a structure, find its properties 0.230 186 from the properties, find the structure 0.003 228Ranks are among all 18,928 materials; a material sharing its properties with others is not counted against. From properties to a structure, many crystals are equally right answers.
What this means for you
This is why inverse design in MEIDNet is a search and not a lookup: a material family fixes the sites, rules remove impossible compositions, and the search moves through the latent space (How MEIDNet works).
"},{"location":"benchmarks/perov5-insights.html#materials-with-a-higher-formation-enthalpy-align-better-and-reconstruct-worse","title":"Materials with a higher formation enthalpy align better and reconstruct worse","text":"By fifths of the formation enthalpy, from the lowest to the highest:
formation enthalpy up to (eV/atom) 0.88 1.22 1.54 2.00 5.16 cosine 0.952 0.948 0.950 0.955 0.963 structure matching 91.6 % 91.6 % 91.2 % 89.9 % 86.0 %The correlation between a material's cosine and its formation enthalpy is 0.47 \u00b1 0.06 over the seven seeds.
"},{"location":"benchmarks/perov5-insights.html#what-a-structure-alone-predicts","title":"What a structure alone predicts","text":"On the 3,786 held-out materials, with the property of the five nearest training materials in the structure latent (three seeds):
formation enthalpy (eV/atom) direct band gap (eV) five nearest neighbours in the structure latent 0.060 \u00b1 0.004 0.087 \u00b1 0.003 nearest property latent (cross-modal) 0.062 \u00b1 0.004 0.131 \u00b1 0.016 linear model on the structure latent 0.144 \u00b1 0.015 0.152 \u00b1 0.023 mean of the training materials 0.563 0.167Mean absolute errors. The band-gap numbers are small because most gaps are zero.
What this means for you
The properties decoded from the joint latent have an error of only 0.008 eV/atom, but the joint latent contains the true properties: that is a reconstruction. The error to expect for a new structure is the first row, about 0.06 eV/atom.
"},{"location":"benchmarks/perov5-insights.html#in-practice","title":"In practice","text":"What the results above suggest for anyone training or using such a model:
Steps 2, 4 and 5 are measured here on reconstruction, with the alignment model. They are not yet options of meidnet generate.
The alignment model of MEIDNet learns one space for crystal structures and their properties. This page measures how well the two modalities agree in that space, and how much the answer depends on the random seed: the same training was run seven times, and every checkpoint is public.
0.954 \u00b1 0.011cosine, 7 seeds0.301 \u00b1 0.034L2, 7 seeds86.1 \u00b1 5.0 %structure matching18,928materialsResults \u00b7 During training \u00b7 Unseen materials \u00b7 Do it yourself \u00b7 What the runs show
"},{"location":"benchmarks/perov5-reproduction.html#what-was-run","title":"What was run","text":"model early fusion of formation enthalpy and band gap; E(n)-equivariant crystal encoder; 128-dimensional latents training 2,200 epochs, batch 16, Adam, learning rate 1e-3; symmetric InfoNCE with temperature 0.01; contrastive weight raised linearly from 0 to 5 over the first 1,500 epochs (the curriculum) data all 18,928 Perov-5 materials, scored on the same materials; unseen materials are measured separately seeds 0 to 6, one run each, about 7 hours on one NVIDIA A100 script and weightsreproduction/paper_alignment/ \u00b7 seven checkpoints on Hugging Face"},{"location":"benchmarks/perov5-reproduction.html#results","title":"Results","text":"seed cosine L2 structure matching, sampled element structure matching, most likely element retrieval, top 1 0 0.9563 0.2934 90.04 % 92.79 % 0.245 1 0.9585 0.2862 91.41 % 94.55 % 0.288 2 0.9373 0.3529 82.91 % 88.34 % 0.218 3 0.9592 0.2839 91.55 % 94.69 % 0.249 4 0.9654 0.2615 78.21 % 82.49 % 0.267 5 0.9586 0.2863 85.15 % 88.87 % 0.215 6 0.9400 0.3449 83.76 % 88.82 % 0.127 mean \u00b1 s.d. 0.954 \u00b1 0.011 0.301 \u00b1 0.034 86.1 \u00b1 5.0 % 90.1 \u00b1 4.3 % 0.230 \u00b1 0.052 range 0.937\u20130.965 0.262\u20130.353 78.2\u201391.5 % 82.5\u201394.7 % 0.127\u20130.288 The four measures used on this page StructureMatcher (stol 0.5, angle_tol 10, ltol 0.3). Sampled element draws the element of each site from the decoder's probabilities, as the training script's own evaluation does; most likely element takes the highest probability and is deterministic.A seed fixes the result
Seeds 0, 1, 2 were trained twice, on different hardware and library versions (torch 2.6.0, pymatgen 2024.11.13, NVIDIA A100 40 GB; torch 2.8.0, pymatgen 2025.10.7, NVIDIA A100 80 GB). Every number of the two sets is identical. The differences between the rows above therefore come from the seed alone: quote a result with its seed, or as a mean over seeds.
"},{"location":"benchmarks/perov5-reproduction.html#during-training","title":"During training","text":"Cosine between the structure and property latents, per epoch, for the seven seeds
Cosine between the two latents during training, seven seeds05001,0001,5002,00000.250.50.751epochcosine (training batches)seed 0seed 1seed 2seed 3seed 4seed 5seed 6The seeds differ most early in training and converge later:
epoch lowest seed highest seed spread 10 0.013 0.159 0.146 25 0.088 0.285 0.197 50 0.166 0.727 0.561 100 0.506 0.844 0.338 200 0.765 0.900 0.135 400 0.851 0.928 0.078 800 0.908 0.947 0.039 1,500 0.934 0.962 0.028 2,200 0.939 0.960 0.022"},{"location":"benchmarks/perov5-reproduction.html#unseen-materials","title":"Unseen materials","text":"The runs above score the materials the model was trained on. To measure materials it has never seen, the same training was repeated on 15,142 materials (80 %) with 3,786 (20 %) held out, with three seeds.
cosine L2 structure matching, sampled structure matching, most likely retrieval, top 1 held-out 3,786 materials 0.919 \u00b1 0.006 0.376 \u00b1 0.020 66.6 \u00b1 5.9 % 69.5 \u00b1 6.3 % 0.087\u20130.105 the 15,142 trained on 0.953 \u00b1 0.008 0.305 \u00b1 0.027 87.4 \u00b1 4.4 % 90.8 \u00b1 3.9 % 0.207\u20130.275The alignment carries over to unseen materials with a small loss; the reconstruction of the crystal loses about twenty points. What the runs show traces that loss to one cause.
"},{"location":"benchmarks/perov5-reproduction.html#do-it-yourself","title":"Do it yourself","text":"1 \u00b7 In the browser2 \u00b7 On a laptop, about a minute3 \u00b7 Full training, one GPU, about 7 hoursNothing to install. The seven models are compared with the other methods on the Perov-5 leaderboard, and the insights page has the figures behind every statement here.
Recompute the cosine and L2 of any seed on a CPU. The checkpoint (2.8 MB) is downloaded once from Hugging Face to ~/.meidnet/reproduction/.
pip install git+https://github.com/ABnano/MEIDNet.git\ngit clone https://github.com/ABnano/MEIDNet.git && cd MEIDNet\nmeidnet download-data # Perov-5 into data/perov5/\npython scripts/reproduce_alignment.py --seed 4 # prints cosine and L2\npython scripts/reproduce_alignment.py --seed 4 --structure-matching # also rebuilds every crystal: a few minutes\n Expected for seed 4: cosine 0.9654, L2 0.2615, structure matching 82.49 % (most likely element). The values of every seed are in runs.csv.
The training script and its wrapper are in reproduction/paper_alignment/. In the clone, after meidnet download-data:
cd reproduction/paper_alignment\npython prepare_data.py # train.csv and cif_files/: all 18,928 materials\npython -u retrain_alignment.py --seed 4 --epochs 2200 # trains, then prints cosine, L2 and structure matching\npython -u retrain_alignment.py --ckpt ~/.meidnet/reproduction/meidnet_paper_rerun_seed4.pth # evaluation only\n The same seed gives the same numbers as in the table above, on any GPU.
"},{"location":"benchmarks/perov5-reproduction.html#files","title":"Files","text":"findings.json: every number on this page and the next, generated by scripts/reproduction_findings.py.runs.csv: one row per run. snapshots_seed6.csv: seed 6 at 29 points of training.per_material_7seeds.csv.gz: for each of the 18,928 materials and each seed, matched or not, and the cosine.18,928 cubic ABX3 perovskites with relaxed structures, formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV). The CDVAE split of the Castelli et al. (2012) perovskite set; the dataset behind the published MEIDNet model and the live Studio.
18,928 materials \u00b7 split: CDVAE: 11,356 train / 3,787 val / 3,785 test \u00b7 properties: heat_all, dir_gap \u00b7 dataset source
Inverse design \u00b7 Property prediction \u00b7 Representation \u00b7 Alignment across seeds \u00b7 What the runs show \u00b7 Choose a model and generate \u00b7 Protocol \u00b7 Reported in the paper \u00b7 Submit a method
"},{"location":"benchmarks/perov5.html#inverse-design","title":"Inverse design","text":"Propose cubic ABX3 perovskites for three band-gap targets in three chemical families (54 candidates); score them for stability with an MLIP, uniqueness, novelty and, where a DFT value exists, the target band gap. Export: CSV \u00b7 JSON.
#Method\u0394Hf\u00b7U\u00b7N \u2191\u0394Hf filter \u2191Unique \u2191Novel \u2191\u0394Hf \u2193DFT hit \u2191DFT knownDelivered \u2191ParamsTraining dataAddedLinks1Encoder screeningbaseline0.8520.8521.0001.000-1.28\u20130540.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights2Random samplingbaseline0.7780.8891.0000.889-1.340.000654\u2013\u20132026-10-03code3MEIDNet (first early-fusion model)0.6480.9441.0000.704-1.290.18816540.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights4MEIDNet (published model)0.6110.9621.0000.660-1.520.05618530.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights5MEIDNet (alignment training, seed 3)0.6110.8721.0000.830-1.320.2508470.70 MPerov-5, all 18,928 materials2026-10-05paper \u00b7 code \u00b7 weights6MEIDNet (shorter training)0.5560.9231.0000.654-1.500.05618520.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights How to read the inverse design tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds.\u0394Hf\u00b7U\u00b7N counts candidates that pass the formation-energy filter and are unique and novel; it measures neither stability on the convex hull nor whether a candidate has the target band gap: methods that never return a composition of the data set, such as the two baselines, set a high reference for it. Of the compositions that pass the family's rules, 40 of the 106 oxides are in the data set and no chalcogenide or halide is, so novelty separates methods among oxides only. The DFT check is the only measure of the target and is possible for oxides whose A and B sites match a Perov-5 entry (40 of the 106 rule-passing oxides; 26 of them have a non-zero direct gap).
\u0394Hf\u00b7U\u00b7N by chemical family. Candidates that pass the formation-energy filter and are unique and novel, out of the budget of each family; hover a cell for the number of novel candidates.
MethodoxidechalcogenidehalideEncoder screening18/1811/1817/18Random sampling12/1814/1816/18MEIDNet (first early-fusion model)2/1815/1818/18MEIDNet (published model)0/1816/1817/18MEIDNet (alignment training, seed 3)10/1812/1811/18MEIDNet (shorter training)0/1814/1816/18"},{"location":"benchmarks/perov5.html#property-prediction","title":"Property prediction","text":"Predict formation enthalpy and direct band gap from the crystal structure of the 3,785 test materials. Export: CSV \u00b7 JSON.
#MethodMAE \u0394H \u2193RMSE \u0394H \u2193R\u00b2 \u0394H \u2191MAE gap \u2193MAE gap > 0 \u2193ParamsTraining dataAddedLinks1MEIDNet (published model)0.4040.5390.4752.7921.6760.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights2Composition k-NNbaseline0.5110.6740.1790.1632.044\u2013Perov-5 train (11,356)2026-10-03code3MEIDNet (first early-fusion model)0.5220.6980.11913.46911.9980.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights4Training meanbaseline0.5660.744-0.0000.1732.135\u2013Perov-5 train (11,356)2026-10-03code5MEIDNet (shorter training)1.0091.391-2.4953.2921.9780.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights\u2020 Trained on all materials of the data set, the test split included: for these rows the scores are measured on materials the model has seen, and are not comparable with rows trained on the training split only.
How to read the property prediction tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
MEIDNet (published model): formation enthalpy, predicted vs. DFT
MEIDNet (published model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (published model): direct band gap, predicted vs. DFT
MEIDNet (published model): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)Composition k-NN: formation enthalpy, predicted vs. DFT
Composition k-NN: formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)"},{"location":"benchmarks/perov5.html#representation","title":"Representation","text":"How well the shared space holds both modalities on the test split: cross-modal retrieval, agreement of the two latents, and a k-nearest-neighbour probe of the structure latent. Export: CSV \u00b7 JSON.
#MethodR@1 \u2191R@5 \u2191cos \u2191k-NN MAE \u0394H \u2193k-NN MAE gap \u2193ParamsTraining dataAddedLinks1MEIDNet (published model)0.3360.8960.7720.0210.0550.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights2MEIDNet (alignment training, 7 seeds)0.297 \u00b1 0.0620.855 \u00b1 0.0650.954 \u00b1 0.0110.025 \u00b1 0.0040.049 \u00b1 0.0160.70 MPerov-5, all 18,928 materials\u20202026-10-05paper \u00b7 code \u00b7 weights3MEIDNet (shorter training)0.2970.8480.4800.0240.0470.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights4MEIDNet (first early-fusion model)0.0280.1310.6550.0510.0640.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights5Chance levelbaseline0.0030.0140.000\u2013\u2013\u2013\u20132026-10-03code6Composition k-NNbaseline\u2013\u2013\u20130.5110.163\u2013Perov-5 train (11,356)2026-10-03code\u2020 Trained on all materials of the data set, the test split included: for these rows the scores are measured on materials the model has seen, and are not comparable with rows trained on the training split only.
How to read the representation tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
Version perov5-v1.1. Data: data/perov5 (meidnet download-data), split CDVAE: 11,356 train / 3,787 val / 3,785 test.
Propose cubic ABX3 perovskites for three band-gap targets in three chemical families (54 candidates); score them for stability with an MLIP, uniqueness, novelty and, where a DFT value exists, the target band gap.
setting value familyperovskite_abx3, variants oxide, chalcogenide, halide targets dir_gap 1.5, heat_all -0.1; dir_gap 2.5, heat_all -0.1; dir_gap 3.5, heat_all -0.1 budget 6 candidates per target and variant (54 in total), each passing the family's rules MEIDNet search the generation settings of examples/perov5/meidnet.yaml, at most 6 rounds per target formation-energy filter MACE-MP-0 (medium), float32; BFGS with cell relaxation (FrechetCellFilter), fmax 0.05 eV/\u00c5, at most 500 steps; formation energy against elemental phases at most 0.1 eV/atom (not the energy above the convex hull) novelty composition absent from the data set (all 18,928 materials) DFT check Perov-5 entries with the same A, B and X sites; hit within 0.5 eV of the target band gap"},{"location":"benchmarks/perov5.html#property-prediction_1","title":"Property prediction","text":"Predict formation enthalpy and direct band gap from the crystal structure of the 3,785 test materials.
Split: test. Reference implementation: meidnet.benchmark.
How well the shared space holds both modalities on the test split: cross-modal retrieval, agreement of the two latents, and a k-nearest-neighbour probe of the structure latent.
Split: test. Reference implementation: meidnet.benchmark.
Run the protocol for a MEIDNet checkpoint, or score the outputs of any other model:
python scripts/benchmarks.py run perov5 --method meidnet-2k # a built-in method, every task\npython scripts/benchmarks.py score perov5 --task property_prediction --predictions preds.csv\npython scripts/benchmarks.py score perov5 --task inverse_design --candidates candidates.csv\n preds.csv has one row per test material: id (the dataset's material_id) and pred_<property> for each property. candidates.csv has id, variant, target (1, 2, 3), formula, elements (JSON of the sites, e.g. {\"A\": \"Ba\", \"B\": \"Ti\", \"X\": \"O\"}) and cif (path of the structure). The formation-energy filter needs MACE: set --mlip-python or MEIDNET_MLIP_PYTHON if it lives in another environment.
Numbers quoted from the paper use the paper's own settings (other targets, budget and splits), so they are listed here rather than ranked above.
record task values status Candidates shipped with the paper, screened here Inverse design \u0394Hf\u00b7U\u00b7N 0.654, \u0394Hf filter 1.000, Unique 0.923, Novel 0.692, \u0394Hf -1.27, Delivered 26, \u0394Hf\u00b7U\u00b7N count 17 Computed here MEIDNet (paper): inverse design Inverse design Generated 140, \u0394Hf\u00b7U\u00b7N count 19, \u0394Hf\u00b7U\u00b7N 0.136 Reported in the paper"},{"location":"benchmarks/results/baseline-chance.html","title":"Chance level","text":"Retrieval by random choice among the 3,785 test materials.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data \u2013 Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-chance.html#representation","title":"Representation","text":"metric value definition R@1 0.003 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.014 the same within the five nearest profiles cos 0.000 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/baseline-chance.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method baseline-chance\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 23 s.
"},{"location":"benchmarks/results/baseline-composition-knn.html","title":"Composition k-NN","text":"Mean property of the five training materials nearest in element-fraction space: a composition-only representation, without structure.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs composition Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-composition-knn.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.511 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.674 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.179 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 0.163 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 2.044 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 0.568 eV root-mean-square error of the direct band gap R\u00b2 gap -0.122 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.511 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated Composition k-NN: formation enthalpy, predicted vs. DFT
Composition k-NN: formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)Composition k-NN: direct band gap, predicted vs. DFT
Composition k-NN: direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/baseline-composition-knn.html#representation","title":"Representation","text":"metric value definition k-NN MAE \u0394H 0.511 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.163 eV direct-band-gap error of the same probe n 3,785 test materials evaluated R@1 \u2013 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile)"},{"location":"benchmarks/results/baseline-composition-knn.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-composition-knn/property_predictionpython scripts/benchmarks.py run perov5 --method baseline-composition-knn\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 22 s.
"},{"location":"benchmarks/results/baseline-random.html","title":"Random sampling","text":"Draws compositions at random, without repetition, from those that pass the family's rules.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data \u2013 Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-random.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.778 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.889 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.889 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.34 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.000 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 6 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 42 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/baseline-random.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 PrGaO3 1.5 -2.837 yes yes \u2013 oxide_T1_2 TmNiO3 1.5 -1.618 yes yes \u2013 oxide_T1_3 NdFeO3 1.5 -2.033 yes yes \u2013 oxide_T1_4 BaGeO3 1.5 -2.357 yes no 0.00 oxide_T1_5 LaMnO3 1.5 -2.467 yes no 0.00 oxide_T1_6 SmScO3 1.5 -3.469 yes yes \u2013 oxide_T2_1 SmFeO3 2.5 -1.998 yes yes \u2013 oxide_T2_2 NdCrO3 2.5 -2.477 yes yes \u2013 oxide_T2_3 YbVO3 2.5 -2.555 yes yes \u2013 oxide_T2_4 LaAlO3 2.5 -3.587 yes no 6.30 oxide_T2_5 SmMnO3 2.5 -2.318 yes yes \u2013 oxide_T2_6 PrVO3 2.5 -2.572 yes yes \u2013 oxide_T3_1 EuAlO3 3.5 -3.186 yes yes \u2013 oxide_T3_2 RbVO3 3.5 -1.599 yes no 0.00 oxide_T3_3 SmNiO3 3.5 -1.699 yes yes \u2013 oxide_T3_4 CaHfO3 3.5 -3.529 yes no 7.30 oxide_T3_5 LaNiO3 3.5 -1.800 yes no 0.00 oxide_T3_6 TmCoO3 3.5 -1.903 yes yes \u2013 chalcogenide_T1_1 SrMoTe3 1.5 -1.308 yes yes \u2013 chalcogenide_T1_2 TbCoS3 1.5 -93642942051.475 no yes \u2013 chalcogenide_T1_3 LuCoS3 1.5 -2.538 yes yes \u2013 chalcogenide_T1_4 BaMoSe3 1.5 -1.401 yes yes \u2013 chalcogenide_T1_5 CsTaTe3 1.5 -1.295 yes yes \u2013 chalcogenide_T1_6 SrWSe3 1.5 4.343 no yes \u2013 chalcogenide_T2_1 EuMnTe3 2.5 -1.422 yes yes \u2013 chalcogenide_T2_2 LuVTe3 2.5 -1.088 yes yes \u2013 chalcogenide_T2_3 SmFeTe3 2.5 -1.290 yes yes \u2013 chalcogenide_T2_4 SmScTe3 2.5 -1.644 yes yes \u2013 chalcogenide_T2_5 ErVS3 2.5 -62.703 no yes \u2013 chalcogenide_T2_6 NdVTe3 2.5 -1.364 yes yes \u2013 chalcogenide_T3_1 NaNbTe3 3.5 -1.208 yes yes \u2013 chalcogenide_T3_2 SrGeS3 3.5 -251.214 no yes \u2013 chalcogenide_T3_3 EuCrTe3 3.5 -1.365 yes yes \u2013 chalcogenide_T3_4 BaGeSe3 3.5 -1.507 yes yes \u2013 chalcogenide_T3_5 NdMnSe3 3.5 -1.320 yes yes \u2013 chalcogenide_T3_6 SmVTe3 3.5 -1.307 yes yes \u2013 halide_T1_1 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_2 NaCoBr3 1.5 -177820821092.041 no yes \u2013 halide_T1_3 CsZnI3 1.5 -1.165 yes yes \u2013 halide_T1_4 KCoI3 1.5 -0.754 yes yes \u2013 halide_T1_5 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_6 RbZnI3 1.5 -1.136 yes yes \u2013 halide_T2_1 KMnI3 2.5 -1.083 yes yes \u2013 halide_T2_2 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_3 NaCuI3 2.5 -0.724 yes yes \u2013 halide_T2_4 CsPbI3 2.5 -1.302 yes yes \u2013 halide_T2_5 RbSnI3 2.5 -1.194 yes yes \u2013 halide_T2_6 KCuI3 2.5 -0.892 yes yes \u2013 halide_T3_1 KFeI3 3.5 -0.737 yes yes \u2013 halide_T3_2 RbFeI3 3.5 -0.773 yes yes \u2013 halide_T3_3 KNiI3 3.5 -0.883 yes yes \u2013 halide_T3_4 RbPbI3 3.5 -1.240 yes yes \u2013 halide_T3_5 RbCoI3 3.5 1.502 no yes \u2013 halide_T3_6 KPbI3 3.5 -1.186 yes yes \u2013"},{"location":"benchmarks/results/baseline-random.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-random/inverse_designpython scripts/benchmarks.py run perov5 --method baseline-random\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 8 s.
"},{"location":"benchmarks/results/baseline-screening.html","title":"Encoder screening","text":"Enumerates the compositions of each chemical family that pass its rules and keeps those that the published model's structure encoder predicts closest to each target, ranked with the generator's own selection score. No latent search.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth \u00b7 sha256 f9493781d5bb\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/baseline-screening.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.852 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.852 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 1.000 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.28 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit \u2013 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 0 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 46 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/baseline-screening.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 NdInO3 1.5 -2.353 yes yes \u2013 oxide_T1_2 HoNiO3 1.5 -1.619 yes yes \u2013 oxide_T1_3 ErNiO3 1.5 -1.612 yes yes \u2013 oxide_T1_4 YbNiO3 1.5 -1.232 yes yes \u2013 oxide_T1_5 EuNiO3 1.5 -1.360 yes yes \u2013 oxide_T1_6 NdScO3 1.5 -3.504 yes yes \u2013 oxide_T2_1 TmNiO3 2.5 -1.618 yes yes \u2013 oxide_T2_2 NdNiO3 2.5 -1.710 yes yes \u2013 oxide_T2_3 DyNiO3 2.5 -1.636 yes yes \u2013 oxide_T2_4 PrNiO3 2.5 -1.712 yes yes \u2013 oxide_T2_5 GdNiO3 2.5 -1.643 yes yes \u2013 oxide_T2_6 CeNiO3 2.5 -1.821 yes yes \u2013 oxide_T3_1 NdFeO3 3.5 -2.033 yes yes \u2013 oxide_T3_2 SmGaO3 3.5 -2.813 yes yes \u2013 oxide_T3_3 DyFeO3 3.5 -1.922 yes yes \u2013 oxide_T3_4 EuGaO3 3.5 -2.478 yes yes \u2013 oxide_T3_5 YbGaO3 3.5 -2.336 yes yes \u2013 oxide_T3_6 CeGaO3 3.5 -2.822 yes yes \u2013 chalcogenide_T1_1 RbTaTe3 1.5 -1.290 yes yes \u2013 chalcogenide_T1_2 GdMnSe3 1.5 -1.284 yes yes \u2013 chalcogenide_T1_3 TmMnSe3 1.5 -1.060 yes yes \u2013 chalcogenide_T1_4 KTaTe3 1.5 -1.276 yes yes \u2013 chalcogenide_T1_5 CeCoTe3 1.5 -1.410 yes yes \u2013 chalcogenide_T1_6 YbMnSe3 1.5 -1.286 yes yes \u2013 chalcogenide_T2_1 RbNbSe3 2.5 2.337 no yes \u2013 chalcogenide_T2_2 CaMoSe3 2.5 -1.089 yes yes \u2013 chalcogenide_T2_3 PrVS3 2.5 -40.822 no yes \u2013 chalcogenide_T2_4 TmVS3 2.5 -2084964401148.708 no yes \u2013 chalcogenide_T2_5 LuVS3 2.5 -162867401.493 no yes \u2013 chalcogenide_T2_6 CeVS3 2.5 -358782074876.452 no yes \u2013 chalcogenide_T3_1 LaVS3 3.5 -41.510 no yes \u2013 chalcogenide_T3_2 LaScSe3 3.5 -2.041 yes yes \u2013 chalcogenide_T3_3 LaMnSe3 3.5 -1.510 yes yes \u2013 chalcogenide_T3_4 SrSnSe3 3.5 5.797 no yes \u2013 chalcogenide_T3_5 KTaSe3 3.5 -1.263 yes yes \u2013 chalcogenide_T3_6 SrMoSe3 3.5 -1.256 yes yes \u2013 halide_T1_1 KFeI3 1.5 -0.737 yes yes \u2013 halide_T1_2 RbFeI3 1.5 -0.773 yes yes \u2013 halide_T1_3 KCoI3 1.5 -0.754 yes yes \u2013 halide_T1_4 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_5 KCuI3 1.5 -0.892 yes yes \u2013 halide_T1_6 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T2_1 NaCoI3 2.5 -0.586 yes yes \u2013 halide_T2_2 NaCoBr3 2.5 -623037439245549568.000 no yes \u2013 halide_T2_3 NaNiI3 2.5 -0.723 yes yes \u2013 halide_T2_4 RbMnI3 2.5 -1.123 yes yes \u2013 halide_T2_5 NaNiBr3 2.5 -0.987 yes yes \u2013 halide_T2_6 CsZnI3 2.5 -1.165 yes yes \u2013 halide_T3_1 NaCuI3 3.5 -0.724 yes yes \u2013 halide_T3_2 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_3 NaSnI3 3.5 -0.936 yes yes \u2013 halide_T3_4 RbZnI3 3.5 -1.136 yes yes \u2013 halide_T3_5 RbPbI3 3.5 -1.240 yes yes \u2013 halide_T3_6 RbCuI3 3.5 -0.922 yes yes \u2013"},{"location":"benchmarks/results/baseline-screening.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-screening/inverse_designpython scripts/benchmarks.py run perov5 --method baseline-screening\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 6 s.
"},{"location":"benchmarks/results/baseline-train-mean.html","title":"Training mean","text":"Predicts the training-set mean of each property.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-train-mean.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.566 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.744 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H -0.000 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 0.173 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 2.135 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 0.536 eV root-mean-square error of the direct band gap R\u00b2 gap -0.000 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.566 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated"},{"location":"benchmarks/results/baseline-train-mean.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method baseline-train-mean\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 22 s.
"},{"location":"benchmarks/results/meidnet-2k.html","title":"MEIDNet (published model)","text":"Early fusion with property-aware decoding, trained for 2,000 epochs with a contrastive warm-up over the first 1,200: the model of the paper and of the live Studio.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the outputs of the projection heads (what the decoders read) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth \u00b7 sha256 f9493781d5bb\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-2k.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.404 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.539 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.475 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 2.792 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 1.676 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 3.051 eV root-mean-square error of the direct band gap R\u00b2 gap -31.400 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.404 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (published model): formation enthalpy, predicted vs. DFT
MEIDNet (published model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (published model): direct band gap, predicted vs. DFT
MEIDNet (published model): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-2k.html#representation","title":"Representation","text":"metric value definition R@1 0.336 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.896 the same within the five nearest profiles cos 0.772 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.021 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.055 eV direct-band-gap error of the same probe L2 0.675 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs -0.008 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads 0.772 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-2k.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.611 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.962 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.660 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.52 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.056 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 18 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 53 candidates delivered out of the budget of 54 Valid 0.981 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 33 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-2k.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 LaMnO3 1.5 -2.467 yes no 0.00 oxide_T1_2 CaTiO3 1.5 -3.364 yes no 4.70 oxide_T1_3 LaAlO3 1.5 -3.587 yes no 6.30 oxide_T1_4 CsTaO3 1.5 -2.671 yes no 3.50 oxide_T1_5 BaTiO3 1.5 -3.364 yes no 4.00 oxide_T1_6 NaTaO3 1.5 -2.902 yes no 5.30 oxide_T2_1 LaCoO3 2.5 -2.084 yes no 0.00 oxide_T2_2 NaNbO3 2.5 -2.668 yes no 4.40 oxide_T2_3 BaMnO3 2.5 -1.919 yes no 0.00 oxide_T2_4 LaFeO3 2.5 -2.155 yes no 0.00 oxide_T2_5 KNbO3 2.5 -2.713 yes no 4.10 oxide_T2_6 CsNbO3 2.5 -2.475 yes no 2.90 oxide_T3_1 LaGaO3 3.5 -2.922 yes no 5.60 oxide_T3_2 BaZrO3 3.5 -3.513 yes no 6.30 oxide_T3_3 BaGeO3 3.5 -2.357 yes no 0.00 oxide_T3_4 CaVO3 3.5 -2.378 yes no 0.00 oxide_T3_5 BaSnO3 3.5 -2.476 yes no 2.50 oxide_T3_6 SrTiO3 3.5 -3.429 yes no 4.30 chalcogenide_T1_1 CsTaTe3 1.5 -1.295 yes yes \u2013 chalcogenide_T1_2 RbNbTe3 1.5 -1.355 yes yes \u2013 chalcogenide_T1_3 LaCoTe3 1.5 -1.518 yes yes \u2013 chalcogenide_T1_4 LaMnTe3 1.5 -1.546 yes yes \u2013 chalcogenide_T1_5 LaVTe3 1.5 -1.539 yes yes \u2013 chalcogenide_T1_6 BaSnTe3 1.5 -1.461 yes yes \u2013 chalcogenide_T2_1 CaTiTe3 2.5 -1.607 yes yes \u2013 chalcogenide_T2_2 BaTiTe3 2.5 -1.912 yes yes \u2013 chalcogenide_T2_3 BaZrTe3 2.5 -2.002 yes yes \u2013 chalcogenide_T2_4 NaNbTe3 2.5 -1.208 yes yes \u2013 chalcogenide_T2_5 LaCoS3 2.5 -2.544 yes yes \u2013 chalcogenide_T2_6 BaWS3 2.5 -594.364 no yes \u2013 chalcogenide_T3_1 BaMoTe3 3.5 -1.429 yes yes \u2013 chalcogenide_T3_2 LaCrTe3 3.5 -1.485 yes yes \u2013 chalcogenide_T3_3 SrTiTe3 3.5 -1.779 yes yes \u2013 chalcogenide_T3_4 CaMoTe3 3.5 -1.152 yes yes \u2013 chalcogenide_T3_5 BaMoS3 3.5 -512.082 no yes \u2013 chalcogenide_T3_6 NaTaTe3 3.5 -1.146 yes yes \u2013 halide_T1_1 RbZnI3 1.5 -1.136 yes yes \u2013 halide_T1_2 KSnI3 1.5 -1.142 yes yes \u2013 halide_T1_3 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T1_4 NaCoI3 1.5 -0.586 yes yes \u2013 halide_T1_5 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T1_6 KNiI3 1.5 -0.883 yes yes \u2013 halide_T2_1 NaZnI3 2.5 -0.928 yes yes \u2013 halide_T2_2 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_3 CsZnI3 2.5 -1.165 yes yes \u2013 halide_T2_4 RbSnI3 2.5 -1.194 yes yes \u2013 halide_T2_5 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T2_6 NaCuI3 2.5 -0.724 yes yes \u2013 halide_T3_1 RbFeI3 3.5 -0.773 yes yes \u2013 halide_T3_2 KMnI3 3.5 -1.083 yes yes \u2013 halide_T3_3 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_4 NaNiI3 3.5 -0.723 yes yes \u2013 halide_T3_5 NaFeI3 3.5 -0.553 yes yes \u2013"},{"location":"benchmarks/results/meidnet-2k.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-2k/property_predictionbenchmarks/runs/perov5/meidnet-2k/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-2k\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 39 min.
"},{"location":"benchmarks/results/meidnet-alignment-seed3.html","title":"MEIDNet (alignment training, seed 3)","text":"One of the seven alignment models: seed 3, the seed with the highest structure matching, chosen for the inverse-design task before any candidate was generated.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-05 by Anand Babu (UCLouvain) Alignment space the normalised encoder outputs, before the projection heads Checkpoint meidnet_paper_rerun_seed3.pth \u00b7 sha256 205de8b83390\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.611 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.872 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.830 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.32 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.250 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 8 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 47 candidates delivered out of the budget of 54 Valid 0.870 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 33 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 NdCrO3 1.5 -2.477 yes yes \u2013 oxide_T1_2 BaPbO3 1.5 -1.970 yes no 0.00 oxide_T1_3 SrSnO3 1.5 -2.475 yes no 3.40 oxide_T1_4 YbGaO3 1.5 -2.336 yes yes \u2013 oxide_T1_5 HoNiO3 1.5 -1.619 yes yes \u2013 oxide_T1_6 BaSnO3 1.5 -2.476 yes no 2.50 oxide_T2_1 SmNiO3 2.5 -1.699 yes yes \u2013 oxide_T2_2 SrZrO3 2.5 -3.478 yes no 6.60 oxide_T2_3 YbCoO3 2.5 -1.655 yes yes \u2013 oxide_T2_4 TbAlO3 2.5 -3.505 yes yes \u2013 oxide_T2_5 YbAlO3 2.5 -3.069 yes yes \u2013 oxide_T2_6 NdVO3 2.5 -2.559 yes yes \u2013 oxide_T3_1 NdFeO3 3.5 -2.033 yes yes \u2013 oxide_T3_2 LuAlO3 3.5 -3.417 yes yes \u2013 oxide_T3_3 CsNbO3 3.5 -2.475 yes no 2.90 oxide_T3_4 SrGeO3 3.5 -2.485 yes no 1.70 oxide_T3_5 RbNbO3 3.5 -2.632 yes no 3.90 oxide_T3_6 CaSnO3 3.5 -2.366 yes no 3.60 chalcogenide_T1_1 SrWSe3 1.5 4.343 no yes \u2013 chalcogenide_T1_2 SrSnSe3 1.5 5.797 no yes \u2013 chalcogenide_T1_3 YbVSe3 1.5 -1.316 yes yes \u2013 chalcogenide_T1_4 BaSnSe3 1.5 -1.413 yes yes \u2013 chalcogenide_T1_5 CaSnSe3 1.5 -1.012 yes yes \u2013 chalcogenide_T1_6 SmCoSe3 1.5 -1.105 yes yes \u2013 chalcogenide_T2_1 EuScSe3 2.5 -1.919 yes yes \u2013 chalcogenide_T2_2 CaWSe3 2.5 -1.033 yes yes \u2013 chalcogenide_T2_3 CaMoSe3 2.5 -1.089 yes yes \u2013 chalcogenide_T2_4 SrTiSe3 2.5 -2209239531516.471 no yes \u2013 chalcogenide_T2_5 SrGeSe3 2.5 -33544873571.535 no yes \u2013 chalcogenide_T2_6 GdVSe3 2.5 -1.323 yes yes \u2013 chalcogenide_T3_1 SmMnSe3 3.5 -1.258 yes yes \u2013 chalcogenide_T3_2 YbFeSe3 3.5 -1.180 yes yes \u2013 chalcogenide_T3_3 YbCoSe3 3.5 -339207415395.052 no yes \u2013 chalcogenide_T3_4 SmFeSe3 3.5 -1.139 yes yes \u2013 chalcogenide_T3_5 SmCrTe3 3.5 -1.267 yes yes \u2013 chalcogenide_T3_6 TbCoSe3 3.5 -9150744981.631 no yes \u2013 halide_T1_1 KPbI3 1.5 -1.186 yes yes \u2013 halide_T1_2 KSnI3 1.5 -1.142 yes yes \u2013 halide_T1_3 NaSnI3 1.5 -0.936 yes yes \u2013 halide_T1_4 KCoI3 1.5 -0.826 yes yes \u2013 halide_T1_5 CsPbI3 1.5 -1.302 yes yes \u2013 halide_T1_6 KFeI3 1.5 -0.737 yes yes \u2013 halide_T2_1 RbMnI3 2.5 -1.123 yes yes \u2013 halide_T2_2 KZnI3 2.5 -1.102 yes yes \u2013 halide_T3_1 KMnI3 3.5 -1.083 yes yes \u2013 halide_T3_2 KNiI3 3.5 -0.883 yes yes \u2013 halide_T3_3 NaNiI3 3.5 -0.723 yes yes \u2013"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-alignment-seed3/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-alignment-seed3\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 54 min.
"},{"location":"benchmarks/results/meidnet-alignment.html","title":"MEIDNet (alignment training, 7 seeds)","text":"The alignment training script (early fusion, contrastive weight raised over the first 1,500 of 2,200 epochs), trained seven times with seeds 0 to 6. Values are the mean over the seven models; \u00b1 is the standard deviation.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-05 by Anand Babu (UCLouvain) Runs 7 independent training runs (seeds); values are the mean \u00b1 the standard deviation Alignment space the normalised encoder outputs, before the projection heads Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-alignment.html#representation","title":"Representation","text":"metric value definition R@1 0.297 \u00b1 0.062 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.855 \u00b1 0.065 the same within the five nearest profiles cos 0.954 \u00b1 0.011 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.025 \u00b1 0.004 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.049 \u00b1 0.016 eV direct-band-gap error of the same probe L2 0.302 \u00b1 0.034 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.954 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads -0.978 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-alignment.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method meidnet-alignment\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 4 min.
"},{"location":"benchmarks/results/meidnet-alignment.html#notes","title":"Notes","text":"This model has no structure-only property head: its property decoder reads the joint latent, which contains the properties themselves. Prediction from the structure alone is therefore measured by the k-nearest-neighbour probe of this table, and the model is not listed under property prediction.
"},{"location":"benchmarks/results/meidnet-earlyfusion.html","title":"MEIDNet (first early-fusion model)","text":"The earliest ablation of the paper, without property-aware decoding.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the normalised encoder outputs, before the projection heads Checkpoint dual_autoencoder_clip_earlyfusion.pth \u00b7 sha256 59fc26f97d04\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-earlyfusion.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.522 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.698 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.119 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 13.469 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 11.998 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 13.492 eV root-mean-square error of the direct band gap R\u00b2 gap -632.529 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.522 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (first early-fusion model): formation enthalpy, predicted vs. DFT
MEIDNet (first early-fusion model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (first early-fusion model): direct band gap, predicted vs. DFT
MEIDNet (first early-fusion model): direct band gap (eV), predicted vs. DFT (3,785 test materials)051015051015DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-earlyfusion.html#representation","title":"Representation","text":"metric value definition R@1 0.028 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.131 the same within the five nearest profiles cos 0.655 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.051 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.064 eV direct-band-gap error of the same probe L2 0.822 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.655 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads -0.979 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-earlyfusion.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.648 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.944 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.704 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.29 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.188 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 16 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 35 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-earlyfusion.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 CaZrO3 1.5 -3.347 yes no 6.70 oxide_T1_2 NaTaO3 1.5 -2.902 yes no 5.30 oxide_T1_3 CaTiO3 1.5 -3.364 yes no 4.70 oxide_T1_4 SrZrO3 1.5 -3.478 yes no 6.60 oxide_T1_5 SrGeO3 1.5 -2.485 yes no 1.70 oxide_T1_6 BaTiO3 1.5 -3.364 yes no 4.00 oxide_T2_1 LaScO3 2.5 -3.629 yes no 6.40 oxide_T2_2 BaMnO3 2.5 -1.919 yes no 0.00 oxide_T2_3 CaGeO3 2.5 -2.460 yes no 2.70 oxide_T2_4 SmCoO3 2.5 -1.977 yes yes \u2013 oxide_T2_5 SrHfO3 2.5 -3.645 yes no 7.20 oxide_T2_6 SrMnO3 2.5 -1.992 yes no 0.00 oxide_T3_1 SmMnO3 3.5 -2.318 yes yes \u2013 oxide_T3_2 LaMnO3 3.5 -2.467 yes no 0.00 oxide_T3_3 KTaO3 3.5 -2.930 yes no 5.00 oxide_T3_4 LaCoO3 3.5 -2.084 yes no 0.00 oxide_T3_5 CaHfO3 3.5 -3.529 yes no 7.30 oxide_T3_6 CsTaO3 3.5 -2.671 yes no 3.50 chalcogenide_T1_1 SmScSe3 1.5 -1.801 yes yes \u2013 chalcogenide_T1_2 LaMnSe3 1.5 -1.510 yes yes \u2013 chalcogenide_T1_3 NaTaSe3 1.5 -1.125 yes yes \u2013 chalcogenide_T1_4 SrHfSe3 1.5 -1.938 yes yes \u2013 chalcogenide_T1_5 SrZrSe3 1.5 3.303 no yes \u2013 chalcogenide_T1_6 CaTiSe3 1.5 130210516176.396 no yes \u2013 chalcogenide_T2_1 CaZrSe3 2.5 -1.736 yes yes \u2013 chalcogenide_T2_2 SmMnSe3 2.5 -1.258 yes yes \u2013 chalcogenide_T2_3 LaScSe3 2.5 -2.041 yes yes \u2013 chalcogenide_T2_4 RbTaSe3 2.5 -1.273 yes yes \u2013 chalcogenide_T2_5 KTaSe3 2.5 -1.263 yes yes \u2013 chalcogenide_T2_6 CaSnSe3 2.5 -1.012 yes yes \u2013 chalcogenide_T3_1 CaHfSe3 3.5 -1.737 yes yes \u2013 chalcogenide_T3_2 TmMnSe3 3.5 -1.060 yes yes \u2013 chalcogenide_T3_3 BaHfSe3 3.5 -2.068 yes yes \u2013 chalcogenide_T3_4 YbFeSe3 3.5 -1.180 yes yes \u2013 chalcogenide_T3_5 SrSnSe3 3.5 5.797 no yes \u2013 chalcogenide_T3_6 TmCoSe3 3.5 -0.922 yes yes \u2013 halide_T1_1 NaCuI3 1.5 -0.724 yes yes \u2013 halide_T1_2 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_3 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T1_4 KMnI3 1.5 -1.083 yes yes \u2013 halide_T1_5 NaZnI3 1.5 -0.928 yes yes \u2013 halide_T1_6 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T2_1 KCuI3 2.5 -0.892 yes yes \u2013 halide_T2_2 NaCoI3 2.5 -0.586 yes yes \u2013 halide_T2_3 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_4 KPbI3 2.5 -1.186 yes yes \u2013 halide_T2_5 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T2_6 KNiI3 2.5 -0.883 yes yes \u2013 halide_T3_1 CsZnI3 3.5 -1.165 yes yes \u2013 halide_T3_2 KZnI3 3.5 -1.102 yes yes \u2013 halide_T3_3 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_4 NaFeI3 3.5 -0.553 yes yes \u2013 halide_T3_5 KFeI3 3.5 -0.737 yes yes \u2013 halide_T3_6 RbZnI3 3.5 -1.136 yes yes \u2013"},{"location":"benchmarks/results/meidnet-earlyfusion.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-earlyfusion/property_predictionbenchmarks/runs/perov5/meidnet-earlyfusion/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-earlyfusion\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 37 min.
"},{"location":"benchmarks/results/meidnet-propertyaware.html","title":"MEIDNet (shorter training)","text":"The architecture of the published model, trained for fewer epochs.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the outputs of the projection heads (what the decoders read) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware.pth \u00b7 sha256 b1a672d7e28c\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-propertyaware.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 1.009 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 1.391 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H -2.495 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 3.292 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 1.978 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 3.392 eV root-mean-square error of the direct band gap R\u00b2 gap -39.038 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 1.009 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (shorter training): formation enthalpy, predicted vs. DFT
MEIDNet (shorter training): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (shorter training): direct band gap, predicted vs. DFT
MEIDNet (shorter training): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-propertyaware.html#representation","title":"Representation","text":"metric value definition R@1 0.297 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.848 the same within the five nearest profiles cos 0.480 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.024 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.047 eV direct-band-gap error of the same probe L2 1.019 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.003 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads 0.480 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-propertyaware.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.556 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.923 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.654 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.50 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.056 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 18 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 52 candidates delivered out of the budget of 54 Valid 0.963 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 30 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-propertyaware.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 CsTaO3 1.5 -2.671 yes no 3.50 oxide_T1_2 LaScO3 1.5 -3.629 yes no 6.40 oxide_T1_3 LaFeO3 1.5 -2.155 yes no 0.00 oxide_T1_4 BaSnO3 1.5 -2.476 yes no 2.50 oxide_T1_5 KTaO3 1.5 -2.930 yes no 5.00 oxide_T1_6 SrVO3 1.5 -2.416 yes no 0.00 oxide_T2_1 BaZrO3 2.5 -3.513 yes no 6.30 oxide_T2_2 RbNbO3 2.5 -2.632 yes no 3.90 oxide_T2_3 CaHfO3 2.5 -3.529 yes no 7.30 oxide_T2_4 LaMnO3 2.5 -2.467 yes no 0.00 oxide_T2_5 SrHfO3 2.5 -3.645 yes no 7.20 oxide_T2_6 SrGeO3 2.5 -2.485 yes no 1.70 oxide_T3_1 CaGeO3 3.5 -2.460 yes no 2.70 oxide_T3_2 CsNbO3 3.5 -2.475 yes no 2.90 oxide_T3_3 NaTaO3 3.5 -2.902 yes no 5.30 oxide_T3_4 BaPbO3 3.5 -1.970 yes no 0.00 oxide_T3_5 LaCoO3 3.5 -2.084 yes no 0.00 oxide_T3_6 BaTiO3 3.5 -3.364 yes no 4.00 chalcogenide_T1_1 LaScTe3 1.5 -1.884 yes yes \u2013 chalcogenide_T1_2 BaGeS3 1.5 -656.803 no yes \u2013 chalcogenide_T1_3 LaVTe3 1.5 -1.539 yes yes \u2013 chalcogenide_T1_4 BaWS3 1.5 3221614596037021.000 no yes \u2013 chalcogenide_T1_5 CaWTe3 1.5 -1.046 yes yes \u2013 chalcogenide_T1_6 BaZrTe3 1.5 -2.002 yes yes \u2013 chalcogenide_T2_1 RbNbTe3 2.5 -1.355 yes yes \u2013 chalcogenide_T2_2 CsTaTe3 2.5 -1.295 yes yes \u2013 chalcogenide_T2_3 LaCrTe3 2.5 -1.485 yes yes \u2013 chalcogenide_T2_4 KNbTe3 2.5 -1.338 yes yes \u2013 chalcogenide_T2_5 BaWTe3 2.5 -1.310 yes yes \u2013 chalcogenide_T2_6 LaFeTe3 2.5 -1.514 yes yes \u2013 chalcogenide_T3_1 CaGeTe3 3.5 -1.081 yes yes \u2013 chalcogenide_T3_2 CaMoS3 3.5 -2720.939 no yes \u2013 chalcogenide_T3_3 NaTaTe3 3.5 -1.146 yes yes \u2013 chalcogenide_T3_4 LaCoS3 3.5 -2.544 yes yes \u2013 chalcogenide_T3_5 CaWS3 3.5 -33543487.666 no yes \u2013 chalcogenide_T3_6 CaHfTe3 3.5 -1.617 yes yes \u2013 halide_T1_1 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_2 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_3 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T1_4 CsZnI3 1.5 -1.165 yes yes \u2013 halide_T1_5 RbSnI3 1.5 -1.194 yes yes \u2013 halide_T1_6 RbPbI3 1.5 -1.240 yes yes \u2013 halide_T2_1 CsPbI3 2.5 -1.302 yes yes \u2013 halide_T2_2 KPbI3 2.5 -1.186 yes yes \u2013 halide_T2_3 RbFeI3 2.5 -0.773 yes yes \u2013 halide_T2_4 KFeI3 2.5 -0.737 yes yes \u2013 halide_T2_5 KZnI3 2.5 -1.102 yes yes \u2013 halide_T2_6 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T3_1 NaZnI3 3.5 -0.928 yes yes \u2013 halide_T3_2 KCuI3 3.5 -0.892 yes yes \u2013 halide_T3_3 NaMnI3 3.5 -0.900 yes yes \u2013 halide_T3_4 NaCoI3 3.5 -0.586 yes yes \u2013"},{"location":"benchmarks/results/meidnet-propertyaware.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-propertyaware/property_predictionbenchmarks/runs/perov5/meidnet-propertyaware/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-propertyaware\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 43 min.
"},{"location":"benchmarks/results/paper-candidates.html","title":"Candidates shipped with the paper, screened here","text":"The 26 candidate structures in examples/perov5/paper_results, relaxed with MACE-MP-0 and scored with the protocol's stability, uniqueness and novelty criteria. Their targets and budget are those of the paper, so the record is not ranked.
field value Dataset Perov-5, protocolpaper Type model Inputs structure, property:heat_all, property:dir_gap Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-05 by Anand Babu (UCLouvain) Links paper \u00b7 code"},{"location":"benchmarks/results/paper-candidates.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.654 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 1.000 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 0.923 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.692 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.27 eV/atom median MACE-MP-0 formation energy of the delivered candidates Delivered 26 candidates delivered out of the budget of 54 \u0394Hf\u00b7U\u00b7N count 17 candidates that pass the formation-energy filter and are unique and novel"},{"location":"benchmarks/results/paper-candidates.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) chalcogenide_chalcogenide_T1_R1_2 LaCrTe3 -1.485 yes yes \u2013 chalcogenide_chalcogenide_T1_R1_3 NaNbTe3 -1.208 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_1 KNbTe3 -1.338 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_2 BaTe3W -1.310 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_3 BaTe3Mo -1.429 yes yes \u2013 halide_halide_T1_R1_1 NaMnI3 -0.900 yes yes \u2013 halide_halide_T1_R1_2 NaNiI3 -0.723 yes yes \u2013 halide_halide_T1_R1_3 RbMnI3 -1.123 yes yes \u2013 halide_halide_T1_R1_4 NaNiI3 -0.723 yes yes \u2013 halide_halide_T1_R2_4 NaZnI3 -0.928 yes yes \u2013 halide_halide_T2_R1_1 RbPbI3 -1.240 yes yes \u2013 halide_halide_T2_R1_2 KMnI3 -1.083 yes yes \u2013 halide_halide_T2_R1_3 NaCoI3 -0.586 yes yes \u2013 halide_halide_T2_R1_4 NaSnI3 -0.936 yes yes \u2013 halide_halide_T3_R1_1 CsMnI3 -1.160 yes yes \u2013 halide_halide_T3_R1_2 NaFeI3 -0.553 yes yes \u2013 halide_halide_T3_R2_3 CsPbI3 -1.302 yes yes \u2013 halide_halide_T3_R2_4 RbSnI3 -1.194 yes yes \u2013 oxide_oxide_T1_R1_1 SrZrO3 -3.478 yes no \u2013 oxide_oxide_T1_R1_2 LaMnO3 -2.467 yes no \u2013 oxide_oxide_T1_R1_3 LaScO3 -3.629 yes no \u2013 oxide_oxide_T1_R1_4 NaTaO3 -2.902 yes no \u2013 oxide_oxide_T2_R1_1 LaMnO3 -2.467 yes no \u2013 oxide_oxide_T2_R1_2 BaMnO3 -1.919 yes no \u2013 oxide_oxide_T2_R1_3 SrVO3 -2.416 yes no \u2013 oxide_oxide_T2_R1_4 BaPbO3 -1.970 yes no \u2013"},{"location":"benchmarks/results/paper-candidates.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/paper-candidates/inverse_designpython scripts/benchmarks.py paper-candidates perov5\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only.
"},{"location":"benchmarks/results/paper-inverse-design.html","title":"MEIDNet (paper): inverse design","text":"The inverse-design campaign reported in the paper: candidates generated from property targets with the published model, screened for stability, uniqueness and novelty, and checked by DFT.
field value Dataset Perov-5, protocolpaper Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5 train (11,356) Status Reported in the paper Evidence level DFT validated Added 2026-05-29 by Anand Babu (UCLouvain) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/paper-inverse-design.html#inverse-design","title":"Inverse design","text":"metric value definition Generated 140 candidates generated (reported in the paper) \u0394Hf\u00b7U\u00b7N count 19 candidates that pass the formation-energy filter and are unique and novel \u0394Hf\u00b7U\u00b7N 0.136 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen"},{"location":"benchmarks/results/paper-inverse-design.html#evidence","title":"Evidence","text":"examples/perov5/paper_results/Numbers quoted from the paper: 140 candidates generated from property targets, 19 of them stable, unique and novel (13.6%). The paper's targets and budget differ from the protocol, so this record is not ranked. The candidates shipped with the paper (examples/perov5/paper_results) are screened with the protocol's criteria in the record 'Candidates shipped with the paper, screened here'.
"},{"location":"community/index.html","title":"Community results","text":"Every method record, newest first. Contribute yours.
date method dataset tasks status 2026-10-05 MEIDNet (alignment training, seed 3) Perov-5 inverse design Computed here 2026-10-05 MEIDNet (alignment training, 7 seeds) Perov-5 representation Computed here 2026-10-05 Candidates shipped with the paper, screened here Perov-5 inverse design Computed here 2026-10-03 Chance level Perov-5 representation Computed here 2026-10-03 Composition k-NN Perov-5 property prediction, representation Computed here 2026-10-03 Random sampling Perov-5 inverse design Computed here 2026-10-03 Encoder screening Perov-5 inverse design Computed here 2026-10-03 Training mean Perov-5 property prediction Computed here 2026-10-03 MEIDNet (published model) Perov-5 property prediction, representation, inverse design Computed here 2026-10-03 MEIDNet (first early-fusion model) Perov-5 property prediction, representation, inverse design Computed here 2026-10-03 MEIDNet (shorter training) Perov-5 property prediction, representation, inverse design Computed here 2026-05-29 MEIDNet (paper): inverse design Perov-5 inverse design Reported in the paper"},{"location":"community/contribute.html","title":"Contribute a method","text":"The benchmarks rank methods under fixed protocols. Any model can take part: the protocol defines the data, the targets and the metrics, and the scoring code evaluates the outputs of a model whatever produced them. Submissions go through GitHub, so every number has a public record and a reviewer.
"},{"location":"community/contribute.html#1-produce-the-outputs","title":"1. Produce the outputs","text":"Each task of a protocol asks for one kind of output. For Perov-5 (protocol perov5-v1.1):
predictions.csv: id (the dataset's material_id), pred_heat_all, pred_dir_gap inverse design 54 candidate structures: 6 per target and chemical family candidates.csv: id, variant, target, formula, elements, cif; the CIFs next to it representation latent vectors of the test materials computed by run for MEIDNet checkpoints; for other models, contact the maintainer The targets, the families and the budget are listed in the protocol.
"},{"location":"community/contribute.html#2-score-them","title":"2. Score them","text":"python scripts/benchmarks.py score perov5 --task property_prediction --predictions predictions.csv\npython scripts/benchmarks.py score perov5 --task inverse_design --candidates my_run/candidates.csv\n score prints the metrics of the task as JSON. Inverse design relaxes every candidate with MACE-MP-0 first (stability.csv and scored.csv are written next to candidates.csv); if MACE is installed in another Python environment, pass --mlip-python or set MEIDNET_MLIP_PYTHON.
A MEIDNet checkpoint can run every task at once:
python scripts/benchmarks.py run perov5 --method meidnet-2k\n"},{"location":"community/contribute.html#3-write-the-record","title":"3. Write the record","text":"Copy benchmarks/submissions/_template.json to benchmarks/submissions/<dataset>/<method>.json and fill it in:
protocol the dataset's protocol version, for example perov5-v1.1 method name, type (model or baseline), a one-sentence description, parameters, training data, links to paper, code and weights method.test_in_training true if the training data included the test split; the row is then marked, because its test scores are not held-out method.alignment_space for the representation task: encoder or projection, the space in which the model's alignment loss compares the two latents results per task, the JSON printed by score spread, n_runs optional: the standard deviation of each metric over several training runs (seeds), and their number; results then holds the means artifacts per task, a public link to the folder with the outputs (predictions or candidates with their CIFs) validation_level mlip_validated for inverse design scored with the MLIP; dft_validated only with public DFT outputs in evidence status community_submitted Then run python scripts/benchmarks.py validate, which checks every task and metric name against the protocol, and open a pull request (the template has a checklist). The maintainer re-scores the outputs with the same code; when the numbers agree, the record is marked as computed here.
If you prefer not to open a pull request, the issue template Benchmark submission asks for the same information.
"},{"location":"community/contribute.html#add-a-dataset","title":"Add a dataset","text":"A dataset becomes a benchmark when its file in benchmarks/datasets/ has a protocol section:
data_dir, with train.csv, val.csv and test.csv) and which split each task uses. Results are only compared within one dataset and one protocol version.id, a name, a one-sentence summary, its settings (for inverse design: the family, its variants, the property targets, the candidate budget and the stability threshold) and the headline metric that orders the leaderboard.id, a short label, the unit, whether higher or lower is better, the number of digits shown and a one-sentence definition. Metrics marked \"show\": false appear on each method's page only.benchmarks/datasets/perov5.json is the template. Changing the targets, the budget or a definition makes a new protocol version; earlier records keep theirs.
test_in_training set.score, which implements the definitions of the protocol.dft_validated needs the DFT outputs.Submissions are reviewed by the author of MEIDNet.
"},{"location":"community/help.html","title":"Getting help","text":"Ask PRISM, the button at the bottom right of every page, collects the help in one place: short answers by topic with the pages to read, a form for questions and a form for bug reports.
You want to Where Ask how to do something, discuss a dataset or a result Discussions of the Space Report something that does not work as documented GitHub issues Submit a benchmark result Contribute a resultQuestions are answered in public, so that the answer helps the next person with the same question. Answers that come up repeatedly are added to the documentation.
"},{"location":"community/help.html#what-to-include","title":"What to include","text":"Ask PRISM sends nothing by itself. It opens Hugging Face or GitHub in a new tab with the text pre-filled, and you can edit or delete any line before posting. Your table, structures and files are never included; if a problem depends on them, describe the columns and a few rows, or share a small example only if you choose to.
"},{"location":"community/help.html#common-questions","title":"Common questions","text":"Which modalities does MEIDNet use? Crystal structures together with any number of scalar properties (for example a band gap, a formation enthalpy or your own columns). Spectra such as XRD or DOS, images and text are on the roadmap. See Capabilities.
What should my dataset look like? One table with one row per material, a crystal structure (CIF) for each row and one numeric column per property: What data do I need? and Bring your own dataset.
Why is my upload or training limited on the hosted Studio? The public Space is shared, so uploads, rows and epochs are capped. For larger datasets, install MEIDNet and run it on your own computer: 5-minute quickstart.
Are the predicted properties reliable? They are the model's estimates. Targets outside the range of the training data are extrapolations; confirm candidates with calculations or experiments: Interpreting a candidate and Screen stability with MACE.
"},{"location":"examples/double-perovskite.html","title":"Double perovskites A\u2082BB\u2032X\u2086","text":"meidnet/families/double_perovskite_a2bbx6.yaml is a second family written with the same ingredients as the perovskite one. It shows what a family file can express:
lattice: fcc_primitive: edge a/\u221a2, angles 60\u00b0), A at (\u00bc,\u00bc,\u00bc) and (\u00be,\u00be,\u00be), B at the origin, B\u2032 at (\u00bd,\u00bd,\u00bd), six X;a = 2 (r_B + r_B\u2032 + 2 r_X) (one B\u2013X\u2013B\u2032 chain per half cell edge);tolerance_factor: {A: A, B: [B1, B2], X: X}.meidnet families double_perovskite_a2bbx6 --variant halide\n Rock-salt ordered double perovskite A2BB'X6 (Fm-3m) [variant: halide]\n formula pattern: A2B1B2X6 (10 atoms per cell)\n A: 9 candidate elements - Large cation in the cuboctahedral cavity\n B1: 15 candidate elements - First octahedral cation (usually +1 or +2)\n B2: 20 candidate elements - Second octahedral cation (usually +3 or +4)\n X: 4 candidate elements - Anion shared between neighbouring B and B' octahedra\n The halide variant has 10,800 compositions; 305 pass every rule (Cs\u2082AgBiI\u2086 among them). Candidates are built in the 10-atom primitive cell; the symmetry refinement step writes them out as the conventional 40-atom Fm-3m cell, which is what the CIF files contain.
"},{"location":"examples/double-perovskite.html#using-it","title":"Using it","text":"A model for this family must be trained on double-perovskite structures aligned to the prototype:
family: double_perovskite_a2bbx6\ndata:\n table: double_perovskites.csv\n properties: [{column: band_gap, unit: eV}]\n align_to_prototype: true\ngeneration:\n family: double_perovskite_a2bbx6\n variant: halide\n objectives: [{property: band_gap}]\n targets: [{band_gap: 2.0}]\n The published checkpoint
The Perov-5 model was trained on 5-atom ABX\u2083 cells. The Studio will score double-perovskite compositions with it (the encoder accepts any cell up to 20 atoms), but those predictions are far outside its training distribution \u2014 a demonstration of the mechanics, not a result.
"},{"location":"examples/perov5.html","title":"Perov-5 \u2014 the paper's experiment","text":"The published MEIDNet model: cubic ABX\u2083 perovskites from the Perov-5 dataset (CDVAE split of Castelli et al.), properties formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV).
meidnet demo --family halide --band-gap 2.0 # or: oxide, chalcogenide, nitride\nmeidnet studio # explore it live\n The three checkpoints from the paper are in checkpoints/; ..._propertyaware_2k.pth is the recommended one. meidnet info checkpoints/<file> describes any of them. They load into MEIDNet 2 unchanged.
meidnet download-data # train/val/test CSVs \u2192 data/perov5/ (18,928 rows, 18 MB)\nmeidnet train examples/perov5/meidnet.yaml # 200 epochs \u2248 1 h on a laptop GPU\nmeidnet generate examples/perov5/meidnet.yaml\n examples/perov5/meidnet.yaml reproduces the paper's settings, including two that differ from MEIDNet 2's defaults: normalize: false for both properties and align_to_prototype: false (atoms in file order), and the 1200-epoch alignment ramp.
examples/perov5/paper_results/ holds the 26 CIFs (halide, oxide, chalcogenide) reported in the paper. meidnet screen examples/perov5/paper_results --train-csv data/perov5/train.csv recomputes their MACE stability.
tests/legacy_v1/ contains the v1.0 code byte for byte. pytest -m slow runs it and MEIDNet 2 on the same targets and asserts identical CIFs, predictions and file names.
This page is generated from the code. Available: in this release. Benchmarked: used by a benchmark result reproduced here. Planned: on the roadmap, not yet implemented.
"},{"location":"explore/capabilities.html#modalities","title":"Modalities","text":"modality status how Crystal structure (CIF, up tomax_sites atoms, default 20) Benchmarked an equivariant graph encoder; structures are aligned to the family prototype Scalar properties (any number of numeric columns) Benchmarked one property encoder; every column becomes a target you can set Published properties: direct band gap (dir_gap), formation enthalpy (heat_all) Benchmarked the shipped Perov-5 checkpoint Vector modalities: binned XRD, DOS Planned an encoder per vector modality into the shared latent space Spectra (Raman, UV-Vis) Planned as vector modalities Text (descriptions, synthesis) Planned a text encoder into the shared latent space Images (microscopy) Planned an image encoder into the shared latent space"},{"location":"explore/capabilities.html#fusion","title":"Fusion","text":"The structure latent and the property latent of a material are averaged into the joint latent (meidnet/model.py); the paper calls this early fusion. The two latents are first aligned by a contrastive loss whose weight increases over training.contrastive_warmup_epochs (the curriculum of the paper). Other fusion schemes are compared in the Architecture Atlas.
double_perovskite_a2bbx6 - Rock-salt ordered double perovskite A2BB'X6 (Fm-3m) halide, oxide A, B1, B2, X perovskite_abx3 - Cubic ABX3 perovskite (Pm-3m) oxide, halide, chalcogenide, nitride A, B, X Any other prototype family can be described in a family file.
"},{"location":"explore/capabilities.html#rules-hard-constraints","title":"Rules (hard constraints)","text":"bond_window - Sensible {from}\u2013{to} bondscharge_neutrality - Charge balancemin_distance - No overlapping atomsoctahedral_factor - Octahedral factorproperty_window - Predicted {property} windowtolerance_factor - Goldschmidt tolerance factorcubic_cell - Pulls the decoded cell towards a cube of the family's reference volume.entropy_bonus - Rewards uncertainty early in a round so the search explores (fades to zero).group_consistency - Sites of the same group should agree on their element (ramps up during a round).prototype_alignment - Pulls decoded positions onto the prototype's site positions.short_distance_penalty - Large penalty if any two decoded atoms come closer than min.site_repulsion - Short-range exponential repulsion between decoded atoms.site_separation - Keeps decoded atoms from collapsing onto each other (1/distance).soft_charge - Expected total charge of the most likely composition should be zero (ramps up during a round).tolerance_penalty - Soft version of the Goldschmidt tolerance-factor window, using the most likely elements.meidnet screen: MACE-MP-0 relaxation, a formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements; not the energy above the convex hull) and the unique / novel counts (optional pip install meidnet[stability]). DFT and experiments are yours: the benchmark evidence ladder records them.Where to find training data and realistic targets: computed (DFT) databases give structures with properties, experimental databases give measured values and refined structures. MEIDNet needs, per material, one crystal structure plus one or more scalar properties (what data do I need?); the last column says how far each source is from that.
Pick an application:
What to look for: band gap in the 1.1-1.8 eV window (single junction) or 1.6-2.0 eV (tandem top cell), direct gap, strong absorption, formation energy / hull distance, defect tolerance, device records for the experimental side
As MEIDNet targets: dir_gap or any gap column + heat_all / e_above_hull; family = perovskite_abx3 (halide, oxide, chalcogenide), or your own prototype
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Perovskite Database Project experimental more than 42,000 solar-cell devices device-level records: composition, architecture, efficiency, Voc, Jsc, FF, stability, processing conditions, from the literature no crystal structures per record: use it to choose realistic gap / composition targets and to check candidates against what has been made Hybrid organic-inorganic perovskites (Kim et al. 2017) computed 1,346 HOIPs DFT structures, band gaps and dielectric constants of ABX3 hybrid perovskites ready, but organic A-site cations need a family file with molecular site groups (not shipped) Experimental band gaps (Zhuo et al. 2018) experimental 6,354 compounds measured band gaps by composition, with the matbench_expt_gap subset as a standard task targets and validation of predicted gaps; no structures Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#semiconductor-physics","title":"Semiconductor physics","text":"What to look for: band gaps at several levels of theory (PBE, HSE, mBJ) and experimental, effective masses, dielectric constants, carrier mobility proxies, band edges, phonons
As MEIDNet targets: gap, effective mass or dielectric constant as scalar targets; keep the level of theory consistent inside one table
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data Matbench computed 13 tasks standardised property-prediction tasks (band gap, formation energy, moduli, dielectric constant, ...) with fixed cross-validation folds use the structure-based tasks as property tables matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Hybrid organic-inorganic perovskites (Kim et al. 2017) computed 1,346 HOIPs DFT structures, band gaps and dielectric constants of ABX3 hybrid perovskites ready, but organic A-site cations need a family file with molecular site groups (not shipped) Experimental band gaps (Zhuo et al. 2018) experimental 6,354 compounds measured band gaps by composition, with the matbench_expt_gap subset as a standard task targets and validation of predicted gaps; no structures QMOF computed about 20,000 MOFs DFT-optimised MOF structures with band gaps and charges beyond today's cell-size limit; targets and descriptors Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#batteries-and-ionic-conductors","title":"Batteries and ionic conductors","text":"What to look for: ionic conductivity, migration barriers, voltage, stability window, volume change, hull distance
As MEIDNet targets: formation energy + conductivity (log scale) as targets; families with a mobile-ion site group
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Liverpool Ionic Conductivity Database (LiIonDB) experimental about 800 measurements experimental Li-ion conductivities with temperature and the reported phase, from the literature targets (log conductivity); join with COD / Materials Project structures Materials Project battery explorer computed about 4,000 intercalation electrodes average voltage, capacity, volume change and stability of intercalation electrodes computed from the MP structures ready: voltage and capacity as targets on the host-structure family Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#thermoelectrics","title":"Thermoelectrics","text":"What to look for: Seebeck coefficient, electrical and thermal conductivity, zT, carrier concentration and temperature; experimental data is temperature-resolved
As MEIDNet targets: zT or Seebeck at a fixed temperature as a scalar target
database kind size features use with MEIDNet AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets UCSB thermoelectrics (Gaultois et al.) experimental about 1,100 compounds experimental Seebeck, resistivity, thermal conductivity, zT at a given temperature targets; join with structures Starrydata experimental tens of thousands of digitised curves temperature-dependent thermoelectric and other property curves digitised from papers targets at a chosen temperature Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#catalysis-and-surfaces","title":"Catalysis and surfaces","text":"What to look for: adsorption energies, reaction barriers, surface energies, work functions
As MEIDNet targets: bulk descriptors (formation energy, d-band proxies) only - MEIDNet works on bulk prototypes, not slabs
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table Open Catalyst (OC20 / OC22) computed more than 1,300,000 relaxations adsorbate-surface relaxations with energies and forces; the standard catalysis ML benchmark surfaces are out of MEIDNet's scope; use the bulk subsets as structure sources Catalysis-Hub computed more than 100,000 reaction energies adsorption and reaction energies on surfaces with the DFT settings used descriptors only Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#magnetism-and-superconductivity","title":"Magnetism and superconductivity","text":"What to look for: magnetic moment and ordering, Curie / Neel temperature, superconducting Tc with the structure it belongs to
As MEIDNet targets: total magnetization per formula unit, Tc (log scale) as scalar targets
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally SuperCon (NIMS) and 3DSC experimental about 16,000 Tc entries; 3DSC links 5,700 to structures experimental superconducting critical temperatures; 3DSC matches them to ICSD / Materials Project structures 3DSC is ready (structure + Tc); use log Tc as the target MAGNDATA (Bilbao) experimental about 2,000 magnetic structures experimentally determined commensurate and incommensurate magnetic structures structures with magnetic ordering; join with moments as targets"},{"location":"explore/databases.html#mechanical-dielectric-and-piezoelectric","title":"Mechanical, dielectric and piezoelectric","text":"What to look for: bulk and shear moduli, hardness, dielectric tensor, piezoelectric coefficients, phonon stability
As MEIDNet targets: bulk modulus, dielectric constant or a piezoelectric scalar as targets
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables Matbench computed 13 tasks standardised property-prediction tasks (band gap, formation energy, moduli, dielectric constant, ...) with fixed cross-validation folds use the structure-based tasks as property tables matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#2d-materials","title":"2D materials","text":"What to look for: exfoliation energy, gap, magnetic state, dynamic stability of monolayers
As MEIDNet targets: a 2D prototype family (e.g. MXene or TMD) with gap and exfoliation energy as targets
database kind size features use with MEIDNet JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family 2DMatPedia computed about 6,000 monolayers exfoliation energy, band gap, magnetic moment of monolayers derived from bulk databases ready for a 2D prototype family"},{"location":"explore/databases.html#porous-materials-and-mofs","title":"Porous materials and MOFs","text":"What to look for: pore geometry, gas uptake, band gap of the framework, stability
As MEIDNet targets: frameworks exceed MEIDNet's cell-size limit today (max_sites); use the property tables to set targets and the descriptors as inspiration
database kind size features use with MEIDNet Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files Cambridge Structural Database (CSD) experimental more than 1,300,000 organic and metal-organic structures experimental molecular and MOF crystal structures beyond today's cell-size limit; descriptors only QMOF computed about 20,000 MOFs DFT-optimised MOF structures with band gaps and charges beyond today's cell-size limit; targets and descriptors CoRE MOF experimental about 14,000 experimental MOFs computation-ready experimental MOF structures with pore descriptors beyond today's cell-size limit"},{"location":"explore/databases.html#generative-model-benchmarks","title":"Generative-model benchmarks","text":"What to look for: fixed splits used by CDVAE, DiffCSP, MatterGen and MEIDNet; validity, uniqueness, novelty and stability metrics
As MEIDNet targets: the Perov-5 split is the published MEIDNet benchmark; MP-20 and Carbon-24 test structure representation
database kind size features use with MEIDNet OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) GNoME (DeepMind) computed about 380,000 stable crystals structures predicted stable with DFT energies and hull distances; no electronic properties structures only: join with a computed property before training Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data CDVAE splits (Perov-5, MP-20, Carbon-24) computed 18,928 / 45,229 / 10,153 structures fixed train / val / test splits used by generative-model papers; Perov-5 carries formation energy and band gap, the others energies only ready: the format meidnet reads directly (id, cif, property columns)"},{"location":"explore/databases.html#all-databases","title":"All databases","text":"database kind access licence applications Materials Project computed web, mp-api (free key) CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric, Catalysis and surfaces OQMD computed web, REST API, full download open Solar cells and photovoltaics, Semiconductor physics, Magnetism and superconductivity, Generative-model benchmarks AFLOW computed web, REST / AFLUX API open Semiconductor physics, Mechanical, dielectric and piezoelectric, Thermoelectrics, Magnetism and superconductivity JARVIS-DFT (NIST) computed web, jarvis-tools (figshare downloads) open (NIST) Solar cells and photovoltaics, Semiconductor physics, Thermoelectrics, Mechanical, dielectric and piezoelectric, 2D materials, Magnetism and superconductivity Alexandria computed bulk download CC BY 4.0 Generative-model benchmarks, Semiconductor physics, Magnetism and superconductivity, 2D materials GNoME (DeepMind) computed download CC BY-NC 4.0 Generative-model benchmarks NOMAD computed web, API, raw calculation files CC BY 4.0 Semiconductor physics, Solar cells and photovoltaics, Catalysis and surfaces Materials Cloud computed web, archive downloads CC BY 4.0 (per archive) 2D materials, Mechanical, dielectric and piezoelectric, Semiconductor physics C2DB computed web, ASE database download CC BY 4.0 2D materials, Semiconductor physics, Solar cells and photovoltaics 2DMatPedia computed web, download open 2D materials Cubic perovskites (CMR, Castelli et al.) computed web, ASE database download CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics, Generative-model benchmarks CDVAE splits (Perov-5, MP-20, Carbon-24) computed download (CSV with CIF column) MIT (repository) Generative-model benchmarks Matbench computed web, matbench package open Semiconductor physics, Mechanical, dielectric and piezoelectric matminer datasets computed + experimental matminer.datasets.load_dataset per dataset Semiconductor physics, Solar cells and photovoltaics, Thermoelectrics, Mechanical, dielectric and piezoelectric Crystallography Open Database (COD) experimental web, full download, REST public domain (CC0) Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric, Porous materials and MOFs ICSD experimental licence (most universities have it) commercial Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric Cambridge Structural Database (CSD) experimental licence commercial (CSD-Community subset free) Porous materials and MOFs Perovskite Database Project experimental web, download CC BY 4.0 Solar cells and photovoltaics Hybrid organic-inorganic perovskites (Kim et al. 2017) computed download (Scientific Data), matminer CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics Experimental band gaps (Zhuo et al. 2018) experimental paper SI, matminer expt_gap per paper Semiconductor physics, Solar cells and photovoltaics Liverpool Ionic Conductivity Database (LiIonDB) experimental web, download open Batteries and ionic conductors Materials Project battery explorer computed web, mp-api CC BY 4.0 Batteries and ionic conductors UCSB thermoelectrics (Gaultois et al.) experimental matminer ucsb_thermoelectrics open Thermoelectrics Starrydata experimental web, download open Thermoelectrics Open Catalyst (OC20 / OC22) computed download, fairchem CC BY 4.0 Catalysis and surfaces Catalysis-Hub computed web, GraphQL API open Catalysis and surfaces SuperCon (NIMS) and 3DSC experimental NIMS MDR, 3DSC on GitHub open (3DSC) Magnetism and superconductivity MAGNDATA (Bilbao) experimental web open Magnetism and superconductivity QMOF computed download (figshare) CC BY 4.0 Porous materials and MOFs, Semiconductor physics CoRE MOF experimental download CC BY 4.0 Porous materials and MOFs Materials Data Facility computed + experimental web, API per dataset Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Thermoelectrics, Catalysis and surfaces, Mechanical, dielectric and piezoelectricMissing one you use? Open an issue or edit benchmarks/catalog/databases.json.
Datasets used with MEIDNet and what has been done with each. Tasks, sizes and properties differ from one dataset to the next, so results are compared within a dataset only (see Benchmarks).
dataset structures properties used size available here Perov-5 cubic ABX\u2083 perovskites, 5 atoms per cell direct band gap, formation enthalpy 18,928 pretrained model, configuration, tutorial, benchmark results MP-20 Materials Project, up to 20 atoms none aligned in the paper about 45,000 structure-representation results in the paper Carbon-24 carbon allotropes, up to 24 atoms none aligned in the paper about 10,000 structure-representation results in the paper Double perovskites A\u2082BB\u2032X\u2086 a family file, no dataset none 10,800 compositions (halide variant) design space and rules Your dataset one material family any scalar columns any upload in the Studio, or the command lineNew to multimodal data? Learn multimodality explains what a modality is, and Databases by application lists 31 computed and experimental sources.
Perov-5 \u2014 multimodal benchmark
18,928 cubic ABX\u2083 perovskites (CDVAE split: 11,356 train / 3,787 validation / 3,785 test), each with a relaxed structure, formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV).
Modalities used in MEIDNet: crystal structure \u00b7 electronic property (band gap) \u00b7 thermodynamic property (formation enthalpy).
What the paper does with it: multimodal alignment of the structure and property encoders, property reconstruction, and the inverse-design demonstration (candidates generated from property targets, screened with MACE and validated by DFT).
In this repository: meidnet download-data fetches it; the published checkpoint checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth was trained on it; it is the data behind the live Studio.
Suitable tasks: inverse design from a band gap and a stability target \u00b7 property prediction from the structure \u00b7 structure\u2013property retrieval \u00b7 measuring how well two modalities align.
Available here: pretrained model \u00b7 configuration (examples/perov5/meidnet.yaml) \u00b7 tutorial (the paper's experiment, Colab) \u00b7 benchmark results.
Open in the Studio
Benchmark results \u00b7 The paper's experiment \u00b7 Dataset source (CDVAE) \u00b7 Castelli et al. 2012, Xie et al. 2022
MP-20 \u2014 published: structure-representation generalization
~45,000 structures from the Materials Project with at most 20 atoms per cell (CDVAE split).
Published MEIDNet use: generalization of the crystal encoder / decoder beyond perovskites (structure representation and reconstruction). It is not a multimodal benchmark in the paper: no property modality was aligned on it, and no MP-20 checkpoint is shipped here.
Benchmark results \u00b7 Dataset source (CDVAE)
Carbon-24 \u2014 published: structure-representation generalization
~10,000 carbon structures with up to 24 atoms per cell (CDVAE split).
Published MEIDNet use: the same structure-representation test as MP-20. Not a multimodal benchmark; no Carbon-24 checkpoint is shipped here.
Benchmark results \u00b7 Dataset source (CDVAE)
Use your dataset in the Studio
Any table with an id, one or more scalar property columns and a crystal structure per row (CIF text in a column or one .cif file per id) can be used directly: upload it in the Studio or run meidnet init \u2192 check \u2192 train \u2192 generate (bring your own dataset). The structures must belong to one material family (prototype + site groups), which is what the rules and the search need.
Battery conductors, MOFs, 2D materials and spinels are natural next families. Results on any of them can be contributed, and a dataset becomes a benchmark once its protocol is defined (add a dataset).
"},{"location":"learn/index.html","title":"Learn multimodality","text":"A material can be described in many ways: by its atoms and their positions, by a formula, by measured or computed properties, by a diffraction pattern, a spectrum, a micrograph or a paragraph in a paper. Each way of describing it is a modality. Multimodal learning trains one model on several modalities of the same materials, so that it can connect them: read a structure and predict a property, or start from the properties you want and propose a structure, which is what MEIDNet does.
This short course takes about ten minutes. It covers the main ideas of multimodal learning for materials and, for each, how MEIDNet implements it. For a full review, see Babu and Krishnan (2026).
A modality is one kind of observation of a material, with its own shape of data. The shape decides which kind of neural network can read it.
The same as a table modality what the data looks like example a network that reads it Crystal structure atoms with positions in a unit cell: a graph a CIF file graph neural network Composition elements and their fractions: a set CsPbI\u2083 set or element network Scalar properties a short vector of numbers band gap, formation enthalpy small fully connected network (MLP) Diffraction pattern a curve: intensity versus angle 2\u03b8 powder XRD 1D convolutional network Spectra and DOS a curve: signal versus energy density of states, XAS, Raman 1D convolutional network or transformer Image a grid of pixels SEM or TEM micrograph 2D convolutional network or vision transformer Text a sequence of words a synthesis procedure language modelWhy combine them?
Each modality sees part of the material. A structure fixes the atoms but does not tell you the band gap without a calculation; a band gap says nothing about which atoms produce it. A model that learns both together can translate between them in either direction.
What it needs: paired data, where several modalities describe the same material. In Perov-5, every one of the 18,928 structures comes with its DFT band gap and formation enthalpy, which makes it a two-modality dataset.
"},{"location":"learn/index.html#the-multimodality-map","title":"2. The multimodality map","text":"Select a modality to see what it contains, which networks encode it, how it is combined with other modalities and how MEIDNet handles it. The centre describes the shared representation.
The map as a table modality MEIDNet how Crystal structure available an E(n)-equivariant graph network (EGNN) encodes up tomax_sites atoms (default 20) Scalar properties available all numeric columns form one vector, read by one MLP; every column becomes a target Composition via the structure the element on each site is part of the structure; formula-only data needs a composition model Processing conditions partial numeric conditions can be extra scalar columns, encoded together with the properties Diffraction (XRD) planned a vector-modality encoder for binned patterns, first item of the roadmap Spectra and DOS planned as vector modalities Microscopy images planned an image encoder into the shared space Text planned a text encoder into the shared space The capabilities page lists the same information, generated from the code.
"},{"location":"learn/index.html#five-challenges","title":"3. Five challenges of multimodal learning","text":"Baltru\u0161aitis, Ahuja and Morency organise multimodal machine learning around five challenges. Every multimodal model answers each of them in some way, even if only by leaving it out.
challenge the question a materials example in MEIDNet Representation How is each modality encoded, and do they share one space (joint) or keep separate spaces tied by a constraint (coordinated)? a graph network for the structure, an MLP for the property vector both: two encoders whose outputs are coordinated by contrastive learning and then averaged into one joint latent of 128 numbers Translation How is one modality mapped to another? structure \u2192 properties (prediction), properties \u2192 structure (inverse design) both directions: decoders read the joint latent and the property latent alone Alignment Which parts of one modality correspond to which parts of another? which XRD peaks come from which lattice planes only whole materials: each structure is matched with its own property vector, not part by part Fusion How are the modalities joined to make a prediction? one descriptor from structure and band gap together the structure latent and the property latent are averaged (a note on the word \"early\") Co-learning Can one modality help learn another, for example a scarce one? learn from many simulated XRD patterns to read a few measured ones closest analogue: the property branch is trained to rebuild the crystal on its own, so at design time properties alone are enoughFurther reading: Baltru\u0161aitis et al. 2019 (the taxonomy) \u00b7 Guo et al. 2019 (deep multimodal representation learning) \u00b7 Ngiam et al. 2011 (shared representations between modalities) \u00b7 Babu and Krishnan 2026 (multimodal and cross-modal learning techniques).
"},{"location":"learn/index.html#contrastive-learning","title":"4. Contrastive learning: how two modalities are aligned","text":"Take a batch of \\(N\\) materials. Each gives two vectors of length one: \\(z_c\\) from its structure and \\(z_p\\) from its properties. The dot product of two such vectors is their cosine similarity. Lay out all \\(N \\times N\\) similarities in a table: the diagonal holds the true pairs, everything else is a structure next to someone else's properties.
Contrastive learning turns each row into a multiple-choice question: which of the \\(N\\) property vectors belongs to this structure? The right answer is on the diagonal. It asks the same question for each column, from properties to structures. The loss MEIDNet uses is this symmetric InfoNCE loss:
\\[ \\mathcal{L}_\\text{InfoNCE} = \\frac{1}{2N}\\sum_{i=1}^{N}\\left[ -\\log\\frac{\\exp\\!\\big(z_c^{(i)}\\!\\cdot z_p^{(i)}/\\tau\\big)}{\\sum_{j=1}^{N}\\exp\\!\\big(z_c^{(i)}\\!\\cdot z_p^{(j)}/\\tau\\big)} -\\log\\frac{\\exp\\!\\big(z_p^{(i)}\\!\\cdot z_c^{(i)}/\\tau\\big)}{\\sum_{j=1}^{N}\\exp\\!\\big(z_p^{(i)}\\!\\cdot z_c^{(j)}/\\tau\\big)} \\right] \\]The temperature \\(\\tau\\) sets how sharply the model must prefer the right answer. Move the slider to see its effect on a batch of five materials: each row shows how much probability the model gives to each candidate.
setting in MEIDNet value inmeidnet.yaml temperature \\(\\tau\\) 0.01 training.temperature strength of the alignment 5.0 training.contrastive_weight warm-up: the strength grows from 0 to its full value over 60 % of the epochs (the paper: 1,200 epochs) training.contrastive_warmup_epochs size of the shared space 128 model.latent_dim The warm-up is the paper's curriculum: the decoders first learn to rebuild crystals and properties, then the two latents are pulled together. After training, the training report measures the alignment with retrieval: how often the nearest property vector to a structure is its own (top 1) or among the five nearest (top 5). The Studio's Model block plots the mean cosine between matched pairs during training.
The same loss pairs pictures with their captions in CLIP; MEIDNet pairs crystals with their properties.
Further reading: van den Oord et al. 2018 (InfoNCE) \u00b7 Radford et al. 2021 (CLIP) \u00b7 Babu and Krishnan 2026 \u00b7 Contrastive learning in the Architecture Atlas.
"},{"location":"learn/index.html#inverse-design","title":"5. From a shared space to inverse design","text":"Once both modalities live in one space, a point in it can be read in both directions. MEIDNet makes the reverse direction possible with one extra training term: the crystal decoder is also trained from the property latent alone. A vector of wanted properties can then be encoded and decoded into a structure.
The search in practice:
The full objective and every step are in How MEIDNet works.
Two limits that matter
MEIDNet does not invent new atomic arrangements: candidates are compositions on a known prototype. Its predicted properties are estimates to confirm with DFT or experiment (scope and roadmap).
Further reading: the MEIDNet paper (Babu et al. 2026) \u00b7 Babu, Gouv\u00eaa and Rignanese 2026 (generative models, multimodal learning and closed-loop workflows in inverse materials design) \u00b7 Moro, Loh et al. 2025 (multimodal foundation models for materials).
"},{"location":"learn/index.html#where-next","title":"6. Where to go next","text":"Architecture Atlas
Early fusion, late fusion, shared latent spaces, cross-attention and contrastive learning, drawn the same way, with an advisor that recommends one for your data.
Architecture Atlas
Recipes by problem
From a research question to an architecture, a dataset, a configuration and a tutorial.
Recipes by problem
Build it
Upload a table of structures and properties, train in the browser, set targets, run the search.
Open the Studio
Find data
Datasets that work with MEIDNet, and 31 computed and experimental databases grouped by application.
Datasets
Five ways to build a model from several modalities, drawn the same way: inputs on the left, outputs on the right. Each card gives the idea, when it fits, its strengths and weaknesses, an example from materials science and references. The comparison table shows which of these designs MEIDNet uses, and the advisor suggests one for a given dataset and task.
New to the topic? Start with Learn multimodality. Babu and Krishnan (2026) review multimodal and cross-modal learning techniques in more depth.
Modality A Modality B concatenateab one model prediction Modality A Modality B model A model B guess A guess B combine average or vote Structure Properties EGNN MLP shared space (128-d) align average decoders structure andproperties A tokens (atoms) B tokens (spectrum) querieskeys, values cross-attention fused tokens\u2192 prediction properties of the batch structures true pairs:pulled together other pairs:pushed apart"},{"location":"learn/architectures.html#early-fusion","title":"Early fusion","text":"Idea. Join the modalities at the input: turn each into features, concatenate them into one vector, train one model on it.
When it fits. Every material has every modality; the features have a fixed length and similar scales; you want a quick baseline.
Strengths. Simple. The model can use interactions between features from the first layer. Weaknesses. A missing modality breaks the input. Very different shapes (a graph and a curve) are hard to concatenate. A large modality can drown a small one.
Materials example. Composition descriptors, the processing temperature and a few peak positions from an XRD pattern, concatenated and given to a gradient-boosted regressor.
References: Snoek et al. 2005; Baltru\u0161aitis et al. 2019.
"},{"location":"learn/architectures.html#late-fusion","title":"Late fusion","text":"Idea. One model per modality, each makes its own prediction; the predictions are combined by averaging, voting or a small model on top.
When it fits. Modalities are often missing, models for each already exist, or robustness matters more than squeezing out the last bit of accuracy.
Strengths. Modular. Tolerates a missing modality. Each model can be trained on its own, larger dataset. Weaknesses. Cannot learn how the modalities interact. There is no shared representation, so no translation from one modality to another and no inverse design.
Materials example. A structure-based graph network and a spectrum-based convolutional network each predict a phase label; the final label averages their probabilities.
References: Snoek et al. 2005; Baltru\u0161aitis et al. 2019.
"},{"location":"learn/architectures.html#shared-latent","title":"Shared latent space (joint and coordinated)","text":"Idea. One encoder per modality maps into a common space. In a coordinated representation the latents stay separate but are trained to agree; in a joint representation they are merged into one vector that the decoders read. MEIDNet does both: the structure latent and the property latent are aligned by contrastive learning, then averaged into the joint latent; the decoders read the joint latent and the property latent alone.
When it fits. You want to translate between modalities (properties \u2192 structure for inverse design), retrieve one modality from another, or search a space that both understand. You have paired examples.
Strengths. Translation in both directions, retrieval, and one space to optimise in. Each modality keeps the encoder that suits its shape. Weaknesses. Needs paired data. The space is only as good as the alignment. Several losses must be balanced.
Materials example. MEIDNet: crystal structures and DFT properties of 18,928 cubic perovskites, searched for compositions with a target band gap and formation enthalpy (the paper's experiment).
References: Ngiam et al. 2011; Baltru\u0161aitis et al. 2019; Babu et al. 2026 (MEIDNet); Moro, Loh et al. 2025; Babu and Krishnan 2026.
"},{"location":"learn/architectures.html#cross-attention","title":"Cross-attention and transformer fusion","text":"Idea. Each modality becomes a sequence of tokens (atoms, segments of a spectrum, words). Attention lets every token of one modality look up the tokens of the other that matter to it, layer after layer.
When it fits. The modalities have parts that interact in detail and are not aligned in advance; the dataset is large.
Strengths. Learns which parts relate to which, and handles sequences of different lengths without manual alignment. Weaknesses. Needs much data and compute; the cost grows with the product of the two sequence lengths; harder to interpret than a single shared vector.
Materials example. Spectrum segments attend to the atoms of the structure, so the model learns which sites shape which spectral features.
References: Tsai et al. 2019 (Multimodal Transformer); Lu et al. 2019 (ViLBERT).
"},{"location":"learn/architectures.html#contrastive","title":"Contrastive learning","text":"Idea. A training objective rather than a wiring. In a batch of paired examples, each example's two embeddings must be more similar to each other than to any other example's. It is how the latents of a shared space are coordinated.
When it fits. You have pairs (a structure and its properties, a pattern and its structure) and want a space in which nearest neighbours are meaningful across modalities.
Strengths. Learns from the pairing alone; provides cross-modal retrieval; scales to large datasets. Weaknesses. Needs large enough batches; sensitive to the temperature; two similar materials in the same batch are treated as negatives and pushed apart.
In MEIDNet. Symmetric InfoNCE with temperature 0.01 and weight 5, switched on gradually over the warm-up (the paper's curriculum). The formula and a playground.
References: van den Oord et al. 2018 (InfoNCE); Radford et al. 2021 (CLIP); Babu and Krishnan 2026.
"},{"location":"learn/architectures.html#side-by-side","title":"Side by side","text":"early fusion late fusion shared latent cross-attention contrastive (objective) where the modalities meet input features predictions a common latent space inside the network, token by token the latent space, through the loss every modality needed for every sample yes no paired examples for training usually paired examples learns interactions between modalities yes no yes yes, in detail for whole samples translates one modality into another no no yes with a decoder retrieval data needed small to medium small per model medium large medium to large used in MEIDNet \u2013 \u2013 yes: structure and property encoders, averaged latent \u2013 yes: symmetric InfoNCEBeyond these five. Conditional generative models such as diffusion (MatterGen) or variational autoencoders (CDVAE) also translate from properties to structures, and they generate free atomic arrangements. MEIDNet instead decodes compositions onto a prototype family and checks them against chemical rules. Babu, Gouv\u00eaa and Rignanese (2026) review generative models, multimodal learning and closed-loop workflows for inverse materials design.
"},{"location":"learn/architectures.html#advisor","title":"Which architecture should I use?","text":"Select the data you have and the task. The recommendation explains the choice and says where it can be run.
The advisor needs JavaScript. In short: structures with scalar properties, for design or retrieval \u2192 shared latent space with contrastive alignment (MEIDNet). Formula only \u2192 a composition model such as Roost. A pattern or spectrum to identify a phase \u2192 a 1D convolutional classifier. Modalities that are often missing \u2192 late fusion. Long sequences that interact in detail \u2192 cross-attention."},{"location":"learn/architectures.html#terminology","title":"A note on words","text":"\"Early fusion\" in the MEIDNet paper names the model in which the structure latent and the property latent are averaged into one joint latent: z_joint = (z_c + z_p) / 2 in meidnet/model.py. In the survey literature, early fusion usually means joining raw features at the input, as in the first card; averaging two learned latents, each from its own encoder, is intermediate or model-level fusion, the shared-latent card. Both names describe the same code. The checkpoints shipped here are the paper's early-fusion models, and the code implements only this fusion: there is no late-fusion option in MEIDNet.
\"Curriculum\" in the paper is the contrastive warm-up: the alignment weight grows from zero to its full value over training.contrastive_warmup_epochs, so that the decoders learn first.
Start from a research question. Each recipe goes problem \u2192 architecture \u2192 why \u2192 data \u2192 implementation \u2192 tutorial \u2192 references. The implementation is MEIDNet where it applies; otherwise the recipe names established alternatives.
For step-by-step changes to a MEIDNet configuration (another target, another family, a new rule), see the how-to guides.
problem architecture implementation Perovskites with a target band gap and a negative formation enthalpy shared latent + contrastive MEIDNet Candidates from your own DFT results for one family shared latent + contrastive MEIDNet Screen a whole family for a target before searching structure encoder of the shared space MEIDNet Identify the crystal structure from an XRD pattern 1D convolutional network; contrastive pattern \u2194 structure 1D CNN classifiers; pattern encoder planned for MEIDNet Predict a property when only the formula is known composition network Roost and similar composition models Connect synthesis text with structures text encoder + contrastive or cross-attention text encoder planned for MEIDNet Design new atomic arrangements conditional generative model over full geometry MatterGen, CDVAE"},{"location":"learn/recipes.html#target-band-gap","title":"Perovskites with a target band gap and a negative formation enthalpy","text":"Problem Find cubic ABX\u2083 halide perovskites with a direct band gap near 1.5 eV and a negative formation enthalpy. Architecture Shared latent space with contrastive alignment: MEIDNet. Why The question runs from properties to structure. A shared space whose crystal decoder is also trained from the property latent alone gives that direction, and the family's rules keep the chemistry sensible. Data Perov-5: 18,928 structures with DFT band gap and formation enthalpy (dataset card). The published checkpoint is trained on it. Implementation MEIDNet:meidnet demo, meidnet generate or the Studio's Targets and Search blocks. Tutorial The paper's experiment \u00b7 in the browser: Studio, Targets block \u00b7 screen the candidates with MACE References Babu et al. 2026 (MEIDNet); Castelli et al. 2012 (the dataset); Babu, Gouv\u00eaa and Rignanese 2026 (review of inverse design). One command with the published model:
meidnet demo --family halide --band-gap 1.5 --enthalpy -0.10\n Or in meidnet.yaml (from examples/perov5/meidnet.yaml):
generation:\n family: perovskite_abx3\n variant: halide\n objectives:\n - {property: dir_gap, loss: l2, weight: 10000, select_weight: 1.0}\n - {property: heat_all, loss: l1, weight: 6000, select_weight: 0.4}\n targets:\n - {dir_gap: 1.5, heat_all: -0.10}\n"},{"location":"learn/recipes.html#own-family","title":"Candidates from your own DFT results for one family","text":"Problem You computed structures and properties for one prototype family, for example A\u2082BB\u2032X\u2086 double perovskites, and want new compositions with chosen property values. Architecture Shared latent space with contrastive alignment, trained on your table. Why The same reasoning as above. Every scalar column you give becomes a target you can set, and the family file says which sites exist and which elements may sit on them. Data A table with an id, numeric property columns and one CIF per row. Public sources by application are on Databases by application. Implementation MEIDNet: meidnet init, check, train, generate, or the Studio's Data and Model blocks. Tutorial Bring your own dataset \u00b7 in the browser: Studio, Data block \u00b7 change the material family References Babu et al. 2026 (MEIDNet). data:\n table: my_results.csv\n id_column: id\n cif_column: cif\n properties:\n - {column: band_gap, unit: eV}\n - {column: e_form, unit: eV/atom}\ngeneration:\n family: double_perovskite_a2bbx6\n variant: halide\n objectives:\n - {property: band_gap, loss: l2, weight: 10000}\n - {property: e_form, loss: at_most, weight: 6000}\n targets:\n - {band_gap: 1.8, e_form: -0.10}\n Then meidnet check \u2192 meidnet train \u2192 meidnet generate; each step writes a report.
meidnet space or the Studio's design-space view. Tutorial Explore in 3D \u00b7 in the browser: Studio, design space \u00b7 How MEIDNet works References Babu et al. 2026 (MEIDNet). meidnet space examples/perov5/meidnet.yaml --model checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth -o space.csv\n"},{"location":"learn/recipes.html#xrd-structure","title":"Identify the crystal structure from an XRD pattern","text":"Problem Given a powder diffraction pattern, tell which crystal system, space group or known structure it comes from. Architecture A 1D convolutional classifier on the pattern (one modality). Multimodal: a pattern encoder aligned with a structure encoder by contrastive learning, so a pattern retrieves the structures it matches. Why A pattern is a fingerprint of the lattice. A classifier needs labels; a contrastive model needs only (pattern, structure) pairs, which can be simulated from any structure database. Data Simulate patterns from computed or experimental structures (semiconductor physics, all databases), for example with pymatgen's XRD calculator; validate on measured patterns. Implementation 1D convolutional classifiers such as Park et al. (2017). In MEIDNet, an encoder for binned XRD patterns is the first item of the roadmap and is not yet available. References Park et al. 2017; Baltru\u0161aitis et al. 2019; Babu and Krishnan 2026."},{"location":"learn/recipes.html#formula-only","title":"Predict a property when only the formula is known","text":"Problem Predict a band gap or a stability measure for compositions whose crystal structure is unknown, as in many experimental tables. Architecture A composition network that reads the formula as a weighted set of elements, such as Roost. With extra numeric inputs (temperature, doping), early fusion of composition features and those numbers is a strong baseline. Why MEIDNet needs a structure for every row. If your formulas all sit on one prototype (for example ABX\u2083), you can build those structures on the prototype and use MEIDNet; otherwise a composition model is the appropriate choice. Data Experimental band gaps and Matbench tasks are listed on Databases by application. Implementation Roost or another composition model; outside MEIDNet, which requires a crystal structure per material. References Goodall and Lee 2020 (Roost); Dunn et al. 2020 (Matbench)."},{"location":"learn/recipes.html#synthesis-text","title":"Connect synthesis text with structures","text":"Problem Link written synthesis procedures to the structures they produce, to suggest how a candidate might be made or which candidates resemble known syntheses. Architecture A text encoder (a language model) aligned with a structure encoder by contrastive learning; cross-attention when individual words must be tied to individual elements or steps. Why Text and structures have no common format; a shared space lets each be compared with the other. Data Text-mined synthesis recipes (Kononova et al. 2019) paired with structures from a structure database. Implementation A text encoder that maps into MEIDNet's shared space is planned and not yet available. References Kononova et al. 2019; Moro, Loh et al. 2025; Babu and Krishnan 2026."},{"location":"learn/recipes.html#new-arrangements","title":"Design new atomic arrangements","text":"Problem Generate crystals whose atomic arrangement is not one of a few known prototypes. Architecture A conditional generative model over the full geometry: diffusion (MatterGen) or a variational autoencoder (CDVAE). Why MEIDNet places compositions on a family prototype and does not invent arrangements (scope). Models that generate positions and cells directly can. Data Large structure databases; the generative benchmarks are listed under generative-model benchmarks. Implementation MatterGen, CDVAE and related generative models. References Zeni et al. 2025 (MatterGen); Xie et al. 2022 (CDVAE); Babu, Gouv\u00eaa and Rignanese 2026 (review)."},{"location":"learn/recipes.html#references","title":"References","text":"A rule is a function that looks at a candidate and returns pass/fail, the measured value, the allowed window and a sentence. The search enforces it; every report and the Studio explain it.
"},{"location":"recipes/add-constraint.html#1-write-it","title":"1. Write it","text":"my_rules.py:
from meidnet.constraints import CONSTRAINTS\n\n@CONSTRAINTS.register(\"no_lead\", \"Rejects any composition containing Pb.\")\ndef no_lead(cand):\n return cand.result(\"no_lead\", \"Pb\" not in cand.elements.values())\n\n@CONSTRAINTS.register(\"mass_window\", \"Mean atomic mass must lie between min and max (g/mol).\")\ndef mass_window(cand, min=0.0, max=200.0):\n from pymatgen.core import Element\n m = sum(Element(e).atomic_mass for e in cand.structure.species) / len(cand.structure)\n return cand.result(\"mass_window\", min <= m <= max, float(m), (min, max), f\"mean mass {m:.1f}\")\n What a candidate gives you: cand.elements ({group: element}), cand.structure (pymatgen, after symmetry refinement), cand.raw (before), cand.lattice_a, cand.predictions ({property: value}), cand.radius(group).
plugins: [my_rules.py]\ngeneration:\n family: my_perovskite.yaml # a copy of the built-in family with the rules appended:\n constraints:\n - {name: charge_neutrality}\n - ...\n - {name: no_lead}\n - {name: mass_window, min: 0, max: 120}\n"},{"location":"recipes/add-constraint.html#3-run","title":"3. Run","text":"meidnet generate meidnet.yaml. The candidate cards list No lead and mass window with the measured value; the funnel shows how many compositions each removed.
A complete example lives in examples/custom_rules/ (a no toxic elements rule and a max cell edge rule), and notebook 03 does the same in Colab.
Rules decide acceptance. To steer the latent search instead (a penalty with a gradient), register a search term with @SEARCH_TERMS.register in meidnet.terms; it receives a SearchContext with the decoder's outputs. See rules and search terms.
MEIDNet's property modality is a vector of any length. Adding a property is a data change, not a code change.
List it under data.properties (label and unit are for the reports; normalize: true is the default and recommended when properties have different scales):
data:\n properties:\n - {column: band_gap, label: Band gap, unit: eV}\n - {column: formation_e, label: Formation energy, unit: eV/atom}\n - {column: dielectric, label: Dielectric constant}\n meidnet check \u2192 meidnet train. The training report rates each property separately.
generation.objectives and targets.Properties with many missing values: rows with a missing value are skipped (the check report counts them). Fill them, or drop the property.
The published model
The Perov-5 checkpoint has exactly two properties (formation enthalpy, direct band gap) and cannot steer others; train your own model to add some.
"},{"location":"recipes/change-family.html","title":"Change the material family","text":"A family file tells MEIDNet what kind of crystal to build. The built-in ones are meidnet/families/perovskite_abx3.yaml and double_perovskite_a2bbx6.yaml; meidnet families <name> prints a summary. To use your own, copy one, edit it, and point to it:
generation:\n family: my_family.yaml\n variant: null # or a variant you define\n"},{"location":"recipes/change-family.html#the-parts-of-a-family-file","title":"The parts of a family file","text":"name: spinel_ab2x4\ntitle: Normal spinel AB2X4 (Fd-3m, primitive cell)\n\nprototype: # WHERE atoms sit (fractional coordinates, in decoder slot order)\n lattice: fcc_primitive # cubic | fcc_primitive | bcc_primitive | explicit a,b,c,alpha,beta,gamma\n reference_a: 8.1\n sites:\n - {group: A, frac: [0.125, 0.125, 0.125]}\n - ...\n\ngroups: # WHO may sit there, and with which charges\n A: {description: tetrahedral cation, elements: [Mg, Zn, Fe, Co, Ni, Mn], oxidation_states: {Mg: [2], ...}}\n B: {...}\n X: {...}\n\nsampling_order: [B, X, A] # the LAST group is restricted to charge-balancing elements\n\nlattice: # HOW BIG the cell is\n rule: bond_sum # a = factor \u00d7 \u03a3 ionic radii of the listed groups (or rule: fixed)\n groups: [B, X]\n factor: 2.0\n min: 3.0\n max: 12.0\n\nvariants: # named sub-families: element subsets and rule parameters\n oxide: {groups: {X: {elements: [O]}}, params: {tolerance_factor: {min: 0.8, max: 1.05}}}\n\nsearch_terms: # soft penalties during the latent search (see reference/rules)\n - {name: site_separation, weight: 200}\n - ...\n\nconstraints: # hard rules every saved candidate must pass\n - {name: charge_neutrality}\n - {name: min_distance, min: 0.8}\n - ...\n"},{"location":"recipes/change-family.html#alignment-of-training-data","title":"Alignment of training data","text":"For generation to mean anything, the model must have been trained on structures whose atoms are in the prototype's site order. data.align_to_prototype: true (default) re-orders every training structure to match the family named in generation.family (or top-level family:); structures that do not fit are reported by meidnet check. Raise data.prototype_tolerance for distorted cells.
meidnet families my_family.yaml --variant oxide\nmeidnet space meidnet.yaml # every composition with rule values \u2192 CSV\n Errors name the problem: unknown element symbols, a prototype group without a definition, an override that matches no rule, a group left empty after your filters.
"},{"location":"recipes/change-family.html#worked-example","title":"Worked example","text":"The double perovskite page walks through a 10-site, non-cubic-primitive family written this way.
"},{"location":"recipes/change-targets.html","title":"Change the target properties","text":""},{"location":"recipes/change-targets.html#a-different-value","title":"A different value","text":"generation:\n targets:\n - {band_gap: 1.2}\n - {band_gap: 1.8} # each entry is its own search\n"},{"location":"recipes/change-targets.html#a-different-kind-of-goal","title":"A different kind of goal","text":"loss says how a prediction is compared with the target:
loss meaning typical use l2 squared distance (default) hit a value l1 absolute distance hit a value, less sensitive to outliers at_most only values above the target are penalised formation enthalpy \u2264 \u22120.1 eV/atom at_least only values below are penalised dielectric constant \u2265 20 objectives:\n - {property: band_gap, loss: l2, weight: 10000, select_weight: 1.0}\n - {property: enthalpy, loss: at_most, weight: 6000, select_weight: 0.4}\n weight acts during the latent search; select_weight when ranking finished candidates.
The model knows the properties it was trained on (meidnet info model.pt lists them). To steer a property that is not in the model, add it to the data and retrain.
Drag the target slider; the predicted-closest table and the scatter update at once, and a warning appears if the target lies outside the training range. Export the YAML when you are happy.
"},{"location":"recipes/elements.html","title":"Exclude or restrict elements","text":"generation:\n exclude_elements: [Pb, Cd, Hg] # never used, on any site\n only_elements: # restrict a site group to a shortlist\n B: [Ti, Zr, Hf, Sn]\n Both are applied to the family before the search starts, so the decoder cannot even propose an excluded element. The Studio's element chips do the same thing (click to toggle) and show the counts change.
To change which elements a family allows at all, or their oxidation states, copy the family file and edit the groups: section \u2014 see Change the material family.
pip install \"meidnet[stability]\" # ase + mace-torch (~500 MB of weights on first use)\nmeidnet screen runs/my_oxides/generation --train-csv materials.csv\n For each CIF: relax cell and positions with the MACE-MP-0 universal potential, compute the formation energy per atom against elemental reference phases, and report
--threshold); the report prints it as STABLE,Results go to stability.csv in the folder. Structures with |\u0394H_f| > 5 eV/atom are flagged as artefacts and excluded from the rates. The reference phases and GGA-style O/N corrections are those of the paper.
The S is not stability in the usual sense. The common 0.1 eV/atom threshold for metastable, possibly synthesisable materials concerns the energy above the convex hull of all competing phases; the formation energy against the elements is a weaker test, so a candidate can pass it and still decompose into other compounds. A stability statement needs the energy above the hull (DFT, or an MLIP against a reference set of competing phases).
This is a first filter, not a verdict: MACE formation energies carry ~0.1 eV/atom uncertainty, and a cubic prototype may relax to a lower-symmetry structure.
"},{"location":"reference/api.html","title":"Python API","text":"The command line is a thin layer over these functions; use them from notebooks or your own scripts.
from meidnet.config import load_config, config_from_dict\nfrom meidnet.pipeline import check, train, generate\n\ncfg = load_config(\"meidnet.yaml\")\ninfo = check(cfg) # dict: report (counts, skip reasons), records, family, report_path\ninfo = check(cfg, keep_structures=True) # records also keep their pymatgen Structure (record.structure)\nmodel_path = train(cfg) # writes model.pt + training_report.html, returns the path\nresult = generate(cfg) # GenerationResult: .saved (candidates), .targets (funnel logs)\n"},{"location":"reference/api.html#pieces","title":"Pieces","text":"from meidnet.checkpoint import load_checkpoint, describe, property_ranges\nlm = load_checkpoint(\"model.pt\") # LoadedModel: .model, .stats (property names/units/normalisation)\nlm.model.encode_crystal(x) # structure \u2192 latent (x from meidnet.data.featurize)\nlm.model.encode_properties(p) # normalised property vector \u2192 latent\n\nfrom meidnet.family import load_family\nfam = load_family(\"perovskite_abx3\", variant=\"halide\", exclude=[\"Pb\"], overrides={\"tolerance_factor\": {\"max\": 1.0}})\n\nfrom meidnet.constraints import build_candidate, evaluate, CONSTRAINTS\ncand = evaluate(build_candidate(fam, {\"A\": \"Cs\", \"B\": \"Sn\", \"X\": \"Br\"}), fam.constraints)\ncand.passed, [r.to_dict() for r in cand.results]\n\nfrom meidnet.generate import Designer\nfrom meidnet.config import GenerationSection\ng = GenerationSection(family=\"perovskite_abx3\", variant=\"halide\",\n objectives=[{\"property\": \"dir_gap\"}], targets=[{\"dir_gap\": 2.0}], rounds=3, steps=200)\nres = Designer(lm, fam, g, on_saved=lambda c, t: print(c.formula)).run(\"out/\")\n\nfrom meidnet.designspace import enumerate_space, space_to_csv\nspace = enumerate_space(fam, lm) # every composition: rule values + predictions\n Custom rules and search terms: CONSTRAINTS.register, meidnet.terms.SEARCH_TERMS.register.
generation.extra_constraints adds rules to the family's own for one run, without editing the family file \u2014 this is how the Studio saves a predicted-property window:
generation:\n family: perovskite_abx3\n variant: halide\n extra_constraints:\n - {name: property_window, property: dir_gap, min: 1.5, max: 3.0}\n meidnet.pipeline.family_for(cfg, need_variant=True) returns the family a run uses, with these rules appended; generation.family / generation.variant take precedence over the top-level family.
meidnet.studio.chemiscope turns MEIDNet objects into chemiscope datasets \u2014 plain dicts you can save with json.dump and open at chemiscope.org, or show in a notebook with chemiscope.show(...):
from meidnet.studio.chemiscope import (space_dataset, candidates_dataset, records_dataset,\n published_data_dataset, structure_to_chemiscope)\n\nds = space_dataset(fam, space, lm, max_structures=2000) # design space: formula, site_*, pred_*, rule_*, passes_all\nds = candidates_dataset(candidate_dicts, fam, run_dir, lm=lm) # candidates of a run (reads their CIFs when present;\n # lm adds units and property names)\nds = records_dataset(info[\"records\"], cfg.data.properties, source=\"my data\") # needs check(cfg, keep_structures=True)\nstructure_to_chemiscope(structure) # one pymatgen Structure \u2192 {size, names, x, y, z, cell}\n candidate_dicts are saved candidates as dicts \u2014 [c.to_dict() for c in res.saved] after a Designer run, or [c for t in json.load(open(\"generation.json\"))[\"targets\"] for c in t[\"saved\"]] from a finished run. run_dir is the run folder that contains generation/ (cfg.out_dir after meidnet generate); where a CIF file is not found, the structure is rebuilt on the prototype from the candidate's elements.
The Studio server is a small class you can drive without a browser \u2014 the 04 Colab notebook does exactly this. Every method takes the same JSON-like dicts the page sends; session keeps users (or experiments) apart.
import base64\nfrom meidnet.studio.server import Studio\n\nst = Studio(None) # the published model; or Studio(load_config(\"meidnet.yaml\"))\nsid = \"my-session\"\nst.state(sid) # model, ranges, families, limits, session info\n\nb64 = base64.b64encode(open(\"materials.csv\", \"rb\").read()).decode()\nup = st.upload({\"session\": sid, \"files\": [{\"name\": \"materials.csv\", \"b64\": b64}]})\nup[\"suggest\"] # suggested id / CIF / property columns\n\nst.check_data({\"session\": sid, \"id_column\": \"material_id\", \"cif_column\": \"cif\",\n \"properties\": [{\"column\": \"dir_gap\", \"unit\": \"eV\"}],\n \"family\": \"perovskite_abx3\", \"variant\": \"halide\"})\nst.start_train({\"session\": sid, \"epochs\": 10, \"batch_size\": 16})\nst.status(sid, \"train\") # poll: running, progress (epoch, loss, curve), done, error\nst.select_model(sid, \"published\") # or \"own\"\n\nst.family({\"session\": sid, \"family\": \"perovskite_abx3\", \"variant\": \"halide\"}) # design space, scored\nst.start_search({\"session\": sid, \"generation\": {\"per_target\": 2, \"rounds\": 2, \"steps\": 100}})\nst.status(sid, \"search\") # candidates as they are found\nst.chemiscope(sid, \"space\", \"perovskite_abx3\", \"halide\") # or \"candidates\" / \"data\"\nst.validate({\"yaml\": \"generation:\\n rounds: 2\\n\"}) # {ok, generation, notes} or {ok: False, errors}\nst.export({\"session\": sid, \"generation\": {}}) # the meidnet.yaml text\n"},{"location":"reference/cli.html","title":"Command line","text":"meidnet init write a starter meidnet.yaml next to your data\nmeidnet check CONFIG is my data usable? \u2192 check_report.html\nmeidnet train CONFIG learn the latent space \u2192 model.pt, training_report.html\nmeidnet generate CONFIG design candidates \u2192 CIFs, generation_report.html\nmeidnet studio [CONFIG] interactive workbench in your browser\nmeidnet space CONFIG every composition of the family with rule values and predictions \u2192 CSV\nmeidnet demo quick demo with the published perovskite model\nmeidnet screen DIR stability screening of CIFs with MACE (optional extra)\nmeidnet score DIR generation-quality report of any model's CIFs \u2192 table, report.json\nmeidnet info MODEL describe a checkpoint\nmeidnet families [NAME] list / describe material families\nmeidnet schema JSON Schema of the config (for editors and the Studio)\nmeidnet download-data fetch the Perov-5 dataset used in the paper\n meidnet <command> --help lists the options. Useful ones:
init --template perov5 the paper's configuration instead of a blank one train --epochs N override training.epochs generate --quick few rounds and steps \u2014 a smoke test generate --model PATH use another checkpoint studio --export-static FILE.html self-contained Studio for a website studio --port 8765 --no-open choose the port; do not open a browser studio --public --host 0.0.0.0 host the Studio for other people: private session per visitor, capped budgets studio --run-root DIR --docs-dir site where sessions and searches are written; serve a built docs site at /docs/ space --chemiscope FILE.json also write the design space as a 3D dataset for chemiscope.org demo --family oxide --band-gap 3 --enthalpy -0.2 -n 5 demo targets score DIR --reference data/perov5 validity, uniqueness, novelty, diversity and distribution of a folder of CIFs from any model (the metrics) score DIR --targets targets.csv --tolerance dir_gap=0.3 the conditional metrics: target success, target error, multi-property success, constraint success, conditional diversity, target coverage score DIR --mlip --out report.json relax with MACE for the formation-energy filter (reported as stability and SUN; not the energy above the hull); write the full JSON report If meidnet is not on your PATH, python -m meidnet.cli \u2026 is equivalent.
Every setting of meidnet.yaml, generated from the code (meidnet schema gives the JSON Schema). Unknown keys are rejected with a message naming the key, so typos cannot silently change a run.
name string meidnet_run Name of this project; outputs go to output_dir. description string Free text shown at the top of reports. output_dir string runs/{name} Where checkpoints, CIFs and reports are written. family string/null None Family used to align training structures (defaults to generation.family). model_path string/null None Existing checkpoint to generate from (skip training). Default: /model.pt plugins array Python files that register your own constraints or search terms (see 'Add a constraint'). data object/null None model section training section generation object/null None"},{"location":"reference/config.html#data","title":"data:","text":"setting type default meaning table string required Path to a CSV/Excel/JSON table with one row per material. id_column string material_id Column with a unique identifier for each material. cif_column string/null cif Column that contains the CIF text of each structure. Set to null if you use structures_dir. structures_dir string/null None Folder with one CIF file per material, named .cif (used when there is no cif_column). properties array required Numeric columns that form the property modality (any number, at least one). val_table string/null None Optional separate validation table with the same columns. val_fraction number 0.1 Fraction of rows held out for validation when no val_table is given (0 = no validation). max_sites integer 20 Largest number of atoms per cell. Bigger structures are skipped. neighbor_cutoff number 4.0 Distance (\u00c5) below which two atoms count as neighbours. align_to_prototype boolean True Re-order the atoms of every structure so they match the family prototype's site order (needed for meaningful generation). The published Perov-5 model was trained without it. prototype_tolerance number 0.15 How far (fraction of a cell edge) an atom may sit from its prototype site and still count as that site. Raise it to accept distorted structures; lower it to keep only ideal ones."},{"location":"reference/config.html#dataproperties","title":"data.properties[]","text":"setting type default meaning column string required Name of the column in your table that holds this property. label string/null None Human-readable name used in reports (defaults to the column name). unit string Unit shown in reports, e.g. 'eV' or 'eV/atom'. normalize boolean True Standardise the property to zero mean and unit spread before training. Keep this on when properties have very different scales."},{"location":"reference/config.html#model","title":"model:","text":"setting type default meaning latent_dim integer 128 Size of the shared latent space where structures and properties meet. node_hidden_dim integer 128 Width of the per-atom features inside the graph network. edge_dim integer 64 Width of the per-bond messages inside the graph network. species_embedding_dim integer 64 Size of the learned element embedding. property_hidden_dim integer 128 Width of the property encoder's hidden layer. decoder_coordinate_input data / zeros / prototype data What the crystal decoder receives as starting atom positions during training. 'data' (published model) uses the true positions; generation always starts from 'zeros' or the prototype. 'zeros'/'prototype' make training and generation consistent (experimental)."},{"location":"reference/config.html#training","title":"training:","text":"setting type default meaning epochs integer 200 Number of passes over the training data. batch_size integer 16 Materials per training step (use 8 if memory is short). learning_rate number 0.001 Adam learning rate. contrastive_weight number 5.0 Strength of the alignment between structure and property latents. temperature number 0.01 Sharpness of the contrastive (InfoNCE) alignment. contrastive_warmup_epochs integer/null None Epochs over which the alignment strength ramps up from 0. Default: 60% of the epochs (the published model used 1200 of 2000). loss_weights section seed integer 0 Random seed for weight initialisation and data shuffling. device string auto 'auto', 'cpu' or 'cuda'. save_every integer 50 Write an intermediate checkpoint every N epochs."},{"location":"reference/config.html#trainingloss_weights","title":"training.loss_weights:","text":"setting type default meaning joint_reconstruction number 1.0 Rebuild the crystal from the joint (structure+property) latent. joint_property number 1.0 Predict the properties from the joint latent. property_reconstruction number 0.5 Rebuild the crystal from the property latent alone - this is what makes inverse design possible. property_property number 0.5 Predict the properties back from the property latent."},{"location":"reference/config.html#generation","title":"generation:","text":"setting type default meaning family string perovskite_abx3 Built-in family name or path to your own family .yaml file. variant string/null None Sub-family, e.g. 'halide' or 'oxide' for perovskites. objectives array required Which properties to steer and how. targets array required One entry per design target, e.g. {dir_gap: 1.5, heat_all: -0.1}. Each runs its own search. per_target integer 4 Candidates to save for each target. population integer 48 Latent vectors optimised in parallel in each round. rounds integer 20 Maximum search rounds per target. steps integer 800 Gradient steps per round. learning_rate number 0.0012 Step size of the latent search. anchor_weight number 12.0 Keeps the search close to the latent that the target properties map to. temperature_start number 1.6 Softness of element choices at the start of a round. temperature_end number 0.9 Softness of element choices at the end of a round. diversity_weight number 0.9 Pushes the parallel searches apart from each other. diversity_tau number 0.25 history_weight number 1.0 Pushes new searches away from latents that already produced a saved candidate. history_tau number 0.25 restart_patience integer 250 Steps without improvement before a search is restarted with noise. restart_noise number 0.35 grad_clip number 1.0 z_clip number 5.0 init_sigma number 0.35 Noise added to the starting latents. init_anchor_mix number 0.75 Share of the property-encoder latent in the starting point. init_rff_mix number 0.6 Share of the target-dependent random-feature direction in the starting point. init_noise_mix number 0.25 Share of random noise in the starting point. rff_frequencies integer 48 decode_temperature number 1.25 Randomness when turning element scores into a choice. decode_topk integer 12 Only the k best-scoring elements of a group can be chosen. decode_tries integer 12 Attempts per latent to find a composition that passes all constraints. anti_repeat_alpha number 0.6 Down-weights elements that were already used in saved candidates. anti_repeat_group string/null None Group the anti-repeat applies to (default: first sampled group). geometry_scale number 1.0 Global strength of the family's search terms. property_first boolean False Ignore the family's search terms during the search (properties only). dedup_formula boolean True Save each composition at most once. min_cosine_sep number 0.985 Skip candidates whose latent is this similar (cosine) to an already saved one. unique_decimals integer 3 exclude_elements array Elements never to use, e.g. [Pb, Cd]. only_elements object Restrict groups to these elements, e.g. {B: [Ti, Zr, Hf]}. overrides object Change parameters of the family's search terms or constraints, e.g. {tolerance_factor: {max: 1.0}}. extra_constraints array Additional rules appended to the family's constraints, e.g. [{name: property_window, property: dir_gap, min: 1.0, max: 3.0}]. disabled_rules array Rules to switch off for this run, by name (or id when two rules share a name), e.g. [charge_neutrality]. The generation report lists them. seed integer 937 Random seed of the search. amp boolean True Use mixed precision on GPUs. output_prefix string/null None File-name prefix of saved CIFs (default: family variant)."},{"location":"reference/config.html#generationobjectives","title":"generation.objectives[]","text":"setting type default meaning property string required Property (column name) this objective refers to. loss l2 / l1 / at_most / at_least l2 How a prediction is compared with the target: l2 = squared distance, l1 = absolute distance, at_most = only values above the target are penalised, at_least = only values below. weight number 10000.0 Importance of this objective during the latent search. select_weight number 1.0 Importance of this objective when ranking finished candidates. select_loss string/null None Comparison used for ranking (defaults to 'loss')."},{"location":"reference/families.html","title":"Family files","text":"A family file is YAML with these keys. meidnet families NAME prints a summary and the constraints with their explanations; errors name the offending key or element.
name, title, description name identification; description appears in the Studio prototype.lattice yes cubic, fcc_primitive, bcc_primitive, or explicit a, b, c, alpha, beta, gamma prototype.reference_a typical cubic cell edge (\u00c5), used by the cubic_cell search term prototype.sites[] yes {group, frac} in decoder slot order; fractional coordinates groups.<G>.description sentence shown in reports groups.<G>.elements yes every element the group may hold (all variants) groups.<G>.sample subset offered to the final element choice (default: elements) groups.<G>.oxidation_states {element: [charges]} used for charge balance and neutrality bias sampling_order order in which groups are chosen; the last is restricted to charge-balancing elements lattice.rule bond_sum (a = factor \u00d7 \u03a3 r_ionic of groups, clipped to min..max) or fixed variants.<V>.groups per-variant elements, sample, oxidation_states of any group variants.<V>.params {rule_or_term_name: {param: value}} applied to search terms and constraints require_variant default true: a variant must be chosen when variants exist search_terms[] {name, \u2026params} soft penalties during the latent search logit_transforms[] {name, \u2026params} edits of the decoder's element scores (e.g. neutrality_bias) constraints[] {name, \u2026params} hard rules; min_distance runs before symmetry refinement, the rest after refine_symmetry, symprec run spglib refinement on candidates (default true, 0.05) User-side changes without editing the file: generation.variant, exclude_elements, only_elements, overrides ({name: {param: value}} for any search term or constraint).
The built-in files are the complete reference: perovskite_abx3.yaml, double_perovskite_a2bbx6.yaml.
Rules (hard constraints) decide whether a candidate is saved. Search terms (soft penalties) steer the latent search towards decodable, sensible outputs. Both are referenced by name in family files.
"},{"location":"reference/rules.html#built-in-rules","title":"Built-in rules","text":""},{"location":"reference/rules.html#bond_window-sensible-fromto-bonds","title":"bond_window \u2014 Sensible {from}\u2013{to} bonds","text":"Every {from} atom needs a {to} neighbour at {low}\u2013{high} \u00d7 the sum of their ionic radii: bonds may be neither squashed nor stretched.
"},{"location":"reference/rules.html#charge_neutrality-charge-balance","title":"charge_neutrality \u2014 Charge balance","text":"The formal charges must add up to zero for at least one combination of the listed oxidation states (e.g. Cs\u207a Pb\u00b2\u207a I\u207b\u00d73 = 0).
"},{"location":"reference/rules.html#min_distance-no-overlapping-atoms","title":"min_distance \u2014 No overlapping atoms","text":"Two atoms closer than {min} \u00c5 would overlap, which is physically impossible.
"},{"location":"reference/rules.html#octahedral_factor-octahedral-factor","title":"octahedral_factor \u2014 Octahedral factor","text":"\u03bc = r_B / r_X says whether the B cation is large enough to hold six X anions around it ({min} \u2264 \u03bc \u2264 {max}).
"},{"location":"reference/rules.html#property_window-predicted-property-window","title":"property_window \u2014 Predicted {property} window","text":"The model's predicted {property} must lie between {min} and {max}.
"},{"location":"reference/rules.html#tolerance_factor-goldschmidt-tolerance-factor","title":"tolerance_factor \u2014 Goldschmidt tolerance factor","text":"t = (r_A + r_X) / (\u221a2 (r_B + r_X)) measures how well the A cation fits the cage of B\u2013X octahedra. Cubic perovskites form roughly for {min} \u2264 t \u2264 {max}.
"},{"location":"reference/rules.html#search-terms","title":"Search terms","text":"cubic_cell \u2014 Pulls the decoded cell towards a cube of the family's reference volume.entropy_bonus \u2014 Rewards uncertainty early in a round so the search explores (fades to zero).group_consistency \u2014 Sites of the same group should agree on their element (ramps up during a round).prototype_alignment \u2014 Pulls decoded positions onto the prototype's site positions.short_distance_penalty \u2014 Large penalty if any two decoded atoms come closer than min.site_repulsion \u2014 Short-range exponential repulsion between decoded atoms.site_separation \u2014 Keeps decoded atoms from collapsing onto each other (1/distance).soft_charge \u2014 Expected total charge of the most likely composition should be zero (ramps up during a round).tolerance_penalty \u2014 Soft version of the Goldschmidt tolerance-factor window, using the most likely elements.neutrality_bias \u2014 Raises the scores of anions whose charge can neutralise the most likely cations.from meidnet.constraints import CONSTRAINTS\n\n@CONSTRAINTS.register(\"no_lead\", \"Rejects any composition containing Pb.\")\ndef no_lead(cand):\n return cand.result(\"no_lead\", \"Pb\" not in cand.elements.values())\n Save it as my_rules.py, list it under plugins: in meidnet.yaml, and add - {name: no_lead} to the family's constraints. See Add a rule.
MEIDNet: Multimodal generative AI framework for inverse materials design. Anand Babu, Rog\u00e9rio Almeida Gouv\u00eaa, Pierre Vandergheynst, Gian-Marco Rignanese. npj Computational Materials (2026). doi:10.1038/s41524-026-02153-3 \u00b7 arXiv:2601.22009
@article{meidnet2026,\n title = {MEIDNet: Multimodal generative AI framework for inverse materials design},\n author = {Anand Babu and Rog{\\'e}rio Almeida Gouv{\\^e}a and Pierre Vandergheynst and Gian-Marco Rignanese},\n journal = {npj Computational Materials},\n year = {2026},\n doi = {10.1038/s41524-026-02153-3}\n}\n"},{"location":"research/paper.html#code-and-data-of-the-paper","title":"Code and data of the paper","text":"v1.0.0-paper (frozen; MEIDNet 2 reproduces it bit for bit \u2014 see Perov-5).checkpoints/ in the repository (2.8 MB each).meidnet download-data); Castelli et al., Energy Environ. Sci. 5, 5814 (2012); Xie et al., ICLR (2022).examples/perov5/paper_results/.Each notebook is a complete, runnable workflow. Training runs in your Colab session (free GPU is enough): your data never leaves your Google account.
Notebook What it does Time 01 \u2014 Quickstart published model, pick a target, read the report, explore the whole design space in 3D 5 min, CPU 02 \u2014 Your own data upload table + CIFs \u2192 check \u2192 train \u2192 generate \u2192 download everything 15 min + training 03 \u2014 Add a rule write a custom constraint in a few lines and see its effect before and after 5 min 04 \u2014 MEIDNet Studio in Colab the live Studio inside the notebook, then the same blocks driven from Python 10 min"},{"location":"start/colab.html#block-by-block-like-the-studio","title":"Block by block, like the Studio","text":"Every notebook follows the seven blocks of the Studio, in order and in the same colours: Block 1 \u00b7 Data (blue), Block 2 \u00b7 Model (orange), Block 3 \u00b7 Family (green), Block 4 \u00b7 Rules (amber), Block 5 \u00b7 Targets (pink), Block 6 \u00b7 Search (dark green) and Block 7 \u00b7 Candidates (violet). Each block starts with a coloured header saying what it does, has a form for its settings, shows its result as charts (and crystals in 3D where it helps), and ends by printing what flows on to the next block.
Run the cells from top to bottom (Runtime \u2192 Run all also works). Change a value in a form and re-run from that block on: the later blocks pick up the change.
The notebooks are generated from scripts/make_notebooks.py, so they stay in step with the command line.
Open the live Studio. It runs the published perovskite model: move rule limits and targets and watch what passes, run a latent search and read each candidate's checklist, export the meidnet.yaml. (Search budgets are capped on the shared server; the local install below has no limits and takes your own data.)
pip install meidnet # PyTorch CPU wheels are fine; CUDA is optional\nmeidnet demo # halide perovskites, band gap 2.0 eV \u2192 runs/demo/\n demo downloads the 2.8 MB published checkpoint, searches for 3 candidates (about a minute on a CPU), checks them against the family's rules and opens generation_report.html.
meidnet demo --family oxide --band-gap 3.0 --enthalpy -0.2 -n 5\nmeidnet studio # the live workbench with the same model\n Notebook 01 \u2014 quickstart
"},{"location":"start/quickstart.html#what-the-demo-did","title":"What the demo did","text":"cif column of the table, or one <id>.cif file per material in a folder up to max_sites atoms per cell (default 20); any elements Properties one or more numeric columns any units; each property is standardised unless you say otherwise An id a column whose values match the CIF file names (if you use files) 12, 12.0 and \"12\" are treated as the same id A family the prototype your structures share (e.g. cubic ABX\u2083) needed for generation; training without one is possible (align_to_prototype: false) A table like this is enough:
material_id,band_gap,dielectric,cif\nmat_001,1.42,18.3,\"# generated using pymatgen\ndata_CsPbBr3\n_cell_length_a 5.87 ...\"\nmat_002,2.16,11.7,\"...\"\n CSV, Excel (.xlsx) and JSON tables are read; Parquet too once pyarrow is installed (pip install \"meidnet[parquet]\").
The published model used 11k structures. A few thousand is typical; a few hundred lets you try the pipeline, but expect rough predictions (the training report tells you how rough).
"},{"location":"start/what-data.html#what-happens-to-each-row","title":"What happens to each row","text":"meidnet check reads every row exactly as training would and writes check_report.html with one line per reason a row was skipped (unreadable CIF, too many atoms, missing value, does not match the prototype) and example ids, so every skipped row is accounted for.
MEIDNet can only design for property values it has seen. The check report draws each property's distribution; the generation report flags targets outside the training range as extrapolation.
"},{"location":"start/what-data.html#which-family","title":"Which family?","text":"perovskite_abx3 (variants: oxide, halide, chalcogenide, nitride).double_perovskite_a2bbx6.align_to_prototype: false) and use the model to predict/screen, but generation needs one prototype.MEIDNet learns one latent space shared by crystal structures and their properties. Prediction reads it from the structure side; inverse design reads it from the property side and searches it for crystals with the properties you want.
The MEIDNet method in one minute. From the properties you want to candidate crystals, block by block; click a block to jump to it. MEIDNet Matter runs the same steps on real data.
\u25b6 Play \u25c0 \u25b6 0:00 Open the Studio \u2192"},{"location":"understand/how-it-works.html#one-latent-space-for-two-modalities","title":"One latent space for two modalities","text":"The training objective is
\\[ L = w_1 L_\\text{recon}(z_\\text{joint}) + w_2 L_\\text{prop}(z_\\text{joint}) + w_3 L_\\text{recon}(z_p) + w_4 L_\\text{prop}(z_p) + \\lambda(t)\\, L_\\text{InfoNCE}(z_c, z_p). \\]The idea in one sentence
Train the two encoders so that a crystal and its own properties land on the same point; then a point chosen from properties alone can be decoded into a crystal.
"},{"location":"understand/how-it-works.html#inverse-design-search-in-that-space","title":"Inverse design = search in that space","text":"For each target:
loss and weight); a cosine anchor to the target latent; the family's search terms (atoms apart, cubic cell, positions near the prototype, expected charge zero, same element on equivalent sites, loose tolerance factor); and repulsion between population members and from earlier successes (diversity).a = 2(r_B + r_X) for perovskites).select_weight, select_loss), skip duplicates and near-duplicate latents, save as CIF.A family is data, not code: a prototype (site positions), site groups (allowed elements and oxidation states), a cell-size rule, soft search terms, and hard rules. The published perovskite tables are families/perovskite_abx3.yaml; the same machinery runs double_perovskite_a2bbx6.yaml and any file you write.
In the cubic ABX\u2083 perovskite, the A cation sits on the corners of the cell, the B cation in the centre and the X anions on the face centres, so that B and its six X neighbours form an octahedron. A composition is one choice of element for each of the three sites.
"},{"location":"understand/how-it-works.html#the-design-space","title":"The design space","text":"For a prototype family, the set of compositions the decoder can output is finite. meidnet space and the Studio enumerate it and score each composition with the structure encoder. The search's candidates are a subset of this space; comparing the two views (encoder prediction vs search's decoded prediction) is a useful sanity check that the reports encourage.
MEIDNet 2 reproduces MEIDNet 1
The same featurisation, forward pass, training step and generation output: tests/test_v1_regression.py compares against the frozen v1 code in tests/legacy_v1/. One fix: v1's results depended on Python's hash seed through set iteration order; v2 fixes element order, so the same seed gives the same CIFs in any process.
MEIDNet shows its reasoning rather than a score. Where to look:
"},{"location":"understand/interpretability.html#before-trusting-the-model","title":"Before trusting the model","text":"z_clip bound; predictions there are less reliable). The model is trained on latents of length 1 and every search moves them further out (typically to length 3\u20135), so the report says this once for the whole run rather than on every card; each candidate's length is the latent_norm column of candidates.csv.A candidate is a composition on an ideal prototype with model-predicted properties. Whether it is stable, synthesisable, or has those properties is for DFT (the energy above the convex hull) and the lab to decide; meidnet screen is a first filter on formation energy.
In the released package, meidnet 2.3.1, which these pages document:
Structures any CIF with up tomax_sites atoms (default 20); any elements Properties any number of scalar columns Training your data, your properties; the published settings by default Generation prototype families: a fixed arrangement of sites whose occupants and cell size are chosen. Built in: cubic ABX\u2083, A\u2082BB\u2032X\u2086; write your own in YAML Rules charge balance, tolerance and octahedral factors, bond windows, minimum distance, predicted-property windows, element filters, and your own Python rules Explanations reports for data, training and generation; the Studio for live what-if"},{"location":"understand/limits.html#not-yet-supported","title":"Not yet supported","text":"max_sites can be raised, but memory and time grow with the square of it, and the published model was trained on 5-atom cells.training.init_from option to continue training from a checkpoint with the same properties.model.decoder_coordinate_input: prototype is the first step and is available as an experimental setting).Contributions of family files and rules are the easiest way to help; see the GitHub repository.
"},{"location":"use/config.html","title":"The configuration file","text":"meidnet.yaml holds everything a run depends on. One file = one reproducible experiment: it is copied into every output folder and stored inside model.pt.
name: my_oxides # outputs \u2192 runs/my_oxides/\nplugins: [] # Python files with custom rules (optional)\n\ndata: # where the structures and properties come from \u2192 meidnet check\nmodel: # size of the network (defaults are the paper's)\ntraining: # epochs, batch size, learning rate, alignment schedule \u2192 meidnet train\ngeneration: # family, objectives, targets, rules overrides, budget \u2192 meidnet generate\n Rules of thumb:
epocs: stops the run with a message naming the key.meidnet schema prints the JSON Schema (editors such as VS Code use it for completion and validation).The complete list of settings with their meaning and defaults is in the configuration reference.
"},{"location":"use/config.html#the-four-sections-in-one-picture","title":"The four sections in one picture","text":"data:\n table: materials.csv # one row per material\n properties: [{column: band_gap, unit: eV}, {column: dielectric}]\n align_to_prototype: true # atoms re-ordered to the family prototype\n\ntraining:\n epochs: 200\n contrastive_weight: 5.0 # how strongly structure and property latents are pulled together\n\ngeneration:\n family: perovskite_abx3\n variant: oxide\n objectives: # what to steer, and how to compare prediction with target\n - {property: band_gap, loss: l2, weight: 10000}\n targets: # one search per entry\n - {band_gap: 2.0}\n overrides: # change a family rule's parameters without editing the family file\n tolerance_factor: {min: 0.85, max: 1.0}\n exclude_elements: [Pb]\n"},{"location":"use/explore-3d.html","title":"Explore in 3D","text":"The Studio can show any set of structures as a map linked to a 3D viewer: each point on the map is one crystal; click a point and its structure appears next to the map, where you can rotate and zoom it. The viewer is chemiscope, an open-source structure\u2013property explorer.
Open it from any button marked \ud83e\uddca:
Button Where Shows \ud83e\uddca Explore all compositions in 3D Family block the design space: every composition of the family on its prototype \ud83e\uddca Map + 3D of all compositions Targets block the same design space, to compare predictions with your targets \ud83e\uddca All candidates in 3D Candidates block the candidates of your last search \ud83e\uddca See these structures in 3D Data block your data after Check my data, or the Perov-5 training data behind the published model \ud83e\uddca show in the 3D explorer the details window of any composition the design space, with that composition selectedYou can also open the page directly in the explorer with a deep link: ?explore=space, ?explore=candidates or ?explore=data.
formula the composition site_A, site_B, \u2026 the element on each site group lattice_a the cubic cell edge estimated from ionic radii (\u00c5) pred_<property> the model's prediction from the structure encoder, with its unit rule_<name> the value each rule measures, e.g. rule_tolerance_factor passes_all, verdict 1 / \"pass\" when every rule passes (with the limits currently set on the page) score, round, target_<property>, still_passes candidates only: search score, round found, the target, and whether it still passes the current rules The design space shows up to 2,000 compositions: those passing every rule first, then a fixed random sample of the rest. Your data shows the structures that passed Check my data; the Perov-5 training data shows its first 1,500 structures.
"},{"location":"use/explore-3d.html#clicking-a-point","title":"Clicking a point","text":"The crystal appears on the right: drag to rotate, scroll to zoom. The panel below lists every property of that structure. Bonds and the unit cell are drawn. Design-space structures are the ideal prototype filled with that composition's elements, at the cell size the family's lattice rule estimates.
"},{"location":"use/explore-3d.html#when-chemiscope-cannot-load","title":"When chemiscope cannot load","text":"The explorer is downloaded from a public CDN the first time you open it (about 3 MB). Without internet access, or if the CDN is blocked, the Studio switches to its built-in viewer: a scatter plot of the same two axes (coloured points pass every rule) linked to the Studio's own crystal viewer \u2014 click a point, drag the cell to rotate, double-click to spin. Nothing else changes.
"},{"location":"use/explore-3d.html#save-the-dataset","title":"Save the dataset","text":"\u2b07 dataset JSON saves what you see as a chemiscope dataset. Open it later at chemiscope.org (the site reads the file inside your browser; nothing is uploaded), share it with a colleague, or put it in a paper's supplementary material.
The same datasets can be produced without the Studio:
meidnet space meidnet.yaml --chemiscope space.json # the design space of your configuration\n and from Python:
from meidnet.studio.chemiscope import space_dataset, candidates_dataset, records_dataset\n In the Colab notebooks, the show3d(...) helper displays structures inline with chemiscope.show.
chemiscope is a third-party library (BSD-3-Clause licence) by G. Fraux, R. K. Cersonsky and M. Ceriotti. If you use the 3D explorer in published work, please cite: G. Fraux, R. K. Cersonsky, M. Ceriotti, Chemiscope: interactive structure-property explorer for materials and molecules, Journal of Open Source Software 5, 2117 (2020).
"},{"location":"use/reports.html","title":"Reading the reports","text":"Each command writes a self-contained HTML file in runs/<name>/. All three open with a one-sentence verdict (green / amber / red), show the evidence, and end with what to do next.
check_report.html","text":"training_report.html","text":"generation_report.html","text":"candidates.csv and generation.json","text":"The CSV has one row per candidate with targets, predictions, elements, cell edge, every rule's value, score and file name. The JSON holds the full funnel counts, rejected examples and settings \u2014 everything the report shows.
"},{"location":"use/studio.html","title":"MEIDNet Studio \u2014 the live workbench","text":"meidnet studio # the published perovskite model\nmeidnet studio meidnet.yaml # your project\n A page opens in your browser. The workflow is drawn as a strip of seven coloured blocks; click a block to open it. Whatever you change, the blocks after it update at once, and a line under the strip says, in words, what the change did to each later block \u2014 the way a LabVIEW diagram shows data flowing after you turn a knob.
No installation? Use the hosted Studio \u2014 the same page, running on a shared server.
"},{"location":"use/studio.html#reading-the-workflow-strip","title":"Reading the workflow strip","text":"Each block has its own colour, used everywhere on the page (its panel, its charts, its chips in the flow chain):
Block Colour What it holds Data blue the table of materials the model learns from Model orange the trained network (published or yours) Family green the crystal prototype and the elements allowed on each site Rules amber the hard checks every candidate must pass Targets pink the property values you want Search dark green the latent search of the paper Candidates violet what the search foundDashed pink lines are always a target; a violet \u2605 is always something the search found; green \u2713 means passes.
"},{"location":"use/studio.html#the-flow-chain-and-the-flow-log","title":"The flow chain and the flow log","text":"Under the strip, the flow chain repeats the last change in words, block by block, for example:
Rules: Goldschmidt tolerance factor max 1.05 \u2192 1 \u279c Rules: pass all rules 27 \u2192 23 (\u22124) \u279c Targets: best match CsSnBr\u2083 \u2192 CsGeBr\u2083 \u279c Candidates: 1 of 3 found candidates would now be rejected
Click a step to open that block.
The Flow log below it keeps the last 60 changes. Click an entry to replay its flow on the strip.
"},{"location":"use/studio.html#what-is-live-and-how","title":"What is live, and how","text":"For a prototype family the set of possible compositions is finite (924 for halide perovskites, 10,340 for halide double perovskites). When you open a family the server builds this design space once: every composition on the prototype, the value of each rule's descriptor (tolerance factor, octahedral factor, \u2026) and the model's predicted properties from the structure encoder. From then on, the page can answer instantly:
You change You see immediately a rule's limit how many compositions still pass that rule and all rules; the histogram of the descriptor with the window shaded; the funnel an element (click a chip to exclude it) compositions removed, new counts, new best matches a target the compositions predicted closest; the target drawn on the predicted-property histogram and scatter; an extrapolation warning if it lies outside the training range the comparison kind (as close as possible / at most / at least) the ranking anything, after a search which of the found candidates would now be rejectedDescriptor values are computed by the same Python functions that meidnet generate uses, so what the page shows is what the search enforces.
The live tables use structure \u2192 property (encode the prototype structure, decode its properties): fast, and it scores every composition. The Search block runs the paper's property \u2192 structure latent optimisation and shows its progress (target, round, step, loss), the log, and each candidate as it is found, with its checklist. Both views are of the same network; comparing them tells you whether the search found what the encoder considers best, and whether the predictions agree.
"},{"location":"use/studio.html#the-blocks","title":"The blocks","text":"Each block, with what it shows. The animation is the same block in the tour of the landing page.
DataModelFamilyRulesTargetsSearchCandidatesHow many materials were usable, why rows were skipped, property distributions, the elements present; Bring your own data (below).
Properties, units, training ranges, validation errors, loss and alignment curves; Train your own model (below).
Prototype sites with a rotatable 3D preview of the cell, element chips per site group with their charges (click to exclude), cell-size rule.
Each rule with its explanation, parameters, pass count and descriptor histogram; add a predicted-property window rule; the funnel.
One card per objective: target value, comparison kind, weights; the predicted-property scatter of all compositions (coloured = passes, grey = rejected, \u2605 = found by the search). Click any point or table row for its checklist and its crystal in 3D.
Budget (candidates, latents per round, rounds, steps), a rough time estimate, Run/Stop, progress, log, link to the full report.
One card per candidate: a rotatable 3D cell, elements, gauges of predicted values against the targets, the rule checklist, warnings, CIF links.
Crystals are drawn by a small built-in viewer: drag to rotate, double-click to spin.
"},{"location":"use/studio.html#beginner-view-and-researcher-mode","title":"Beginner view and Researcher mode","text":"The page opens in the beginner view: every block has an Input \u279c Logic \u279c Output strip with live numbers (\"924 compositions \u279c 5 hard rules, applied in order \u279c 27 pass every rule\") and the name of the Python function that does the work, a short In short explanation, and a glossary in the side panel (composition, rule, target, latent space, extrapolation).
The Researcher mode switch in the header trades these for the technical view: the \u270e Edit as text YAML drawer, and a Behind the scenes panel in every block with the meidnet.yaml and the Python of that block. The choice is remembered by your browser.
At the bottom of every block, Behind the scenes shows the same settings as the part of meidnet.yaml they come from and as the Python that does the same thing \u2014 with the values currently on the page. Copy either into your own project; nothing on the page is hidden from the command line.
The Data block has an adapter: it maps your column names to what MEIDNet expects. Nothing in your files is changed.
.xlsx) or JSON, one row per material \u2014 with an id column, numeric property columns and the structures, either as a column of CIF text or as a zip of <id>.cif files (select both files together). Parquet works too when pyarrow is installed.A few epochs give a rough model in a minute or two; 100\u2013200 epochs are typical for real work \u2014 run meidnet train locally (with a GPU if you have one) and open the result with meidnet studio meidnet.yaml.
On the hosted Studio
Each browser tab has its own private session: other visitors never see your data, model or candidates, and a session's files are deleted after an hour without activity. The shared machine allows up to 1,500 rows and 8 MB per upload, 30 training epochs, 20 atoms per cell, and two jobs (training or search) at a time across all visitors; search budgets are capped too. Run the Studio on your own computer to lift every limit.
"},{"location":"use/studio.html#edit-the-configuration-as-text","title":"Edit the configuration as text","text":"\u270e Edit as text in the header opens a drawer with the generation section of meidnet.yaml exactly as the blocks have it: family, variant, excluded elements, rule overrides, extra rules, objectives, targets and search budget. Change anything and press Apply \u2014 the blocks update and the flow chain shows what changed in each.
steps: Input should be greater than or equal to 1.rounds 99 \u2192 6 (limit on this shared server).extra_constraints, so the file round-trips: apply it, download it, run it with meidnet generate.\u2b07 Download meidnet.yaml (also in the Search block) writes the whole configuration \u2014 rules switched off on the page are listed under disabled_rules, excluded elements become exclude_elements, changed limits become overrides \u2014 so the command line reproduces exactly what the page shows. Settings the blocks do not show (for example search terms set in your own meidnet.yaml) are kept as they are.
Buttons marked \ud83e\uddca open the 3D explorer: a map with one point per structure, linked to a 3D viewer \u2014 the design space of the family, the candidates of a search, or the training data. See Explore in 3D.
"},{"location":"use/studio.html#deep-links","title":"Deep links","text":"Add to the address to open the page at a given place:
Address ends with Opens?panel=rules the Rules block (any block: data, model, family, rules, targets, search, candidates) ?explore=space the 3D explorer on the design space (candidates or data work too) Both can be combined: ?panel=targets&explore=space.
The \ud83c\udf19 / \u2600\ufe0f button in the header switches between the light and the dark theme; your browser remembers the choice.
"},{"location":"use/studio.html#static-copy-for-a-website","title":"Static copy for a website","text":"meidnet studio --export-static docs/studio.html\n embeds the state and design spaces into one HTML file. Everything works without a server except uploading, training and running a new search \u2014 useful for a plain web host. The hosted Studio is the full server instead:
meidnet studio --public --host 0.0.0.0 --port 7860 --run-root /tmp/runs --docs-dir site\n --public gives every visitor a private session and caps the budgets so the shared machine stays responsive; --docs-dir also serves a built copy of this documentation at /docs/.
This page takes a table of structures and properties to designed candidates. Every step writes a report that explains what happened; nothing requires Python.
"},{"location":"use/your-data.html#0-install","title":"0. Install","text":"pip install meidnet\n"},{"location":"use/your-data.html#1-describe-your-data-meidnet-init","title":"1. Describe your data: meidnet init","text":"meidnet init --name my_oxides --table materials.csv \\\n --id-column material_id --cif-column cif \\\n --properties band_gap dielectric \\\n --family perovskite_abx3 --variant oxide\n This writes a commented meidnet.yaml. Open it: every line says what it does. If your CIFs are files instead of a column, set cif_column: null and structures_dir: structures/.
data:\n table: materials.csv\n id_column: material_id\n cif_column: cif\n properties:\n - {column: band_gap, unit: eV}\n - {column: dielectric, unit: \"\"}\n val_fraction: 0.1\n max_sites: 20\n align_to_prototype: true\n"},{"location":"use/your-data.html#2-is-it-usable-meidnet-check","title":"2. Is it usable? meidnet check","text":"meidnet check meidnet.yaml\n 412 of 430 materials usable.\n skipped 14 does not match the perovskite_abx3 prototype e.g. m_031, m_118, m_204\n skipped 4 missing property value e.g. m_077, m_300\nreport: runs/my_oxides/check_report.html\n The report shows the verdict, the distribution of each property, the elements present and, for each skip reason, how to fix it (for example raise data.prototype_tolerance for distorted cells).
meidnet train","text":"meidnet train meidnet.yaml # 200 epochs by default\nmeidnet train meidnet.yaml --epochs 5 # a quick smoke test first\n training_report.html answers three questions: how accurate is each property prediction (error vs natural spread \u2192 good / fair / weak), did the two modalities align (retrieval accuracy), and what were the training curves. The model is saved as runs/my_oxides/model.pt with the property names, units and normalisation inside; meidnet info runs/my_oxides/model.pt describes it.
Time
About 21 s per epoch per 11k structures on a laptop GPU; roughly 10\u00d7 slower on CPU. Use Colab's free GPU (notebook 02) if you have none.
"},{"location":"use/your-data.html#4-design-meidnet-generate","title":"4. Design:meidnet generate","text":"Set the targets in meidnet.yaml:
generation:\n family: perovskite_abx3\n variant: oxide\n objectives:\n - {property: band_gap, loss: l2, weight: 10000}\n - {property: dielectric, loss: at_least, weight: 5000}\n targets:\n - {band_gap: 2.0, dielectric: 20}\n - {band_gap: 3.0, dielectric: 20}\n per_target: 4\n exclude_elements: [Pb, Cd]\n meidnet generate meidnet.yaml\n generation_report.html shows, per target, the funnel (how many attempts each rule removed), one card per candidate (elements, cell, each rule's measured value and window, predicted vs target gauges, warnings about extrapolation) and examples of rejected compositions. CIFs and candidates.csv are in runs/my_oxides/generation/.
meidnet studio","text":"meidnet studio meidnet.yaml\n Change a rule's limit, exclude an element or move a target and see immediately how many compositions pass and which are predicted closest; run searches and export the YAML. Studio guide.
"},{"location":"use/your-data.html#6-confirm","title":"6. Confirm","text":"Predicted properties are estimates. meidnet screen runs/my_oxides/generation (MACE universal potential, optional extra) gives a first stability filter; DFT or experiment has the last word.
Learn, build and benchmark multimodal AI for materials discovery. MEIDNet, the reference implementation, learns one latent space shared by crystal structures and their properties, and searches it for materials with the properties you want, using your own data, rules and material families.
\u25b6 Open the Studio 5-minute quickstart Learn multimodality \u2190 MEIDNet Prism home
"},{"location":"index.html#the-workflow","title":"The workflow","text":"Seven blocks, from a table of known materials to new candidates. Each block is a section of meidnet.yaml, a node in MEIDNet Studio (where a change in one block updates every block after it) and a section of the report that each step writes. Click a block to read about it.
The seven blocks at work on the published perovskite model. Click a block to jump to it.
\u25b6 Play \u25c0 \u25b6 0:00 Open the Studio \u2192"},{"location":"index.html#where-to-start","title":"Where to start","text":"Learn multimodality
What a modality is, the five challenges of multimodal learning, contrastive learning with a playground, and an interactive map of materials modalities.
Learn
Choose an architecture
Early fusion, late fusion, shared latent spaces, cross-attention and contrastive learning, and an advisor that recommends one for your data and goal.
Architecture Atlas
Try MEIDNet
The live Studio runs in the browser without installation; meidnet demo runs on a laptop CPU.
5-minute quickstart
Use MEIDNet on my data
A table with an id, property columns and CIFs. Four commands lead from a data check to candidates with reports.
Bring your own dataset
Change what it does
Targets, elements, rules and family are set in one YAML file, or with the controls of MEIDNet Studio, which exports the same file.
Recipes
Understand it
How the two modalities are aligned, how the search works, what the reports mean, and where the limits are.
How MEIDNet works
Benchmark any model
Leaderboards under fixed protocols, and meidnet score for a folder of generated structures from any model: the LeMat-GenBench metric families plus the conditional extension.
Benchmark compatibility
Design with my data in Matter
MEIDNet Matter is the companion application: a dataset, a design goal, a readiness report, candidates with evidence, and a validation ladder.
The ecosystem
What MEIDNet generates, and what it does not
In this package (meidnet 2.3.1), generation works for prototype families: a fixed arrangement of sites whose occupants and cell size are chosen (cubic ABX\u2083 perovskites, A\u2082BB\u2032X\u2086 double perovskites, and anything you describe the same way); it does not invent new atomic arrangements. The development engine that MEIDNet Matter runs adds a family-free generator. Scope, limitations and roadmap.
Predicted properties are the model's estimates, and the reports say when a prediction is an extrapolation. Confirm candidates with DFT or experiment; meidnet screen is a first filter.
A. Babu, R. Almeida Gouv\u00eaa, P. Vandergheynst, G.-M. Rignanese, MEIDNet: Multimodal generative AI framework for inverse materials design, npj Computational Materials (2026). Citation and benchmarks \u00b7 code as published (v1.0).
Further reading: A. Babu, R. Almeida Gouv\u00eaa, G.-M. Rignanese, Toward automated discovery with generative models multimodal learning and closed loop workflows in inverse materials design, Cell Reports Physical Science 7, 103561 (2026), doi:10.1016/j.xcrp.2026.103561 \u00b7 A. Babu, N. M. A. Krishnan, Multimodal and cross-modal learning techniques, APL Machine Learning 4, 030901 (2026), doi:10.1063/5.0346744.
"},{"location":"develop.html","title":"Develop with MEIDNet","text":"meidnet is the reference implementation of the method: one shared latent space for crystal structures and their properties, a prototype-family design space checked by chemistry rules, and a search in the latent space for candidates with the properties you want. Everything on this site runs on it.
pip install meidnet # Python 3.10+; CPU is enough\nmeidnet demo # the published Perov-5 model, three oxide perovskites in a few minutes\nmeidnet studio # the same workflow in your browser\n"},{"location":"develop.html#where-to-start","title":"Where to start","text":"I want to Page see the whole workflow once 5-minute quickstart know whether my data fits What data do I need?, bring your own dataset train and design without installing anything Run in Colab, the Studio change what the search looks for targets, properties, elements, family, rules check candidates with a machine-learned potential Screen with MACE score my own model's structures Benchmark compatibility call it from Python Python API, the configuration file, family files read the reports Reading the reports, interpreting a candidate"},{"location":"develop.html#the-package","title":"The package","text":"init, check, train, generate, studio, space, demo, screen, score, info, families, schema, download-data.MEIDNet Matter is the first application built on the package: a FastAPI service and a React interface around meidnet.generate.Designer, with the model behind one backend interface so that other engines can be plugged in. Its source is at github.com/ABnano/MEIDNet-Matter; the ecosystem page says how the two relate.
MEIDNet Prism and MEIDNet Matter do two jobs, and connect to what already exists rather than repeating it.
MEIDNet Prism MEIDNet Matter Job Learn a method, reproduce it, compare it, benchmark it, implement it. Answer \"what material should I investigate next?\" for a design goal: on the site with its demo data, on your computer with your own. You come here to read how multimodal learning works, run the published model, score a model against a fixed protocol, contribute a result, use themeidnet package. set property targets and chemistry rules, read whether the data and model support them, search for candidates, read the evidence next to each one, export CIFs and a run bundle. Address babu09-meidnet.hf.space babu09-meidnet-matter.hf.space"},{"location":"ecosystem.html#what-meidnet-works-with","title":"What MEIDNet works with","text":"Data. Materials Project, NOMAD, the datasets on the datasets page and the 31 databases by application, and your own tables of structures and properties. Matter's package reads your table with CIF files on your computer; a browser upload and imports from Materials Project and NOMAD are planned.
Methods. MEIDNet (this package) and any other model: the benchmarks score the predictions or candidate structures of any method with the same code, and meidnet score reports the generation quality of any folder of CIF files (benchmark compatibility). Matter runs MEIDNet as its first backend behind one backend interface.
Benchmarks. The MEIDNet protocols per dataset, and metric families named as in LeMat-GenBench so that results can be read side by side, with MEIDNet's conditional extension for property-conditioned generation.
Synthesis knowledge. Not here: LeMat-Synth and the Materials Project Synthesis Explorer hold the recipes; Matter will link a candidate to them rather than extract its own.
Validation. Machine-learned potentials (MACE through meidnet screen), DFT, and experiment. Matter records each candidate's stage on a validation ladder; the benchmarks count DFT-confirmed hits separately from predicted ones.
A candidate leaves Matter as a JSON record (structure, targets, predicted values, domain status, rules, novelty, stability stage, model, dataset, provenance) and as a CIF file. meidnet score reads a folder of such CIF files with their targets.csv, so a Matter run can be scored on Prism with the same metrics as any other generator's output, and a scored set can go on to MLIP screening, DFT or an experiment.
Copied unchanged from the npm registry (tarball checksums verified against the registry), so that the documentation and the Studio load no script from a content-delivery network.
library version used for licence MathJax 3.2.2 equations in the documentation:es5/tex-mml-chtml.js and the parts it loads on demand (fonts, TeX extensions, menu, accessibility) Apache-2.0 tablesort 5.3.0 sortable leaderboard tables MIT chemiscope 1.1.0 the 3D explorer of the Studio BSD-3-Clause"},{"location":"benchmarks/index.html","title":"MEIDNet Benchmarks","text":"Standardised tasks for multimodal materials models, each with a fixed protocol: the data split, the targets, the candidate budget and the metrics. Every method is evaluated the same way, the outputs behind each number are kept, and the scoring works for any model, not only MEIDNet. Results are compared within one dataset and one protocol version.
1protocols3tasks10methods11computed here"},{"location":"benchmarks/index.html#leaderboards","title":"Leaderboards","text":"dataset protocol tasks models baselines Perov-5perov5-v1.1 inverse design, property prediction, representation 5 5 Carbon-24 not yet defined \u2013 \u2013 \u2013 MP-20 not yet defined \u2013 \u2013 \u2013"},{"location":"benchmarks/index.html#analysis","title":"Analysis","text":"What the benchmark runs show beyond one number per method: the spread between training seeds, results on materials held out of training, where reconstruction fails, and what the shared space contains.
benchmarks/datasets/<dataset>.json: splits, property targets, candidate budget, metrics and the direction in which each is better.python scripts/benchmarks.py run evaluates a MEIDNet checkpoint end to end; python scripts/benchmarks.py score evaluates the predictions or candidate structures of any other model with the same code.benchmarks/submissions/<dataset>/<method>.json) holds the description, the numbers per task and the folder with the outputs behind them.benchmarks/verified/; submitted results are re-scored from their outputs before they are marked as computed here.meidnet score generated/ --reference data/perov5 [--targets targets.csv] [--mlip] reports the generation quality of a folder of CIF files from any model in the metric families of LeMat-GenBench (validity, uniqueness, novelty, diversity, distribution, stability, SUN; stability and SUN here rest on a formation-energy filter, not on the convex hull) and MEIDNet's conditional extension (target success, target error, multi-property success, constraint satisfaction, conditional diversity, target coverage). The compatibility page defines every metric and states where this implementation differs from LeMat-GenBench. A run bundle from MEIDNet Matter is scored the same way.
Contribute a method \u00b7 Benchmark compatibility \u00b7 Databases by application
"},{"location":"benchmarks/carbon24.html","title":"Carbon-24","text":"About 10,000 carbon structures with up to 24 atoms per cell (CDVAE split). In the MEIDNet paper it is the second structure-representation generalization test; no property modality and no checkpoint here.
10,153 materials \u00b7 split: CDVAE: 6,091 train / 2,031 val / 2,031 test \u00b7 dataset source
"},{"location":"benchmarks/carbon24.html#no-protocol-yet","title":"No protocol yet","text":"The paper uses this dataset for structure-representation results; no benchmark protocol has been defined for it yet. A protocol is a protocol section in benchmarks/datasets/carbon24.json with its tasks, settings and metrics: Perov-5 is the template (how to add a dataset).
Two families of metrics, so that a result here can be read next to results elsewhere.
"},{"location":"benchmarks/compatibility.html#crystal-generation-quality-the-lemat-genbench-families","title":"Crystal-generation quality: the LeMat-GenBench families","text":"LeMat-GenBench (Siron et al., 2025) evaluates crystal generative models in eight families. meidnet score reports the same families, from a folder of CIF files produced by any model, with the definitions below. Where this implementation differs from LeMat-GenBench, the table says so; for leaderboard-comparable numbers, run LeMat-GenBench itself.
meidnet score validity charge neutrality, minimum interatomic distance, coordination environment, physical plausibility charge neutrality (an oxidation-state assignment that sums to zero), closest pair \u2265 max(0.8 \u00c5, 0.6 \u00d7 the sum of the atomic radii), density 0.5\u201325 g/cm\u00b3, cell lengths 1\u201360 \u00c5, angles 10\u2013170\u00b0. Coordination environments are not checked. uniqueness BAWL fingerprints or StructureMatcher within the set pymatgen StructureMatcher (ltol 0.2, stol 0.3, angle_tol 5\u00b0, primitive cells) novelty fraction not in LeMat-Bulk (BAWL or StructureMatcher) against a reference you name (--reference: the Perov-5 split, or any CSV with cif/formula columns): by composition (reduced formula) and by structure (StructureMatcher against the reference entries of the same composition) diversity Vendi scores and Shannon entropy of elements, space groups, site numbers, physical size Shannon entropy (bits) and counts of the elements, space groups (spglib, symprec 0.1) and site numbers; the density's mean and spread distribution JSD of categorical properties, MMD of volume and density, Fr\u00e9chet distance of MLIP embeddings Jensen\u2013Shannon distance (base 2) of the element frequencies and of the site numbers against the reference. MMD and Fr\u00e9chet distances are not computed. stability energy above the convex hull from several MLIPs (stable \u2264 0, metastable \u2264 0.1 eV/atom) with --mlip: relaxation with MACE-MP and the formation energy per atom against elemental reference phases (meidnet screen's filter); the report counts a structure as stable when it passes the filter (\u2264 0.1 eV/atom). This is a formation-energy filter, not the energy above the hull: its rates are not comparable with LeMat-GenBench's. hhi production and reserve supply risk not computed sun stable \u2227 unique \u2227 novel; MetaSUN passes the formation-energy filter \u2227 unique \u2227 novel by structure, with --mlip and a reference with CIFs; reported as sun, but not comparable with LeMat-GenBench's hull-based SUN"},{"location":"benchmarks/compatibility.html#conditional-inverse-design-quality-the-meidnet-extension","title":"Conditional inverse-design quality: the MEIDNet extension","text":"A conditional generator is asked for a property; these metrics say whether it delivered. They need targets.csv with a file column (the CIF file name) and, per property, a point target <p>_target, a window <p>_min / <p>_max, or both. A bound such as \"formation energy at most 1.0 eV/atom\" is a window with only <p>_max = 1.0, not a point target. An optional <p>_value holds the value the submitter reports for the structure, with a source column saying how it was obtained (dft, experiment, predicted). Without a value, --model <checkpoint> predicts it with a MEIDNet model, and the report labels those values model-predicted.
file,dir_gap_target,dir_gap_min,dir_gap_max,dir_gap_value,heat_all_max,heat_all_value,source\ncand-001.cif,1.5,1.2,1.8,1.47,1.0,-0.62,dft\n metric definition target success rate share of structures whose value lies inside the window when one is given, else with |value \u2212 target| \u2264 tolerance, per property; the tolerance is --tolerance p=\u2026 or 5 % of the reference's range target error mean |value \u2212 target|, or the distance outside the window for a property with a window and no point target multi-property success share with every targeted property within tolerance constraint success valid structures (the validity family) among the successes conditional diversity distinct compositions among the successes, over the successes target coverage distinct target vectors with at least one success, over the distinct targets interpolation share targets inside the reference's property range (needs property columns in the reference) Oracle efficiency, the number of candidates evaluated per success, is a property of a run, not of a set of structures: the Perov-5 protocol reports it as the candidate budget and the delivered count.
"},{"location":"benchmarks/compatibility.html#running-it","title":"Running it","text":"pip install \"meidnet>=2.3.1\" # or: pip install \"meidnet[stability]\" for --mlip\nmeidnet download-data # Perov-5 as a reference (data/perov5/)\nmeidnet score generated/ --reference data/perov5\nmeidnet score generated/ --reference data/perov5 --targets targets.csv --tolerance dir_gap=0.3\nmeidnet score generated/ --reference data/perov5 --mlip --out report.json\n generated/ is a folder of CIF files (any depth) or a CSV with a cif column. The report prints as a table; --out writes the JSON with the per-structure checks. A run bundle from MEIDNet Matter contains cifs/ and targets.csv in this layout.
Example: the 26 candidate structures shipped with the paper (examples/perov5/paper_results) scored against the full Perov-5 set, without MLIP, in three seconds:
| validity | valid (all checks) | 100.0 % |\n| uniqueness | unique structures | 24 of 26 (92.3 %) |\n| novelty | new compositions vs perov5 | 69.2 % |\n| novelty | new structures vs perov5 | 69.2 % |\n| diversity | elements (entropy) | 25 (3.48 bits) |\n| diversity | space groups (entropy) | 1 (0.00 bits) |\n| distribution | element JSD vs reference | 0.717 |\n One space group, because every structure is a cubic ABX\u2083 prototype: the diversity family shows where a prototype-family generator sits next to a free-form one.
Numbers from the metric families go into a submission under results.generation; the contribute page has the record layout.
About 45,000 Materials Project structures with at most 20 atoms per cell (CDVAE split). In the MEIDNet paper it tests how the crystal encoder and decoder generalise beyond perovskites; no property modality was aligned on it and no MP-20 checkpoint is shipped in this repository. The split files hold 45,229 structures; the size often quoted for MP-20, 45,231, does not match them.
45,229 materials \u00b7 split: CDVAE: 27,136 train / 9,047 val / 9,046 test \u00b7 dataset source
"},{"location":"benchmarks/mp20.html#no-protocol-yet","title":"No protocol yet","text":"The paper uses this dataset for structure-representation results; no benchmark protocol has been defined for it yet. A protocol is a protocol section in benchmarks/datasets/mp20.json with its tasks, settings and metrics: Perov-5 is the template (how to add a dataset).
From nothing installed to candidate materials checked with a machine-learned interatomic potential (MLIP), with the commands that were run for this page and what they printed. Then: which of the public checkpoints to use for what.
Quick start \u00b7 Which model \u00b7 Your own targets \u00b7 Your own data
"},{"location":"benchmarks/perov5-guide.html#quick-start","title":"Quick start","text":"Three candidates for a direct band gap of 2 eV, generated and screened. Run on a laptop for this page: 29 seconds to generate, under 2 minutes to screen.
Install.
pip install \"meidnet[stability] @ git+https://github.com/ABnano/MEIDNet.git\"\n [stability] adds the MACE potential for step 3. Without it, steps 1 and 2 work the same.
Generate. The demo uses the published model and the cubic halide perovskite family.
meidnet demo --family halide --band-gap 2.0 --enthalpy -0.10 -n 3 --out runs/demo\n It printed:
candidate predicted band gap (eV) predicted formation enthalpy (eV/atom) note NaNiI\u2083 1.97 -0.10 KMnI\u2083 2.09 0.35 NaSnI\u2083 1.98 -1.31 extrapolating: outside the range of the training dataEach candidate is a CIF file in runs/demo/generation/cifs/; runs/demo/generation_report.html shows every rule each one passed.
Screen with the MLIP. MACE-MP-0 relaxes each crystal and computes its formation energy.
meidnet screen runs/demo/generation/cifs --train-csv data/perov5/train.csv\n It printed:
candidate MACE formation energy (eV/atom) passes the \u0394Hf filter unique novel NaNiI\u2083 -0.72 yes yes yes KMnI\u2083 -1.08 yes yes yes NaSnI\u2083 -0.94 yes yes yes3 of 3 pass the formation-energy filter (at most 0.10 eV/atom against the elements; the report calls them stable) and are unique and novel. --train-csv needs meidnet download-data once; without it, novelty is skipped.
Confirm. An MLIP is a first filter. Before any claim about a candidate, confirm its stability (the energy above the convex hull) and its band gap with DFT.
The outputs of this run are kept in benchmarks/reproduction/perov5/demo/. No installation: the same search runs in the Studio.
All public checkpoints, measured under the same protocol (leaderboard): 54 candidates for three band-gap targets in three chemical families, screened with MACE-MP-0.
model delivered (of 54) \u0394Hf\u00b7U\u00b7N (of 54) passes the \u0394Hf filter (share) band-gap target met, of candidates with a DFT value alignment (cosine) retrieval, top 1 MEIDNet (published model) 53 33 0.96 1 of 18 0.772 0.336 MEIDNet (shorter training) 52 30 0.92 1 of 18 0.480 0.297 MEIDNet (first early-fusion model) 54 35 0.94 3 of 16 0.655 0.028 MEIDNet (alignment training, seed 3) 47 33 0.87 2 of 8 0.954 \u00b1 0.011 0.297 \u00b1 0.062 Encoder screening (baseline) 54 46 0.85 \u2013 \u2013 \u2013 Random sampling (baseline) 54 42 0.89 0 of 6 \u2013 \u2013Checkpoint files: MEIDNet (published model): dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth; MEIDNet (shorter training): \u2026_propertyaware.pth; MEIDNet (first early-fusion model): dual_autoencoder_clip_earlyfusion.pth; MEIDNet (alignment training, seed 3): reproduction/meidnet_paper_rerun_seed3.pth. The alignment columns of the seed-3 row are the mean of the seven alignment models.
How to read this table, and what to start with
meidnet demo and of the Studio, and its decoder (like that of the shorter training) was trained to rebuild a crystal from the property latent alone, which is what inverse design asks of it. Compare its candidates with the encoder screening of the same family (meidnet space), which needs no search.Targets, families, elements and rules are settings of one file, meidnet.yaml.
meidnet init --template perov5 -o meidnet.yaml # a starting file\n# edit generation.targets, generation.variant, generation.exclude_elements \u2026\nmeidnet generate meidnet.yaml --model checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth\nmeidnet screen runs/perov5/generation/cifs --train-csv data/perov5/train.csv\n Change the target properties \u00b7 Exclude or restrict elements \u00b7 Change the material family \u00b7 Add a rule
"},{"location":"benchmarks/perov5-guide.html#your-own-data","title":"Your own data","text":"A table with one row per material, a CIF for each row and one numeric column per property is enough to train your own model: Bring your own dataset. When you train:
Seven training runs of the alignment model, three without the curriculum and three with materials held out give more than one number per model. This page reads them for what they say about training, about failures and about the shared space, and turns each result into something you can use. Every number is generated from findings.json; the runs are described on Alignment across seeds.
How the model learns \u00b7 Where it fails \u00b7 What the shared space contains \u00b7 In practice
"},{"location":"benchmarks/perov5-insights.html#how-the-model-learns","title":"How the model learns","text":""},{"location":"benchmarks/perov5-insights.html#the-curriculum-builds-the-structures-first","title":"The curriculum builds the structures first","text":"With the curriculum, the contrastive weight starts at zero and grows over the first 1,500 epochs. In a paired run (seed 6, the same starting weights and data order), structure matching reaches 88.3 % at epoch 50 with the curriculum and 8.5 % without it; without the curriculum it is still 36.2 % at epoch 300. The alignment behaves the other way round: without the curriculum the cosine is already 0.88 at epoch 10, against 0.03 with it.
Structure matching (most likely element), seed 6
Structure matching during the first 300 epochs, with and without the curriculum01002003000255075epochstructure matching (%)with the curriculumwithoutCosine between the two latents, seed 6
Cosine during the first 300 epochs, with and without the curriculum010020030000.20.40.60.8epochcosinewith the curriculumwithoutAfter the full training, over three and seven seeds:
cosine L2 structure matching, sampled element with the curriculum (7 seeds, 2,200 epochs) 0.954 \u00b1 0.011 0.301 \u00b1 0.034 86.1 \u00b1 5.0 % without (3 seeds, 2,500 epochs) 0.949 \u00b1 0.009 0.316 \u00b1 0.028 67.1 \u00b1 7.6 %What this means for you
The curriculum does not change how well the modalities align in the end. It decides whether the model also learns to rebuild crystals. Keep training.contrastive_warmup_epochs on when you train on your own data.
In the seed-6 run, structure matching is highest at epoch 300 (93.7 %), when the cosine is only 0.82. From there to the end it moves between 77.8 % and 93.7 % from one snapshot to the next, and ends at 88.5 % (cosine 0.94).
Structure matching and cosine over 2,200 epochs, seed 6 (29 snapshots)
Structure matching and cosine over the whole training, seed 605001,0001,5002,0000255075epochstructure matching (%)cosine \u00d7 100What this means for you
The last epoch is not the best checkpoint for reconstruction. Save checkpoints during training and choose one on a validation measure. This is one seed; the swings may differ for others.
"},{"location":"benchmarks/perov5-insights.html#early-alignment-does-not-predict-the-final-one","title":"Early alignment does not predict the final one","text":"At epoch 50 the cosine of the seven seeds ranges from 0.17 to 0.73; at the end from 0.94 to 0.96. The order of the seeds at epoch 100 has a rank correlation of only 0.32 with their final order (figure on Alignment across seeds).
What this means for you
Do not judge a model, or stop a run, on its alignment after a few dozen epochs. A short training, such as the 30 epochs of the hosted Studio, gives a rough model whose quality depends on the seed.
"},{"location":"benchmarks/perov5-insights.html#alignment-and-reconstruction-are-independent","title":"Alignment and reconstruction are independent","text":"Across the seven seeds, the correlation between the final cosine and structure matching is 0.17 (sampled element) and 0.02 (most likely element). The seed with the highest cosine (0.965) has the lowest structure matching (78.2 %).
What this means for you
Report both. A high cosine says nothing about how well crystals are rebuilt.
"},{"location":"benchmarks/perov5-insights.html#where-it-fails","title":"Where it fails","text":""},{"location":"benchmarks/perov5-insights.html#failures-are-seed-noise-not-hard-materials","title":"Failures are seed noise, not hard materials","text":"Of the 18,928 materials, 99.94 % are reconstructed by at least one of the seven seeds and 51.9 % by all seven; only 11 are missed by every seed. Whether one seed fails on a material says almost nothing about another seed (correlation 0.06).
Number of materials reconstructed by k of the seven seeds
Materials reconstructed by k of the seven seeds7 of 7 seeds9,8316 of 7 seeds6,2695 of 7 seeds2,0424 of 7 seeds5123 of 7 seeds1652 of 7 seeds691 of 7 seeds290 of 7 seeds11Right element per site, seven seeds pooled (A and B: cations; X: anions)
Share of materials with the right element on each sitesite X299.96 %site X199.90 %site X399.89 %site A96.65 %site B95.47 %So several seeds can be combined. Adding the element probabilities of the seeds, site by site, and taking the most likely element gives the exact composition for 99.77 % of the materials with three seeds and 99.99 % with seven, against 92.1 % for one seed on average (85.6\u201396.2 %).
What this means for you
Three models trained with different seeds, with their element probabilities added, remove almost all composition errors on the training materials. It costs three trainings and no change to the model.
"},{"location":"benchmarks/perov5-insights.html#the-bottleneck-is-naming-the-cation","title":"The bottleneck is naming the cation","text":"79 % of the failed reconstructions have a wrong element, and almost always on a cation site: the A site is right for 96.7 % of the materials and the B site for 95.5 %, the three anion sites for 99.9 % or more. When the composition is right, 97.8 % of the crystals match; the lattice length is off by 0.10 \u00c5 on average.
"},{"location":"benchmarks/perov5-insights.html#unseen","title":"On unseen materials the whole loss is the cation","text":"trained on 80 %, three seeds A site right B site right anion sites right match when the composition is right lattice error materials seen in training 97.4 % 97.2 % 99.9 % 96.2 % 0.104 \u00c5 held-out materials 86.5 % 84.0 % 99.4 % 96.0 % 0.115 \u00c5What this means for you
The geometry generalises: lattice and positions are as good on unseen materials as on seen ones. What does not generalise is choosing the A and B elements. Work on the model should go there first; candidates should have their composition checked first.
"},{"location":"benchmarks/perov5-insights.html#take-the-most-likely-element","title":"Take the most likely element","text":"The training script's evaluation samples the element of each site. Taking the most likely element instead raises structure matching by 3.9 points on average (2.8 to 5.4 over the seven seeds).
"},{"location":"benchmarks/perov5-insights.html#the-decoder-knows-when-it-is-unsure","title":"The decoder knows when it is unsure","text":"Take the lowest of the five top probabilities of a decoded crystal (one per site) as its confidence. It needs no reference structure.
confidence share of materials (seen) reconstructed correctly (seen) share (held-out) reconstructed correctly (held-out) \u2265 0.9 77.9 % 96.0 % 63.7 % 82.3 % 0.6 to 0.9 17.6 % 74.5 % 26.9 % 51.5 % < 0.6 4.5 % 49.0 % 9.4 % 34.3 % all 100 % 90.1 % 100 % 69.5 %Area under the ROC curve: 0.81 on seen materials (seven seeds), 0.75 on held-out materials (three seeds).
What this means for you
Rank or filter decoded crystals by this confidence before spending computing time on them.
"},{"location":"benchmarks/perov5-insights.html#chemistry-matters-little-some-cations-more","title":"Chemistry matters little, some cations more","text":"Structure matching by anion set, seven seeds pooled:
anions O\u2082N ONF O\u2082F O\u2083 ON\u2082 O\u2082S N\u2083 structure matching 91.7 % 91.2 % 91.0 % 91.0 % 89.3 % 89.1 % 87.2 %The cations with the lowest structure matching (elements with at least 100 materials):
site lowest highest A Os 82 %, Cs 84 %, Ir 85 %, Rb 85 %, B 85 %, K 87 % Sn 95 %, Bi 94 %, Sb 94 %, Ga 94 % B Ca 82 %, Hf 85 %, Mn 86 %, B 86 %, Ta 86 %, La 87 % Cu 94 %, Ni 94 %, Sb 93 %, Ga 93 %"},{"location":"benchmarks/perov5-insights.html#what-the-shared-space-contains","title":"What the shared space contains","text":""},{"location":"benchmarks/perov5-insights.html#the-modalities-are-aligned-before-the-projection-heads","title":"The modalities are aligned before the projection heads","text":"The contrastive loss of this model acts on the normalised encoder outputs. There the cosine is 0.954 \u00b1 0.011. After the projection heads, which feed the decoder, the same pairs have a cosine of -0.978 \u00b1 0.002: the two projected vectors point in nearly opposite directions, and the decoder reads their mean.
In the benchmark
The representation task compares the two latents in the space where each model aligns them, declared per method. The cosine in both spaces is recorded on each method's page.
"},{"location":"benchmarks/perov5-insights.html#the-128-number-latents-use-about-two-directions","title":"The 128-number latents use about two directions","text":"The participation ratio, the effective number of directions a set of vectors uses, is 2.2 \u00b1 0.0 for the structure latents and 2.3 \u00b1 0.1 for the property latents, out of 128; the joint latent that the decoder reads uses 8.5 \u00b1 0.8.
What this means for you
Two scalar properties can organise two directions, and the alignment pulls the structure latent onto them. A richer second modality, such as a diffraction pattern or a density of states, is the way to a richer shared space (roadmap).
"},{"location":"benchmarks/perov5-insights.html#the-property-modality-of-perov-5-is-thin","title":"The property modality of Perov-5 is thin","text":"96.1 % of the materials (18,193) have a direct band gap of 0, and the 18,928 materials share only 903 distinct pairs of (formation enthalpy, band gap). 94 % of the materials have the same pair as at least ten others; the largest group has 261.
"},{"location":"benchmarks/perov5-insights.html#retrieval-works-in-one-direction","title":"Retrieval works in one direction","text":"top 1 median rank from a structure, find its properties 0.230 186 from the properties, find the structure 0.003 228Ranks are among all 18,928 materials; a material sharing its properties with others is not counted against. From properties to a structure, many crystals are equally right answers.
What this means for you
This is why inverse design in MEIDNet is a search and not a lookup: a material family fixes the sites, rules remove impossible compositions, and the search moves through the latent space (How MEIDNet works).
"},{"location":"benchmarks/perov5-insights.html#materials-with-a-higher-formation-enthalpy-align-better-and-reconstruct-worse","title":"Materials with a higher formation enthalpy align better and reconstruct worse","text":"By fifths of the formation enthalpy, from the lowest to the highest:
formation enthalpy up to (eV/atom) 0.88 1.22 1.54 2.00 5.16 cosine 0.952 0.948 0.950 0.955 0.963 structure matching 91.6 % 91.6 % 91.2 % 89.9 % 86.0 %The correlation between a material's cosine and its formation enthalpy is 0.47 \u00b1 0.06 over the seven seeds.
"},{"location":"benchmarks/perov5-insights.html#what-a-structure-alone-predicts","title":"What a structure alone predicts","text":"On the 3,786 held-out materials, with the property of the five nearest training materials in the structure latent (three seeds):
formation enthalpy (eV/atom) direct band gap (eV) five nearest neighbours in the structure latent 0.060 \u00b1 0.004 0.087 \u00b1 0.003 nearest property latent (cross-modal) 0.062 \u00b1 0.004 0.131 \u00b1 0.016 linear model on the structure latent 0.144 \u00b1 0.015 0.152 \u00b1 0.023 mean of the training materials 0.563 0.167Mean absolute errors. The band-gap numbers are small because most gaps are zero.
What this means for you
The properties decoded from the joint latent have an error of only 0.008 eV/atom, but the joint latent contains the true properties: that is a reconstruction. The error to expect for a new structure is the first row, about 0.06 eV/atom.
"},{"location":"benchmarks/perov5-insights.html#in-practice","title":"In practice","text":"What the results above suggest for anyone training or using such a model:
Steps 2, 4 and 5 are measured here on reconstruction, with the alignment model. They are not yet options of meidnet generate.
The alignment model of MEIDNet learns one space for crystal structures and their properties. This page measures how well the two modalities agree in that space, and how much the answer depends on the random seed: the same training was run seven times, and every checkpoint is public.
0.954 \u00b1 0.011cosine, 7 seeds0.301 \u00b1 0.034L2, 7 seeds86.1 \u00b1 5.0 %structure matching18,928materialsResults \u00b7 During training \u00b7 Unseen materials \u00b7 Do it yourself \u00b7 What the runs show
"},{"location":"benchmarks/perov5-reproduction.html#what-was-run","title":"What was run","text":"model early fusion of formation enthalpy and band gap; E(n)-equivariant crystal encoder; 128-dimensional latents training 2,200 epochs, batch 16, Adam, learning rate 1e-3; symmetric InfoNCE with temperature 0.01; contrastive weight raised linearly from 0 to 5 over the first 1,500 epochs (the curriculum) data all 18,928 Perov-5 materials, scored on the same materials; unseen materials are measured separately seeds 0 to 6, one run each, about 7 hours on one NVIDIA A100 script and weightsreproduction/paper_alignment/ \u00b7 seven checkpoints on Hugging Face"},{"location":"benchmarks/perov5-reproduction.html#results","title":"Results","text":"seed cosine L2 structure matching, sampled element structure matching, most likely element retrieval, top 1 0 0.9563 0.2934 90.04 % 92.79 % 0.245 1 0.9585 0.2862 91.41 % 94.55 % 0.288 2 0.9373 0.3529 82.91 % 88.34 % 0.218 3 0.9592 0.2839 91.55 % 94.69 % 0.249 4 0.9654 0.2615 78.21 % 82.49 % 0.267 5 0.9586 0.2863 85.15 % 88.87 % 0.215 6 0.9400 0.3449 83.76 % 88.82 % 0.127 mean \u00b1 s.d. 0.954 \u00b1 0.011 0.301 \u00b1 0.034 86.1 \u00b1 5.0 % 90.1 \u00b1 4.3 % 0.230 \u00b1 0.052 range 0.937\u20130.965 0.262\u20130.353 78.2\u201391.5 % 82.5\u201394.7 % 0.127\u20130.288 The four measures used on this page StructureMatcher (stol 0.5, angle_tol 10, ltol 0.3). Sampled element draws the element of each site from the decoder's probabilities, as the training script's own evaluation does; most likely element takes the highest probability and is deterministic.A seed fixes the result
Seeds 0, 1, 2 were trained twice, on different hardware and library versions (torch 2.6.0, pymatgen 2024.11.13, NVIDIA A100 40 GB; torch 2.8.0, pymatgen 2025.10.7, NVIDIA A100 80 GB). Every number of the two sets is identical. The differences between the rows above therefore come from the seed alone: quote a result with its seed, or as a mean over seeds.
"},{"location":"benchmarks/perov5-reproduction.html#during-training","title":"During training","text":"Cosine between the structure and property latents, per epoch, for the seven seeds
Cosine between the two latents during training, seven seeds05001,0001,5002,00000.250.50.751epochcosine (training batches)seed 0seed 1seed 2seed 3seed 4seed 5seed 6The seeds differ most early in training and converge later:
epoch lowest seed highest seed spread 10 0.013 0.159 0.146 25 0.088 0.285 0.197 50 0.166 0.727 0.561 100 0.506 0.844 0.338 200 0.765 0.900 0.135 400 0.851 0.928 0.078 800 0.908 0.947 0.039 1,500 0.934 0.962 0.028 2,200 0.939 0.960 0.022"},{"location":"benchmarks/perov5-reproduction.html#unseen-materials","title":"Unseen materials","text":"The runs above score the materials the model was trained on. To measure materials it has never seen, the same training was repeated on 15,142 materials (80 %) with 3,786 (20 %) held out, with three seeds.
cosine L2 structure matching, sampled structure matching, most likely retrieval, top 1 held-out 3,786 materials 0.919 \u00b1 0.006 0.376 \u00b1 0.020 66.6 \u00b1 5.9 % 69.5 \u00b1 6.3 % 0.087\u20130.105 the 15,142 trained on 0.953 \u00b1 0.008 0.305 \u00b1 0.027 87.4 \u00b1 4.4 % 90.8 \u00b1 3.9 % 0.207\u20130.275The alignment carries over to unseen materials with a small loss; the reconstruction of the crystal loses about twenty points. What the runs show traces that loss to one cause.
"},{"location":"benchmarks/perov5-reproduction.html#do-it-yourself","title":"Do it yourself","text":"1 \u00b7 In the browser2 \u00b7 On a laptop, about a minute3 \u00b7 Full training, one GPU, about 7 hoursNothing to install. The seven models are compared with the other methods on the Perov-5 leaderboard, and the insights page has the figures behind every statement here.
Recompute the cosine and L2 of any seed on a CPU. The checkpoint (2.8 MB) is downloaded once from Hugging Face to ~/.meidnet/reproduction/.
pip install git+https://github.com/ABnano/MEIDNet.git\ngit clone https://github.com/ABnano/MEIDNet.git && cd MEIDNet\nmeidnet download-data # Perov-5 into data/perov5/\npython scripts/reproduce_alignment.py --seed 4 # prints cosine and L2\npython scripts/reproduce_alignment.py --seed 4 --structure-matching # also rebuilds every crystal: a few minutes\n Expected for seed 4: cosine 0.9654, L2 0.2615, structure matching 82.49 % (most likely element). The values of every seed are in runs.csv.
The training script and its wrapper are in reproduction/paper_alignment/. In the clone, after meidnet download-data:
cd reproduction/paper_alignment\npython prepare_data.py # train.csv and cif_files/: all 18,928 materials\npython -u retrain_alignment.py --seed 4 --epochs 2200 # trains, then prints cosine, L2 and structure matching\npython -u retrain_alignment.py --ckpt ~/.meidnet/reproduction/meidnet_paper_rerun_seed4.pth # evaluation only\n The same seed gives the same numbers as in the table above, on any GPU.
"},{"location":"benchmarks/perov5-reproduction.html#files","title":"Files","text":"findings.json: every number on this page and the next, generated by scripts/reproduction_findings.py.runs.csv: one row per run. snapshots_seed6.csv: seed 6 at 29 points of training.per_material_7seeds.csv.gz: for each of the 18,928 materials and each seed, matched or not, and the cosine.18,928 cubic ABX3 perovskites with relaxed structures, formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV). The CDVAE split of the Castelli et al. (2012) perovskite set; the dataset behind the published MEIDNet model and the live Studio.
18,928 materials \u00b7 split: CDVAE: 11,356 train / 3,787 val / 3,785 test \u00b7 properties: heat_all, dir_gap \u00b7 dataset source
Inverse design \u00b7 Property prediction \u00b7 Representation \u00b7 Alignment across seeds \u00b7 What the runs show \u00b7 Choose a model and generate \u00b7 Protocol \u00b7 Reported in the paper \u00b7 Submit a method
"},{"location":"benchmarks/perov5.html#inverse-design","title":"Inverse design","text":"Propose cubic ABX3 perovskites for three band-gap targets in three chemical families (54 candidates); score them for stability with an MLIP, uniqueness, novelty and, where a DFT value exists, the target band gap. Export: CSV \u00b7 JSON.
#Method\u0394Hf\u00b7U\u00b7N \u2191\u0394Hf filter \u2191Unique \u2191Novel \u2191\u0394Hf \u2193DFT hit \u2191DFT knownDelivered \u2191ParamsTraining dataAddedLinks1Encoder screeningbaseline0.8520.8521.0001.000-1.28\u20130540.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights2Random samplingbaseline0.7780.8891.0000.889-1.340.000654\u2013\u20132026-10-03code3MEIDNet (first early-fusion model)0.6480.9441.0000.704-1.290.18816540.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights4MEIDNet (published model)0.6110.9621.0000.660-1.520.05618530.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights5MEIDNet (alignment training, seed 3)0.6110.8721.0000.830-1.320.2508470.70 MPerov-5, all 18,928 materials2026-10-05paper \u00b7 code \u00b7 weights6MEIDNet (shorter training)0.5560.9231.0000.654-1.500.05618520.70 MPerov-5, all 18,928 materials2026-10-03paper \u00b7 code \u00b7 weights How to read the inverse design tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds.\u0394Hf\u00b7U\u00b7N counts candidates that pass the formation-energy filter and are unique and novel; it measures neither stability on the convex hull nor whether a candidate has the target band gap: methods that never return a composition of the data set, such as the two baselines, set a high reference for it. Of the compositions that pass the family's rules, 40 of the 106 oxides are in the data set and no chalcogenide or halide is, so novelty separates methods among oxides only. The DFT check is the only measure of the target and is possible for oxides whose A and B sites match a Perov-5 entry (40 of the 106 rule-passing oxides; 26 of them have a non-zero direct gap).
\u0394Hf\u00b7U\u00b7N by chemical family. Candidates that pass the formation-energy filter and are unique and novel, out of the budget of each family; hover a cell for the number of novel candidates.
MethodoxidechalcogenidehalideEncoder screening18/1811/1817/18Random sampling12/1814/1816/18MEIDNet (first early-fusion model)2/1815/1818/18MEIDNet (published model)0/1816/1817/18MEIDNet (alignment training, seed 3)10/1812/1811/18MEIDNet (shorter training)0/1814/1816/18"},{"location":"benchmarks/perov5.html#property-prediction","title":"Property prediction","text":"Predict formation enthalpy and direct band gap from the crystal structure of the 3,785 test materials. Export: CSV \u00b7 JSON.
#MethodMAE \u0394H \u2193RMSE \u0394H \u2193R\u00b2 \u0394H \u2191MAE gap \u2193MAE gap > 0 \u2193ParamsTraining dataAddedLinks1MEIDNet (published model)0.4040.5390.4752.7921.6760.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights2Composition k-NNbaseline0.5110.6740.1790.1632.044\u2013Perov-5 train (11,356)2026-10-03code3MEIDNet (first early-fusion model)0.5220.6980.11913.46911.9980.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights4Training meanbaseline0.5660.744-0.0000.1732.135\u2013Perov-5 train (11,356)2026-10-03code5MEIDNet (shorter training)1.0091.391-2.4953.2921.9780.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights\u2020 Trained on all materials of the data set, the test split included: for these rows the scores are measured on materials the model has seen, and are not comparable with rows trained on the training split only.
How to read the property prediction tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
MEIDNet (published model): formation enthalpy, predicted vs. DFT
MEIDNet (published model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (published model): direct band gap, predicted vs. DFT
MEIDNet (published model): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)Composition k-NN: formation enthalpy, predicted vs. DFT
Composition k-NN: formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)"},{"location":"benchmarks/perov5.html#representation","title":"Representation","text":"How well the shared space holds both modalities on the test split: cross-modal retrieval, agreement of the two latents, and a k-nearest-neighbour probe of the structure latent. Export: CSV \u00b7 JSON.
#MethodR@1 \u2191R@5 \u2191cos \u2191k-NN MAE \u0394H \u2193k-NN MAE gap \u2193ParamsTraining dataAddedLinks1MEIDNet (published model)0.3360.8960.7720.0210.0550.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights2MEIDNet (alignment training, 7 seeds)0.297 \u00b1 0.0620.855 \u00b1 0.0650.954 \u00b1 0.0110.025 \u00b1 0.0040.049 \u00b1 0.0160.70 MPerov-5, all 18,928 materials\u20202026-10-05paper \u00b7 code \u00b7 weights3MEIDNet (shorter training)0.2970.8480.4800.0240.0470.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights4MEIDNet (first early-fusion model)0.0280.1310.6550.0510.0640.70 MPerov-5, all 18,928 materials\u20202026-10-03paper \u00b7 code \u00b7 weights5Chance levelbaseline0.0030.0140.000\u2013\u2013\u2013\u20132026-10-03code6Composition k-NNbaseline\u2013\u2013\u20130.5110.163\u2013Perov-5 train (11,356)2026-10-03code\u2020 Trained on all materials of the data set, the test split included: for these rows the scores are measured on materials the model has seen, and are not comparable with rows trained on the training split only.
How to read the representation tableRows are sorted by the first metric column; click any header to sort by another. Colours show the rank within each column, from dark (last) to yellow (first); \u2191 marks metrics where higher is better, \u2193 where lower is better. Hover a header for its definition.
Version perov5-v1.1. Data: data/perov5 (meidnet download-data), split CDVAE: 11,356 train / 3,787 val / 3,785 test.
Propose cubic ABX3 perovskites for three band-gap targets in three chemical families (54 candidates); score them for stability with an MLIP, uniqueness, novelty and, where a DFT value exists, the target band gap.
setting value familyperovskite_abx3, variants oxide, chalcogenide, halide targets dir_gap 1.5, heat_all -0.1; dir_gap 2.5, heat_all -0.1; dir_gap 3.5, heat_all -0.1 budget 6 candidates per target and variant (54 in total), each passing the family's rules MEIDNet search the generation settings of examples/perov5/meidnet.yaml, at most 6 rounds per target formation-energy filter MACE-MP-0 (medium), float32; BFGS with cell relaxation (FrechetCellFilter), fmax 0.05 eV/\u00c5, at most 500 steps; formation energy against elemental phases at most 0.1 eV/atom (not the energy above the convex hull) novelty composition absent from the data set (all 18,928 materials) DFT check Perov-5 entries with the same A, B and X sites; hit within 0.5 eV of the target band gap"},{"location":"benchmarks/perov5.html#property-prediction_1","title":"Property prediction","text":"Predict formation enthalpy and direct band gap from the crystal structure of the 3,785 test materials.
Split: test. Reference implementation: meidnet.benchmark.
How well the shared space holds both modalities on the test split: cross-modal retrieval, agreement of the two latents, and a k-nearest-neighbour probe of the structure latent.
Split: test. Reference implementation: meidnet.benchmark.
Run the protocol for a MEIDNet checkpoint, or score the outputs of any other model:
python scripts/benchmarks.py run perov5 --method meidnet-2k # a built-in method, every task\npython scripts/benchmarks.py score perov5 --task property_prediction --predictions preds.csv\npython scripts/benchmarks.py score perov5 --task inverse_design --candidates candidates.csv\n preds.csv has one row per test material: id (the dataset's material_id) and pred_<property> for each property. candidates.csv has id, variant, target (1, 2, 3), formula, elements (JSON of the sites, e.g. {\"A\": \"Ba\", \"B\": \"Ti\", \"X\": \"O\"}) and cif (path of the structure). The formation-energy filter needs MACE: set --mlip-python or MEIDNET_MLIP_PYTHON if it lives in another environment.
Numbers quoted from the paper use the paper's own settings (other targets, budget and splits), so they are listed here rather than ranked above.
record task values status Candidates shipped with the paper, screened here Inverse design \u0394Hf\u00b7U\u00b7N 0.654, \u0394Hf filter 1.000, Unique 0.923, Novel 0.692, \u0394Hf -1.27, Delivered 26, \u0394Hf\u00b7U\u00b7N count 17 Computed here MEIDNet (paper): inverse design Inverse design Generated 140, \u0394Hf\u00b7U\u00b7N count 19, \u0394Hf\u00b7U\u00b7N 0.136 Reported in the paper"},{"location":"benchmarks/results/baseline-chance.html","title":"Chance level","text":"Retrieval by random choice among the 3,785 test materials.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data \u2013 Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-chance.html#representation","title":"Representation","text":"metric value definition R@1 0.003 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.014 the same within the five nearest profiles cos 0.000 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/baseline-chance.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method baseline-chance\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 23 s.
"},{"location":"benchmarks/results/baseline-composition-knn.html","title":"Composition k-NN","text":"Mean property of the five training materials nearest in element-fraction space: a composition-only representation, without structure.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs composition Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-composition-knn.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.511 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.674 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.179 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 0.163 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 2.044 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 0.568 eV root-mean-square error of the direct band gap R\u00b2 gap -0.122 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.511 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated Composition k-NN: formation enthalpy, predicted vs. DFT
Composition k-NN: formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)Composition k-NN: direct band gap, predicted vs. DFT
Composition k-NN: direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/baseline-composition-knn.html#representation","title":"Representation","text":"metric value definition k-NN MAE \u0394H 0.511 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.163 eV direct-band-gap error of the same probe n 3,785 test materials evaluated R@1 \u2013 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile)"},{"location":"benchmarks/results/baseline-composition-knn.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-composition-knn/property_predictionpython scripts/benchmarks.py run perov5 --method baseline-composition-knn\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 22 s.
"},{"location":"benchmarks/results/baseline-random.html","title":"Random sampling","text":"Draws compositions at random, without repetition, from those that pass the family's rules.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data \u2013 Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-random.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.778 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.889 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.889 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.34 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.000 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 6 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 42 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/baseline-random.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 PrGaO3 1.5 -2.837 yes yes \u2013 oxide_T1_2 TmNiO3 1.5 -1.618 yes yes \u2013 oxide_T1_3 NdFeO3 1.5 -2.033 yes yes \u2013 oxide_T1_4 BaGeO3 1.5 -2.357 yes no 0.00 oxide_T1_5 LaMnO3 1.5 -2.467 yes no 0.00 oxide_T1_6 SmScO3 1.5 -3.469 yes yes \u2013 oxide_T2_1 SmFeO3 2.5 -1.998 yes yes \u2013 oxide_T2_2 NdCrO3 2.5 -2.477 yes yes \u2013 oxide_T2_3 YbVO3 2.5 -2.555 yes yes \u2013 oxide_T2_4 LaAlO3 2.5 -3.587 yes no 6.30 oxide_T2_5 SmMnO3 2.5 -2.318 yes yes \u2013 oxide_T2_6 PrVO3 2.5 -2.572 yes yes \u2013 oxide_T3_1 EuAlO3 3.5 -3.186 yes yes \u2013 oxide_T3_2 RbVO3 3.5 -1.599 yes no 0.00 oxide_T3_3 SmNiO3 3.5 -1.699 yes yes \u2013 oxide_T3_4 CaHfO3 3.5 -3.529 yes no 7.30 oxide_T3_5 LaNiO3 3.5 -1.800 yes no 0.00 oxide_T3_6 TmCoO3 3.5 -1.903 yes yes \u2013 chalcogenide_T1_1 SrMoTe3 1.5 -1.308 yes yes \u2013 chalcogenide_T1_2 TbCoS3 1.5 -93642942051.475 no yes \u2013 chalcogenide_T1_3 LuCoS3 1.5 -2.538 yes yes \u2013 chalcogenide_T1_4 BaMoSe3 1.5 -1.401 yes yes \u2013 chalcogenide_T1_5 CsTaTe3 1.5 -1.295 yes yes \u2013 chalcogenide_T1_6 SrWSe3 1.5 4.343 no yes \u2013 chalcogenide_T2_1 EuMnTe3 2.5 -1.422 yes yes \u2013 chalcogenide_T2_2 LuVTe3 2.5 -1.088 yes yes \u2013 chalcogenide_T2_3 SmFeTe3 2.5 -1.290 yes yes \u2013 chalcogenide_T2_4 SmScTe3 2.5 -1.644 yes yes \u2013 chalcogenide_T2_5 ErVS3 2.5 -62.703 no yes \u2013 chalcogenide_T2_6 NdVTe3 2.5 -1.364 yes yes \u2013 chalcogenide_T3_1 NaNbTe3 3.5 -1.208 yes yes \u2013 chalcogenide_T3_2 SrGeS3 3.5 -251.214 no yes \u2013 chalcogenide_T3_3 EuCrTe3 3.5 -1.365 yes yes \u2013 chalcogenide_T3_4 BaGeSe3 3.5 -1.507 yes yes \u2013 chalcogenide_T3_5 NdMnSe3 3.5 -1.320 yes yes \u2013 chalcogenide_T3_6 SmVTe3 3.5 -1.307 yes yes \u2013 halide_T1_1 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_2 NaCoBr3 1.5 -177820821092.041 no yes \u2013 halide_T1_3 CsZnI3 1.5 -1.165 yes yes \u2013 halide_T1_4 KCoI3 1.5 -0.754 yes yes \u2013 halide_T1_5 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_6 RbZnI3 1.5 -1.136 yes yes \u2013 halide_T2_1 KMnI3 2.5 -1.083 yes yes \u2013 halide_T2_2 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_3 NaCuI3 2.5 -0.724 yes yes \u2013 halide_T2_4 CsPbI3 2.5 -1.302 yes yes \u2013 halide_T2_5 RbSnI3 2.5 -1.194 yes yes \u2013 halide_T2_6 KCuI3 2.5 -0.892 yes yes \u2013 halide_T3_1 KFeI3 3.5 -0.737 yes yes \u2013 halide_T3_2 RbFeI3 3.5 -0.773 yes yes \u2013 halide_T3_3 KNiI3 3.5 -0.883 yes yes \u2013 halide_T3_4 RbPbI3 3.5 -1.240 yes yes \u2013 halide_T3_5 RbCoI3 3.5 1.502 no yes \u2013 halide_T3_6 KPbI3 3.5 -1.186 yes yes \u2013"},{"location":"benchmarks/results/baseline-random.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-random/inverse_designpython scripts/benchmarks.py run perov5 --method baseline-random\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 8 s.
"},{"location":"benchmarks/results/baseline-screening.html","title":"Encoder screening","text":"Enumerates the compositions of each chemical family that pass its rules and keeps those that the published model's structure encoder predicts closest to each target, ranked with the generator's own selection score. No latent search.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth \u00b7 sha256 f9493781d5bb\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/baseline-screening.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.852 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.852 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 1.000 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.28 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit \u2013 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 0 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 46 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/baseline-screening.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 NdInO3 1.5 -2.353 yes yes \u2013 oxide_T1_2 HoNiO3 1.5 -1.619 yes yes \u2013 oxide_T1_3 ErNiO3 1.5 -1.612 yes yes \u2013 oxide_T1_4 YbNiO3 1.5 -1.232 yes yes \u2013 oxide_T1_5 EuNiO3 1.5 -1.360 yes yes \u2013 oxide_T1_6 NdScO3 1.5 -3.504 yes yes \u2013 oxide_T2_1 TmNiO3 2.5 -1.618 yes yes \u2013 oxide_T2_2 NdNiO3 2.5 -1.710 yes yes \u2013 oxide_T2_3 DyNiO3 2.5 -1.636 yes yes \u2013 oxide_T2_4 PrNiO3 2.5 -1.712 yes yes \u2013 oxide_T2_5 GdNiO3 2.5 -1.643 yes yes \u2013 oxide_T2_6 CeNiO3 2.5 -1.821 yes yes \u2013 oxide_T3_1 NdFeO3 3.5 -2.033 yes yes \u2013 oxide_T3_2 SmGaO3 3.5 -2.813 yes yes \u2013 oxide_T3_3 DyFeO3 3.5 -1.922 yes yes \u2013 oxide_T3_4 EuGaO3 3.5 -2.478 yes yes \u2013 oxide_T3_5 YbGaO3 3.5 -2.336 yes yes \u2013 oxide_T3_6 CeGaO3 3.5 -2.822 yes yes \u2013 chalcogenide_T1_1 RbTaTe3 1.5 -1.290 yes yes \u2013 chalcogenide_T1_2 GdMnSe3 1.5 -1.284 yes yes \u2013 chalcogenide_T1_3 TmMnSe3 1.5 -1.060 yes yes \u2013 chalcogenide_T1_4 KTaTe3 1.5 -1.276 yes yes \u2013 chalcogenide_T1_5 CeCoTe3 1.5 -1.410 yes yes \u2013 chalcogenide_T1_6 YbMnSe3 1.5 -1.286 yes yes \u2013 chalcogenide_T2_1 RbNbSe3 2.5 2.337 no yes \u2013 chalcogenide_T2_2 CaMoSe3 2.5 -1.089 yes yes \u2013 chalcogenide_T2_3 PrVS3 2.5 -40.822 no yes \u2013 chalcogenide_T2_4 TmVS3 2.5 -2084964401148.708 no yes \u2013 chalcogenide_T2_5 LuVS3 2.5 -162867401.493 no yes \u2013 chalcogenide_T2_6 CeVS3 2.5 -358782074876.452 no yes \u2013 chalcogenide_T3_1 LaVS3 3.5 -41.510 no yes \u2013 chalcogenide_T3_2 LaScSe3 3.5 -2.041 yes yes \u2013 chalcogenide_T3_3 LaMnSe3 3.5 -1.510 yes yes \u2013 chalcogenide_T3_4 SrSnSe3 3.5 5.797 no yes \u2013 chalcogenide_T3_5 KTaSe3 3.5 -1.263 yes yes \u2013 chalcogenide_T3_6 SrMoSe3 3.5 -1.256 yes yes \u2013 halide_T1_1 KFeI3 1.5 -0.737 yes yes \u2013 halide_T1_2 RbFeI3 1.5 -0.773 yes yes \u2013 halide_T1_3 KCoI3 1.5 -0.754 yes yes \u2013 halide_T1_4 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_5 KCuI3 1.5 -0.892 yes yes \u2013 halide_T1_6 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T2_1 NaCoI3 2.5 -0.586 yes yes \u2013 halide_T2_2 NaCoBr3 2.5 -623037439245549568.000 no yes \u2013 halide_T2_3 NaNiI3 2.5 -0.723 yes yes \u2013 halide_T2_4 RbMnI3 2.5 -1.123 yes yes \u2013 halide_T2_5 NaNiBr3 2.5 -0.987 yes yes \u2013 halide_T2_6 CsZnI3 2.5 -1.165 yes yes \u2013 halide_T3_1 NaCuI3 3.5 -0.724 yes yes \u2013 halide_T3_2 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_3 NaSnI3 3.5 -0.936 yes yes \u2013 halide_T3_4 RbZnI3 3.5 -1.136 yes yes \u2013 halide_T3_5 RbPbI3 3.5 -1.240 yes yes \u2013 halide_T3_6 RbCuI3 3.5 -0.922 yes yes \u2013"},{"location":"benchmarks/results/baseline-screening.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/baseline-screening/inverse_designpython scripts/benchmarks.py run perov5 --method baseline-screening\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 6 s.
"},{"location":"benchmarks/results/baseline-train-mean.html","title":"Training mean","text":"Predicts the training-set mean of each property.
field value Dataset Perov-5, protocolperov5-v1.1 Type baseline Inputs structure Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-03 by Anand Babu (UCLouvain) Links code"},{"location":"benchmarks/results/baseline-train-mean.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.566 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.744 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H -0.000 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 0.173 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 2.135 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 0.536 eV root-mean-square error of the direct band gap R\u00b2 gap -0.000 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.566 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated"},{"location":"benchmarks/results/baseline-train-mean.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method baseline-train-mean\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 22 s.
"},{"location":"benchmarks/results/meidnet-2k.html","title":"MEIDNet (published model)","text":"Early fusion with property-aware decoding, trained for 2,000 epochs with a contrastive warm-up over the first 1,200: the model of the paper and of the live Studio.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the outputs of the projection heads (what the decoders read) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth \u00b7 sha256 f9493781d5bb\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-2k.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.404 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.539 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.475 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 2.792 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 1.676 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 3.051 eV root-mean-square error of the direct band gap R\u00b2 gap -31.400 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.404 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (published model): formation enthalpy, predicted vs. DFT
MEIDNet (published model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (published model): direct band gap, predicted vs. DFT
MEIDNet (published model): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-2k.html#representation","title":"Representation","text":"metric value definition R@1 0.336 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.896 the same within the five nearest profiles cos 0.772 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.021 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.055 eV direct-band-gap error of the same probe L2 0.675 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs -0.008 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads 0.772 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-2k.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.611 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.962 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.660 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.52 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.056 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 18 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 53 candidates delivered out of the budget of 54 Valid 0.981 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 33 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-2k.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 LaMnO3 1.5 -2.467 yes no 0.00 oxide_T1_2 CaTiO3 1.5 -3.364 yes no 4.70 oxide_T1_3 LaAlO3 1.5 -3.587 yes no 6.30 oxide_T1_4 CsTaO3 1.5 -2.671 yes no 3.50 oxide_T1_5 BaTiO3 1.5 -3.364 yes no 4.00 oxide_T1_6 NaTaO3 1.5 -2.902 yes no 5.30 oxide_T2_1 LaCoO3 2.5 -2.084 yes no 0.00 oxide_T2_2 NaNbO3 2.5 -2.668 yes no 4.40 oxide_T2_3 BaMnO3 2.5 -1.919 yes no 0.00 oxide_T2_4 LaFeO3 2.5 -2.155 yes no 0.00 oxide_T2_5 KNbO3 2.5 -2.713 yes no 4.10 oxide_T2_6 CsNbO3 2.5 -2.475 yes no 2.90 oxide_T3_1 LaGaO3 3.5 -2.922 yes no 5.60 oxide_T3_2 BaZrO3 3.5 -3.513 yes no 6.30 oxide_T3_3 BaGeO3 3.5 -2.357 yes no 0.00 oxide_T3_4 CaVO3 3.5 -2.378 yes no 0.00 oxide_T3_5 BaSnO3 3.5 -2.476 yes no 2.50 oxide_T3_6 SrTiO3 3.5 -3.429 yes no 4.30 chalcogenide_T1_1 CsTaTe3 1.5 -1.295 yes yes \u2013 chalcogenide_T1_2 RbNbTe3 1.5 -1.355 yes yes \u2013 chalcogenide_T1_3 LaCoTe3 1.5 -1.518 yes yes \u2013 chalcogenide_T1_4 LaMnTe3 1.5 -1.546 yes yes \u2013 chalcogenide_T1_5 LaVTe3 1.5 -1.539 yes yes \u2013 chalcogenide_T1_6 BaSnTe3 1.5 -1.461 yes yes \u2013 chalcogenide_T2_1 CaTiTe3 2.5 -1.607 yes yes \u2013 chalcogenide_T2_2 BaTiTe3 2.5 -1.912 yes yes \u2013 chalcogenide_T2_3 BaZrTe3 2.5 -2.002 yes yes \u2013 chalcogenide_T2_4 NaNbTe3 2.5 -1.208 yes yes \u2013 chalcogenide_T2_5 LaCoS3 2.5 -2.544 yes yes \u2013 chalcogenide_T2_6 BaWS3 2.5 -594.364 no yes \u2013 chalcogenide_T3_1 BaMoTe3 3.5 -1.429 yes yes \u2013 chalcogenide_T3_2 LaCrTe3 3.5 -1.485 yes yes \u2013 chalcogenide_T3_3 SrTiTe3 3.5 -1.779 yes yes \u2013 chalcogenide_T3_4 CaMoTe3 3.5 -1.152 yes yes \u2013 chalcogenide_T3_5 BaMoS3 3.5 -512.082 no yes \u2013 chalcogenide_T3_6 NaTaTe3 3.5 -1.146 yes yes \u2013 halide_T1_1 RbZnI3 1.5 -1.136 yes yes \u2013 halide_T1_2 KSnI3 1.5 -1.142 yes yes \u2013 halide_T1_3 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T1_4 NaCoI3 1.5 -0.586 yes yes \u2013 halide_T1_5 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T1_6 KNiI3 1.5 -0.883 yes yes \u2013 halide_T2_1 NaZnI3 2.5 -0.928 yes yes \u2013 halide_T2_2 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_3 CsZnI3 2.5 -1.165 yes yes \u2013 halide_T2_4 RbSnI3 2.5 -1.194 yes yes \u2013 halide_T2_5 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T2_6 NaCuI3 2.5 -0.724 yes yes \u2013 halide_T3_1 RbFeI3 3.5 -0.773 yes yes \u2013 halide_T3_2 KMnI3 3.5 -1.083 yes yes \u2013 halide_T3_3 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_4 NaNiI3 3.5 -0.723 yes yes \u2013 halide_T3_5 NaFeI3 3.5 -0.553 yes yes \u2013"},{"location":"benchmarks/results/meidnet-2k.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-2k/property_predictionbenchmarks/runs/perov5/meidnet-2k/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-2k\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 39 min.
"},{"location":"benchmarks/results/meidnet-alignment-seed3.html","title":"MEIDNet (alignment training, seed 3)","text":"One of the seven alignment models: seed 3, the seed with the highest structure matching, chosen for the inverse-design task before any candidate was generated.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-05 by Anand Babu (UCLouvain) Alignment space the normalised encoder outputs, before the projection heads Checkpoint meidnet_paper_rerun_seed3.pth \u00b7 sha256 205de8b83390\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.611 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.872 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.830 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.32 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.250 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 8 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 47 candidates delivered out of the budget of 54 Valid 0.870 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 33 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 NdCrO3 1.5 -2.477 yes yes \u2013 oxide_T1_2 BaPbO3 1.5 -1.970 yes no 0.00 oxide_T1_3 SrSnO3 1.5 -2.475 yes no 3.40 oxide_T1_4 YbGaO3 1.5 -2.336 yes yes \u2013 oxide_T1_5 HoNiO3 1.5 -1.619 yes yes \u2013 oxide_T1_6 BaSnO3 1.5 -2.476 yes no 2.50 oxide_T2_1 SmNiO3 2.5 -1.699 yes yes \u2013 oxide_T2_2 SrZrO3 2.5 -3.478 yes no 6.60 oxide_T2_3 YbCoO3 2.5 -1.655 yes yes \u2013 oxide_T2_4 TbAlO3 2.5 -3.505 yes yes \u2013 oxide_T2_5 YbAlO3 2.5 -3.069 yes yes \u2013 oxide_T2_6 NdVO3 2.5 -2.559 yes yes \u2013 oxide_T3_1 NdFeO3 3.5 -2.033 yes yes \u2013 oxide_T3_2 LuAlO3 3.5 -3.417 yes yes \u2013 oxide_T3_3 CsNbO3 3.5 -2.475 yes no 2.90 oxide_T3_4 SrGeO3 3.5 -2.485 yes no 1.70 oxide_T3_5 RbNbO3 3.5 -2.632 yes no 3.90 oxide_T3_6 CaSnO3 3.5 -2.366 yes no 3.60 chalcogenide_T1_1 SrWSe3 1.5 4.343 no yes \u2013 chalcogenide_T1_2 SrSnSe3 1.5 5.797 no yes \u2013 chalcogenide_T1_3 YbVSe3 1.5 -1.316 yes yes \u2013 chalcogenide_T1_4 BaSnSe3 1.5 -1.413 yes yes \u2013 chalcogenide_T1_5 CaSnSe3 1.5 -1.012 yes yes \u2013 chalcogenide_T1_6 SmCoSe3 1.5 -1.105 yes yes \u2013 chalcogenide_T2_1 EuScSe3 2.5 -1.919 yes yes \u2013 chalcogenide_T2_2 CaWSe3 2.5 -1.033 yes yes \u2013 chalcogenide_T2_3 CaMoSe3 2.5 -1.089 yes yes \u2013 chalcogenide_T2_4 SrTiSe3 2.5 -2209239531516.471 no yes \u2013 chalcogenide_T2_5 SrGeSe3 2.5 -33544873571.535 no yes \u2013 chalcogenide_T2_6 GdVSe3 2.5 -1.323 yes yes \u2013 chalcogenide_T3_1 SmMnSe3 3.5 -1.258 yes yes \u2013 chalcogenide_T3_2 YbFeSe3 3.5 -1.180 yes yes \u2013 chalcogenide_T3_3 YbCoSe3 3.5 -339207415395.052 no yes \u2013 chalcogenide_T3_4 SmFeSe3 3.5 -1.139 yes yes \u2013 chalcogenide_T3_5 SmCrTe3 3.5 -1.267 yes yes \u2013 chalcogenide_T3_6 TbCoSe3 3.5 -9150744981.631 no yes \u2013 halide_T1_1 KPbI3 1.5 -1.186 yes yes \u2013 halide_T1_2 KSnI3 1.5 -1.142 yes yes \u2013 halide_T1_3 NaSnI3 1.5 -0.936 yes yes \u2013 halide_T1_4 KCoI3 1.5 -0.826 yes yes \u2013 halide_T1_5 CsPbI3 1.5 -1.302 yes yes \u2013 halide_T1_6 KFeI3 1.5 -0.737 yes yes \u2013 halide_T2_1 RbMnI3 2.5 -1.123 yes yes \u2013 halide_T2_2 KZnI3 2.5 -1.102 yes yes \u2013 halide_T3_1 KMnI3 3.5 -1.083 yes yes \u2013 halide_T3_2 KNiI3 3.5 -0.883 yes yes \u2013 halide_T3_3 NaNiI3 3.5 -0.723 yes yes \u2013"},{"location":"benchmarks/results/meidnet-alignment-seed3.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-alignment-seed3/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-alignment-seed3\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 54 min.
"},{"location":"benchmarks/results/meidnet-alignment.html","title":"MEIDNet (alignment training, 7 seeds)","text":"The alignment training script (early fusion, contrastive weight raised over the first 1,500 of 2,200 epochs), trained seven times with seeds 0 to 6. Values are the mean over the seven models; \u00b1 is the standard deviation.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level generated Added 2026-10-05 by Anand Babu (UCLouvain) Runs 7 independent training runs (seeds); values are the mean \u00b1 the standard deviation Alignment space the normalised encoder outputs, before the projection heads Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-alignment.html#representation","title":"Representation","text":"metric value definition R@1 0.297 \u00b1 0.062 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.855 \u00b1 0.065 the same within the five nearest profiles cos 0.954 \u00b1 0.011 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.025 \u00b1 0.004 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.049 \u00b1 0.016 eV direct-band-gap error of the same probe L2 0.302 \u00b1 0.034 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.954 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads -0.978 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-alignment.html#reproduce","title":"Reproduce","text":"python scripts/benchmarks.py run perov5 --method meidnet-alignment\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; the evaluation took 4 min.
"},{"location":"benchmarks/results/meidnet-alignment.html#notes","title":"Notes","text":"This model has no structure-only property head: its property decoder reads the joint latent, which contains the properties themselves. Prediction from the structure alone is therefore measured by the k-nearest-neighbour probe of this table, and the model is not listed under property prediction.
"},{"location":"benchmarks/results/meidnet-earlyfusion.html","title":"MEIDNet (first early-fusion model)","text":"The earliest ablation of the paper, without property-aware decoding.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the normalised encoder outputs, before the projection heads Checkpoint dual_autoencoder_clip_earlyfusion.pth \u00b7 sha256 59fc26f97d04\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-earlyfusion.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 0.522 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 0.698 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H 0.119 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 13.469 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 11.998 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 13.492 eV root-mean-square error of the direct band gap R\u00b2 gap -632.529 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 0.522 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (first early-fusion model): formation enthalpy, predicted vs. DFT
MEIDNet (first early-fusion model): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (first early-fusion model): direct band gap, predicted vs. DFT
MEIDNet (first early-fusion model): direct band gap (eV), predicted vs. DFT (3,785 test materials)051015051015DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-earlyfusion.html#representation","title":"Representation","text":"metric value definition R@1 0.028 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.131 the same within the five nearest profiles cos 0.655 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.051 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.064 eV direct-band-gap error of the same probe L2 0.822 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.655 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads -0.979 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-earlyfusion.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.648 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.944 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.704 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.29 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.188 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 16 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 54 candidates delivered out of the budget of 54 Valid 1.000 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 35 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-earlyfusion.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 CaZrO3 1.5 -3.347 yes no 6.70 oxide_T1_2 NaTaO3 1.5 -2.902 yes no 5.30 oxide_T1_3 CaTiO3 1.5 -3.364 yes no 4.70 oxide_T1_4 SrZrO3 1.5 -3.478 yes no 6.60 oxide_T1_5 SrGeO3 1.5 -2.485 yes no 1.70 oxide_T1_6 BaTiO3 1.5 -3.364 yes no 4.00 oxide_T2_1 LaScO3 2.5 -3.629 yes no 6.40 oxide_T2_2 BaMnO3 2.5 -1.919 yes no 0.00 oxide_T2_3 CaGeO3 2.5 -2.460 yes no 2.70 oxide_T2_4 SmCoO3 2.5 -1.977 yes yes \u2013 oxide_T2_5 SrHfO3 2.5 -3.645 yes no 7.20 oxide_T2_6 SrMnO3 2.5 -1.992 yes no 0.00 oxide_T3_1 SmMnO3 3.5 -2.318 yes yes \u2013 oxide_T3_2 LaMnO3 3.5 -2.467 yes no 0.00 oxide_T3_3 KTaO3 3.5 -2.930 yes no 5.00 oxide_T3_4 LaCoO3 3.5 -2.084 yes no 0.00 oxide_T3_5 CaHfO3 3.5 -3.529 yes no 7.30 oxide_T3_6 CsTaO3 3.5 -2.671 yes no 3.50 chalcogenide_T1_1 SmScSe3 1.5 -1.801 yes yes \u2013 chalcogenide_T1_2 LaMnSe3 1.5 -1.510 yes yes \u2013 chalcogenide_T1_3 NaTaSe3 1.5 -1.125 yes yes \u2013 chalcogenide_T1_4 SrHfSe3 1.5 -1.938 yes yes \u2013 chalcogenide_T1_5 SrZrSe3 1.5 3.303 no yes \u2013 chalcogenide_T1_6 CaTiSe3 1.5 130210516176.396 no yes \u2013 chalcogenide_T2_1 CaZrSe3 2.5 -1.736 yes yes \u2013 chalcogenide_T2_2 SmMnSe3 2.5 -1.258 yes yes \u2013 chalcogenide_T2_3 LaScSe3 2.5 -2.041 yes yes \u2013 chalcogenide_T2_4 RbTaSe3 2.5 -1.273 yes yes \u2013 chalcogenide_T2_5 KTaSe3 2.5 -1.263 yes yes \u2013 chalcogenide_T2_6 CaSnSe3 2.5 -1.012 yes yes \u2013 chalcogenide_T3_1 CaHfSe3 3.5 -1.737 yes yes \u2013 chalcogenide_T3_2 TmMnSe3 3.5 -1.060 yes yes \u2013 chalcogenide_T3_3 BaHfSe3 3.5 -2.068 yes yes \u2013 chalcogenide_T3_4 YbFeSe3 3.5 -1.180 yes yes \u2013 chalcogenide_T3_5 SrSnSe3 3.5 5.797 no yes \u2013 chalcogenide_T3_6 TmCoSe3 3.5 -0.922 yes yes \u2013 halide_T1_1 NaCuI3 1.5 -0.724 yes yes \u2013 halide_T1_2 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_3 NaMnI3 1.5 -0.900 yes yes \u2013 halide_T1_4 KMnI3 1.5 -1.083 yes yes \u2013 halide_T1_5 NaZnI3 1.5 -0.928 yes yes \u2013 halide_T1_6 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T2_1 KCuI3 2.5 -0.892 yes yes \u2013 halide_T2_2 NaCoI3 2.5 -0.586 yes yes \u2013 halide_T2_3 NaSnI3 2.5 -0.936 yes yes \u2013 halide_T2_4 KPbI3 2.5 -1.186 yes yes \u2013 halide_T2_5 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T2_6 KNiI3 2.5 -0.883 yes yes \u2013 halide_T3_1 CsZnI3 3.5 -1.165 yes yes \u2013 halide_T3_2 KZnI3 3.5 -1.102 yes yes \u2013 halide_T3_3 CsPbI3 3.5 -1.302 yes yes \u2013 halide_T3_4 NaFeI3 3.5 -0.553 yes yes \u2013 halide_T3_5 KFeI3 3.5 -0.737 yes yes \u2013 halide_T3_6 RbZnI3 3.5 -1.136 yes yes \u2013"},{"location":"benchmarks/results/meidnet-earlyfusion.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-earlyfusion/property_predictionbenchmarks/runs/perov5/meidnet-earlyfusion/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-earlyfusion\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 37 min.
"},{"location":"benchmarks/results/meidnet-propertyaware.html","title":"MEIDNet (shorter training)","text":"The architecture of the published model, trained for fewer epochs.
field value Dataset Perov-5, protocolperov5-v1.1 Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5, all 18,928 materials (the test split included: scores on it are not held-out) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-03 by Anand Babu (UCLouvain) Alignment space the outputs of the projection heads (what the decoders read) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware.pth \u00b7 sha256 b1a672d7e28c\u2026 Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/meidnet-propertyaware.html#property-prediction","title":"Property prediction","text":"metric value definition MAE \u0394H 1.009 eV/atom mean absolute error of the formation enthalpy (heat_all) RMSE \u0394H 1.391 eV/atom root-mean-square error of the formation enthalpy R\u00b2 \u0394H -2.495 coefficient of determination of the formation enthalpy (0 = no better than the mean) MAE gap 3.292 eV mean absolute error of the direct band gap over all test materials; 96% of them have a gap of 0 eV MAE gap > 0 1.978 eV mean absolute error of the direct band gap on the test materials with a non-zero gap, the range that inverse design targets RMSE gap 3.392 eV root-mean-square error of the direct band gap R\u00b2 gap -39.038 coefficient of determination of the direct band gap; not informative here, because the gap is zero for most materials MAE \u0394H \u2260 0 1.009 eV/atom mean absolute error of the formation enthalpy on materials where it is not zero n 3,785 test materials evaluated MEIDNet (shorter training): formation enthalpy, predicted vs. DFT
MEIDNet (shorter training): formation enthalpy (eV/atom), predicted vs. DFT (3,785 test materials)024024DFT formation enthalpy (eV/atom)predicted formation enthalpy (eV/atom)MEIDNet (shorter training): direct band gap, predicted vs. DFT
MEIDNet (shorter training): direct band gap (eV), predicted vs. DFT (3,785 test materials)02460246DFT direct band gap (eV)predicted direct band gap (eV)"},{"location":"benchmarks/results/meidnet-propertyaware.html#representation","title":"Representation","text":"metric value definition R@1 0.297 fraction of test materials for which, among the distinct property profiles of the test split, their own profile's latent is the nearest to their structure latent (materials with identical property values share one profile) R@5 0.848 the same within the five nearest profiles cos 0.480 mean cosine similarity between the structure latent and the property latent of the same material, in the space where the model aligns them (before or after its projection heads; stated on the method's page) k-NN MAE \u0394H 0.024 eV/atom formation-enthalpy error of a 5-nearest-neighbour probe: each test material takes the mean property of its five nearest training materials in the representation k-NN MAE gap 0.047 eV direct-band-gap error of the same probe L2 1.019 mean L2 distance between the two latents of the same material (unit latents) cos, encoder outputs 0.003 the matched cosine between the normalised encoder outputs, before the projection heads cos, projection heads 0.480 the matched cosine between the outputs of the projection heads profiles 367 distinct property profiles among the test materials: the candidates of retrieval (chance level of R@1 is one over this number) n 3,785 test materials evaluated"},{"location":"benchmarks/results/meidnet-propertyaware.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.556 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 0.923 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter ofmeidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 1.000 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.654 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.50 eV/atom median MACE-MP-0 formation energy of the delivered candidates DFT hit 0.056 among candidates whose A, B and X sites match a Perov-5 entry (so their DFT band gap is known), the fraction within 0.5 eV of the target DFT known 18 candidates with a known DFT band gap (the denominator of DFT hit) Delivered 52 candidates delivered out of the budget of 54 Valid 0.963 fraction of the budget that passes every rule of the family \u0394Hf\u00b7U\u00b7N count 30 candidates that pass the formation-energy filter and are unique and novel Budget 54 candidates requested"},{"location":"benchmarks/results/meidnet-propertyaware.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) oxide_T1_1 CsTaO3 1.5 -2.671 yes no 3.50 oxide_T1_2 LaScO3 1.5 -3.629 yes no 6.40 oxide_T1_3 LaFeO3 1.5 -2.155 yes no 0.00 oxide_T1_4 BaSnO3 1.5 -2.476 yes no 2.50 oxide_T1_5 KTaO3 1.5 -2.930 yes no 5.00 oxide_T1_6 SrVO3 1.5 -2.416 yes no 0.00 oxide_T2_1 BaZrO3 2.5 -3.513 yes no 6.30 oxide_T2_2 RbNbO3 2.5 -2.632 yes no 3.90 oxide_T2_3 CaHfO3 2.5 -3.529 yes no 7.30 oxide_T2_4 LaMnO3 2.5 -2.467 yes no 0.00 oxide_T2_5 SrHfO3 2.5 -3.645 yes no 7.20 oxide_T2_6 SrGeO3 2.5 -2.485 yes no 1.70 oxide_T3_1 CaGeO3 3.5 -2.460 yes no 2.70 oxide_T3_2 CsNbO3 3.5 -2.475 yes no 2.90 oxide_T3_3 NaTaO3 3.5 -2.902 yes no 5.30 oxide_T3_4 BaPbO3 3.5 -1.970 yes no 0.00 oxide_T3_5 LaCoO3 3.5 -2.084 yes no 0.00 oxide_T3_6 BaTiO3 3.5 -3.364 yes no 4.00 chalcogenide_T1_1 LaScTe3 1.5 -1.884 yes yes \u2013 chalcogenide_T1_2 BaGeS3 1.5 -656.803 no yes \u2013 chalcogenide_T1_3 LaVTe3 1.5 -1.539 yes yes \u2013 chalcogenide_T1_4 BaWS3 1.5 3221614596037021.000 no yes \u2013 chalcogenide_T1_5 CaWTe3 1.5 -1.046 yes yes \u2013 chalcogenide_T1_6 BaZrTe3 1.5 -2.002 yes yes \u2013 chalcogenide_T2_1 RbNbTe3 2.5 -1.355 yes yes \u2013 chalcogenide_T2_2 CsTaTe3 2.5 -1.295 yes yes \u2013 chalcogenide_T2_3 LaCrTe3 2.5 -1.485 yes yes \u2013 chalcogenide_T2_4 KNbTe3 2.5 -1.338 yes yes \u2013 chalcogenide_T2_5 BaWTe3 2.5 -1.310 yes yes \u2013 chalcogenide_T2_6 LaFeTe3 2.5 -1.514 yes yes \u2013 chalcogenide_T3_1 CaGeTe3 3.5 -1.081 yes yes \u2013 chalcogenide_T3_2 CaMoS3 3.5 -2720.939 no yes \u2013 chalcogenide_T3_3 NaTaTe3 3.5 -1.146 yes yes \u2013 chalcogenide_T3_4 LaCoS3 3.5 -2.544 yes yes \u2013 chalcogenide_T3_5 CaWS3 3.5 -33543487.666 no yes \u2013 chalcogenide_T3_6 CaHfTe3 3.5 -1.617 yes yes \u2013 halide_T1_1 NaFeI3 1.5 -0.553 yes yes \u2013 halide_T1_2 NaNiI3 1.5 -0.723 yes yes \u2013 halide_T1_3 RbMnI3 1.5 -1.123 yes yes \u2013 halide_T1_4 CsZnI3 1.5 -1.165 yes yes \u2013 halide_T1_5 RbSnI3 1.5 -1.194 yes yes \u2013 halide_T1_6 RbPbI3 1.5 -1.240 yes yes \u2013 halide_T2_1 CsPbI3 2.5 -1.302 yes yes \u2013 halide_T2_2 KPbI3 2.5 -1.186 yes yes \u2013 halide_T2_3 RbFeI3 2.5 -0.773 yes yes \u2013 halide_T2_4 KFeI3 2.5 -0.737 yes yes \u2013 halide_T2_5 KZnI3 2.5 -1.102 yes yes \u2013 halide_T2_6 CsMnI3 2.5 -1.160 yes yes \u2013 halide_T3_1 NaZnI3 3.5 -0.928 yes yes \u2013 halide_T3_2 KCuI3 3.5 -0.892 yes yes \u2013 halide_T3_3 NaMnI3 3.5 -0.900 yes yes \u2013 halide_T3_4 NaCoI3 3.5 -0.586 yes yes \u2013"},{"location":"benchmarks/results/meidnet-propertyaware.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/meidnet-propertyaware/property_predictionbenchmarks/runs/perov5/meidnet-propertyaware/inverse_designpython scripts/benchmarks.py run perov5 --method meidnet-propertyaware\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only; generating the candidates took 43 min.
"},{"location":"benchmarks/results/paper-candidates.html","title":"Candidates shipped with the paper, screened here","text":"The 26 candidate structures in examples/perov5/paper_results, relaxed with MACE-MP-0 and scored with the protocol's stability, uniqueness and novelty criteria. Their targets and budget are those of the paper, so the record is not ranked.
field value Dataset Perov-5, protocolpaper Type model Inputs structure, property:heat_all, property:dir_gap Parameters \u2013 Training data Perov-5 train (11,356) Status Computed here on 2026-10-05 Evidence level MLIP validated Added 2026-10-05 by Anand Babu (UCLouvain) Links paper \u00b7 code"},{"location":"benchmarks/results/paper-candidates.html#inverse-design","title":"Inverse design","text":"metric value definition \u0394Hf\u00b7U\u00b7N 0.654 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen \u0394Hf filter 1.000 fraction of delivered candidates that pass the formation-energy filter: MACE-MP-0 formation energy after relaxation at most 0.10 eV/atom against elemental reference phases (the filter of meidnet screen and of the paper). It is not stability on the convex hull: a candidate can pass it and still decompose into competing compounds Unique 0.923 fraction of delivered candidates whose composition does not repeat an earlier one Novel 0.692 fraction of delivered candidates whose composition is not in the data set (training, validation and test splits) \u0394Hf -1.27 eV/atom median MACE-MP-0 formation energy of the delivered candidates Delivered 26 candidates delivered out of the budget of 54 \u0394Hf\u00b7U\u00b7N count 17 candidates that pass the formation-energy filter and are unique and novel"},{"location":"benchmarks/results/paper-candidates.html#candidates","title":"Candidates","text":"Every candidate with its MLIP formation energy, novelty and, where Perov-5 has the same sites, the DFT band gap.
candidate formula target gap (eV) \u0394Hf (eV/atom) passes \u0394Hf filter novel DFT gap (eV) chalcogenide_chalcogenide_T1_R1_2 LaCrTe3 -1.485 yes yes \u2013 chalcogenide_chalcogenide_T1_R1_3 NaNbTe3 -1.208 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_1 KNbTe3 -1.338 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_2 BaTe3W -1.310 yes yes \u2013 chalcogenide_chalcogenide_T2_R1_3 BaTe3Mo -1.429 yes yes \u2013 halide_halide_T1_R1_1 NaMnI3 -0.900 yes yes \u2013 halide_halide_T1_R1_2 NaNiI3 -0.723 yes yes \u2013 halide_halide_T1_R1_3 RbMnI3 -1.123 yes yes \u2013 halide_halide_T1_R1_4 NaNiI3 -0.723 yes yes \u2013 halide_halide_T1_R2_4 NaZnI3 -0.928 yes yes \u2013 halide_halide_T2_R1_1 RbPbI3 -1.240 yes yes \u2013 halide_halide_T2_R1_2 KMnI3 -1.083 yes yes \u2013 halide_halide_T2_R1_3 NaCoI3 -0.586 yes yes \u2013 halide_halide_T2_R1_4 NaSnI3 -0.936 yes yes \u2013 halide_halide_T3_R1_1 CsMnI3 -1.160 yes yes \u2013 halide_halide_T3_R1_2 NaFeI3 -0.553 yes yes \u2013 halide_halide_T3_R2_3 CsPbI3 -1.302 yes yes \u2013 halide_halide_T3_R2_4 RbSnI3 -1.194 yes yes \u2013 oxide_oxide_T1_R1_1 SrZrO3 -3.478 yes no \u2013 oxide_oxide_T1_R1_2 LaMnO3 -2.467 yes no \u2013 oxide_oxide_T1_R1_3 LaScO3 -3.629 yes no \u2013 oxide_oxide_T1_R1_4 NaTaO3 -2.902 yes no \u2013 oxide_oxide_T2_R1_1 LaMnO3 -2.467 yes no \u2013 oxide_oxide_T2_R1_2 BaMnO3 -1.919 yes no \u2013 oxide_oxide_T2_R1_3 SrVO3 -2.416 yes no \u2013 oxide_oxide_T2_R1_4 BaPbO3 -1.970 yes no \u2013"},{"location":"benchmarks/results/paper-candidates.html#outputs","title":"Outputs","text":"benchmarks/runs/perov5/paper-candidates/inverse_designpython scripts/benchmarks.py paper-candidates perov5\n Computed on Intel64 Family 6 Model 197 Stepping 2, GenuineIntel (16 threads), CPU only.
"},{"location":"benchmarks/results/paper-inverse-design.html","title":"MEIDNet (paper): inverse design","text":"The inverse-design campaign reported in the paper: candidates generated from property targets with the published model, screened for stability, uniqueness and novelty, and checked by DFT.
field value Dataset Perov-5, protocolpaper Type model Inputs structure, property:heat_all, property:dir_gap Parameters 0.70 M Training data Perov-5 train (11,356) Status Reported in the paper Evidence level DFT validated Added 2026-05-29 by Anand Babu (UCLouvain) Checkpoint dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth Links paper \u00b7 code \u00b7 weights"},{"location":"benchmarks/results/paper-inverse-design.html#inverse-design","title":"Inverse design","text":"metric value definition Generated 140 candidates generated (reported in the paper) \u0394Hf\u00b7U\u00b7N count 19 candidates that pass the formation-energy filter and are unique and novel \u0394Hf\u00b7U\u00b7N 0.136 candidates that pass the formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements) and are unique and novel, divided by the budget of 54; a candidate that was not delivered counts as a failure. The paper called this SUN; it is not the hull-based SUN of LeMat-GenBench or MatterGen"},{"location":"benchmarks/results/paper-inverse-design.html#evidence","title":"Evidence","text":"examples/perov5/paper_results/Numbers quoted from the paper: 140 candidates generated from property targets, 19 of them stable, unique and novel (13.6%). The paper's targets and budget differ from the protocol, so this record is not ranked. The candidates shipped with the paper (examples/perov5/paper_results) are screened with the protocol's criteria in the record 'Candidates shipped with the paper, screened here'.
"},{"location":"community/index.html","title":"Community results","text":"Every method record, newest first. Contribute yours.
date method dataset tasks status 2026-10-05 MEIDNet (alignment training, seed 3) Perov-5 inverse design Computed here 2026-10-05 MEIDNet (alignment training, 7 seeds) Perov-5 representation Computed here 2026-10-05 Candidates shipped with the paper, screened here Perov-5 inverse design Computed here 2026-10-03 Chance level Perov-5 representation Computed here 2026-10-03 Composition k-NN Perov-5 property prediction, representation Computed here 2026-10-03 Random sampling Perov-5 inverse design Computed here 2026-10-03 Encoder screening Perov-5 inverse design Computed here 2026-10-03 Training mean Perov-5 property prediction Computed here 2026-10-03 MEIDNet (published model) Perov-5 property prediction, representation, inverse design Computed here 2026-10-03 MEIDNet (first early-fusion model) Perov-5 property prediction, representation, inverse design Computed here 2026-10-03 MEIDNet (shorter training) Perov-5 property prediction, representation, inverse design Computed here 2026-05-29 MEIDNet (paper): inverse design Perov-5 inverse design Reported in the paper"},{"location":"community/contribute.html","title":"Contribute a method","text":"The benchmarks rank methods under fixed protocols. Any model can take part: the protocol defines the data, the targets and the metrics, and the scoring code evaluates the outputs of a model whatever produced them. Submissions go through GitHub, so every number has a public record and a reviewer.
"},{"location":"community/contribute.html#1-produce-the-outputs","title":"1. Produce the outputs","text":"Each task of a protocol asks for one kind of output. For Perov-5 (protocol perov5-v1.1):
predictions.csv: id (the dataset's material_id), pred_heat_all, pred_dir_gap inverse design 54 candidate structures: 6 per target and chemical family candidates.csv: id, variant, target, formula, elements, cif; the CIFs next to it representation latent vectors of the test materials computed by run for MEIDNet checkpoints; for other models, contact the maintainer The targets, the families and the budget are listed in the protocol.
"},{"location":"community/contribute.html#2-score-them","title":"2. Score them","text":"python scripts/benchmarks.py score perov5 --task property_prediction --predictions predictions.csv\npython scripts/benchmarks.py score perov5 --task inverse_design --candidates my_run/candidates.csv\n score prints the metrics of the task as JSON. Inverse design relaxes every candidate with MACE-MP-0 first (stability.csv and scored.csv are written next to candidates.csv); if MACE is installed in another Python environment, pass --mlip-python or set MEIDNET_MLIP_PYTHON.
A MEIDNet checkpoint can run every task at once:
python scripts/benchmarks.py run perov5 --method meidnet-2k\n"},{"location":"community/contribute.html#3-write-the-record","title":"3. Write the record","text":"Copy benchmarks/submissions/_template.json to benchmarks/submissions/<dataset>/<method>.json and fill it in:
protocol the dataset's protocol version, for example perov5-v1.1 method name, type (model or baseline), a one-sentence description, parameters, training data, links to paper, code and weights method.test_in_training true if the training data included the test split; the row is then marked, because its test scores are not held-out method.alignment_space for the representation task: encoder or projection, the space in which the model's alignment loss compares the two latents results per task, the JSON printed by score spread, n_runs optional: the standard deviation of each metric over several training runs (seeds), and their number; results then holds the means artifacts per task, a public link to the folder with the outputs (predictions or candidates with their CIFs) validation_level mlip_validated for inverse design scored with the MLIP; dft_validated only with public DFT outputs in evidence status community_submitted Then run python scripts/benchmarks.py validate, which checks every task and metric name against the protocol, and open a pull request (the template has a checklist). The maintainer re-scores the outputs with the same code; when the numbers agree, the record is marked as computed here.
If you prefer not to open a pull request, the issue template Benchmark submission asks for the same information.
"},{"location":"community/contribute.html#add-a-dataset","title":"Add a dataset","text":"A dataset becomes a benchmark when its file in benchmarks/datasets/ has a protocol section:
data_dir, with train.csv, val.csv and test.csv) and which split each task uses. Results are only compared within one dataset and one protocol version.id, a name, a one-sentence summary, its settings (for inverse design: the family, its variants, the property targets, the candidate budget and the stability threshold) and the headline metric that orders the leaderboard.id, a short label, the unit, whether higher or lower is better, the number of digits shown and a one-sentence definition. Metrics marked \"show\": false appear on each method's page only.benchmarks/datasets/perov5.json is the template. Changing the targets, the budget or a definition makes a new protocol version; earlier records keep theirs.
test_in_training set.score, which implements the definitions of the protocol.dft_validated needs the DFT outputs.Submissions are reviewed by the author of MEIDNet.
"},{"location":"community/help.html","title":"Getting help","text":"Ask PRISM, the button at the bottom right of every page, collects the help in one place: short answers by topic with the pages to read, a form for questions and a form for bug reports.
You want to Where Ask how to do something, discuss a dataset or a result Discussions of the Space Report something that does not work as documented GitHub issues Submit a benchmark result Contribute a resultQuestions are answered in public, so that the answer helps the next person with the same question. Answers that come up repeatedly are added to the documentation.
"},{"location":"community/help.html#what-to-include","title":"What to include","text":"Ask PRISM sends nothing by itself. It opens Hugging Face or GitHub in a new tab with the text pre-filled, and you can edit or delete any line before posting. Your table, structures and files are never included; if a problem depends on them, describe the columns and a few rows, or share a small example only if you choose to.
"},{"location":"community/help.html#common-questions","title":"Common questions","text":"Which modalities does MEIDNet use? Crystal structures together with any number of scalar properties (for example a band gap, a formation enthalpy or your own columns). Spectra such as XRD or DOS, images and text are on the roadmap. See Capabilities.
What should my dataset look like? One table with one row per material, a crystal structure (CIF) for each row and one numeric column per property: What data do I need? and Bring your own dataset.
Why is my upload or training limited on the hosted Studio? The public Space is shared, so uploads, rows and epochs are capped. For larger datasets, install MEIDNet and run it on your own computer: 5-minute quickstart.
Are the predicted properties reliable? They are the model's estimates. Targets outside the range of the training data are extrapolations; confirm candidates with calculations or experiments: Interpreting a candidate and Screen with MACE.
"},{"location":"examples/double-perovskite.html","title":"Double perovskites A\u2082BB\u2032X\u2086","text":"meidnet/families/double_perovskite_a2bbx6.yaml is a second family written with the same ingredients as the perovskite one. It shows what a family file can express:
lattice: fcc_primitive: edge a/\u221a2, angles 60\u00b0), A at (\u00bc,\u00bc,\u00bc) and (\u00be,\u00be,\u00be), B at the origin, B\u2032 at (\u00bd,\u00bd,\u00bd), six X;a = 2 (r_B + r_B\u2032 + 2 r_X) (one B\u2013X\u2013B\u2032 chain per half cell edge);tolerance_factor: {A: A, B: [B1, B2], X: X}.meidnet families double_perovskite_a2bbx6 --variant halide\n Rock-salt ordered double perovskite A2BB'X6 (Fm-3m) [variant: halide]\n formula pattern: A2B1B2X6 (10 atoms per cell)\n A: 9 candidate elements - Large cation in the cuboctahedral cavity\n B1: 15 candidate elements - First octahedral cation (usually +1 or +2)\n B2: 20 candidate elements - Second octahedral cation (usually +3 or +4)\n X: 4 candidate elements - Anion shared between neighbouring B and B' octahedra\n The halide variant has 10,800 compositions; 305 pass every rule (Cs\u2082AgBiI\u2086 among them). Candidates are built in the 10-atom primitive cell; the symmetry refinement step writes them out as the conventional 40-atom Fm-3m cell, which is what the CIF files contain.
"},{"location":"examples/double-perovskite.html#using-it","title":"Using it","text":"A model for this family must be trained on double-perovskite structures aligned to the prototype:
family: double_perovskite_a2bbx6\ndata:\n table: double_perovskites.csv\n properties: [{column: band_gap, unit: eV}]\n align_to_prototype: true\ngeneration:\n family: double_perovskite_a2bbx6\n variant: halide\n objectives: [{property: band_gap}]\n targets: [{band_gap: 2.0}]\n The published checkpoint
The Perov-5 model was trained on 5-atom ABX\u2083 cells. The Studio will score double-perovskite compositions with it (the encoder accepts any cell up to 20 atoms), but those predictions are far outside its training distribution \u2014 a demonstration of the mechanics, not a result.
"},{"location":"examples/perov5.html","title":"Perov-5 \u2014 the paper's experiment","text":"The published MEIDNet model: cubic ABX\u2083 perovskites from the Perov-5 dataset (CDVAE split of Castelli et al.), properties formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV).
meidnet demo --family halide --band-gap 2.0 # or: oxide, chalcogenide, nitride\nmeidnet studio # explore it live\n The three checkpoints from the paper are in checkpoints/; ..._propertyaware_2k.pth is the recommended one. meidnet info checkpoints/<file> describes any of them. They load into MEIDNet 2 unchanged.
meidnet download-data # train/val/test CSVs \u2192 data/perov5/ (18,928 rows, 18 MB)\nmeidnet train examples/perov5/meidnet.yaml # 200 epochs \u2248 1 h on a laptop GPU\nmeidnet generate examples/perov5/meidnet.yaml\n examples/perov5/meidnet.yaml reproduces the paper's settings, including two that differ from MEIDNet 2's defaults: normalize: false for both properties and align_to_prototype: false (atoms in file order), and the 1200-epoch alignment ramp.
examples/perov5/paper_results/ holds the 26 CIFs (halide, oxide, chalcogenide) reported in the paper. meidnet screen examples/perov5/paper_results --train-csv data/perov5/train.csv recomputes their MACE stability.
tests/legacy_v1/ contains the v1.0 code byte for byte. pytest -m slow runs it and MEIDNet 2 on the same targets and asserts identical CIFs, predictions and file names.
This page is generated from the code. Available: in this release. Benchmarked: used by a benchmark result reproduced here. Planned: on the roadmap, not yet implemented.
"},{"location":"explore/capabilities.html#modalities","title":"Modalities","text":"modality status how Crystal structure (CIF, up tomax_sites atoms, default 20) Benchmarked an equivariant graph encoder; structures are aligned to the family prototype Scalar properties (any number of numeric columns) Benchmarked one property encoder; every column becomes a target you can set Published properties: direct band gap (dir_gap), formation enthalpy (heat_all) Benchmarked the shipped Perov-5 checkpoint Vector modalities: binned XRD, DOS Planned an encoder per vector modality into the shared latent space Spectra (Raman, UV-Vis) Planned as vector modalities Text (descriptions, synthesis) Planned a text encoder into the shared latent space Images (microscopy) Planned an image encoder into the shared latent space"},{"location":"explore/capabilities.html#fusion","title":"Fusion","text":"The structure latent and the property latent of a material are averaged into the joint latent (meidnet/model.py); the paper calls this early fusion. The two latents are first aligned by a contrastive loss whose weight increases over training.contrastive_warmup_epochs (the curriculum of the paper). Other fusion schemes are compared in the Architecture Atlas.
double_perovskite_a2bbx6 - Rock-salt ordered double perovskite A2BB'X6 (Fm-3m) halide, oxide A, B1, B2, X perovskite_abx3 - Cubic ABX3 perovskite (Pm-3m) oxide, halide, chalcogenide, nitride A, B, X Any other prototype family can be described in a family file.
"},{"location":"explore/capabilities.html#rules-hard-constraints","title":"Rules (hard constraints)","text":"bond_window - Sensible {from}\u2013{to} bondscharge_neutrality - Charge balancemin_distance - No overlapping atomsoctahedral_factor - Octahedral factorproperty_window - Predicted {property} windowtolerance_factor - Goldschmidt tolerance factorcubic_cell - Pulls the decoded cell towards a cube of the family's reference volume.entropy_bonus - Rewards uncertainty early in a round so the search explores (fades to zero).group_consistency - Sites of the same group should agree on their element (ramps up during a round).prototype_alignment - Pulls decoded positions onto the prototype's site positions.short_distance_penalty - Large penalty if any two decoded atoms come closer than min.site_repulsion - Short-range exponential repulsion between decoded atoms.site_separation - Keeps decoded atoms from collapsing onto each other (1/distance).soft_charge - Expected total charge of the most likely composition should be zero (ramps up during a round).tolerance_penalty - Soft version of the Goldschmidt tolerance-factor window, using the most likely elements.meidnet screen: MACE-MP-0 relaxation, a formation-energy filter (\u0394Hf at most 0.10 eV/atom against the elements; not the energy above the convex hull) and the unique / novel counts (optional pip install meidnet[stability]). DFT and experiments are yours: the benchmark evidence ladder records them.Where to find training data and realistic targets: computed (DFT) databases give structures with properties, experimental databases give measured values and refined structures. MEIDNet needs, per material, one crystal structure plus one or more scalar properties (what data do I need?); the last column says how far each source is from that.
Pick an application:
What to look for: band gap in the 1.1-1.8 eV window (single junction) or 1.6-2.0 eV (tandem top cell), direct gap, strong absorption, formation energy / hull distance, defect tolerance, device records for the experimental side
As MEIDNet targets: dir_gap or any gap column + heat_all / e_above_hull; family = perovskite_abx3 (halide, oxide, chalcogenide), or your own prototype
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Perovskite Database Project experimental more than 42,000 solar-cell devices device-level records: composition, architecture, efficiency, Voc, Jsc, FF, stability, processing conditions, from the literature no crystal structures per record: use it to choose realistic gap / composition targets and to check candidates against what has been made Hybrid organic-inorganic perovskites (Kim et al. 2017) computed 1,346 HOIPs DFT structures, band gaps and dielectric constants of ABX3 hybrid perovskites ready, but organic A-site cations need a family file with molecular site groups (not shipped) Experimental band gaps (Zhuo et al. 2018) experimental 6,354 compounds measured band gaps by composition, with the matbench_expt_gap subset as a standard task targets and validation of predicted gaps; no structures Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#semiconductor-physics","title":"Semiconductor physics","text":"What to look for: band gaps at several levels of theory (PBE, HSE, mBJ) and experimental, effective masses, dielectric constants, carrier mobility proxies, band edges, phonons
As MEIDNet targets: gap, effective mass or dielectric constant as scalar targets; keep the level of theory consistent inside one table
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data Matbench computed 13 tasks standardised property-prediction tasks (band gap, formation energy, moduli, dielectric constant, ...) with fixed cross-validation folds use the structure-based tasks as property tables matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Hybrid organic-inorganic perovskites (Kim et al. 2017) computed 1,346 HOIPs DFT structures, band gaps and dielectric constants of ABX3 hybrid perovskites ready, but organic A-site cations need a family file with molecular site groups (not shipped) Experimental band gaps (Zhuo et al. 2018) experimental 6,354 compounds measured band gaps by composition, with the matbench_expt_gap subset as a standard task targets and validation of predicted gaps; no structures QMOF computed about 20,000 MOFs DFT-optimised MOF structures with band gaps and charges beyond today's cell-size limit; targets and descriptors Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#batteries-and-ionic-conductors","title":"Batteries and ionic conductors","text":"What to look for: ionic conductivity, migration barriers, voltage, stability window, volume change, hull distance
As MEIDNet targets: formation energy + conductivity (log scale) as targets; families with a mobile-ion site group
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Liverpool Ionic Conductivity Database (LiIonDB) experimental about 800 measurements experimental Li-ion conductivities with temperature and the reported phase, from the literature targets (log conductivity); join with COD / Materials Project structures Materials Project battery explorer computed about 4,000 intercalation electrodes average voltage, capacity, volume change and stability of intercalation electrodes computed from the MP structures ready: voltage and capacity as targets on the host-structure family Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#thermoelectrics","title":"Thermoelectrics","text":"What to look for: Seebeck coefficient, electrical and thermal conductivity, zT, carrier concentration and temperature; experimental data is temperature-resolved
As MEIDNet targets: zT or Seebeck at a fixed temperature as a scalar target
database kind size features use with MEIDNet AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets UCSB thermoelectrics (Gaultois et al.) experimental about 1,100 compounds experimental Seebeck, resistivity, thermal conductivity, zT at a given temperature targets; join with structures Starrydata experimental tens of thousands of digitised curves temperature-dependent thermoelectric and other property curves digitised from papers targets at a chosen temperature Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#catalysis-and-surfaces","title":"Catalysis and surfaces","text":"What to look for: adsorption energies, reaction barriers, surface energies, work functions
As MEIDNet targets: bulk descriptors (formation energy, d-band proxies) only - MEIDNet works on bulk prototypes, not slabs
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table NOMAD computed more than 10,000,000 calculations raw and normalised DFT outputs from many codes; band structures, DOS, energies; FAIR provenance needs curation: pick one code and functional before building a table Open Catalyst (OC20 / OC22) computed more than 1,300,000 relaxations adsorbate-surface relaxations with energies and forces; the standard catalysis ML benchmark surfaces are out of MEIDNet's scope; use the bulk subsets as structure sources Catalysis-Hub computed more than 100,000 reaction energies adsorption and reaction energies on surfaces with the DFT settings used descriptors only Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#magnetism-and-superconductivity","title":"Magnetism and superconductivity","text":"What to look for: magnetic moment and ordering, Curie / Neel temperature, superconducting Tc with the structure it belongs to
As MEIDNet targets: total magnetization per formula unit, Tc (log scale) as scalar targets
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally SuperCon (NIMS) and 3DSC experimental about 16,000 Tc entries; 3DSC links 5,700 to structures experimental superconducting critical temperatures; 3DSC matches them to ICSD / Materials Project structures 3DSC is ready (structure + Tc); use log Tc as the target MAGNDATA (Bilbao) experimental about 2,000 magnetic structures experimentally determined commensurate and incommensurate magnetic structures structures with magnetic ordering; join with moments as targets"},{"location":"explore/databases.html#mechanical-dielectric-and-piezoelectric","title":"Mechanical, dielectric and piezoelectric","text":"What to look for: bulk and shear moduli, hardness, dielectric tensor, piezoelectric coefficients, phonon stability
As MEIDNet targets: bulk modulus, dielectric constant or a piezoelectric scalar as targets
database kind size features use with MEIDNet Materials Project computed about 150,000 inorganic compounds relaxed structures, formation energy, energy above hull, PBE/r2SCAN band gaps, magnetic ordering, elastic / dielectric / piezoelectric tensors, phonons for a subset, X-ray absorption, battery (intercalation) electrodes ready: export CIFs + a property table with the API; one prototype family per table AFLOW computed more than 3,500,000 entries formation enthalpy, band gaps, elastic and thermal properties (AGL), Debye temperature, magnetic moments, prototype encyclopedia ready; the AFLOW prototype library is a good source of family files JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables Matbench computed 13 tasks standardised property-prediction tasks (band gap, formation energy, moduli, dielectric constant, ...) with fixed cross-validation folds use the structure-based tasks as property tables matminer datasets computed + experimental about 50 curated tables one-line loaders for experimental band gaps (Zhuo 2018, 6,354 compounds; matbench_expt_gap 4,604), experimental formation enthalpies (Kim 2017), UCSB thermoelectrics, elastic tensors, dielectric constants, piezoelectric tensors, phonon data, superhard materials, HOIP perovskites experimental tables are composition-only: join with a structure source (COD, Materials Project) to train; use them directly as realistic targets Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files ICSD experimental about 300,000 inorganic structures the reference collection of experimentally determined inorganic structures; the ground truth most DFT databases start from structures: licence forbids redistribution, train locally Materials Data Facility computed + experimental hundreds of datasets a registry of published materials datasets, experimental and computed, with DOIs a place to find and to publish tables"},{"location":"explore/databases.html#2d-materials","title":"2D materials","text":"What to look for: exfoliation energy, gap, magnetic state, dynamic stability of monolayers
As MEIDNet targets: a 2D prototype family (e.g. MXene or TMD) with gap and exfoliation energy as targets
database kind size features use with MEIDNet JARVIS-DFT (NIST) computed about 80,000 3D and 1,000 2D materials OptB88vdW and TBmBJ band gaps, effective masses, dielectric functions, solar-cell efficiency (SLME), elastic tensors, piezoelectric and thermoelectric (BoltzTraP) properties, exfoliation energies, superconducting Tc (electron-phonon) for a subset ready; the richest single source of scalar targets per structure Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) Materials Cloud computed curated archives (MC3D, MC2D, phonons, ...) MC3D relaxed structures, MC2D exfoliable monolayers, phonon database, Sssp pseudopotential sets, workflow provenance (AiiDA) ready for MC3D / MC2D tables C2DB computed about 4,000 monolayers stability (dynamic and thermodynamic), PBE / HSE / GW gaps, magnetic state, optical absorption, piezoelectric and Raman data for monolayers ready for a 2D prototype family 2DMatPedia computed about 6,000 monolayers exfoliation energy, band gap, magnetic moment of monolayers derived from bulk databases ready for a 2D prototype family"},{"location":"explore/databases.html#porous-materials-and-mofs","title":"Porous materials and MOFs","text":"What to look for: pore geometry, gas uptake, band gap of the framework, stability
As MEIDNet targets: frameworks exceed MEIDNet's cell-size limit today (max_sites); use the property tables to set targets and the descriptors as inspiration
database kind size features use with MEIDNet Crystallography Open Database (COD) experimental more than 500,000 crystal structures experimentally determined structures (organic and inorganic) as CIFs with references; no properties structures: join with a property table to train; the natural source of experimental prototypes for family files Cambridge Structural Database (CSD) experimental more than 1,300,000 organic and metal-organic structures experimental molecular and MOF crystal structures beyond today's cell-size limit; descriptors only QMOF computed about 20,000 MOFs DFT-optimised MOF structures with band gaps and charges beyond today's cell-size limit; targets and descriptors CoRE MOF experimental about 14,000 experimental MOFs computation-ready experimental MOF structures with pore descriptors beyond today's cell-size limit"},{"location":"explore/databases.html#generative-model-benchmarks","title":"Generative-model benchmarks","text":"What to look for: fixed splits used by CDVAE, DiffCSP, MatterGen and MEIDNet; validity, uniqueness, novelty and stability metrics
As MEIDNet targets: the Perov-5 split is the published MEIDNet benchmark; MP-20 and Carbon-24 test structure representation
database kind size features use with MEIDNet OQMD computed more than 1,000,000 structures formation energy, stability (hull), band gap (PBE), many hypothetical prototypes (Heusler, perovskite, ...) ready: prototype-decorated entries are exactly what a MEIDNet family describes Alexandria computed about 4,500,000 PBE and 400,000 PBEsol / SCAN structures formation energy, hull distance, band gap, magnetic moment, for a very large set of hypothetical compounds (1D, 2D, 3D) ready; the usual pre-training set of generative models (MatterGen's Alex-MP-20 split) GNoME (DeepMind) computed about 380,000 stable crystals structures predicted stable with DFT energies and hull distances; no electronic properties structures only: join with a computed property before training Cubic perovskites (CMR, Castelli et al.) computed about 19,000 ABX3 compositions formation (heat of formation) energies and direct / indirect gaps (GLLB-SC) for cubic ABX3 with O, N, S, F anions and their mixtures - the source of Perov-5 the published MEIDNet benchmark (Perov-5 split): meidnet download-data CDVAE splits (Perov-5, MP-20, Carbon-24) computed 18,928 / 45,229 / 10,153 structures fixed train / val / test splits used by generative-model papers; Perov-5 carries formation energy and band gap, the others energies only ready: the format meidnet reads directly (id, cif, property columns)"},{"location":"explore/databases.html#all-databases","title":"All databases","text":"database kind access licence applications Materials Project computed web, mp-api (free key) CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric, Catalysis and surfaces OQMD computed web, REST API, full download open Solar cells and photovoltaics, Semiconductor physics, Magnetism and superconductivity, Generative-model benchmarks AFLOW computed web, REST / AFLUX API open Semiconductor physics, Mechanical, dielectric and piezoelectric, Thermoelectrics, Magnetism and superconductivity JARVIS-DFT (NIST) computed web, jarvis-tools (figshare downloads) open (NIST) Solar cells and photovoltaics, Semiconductor physics, Thermoelectrics, Mechanical, dielectric and piezoelectric, 2D materials, Magnetism and superconductivity Alexandria computed bulk download CC BY 4.0 Generative-model benchmarks, Semiconductor physics, Magnetism and superconductivity, 2D materials GNoME (DeepMind) computed download CC BY-NC 4.0 Generative-model benchmarks NOMAD computed web, API, raw calculation files CC BY 4.0 Semiconductor physics, Solar cells and photovoltaics, Catalysis and surfaces Materials Cloud computed web, archive downloads CC BY 4.0 (per archive) 2D materials, Mechanical, dielectric and piezoelectric, Semiconductor physics C2DB computed web, ASE database download CC BY 4.0 2D materials, Semiconductor physics, Solar cells and photovoltaics 2DMatPedia computed web, download open 2D materials Cubic perovskites (CMR, Castelli et al.) computed web, ASE database download CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics, Generative-model benchmarks CDVAE splits (Perov-5, MP-20, Carbon-24) computed download (CSV with CIF column) MIT (repository) Generative-model benchmarks Matbench computed web, matbench package open Semiconductor physics, Mechanical, dielectric and piezoelectric matminer datasets computed + experimental matminer.datasets.load_dataset per dataset Semiconductor physics, Solar cells and photovoltaics, Thermoelectrics, Mechanical, dielectric and piezoelectric Crystallography Open Database (COD) experimental web, full download, REST public domain (CC0) Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric, Porous materials and MOFs ICSD experimental licence (most universities have it) commercial Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Magnetism and superconductivity, Mechanical, dielectric and piezoelectric Cambridge Structural Database (CSD) experimental licence commercial (CSD-Community subset free) Porous materials and MOFs Perovskite Database Project experimental web, download CC BY 4.0 Solar cells and photovoltaics Hybrid organic-inorganic perovskites (Kim et al. 2017) computed download (Scientific Data), matminer CC BY 4.0 Solar cells and photovoltaics, Semiconductor physics Experimental band gaps (Zhuo et al. 2018) experimental paper SI, matminer expt_gap per paper Semiconductor physics, Solar cells and photovoltaics Liverpool Ionic Conductivity Database (LiIonDB) experimental web, download open Batteries and ionic conductors Materials Project battery explorer computed web, mp-api CC BY 4.0 Batteries and ionic conductors UCSB thermoelectrics (Gaultois et al.) experimental matminer ucsb_thermoelectrics open Thermoelectrics Starrydata experimental web, download open Thermoelectrics Open Catalyst (OC20 / OC22) computed download, fairchem CC BY 4.0 Catalysis and surfaces Catalysis-Hub computed web, GraphQL API open Catalysis and surfaces SuperCon (NIMS) and 3DSC experimental NIMS MDR, 3DSC on GitHub open (3DSC) Magnetism and superconductivity MAGNDATA (Bilbao) experimental web open Magnetism and superconductivity QMOF computed download (figshare) CC BY 4.0 Porous materials and MOFs, Semiconductor physics CoRE MOF experimental download CC BY 4.0 Porous materials and MOFs Materials Data Facility computed + experimental web, API per dataset Semiconductor physics, Solar cells and photovoltaics, Batteries and ionic conductors, Thermoelectrics, Catalysis and surfaces, Mechanical, dielectric and piezoelectricMissing one you use? Open an issue or edit benchmarks/catalog/databases.json.
Datasets used with MEIDNet and what has been done with each. Tasks, sizes and properties differ from one dataset to the next, so results are compared within a dataset only (see Benchmarks).
dataset structures properties used size available here Perov-5 cubic ABX\u2083 perovskites, 5 atoms per cell direct band gap, formation enthalpy 18,928 pretrained model, configuration, tutorial, benchmark results MP-20 Materials Project, up to 20 atoms none aligned in the paper about 45,000 structure-representation results in the paper Carbon-24 carbon allotropes, up to 24 atoms none aligned in the paper about 10,000 structure-representation results in the paper Double perovskites A\u2082BB\u2032X\u2086 a family file, no dataset none 10,800 compositions (halide variant) design space and rules Your dataset one material family any scalar columns any upload in the Studio, or the command lineNew to multimodal data? Learn multimodality explains what a modality is, and Databases by application lists 31 computed and experimental sources.
Perov-5 \u2014 multimodal benchmark
18,928 cubic ABX\u2083 perovskites (CDVAE split: 11,356 train / 3,787 validation / 3,785 test), each with a relaxed structure, formation enthalpy (heat_all, eV/atom) and direct band gap (dir_gap, eV).
Modalities used in MEIDNet: crystal structure \u00b7 electronic property (band gap) \u00b7 thermodynamic property (formation enthalpy).
What the paper does with it: multimodal alignment of the structure and property encoders, property reconstruction, and the inverse-design demonstration (candidates generated from property targets, screened with MACE and validated by DFT).
In this repository: meidnet download-data fetches it; the published checkpoint checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth was trained on it; it is the data behind the live Studio.
Suitable tasks: inverse design from a band gap and a stability target \u00b7 property prediction from the structure \u00b7 structure\u2013property retrieval \u00b7 measuring how well two modalities align.
Available here: pretrained model \u00b7 configuration (examples/perov5/meidnet.yaml) \u00b7 tutorial (the paper's experiment, Colab) \u00b7 benchmark results.
Open in the Studio
Benchmark results \u00b7 The paper's experiment \u00b7 Dataset source (CDVAE) \u00b7 Castelli et al. 2012, Xie et al. 2022
MP-20 \u2014 published: structure-representation generalization
~45,000 structures from the Materials Project with at most 20 atoms per cell (CDVAE split).
Published MEIDNet use: generalization of the crystal encoder / decoder beyond perovskites (structure representation and reconstruction). It is not a multimodal benchmark in the paper: no property modality was aligned on it, and no MP-20 checkpoint is shipped here.
Benchmark results \u00b7 Dataset source (CDVAE)
Carbon-24 \u2014 published: structure-representation generalization
~10,000 carbon structures with up to 24 atoms per cell (CDVAE split).
Published MEIDNet use: the same structure-representation test as MP-20. Not a multimodal benchmark; no Carbon-24 checkpoint is shipped here.
Benchmark results \u00b7 Dataset source (CDVAE)
Use your dataset in the Studio
Any table with an id, one or more scalar property columns and a crystal structure per row (CIF text in a column or one .cif file per id) can be used directly: upload it in the Studio or run meidnet init \u2192 check \u2192 train \u2192 generate (bring your own dataset). The structures must belong to one material family (prototype + site groups), which is what the rules and the search need.
Battery conductors, MOFs, 2D materials and spinels are natural next families. Results on any of them can be contributed, and a dataset becomes a benchmark once its protocol is defined (add a dataset).
"},{"location":"learn/index.html","title":"Learn multimodality","text":"A material can be described in many ways: by its atoms and their positions, by a formula, by measured or computed properties, by a diffraction pattern, a spectrum, a micrograph or a paragraph in a paper. Each way of describing it is a modality. Multimodal learning trains one model on several modalities of the same materials, so that it can connect them: read a structure and predict a property, or start from the properties you want and propose a structure, which is what MEIDNet does.
This short course takes about ten minutes. It covers the main ideas of multimodal learning for materials and, for each, how MEIDNet implements it. For a full review, see Babu and Krishnan (2026).
A modality is one kind of observation of a material, with its own shape of data. The shape decides which kind of neural network can read it.
The same as a table modality what the data looks like example a network that reads it Crystal structure atoms with positions in a unit cell: a graph a CIF file graph neural network Composition elements and their fractions: a set CsPbI\u2083 set or element network Scalar properties a short vector of numbers band gap, formation enthalpy small fully connected network (MLP) Diffraction pattern a curve: intensity versus angle 2\u03b8 powder XRD 1D convolutional network Spectra and DOS a curve: signal versus energy density of states, XAS, Raman 1D convolutional network or transformer Image a grid of pixels SEM or TEM micrograph 2D convolutional network or vision transformer Text a sequence of words a synthesis procedure language modelWhy combine them?
Each modality sees part of the material. A structure fixes the atoms but does not tell you the band gap without a calculation; a band gap says nothing about which atoms produce it. A model that learns both together can translate between them in either direction.
What it needs: paired data, where several modalities describe the same material. In Perov-5, every one of the 18,928 structures comes with its DFT band gap and formation enthalpy, which makes it a two-modality dataset.
"},{"location":"learn/index.html#the-multimodality-map","title":"2. The multimodality map","text":"Select a modality to see what it contains, which networks encode it, how it is combined with other modalities and how MEIDNet handles it. The centre describes the shared representation.
The map as a table modality MEIDNet how Crystal structure available an E(n)-equivariant graph network (EGNN) encodes up tomax_sites atoms (default 20) Scalar properties available all numeric columns form one vector, read by one MLP; every column becomes a target Composition via the structure the element on each site is part of the structure; formula-only data needs a composition model Processing conditions partial numeric conditions can be extra scalar columns, encoded together with the properties Diffraction (XRD) planned a vector-modality encoder for binned patterns, first item of the roadmap Spectra and DOS planned as vector modalities Microscopy images planned an image encoder into the shared space Text planned a text encoder into the shared space The capabilities page lists the same information, generated from the code.
"},{"location":"learn/index.html#five-challenges","title":"3. Five challenges of multimodal learning","text":"Baltru\u0161aitis, Ahuja and Morency organise multimodal machine learning around five challenges. Every multimodal model answers each of them in some way, even if only by leaving it out.
challenge the question a materials example in MEIDNet Representation How is each modality encoded, and do they share one space (joint) or keep separate spaces tied by a constraint (coordinated)? a graph network for the structure, an MLP for the property vector both: two encoders whose outputs are coordinated by contrastive learning and then averaged into one joint latent of 128 numbers Translation How is one modality mapped to another? structure \u2192 properties (prediction), properties \u2192 structure (inverse design) both directions: decoders read the joint latent and the property latent alone Alignment Which parts of one modality correspond to which parts of another? which XRD peaks come from which lattice planes only whole materials: each structure is matched with its own property vector, not part by part Fusion How are the modalities joined to make a prediction? one descriptor from structure and band gap together the structure latent and the property latent are averaged (a note on the word \"early\") Co-learning Can one modality help learn another, for example a scarce one? learn from many simulated XRD patterns to read a few measured ones closest analogue: the property branch is trained to rebuild the crystal on its own, so at design time properties alone are enoughFurther reading: Baltru\u0161aitis et al. 2019 (the taxonomy) \u00b7 Guo et al. 2019 (deep multimodal representation learning) \u00b7 Ngiam et al. 2011 (shared representations between modalities) \u00b7 Babu and Krishnan 2026 (multimodal and cross-modal learning techniques).
"},{"location":"learn/index.html#contrastive-learning","title":"4. Contrastive learning: how two modalities are aligned","text":"Take a batch of \\(N\\) materials. Each gives two vectors of length one: \\(z_c\\) from its structure and \\(z_p\\) from its properties. The dot product of two such vectors is their cosine similarity. Lay out all \\(N \\times N\\) similarities in a table: the diagonal holds the true pairs, everything else is a structure next to someone else's properties.
Contrastive learning turns each row into a multiple-choice question: which of the \\(N\\) property vectors belongs to this structure? The right answer is on the diagonal. It asks the same question for each column, from properties to structures. The loss MEIDNet uses is this symmetric InfoNCE loss:
\\[ \\mathcal{L}_\\text{InfoNCE} = \\frac{1}{2N}\\sum_{i=1}^{N}\\left[ -\\log\\frac{\\exp\\!\\big(z_c^{(i)}\\!\\cdot z_p^{(i)}/\\tau\\big)}{\\sum_{j=1}^{N}\\exp\\!\\big(z_c^{(i)}\\!\\cdot z_p^{(j)}/\\tau\\big)} -\\log\\frac{\\exp\\!\\big(z_p^{(i)}\\!\\cdot z_c^{(i)}/\\tau\\big)}{\\sum_{j=1}^{N}\\exp\\!\\big(z_p^{(i)}\\!\\cdot z_c^{(j)}/\\tau\\big)} \\right] \\]The temperature \\(\\tau\\) sets how sharply the model must prefer the right answer. Move the slider to see its effect on a batch of five materials: each row shows how much probability the model gives to each candidate.
setting in MEIDNet value inmeidnet.yaml temperature \\(\\tau\\) 0.01 training.temperature strength of the alignment 5.0 training.contrastive_weight warm-up: the strength grows from 0 to its full value over 60 % of the epochs (the paper: 1,200 epochs) training.contrastive_warmup_epochs size of the shared space 128 model.latent_dim The warm-up is the paper's curriculum: the decoders first learn to rebuild crystals and properties, then the two latents are pulled together. After training, the training report measures the alignment with retrieval: how often the nearest property vector to a structure is its own (top 1) or among the five nearest (top 5). The Studio's Model block plots the mean cosine between matched pairs during training.
The same loss pairs pictures with their captions in CLIP; MEIDNet pairs crystals with their properties.
Further reading: van den Oord et al. 2018 (InfoNCE) \u00b7 Radford et al. 2021 (CLIP) \u00b7 Babu and Krishnan 2026 \u00b7 Contrastive learning in the Architecture Atlas.
"},{"location":"learn/index.html#inverse-design","title":"5. From a shared space to inverse design","text":"Once both modalities live in one space, a point in it can be read in both directions. MEIDNet makes the reverse direction possible with one extra training term: the crystal decoder is also trained from the property latent alone. A vector of wanted properties can then be encoded and decoded into a structure.
The search in practice:
The full objective and every step are in How MEIDNet works.
Two limits that matter
The released package (2.3.1) does not invent new atomic arrangements: candidates are compositions on a known prototype (the engine MEIDNet Matter runs adds a family-free generator). Its predicted properties are estimates to confirm with DFT or experiment (scope, limitations and roadmap).
Further reading: the MEIDNet paper (Babu et al. 2026) \u00b7 Babu, Gouv\u00eaa and Rignanese 2026 (generative models, multimodal learning and closed-loop workflows in inverse materials design) \u00b7 Moro, Loh et al. 2025 (multimodal foundation models for materials).
"},{"location":"learn/index.html#where-next","title":"6. Where to go next","text":"Architecture Atlas
Early fusion, late fusion, shared latent spaces, cross-attention and contrastive learning, drawn the same way, with an advisor that recommends one for your data.
Architecture Atlas
Recipes by problem
From a research question to an architecture, a dataset, a configuration and a tutorial.
Recipes by problem
Build it
Upload a table of structures and properties, train in the browser, set targets, run the search.
Open the Studio
Find data
Datasets that work with MEIDNet, and 31 computed and experimental databases grouped by application.
Datasets
Five ways to build a model from several modalities, drawn the same way: inputs on the left, outputs on the right. Each card gives the idea, when it fits, its strengths and weaknesses, an example from materials science and references. The comparison table shows which of these designs MEIDNet uses, and the advisor suggests one for a given dataset and task.
New to the topic? Start with Learn multimodality. Babu and Krishnan (2026) review multimodal and cross-modal learning techniques in more depth.
Modality A Modality B concatenateab one model prediction Modality A Modality B model A model B guess A guess B combine average or vote Structure Properties EGNN MLP shared space (128-d) align average decoders structure andproperties A tokens (atoms) B tokens (spectrum) querieskeys, values cross-attention fused tokens\u2192 prediction properties of the batch structures true pairs:pulled together other pairs:pushed apart"},{"location":"learn/architectures.html#early-fusion","title":"Early fusion","text":"Idea. Join the modalities at the input: turn each into features, concatenate them into one vector, train one model on it.
When it fits. Every material has every modality; the features have a fixed length and similar scales; you want a quick baseline.
Strengths. Simple. The model can use interactions between features from the first layer. Weaknesses. A missing modality breaks the input. Very different shapes (a graph and a curve) are hard to concatenate. A large modality can drown a small one.
Materials example. Composition descriptors, the processing temperature and a few peak positions from an XRD pattern, concatenated and given to a gradient-boosted regressor.
References: Snoek et al. 2005; Baltru\u0161aitis et al. 2019.
"},{"location":"learn/architectures.html#late-fusion","title":"Late fusion","text":"Idea. One model per modality, each makes its own prediction; the predictions are combined by averaging, voting or a small model on top.
When it fits. Modalities are often missing, models for each already exist, or robustness matters more than squeezing out the last bit of accuracy.
Strengths. Modular. Tolerates a missing modality. Each model can be trained on its own, larger dataset. Weaknesses. Cannot learn how the modalities interact. There is no shared representation, so no translation from one modality to another and no inverse design.
Materials example. A structure-based graph network and a spectrum-based convolutional network each predict a phase label; the final label averages their probabilities.
References: Snoek et al. 2005; Baltru\u0161aitis et al. 2019.
"},{"location":"learn/architectures.html#shared-latent","title":"Shared latent space (joint and coordinated)","text":"Idea. One encoder per modality maps into a common space. In a coordinated representation the latents stay separate but are trained to agree; in a joint representation they are merged into one vector that the decoders read. MEIDNet does both: the structure latent and the property latent are aligned by contrastive learning, then averaged into the joint latent; the decoders read the joint latent and the property latent alone.
When it fits. You want to translate between modalities (properties \u2192 structure for inverse design), retrieve one modality from another, or search a space that both understand. You have paired examples.
Strengths. Translation in both directions, retrieval, and one space to optimise in. Each modality keeps the encoder that suits its shape. Weaknesses. Needs paired data. The space is only as good as the alignment. Several losses must be balanced.
Materials example. MEIDNet: crystal structures and DFT properties of 18,928 cubic perovskites, searched for compositions with a target band gap and formation enthalpy (the paper's experiment).
References: Ngiam et al. 2011; Baltru\u0161aitis et al. 2019; Babu et al. 2026 (MEIDNet); Moro, Loh et al. 2025; Babu and Krishnan 2026.
"},{"location":"learn/architectures.html#cross-attention","title":"Cross-attention and transformer fusion","text":"Idea. Each modality becomes a sequence of tokens (atoms, segments of a spectrum, words). Attention lets every token of one modality look up the tokens of the other that matter to it, layer after layer.
When it fits. The modalities have parts that interact in detail and are not aligned in advance; the dataset is large.
Strengths. Learns which parts relate to which, and handles sequences of different lengths without manual alignment. Weaknesses. Needs much data and compute; the cost grows with the product of the two sequence lengths; harder to interpret than a single shared vector.
Materials example. Spectrum segments attend to the atoms of the structure, so the model learns which sites shape which spectral features.
References: Tsai et al. 2019 (Multimodal Transformer); Lu et al. 2019 (ViLBERT).
"},{"location":"learn/architectures.html#contrastive","title":"Contrastive learning","text":"Idea. A training objective rather than a wiring. In a batch of paired examples, each example's two embeddings must be more similar to each other than to any other example's. It is how the latents of a shared space are coordinated.
When it fits. You have pairs (a structure and its properties, a pattern and its structure) and want a space in which nearest neighbours are meaningful across modalities.
Strengths. Learns from the pairing alone; provides cross-modal retrieval; scales to large datasets. Weaknesses. Needs large enough batches; sensitive to the temperature; two similar materials in the same batch are treated as negatives and pushed apart.
In MEIDNet. Symmetric InfoNCE with temperature 0.01 and weight 5, switched on gradually over the warm-up (the paper's curriculum). The formula and a playground.
References: van den Oord et al. 2018 (InfoNCE); Radford et al. 2021 (CLIP); Babu and Krishnan 2026.
"},{"location":"learn/architectures.html#side-by-side","title":"Side by side","text":"early fusion late fusion shared latent cross-attention contrastive (objective) where the modalities meet input features predictions a common latent space inside the network, token by token the latent space, through the loss every modality needed for every sample yes no paired examples for training usually paired examples learns interactions between modalities yes no yes yes, in detail for whole samples translates one modality into another no no yes with a decoder retrieval data needed small to medium small per model medium large medium to large used in MEIDNet \u2013 \u2013 yes: structure and property encoders, averaged latent \u2013 yes: symmetric InfoNCEBeyond these five. Conditional generative models such as diffusion (MatterGen) or variational autoencoders (CDVAE) also translate from properties to structures, and they generate free atomic arrangements. MEIDNet instead decodes compositions onto a prototype family and checks them against chemical rules. Babu, Gouv\u00eaa and Rignanese (2026) review generative models, multimodal learning and closed-loop workflows for inverse materials design.
"},{"location":"learn/architectures.html#advisor","title":"Which architecture should I use?","text":"Select the data you have and the task. The recommendation explains the choice and says where it can be run.
The advisor needs JavaScript. In short: structures with scalar properties, for design or retrieval \u2192 shared latent space with contrastive alignment (MEIDNet). Formula only \u2192 a composition model such as Roost. A pattern or spectrum to identify a phase \u2192 a 1D convolutional classifier. Modalities that are often missing \u2192 late fusion. Long sequences that interact in detail \u2192 cross-attention."},{"location":"learn/architectures.html#terminology","title":"A note on words","text":"\"Early fusion\" in the MEIDNet paper names the model in which the structure latent and the property latent are averaged into one joint latent: z_joint = (z_c + z_p) / 2 in meidnet/model.py. In the survey literature, early fusion usually means joining raw features at the input, as in the first card; averaging two learned latents, each from its own encoder, is intermediate or model-level fusion, the shared-latent card. Both names describe the same code. The checkpoints shipped here are the paper's early-fusion models, and the code implements only this fusion: there is no late-fusion option in MEIDNet.
\"Curriculum\" in the paper is the contrastive warm-up: the alignment weight grows from zero to its full value over training.contrastive_warmup_epochs, so that the decoders learn first.
Start from a research question. Each recipe goes problem \u2192 architecture \u2192 why \u2192 data \u2192 implementation \u2192 tutorial \u2192 references. The implementation is MEIDNet where it applies; otherwise the recipe names established alternatives.
For step-by-step changes to a MEIDNet configuration (another target, another family, a new rule), see the how-to guides.
problem architecture implementation Perovskites with a target band gap and a negative formation enthalpy shared latent + contrastive MEIDNet Candidates from your own DFT results for one family shared latent + contrastive MEIDNet Screen a whole family for a target before searching structure encoder of the shared space MEIDNet Identify the crystal structure from an XRD pattern 1D convolutional network; contrastive pattern \u2194 structure 1D CNN classifiers; pattern encoder planned for MEIDNet Predict a property when only the formula is known composition network Roost and similar composition models Connect synthesis text with structures text encoder + contrastive or cross-attention text encoder planned for MEIDNet Design new atomic arrangements conditional generative model over full geometry MatterGen, CDVAE"},{"location":"learn/recipes.html#target-band-gap","title":"Perovskites with a target band gap and a negative formation enthalpy","text":"Problem Find cubic ABX\u2083 halide perovskites with a direct band gap near 1.5 eV and a negative formation enthalpy. Architecture Shared latent space with contrastive alignment: MEIDNet. Why The question runs from properties to structure. A shared space whose crystal decoder is also trained from the property latent alone gives that direction, and the family's rules keep the chemistry sensible. Data Perov-5: 18,928 structures with DFT band gap and formation enthalpy (dataset card). The published checkpoint is trained on it. Implementation MEIDNet:meidnet demo, meidnet generate or the Studio's Targets and Search blocks. Tutorial The paper's experiment \u00b7 in the browser: Studio, Targets block \u00b7 screen the candidates with MACE References Babu et al. 2026 (MEIDNet); Castelli et al. 2012 (the dataset); Babu, Gouv\u00eaa and Rignanese 2026 (review of inverse design). One command with the published model:
meidnet demo --family halide --band-gap 1.5 --enthalpy -0.10\n Or in meidnet.yaml (from examples/perov5/meidnet.yaml):
generation:\n family: perovskite_abx3\n variant: halide\n objectives:\n - {property: dir_gap, loss: l2, weight: 10000, select_weight: 1.0}\n - {property: heat_all, loss: l1, weight: 6000, select_weight: 0.4}\n targets:\n - {dir_gap: 1.5, heat_all: -0.10}\n"},{"location":"learn/recipes.html#own-family","title":"Candidates from your own DFT results for one family","text":"Problem You computed structures and properties for one prototype family, for example A\u2082BB\u2032X\u2086 double perovskites, and want new compositions with chosen property values. Architecture Shared latent space with contrastive alignment, trained on your table. Why The same reasoning as above. Every scalar column you give becomes a target you can set, and the family file says which sites exist and which elements may sit on them. Data A table with an id, numeric property columns and one CIF per row. Public sources by application are on Databases by application. Implementation MEIDNet: meidnet init, check, train, generate, or the Studio's Data and Model blocks. Tutorial Bring your own dataset \u00b7 in the browser: Studio, Data block \u00b7 change the material family References Babu et al. 2026 (MEIDNet). data:\n table: my_results.csv\n id_column: id\n cif_column: cif\n properties:\n - {column: band_gap, unit: eV}\n - {column: e_form, unit: eV/atom}\ngeneration:\n family: double_perovskite_a2bbx6\n variant: halide\n objectives:\n - {property: band_gap, loss: l2, weight: 10000}\n - {property: e_form, loss: at_most, weight: 6000}\n targets:\n - {band_gap: 1.8, e_form: -0.10}\n Then meidnet check \u2192 meidnet train \u2192 meidnet generate; each step writes a report.
meidnet space or the Studio's design-space view. Tutorial Explore in 3D \u00b7 in the browser: Studio, design space \u00b7 How MEIDNet works References Babu et al. 2026 (MEIDNet). meidnet space examples/perov5/meidnet.yaml --model checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth -o space.csv\n"},{"location":"learn/recipes.html#xrd-structure","title":"Identify the crystal structure from an XRD pattern","text":"Problem Given a powder diffraction pattern, tell which crystal system, space group or known structure it comes from. Architecture A 1D convolutional classifier on the pattern (one modality). Multimodal: a pattern encoder aligned with a structure encoder by contrastive learning, so a pattern retrieves the structures it matches. Why A pattern is a fingerprint of the lattice. A classifier needs labels; a contrastive model needs only (pattern, structure) pairs, which can be simulated from any structure database. Data Simulate patterns from computed or experimental structures (semiconductor physics, all databases), for example with pymatgen's XRD calculator; validate on measured patterns. Implementation 1D convolutional classifiers such as Park et al. (2017). In MEIDNet, an encoder for binned XRD patterns is the first item of the roadmap and is not yet available. References Park et al. 2017; Baltru\u0161aitis et al. 2019; Babu and Krishnan 2026."},{"location":"learn/recipes.html#formula-only","title":"Predict a property when only the formula is known","text":"Problem Predict a band gap or a stability measure for compositions whose crystal structure is unknown, as in many experimental tables. Architecture A composition network that reads the formula as a weighted set of elements, such as Roost. With extra numeric inputs (temperature, doping), early fusion of composition features and those numbers is a strong baseline. Why MEIDNet needs a structure for every row. If your formulas all sit on one prototype (for example ABX\u2083), you can build those structures on the prototype and use MEIDNet; otherwise a composition model is the appropriate choice. Data Experimental band gaps and Matbench tasks are listed on Databases by application. Implementation Roost or another composition model; outside MEIDNet, which requires a crystal structure per material. References Goodall and Lee 2020 (Roost); Dunn et al. 2020 (Matbench)."},{"location":"learn/recipes.html#synthesis-text","title":"Connect synthesis text with structures","text":"Problem Link written synthesis procedures to the structures they produce, to suggest how a candidate might be made or which candidates resemble known syntheses. Architecture A text encoder (a language model) aligned with a structure encoder by contrastive learning; cross-attention when individual words must be tied to individual elements or steps. Why Text and structures have no common format; a shared space lets each be compared with the other. Data Text-mined synthesis recipes (Kononova et al. 2019) paired with structures from a structure database. Implementation A text encoder that maps into MEIDNet's shared space is planned and not yet available. References Kononova et al. 2019; Moro, Loh et al. 2025; Babu and Krishnan 2026."},{"location":"learn/recipes.html#new-arrangements","title":"Design new atomic arrangements","text":"Problem Generate crystals whose atomic arrangement is not one of a few known prototypes. Architecture A conditional generative model over the full geometry: diffusion (MatterGen) or a variational autoencoder (CDVAE). Why MEIDNet places compositions on a family prototype and does not invent arrangements (scope). Models that generate positions and cells directly can. Data Large structure databases; the generative benchmarks are listed under generative-model benchmarks. Implementation MatterGen, CDVAE and related generative models. References Zeni et al. 2025 (MatterGen); Xie et al. 2022 (CDVAE); Babu, Gouv\u00eaa and Rignanese 2026 (review)."},{"location":"learn/recipes.html#references","title":"References","text":"A rule is a function that looks at a candidate and returns pass/fail, the measured value, the allowed window and a sentence. The search enforces it; every report and the Studio explain it.
"},{"location":"recipes/add-constraint.html#1-write-it","title":"1. Write it","text":"my_rules.py:
from meidnet.constraints import CONSTRAINTS\n\n@CONSTRAINTS.register(\"no_lead\", \"Rejects any composition containing Pb.\")\ndef no_lead(cand):\n return cand.result(\"no_lead\", \"Pb\" not in cand.elements.values())\n\n@CONSTRAINTS.register(\"mass_window\", \"Mean atomic mass must lie between min and max (g/mol).\")\ndef mass_window(cand, min=0.0, max=200.0):\n from pymatgen.core import Element\n m = sum(Element(e).atomic_mass for e in cand.structure.species) / len(cand.structure)\n return cand.result(\"mass_window\", min <= m <= max, float(m), (min, max), f\"mean mass {m:.1f}\")\n What a candidate gives you: cand.elements ({group: element}), cand.structure (pymatgen, after symmetry refinement), cand.raw (before), cand.lattice_a, cand.predictions ({property: value}), cand.radius(group).
plugins: [my_rules.py]\ngeneration:\n family: my_perovskite.yaml # a copy of the built-in family with the rules appended:\n constraints:\n - {name: charge_neutrality}\n - ...\n - {name: no_lead}\n - {name: mass_window, min: 0, max: 120}\n"},{"location":"recipes/add-constraint.html#3-run","title":"3. Run","text":"meidnet generate meidnet.yaml. The candidate cards list No lead and mass window with the measured value; the funnel shows how many compositions each removed.
A complete example lives in examples/custom_rules/ (a no toxic elements rule and a max cell edge rule), and notebook 03 does the same in Colab.
Rules decide acceptance. To steer the latent search instead (a penalty with a gradient), register a search term with @SEARCH_TERMS.register in meidnet.terms; it receives a SearchContext with the decoder's outputs. See rules and search terms.
MEIDNet's property modality is a vector of any length. Adding a property is a data change, not a code change.
List it under data.properties (label and unit are for the reports; normalize: true is the default and recommended when properties have different scales):
data:\n properties:\n - {column: band_gap, label: Band gap, unit: eV}\n - {column: formation_e, label: Formation energy, unit: eV/atom}\n - {column: dielectric, label: Dielectric constant}\n meidnet check \u2192 meidnet train. The training report rates each property separately.
generation.objectives and targets.Properties with many missing values: rows with a missing value are skipped (the check report counts them). Fill them, or drop the property.
The published model
The Perov-5 checkpoint has exactly two properties (formation enthalpy, direct band gap) and cannot steer others; train your own model to add some.
"},{"location":"recipes/change-family.html","title":"Change the material family","text":"A family file tells MEIDNet what kind of crystal to build. The built-in ones are meidnet/families/perovskite_abx3.yaml and double_perovskite_a2bbx6.yaml; meidnet families <name> prints a summary. To use your own, copy one, edit it, and point to it:
generation:\n family: my_family.yaml\n variant: null # or a variant you define\n"},{"location":"recipes/change-family.html#the-parts-of-a-family-file","title":"The parts of a family file","text":"name: spinel_ab2x4\ntitle: Normal spinel AB2X4 (Fd-3m, primitive cell)\n\nprototype: # WHERE atoms sit (fractional coordinates, in decoder slot order)\n lattice: fcc_primitive # cubic | fcc_primitive | bcc_primitive | explicit a,b,c,alpha,beta,gamma\n reference_a: 8.1\n sites:\n - {group: A, frac: [0.125, 0.125, 0.125]}\n - ...\n\ngroups: # WHO may sit there, and with which charges\n A: {description: tetrahedral cation, elements: [Mg, Zn, Fe, Co, Ni, Mn], oxidation_states: {Mg: [2], ...}}\n B: {...}\n X: {...}\n\nsampling_order: [B, X, A] # the LAST group is restricted to charge-balancing elements\n\nlattice: # HOW BIG the cell is\n rule: bond_sum # a = factor \u00d7 \u03a3 ionic radii of the listed groups (or rule: fixed)\n groups: [B, X]\n factor: 2.0\n min: 3.0\n max: 12.0\n\nvariants: # named sub-families: element subsets and rule parameters\n oxide: {groups: {X: {elements: [O]}}, params: {tolerance_factor: {min: 0.8, max: 1.05}}}\n\nsearch_terms: # soft penalties during the latent search (see reference/rules)\n - {name: site_separation, weight: 200}\n - ...\n\nconstraints: # hard rules every saved candidate must pass\n - {name: charge_neutrality}\n - {name: min_distance, min: 0.8}\n - ...\n"},{"location":"recipes/change-family.html#alignment-of-training-data","title":"Alignment of training data","text":"For generation to mean anything, the model must have been trained on structures whose atoms are in the prototype's site order. data.align_to_prototype: true (default) re-orders every training structure to match the family named in generation.family (or top-level family:); structures that do not fit are reported by meidnet check. Raise data.prototype_tolerance for distorted cells.
meidnet families my_family.yaml --variant oxide\nmeidnet space meidnet.yaml # every composition with rule values \u2192 CSV\n Errors name the problem: unknown element symbols, a prototype group without a definition, an override that matches no rule, a group left empty after your filters.
"},{"location":"recipes/change-family.html#worked-example","title":"Worked example","text":"The double perovskite page walks through a 10-site family in the rhombohedral primitive cell of the cubic Fm-3m lattice, written this way.
"},{"location":"recipes/change-targets.html","title":"Change the target properties","text":""},{"location":"recipes/change-targets.html#a-different-value","title":"A different value","text":"generation:\n targets:\n - {band_gap: 1.2}\n - {band_gap: 1.8} # each entry is its own search\n"},{"location":"recipes/change-targets.html#a-different-kind-of-goal","title":"A different kind of goal","text":"loss says how a prediction is compared with the target:
loss meaning typical use l2 squared distance (default) hit a value l1 absolute distance hit a value, less sensitive to outliers at_most only values above the target are penalised formation enthalpy \u2264 \u22120.1 eV/atom at_least only values below are penalised dielectric constant \u2265 20 objectives:\n - {property: band_gap, loss: l2, weight: 10000, select_weight: 1.0}\n - {property: enthalpy, loss: at_most, weight: 6000, select_weight: 0.4}\n weight acts during the latent search; select_weight when ranking finished candidates.
The model knows the properties it was trained on (meidnet info model.pt lists them). To steer a property that is not in the model, add it to the data and retrain.
Drag the target slider; the predicted-closest table and the scatter update at once, and a warning appears if the target lies outside the training range. Export the YAML when you are happy.
"},{"location":"recipes/elements.html","title":"Exclude or restrict elements","text":"generation:\n exclude_elements: [Pb, Cd, Hg] # never used, on any site\n only_elements: # restrict a site group to a shortlist\n B: [Ti, Zr, Hf, Sn]\n Both are applied to the family before the search starts, so the decoder cannot even propose an excluded element. The Studio's element chips do the same thing (click to toggle) and show the counts change.
To change which elements a family allows at all, or their oxidation states, copy the family file and edit the groups: section \u2014 see Change the material family.
pip install \"meidnet[stability]\" # ase + mace-torch (~500 MB of weights on first use)\nmeidnet screen runs/my_oxides/generation --train-csv materials.csv\n For each CIF: relax cell and positions with the MACE-MP-0 universal potential, compute the formation energy per atom against elemental reference phases, and report
--threshold); the report prints it as STABLE,Results go to stability.csv in the folder. Structures with |\u0394H_f| > 5 eV/atom are flagged as artefacts and excluded from the rates. The reference phases and GGA-style O/N corrections are those of the paper.
The S is not stability in the usual sense. The common 0.1 eV/atom threshold for metastable, possibly synthesisable materials concerns the energy above the convex hull of all competing phases; the formation energy against the elements is a weaker test, so a candidate can pass it and still decompose into other compounds. A stability statement needs the energy above the hull (DFT, or an MLIP against a reference set of competing phases).
This is a first filter, not a verdict: MACE formation energies carry ~0.1 eV/atom uncertainty, and a cubic prototype may relax to a lower-symmetry structure.
"},{"location":"reference/api.html","title":"Python API","text":"The command line is a thin layer over these functions; use them from notebooks or your own scripts.
from meidnet.config import load_config, config_from_dict\nfrom meidnet.pipeline import check, train, generate\n\ncfg = load_config(\"meidnet.yaml\")\ninfo = check(cfg) # dict: report (counts, skip reasons), records, family, report_path\ninfo = check(cfg, keep_structures=True) # records also keep their pymatgen Structure (record.structure)\nmodel_path = train(cfg) # writes model.pt + training_report.html, returns the path\nresult = generate(cfg) # GenerationResult: .saved (candidates), .targets (funnel logs)\n"},{"location":"reference/api.html#pieces","title":"Pieces","text":"from meidnet.checkpoint import load_checkpoint, describe, property_ranges\nlm = load_checkpoint(\"model.pt\") # LoadedModel: .model, .stats (property names/units/normalisation)\nlm.model.encode_crystal(x) # structure \u2192 latent (x from meidnet.data.featurize)\nlm.model.encode_properties(p) # normalised property vector \u2192 latent\n\nfrom meidnet.family import load_family\nfam = load_family(\"perovskite_abx3\", variant=\"halide\", exclude=[\"Pb\"], overrides={\"tolerance_factor\": {\"max\": 1.0}})\n\nfrom meidnet.constraints import build_candidate, evaluate, CONSTRAINTS\ncand = evaluate(build_candidate(fam, {\"A\": \"Cs\", \"B\": \"Sn\", \"X\": \"Br\"}), fam.constraints)\ncand.passed, [r.to_dict() for r in cand.results]\n\nfrom meidnet.generate import Designer\nfrom meidnet.config import GenerationSection\ng = GenerationSection(family=\"perovskite_abx3\", variant=\"halide\",\n objectives=[{\"property\": \"dir_gap\"}], targets=[{\"dir_gap\": 2.0}], rounds=3, steps=200)\nres = Designer(lm, fam, g, on_saved=lambda c, t: print(c.formula)).run(\"out/\")\n\nfrom meidnet.designspace import enumerate_space, space_to_csv\nspace = enumerate_space(fam, lm) # every composition: rule values + predictions\n Custom rules and search terms: CONSTRAINTS.register, meidnet.terms.SEARCH_TERMS.register.
generation.extra_constraints adds rules to the family's own for one run, without editing the family file \u2014 this is how the Studio saves a predicted-property window:
generation:\n family: perovskite_abx3\n variant: halide\n extra_constraints:\n - {name: property_window, property: dir_gap, min: 1.5, max: 3.0}\n meidnet.pipeline.family_for(cfg, need_variant=True) returns the family a run uses, with these rules appended; generation.family / generation.variant take precedence over the top-level family.
meidnet.studio.chemiscope turns MEIDNet objects into chemiscope datasets \u2014 plain dicts you can save with json.dump and open at chemiscope.org, or show in a notebook with chemiscope.show(...):
from meidnet.studio.chemiscope import (space_dataset, candidates_dataset, records_dataset,\n published_data_dataset, structure_to_chemiscope)\n\nds = space_dataset(fam, space, lm, max_structures=2000) # design space: formula, site_*, pred_*, rule_*, passes_all\nds = candidates_dataset(candidate_dicts, fam, run_dir, lm=lm) # candidates of a run (reads their CIFs when present;\n # lm adds units and property names)\nds = records_dataset(info[\"records\"], cfg.data.properties, source=\"my data\") # needs check(cfg, keep_structures=True)\nstructure_to_chemiscope(structure) # one pymatgen Structure \u2192 {size, names, x, y, z, cell}\n candidate_dicts are saved candidates as dicts \u2014 [c.to_dict() for c in res.saved] after a Designer run, or [c for t in json.load(open(\"generation.json\"))[\"targets\"] for c in t[\"saved\"]] from a finished run. run_dir is the run folder that contains generation/ (cfg.out_dir after meidnet generate); where a CIF file is not found, the structure is rebuilt on the prototype from the candidate's elements.
The Studio server is a small class you can drive without a browser \u2014 the 04 Colab notebook does exactly this. Every method takes the same JSON-like dicts the page sends; session keeps users (or experiments) apart.
import base64\nfrom meidnet.studio.server import Studio\n\nst = Studio(None) # the published model; or Studio(load_config(\"meidnet.yaml\"))\nsid = \"my-session\"\nst.state(sid) # model, ranges, families, limits, session info\n\nb64 = base64.b64encode(open(\"materials.csv\", \"rb\").read()).decode()\nup = st.upload({\"session\": sid, \"files\": [{\"name\": \"materials.csv\", \"b64\": b64}]})\nup[\"suggest\"] # suggested id / CIF / property columns\n\nst.check_data({\"session\": sid, \"id_column\": \"material_id\", \"cif_column\": \"cif\",\n \"properties\": [{\"column\": \"dir_gap\", \"unit\": \"eV\"}],\n \"family\": \"perovskite_abx3\", \"variant\": \"halide\"})\nst.start_train({\"session\": sid, \"epochs\": 10, \"batch_size\": 16})\nst.status(sid, \"train\") # poll: running, progress (epoch, loss, curve), done, error\nst.select_model(sid, \"published\") # or \"own\"\n\nst.family({\"session\": sid, \"family\": \"perovskite_abx3\", \"variant\": \"halide\"}) # design space, scored\nst.start_search({\"session\": sid, \"generation\": {\"per_target\": 2, \"rounds\": 2, \"steps\": 100}})\nst.status(sid, \"search\") # candidates as they are found\nst.chemiscope(sid, \"space\", \"perovskite_abx3\", \"halide\") # or \"candidates\" / \"data\"\nst.validate({\"yaml\": \"generation:\\n rounds: 2\\n\"}) # {ok, generation, notes} or {ok: False, errors}\nst.export({\"session\": sid, \"generation\": {}}) # the meidnet.yaml text\n"},{"location":"reference/cli.html","title":"Command line","text":"meidnet init write a starter meidnet.yaml next to your data\nmeidnet check CONFIG is my data usable? \u2192 check_report.html\nmeidnet train CONFIG learn the latent space \u2192 model.pt, training_report.html\nmeidnet generate CONFIG design candidates \u2192 CIFs, generation_report.html\nmeidnet studio [CONFIG] interactive workbench in your browser\nmeidnet space CONFIG every composition of the family with rule values and predictions \u2192 CSV\nmeidnet demo quick demo with the published perovskite model\nmeidnet screen DIR stability screening of CIFs with MACE (optional extra)\nmeidnet score DIR generation-quality report of any model's CIFs \u2192 table, report.json\nmeidnet info MODEL describe a checkpoint\nmeidnet families [NAME] list / describe material families\nmeidnet schema JSON Schema of the config (for editors and the Studio)\nmeidnet download-data fetch the Perov-5 dataset used in the paper\n meidnet <command> --help lists the options. Useful ones:
init --template perov5 the paper's configuration instead of a blank one train --epochs N override training.epochs generate --quick few rounds and steps \u2014 a smoke test generate --model PATH use another checkpoint studio --export-static FILE.html self-contained Studio for a website studio --port 8765 --no-open choose the port; do not open a browser studio --public --host 0.0.0.0 host the Studio for other people: private session per visitor, capped budgets studio --run-root DIR --docs-dir site where sessions and searches are written; serve a built docs site at /docs/ space --chemiscope FILE.json also write the design space as a 3D dataset for chemiscope.org demo --family oxide --band-gap 3 --enthalpy -0.2 -n 5 demo targets score DIR --reference data/perov5 validity, uniqueness, novelty, diversity and distribution of a folder of CIFs from any model (the metrics) score DIR --targets targets.csv --tolerance dir_gap=0.3 the conditional metrics: target success, target error, multi-property success, constraint success, conditional diversity, target coverage score DIR --mlip --out report.json relax with MACE for the formation-energy filter (reported as stability and SUN; not the energy above the hull); write the full JSON report If meidnet is not on your PATH, python -m meidnet.cli \u2026 is equivalent.
Every setting of meidnet.yaml, generated from the code (meidnet schema gives the JSON Schema). Unknown keys are rejected with a message naming the key, so typos cannot silently change a run.
name string meidnet_run Name of this project; outputs go to output_dir. description string Free text shown at the top of reports. output_dir string runs/{name} Where checkpoints, CIFs and reports are written. family string/null None Family used to align training structures (defaults to generation.family). model_path string/null None Existing checkpoint to generate from (skip training). Default: /model.pt plugins array Python files that register your own constraints or search terms (see 'Add a constraint'). data object/null None model section training section generation object/null None"},{"location":"reference/config.html#data","title":"data:","text":"setting type default meaning table string required Path to a CSV/Excel/JSON table with one row per material. id_column string material_id Column with a unique identifier for each material. cif_column string/null cif Column that contains the CIF text of each structure. Set to null if you use structures_dir. structures_dir string/null None Folder with one CIF file per material, named .cif (used when there is no cif_column). properties array required Numeric columns that form the property modality (any number, at least one). val_table string/null None Optional separate validation table with the same columns. val_fraction number 0.1 Fraction of rows held out for validation when no val_table is given (0 = no validation). max_sites integer 20 Largest number of atoms per cell. Bigger structures are skipped. neighbor_cutoff number 4.0 Distance (\u00c5) below which two atoms count as neighbours. align_to_prototype boolean True Re-order the atoms of every structure so they match the family prototype's site order (needed for meaningful generation). The published Perov-5 model was trained without it. prototype_tolerance number 0.15 How far (fraction of a cell edge) an atom may sit from its prototype site and still count as that site. Raise it to accept distorted structures; lower it to keep only ideal ones."},{"location":"reference/config.html#dataproperties","title":"data.properties[]","text":"setting type default meaning column string required Name of the column in your table that holds this property. label string/null None Human-readable name used in reports (defaults to the column name). unit string Unit shown in reports, e.g. 'eV' or 'eV/atom'. normalize boolean True Standardise the property to zero mean and unit spread before training. Keep this on when properties have very different scales."},{"location":"reference/config.html#model","title":"model:","text":"setting type default meaning latent_dim integer 128 Size of the shared latent space where structures and properties meet. node_hidden_dim integer 128 Width of the per-atom features inside the graph network. edge_dim integer 64 Width of the per-bond messages inside the graph network. species_embedding_dim integer 64 Size of the learned element embedding. property_hidden_dim integer 128 Width of the property encoder's hidden layer. decoder_coordinate_input data / zeros / prototype data What the crystal decoder receives as starting atom positions during training. 'data' (published model) uses the true positions; generation always starts from 'zeros' or the prototype. 'zeros'/'prototype' make training and generation consistent (experimental)."},{"location":"reference/config.html#training","title":"training:","text":"setting type default meaning epochs integer 200 Number of passes over the training data. batch_size integer 16 Materials per training step (use 8 if memory is short). learning_rate number 0.001 Adam learning rate. contrastive_weight number 5.0 Strength of the alignment between structure and property latents. temperature number 0.01 Sharpness of the contrastive (InfoNCE) alignment. contrastive_warmup_epochs integer/null None Epochs over which the alignment strength ramps up from 0. Default: 60% of the epochs (the published model used 1200 of 2000). loss_weights section seed integer 0 Random seed for weight initialisation and data shuffling. device string auto 'auto', 'cpu' or 'cuda'. save_every integer 50 Write an intermediate checkpoint every N epochs."},{"location":"reference/config.html#trainingloss_weights","title":"training.loss_weights:","text":"setting type default meaning joint_reconstruction number 1.0 Rebuild the crystal from the joint (structure+property) latent. joint_property number 1.0 Predict the properties from the joint latent. property_reconstruction number 0.5 Rebuild the crystal from the property latent alone - this is what makes inverse design possible. property_property number 0.5 Predict the properties back from the property latent."},{"location":"reference/config.html#generation","title":"generation:","text":"setting type default meaning family string perovskite_abx3 Built-in family name or path to your own family .yaml file. variant string/null None Sub-family, e.g. 'halide' or 'oxide' for perovskites. objectives array required Which properties to steer and how. targets array required One entry per design target, e.g. {dir_gap: 1.5, heat_all: -0.1}. Each runs its own search. per_target integer 4 Candidates to save for each target. population integer 48 Latent vectors optimised in parallel in each round. rounds integer 20 Maximum search rounds per target. steps integer 800 Gradient steps per round. learning_rate number 0.0012 Step size of the latent search. anchor_weight number 12.0 Keeps the search close to the latent that the target properties map to. temperature_start number 1.6 Softness of element choices at the start of a round. temperature_end number 0.9 Softness of element choices at the end of a round. diversity_weight number 0.9 Pushes the parallel searches apart from each other. diversity_tau number 0.25 history_weight number 1.0 Pushes new searches away from latents that already produced a saved candidate. history_tau number 0.25 restart_patience integer 250 Steps without improvement before a search is restarted with noise. restart_noise number 0.35 grad_clip number 1.0 z_clip number 5.0 init_sigma number 0.35 Noise added to the starting latents. init_anchor_mix number 0.75 Share of the property-encoder latent in the starting point. init_rff_mix number 0.6 Share of the target-dependent random-feature direction in the starting point. init_noise_mix number 0.25 Share of random noise in the starting point. rff_frequencies integer 48 decode_temperature number 1.25 Randomness when turning element scores into a choice. decode_topk integer 12 Only the k best-scoring elements of a group can be chosen. decode_tries integer 12 Attempts per latent to find a composition that passes all constraints. anti_repeat_alpha number 0.6 Down-weights elements that were already used in saved candidates. anti_repeat_group string/null None Group the anti-repeat applies to (default: first sampled group). geometry_scale number 1.0 Global strength of the family's search terms. property_first boolean False Ignore the family's search terms during the search (properties only). dedup_formula boolean True Save each composition at most once. min_cosine_sep number 0.985 Skip candidates whose latent is this similar (cosine) to an already saved one. unique_decimals integer 3 exclude_elements array Elements never to use, e.g. [Pb, Cd]. only_elements object Restrict groups to these elements, e.g. {B: [Ti, Zr, Hf]}. overrides object Change parameters of the family's search terms or constraints, e.g. {tolerance_factor: {max: 1.0}}. extra_constraints array Additional rules appended to the family's constraints, e.g. [{name: property_window, property: dir_gap, min: 1.0, max: 3.0}]. disabled_rules array Rules to switch off for this run, by name (or id when two rules share a name), e.g. [charge_neutrality]. The generation report lists them. seed integer 937 Random seed of the search. amp boolean True Use mixed precision on GPUs. output_prefix string/null None File-name prefix of saved CIFs (default: family variant)."},{"location":"reference/config.html#generationobjectives","title":"generation.objectives[]","text":"setting type default meaning property string required Property (column name) this objective refers to. loss l2 / l1 / at_most / at_least l2 How a prediction is compared with the target: l2 = squared distance, l1 = absolute distance, at_most = only values above the target are penalised, at_least = only values below. weight number 10000.0 Importance of this objective during the latent search. select_weight number 1.0 Importance of this objective when ranking finished candidates. select_loss string/null None Comparison used for ranking (defaults to 'loss')."},{"location":"reference/families.html","title":"Family files","text":"A family file is YAML with these keys. meidnet families NAME prints a summary and the constraints with their explanations; errors name the offending key or element.
name, title, description name identification; description appears in the Studio prototype.lattice yes cubic, fcc_primitive, bcc_primitive, or explicit a, b, c, alpha, beta, gamma (a general cell is scaled from one edge with its shape fixed; no non-cubic family ships or has been tested) prototype.reference_a typical cubic cell edge (\u00c5), used by the cubic_cell search term prototype.sites[] yes {group, frac} in decoder slot order; fractional coordinates groups.<G>.description sentence shown in reports groups.<G>.elements yes every element the group may hold (all variants) groups.<G>.sample subset offered to the final element choice (default: elements) groups.<G>.oxidation_states {element: [charges]} used for charge balance and neutrality bias sampling_order order in which groups are chosen; the last is restricted to charge-balancing elements lattice.rule bond_sum (a = factor \u00d7 \u03a3 r_ionic of groups, clipped to min..max) or fixed variants.<V>.groups per-variant elements, sample, oxidation_states of any group variants.<V>.params {rule_or_term_name: {param: value}} applied to search terms and constraints require_variant default true: a variant must be chosen when variants exist search_terms[] {name, \u2026params} soft penalties during the latent search logit_transforms[] {name, \u2026params} edits of the decoder's element scores (e.g. neutrality_bias) constraints[] {name, \u2026params} hard rules; min_distance runs before symmetry refinement, the rest after refine_symmetry, symprec run spglib refinement on candidates (default true, 0.05) User-side changes without editing the file: generation.variant, exclude_elements, only_elements, overrides ({name: {param: value}} for any search term or constraint).
The built-in files are the complete reference: perovskite_abx3.yaml, double_perovskite_a2bbx6.yaml.
Rules (hard constraints) decide whether a candidate is saved. Search terms (soft penalties) steer the latent search towards decodable, sensible outputs. Both are referenced by name in family files.
"},{"location":"reference/rules.html#built-in-rules","title":"Built-in rules","text":""},{"location":"reference/rules.html#bond_window-sensible-fromto-bonds","title":"bond_window \u2014 Sensible {from}\u2013{to} bonds","text":"Every {from} atom needs a {to} neighbour at {low}\u2013{high} \u00d7 the sum of their ionic radii: bonds may be neither squashed nor stretched.
"},{"location":"reference/rules.html#charge_neutrality-charge-balance","title":"charge_neutrality \u2014 Charge balance","text":"The formal charges must add up to zero for at least one combination of the listed oxidation states (e.g. Cs\u207a Pb\u00b2\u207a I\u207b\u00d73 = 0).
"},{"location":"reference/rules.html#min_distance-no-overlapping-atoms","title":"min_distance \u2014 No overlapping atoms","text":"Two atoms closer than {min} \u00c5 would overlap, which is physically impossible.
"},{"location":"reference/rules.html#octahedral_factor-octahedral-factor","title":"octahedral_factor \u2014 Octahedral factor","text":"\u03bc = r_B / r_X says whether the B cation is large enough to hold six X anions around it ({min} \u2264 \u03bc \u2264 {max}).
"},{"location":"reference/rules.html#property_window-predicted-property-window","title":"property_window \u2014 Predicted {property} window","text":"The model's predicted {property} must lie between {min} and {max}.
"},{"location":"reference/rules.html#tolerance_factor-goldschmidt-tolerance-factor","title":"tolerance_factor \u2014 Goldschmidt tolerance factor","text":"t = (r_A + r_X) / (\u221a2 (r_B + r_X)) measures how well the A cation fits the cage of B\u2013X octahedra. Cubic perovskites form roughly for {min} \u2264 t \u2264 {max}.
"},{"location":"reference/rules.html#search-terms","title":"Search terms","text":"cubic_cell \u2014 Pulls the decoded cell towards a cube of the family's reference volume.entropy_bonus \u2014 Rewards uncertainty early in a round so the search explores (fades to zero).group_consistency \u2014 Sites of the same group should agree on their element (ramps up during a round).prototype_alignment \u2014 Pulls decoded positions onto the prototype's site positions.short_distance_penalty \u2014 Large penalty if any two decoded atoms come closer than min.site_repulsion \u2014 Short-range exponential repulsion between decoded atoms.site_separation \u2014 Keeps decoded atoms from collapsing onto each other (1/distance).soft_charge \u2014 Expected total charge of the most likely composition should be zero (ramps up during a round).tolerance_penalty \u2014 Soft version of the Goldschmidt tolerance-factor window, using the most likely elements.neutrality_bias \u2014 Raises the scores of anions whose charge can neutralise the most likely cations.from meidnet.constraints import CONSTRAINTS\n\n@CONSTRAINTS.register(\"no_lead\", \"Rejects any composition containing Pb.\")\ndef no_lead(cand):\n return cand.result(\"no_lead\", \"Pb\" not in cand.elements.values())\n Save it as my_rules.py, list it under plugins: in meidnet.yaml, and add - {name: no_lead} to the family's constraints. See Add a rule.
MEIDNet: Multimodal generative AI framework for inverse materials design. Anand Babu, Rog\u00e9rio Almeida Gouv\u00eaa, Pierre Vandergheynst, Gian-Marco Rignanese. npj Computational Materials (2026). doi:10.1038/s41524-026-02153-3 \u00b7 arXiv:2601.22009
@article{meidnet2026,\n title = {MEIDNet: Multimodal generative AI framework for inverse materials design},\n author = {Anand Babu and Rog{\\'e}rio Almeida Gouv{\\^e}a and Pierre Vandergheynst and Gian-Marco Rignanese},\n journal = {npj Computational Materials},\n year = {2026},\n doi = {10.1038/s41524-026-02153-3}\n}\n"},{"location":"research/paper.html#code-and-data-of-the-paper","title":"Code and data of the paper","text":"v1.0.0-paper (frozen; MEIDNet 2 reproduces it bit for bit \u2014 see Perov-5).checkpoints/ in the repository (2.8 MB each).meidnet download-data); Castelli et al., Energy Environ. Sci. 5, 5814 (2012); Xie et al., ICLR (2022).examples/perov5/paper_results/.Each notebook is a complete, runnable workflow. Training runs in your Colab session (free GPU is enough): your data never leaves your Google account.
Notebook What it does Time 01 \u2014 Quickstart published model, pick a target, read the report, explore the whole design space in 3D 5 min, CPU 02 \u2014 Your own data upload table + CIFs \u2192 check \u2192 train \u2192 generate \u2192 download everything 15 min + training 03 \u2014 Add a rule write a custom constraint in a few lines and see its effect before and after 5 min 04 \u2014 MEIDNet Studio in Colab the live Studio inside the notebook, then the same blocks driven from Python 10 min"},{"location":"start/colab.html#block-by-block-like-the-studio","title":"Block by block, like the Studio","text":"Every notebook follows the seven blocks of the Studio, in order and in the same colours: Block 1 \u00b7 Data (blue), Block 2 \u00b7 Model (orange), Block 3 \u00b7 Family (green), Block 4 \u00b7 Rules (amber), Block 5 \u00b7 Targets (pink), Block 6 \u00b7 Search (dark green) and Block 7 \u00b7 Candidates (violet). Each block starts with a coloured header saying what it does, has a form for its settings, shows its result as charts (and crystals in 3D where it helps), and ends by printing what flows on to the next block.
Run the cells from top to bottom (Runtime \u2192 Run all also works). Change a value in a form and re-run from that block on: the later blocks pick up the change.
The notebooks are generated from scripts/make_notebooks.py, so they stay in step with the command line.
Open the live Studio. It runs the published perovskite model: move rule limits and targets and watch what passes, run a latent search and read each candidate's checklist, export the meidnet.yaml. (Search budgets are capped on the shared server; the local install below has no limits and takes your own data.)
pip install meidnet # PyTorch CPU wheels are fine; CUDA is optional\nmeidnet demo # halide perovskites, band gap 2.0 eV \u2192 runs/demo/\n demo downloads the 2.8 MB published checkpoint, searches for 3 candidates (about a minute on a CPU), checks them against the family's rules and opens generation_report.html.
meidnet demo --family oxide --band-gap 3.0 --enthalpy -0.2 -n 5\nmeidnet studio # the live workbench with the same model\n Notebook 01 \u2014 quickstart
"},{"location":"start/quickstart.html#what-the-demo-did","title":"What the demo did","text":"cif column of the table, or one <id>.cif file per material in a folder up to max_sites atoms per cell (default 20); any elements Properties one or more numeric columns any units; each property is standardised unless you say otherwise An id a column whose values match the CIF file names (if you use files) 12, 12.0 and \"12\" are treated as the same id A family the prototype your structures share (e.g. cubic ABX\u2083) needed for generation; training without one is possible (align_to_prototype: false) A table like this is enough:
material_id,band_gap,dielectric,cif\nmat_001,1.42,18.3,\"# generated using pymatgen\ndata_CsPbBr3\n_cell_length_a 5.87 ...\"\nmat_002,2.16,11.7,\"...\"\n CSV, Excel (.xlsx) and JSON tables are read; Parquet too once pyarrow is installed (pip install \"meidnet[parquet]\").
What the rows contain matters more than how many there are. Measured on the case studies of MEIDNet Matter:
to do this what it needs measured predict a property from structure a well-posed property: continuous, few zero values, few materials sharing one property profile 166 training structures read a band gap with r 0.97 and a 0.65 eV error (34 test structures); 897 with 35 % zero gaps fell short on telling metals from non-metals screen an enumerated family data that fit one family, and a property model that passes 166 to 897 training structures generate one prototype, and hundreds of distinct compositions per element for the decoder Perov-5 generates; data with 11 to 48 compositions per element went to screeningA few hundred structures train a property model, not a generator: with 236 structures of 40 elements (11 compositions per element), the decoder rebuilt none of the test compositions, and every candidate came from screening. Count the rows that carry the property: Perov-5 is mostly metals, and 441 of the 11,356 structures of its training split have a non-zero band gap. meidnet check warns below 200 usable rows; the training report's note below 500 training materials is a rule of thumb. Scope, limitations and roadmap
meidnet check reads every row exactly as training would and writes check_report.html with one line per reason a row was skipped (unreadable CIF, too many atoms, missing value, does not match the prototype) and example ids, so every skipped row is accounted for.
MEIDNet can only design for property values it has seen. The check report draws each property's distribution; the generation report flags targets outside the training range as extrapolation.
"},{"location":"start/what-data.html#which-family","title":"Which family?","text":"perovskite_abx3 (variants: oxide, halide, chalcogenide, nitride).double_perovskite_a2bbx6.align_to_prototype: false) and use the model to predict/screen, but generation needs one prototype.MEIDNet learns one latent space shared by crystal structures and their properties. Prediction reads it from the structure side; inverse design reads it from the property side and searches it for crystals with the properties you want.
The MEIDNet method in one minute. From the properties you want to candidate crystals, block by block; click a block to jump to it. MEIDNet Matter runs the same steps on real data.
\u25b6 Play \u25c0 \u25b6 0:00 Open the Studio \u2192"},{"location":"understand/how-it-works.html#one-latent-space-for-two-modalities","title":"One latent space for two modalities","text":"The training objective is
\\[ L = w_1 L_\\text{recon}(z_\\text{joint}) + w_2 L_\\text{prop}(z_\\text{joint}) + w_3 L_\\text{recon}(z_p) + w_4 L_\\text{prop}(z_p) + \\lambda(t)\\, L_\\text{InfoNCE}(z_c, z_p). \\]The idea in one sentence
Train the two encoders so that a crystal and its own properties land on the same point; then a point chosen from properties alone can be decoded into a crystal.
"},{"location":"understand/how-it-works.html#inverse-design-search-in-that-space","title":"Inverse design = search in that space","text":"For each target:
loss and weight); a cosine anchor to the target latent; the family's search terms (atoms apart, cubic cell, positions near the prototype, expected charge zero, same element on equivalent sites, loose tolerance factor); and repulsion between population members and from earlier successes (diversity).a = 2(r_B + r_X) for perovskites).select_weight, select_loss), skip duplicates and near-duplicate latents, save as CIF.A family is data, not code: a prototype (site positions), site groups (allowed elements and oxidation states), a cell-size rule, soft search terms, and hard rules. The published perovskite tables are families/perovskite_abx3.yaml; the same machinery runs double_perovskite_a2bbx6.yaml and any file you write.
In the cubic ABX\u2083 perovskite, the A cation sits on the corners of the cell, the B cation in the centre and the X anions on the face centres, so that B and its six X neighbours form an octahedron. A composition is one choice of element for each of the three sites.
"},{"location":"understand/how-it-works.html#the-design-space","title":"The design space","text":"For a prototype family, the set of compositions the decoder can output is finite. meidnet space and the Studio enumerate it and score each composition with the structure encoder. The search's candidates are a subset of this space; comparing the two views (encoder prediction vs search's decoded prediction) is a useful sanity check that the reports encourage.
MEIDNet 2 reproduces MEIDNet 1
The same featurisation, forward pass, training step and generation output: tests/test_v1_regression.py compares against the frozen v1 code in tests/legacy_v1/. One fix: v1's results depended on Python's hash seed through set iteration order; v2 fixes element order, so the same seed gives the same CIFs in any process.
MEIDNet shows its reasoning rather than a score. Where to look:
"},{"location":"understand/interpretability.html#before-trusting-the-model","title":"Before trusting the model","text":"z_clip bound; predictions there are less reliable). The model is trained on latents of length 1 and every search moves them further out (typically to length 3\u20135), so the report says this once for the whole run rather than on every card; each candidate's length is the latent_norm column of candidates.csv.A candidate is a composition on an ideal prototype with model-predicted properties. Whether it is stable, synthesisable, or has those properties is for DFT (the energy above the convex hull) and the lab to decide; meidnet screen is a first filter on formation energy.
These pages document the released package, meidnet 2.3.1. MEIDNet Matter, the applied companion, runs a development snapshot of the engine and states the measured limits of its five case studies on its Scope and limits page.
"},{"location":"understand/limits.html#limitations","title":"Limitations","text":"meidnet screen relaxes candidates with MACE-MP-0 and applies a formation-energy filter (at most 0.10 eV/atom against the elemental phases): a first filter, not stability on the convex hull (screening).a, b, c, alpha, beta, gamma); it is scaled from one edge with its shape fixed, needs a model trained on structures of that prototype, and its rules must be written for it, since the tolerance and octahedral factors are perovskite rules. No non-cubic family ships or has been tested, and the hosted Studio takes the built-in families only.What the rows contain matters more than how many there are. Measured on MEIDNet Matter's case studies:
to do this what it needs measured predict a property from structure a well-posed property: continuous, few zero values, few materials sharing one property profile 166 training structures read a band gap with r 0.97 and a 0.65 eV error (34 test structures); 897 with 35 % zero gaps fell short on telling metals from non-metals screen an enumerated family data that fit one family, and a property model that passes 166 to 897 training structures generate one prototype, and hundreds of distinct compositions per element for the decoder Perov-5 generates; data with 11 to 48 compositions per element went to screeningA few hundred structures train a property model, not a generator. The package's own checks: meidnet check warns below 200 usable rows; the training report's note below 500 training materials is a rule of thumb, not a measurement; training needs at least batch_size materials (16 by default); the validation split is a random 10 %, and there is none below 10 rows. The published model cannot be fine-tuned on new properties yet, so a small dataset trains a model from scratch. What data do I need?
max_sites atoms (default 20); any elements Properties any number of scalar columns Training your data, your properties; the published settings by default Generation prototype families: a fixed arrangement of sites whose occupants and cell size are chosen. Built in: cubic ABX\u2083, A\u2082BB\u2032X\u2086; write your own in YAML Rules charge balance, tolerance and octahedral factors, bond windows, minimum distance, predicted-property windows, element filters, and your own Python rules Explanations reports for data, training and generation; the Studio for live what-if On the hosted Studio: up to 1,500 rows and 8 MB per upload, 30 training epochs, 20 atoms per cell (the Studio).
"},{"location":"understand/limits.html#not-yet-supported","title":"Not yet supported","text":"max_sites can be raised, but memory and time grow with the square of it, and the published model was trained on 5-atom cells.training.init_from option to continue training from a checkpoint with the same properties.model.decoder_coordinate_input: prototype is the first step and is available as an experimental setting).Contributions of family files and rules are the easiest way to help; see the GitHub repository.
"},{"location":"use/config.html","title":"The configuration file","text":"meidnet.yaml holds everything a run depends on. One file = one reproducible experiment: it is copied into every output folder and stored inside model.pt.
name: my_oxides # outputs \u2192 runs/my_oxides/\nplugins: [] # Python files with custom rules (optional)\n\ndata: # where the structures and properties come from \u2192 meidnet check\nmodel: # size of the network (defaults are the paper's)\ntraining: # epochs, batch size, learning rate, alignment schedule \u2192 meidnet train\ngeneration: # family, objectives, targets, rules overrides, budget \u2192 meidnet generate\n Rules of thumb:
epocs: stops the run with a message naming the key.meidnet schema prints the JSON Schema (editors such as VS Code use it for completion and validation).The complete list of settings with their meaning and defaults is in the configuration reference.
"},{"location":"use/config.html#the-four-sections-in-one-picture","title":"The four sections in one picture","text":"data:\n table: materials.csv # one row per material\n properties: [{column: band_gap, unit: eV}, {column: dielectric}]\n align_to_prototype: true # atoms re-ordered to the family prototype\n\ntraining:\n epochs: 200\n contrastive_weight: 5.0 # how strongly structure and property latents are pulled together\n\ngeneration:\n family: perovskite_abx3\n variant: oxide\n objectives: # what to steer, and how to compare prediction with target\n - {property: band_gap, loss: l2, weight: 10000}\n targets: # one search per entry\n - {band_gap: 2.0}\n overrides: # change a family rule's parameters without editing the family file\n tolerance_factor: {min: 0.85, max: 1.0}\n exclude_elements: [Pb]\n"},{"location":"use/explore-3d.html","title":"Explore in 3D","text":"The Studio can show any set of structures as a map linked to a 3D viewer: each point on the map is one crystal; click a point and its structure appears next to the map, where you can rotate and zoom it. The viewer is chemiscope, an open-source structure\u2013property explorer.
Open it from any button marked \ud83e\uddca:
Button Where Shows \ud83e\uddca Explore all compositions in 3D Family block the design space: every composition of the family on its prototype \ud83e\uddca Map + 3D of all compositions Targets block the same design space, to compare predictions with your targets \ud83e\uddca All candidates in 3D Candidates block the candidates of your last search \ud83e\uddca See these structures in 3D Data block your data after Check my data, or the Perov-5 training data behind the published model \ud83e\uddca show in the 3D explorer the details window of any composition the design space, with that composition selectedYou can also open the page directly in the explorer with a deep link: ?explore=space, ?explore=candidates or ?explore=data.
formula the composition site_A, site_B, \u2026 the element on each site group lattice_a the cubic cell edge estimated from ionic radii (\u00c5) pred_<property> the model's prediction from the structure encoder, with its unit rule_<name> the value each rule measures, e.g. rule_tolerance_factor passes_all, verdict 1 / \"pass\" when every rule passes (with the limits currently set on the page) score, round, target_<property>, still_passes candidates only: search score, round found, the target, and whether it still passes the current rules The design space shows up to 2,000 compositions: those passing every rule first, then a fixed random sample of the rest. Your data shows the structures that passed Check my data; the Perov-5 training data shows its first 1,500 structures.
"},{"location":"use/explore-3d.html#clicking-a-point","title":"Clicking a point","text":"The crystal appears on the right: drag to rotate, scroll to zoom. The panel below lists every property of that structure. Bonds and the unit cell are drawn. Design-space structures are the ideal prototype filled with that composition's elements, at the cell size the family's lattice rule estimates.
"},{"location":"use/explore-3d.html#when-chemiscope-cannot-load","title":"When chemiscope cannot load","text":"The explorer is downloaded from a public CDN the first time you open it (about 3 MB). Without internet access, or if the CDN is blocked, the Studio switches to its built-in viewer: a scatter plot of the same two axes (coloured points pass every rule) linked to the Studio's own crystal viewer \u2014 click a point, drag the cell to rotate, double-click to spin. Nothing else changes.
"},{"location":"use/explore-3d.html#save-the-dataset","title":"Save the dataset","text":"\u2b07 dataset JSON saves what you see as a chemiscope dataset. Open it later at chemiscope.org (the site reads the file inside your browser; nothing is uploaded), share it with a colleague, or put it in a paper's supplementary material.
The same datasets can be produced without the Studio:
meidnet space meidnet.yaml --chemiscope space.json # the design space of your configuration\n and from Python:
from meidnet.studio.chemiscope import space_dataset, candidates_dataset, records_dataset\n In the Colab notebooks, the show3d(...) helper displays structures inline with chemiscope.show.
chemiscope is a third-party library (BSD-3-Clause licence) by G. Fraux, R. K. Cersonsky and M. Ceriotti. If you use the 3D explorer in published work, please cite: G. Fraux, R. K. Cersonsky, M. Ceriotti, Chemiscope: interactive structure-property explorer for materials and molecules, Journal of Open Source Software 5, 2117 (2020).
"},{"location":"use/reports.html","title":"Reading the reports","text":"Each command writes a self-contained HTML file in runs/<name>/. All three open with a one-sentence verdict (green / amber / red), show the evidence, and end with what to do next.
check_report.html","text":"training_report.html","text":"generation_report.html","text":"candidates.csv and generation.json","text":"The CSV has one row per candidate with targets, predictions, elements, cell edge, every rule's value, score and file name. The JSON holds the full funnel counts, rejected examples and settings \u2014 everything the report shows.
"},{"location":"use/studio.html","title":"MEIDNet Studio \u2014 the live workbench","text":"meidnet studio # the published perovskite model\nmeidnet studio meidnet.yaml # your project\n A page opens in your browser. The workflow is drawn as a strip of seven coloured blocks; click a block to open it. Whatever you change, the blocks after it update at once, and a line under the strip says, in words, what the change did to each later block \u2014 the way a LabVIEW diagram shows data flowing after you turn a knob.
No installation? Use the hosted Studio \u2014 the same page, running on a shared server.
"},{"location":"use/studio.html#reading-the-workflow-strip","title":"Reading the workflow strip","text":"Each block has its own colour, used everywhere on the page (its panel, its charts, its chips in the flow chain):
Block Colour What it holds Data blue the table of materials the model learns from Model orange the trained network (published or yours) Family green the crystal prototype and the elements allowed on each site Rules amber the hard checks every candidate must pass Targets pink the property values you want Search dark green the latent search of the paper Candidates violet what the search foundDashed pink lines are always a target; a violet \u2605 is always something the search found; green \u2713 means passes.
"},{"location":"use/studio.html#the-flow-chain-and-the-flow-log","title":"The flow chain and the flow log","text":"Under the strip, the flow chain repeats the last change in words, block by block, for example:
Rules: Goldschmidt tolerance factor max 1.05 \u2192 1 \u279c Rules: pass all rules 27 \u2192 23 (\u22124) \u279c Targets: best match CsSnBr\u2083 \u2192 CsGeBr\u2083 \u279c Candidates: 1 of 3 found candidates would now be rejected
Click a step to open that block.
The Flow log below it keeps the last 60 changes. Click an entry to replay its flow on the strip.
"},{"location":"use/studio.html#what-is-live-and-how","title":"What is live, and how","text":"For a prototype family the set of possible compositions is finite (924 for halide perovskites, 10,340 for halide double perovskites). When you open a family the server builds this design space once: every composition on the prototype, the value of each rule's descriptor (tolerance factor, octahedral factor, \u2026) and the model's predicted properties from the structure encoder. From then on, the page can answer instantly:
You change You see immediately a rule's limit how many compositions still pass that rule and all rules; the histogram of the descriptor with the window shaded; the funnel an element (click a chip to exclude it) compositions removed, new counts, new best matches a target the compositions predicted closest; the target drawn on the predicted-property histogram and scatter; an extrapolation warning if it lies outside the training range the comparison kind (as close as possible / at most / at least) the ranking anything, after a search which of the found candidates would now be rejectedDescriptor values are computed by the same Python functions that meidnet generate uses, so what the page shows is what the search enforces.
The live tables use structure \u2192 property (encode the prototype structure, decode its properties): fast, and it scores every composition. The Search block runs the paper's property \u2192 structure latent optimisation and shows its progress (target, round, step, loss), the log, and each candidate as it is found, with its checklist. Both views are of the same network; comparing them tells you whether the search found what the encoder considers best, and whether the predictions agree.
"},{"location":"use/studio.html#the-blocks","title":"The blocks","text":"Each block, with what it shows. The animation is the same block in the tour of the landing page.
DataModelFamilyRulesTargetsSearchCandidatesHow many materials were usable, why rows were skipped, property distributions, the elements present; Bring your own data (below).
Properties, units, training ranges, validation errors, loss and alignment curves; Train your own model (below).
Prototype sites with a rotatable 3D preview of the cell, element chips per site group with their charges (click to exclude), cell-size rule.
Each rule with its explanation, parameters, pass count and descriptor histogram; add a predicted-property window rule; the funnel.
One card per objective: target value, comparison kind, weights; the predicted-property scatter of all compositions (coloured = passes, grey = rejected, \u2605 = found by the search). Click any point or table row for its checklist and its crystal in 3D.
Budget (candidates, latents per round, rounds, steps), a rough time estimate, Run/Stop, progress, log, link to the full report.
One card per candidate: a rotatable 3D cell, elements, gauges of predicted values against the targets, the rule checklist, warnings, CIF links.
Crystals are drawn by a small built-in viewer: drag to rotate, double-click to spin.
"},{"location":"use/studio.html#beginner-view-and-researcher-mode","title":"Beginner view and Researcher mode","text":"The page opens in the beginner view: every block has an Input \u279c Logic \u279c Output strip with live numbers (\"924 compositions \u279c 5 hard rules, applied in order \u279c 27 pass every rule\") and the name of the Python function that does the work, a short In short explanation, and a glossary in the side panel (composition, rule, target, latent space, extrapolation).
The Researcher mode switch in the header trades these for the technical view: the \u270e Edit as text YAML drawer, and a Behind the scenes panel in every block with the meidnet.yaml and the Python of that block. The choice is remembered by your browser.
At the bottom of every block, Behind the scenes shows the same settings as the part of meidnet.yaml they come from and as the Python that does the same thing \u2014 with the values currently on the page. Copy either into your own project; nothing on the page is hidden from the command line.
The Data block has an adapter: it maps your column names to what MEIDNet expects. Nothing in your files is changed.
.xlsx) or JSON, one row per material \u2014 with an id column, numeric property columns and the structures, either as a column of CIF text or as a zip of <id>.cif files (select both files together). Parquet works too when pyarrow is installed.A few epochs give a rough model in a minute or two; 100\u2013200 epochs are typical for real work \u2014 run meidnet train locally (with a GPU if you have one) and open the result with meidnet studio meidnet.yaml.
On the hosted Studio
Each browser tab has its own private session: other visitors never see your data, model or candidates, and a session's files are deleted after an hour without activity. The shared machine allows up to 1,500 rows and 8 MB per upload, 30 training epochs, 20 atoms per cell, and two jobs (training or search) at a time across all visitors; search budgets are capped too. Run the Studio on your own computer to lift every limit.
"},{"location":"use/studio.html#edit-the-configuration-as-text","title":"Edit the configuration as text","text":"\u270e Edit as text in the header opens a drawer with the generation section of meidnet.yaml exactly as the blocks have it: family, variant, excluded elements, rule overrides, extra rules, objectives, targets and search budget. Change anything and press Apply \u2014 the blocks update and the flow chain shows what changed in each.
steps: Input should be greater than or equal to 1.rounds 99 \u2192 6 (limit on this shared server).extra_constraints, so the file round-trips: apply it, download it, run it with meidnet generate.\u2b07 Download meidnet.yaml (also in the Search block) writes the whole configuration \u2014 rules switched off on the page are listed under disabled_rules, excluded elements become exclude_elements, changed limits become overrides \u2014 so the command line reproduces exactly what the page shows. Settings the blocks do not show (for example search terms set in your own meidnet.yaml) are kept as they are.
Buttons marked \ud83e\uddca open the 3D explorer: a map with one point per structure, linked to a 3D viewer \u2014 the design space of the family, the candidates of a search, or the training data. See Explore in 3D.
"},{"location":"use/studio.html#deep-links","title":"Deep links","text":"Add to the address to open the page at a given place:
Address ends with Opens?panel=rules the Rules block (any block: data, model, family, rules, targets, search, candidates) ?explore=space the 3D explorer on the design space (candidates or data work too) Both can be combined: ?panel=targets&explore=space.
The \ud83c\udf19 / \u2600\ufe0f button in the header switches between the light and the dark theme; your browser remembers the choice.
"},{"location":"use/studio.html#static-copy-for-a-website","title":"Static copy for a website","text":"meidnet studio --export-static docs/studio.html\n embeds the state and design spaces into one HTML file. Everything works without a server except uploading, training and running a new search \u2014 useful for a plain web host. The hosted Studio is the full server instead:
meidnet studio --public --host 0.0.0.0 --port 7860 --run-root /tmp/runs --docs-dir site\n --public gives every visitor a private session and caps the budgets so the shared machine stays responsive; --docs-dir also serves a built copy of this documentation at /docs/.
This page takes a table of structures and properties to designed candidates. Every step writes a report that explains what happened; nothing requires Python.
"},{"location":"use/your-data.html#0-install","title":"0. Install","text":"pip install meidnet\n"},{"location":"use/your-data.html#1-describe-your-data-meidnet-init","title":"1. Describe your data: meidnet init","text":"meidnet init --name my_oxides --table materials.csv \\\n --id-column material_id --cif-column cif \\\n --properties band_gap dielectric \\\n --family perovskite_abx3 --variant oxide\n This writes a commented meidnet.yaml. Open it: every line says what it does. If your CIFs are files instead of a column, set cif_column: null and structures_dir: structures/.
data:\n table: materials.csv\n id_column: material_id\n cif_column: cif\n properties:\n - {column: band_gap, unit: eV}\n - {column: dielectric, unit: \"\"}\n val_fraction: 0.1\n max_sites: 20\n align_to_prototype: true\n"},{"location":"use/your-data.html#2-is-it-usable-meidnet-check","title":"2. Is it usable? meidnet check","text":"meidnet check meidnet.yaml\n 412 of 430 materials usable.\n skipped 14 does not match the perovskite_abx3 prototype e.g. m_031, m_118, m_204\n skipped 4 missing property value e.g. m_077, m_300\nreport: runs/my_oxides/check_report.html\n The report shows the verdict, the distribution of each property, the elements present and, for each skip reason, how to fix it (for example raise data.prototype_tolerance for distorted cells).
meidnet train","text":"meidnet train meidnet.yaml # 200 epochs by default\nmeidnet train meidnet.yaml --epochs 5 # a quick smoke test first\n training_report.html answers three questions: how accurate is each property prediction (error vs natural spread \u2192 good / fair / weak), did the two modalities align (retrieval accuracy), and what were the training curves. The model is saved as runs/my_oxides/model.pt with the property names, units and normalisation inside; meidnet info runs/my_oxides/model.pt describes it.
Time
About 21 s per epoch per 11k structures on a laptop GPU; roughly 10\u00d7 slower on CPU. Use Colab's free GPU (notebook 02) if you have none.
"},{"location":"use/your-data.html#4-design-meidnet-generate","title":"4. Design:meidnet generate","text":"Set the targets in meidnet.yaml:
generation:\n family: perovskite_abx3\n variant: oxide\n objectives:\n - {property: band_gap, loss: l2, weight: 10000}\n - {property: dielectric, loss: at_least, weight: 5000}\n targets:\n - {band_gap: 2.0, dielectric: 20}\n - {band_gap: 3.0, dielectric: 20}\n per_target: 4\n exclude_elements: [Pb, Cd]\n meidnet generate meidnet.yaml\n generation_report.html shows, per target, the funnel (how many attempts each rule removed), one card per candidate (elements, cell, each rule's measured value and window, predicted vs target gauges, warnings about extrapolation) and examples of rejected compositions. CIFs and candidates.csv are in runs/my_oxides/generation/.
meidnet studio","text":"meidnet studio meidnet.yaml\n Change a rule's limit, exclude an element or move a target and see immediately how many compositions pass and which are predicted closest; run searches and export the YAML. Studio guide.
"},{"location":"use/your-data.html#6-confirm","title":"6. Confirm","text":"Predicted properties are estimates. meidnet screen runs/my_oxides/generation (MACE universal potential, optional extra) gives a first stability filter; DFT or experiment has the last word.
CSV, Excel (.xlsx) and JSON tables are read; Parquet too once pyarrow is installed
(pip install "meidnet[parquet]").
The published model used 11k structures. A few thousand is typical; a few hundred lets you try the pipeline, -but expect rough predictions (the training report tells you how rough).
+What the rows contain matters more than how many there are. Measured on the case studies of +MEIDNet Matter:
+| to do this | +what it needs | +measured | +
|---|---|---|
| predict a property from structure | +a well-posed property: continuous, few zero values, few materials sharing one property profile | +166 training structures read a band gap with r 0.97 and a 0.65 eV error (34 test structures); 897 with 35 % zero gaps fell short on telling metals from non-metals | +
| screen an enumerated family | +data that fit one family, and a property model that passes | +166 to 897 training structures | +
| generate | +one prototype, and hundreds of distinct compositions per element for the decoder | +Perov-5 generates; data with 11 to 48 compositions per element went to screening | +
A few hundred structures train a property model, not a generator: with 236 structures of 40 elements (11 compositions
+per element), the decoder rebuilt none of the test compositions, and every candidate came from screening. Count the rows
+that carry the property: Perov-5 is mostly metals, and 441 of the 11,356 structures of its training split have a
+non-zero band gap. meidnet check warns below 200 usable rows; the training report's note below 500 training materials
+is a rule of thumb. Scope, limitations and roadmap
These pages document the released package, meidnet 2.3.1. MEIDNet Matter, the applied companion, runs a development
+snapshot of the engine and states the measured limits of its five case studies on its
+Scope and limits page. What the rows contain matters more than how many there are. Measured on MEIDNet Matter's case studies: A few hundred structures train a property model, not a generator. The package's own checks: In the released package, meidnet 2.3.1, which these pages document: On the hosted Studio: up to 1,500 rows and 8 MB per upload, 30 training epochs, 20 atoms per cell
+(the Studio). Contributions of family files and rules are the easiest way to help; see the GitHub repository.meidnet check reads every row exactly as training would and writes check_report.html with one line per
reason a row was skipped (unreadable CIF, too many atoms, missing value, does not match the prototype) and
diff --git a/site/understand/how-it-works.html b/site/understand/how-it-works.html
index 7df6b4a049a3ab9cb90e1e13d3f43dc4fa1e307a..d64b72319c4ce3029d3c274a7beab338c526f173 100644
--- a/site/understand/how-it-works.html
+++ b/site/understand/how-it-works.html
@@ -700,7 +700,7 @@
- Scope and roadmap
+ Scope, limitations and roadmap
diff --git a/site/understand/interpretability.html b/site/understand/interpretability.html
index e381bccaf26bb1a7b13e6222304bbb718c38eaac..c5a97fb76ce92c0abc05b0a854b58c2a56a704c2 100644
--- a/site/understand/interpretability.html
+++ b/site/understand/interpretability.html
@@ -689,7 +689,7 @@
- Scope and roadmap
+ Scope, limitations and roadmap
diff --git a/site/understand/limits.html b/site/understand/limits.html
index 2f04830c31e843238ba8754932a0331b8fa4c242..f5150393a59d24f5eb8e41bdbff8fb67ebe23989 100644
--- a/site/understand/limits.html
+++ b/site/understand/limits.html
@@ -27,7 +27,7 @@
-
+
+
Scope and roadmap¶
+Scope, limitations and roadmap¶
+Limitations¶
+
+
+meidnet screen relaxes candidates with MACE-MP-0 and applies a
+ formation-energy filter (at most 0.10 eV/atom against the elemental phases): a first filter, not stability on the
+ convex hull (screening).a, b, c, alpha, beta, gamma); it is scaled from one edge with
+ its shape fixed, needs a model trained on structures of that prototype, and its rules must be written for it, since
+ the tolerance and octahedral factors are perovskite rules. No non-cubic family ships or has been tested, and the
+ hosted Studio takes the built-in families only.What a dataset needs¶
+
+
+
+
+
+
+
+to do this
+what it needs
+measured
+
+
+predict a property from structure
+a well-posed property: continuous, few zero values, few materials sharing one property profile
+166 training structures read a band gap with r 0.97 and a 0.65 eV error (34 test structures); 897 with 35 % zero gaps fell short on telling metals from non-metals
+
+
+screen an enumerated family
+data that fit one family, and a property model that passes
+166 to 897 training structures
+
+
+
+generate
+one prototype, and hundreds of distinct compositions per element for the decoder
+Perov-5 generates; data with 11 to 48 compositions per element went to screening
+meidnet check warns
+below 200 usable rows; the training report's note below 500 training materials is a rule of thumb, not a measurement;
+training needs at least batch_size materials (16 by default); the validation split is a random 10 %, and there is
+none below 10 rows. The published model cannot be fine-tuned on new properties yet, so a small dataset trains a model
+from scratch. What data do I need?Current capabilities¶
-
+
@@ -2204,15 +2312,17 @@
Not yet supported¶
max_sites can be raised, but memory and time grow with the square of it, and the
@@ -2226,6 +2336,7 @@
model.decoder_coordinate_input: prototype is the first step and is available as an experimental setting).