Babu09 commited on
Commit
4e01a0d
ยท
verified ยท
1 Parent(s): 05106e4

Deploy MEIDNet Studio

Browse files
This view is limited to 50 files because it contains too many changes. ย  See raw diff
Files changed (50) hide show
  1. README.md +7 -1
  2. meidnet/studio/landing.html +15 -9
  3. meidnet/studio/studio.html +7 -7
  4. site/404.html +3 -3
  5. site/assets/extra.css +4 -12
  6. site/assets/learn.js +38 -27
  7. site/benchmarks/carbon24.html +3 -3
  8. site/benchmarks/index.html +3 -3
  9. site/benchmarks/mp20.html +3 -3
  10. site/benchmarks/perov5.html +4 -4
  11. site/benchmarks/results/paper-inverse-design.html +3 -3
  12. site/benchmarks/results/paper-representation.html +3 -3
  13. site/benchmarks/results/paper-results-mace-screen.html +3 -3
  14. site/benchmarks/results/shipped-checkpoint-train-split.html +3 -3
  15. site/benchmarks/results/shipped-checkpoint-val-split.html +3 -3
  16. site/community/contribute.html +11 -11
  17. site/community/index.html +3 -3
  18. site/examples/double-perovskite.html +3 -3
  19. site/examples/perov5.html +3 -3
  20. site/explore/capabilities.html +10 -10
  21. site/explore/databases.html +3 -3
  22. site/explore/datasets.html +21 -23
  23. site/index.html +23 -17
  24. site/learn/architectures.html +30 -27
  25. site/learn/index.html +31 -24
  26. site/learn/recipes.html +52 -34
  27. site/recipes/add-constraint.html +3 -3
  28. site/recipes/add-property.html +3 -3
  29. site/recipes/change-family.html +3 -3
  30. site/recipes/change-targets.html +3 -3
  31. site/recipes/elements.html +3 -3
  32. site/recipes/screen.html +3 -3
  33. site/reference/api.html +3 -3
  34. site/reference/cli.html +3 -3
  35. site/reference/config.html +3 -3
  36. site/reference/families.html +3 -3
  37. site/reference/rules.html +3 -3
  38. site/research/paper.html +12 -3
  39. site/search/search_index.json +0 -0
  40. site/start/colab.html +3 -3
  41. site/start/quickstart.html +8 -8
  42. site/start/what-data.html +4 -4
  43. site/studio.html +7 -7
  44. site/understand/how-it-works.html +3 -3
  45. site/understand/interpretability.html +13 -13
  46. site/understand/limits.html +13 -13
  47. site/use/config.html +3 -3
  48. site/use/explore-3d.html +3 -3
  49. site/use/reports.html +3 -3
  50. site/use/studio.html +7 -7
README.md CHANGED
@@ -31,7 +31,7 @@ with the properties you want. Six connected layers:
31
  one for your data; [recipes by problem](https://babu09-meidnet.hf.space/docs/learn/recipes.html).
32
  * **[Build: Studio](https://babu09-meidnet.hf.space/studio/)** โ€” the live workbench: seven colour-coded blocks
33
  *Data โ†’ Model โ†’ Family โ†’ Rules โ†’ Targets โ†’ Search โ†’ Candidates*. Change a rule, exclude an element or
34
- move a target and watch the effect flow through the later blocks. Bring your own table (CSV / Excel /
35
  JSON + CIFs), train a model in the browser, run the search, inspect every candidate in 3D, export the
36
  `meidnet.yaml` that reproduces it on your machine.
37
  * **[Datasets](https://babu09-meidnet.hf.space/docs/explore/datasets.html)** โ€” datasets that work with
@@ -47,6 +47,12 @@ with the properties you want. Six connected layers:
47
  **Paper:** A. Babu, R. A. Gouvรชa, P. Vandergheynst, G.-M. Rignanese, *npj Computational Materials* (2026),
48
  [doi:10.1038/s41524-026-02153-3](https://doi.org/10.1038/s41524-026-02153-3).
49
 
 
 
 
 
 
 
50
  This public Space is shared: uploads are capped (8 MB, 1,500 rows, 30 epochs), one training at a time,
51
  sessions are private per browser tab and removed after an hour. Predicted properties are the model's
52
  estimates โ€” confirm candidates by DFT or experiment.
 
31
  one for your data; [recipes by problem](https://babu09-meidnet.hf.space/docs/learn/recipes.html).
32
  * **[Build: Studio](https://babu09-meidnet.hf.space/studio/)** โ€” the live workbench: seven colour-coded blocks
33
  *Data โ†’ Model โ†’ Family โ†’ Rules โ†’ Targets โ†’ Search โ†’ Candidates*. Change a rule, exclude an element or
34
+ move a target and see the effect on the later blocks. Bring your own table (CSV / Excel /
35
  JSON + CIFs), train a model in the browser, run the search, inspect every candidate in 3D, export the
36
  `meidnet.yaml` that reproduces it on your machine.
37
  * **[Datasets](https://babu09-meidnet.hf.space/docs/explore/datasets.html)** โ€” datasets that work with
 
47
  **Paper:** A. Babu, R. A. Gouvรชa, P. Vandergheynst, G.-M. Rignanese, *npj Computational Materials* (2026),
48
  [doi:10.1038/s41524-026-02153-3](https://doi.org/10.1038/s41524-026-02153-3).
49
 
50
+ **Further reading:** A. Babu, N. M. A. Krishnan, *Multimodal and cross-modal learning techniques*, APL Machine
51
+ Learning 4, 030901 (2026), [doi:10.1063/5.0346744](https://doi.org/10.1063/5.0346744) ยท A. Babu,
52
+ R. Almeida Gouvรชa, G.-M. Rignanese, *Toward automated discovery with generative models multimodal learning and
53
+ closed loop workflows in inverse materials design*, Cell Reports Physical Science 7, 103561 (2026),
54
+ [doi:10.1016/j.xcrp.2026.103561](https://doi.org/10.1016/j.xcrp.2026.103561).
55
+
56
  This public Space is shared: uploads are capped (8 MB, 1,500 rows, 30 epochs), one training at a time,
57
  sessions are private per browser tab and removed after an hour. Predicted properties are the model's
58
  estimates โ€” confirm candidates by DFT or experiment.
meidnet/studio/landing.html CHANGED
@@ -63,6 +63,7 @@ h2.sec{font-size:24px;margin:0 0 6px}.sec-sub{color:var(--muted);margin:0 0 14px
63
  .how small{display:block;font-weight:500;opacity:.9;font-size:12px}
64
  .cite{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;margin:0 0 28px}
65
  .cite pre{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px;overflow:auto;font-size:13px;margin:10px 0 0}
 
66
  .cite button{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:9px;padding:6px 12px;cursor:pointer}
67
  footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:16px;flex-wrap:wrap}
68
  .theme{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:9px;padding:5px 9px;cursor:pointer}
@@ -85,7 +86,7 @@ footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:
85
  <div>
86
  <p class="eyebrow">MEIDNet Prism</p>
87
  <h1>Learn, build and benchmark <span class="prism">multimodal AI</span> for materials discovery</h1>
88
- <p class="tag">From what a modality is to a trained model and a reproducible result. MEIDNet is the reference implementation: one space shared by crystal structures and their properties, searched for new materials with the properties you want.</p>
89
  <div class="btns"><a class="btn primary" href="/studio/">โ–ถ Try MEIDNet</a><a class="btn" href="/studio/?panel=data">Use your dataset</a><a class="btn" href="/docs/learn/index.html">Learn multimodality</a></div>
90
  <p class="pub"><b>Published in npj Computational Materials (2026)</b> ยท <a href="https://doi.org/10.1038/s41524-026-02153-3">doi 10.1038/s41524-026-02153-3</a> ยท <a href="https://github.com/ABnano/MEIDNet">GitHub</a> ยท MIT licence</p>
91
  </div>
@@ -104,7 +105,7 @@ footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:
104
  </figure>
105
 
106
  <h2 class="sec">Six connected layers</h2>
107
- <p class="sec-sub">Learn the ideas, pick a design, build it on your data, and show the evidence. Each layer links to the next.</p>
108
  <div class="flow" aria-label="The six layers in order">
109
  <a href="/docs/learn/index.html" style="--accent:var(--c-data)">Learn</a><span>โ†’</span>
110
  <a href="/docs/learn/architectures.html" style="--accent:var(--c-model)">Architectures</a><span>โ†’</span>
@@ -118,18 +119,18 @@ footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:
118
  <p><a class="more" href="/docs/learn/index.html">Learn multimodality โ†’</a></p></div>
119
  <div class="card" style="--accent:var(--c-model)"><h2><small>2 ยท Architectures</small>Which design fits my data?</h2><p>Early and late fusion, shared latent spaces, cross-attention and contrastive learning, drawn side by side, with an advisor that recommends one.</p>
120
  <p><a class="more" href="/docs/learn/architectures.html">Architecture Atlas โ†’</a> &nbsp; <a class="more" href="/docs/learn/architectures.html#advisor">Advisor โ†’</a></p></div>
121
- <div class="card" style="--accent:var(--c-family)"><h2><small>3 ยท Build</small>MEIDNet Studio</h2><p>Upload structures and properties, train in the browser, set targets and rules, run the search and inspect every candidate in 3D. No code; one YAML file.</p>
122
  <p><a class="more" href="/studio/">Try MEIDNet โ†’</a> &nbsp; <a class="more" href="/docs/learn/recipes.html">Recipes by problem โ†’</a></p></div>
123
- <div class="card" style="--accent:var(--c-rules)"><h2><small>4 ยท Datasets</small>Data that works</h2><p>Perov-5, the published multimodal benchmark, other datasets with their status, and 31 computed and experimental databases grouped by application.</p>
124
  <p><a class="more" href="/docs/explore/datasets.html">Datasets โ†’</a> &nbsp; <a class="more" href="/docs/explore/databases.html">Databases โ†’</a></p></div>
125
- <div class="card" style="--accent:var(--c-targets)"><h2><small>5 ยท Benchmarks</small>Results with evidence</h2><p>One leaderboard per dataset, an evidence ladder from โ€œgeneratedโ€ to โ€œexperimentally validatedโ€, and rows re-run here marked verified.</p>
126
  <p><a class="more" href="/docs/benchmarks/index.html">Benchmarks โ†’</a></p></div>
127
- <div class="card" style="--accent:var(--c-candidates)"><h2><small>6 ยท Community</small>Share and reproduce</h2><p>Submit a result through GitHub. The maintainer re-runs it and marks it verified when it reproduces; a run that does not agree is shown too.</p>
128
  <p><a class="more" href="/docs/community/contribute.html">Contribute a result โ†’</a></p></div>
129
  </section>
130
 
131
- <h2 class="sec">Inside Build: the MEIDNet Studio in seven blocks</h2>
132
- <p class="sec-sub">The reference implementation. Change one block and the blocks after it update.</p>
133
  <div class="how" aria-label="The seven blocks of the Studio">
134
  <div style="--bc:var(--c-data)">Data<small>your materials</small></div><div style="--bc:var(--c-model)">Model<small>shared space</small></div>
135
  <div style="--bc:var(--c-family)">Family<small>crystal type</small></div><div style="--bc:var(--c-rules)">Rules<small>chemistry</small></div>
@@ -153,8 +154,13 @@ footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:
153
  year = {2026},
154
  doi = {10.1038/s41524-026-02153-3}
155
  }</pre>
 
 
 
 
 
156
  </section>
157
- <footer><span>MEIDNet Prism: learn, build and benchmark multimodal AI for materials discovery. MEIDNet is its reference implementation.</span><a href="https://github.com/ABnano/MEIDNet">Code</a><a href="/docs/">Documentation</a><a href="/docs/understand/limits.html">Honest scope</a><a href="https://huggingface.co/spaces/Babu09/MEIDNet">Hugging Face Space</a></footer>
158
  </main>
159
  <script>
160
  (function(){
 
63
  .how small{display:block;font-weight:500;opacity:.9;font-size:12px}
64
  .cite{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px;margin:0 0 28px}
65
  .cite pre{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px;overflow:auto;font-size:13px;margin:10px 0 0}
66
+ .reading{margin:0;padding-left:18px;color:var(--muted);font-size:14.5px}.reading li{margin:4px 0}
67
  .cite button{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:9px;padding:6px 12px;cursor:pointer}
68
  footer{color:var(--faint);font-size:13.5px;padding:10px 0 40px;display:flex;gap:16px;flex-wrap:wrap}
69
  .theme{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:9px;padding:5px 9px;cursor:pointer}
 
86
  <div>
87
  <p class="eyebrow">MEIDNet Prism</p>
88
  <h1>Learn, build and benchmark <span class="prism">multimodal AI</span> for materials discovery</h1>
89
+ <p class="tag">From the concepts of multimodal learning to a trained model and reproducible results. MEIDNet, the reference implementation, learns one space shared by crystal structures and their properties, and searches it for materials with target properties.</p>
90
  <div class="btns"><a class="btn primary" href="/studio/">โ–ถ Try MEIDNet</a><a class="btn" href="/studio/?panel=data">Use your dataset</a><a class="btn" href="/docs/learn/index.html">Learn multimodality</a></div>
91
  <p class="pub"><b>Published in npj Computational Materials (2026)</b> ยท <a href="https://doi.org/10.1038/s41524-026-02153-3">doi 10.1038/s41524-026-02153-3</a> ยท <a href="https://github.com/ABnano/MEIDNet">GitHub</a> ยท MIT licence</p>
92
  </div>
 
105
  </figure>
106
 
107
  <h2 class="sec">Six connected layers</h2>
108
+ <p class="sec-sub">From concepts to reproducible results: the methods, the choice of architecture, a model trained on your data, and results compared on shared benchmarks.</p>
109
  <div class="flow" aria-label="The six layers in order">
110
  <a href="/docs/learn/index.html" style="--accent:var(--c-data)">Learn</a><span>โ†’</span>
111
  <a href="/docs/learn/architectures.html" style="--accent:var(--c-model)">Architectures</a><span>โ†’</span>
 
119
  <p><a class="more" href="/docs/learn/index.html">Learn multimodality โ†’</a></p></div>
120
  <div class="card" style="--accent:var(--c-model)"><h2><small>2 ยท Architectures</small>Which design fits my data?</h2><p>Early and late fusion, shared latent spaces, cross-attention and contrastive learning, drawn side by side, with an advisor that recommends one.</p>
121
  <p><a class="more" href="/docs/learn/architectures.html">Architecture Atlas โ†’</a> &nbsp; <a class="more" href="/docs/learn/architectures.html#advisor">Advisor โ†’</a></p></div>
122
+ <div class="card" style="--accent:var(--c-family)"><h2><small>3 ยท Build</small>MEIDNet Studio</h2><p>Upload structures and properties, train in the browser, set targets and rules, run the search and inspect every candidate in 3D. Every setting is saved in one YAML file.</p>
123
  <p><a class="more" href="/studio/">Try MEIDNet โ†’</a> &nbsp; <a class="more" href="/docs/learn/recipes.html">Recipes by problem โ†’</a></p></div>
124
+ <div class="card" style="--accent:var(--c-rules)"><h2><small>4 ยท Datasets</small>Datasets and databases</h2><p>Perov-5, the published multimodal benchmark, other datasets used with MEIDNet, and 31 computed and experimental databases grouped by application.</p>
125
  <p><a class="more" href="/docs/explore/datasets.html">Datasets โ†’</a> &nbsp; <a class="more" href="/docs/explore/databases.html">Databases โ†’</a></p></div>
126
+ <div class="card" style="--accent:var(--c-targets)"><h2><small>5 ยท Benchmarks</small>Reproducible results</h2><p>One leaderboard per dataset, an evidence ladder from โ€œgeneratedโ€ to โ€œexperimentally validatedโ€, and rows re-run here marked verified.</p>
127
  <p><a class="more" href="/docs/benchmarks/index.html">Benchmarks โ†’</a></p></div>
128
+ <div class="card" style="--accent:var(--c-candidates)"><h2><small>6 ยท Community</small>Contribute results</h2><p>Results are submitted through GitHub, re-run by the maintainer and marked as verified when they reproduce. Re-runs that disagree are published as well.</p>
129
  <p><a class="more" href="/docs/community/contribute.html">Contribute a result โ†’</a></p></div>
130
  </section>
131
 
132
+ <h2 class="sec">MEIDNet Studio: from data to candidates in seven blocks</h2>
133
+ <p class="sec-sub">A change in one block updates every block after it.</p>
134
  <div class="how" aria-label="The seven blocks of the Studio">
135
  <div style="--bc:var(--c-data)">Data<small>your materials</small></div><div style="--bc:var(--c-model)">Model<small>shared space</small></div>
136
  <div style="--bc:var(--c-family)">Family<small>crystal type</small></div><div style="--bc:var(--c-rules)">Rules<small>chemistry</small></div>
 
154
  year = {2026},
155
  doi = {10.1038/s41524-026-02153-3}
156
  }</pre>
157
+ <h3 style="margin:16px 0 4px;font-size:17px">Further reading</h3>
158
+ <ul class="reading">
159
+ <li>A. Babu and N. M. A. Krishnan, <i>Multimodal and cross-modal learning techniques</i>, APL Machine Learning <b>4</b>, 030901 (2026). <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a></li>
160
+ <li>A. Babu, R. Almeida Gouvรชa and G.-M. Rignanese, <i>Toward automated discovery with generative models multimodal learning and closed loop workflows in inverse materials design</i>, Cell Reports Physical Science <b>7</b>, 103561 (2026). <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a></li>
161
+ </ul>
162
  </section>
163
+ <footer><span>MEIDNet Prism: learn, build and benchmark multimodal AI for materials discovery. MEIDNet is its reference implementation.</span><a href="https://github.com/ABnano/MEIDNet">Code</a><a href="/docs/">Documentation</a><a href="/docs/understand/limits.html">Scope and roadmap</a><a href="https://huggingface.co/spaces/Babu09/MEIDNet">Hugging Face Space</a></footer>
164
  </main>
165
  <script>
166
  (function(){
meidnet/studio/studio.html CHANGED
@@ -198,7 +198,7 @@ body>div:empty:not([id]):not([class]){position:absolute;top:0;left:0;width:0;hei
198
  </div>
199
  </section>
200
  <div class="card strip"><div class="strip-scroll"><svg id="pipe" viewBox="0 0 1270 150" aria-label="MEIDNet workflow"></svg></div></div>
201
- <div class="chain" id="chain"><span class="lead">Change anything above or in a block โ€” what it does to the blocks after it appears here.</span></div>
202
  <details id="flowlog"><summary>Flow log (0)</summary><ol id="flowlog-list"></ol></details>
203
  <div class="cols">
204
  <div id="panel"><div class="card loading-card"><h2>Loading MEIDNet Studioโ€ฆ</h2><p class="muted">Fetching the model and every composition of the perovskite family. This takes a few seconds; on the hosted Studio the very first visit can take up to a minute while the server wakes up.</p><div class="prog"><i class="indeterminate"></i></div></div></div>
@@ -330,7 +330,7 @@ async function boot(){
330
  if(BLOCKS.some(b=>b.id===qs.get('panel'))) S.panel = qs.get('panel');
331
  await loadFamily();
332
  render();
333
- chainText(`Ready: ${nfmt(S.ev.rows.length)} compositions, ${nfmt(S.ev.alive.length)} pass every rule. Change anything โ€” its effect on every later block appears here.`);
334
  if(!STATIC) await resumeJobs();
335
  if(['space','candidates','data'].includes(qs.get('explore'))) openExplore(qs.get('explore'));
336
  api('/api/data').then(d=>{ S.data=d; S.dataOwn = !!(S.state.session && S.state.session.checked); statusAll(); updateEdges(); render(); }).catch(()=>{});
@@ -651,7 +651,7 @@ function render(){
651
  const b=BLOCKS.find(x=>x.id===S.panel); const n=BLOCKS.indexOf(b)+1;
652
  P.dataset.block=S.panel;
653
  P.innerHTML = `<div class="card"><div class="eyebrow">Block ${n} of 7 ยท ${esc(b.name)}</div><h2>${esc(b.name)}</h2><p class="purpose">${esc(b.purpose)}</p>
654
- <div class="plain beginner-only"><b>In plain words.</b> ${esc(b.plain)}</div>${ioStrip(S.panel)}${f?f():''}${behind(S.panel)}</div>`;
655
  document.querySelectorAll('.node').forEach(nd=>nd.classList.toggle('sel', nd.id==='node-'+S.panel));
656
  if(!S.ev && S.fam) recompute(null, null); else { statusAll(); updateEdges(); renderLive(); }
657
  renderLegend(); mountAll3d();
@@ -859,7 +859,7 @@ function trainBox(){
859
  <tr><td>typical error (MAE)</td>${Object.entries(p.val.mae).map(([k,v])=>`<td>${fmt(v)}${esc(unit(k))}</td>`).join('')}<td>${(100*p.val.retrieval_top1).toFixed(0)}%</td></tr>
860
  <tr><td>quality</td>${q.map(x=>`<td class="${x.css}">${x.word}</td>`).join('')}<td></td></tr></table>
861
  <p class="small muted beginner-only">The typical error is compared with how much each property varies in your data: under 25% of that spread is <b>good</b>, under 50% <b>fair</b>, otherwise <b>weak</b>. "Matched correctly" is how often a material's structure and its properties land closest to each other in the model's hidden space (higher is better). A few epochs give a rough model; more epochs or more data usually help.</p>`; }
862
- if(st.done&&!st.error) b+=`<div class="verdict good">โœ… Model ready โ€” the blocks below now use <b>your</b> model and properties.${st.report?` <a href="/files/${esc(st.report)}" target="_blank">training report</a> ยท <a href="/files/${esc(st.report.replace('training_report.html','model.pt'))}" download="model.pt">download model.pt</a>`:''}</div>`; }
863
  return b;
864
  }
865
  async function startTrain(){
@@ -912,13 +912,13 @@ function panelFamily(){
912
  b+=`<h3>Elements per site group <span class="muted small">(click to exclude / include)</span></h3>`;
913
  for(const [g,grp] of Object.entries(f.groups)){ b+=`<h4>${esc(g)} โ€” ${esc(grp.description)} ยท ${grp.slots.length} site${grp.slots.length>1?'s':''}</h4><div>`;
914
  for(const el of grp.sample){ const off=S.ui.exclude.has(el); const ox=(grp.oxidation_states[el]||[]).map(q=>(q>0?'+':'')+q).join('/'); b+=`<span class="chip ${off?'off':''}" onclick="toggleEl(${jsq(el)})" title="charges ${esc(ox)}"><span style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${CPK[el]||'#999'};border:1px solid var(--line);margin-right:5px;vertical-align:-1px"></span>${esc(el)}<small class="muted"> ${esc(ox)}</small></span>`; } b+='</div>'; }
915
- b+=`<div class="help beginner-only">Excluding an element removes every composition containing it โ€” watch the Family โ†’ Rules numbers change. To change which elements a family allows at all, copy <code>${esc(S.ui.family)}.yaml</code> and edit its <code>groups:</code>.</div>`;
916
  return b;
917
  }
918
 
919
  /* โ”€โ”€ Rules โ”€โ”€ */
920
  function panelRules(){
921
- const ev=S.ev||evaluateSpace(); let b=`<p class="muted small">Move a limit and watch the count change โ€” the search enforces exactly these windows.</p>`;
922
  for(const c of S.fam.constraints){ const key=ruleKey(c); const r=S.ui.rules[key]; const d=S.fam.space.rows.map(x=>x.d[key]).filter(Number.isFinite);
923
  b+=`<div class="rule ${r.enabled?'':'off'}"><div class="hd"><input type="checkbox" ${r.enabled?'checked':''} onchange="toggleRule(${jsq(key)},this.checked)"><b>${esc(ruleTitle(key))}</b><span class="muted small"><b style="color:var(--accent-text)">${nfmt(ev.perRule[key]??0)}</b> of ${nfmt(ev.rows.length)} pass</span></div><p class="small muted">${esc(ruleText(key))}</p>`;
924
  const num=Object.entries(r.params).filter(([k,v])=>typeof v==='number' && !['cutoff'].includes(k));
@@ -1004,7 +1004,7 @@ function renderLive(){
1004
  L.innerHTML=b;
1005
  }
1006
  function renderLegend(){ const beg=document.body.classList.contains('beginner');
1007
- $('legend').innerHTML = beg ? `<h4>Glossary</h4><dl class="gloss"><dt>Composition</dt><dd>one element per site of the prototype, e.g. CsPbBrโ‚ƒ.</dd><dt>Rule</dt><dd>a hard check with a measured value and an allowed window.</dd><dt>Target</dt><dd>a property value you want; the model predicts how close each composition gets.</dd><dt>Latent space</dt><dd>the hidden coordinates where structures and properties meet; the search moves through it.</dd><dt>Extrapolation</dt><dd>a target outside the training range โ€” predictions there are guesses.</dd></dl><p class="small muted">Switch on Researcher mode in the header for the configuration as text and the Python behind each block.</p>`
1008
  : `<h4>How to use</h4><ol class="small" style="padding-left:18px;margin:4px 0"><li><b>Family</b>: pick the crystal type; exclude elements.</li><li><b>Rules</b>: move limits; counts update live.</li><li><b>Targets</b>: set values; see the closest compositions.</li><li><b>Search</b> runs the latent optimisation; <b>Candidates</b> explains each result.</li><li><b>Data/Model</b>: upload your table, train, and design with your own properties.</li></ol>`; }
1009
 
1010
  /* โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• actions โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• */
 
198
  </div>
199
  </section>
200
  <div class="card strip"><div class="strip-scroll"><svg id="pipe" viewBox="0 0 1270 150" aria-label="MEIDNet workflow"></svg></div></div>
201
+ <div class="chain" id="chain"><span class="lead">Changes made above or in a block are listed here, with their effect on the blocks after it.</span></div>
202
  <details id="flowlog"><summary>Flow log (0)</summary><ol id="flowlog-list"></ol></details>
203
  <div class="cols">
204
  <div id="panel"><div class="card loading-card"><h2>Loading MEIDNet Studioโ€ฆ</h2><p class="muted">Fetching the model and every composition of the perovskite family. This takes a few seconds; on the hosted Studio the very first visit can take up to a minute while the server wakes up.</p><div class="prog"><i class="indeterminate"></i></div></div></div>
 
330
  if(BLOCKS.some(b=>b.id===qs.get('panel'))) S.panel = qs.get('panel');
331
  await loadFamily();
332
  render();
333
+ chainText(`Ready: ${nfmt(S.ev.rows.length)} compositions, ${nfmt(S.ev.alive.length)} pass every rule. Changes and their effect on the later blocks are listed here.`);
334
  if(!STATIC) await resumeJobs();
335
  if(['space','candidates','data'].includes(qs.get('explore'))) openExplore(qs.get('explore'));
336
  api('/api/data').then(d=>{ S.data=d; S.dataOwn = !!(S.state.session && S.state.session.checked); statusAll(); updateEdges(); render(); }).catch(()=>{});
 
651
  const b=BLOCKS.find(x=>x.id===S.panel); const n=BLOCKS.indexOf(b)+1;
652
  P.dataset.block=S.panel;
653
  P.innerHTML = `<div class="card"><div class="eyebrow">Block ${n} of 7 ยท ${esc(b.name)}</div><h2>${esc(b.name)}</h2><p class="purpose">${esc(b.purpose)}</p>
654
+ <div class="plain beginner-only"><b>In short.</b> ${esc(b.plain)}</div>${ioStrip(S.panel)}${f?f():''}${behind(S.panel)}</div>`;
655
  document.querySelectorAll('.node').forEach(nd=>nd.classList.toggle('sel', nd.id==='node-'+S.panel));
656
  if(!S.ev && S.fam) recompute(null, null); else { statusAll(); updateEdges(); renderLive(); }
657
  renderLegend(); mountAll3d();
 
859
  <tr><td>typical error (MAE)</td>${Object.entries(p.val.mae).map(([k,v])=>`<td>${fmt(v)}${esc(unit(k))}</td>`).join('')}<td>${(100*p.val.retrieval_top1).toFixed(0)}%</td></tr>
860
  <tr><td>quality</td>${q.map(x=>`<td class="${x.css}">${x.word}</td>`).join('')}<td></td></tr></table>
861
  <p class="small muted beginner-only">The typical error is compared with how much each property varies in your data: under 25% of that spread is <b>good</b>, under 50% <b>fair</b>, otherwise <b>weak</b>. "Matched correctly" is how often a material's structure and its properties land closest to each other in the model's hidden space (higher is better). A few epochs give a rough model; more epochs or more data usually help.</p>`; }
862
+ if(st.done&&!st.error) b+=`<div class="verdict good">Model ready. The blocks below now use <b>your</b> model and properties.${st.report?` <a href="/files/${esc(st.report)}" target="_blank">training report</a> ยท <a href="/files/${esc(st.report.replace('training_report.html','model.pt'))}" download="model.pt">download model.pt</a>`:''}</div>`; }
863
  return b;
864
  }
865
  async function startTrain(){
 
912
  b+=`<h3>Elements per site group <span class="muted small">(click to exclude / include)</span></h3>`;
913
  for(const [g,grp] of Object.entries(f.groups)){ b+=`<h4>${esc(g)} โ€” ${esc(grp.description)} ยท ${grp.slots.length} site${grp.slots.length>1?'s':''}</h4><div>`;
914
  for(const el of grp.sample){ const off=S.ui.exclude.has(el); const ox=(grp.oxidation_states[el]||[]).map(q=>(q>0?'+':'')+q).join('/'); b+=`<span class="chip ${off?'off':''}" onclick="toggleEl(${jsq(el)})" title="charges ${esc(ox)}"><span style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${CPK[el]||'#999'};border:1px solid var(--line);margin-right:5px;vertical-align:-1px"></span>${esc(el)}<small class="muted"> ${esc(ox)}</small></span>`; } b+='</div>'; }
915
+ b+=`<div class="help beginner-only">Excluding an element removes every composition that contains it; the Family and Rules counts update accordingly. To change which elements a family allows at all, copy <code>${esc(S.ui.family)}.yaml</code> and edit its <code>groups:</code>.</div>`;
916
  return b;
917
  }
918
 
919
  /* โ”€โ”€ Rules โ”€โ”€ */
920
  function panelRules(){
921
+ const ev=S.ev||evaluateSpace(); let b=`<p class="muted small">Moving a limit updates the count; the search applies exactly these windows.</p>`;
922
  for(const c of S.fam.constraints){ const key=ruleKey(c); const r=S.ui.rules[key]; const d=S.fam.space.rows.map(x=>x.d[key]).filter(Number.isFinite);
923
  b+=`<div class="rule ${r.enabled?'':'off'}"><div class="hd"><input type="checkbox" ${r.enabled?'checked':''} onchange="toggleRule(${jsq(key)},this.checked)"><b>${esc(ruleTitle(key))}</b><span class="muted small"><b style="color:var(--accent-text)">${nfmt(ev.perRule[key]??0)}</b> of ${nfmt(ev.rows.length)} pass</span></div><p class="small muted">${esc(ruleText(key))}</p>`;
924
  const num=Object.entries(r.params).filter(([k,v])=>typeof v==='number' && !['cutoff'].includes(k));
 
1004
  L.innerHTML=b;
1005
  }
1006
  function renderLegend(){ const beg=document.body.classList.contains('beginner');
1007
+ $('legend').innerHTML = beg ? `<h4>Glossary</h4><dl class="gloss"><dt>Composition</dt><dd>one element per site of the prototype, e.g. CsPbBrโ‚ƒ.</dd><dt>Rule</dt><dd>a hard check with a measured value and an allowed window.</dd><dt>Target</dt><dd>a property value you want; the model predicts how close each composition gets.</dd><dt>Latent space</dt><dd>the hidden coordinates where structures and properties meet; the search moves through it.</dd><dt>Extrapolation</dt><dd>a target outside the training range; predictions there are less reliable.</dd></dl><p class="small muted">Switch on Researcher mode in the header for the configuration as text and the Python behind each block.</p>`
1008
  : `<h4>How to use</h4><ol class="small" style="padding-left:18px;margin:4px 0"><li><b>Family</b>: pick the crystal type; exclude elements.</li><li><b>Rules</b>: move limits; counts update live.</li><li><b>Targets</b>: set values; see the closest compositions.</li><li><b>Search</b> runs the latent optimisation; <b>Candidates</b> explains each result.</li><li><b>Data/Model</b>: upload your table, train, and design with your own properties.</li></ol>`; }
1009
 
1010
  /* โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• actions โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• */
site/404.html CHANGED
@@ -686,7 +686,7 @@
686
  <span class="md-ellipsis">
687
 
688
 
689
- MEIDNet Studio (live workbench)
690
 
691
 
692
 
@@ -885,7 +885,7 @@
885
  <span class="md-ellipsis">
886
 
887
 
888
- Capabilities (what works today)
889
 
890
 
891
 
@@ -1594,7 +1594,7 @@
1594
  <span class="md-ellipsis">
1595
 
1596
 
1597
- Why you can trust (or not) a candidate
1598
 
1599
 
1600
 
 
686
  <span class="md-ellipsis">
687
 
688
 
689
+ MEIDNet Studio
690
 
691
 
692
 
 
885
  <span class="md-ellipsis">
886
 
887
 
888
+ Capabilities
889
 
890
 
891
 
 
1594
  <span class="md-ellipsis">
1595
 
1596
 
1597
+ Interpreting a candidate
1598
 
1599
 
1600
 
site/assets/extra.css CHANGED
@@ -38,18 +38,7 @@ th[role="columnheader"]:not(.no-sort):hover::after{visibility:visible;opacity:.3
38
  .bench-table td,.bench-table th{padding:.5em .6em;white-space:nowrap}
39
  .bench-table td:first-child{white-space:normal;min-width:14em}
40
 
41
- /* โ”€โ”€ Learn layer: status badges โ”€โ”€ */
42
- .mstatus{display:inline-block;border-radius:999px;padding:0 10px;font-size:.72rem;font-weight:700;border:1px solid;white-space:nowrap;line-height:1.7;vertical-align:middle}
43
- .mstatus.sup{color:#0a7d0a;border-color:#6fcf6f;background:rgba(10,125,10,.06)}
44
- .mstatus.core{color:#fff;background:linear-gradient(90deg,#4f46e5,#9333ea);border-color:transparent}
45
- .mstatus.part{color:#8a5d00;border-color:#eda100}
46
- .mstatus.inside{color:#1c5cab;border-color:#86b6ef}
47
- .mstatus.plan{color:#6b6a65;border-color:#b5b4ab;border-style:dashed}
48
- .mstatus.no{color:#a8261d;border-color:#f0a8a3}
49
- .mstatus.info{color:#4a3aa7;border-color:#b9b1ef}
50
- [data-md-color-scheme="slate"] .mstatus.sup{color:#6fcf6f}[data-md-color-scheme="slate"] .mstatus.part{color:#f0c35b}
51
- [data-md-color-scheme="slate"] .mstatus.inside{color:#86b6ef}[data-md-color-scheme="slate"] .mstatus.plan{color:#c3c2b7}
52
- [data-md-color-scheme="slate"] .mstatus.no{color:#f0a8a3}[data-md-color-scheme="slate"] .mstatus.info{color:#b9b1ef}
53
  .learn-steps ol{columns:2;column-gap:2em}@media(max-width:700px){.learn-steps ol{columns:1}}
54
 
55
  /* โ”€โ”€ Architecture Atlas cards and their diagrams โ”€โ”€ */
@@ -130,6 +119,9 @@ svg.ad{width:100%;height:auto;display:block;max-width:420px;margin:auto}
130
  .md-typeset .adv-card h4{margin:.5em 0 .3em;font-size:.95rem}
131
  .md-typeset .adv-card p,.md-typeset .adv-card li{font-size:.76rem}
132
  .adv-notes{color:var(--md-default-fg-color--light)}.adv-alt{color:var(--md-default-fg-color--light);font-style:italic}
 
 
 
133
  .md-typeset a.adv-btn{display:inline-block;border-radius:9px;padding:5px 12px;font-weight:700;text-decoration:none;border:1px solid var(--md-default-fg-color--lighter);margin:2px 6px 4px 0;font-size:.72rem}
134
  .md-typeset a.adv-btn.primary{background:#4f46e5;color:#fff;border-color:#4f46e5}
135
  .md-typeset a.adv-btn.primary:hover{background:#9333ea;border-color:#9333ea}
 
38
  .bench-table td,.bench-table th{padding:.5em .6em;white-space:nowrap}
39
  .bench-table td:first-child{white-space:normal;min-width:14em}
40
 
41
+ /* โ”€โ”€ Learn layer โ”€โ”€ */
 
 
 
 
 
 
 
 
 
 
 
42
  .learn-steps ol{columns:2;column-gap:2em}@media(max-width:700px){.learn-steps ol{columns:1}}
43
 
44
  /* โ”€โ”€ Architecture Atlas cards and their diagrams โ”€โ”€ */
 
119
  .md-typeset .adv-card h4{margin:.5em 0 .3em;font-size:.95rem}
120
  .md-typeset .adv-card p,.md-typeset .adv-card li{font-size:.76rem}
121
  .adv-notes{color:var(--md-default-fg-color--light)}.adv-alt{color:var(--md-default-fg-color--light);font-style:italic}
122
+ .adv-kicker{font-size:.62rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--md-default-fg-color--light);margin-top:2px}
123
+ .md-typeset .adv-card p.adv-where{border-top:1px solid var(--md-default-fg-color--lightest);padding-top:.5em}
124
+ .mm-legend .mm-legend-title{font-weight:700}
125
  .md-typeset a.adv-btn{display:inline-block;border-radius:9px;padding:5px 12px;font-weight:700;text-decoration:none;border:1px solid var(--md-default-fg-color--lighter);margin:2px 6px 4px 0;font-size:.72rem}
126
  .md-typeset a.adv-btn.primary{background:#4f46e5;color:#fff;border-color:#4f46e5}
127
  .md-typeset a.adv-btn.primary:hover{background:#9333ea;border-color:#9333ea}
site/assets/learn.js CHANGED
@@ -4,7 +4,7 @@
4
  "use strict";
5
  var STUDIO = "https://babu09-meidnet.hf.space/studio/";
6
  var STATUS = {
7
- sup: "Supported", part: "Partly", inside: "Inside the structure", plan: "Planned",
8
  };
9
 
10
  function h(tag, attrs, html) {
@@ -24,7 +24,7 @@
24
  ex: "Relaxed DFT structures (Materials Project, OQMD, JARVIS, Alexandria) and experimental ones (ICSD, COD). Perov-5 in MEIDNet.",
25
  enc: "Graph neural networks. MEIDNet uses an E(n)-equivariant graph network (EGNN), so rotating or translating the cell changes nothing; CGCNN is a widely used alternative.",
26
  combo: "With scalar properties (MEIDNet), with diffraction patterns (structure from a pattern), with text, with images.",
27
- meid: "Supported. Up to max_sites atoms per cell (default 20), any elements.",
28
  links: [["Datasets", "../explore/datasets.html"], ["Databases by application", "../explore/databases.html"]],
29
  refs: [["Satorras et al. 2021 (EGNN)", "https://arxiv.org/abs/2102.09844"], ["Xie and Grossman 2018 (CGCNN)", "https://doi.org/10.1103/PhysRevLett.120.145301"]] },
30
  { id: "properties", name: "Scalar properties", st: "sup",
@@ -32,7 +32,7 @@
32
  ex: "In Perov-5: direct band gap (dir_gap, eV) and formation enthalpy (heat_all, eV/atom). Any numeric column of your table.",
33
  enc: "A small fully connected network (MLP) over the vector of normalised values.",
34
  combo: "With structures (MEIDNet: design from target properties), with compositions, with spectra.",
35
- meid: "Supported. All scalar columns form one vector, read by one MLP; every column becomes a target you can set in the search.",
36
  links: [["Change the target properties", "../recipes/change-targets.html"], ["Add a property", "../recipes/add-property.html"]],
37
  refs: [["Babu et al. 2026 (MEIDNet)", "https://doi.org/10.1038/s41524-026-02153-3"]] },
38
  { id: "conditions", name: "Processing conditions", st: "part",
@@ -40,7 +40,7 @@
40
  ex: "Synthesis and processing tables of experimental groups; growth logs of thin films.",
41
  enc: "Numbers go into an MLP like properties; categories (atmosphere, method) as one-hot codes.",
42
  combo: "With composition (early fusion of features), with text (the same information written in a paper).",
43
- meid: "Partly. Numeric conditions can be added as extra scalar columns. They are then encoded together with the properties, and the model does not know that they are conditions rather than outcomes.",
44
  links: [["Add a property", "../recipes/add-property.html"]],
45
  refs: [["Baltruลกaitis et al. 2019", "https://doi.org/10.1109/TPAMI.2018.2798607"]] },
46
  { id: "composition", name: "Composition", st: "inside",
@@ -48,7 +48,7 @@
48
  ex: "Experimental property tables often give only formulas, for example experimental band gaps and several Matbench tasks.",
49
  enc: "Networks over the set of elements weighted by their fractions, such as Roost; element descriptors with tree models.",
50
  combo: "With processing conditions (early fusion), with structures when they are known.",
51
- meid: "Inside the structure. The element on each site is part of the structure, so MEIDNet sees the composition, but it cannot train on formulas alone. Formulas that sit on one prototype can be turned into structures on that prototype.",
52
  links: [["Recipe: formula only", "recipes.html#formula-only"]],
53
  refs: [["Goodall and Lee 2020 (Roost)", "https://doi.org/10.1038/s41467-020-19964-7"]] },
54
  { id: "text", name: "Text", st: "plan",
@@ -56,7 +56,7 @@
56
  ex: "Text-mined synthesis recipes: nearly 20,000 procedures extracted from the literature.",
57
  enc: "Language models: BERT-style encoders or embeddings of large language models.",
58
  combo: "With structures (contrastive alignment, like images and captions in CLIP), with processing conditions.",
59
- meid: "Planned: a text encoder into the shared space. Not implemented.",
60
  links: [["Recipe: synthesis text", "recipes.html#synthesis-text"]],
61
  refs: [["Kononova et al. 2019", "https://doi.org/10.1038/s41597-019-0224-1"], ["Moro, Loh et al. 2025", "https://doi.org/10.1016/j.newton.2025.100016"]] },
62
  { id: "images", name: "Microscopy images", st: "plan",
@@ -64,7 +64,7 @@
64
  ex: "Microscopy collections of experimental groups; usually small and rarely paired with structures.",
65
  enc: "2D convolutional networks or vision transformers.",
66
  combo: "With processing conditions (how the microstructure formed), with properties measured on the same sample.",
67
- meid: "Planned: an image encoder into the shared space. Not implemented.",
68
  links: [["Capabilities", "../explore/capabilities.html"]],
69
  refs: [["Guo et al. 2019", "https://doi.org/10.1109/ACCESS.2019.2916887"]] },
70
  { id: "spectra", name: "Spectra and DOS", st: "plan",
@@ -72,7 +72,7 @@
72
  ex: "Computed DOS in the Materials Project and JARVIS; measured spectra.",
73
  enc: "1D convolutional networks or transformers over the binned curve.",
74
  combo: "With structures (which sites shape which features), with properties (a band gap read from the DOS).",
75
- meid: "Planned: as vector modalities with an encoder each. Not implemented.",
76
  links: [["Scope and roadmap", "../understand/limits.html"]],
77
  refs: [["Tsai et al. 2019 (attention across sequences)", "https://doi.org/10.18653/v1/P19-1656"]] },
78
  { id: "xrd", name: "Diffraction (XRD)", st: "plan",
@@ -80,7 +80,7 @@
80
  ex: "Patterns simulated from any structure database (for example with pymatgen); measured powder patterns.",
81
  enc: "1D convolutional networks; transformers over peak lists.",
82
  combo: "With structures (identify a structure from its pattern), with compositions.",
83
- meid: "Planned: binned XRD as a vector modality, the first item of the roadmap. Not implemented.",
84
  links: [["Recipe: XRD to structure", "recipes.html#xrd-structure"]],
85
  refs: [["Park et al. 2017", "https://doi.org/10.1107/S205225251700714X"]] },
86
  ];
@@ -98,12 +98,12 @@
98
  };
99
 
100
  function detailHtml(m) {
101
- return '<h4>' + m.name + ' <span class="mstatus ' + m.st + '">' + STATUS[m.st] + "</span></h4>" +
102
  '<table class="mm-facts"><tr><th>What it is</th><td>' + m.what + "</td></tr>" +
103
  "<tr><th>Examples</th><td>" + m.ex + "</td></tr>" +
104
  "<tr><th>Networks that read it</th><td>" + m.enc + "</td></tr>" +
105
  "<tr><th>Combined with</th><td>" + m.combo + "</td></tr>" +
106
- "<tr><th>In MEIDNet</th><td>" + m.meid + "</td></tr>" +
107
  "<tr><th>Go further</th><td>" + links(m.links) + "</td></tr>" +
108
  "<tr><th>References</th><td>" + links(m.refs) + "</td></tr></table>";
109
  }
@@ -134,8 +134,8 @@
134
  '<text class="st" x="' + pos[i][0].toFixed(1) + '" y="' + (pos[i][1] + 14).toFixed(1) + '" text-anchor="middle">' + STATUS[m.st] + "</text></g>");
135
  });
136
  svg.push("</svg>");
137
- var legend = '<div class="mm-legend"><span><i class="sw sup"></i>Supported in MEIDNet</span><span><i class="sw part"></i>Partly</span>' +
138
- '<span><i class="sw inside"></i>Inside the structure</span><span><i class="sw plan"></i>Planned</span></div>';
139
  var list = '<div class="mm-list" role="group" aria-label="Modalities"><button type="button" data-id="core" class="core-btn">Shared representation</button>' +
140
  MODS.map(function (m) { return '<button type="button" data-id="' + m.id + '" class="' + m.st + '">' + m.name + "<small>" + STATUS[m.st] + "</small></button>"; }).join("") + "</div>";
141
  root.innerHTML = legend + svg.join("") + list + '<div class="mm-detail" aria-live="polite"></div>';
@@ -225,7 +225,12 @@
225
  var GOALS = [["design", "Design new materials from target properties"], ["predict", "Predict properties"],
226
  ["retrieve", "Find materials that match a profile, across modalities"], ["identify", "Identify a structure or phase from a measurement"],
227
  ["combine", "Combine all my data into one prediction"]];
228
- var LABEL = { sup: "Supported in MEIDNet", part: "Partly in MEIDNet", plan: "Planned in MEIDNet", no: "Not in MEIDNet: use another tool", info: "First step" };
 
 
 
 
 
229
  var EXTRA_NAMES = { xrd: "diffraction patterns", spectra: "spectra", images: "images", text: "text" };
230
 
231
  function advise(has, goal) {
@@ -240,11 +245,11 @@
240
  var extra = ["xrd", "spectra", "images", "text"].filter(function (k) { return has[k]; }).map(function (k) { return EXTRA_NAMES[k]; });
241
  var n = Object.keys(has).filter(function (k) { return has[k]; }).length;
242
  function meidnetNotes() {
243
- if (extra.length) notes.push("MEIDNet uses structures and scalar properties today. Your " + extra.join(", ") +
244
- " would each need an encoder of their own, which is planned; train on the structures and properties now.");
245
- if (K) notes.push("Processing conditions can be added as extra scalar columns. They are encoded with the properties, and the model does not know they are conditions rather than outcomes.");
246
  }
247
- if (!n) return { st: "info", title: "Tick the data you have", why: "The recommendation depends on which modalities describe your materials." };
248
 
249
  if (goal === "design") {
250
  if (S && P) {
@@ -260,6 +265,7 @@
260
  }
261
  if (P && C && !S) return { st: "no", arch: "early-fusion", title: "A composition model in a screening loop, or structures built on a prototype",
262
  why: "MEIDNet needs a structure for every row. If all your formulas sit on one prototype (for example ABXโ‚ƒ), build those structures on the prototype and use MEIDNet. Otherwise train a composition model such as Roost and use it to screen candidate formulas.",
 
263
  links: [["Recipe: formula only", "recipes.html#formula-only", 1], ["Roost (Goodall and Lee 2020)", "https://doi.org/10.1038/s41467-020-19964-7"]] };
264
  if (S && !P) return { st: "info", arch: "shared-latent", title: "First add property values to your structures",
265
  why: "Design from properties needs examples of structures with their property values. Compute them (DFT) or take them from a database, then train the shared space.",
@@ -268,27 +274,29 @@
268
  why: "The same design as MEIDNet, with an encoder suited to your modality in place of the structure encoder. Design then returns " + extra.join(" or ") + " rather than structures, which is useful only if those can be turned into materials.",
269
  links: [["Shared latent space", "#shared-latent", 1], ["Scope and roadmap", "../understand/limits.html"]] };
270
  return { st: "info", title: "Add a description of each material besides its properties",
271
- why: "Design needs to output something you can make: structures (MEIDNet) or at least formulas. Tick crystal structures or formulas.",
272
  links: [["Datasets", "../explore/datasets.html", 1]] };
273
  }
274
 
275
  if (goal === "predict") {
276
  if (!P) return { st: "info", title: "Add the property values you want to predict",
277
- why: "A model learns to predict a property from examples where the property is known. Tick scalar properties if you have them.",
278
  links: [["Databases by application", "../explore/databases.html", 1]] };
279
  if (S) {
280
  if (extra.length) notes.push("To add your " + extra.join(", ") + ", join one encoder per modality in a shared space (intermediate fusion), or use late fusion if some materials lack them.");
281
  return { st: "sup", arch: "shared-latent", title: "A graph network on the structure (MEIDNet's structure encoder does this)",
282
  why: "For structure to property alone, a single-modality graph network such as CGCNN is the simplest strong choice. MEIDNet's structure encoder does the same and scores every composition of a family instantly, and it adds the reverse direction if you later want to design.",
 
283
  links: [["Recipe: screen a family", "recipes.html#screen-family", 1], ["Open the Studio", STUDIO], ["CGCNN (Xie and Grossman 2018)", "https://doi.org/10.1103/PhysRevLett.120.145301"]] };
284
  }
285
  if (C && !extra.length) return { st: "no", arch: K ? "early-fusion" : null, title: "A composition network such as Roost" + (K ? ", with the conditions joined by early fusion" : ""),
286
  why: "Without structures, the formula is the description. Roost learns from the formula alone; numeric conditions can be concatenated to its features.",
 
287
  links: [["Recipe: formula only", "recipes.html#formula-only", 1], ["Roost (Goodall and Lee 2020)", "https://doi.org/10.1038/s41467-020-19964-7"]] };
288
  if (extra.length === 1 && !C && !K) {
289
  var one = { "diffraction patterns": "a 1D convolutional network on the binned pattern", spectra: "a 1D convolutional network on the binned spectrum",
290
  images: "a 2D convolutional network or a vision transformer", text: "a fine-tuned language model" }[extra[0]];
291
- return { st: "no", title: "One modality: " + one, why: "With a single input modality, a network suited to its shape is the right start. Multimodal designs help once a second modality is paired with it.",
292
  links: [["Modalities and their networks", "index.html#what-is-a-modality", 1]] };
293
  }
294
  return { st: "no", arch: "late-fusion", title: "Late fusion, or early fusion if every material has every modality",
@@ -310,32 +318,33 @@
310
  why: "The same loss that pairs pictures with captions pairs your " + extra.join(" and ") + " with structures, given enough pairs. MEIDNet plans these encoders; they are not implemented.",
311
  links: [["Contrastive learning", "#contrastive", 1], ["Recipe: synthesis text", "recipes.html#synthesis-text"]] };
312
  return { st: "info", title: "Retrieval needs pairs of two modalities",
313
- why: "Tick at least two modalities that describe the same materials, for example crystal structures and scalar properties." };
314
  }
315
 
316
  if (goal === "identify") {
317
  if (X || Sp) {
318
  if (S) notes.push("With structures as well, a contrastive model can retrieve the matching structure instead of a class label; simulate the patterns from the structures to get as many pairs as you need.");
319
  return { st: "plan", arch: "contrastive", title: "A 1D convolutional classifier on the pattern; contrastive retrieval as the multimodal version",
320
- why: "A pattern or spectrum is a fingerprint. A classifier needs labels (crystal system, space group, phase); a contrastive pattern-structure model needs only pairs. In MEIDNet the pattern encoder is planned.",
 
321
  links: [["Recipe: XRD to structure", "recipes.html#xrd-structure", 1], ["Park et al. 2017", "https://doi.org/10.1107/S205225251700714X"]] };
322
  }
323
  if (I) return { st: "no", title: "An image classifier: a convolutional network or a vision transformer",
324
  why: "Phases and microstructures can be classified from micrographs given labelled examples. This is a single-modality task outside MEIDNet.",
325
  links: [["Microscopy images on the map", "index.html#the-multimodality-map", 1]] };
326
  return { st: "info", title: "Identification starts from a measurement",
327
- why: "Tick diffraction patterns, spectra or images: the measurement you want to identify a structure or phase from." };
328
  }
329
 
330
  // combine
331
- if (n < 2) return { st: "info", title: "Combining needs at least two modalities", why: "Tick every kind of data you have for the same materials." };
332
  var tabular = ["structure", "xrd", "spectra", "images", "text"].every(function (k) { return !has[k]; });
333
  notes.push("If some materials lack a modality, late fusion (one model per modality, predictions averaged) is the robust choice.");
334
  if (tabular) return { st: "no", arch: "early-fusion", title: "Early fusion: concatenate the features into one model",
335
  why: "Properties, formulas and conditions all become fixed-length numbers, so concatenating them is a strong and cheap baseline.",
336
  links: [["Early fusion", "#early-fusion", 1], ["Late fusion", "#late-fusion"]] };
337
  if (T || (n >= 3 && (X || Sp || I))) return { st: "no", arch: "cross-attention", title: "Cross-attention fusion, with a shared latent space as the cheaper start",
338
- why: "Text, spectra or images next to structures have parts that interact in detail; attention learns which parts matter to which. It needs much data. A shared latent space (one encoder per modality, aligned and averaged) is the cheaper first step.",
339
  links: [["Cross-attention", "#cross-attention", 1], ["Shared latent space", "#shared-latent"]] };
340
  return { st: S && P && !extra.length ? "part" : "no", arch: "shared-latent", title: "Intermediate fusion: one encoder per modality into a shared space, then a prediction head",
341
  why: "Modalities of different shapes each get the encoder that suits them, and their latents are joined. MEIDNet does this for structures and scalar properties (aligned, then averaged); a separate prediction head for another quantity is not part of it.",
@@ -343,11 +352,13 @@
343
  }
344
 
345
  function renderAdvice(r, notes) {
346
- var b = '<div class="adv-card ' + r.st + '"><span class="mstatus ' + r.st + '">' + LABEL[r.st] + "</span><h4>" + r.title + "</h4>" +
347
  "<p><b>Why.</b> " + r.why + "</p>";
348
  if (r.steps) b += "<ol>" + r.steps.map(function (s) { return "<li>" + s + "</li>"; }).join("") + "</ol>";
349
  if (notes.length) b += '<ul class="adv-notes">' + notes.map(function (s) { return "<li>" + s + "</li>"; }).join("") + "</ul>";
350
  if (r.alt) b += '<p class="adv-alt">' + r.alt + "</p>";
 
 
351
  var ls = (r.links || []).slice();
352
  if (r.arch && !ls.some(function (l) { return l[1] === "#" + r.arch; })) ls.push(["This architecture in the Atlas", "#" + r.arch]);
353
  if (ls.length) b += '<p class="adv-links">' + ls.map(function (l) {
 
4
  "use strict";
5
  var STUDIO = "https://babu09-meidnet.hf.space/studio/";
6
  var STATUS = {
7
+ sup: "Available", part: "Partial", inside: "Via the structure", plan: "Planned",
8
  };
9
 
10
  function h(tag, attrs, html) {
 
24
  ex: "Relaxed DFT structures (Materials Project, OQMD, JARVIS, Alexandria) and experimental ones (ICSD, COD). Perov-5 in MEIDNet.",
25
  enc: "Graph neural networks. MEIDNet uses an E(n)-equivariant graph network (EGNN), so rotating or translating the cell changes nothing; CGCNN is a widely used alternative.",
26
  combo: "With scalar properties (MEIDNet), with diffraction patterns (structure from a pattern), with text, with images.",
27
+ meid: "Available: up to max_sites atoms per cell (default 20), any elements.",
28
  links: [["Datasets", "../explore/datasets.html"], ["Databases by application", "../explore/databases.html"]],
29
  refs: [["Satorras et al. 2021 (EGNN)", "https://arxiv.org/abs/2102.09844"], ["Xie and Grossman 2018 (CGCNN)", "https://doi.org/10.1103/PhysRevLett.120.145301"]] },
30
  { id: "properties", name: "Scalar properties", st: "sup",
 
32
  ex: "In Perov-5: direct band gap (dir_gap, eV) and formation enthalpy (heat_all, eV/atom). Any numeric column of your table.",
33
  enc: "A small fully connected network (MLP) over the vector of normalised values.",
34
  combo: "With structures (MEIDNet: design from target properties), with compositions, with spectra.",
35
+ meid: "Available: all scalar columns form one vector, read by one MLP; every column becomes a target that can be set in the search.",
36
  links: [["Change the target properties", "../recipes/change-targets.html"], ["Add a property", "../recipes/add-property.html"]],
37
  refs: [["Babu et al. 2026 (MEIDNet)", "https://doi.org/10.1038/s41524-026-02153-3"]] },
38
  { id: "conditions", name: "Processing conditions", st: "part",
 
40
  ex: "Synthesis and processing tables of experimental groups; growth logs of thin films.",
41
  enc: "Numbers go into an MLP like properties; categories (atmosphere, method) as one-hot codes.",
42
  combo: "With composition (early fusion of features), with text (the same information written in a paper).",
43
+ meid: "Partial: numeric conditions can be added as extra scalar columns. They are encoded together with the properties, so the model does not distinguish conditions from outcomes.",
44
  links: [["Add a property", "../recipes/add-property.html"]],
45
  refs: [["Baltruลกaitis et al. 2019", "https://doi.org/10.1109/TPAMI.2018.2798607"]] },
46
  { id: "composition", name: "Composition", st: "inside",
 
48
  ex: "Experimental property tables often give only formulas, for example experimental band gaps and several Matbench tasks.",
49
  enc: "Networks over the set of elements weighted by their fractions, such as Roost; element descriptors with tree models.",
50
  combo: "With processing conditions (early fusion), with structures when they are known.",
51
+ meid: "Via the structure: the element on each site is part of the structure, so the composition is encoded, but formulas alone cannot be used for training. Formulas that sit on one prototype can be turned into structures on that prototype.",
52
  links: [["Recipe: formula only", "recipes.html#formula-only"]],
53
  refs: [["Goodall and Lee 2020 (Roost)", "https://doi.org/10.1038/s41467-020-19964-7"]] },
54
  { id: "text", name: "Text", st: "plan",
 
56
  ex: "Text-mined synthesis recipes: nearly 20,000 procedures extracted from the literature.",
57
  enc: "Language models: BERT-style encoders or embeddings of large language models.",
58
  combo: "With structures (contrastive alignment, like images and captions in CLIP), with processing conditions.",
59
+ meid: "Planned: a text encoder that maps into the shared space; not yet available.",
60
  links: [["Recipe: synthesis text", "recipes.html#synthesis-text"]],
61
  refs: [["Kononova et al. 2019", "https://doi.org/10.1038/s41597-019-0224-1"], ["Moro, Loh et al. 2025", "https://doi.org/10.1016/j.newton.2025.100016"]] },
62
  { id: "images", name: "Microscopy images", st: "plan",
 
64
  ex: "Microscopy collections of experimental groups; usually small and rarely paired with structures.",
65
  enc: "2D convolutional networks or vision transformers.",
66
  combo: "With processing conditions (how the microstructure formed), with properties measured on the same sample.",
67
+ meid: "Planned: an image encoder that maps into the shared space; not yet available.",
68
  links: [["Capabilities", "../explore/capabilities.html"]],
69
  refs: [["Guo et al. 2019", "https://doi.org/10.1109/ACCESS.2019.2916887"]] },
70
  { id: "spectra", name: "Spectra and DOS", st: "plan",
 
72
  ex: "Computed DOS in the Materials Project and JARVIS; measured spectra.",
73
  enc: "1D convolutional networks or transformers over the binned curve.",
74
  combo: "With structures (which sites shape which features), with properties (a band gap read from the DOS).",
75
+ meid: "Planned: vector modalities with one encoder each; not yet available.",
76
  links: [["Scope and roadmap", "../understand/limits.html"]],
77
  refs: [["Tsai et al. 2019 (attention across sequences)", "https://doi.org/10.18653/v1/P19-1656"]] },
78
  { id: "xrd", name: "Diffraction (XRD)", st: "plan",
 
80
  ex: "Patterns simulated from any structure database (for example with pymatgen); measured powder patterns.",
81
  enc: "1D convolutional networks; transformers over peak lists.",
82
  combo: "With structures (identify a structure from its pattern), with compositions.",
83
+ meid: "Planned: binned XRD patterns as a vector modality, the first item of the roadmap; not yet available.",
84
  links: [["Recipe: XRD to structure", "recipes.html#xrd-structure"]],
85
  refs: [["Park et al. 2017", "https://doi.org/10.1107/S205225251700714X"]] },
86
  ];
 
98
  };
99
 
100
  function detailHtml(m) {
101
+ return "<h4>" + m.name + "</h4>" +
102
  '<table class="mm-facts"><tr><th>What it is</th><td>' + m.what + "</td></tr>" +
103
  "<tr><th>Examples</th><td>" + m.ex + "</td></tr>" +
104
  "<tr><th>Networks that read it</th><td>" + m.enc + "</td></tr>" +
105
  "<tr><th>Combined with</th><td>" + m.combo + "</td></tr>" +
106
+ "<tr><th>MEIDNet</th><td>" + m.meid + "</td></tr>" +
107
  "<tr><th>Go further</th><td>" + links(m.links) + "</td></tr>" +
108
  "<tr><th>References</th><td>" + links(m.refs) + "</td></tr></table>";
109
  }
 
134
  '<text class="st" x="' + pos[i][0].toFixed(1) + '" y="' + (pos[i][1] + 14).toFixed(1) + '" text-anchor="middle">' + STATUS[m.st] + "</text></g>");
135
  });
136
  svg.push("</svg>");
137
+ var legend = '<div class="mm-legend"><span class="mm-legend-title">MEIDNet:</span><span><i class="sw sup"></i>available</span>' +
138
+ '<span><i class="sw part"></i>partial</span><span><i class="sw inside"></i>via the structure</span><span><i class="sw plan"></i>planned</span></div>';
139
  var list = '<div class="mm-list" role="group" aria-label="Modalities"><button type="button" data-id="core" class="core-btn">Shared representation</button>' +
140
  MODS.map(function (m) { return '<button type="button" data-id="' + m.id + '" class="' + m.st + '">' + m.name + "<small>" + STATUS[m.st] + "</small></button>"; }).join("") + "</div>";
141
  root.innerHTML = legend + svg.join("") + list + '<div class="mm-detail" aria-live="polite"></div>';
 
225
  var GOALS = [["design", "Design new materials from target properties"], ["predict", "Predict properties"],
226
  ["retrieve", "Find materials that match a profile, across modalities"], ["identify", "Identify a structure or phase from a measurement"],
227
  ["combine", "Combine all my data into one prediction"]];
228
+ var WHERE = {
229
+ sup: "MEIDNet: the Studio, or the meidnet command line.",
230
+ part: "MEIDNet provides the structure and property encoders and their fusion; a prediction head for another quantity is not included.",
231
+ plan: "Planned for MEIDNet and not yet available; the single-modality models named above can be used today.",
232
+ no: "Outside the scope of MEIDNet; the models named above are the usual choice.",
233
+ };
234
  var EXTRA_NAMES = { xrd: "diffraction patterns", spectra: "spectra", images: "images", text: "text" };
235
 
236
  function advise(has, goal) {
 
245
  var extra = ["xrd", "spectra", "images", "text"].filter(function (k) { return has[k]; }).map(function (k) { return EXTRA_NAMES[k]; });
246
  var n = Object.keys(has).filter(function (k) { return has[k]; }).length;
247
  function meidnetNotes() {
248
+ if (extra.length) notes.push("MEIDNet currently uses crystal structures and scalar properties. The " + extra.join(", ") +
249
+ " would each need a dedicated encoder, which is planned; the structures and properties can be used now.");
250
+ if (K) notes.push("Processing conditions can be added as extra scalar columns. They are encoded with the properties, so the model does not distinguish conditions from outcomes.");
251
  }
252
+ if (!n) return { st: "info", title: "Select the data you have", why: "The recommendation depends on which modalities describe your materials." };
253
 
254
  if (goal === "design") {
255
  if (S && P) {
 
265
  }
266
  if (P && C && !S) return { st: "no", arch: "early-fusion", title: "A composition model in a screening loop, or structures built on a prototype",
267
  why: "MEIDNet needs a structure for every row. If all your formulas sit on one prototype (for example ABXโ‚ƒ), build those structures on the prototype and use MEIDNet. Otherwise train a composition model such as Roost and use it to screen candidate formulas.",
268
+ where: "Roost or another composition model; MEIDNet requires a crystal structure for each material.",
269
  links: [["Recipe: formula only", "recipes.html#formula-only", 1], ["Roost (Goodall and Lee 2020)", "https://doi.org/10.1038/s41467-020-19964-7"]] };
270
  if (S && !P) return { st: "info", arch: "shared-latent", title: "First add property values to your structures",
271
  why: "Design from properties needs examples of structures with their property values. Compute them (DFT) or take them from a database, then train the shared space.",
 
274
  why: "The same design as MEIDNet, with an encoder suited to your modality in place of the structure encoder. Design then returns " + extra.join(" or ") + " rather than structures, which is useful only if those can be turned into materials.",
275
  links: [["Shared latent space", "#shared-latent", 1], ["Scope and roadmap", "../understand/limits.html"]] };
276
  return { st: "info", title: "Add a description of each material besides its properties",
277
+ why: "Design needs to output something that can be made: structures (MEIDNet) or at least formulas. Select crystal structures or formulas.",
278
  links: [["Datasets", "../explore/datasets.html", 1]] };
279
  }
280
 
281
  if (goal === "predict") {
282
  if (!P) return { st: "info", title: "Add the property values you want to predict",
283
+ why: "A model learns to predict a property from examples where the property is known. Select scalar properties if you have them.",
284
  links: [["Databases by application", "../explore/databases.html", 1]] };
285
  if (S) {
286
  if (extra.length) notes.push("To add your " + extra.join(", ") + ", join one encoder per modality in a shared space (intermediate fusion), or use late fusion if some materials lack them.");
287
  return { st: "sup", arch: "shared-latent", title: "A graph network on the structure (MEIDNet's structure encoder does this)",
288
  why: "For structure to property alone, a single-modality graph network such as CGCNN is the simplest strong choice. MEIDNet's structure encoder does the same and scores every composition of a family instantly, and it adds the reverse direction if you later want to design.",
289
+ where: "MEIDNet's structure encoder (the Studio or meidnet space), or a graph network such as CGCNN.",
290
  links: [["Recipe: screen a family", "recipes.html#screen-family", 1], ["Open the Studio", STUDIO], ["CGCNN (Xie and Grossman 2018)", "https://doi.org/10.1103/PhysRevLett.120.145301"]] };
291
  }
292
  if (C && !extra.length) return { st: "no", arch: K ? "early-fusion" : null, title: "A composition network such as Roost" + (K ? ", with the conditions joined by early fusion" : ""),
293
  why: "Without structures, the formula is the description. Roost learns from the formula alone; numeric conditions can be concatenated to its features.",
294
+ where: "Roost or another composition model; MEIDNet requires a crystal structure for each material.",
295
  links: [["Recipe: formula only", "recipes.html#formula-only", 1], ["Roost (Goodall and Lee 2020)", "https://doi.org/10.1038/s41467-020-19964-7"]] };
296
  if (extra.length === 1 && !C && !K) {
297
  var one = { "diffraction patterns": "a 1D convolutional network on the binned pattern", spectra: "a 1D convolutional network on the binned spectrum",
298
  images: "a 2D convolutional network or a vision transformer", text: "a fine-tuned language model" }[extra[0]];
299
+ return { st: "no", title: "One modality: " + one, why: "With a single input modality, a network suited to its shape is the natural starting point. Multimodal designs become useful once a second modality is paired with it.",
300
  links: [["Modalities and their networks", "index.html#what-is-a-modality", 1]] };
301
  }
302
  return { st: "no", arch: "late-fusion", title: "Late fusion, or early fusion if every material has every modality",
 
318
  why: "The same loss that pairs pictures with captions pairs your " + extra.join(" and ") + " with structures, given enough pairs. MEIDNet plans these encoders; they are not implemented.",
319
  links: [["Contrastive learning", "#contrastive", 1], ["Recipe: synthesis text", "recipes.html#synthesis-text"]] };
320
  return { st: "info", title: "Retrieval needs pairs of two modalities",
321
+ why: "Select at least two modalities that describe the same materials, for example crystal structures and scalar properties." };
322
  }
323
 
324
  if (goal === "identify") {
325
  if (X || Sp) {
326
  if (S) notes.push("With structures as well, a contrastive model can retrieve the matching structure instead of a class label; simulate the patterns from the structures to get as many pairs as you need.");
327
  return { st: "plan", arch: "contrastive", title: "A 1D convolutional classifier on the pattern; contrastive retrieval as the multimodal version",
328
+ why: "A pattern or spectrum is a fingerprint. A classifier needs labels (crystal system, space group, phase); a contrastive pattern-structure model needs only pairs.",
329
+ where: "1D convolutional classifiers can be used today; the contrastive version needs the pattern encoder planned for MEIDNet.",
330
  links: [["Recipe: XRD to structure", "recipes.html#xrd-structure", 1], ["Park et al. 2017", "https://doi.org/10.1107/S205225251700714X"]] };
331
  }
332
  if (I) return { st: "no", title: "An image classifier: a convolutional network or a vision transformer",
333
  why: "Phases and microstructures can be classified from micrographs given labelled examples. This is a single-modality task outside MEIDNet.",
334
  links: [["Microscopy images on the map", "index.html#the-multimodality-map", 1]] };
335
  return { st: "info", title: "Identification starts from a measurement",
336
+ why: "Select diffraction patterns, spectra or images: the measurement to identify a structure or phase from." };
337
  }
338
 
339
  // combine
340
+ if (n < 2) return { st: "info", title: "Combining needs at least two modalities", why: "Select every kind of data available for the same materials." };
341
  var tabular = ["structure", "xrd", "spectra", "images", "text"].every(function (k) { return !has[k]; });
342
  notes.push("If some materials lack a modality, late fusion (one model per modality, predictions averaged) is the robust choice.");
343
  if (tabular) return { st: "no", arch: "early-fusion", title: "Early fusion: concatenate the features into one model",
344
  why: "Properties, formulas and conditions all become fixed-length numbers, so concatenating them is a strong and cheap baseline.",
345
  links: [["Early fusion", "#early-fusion", 1], ["Late fusion", "#late-fusion"]] };
346
  if (T || (n >= 3 && (X || Sp || I))) return { st: "no", arch: "cross-attention", title: "Cross-attention fusion, with a shared latent space as the cheaper start",
347
+ why: "Text, spectra or images next to structures have parts that interact in detail; attention learns which parts matter to which. It needs much data. A shared latent space (one encoder per modality, aligned and averaged) is a less expensive first step.",
348
  links: [["Cross-attention", "#cross-attention", 1], ["Shared latent space", "#shared-latent"]] };
349
  return { st: S && P && !extra.length ? "part" : "no", arch: "shared-latent", title: "Intermediate fusion: one encoder per modality into a shared space, then a prediction head",
350
  why: "Modalities of different shapes each get the encoder that suits them, and their latents are joined. MEIDNet does this for structures and scalar properties (aligned, then averaged); a separate prediction head for another quantity is not part of it.",
 
352
  }
353
 
354
  function renderAdvice(r, notes) {
355
+ var b = '<div class="adv-card ' + r.st + '"><div class="adv-kicker">' + (r.st === "info" ? "Next step" : "Recommendation") + "</div><h4>" + r.title + "</h4>" +
356
  "<p><b>Why.</b> " + r.why + "</p>";
357
  if (r.steps) b += "<ol>" + r.steps.map(function (s) { return "<li>" + s + "</li>"; }).join("") + "</ol>";
358
  if (notes.length) b += '<ul class="adv-notes">' + notes.map(function (s) { return "<li>" + s + "</li>"; }).join("") + "</ul>";
359
  if (r.alt) b += '<p class="adv-alt">' + r.alt + "</p>";
360
+ var where = r.where || WHERE[r.st];
361
+ if (where) b += '<p class="adv-where"><b>Where to run it.</b> ' + where + "</p>";
362
  var ls = (r.links || []).slice();
363
  if (r.arch && !ls.some(function (l) { return l[1] === "#" + r.arch; })) ls.push(["This architecture in the Atlas", "#" + r.arch]);
364
  if (ls.length) b += '<p class="adv-links">' + ls.map(function (l) {
site/benchmarks/carbon24.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/benchmarks/index.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
site/benchmarks/mp20.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/benchmarks/perov5.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
@@ -2370,7 +2370,7 @@ evidence level (generated โ†’ ML filtered โ†’ MLIP validated โ†’ DFT validated
2370
  <li>Best <code>mae_dir_gap</code>: <strong>Shipped checkpoint re-evaluated on the training split (this code)</strong> (2.78 eV), meidnet verified.</li>
2371
  <li>Best <code>r2_dir_gap</code>: <strong>Shipped checkpoint re-evaluated on the training split (this code)</strong> (-29.8), meidnet verified.</li>
2372
  <li>Evidence levels present: generated, MLIP validated, DFT validated. 2 of 5 rows have been reproduced here.</li>
2373
- <li>2 row(s) are quoted from the paper; a verified re-run of the same checkpoint, where it exists, is the row to trust for the exact numbers of this code version.</li>
2374
  <li><strong>A re-run of <a href="results/paper-representation.html">MEIDNet (paper): alignment of structure and property latents on Perov-5</a> here did not agree</strong> (<code>cosine_matched</code> 0.97 โ†’ 0.771; <code>l2_matched</code> 0.24 โ†’ 0.676). The row keeps its status; see its page for the full comparison.</li>
2375
  </ul>
2376
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
 
2370
  <li>Best <code>mae_dir_gap</code>: <strong>Shipped checkpoint re-evaluated on the training split (this code)</strong> (2.78 eV), meidnet verified.</li>
2371
  <li>Best <code>r2_dir_gap</code>: <strong>Shipped checkpoint re-evaluated on the training split (this code)</strong> (-29.8), meidnet verified.</li>
2372
  <li>Evidence levels present: generated, MLIP validated, DFT validated. 2 of 5 rows have been reproduced here.</li>
2373
+ <li>2 row(s) are quoted from the paper; a verified re-run of the same checkpoint, where it exists, gives the exact numbers for this code version.</li>
2374
  <li><strong>A re-run of <a href="results/paper-representation.html">MEIDNet (paper): alignment of structure and property latents on Perov-5</a> here did not agree</strong> (<code>cosine_matched</code> 0.97 โ†’ 0.771; <code>l2_matched</code> 0.24 โ†’ 0.676). The row keeps its status; see its page for the full comparison.</li>
2375
  </ul>
2376
 
site/benchmarks/results/paper-inverse-design.html CHANGED
@@ -693,7 +693,7 @@
693
  <span class="md-ellipsis">
694
 
695
 
696
- MEIDNet Studio (live workbench)
697
 
698
 
699
 
@@ -892,7 +892,7 @@
892
  <span class="md-ellipsis">
893
 
894
 
895
- Capabilities (what works today)
896
 
897
 
898
 
@@ -1601,7 +1601,7 @@
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
- Why you can trust (or not) a candidate
1605
 
1606
 
1607
 
 
693
  <span class="md-ellipsis">
694
 
695
 
696
+ MEIDNet Studio
697
 
698
 
699
 
 
892
  <span class="md-ellipsis">
893
 
894
 
895
+ Capabilities
896
 
897
 
898
 
 
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
+ Interpreting a candidate
1605
 
1606
 
1607
 
site/benchmarks/results/paper-representation.html CHANGED
@@ -693,7 +693,7 @@
693
  <span class="md-ellipsis">
694
 
695
 
696
- MEIDNet Studio (live workbench)
697
 
698
 
699
 
@@ -892,7 +892,7 @@
892
  <span class="md-ellipsis">
893
 
894
 
895
- Capabilities (what works today)
896
 
897
 
898
 
@@ -1601,7 +1601,7 @@
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
- Why you can trust (or not) a candidate
1605
 
1606
 
1607
 
 
693
  <span class="md-ellipsis">
694
 
695
 
696
+ MEIDNet Studio
697
 
698
 
699
 
 
892
  <span class="md-ellipsis">
893
 
894
 
895
+ Capabilities
896
 
897
 
898
 
 
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
+ Interpreting a candidate
1605
 
1606
 
1607
 
site/benchmarks/results/paper-results-mace-screen.html CHANGED
@@ -693,7 +693,7 @@
693
  <span class="md-ellipsis">
694
 
695
 
696
- MEIDNet Studio (live workbench)
697
 
698
 
699
 
@@ -892,7 +892,7 @@
892
  <span class="md-ellipsis">
893
 
894
 
895
- Capabilities (what works today)
896
 
897
 
898
 
@@ -1601,7 +1601,7 @@
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
- Why you can trust (or not) a candidate
1605
 
1606
 
1607
 
 
693
  <span class="md-ellipsis">
694
 
695
 
696
+ MEIDNet Studio
697
 
698
 
699
 
 
892
  <span class="md-ellipsis">
893
 
894
 
895
+ Capabilities
896
 
897
 
898
 
 
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
+ Interpreting a candidate
1605
 
1606
 
1607
 
site/benchmarks/results/shipped-checkpoint-train-split.html CHANGED
@@ -693,7 +693,7 @@
693
  <span class="md-ellipsis">
694
 
695
 
696
- MEIDNet Studio (live workbench)
697
 
698
 
699
 
@@ -892,7 +892,7 @@
892
  <span class="md-ellipsis">
893
 
894
 
895
- Capabilities (what works today)
896
 
897
 
898
 
@@ -1601,7 +1601,7 @@
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
- Why you can trust (or not) a candidate
1605
 
1606
 
1607
 
 
693
  <span class="md-ellipsis">
694
 
695
 
696
+ MEIDNet Studio
697
 
698
 
699
 
 
892
  <span class="md-ellipsis">
893
 
894
 
895
+ Capabilities
896
 
897
 
898
 
 
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
+ Interpreting a candidate
1605
 
1606
 
1607
 
site/benchmarks/results/shipped-checkpoint-val-split.html CHANGED
@@ -693,7 +693,7 @@
693
  <span class="md-ellipsis">
694
 
695
 
696
- MEIDNet Studio (live workbench)
697
 
698
 
699
 
@@ -892,7 +892,7 @@
892
  <span class="md-ellipsis">
893
 
894
 
895
- Capabilities (what works today)
896
 
897
 
898
 
@@ -1601,7 +1601,7 @@
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
- Why you can trust (or not) a candidate
1605
 
1606
 
1607
 
 
693
  <span class="md-ellipsis">
694
 
695
 
696
+ MEIDNet Studio
697
 
698
 
699
 
 
892
  <span class="md-ellipsis">
893
 
894
 
895
+ Capabilities
896
 
897
 
898
 
 
1601
  <span class="md-ellipsis">
1602
 
1603
 
1604
+ Interpreting a candidate
1605
 
1606
 
1607
 
site/community/contribute.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1225,10 +1225,10 @@
1225
  </li>
1226
 
1227
  <li class="md-nav__item">
1228
- <a href="#the-five-things-people-get-wrong" class="md-nav__link">
1229
  <span class="md-ellipsis">
1230
 
1231
- The five things people get wrong
1232
 
1233
  </span>
1234
  </a>
@@ -1692,7 +1692,7 @@
1692
  <span class="md-ellipsis">
1693
 
1694
 
1695
- Why you can trust (or not) a candidate
1696
 
1697
 
1698
 
@@ -2121,10 +2121,10 @@
2121
  </li>
2122
 
2123
  <li class="md-nav__item">
2124
- <a href="#the-five-things-people-get-wrong" class="md-nav__link">
2125
  <span class="md-ellipsis">
2126
 
2127
- The five things people get wrong
2128
 
2129
  </span>
2130
  </a>
@@ -2215,7 +2215,7 @@ version:</p>
2215
  </tr>
2216
  </tbody>
2217
  </table>
2218
- <h2 id="the-five-things-people-get-wrong">The five things people get wrong<a class="headerlink" href="#the-five-things-people-get-wrong" title="Permanent link">&para;</a></h2>
2219
  <ol>
2220
  <li><strong>Mixing categories</strong> in one file. A representation result (MAE, Rยฒ, retrieval) and a design result (SUN rate)
2221
  are two files.</li>
@@ -2236,12 +2236,12 @@ version:</p>
2236
  </ol>
2237
  <p><strong>Verified</strong> means <em>reproduced from the submitted configuration with this code</em>. It does not mean the material is
2238
  real: that is what the validation level says. A re-run that does <strong>not</strong> agree is kept too
2239
- (<code>benchmarks/verified/&lt;id&gt;.attempt.json</code>) and shown on the row's page next to the submitted numbers, so that a
2240
- disagreement is visible rather than silent โ€” this applies to the paper's own rows as much as to anyone else's.</p>
2241
  <p>Representation rows that are reproduced here also get their per-material predictions saved
2242
  (<code>benchmarks/verified/&lt;id&gt;.predictions.csv</code>), which the pages turn into parity plots and a latent-agreement histogram.</p>
2243
  <p>If you prefer not to open a pull request, the issue template <em>Benchmark submission</em> asks for the same fields and the
2244
- maintainer converts it. Submissions are reviewed by the author of MEIDNet; there is no promised response time.</p>
2245
 
2246
 
2247
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1225
  </li>
1226
 
1227
  <li class="md-nav__item">
1228
+ <a href="#common-mistakes" class="md-nav__link">
1229
  <span class="md-ellipsis">
1230
 
1231
+ Common mistakes
1232
 
1233
  </span>
1234
  </a>
 
1692
  <span class="md-ellipsis">
1693
 
1694
 
1695
+ Interpreting a candidate
1696
 
1697
 
1698
 
 
2121
  </li>
2122
 
2123
  <li class="md-nav__item">
2124
+ <a href="#common-mistakes" class="md-nav__link">
2125
  <span class="md-ellipsis">
2126
 
2127
+ Common mistakes
2128
 
2129
  </span>
2130
  </a>
 
2215
  </tr>
2216
  </tbody>
2217
  </table>
2218
+ <h2 id="common-mistakes">Common mistakes<a class="headerlink" href="#common-mistakes" title="Permanent link">&para;</a></h2>
2219
  <ol>
2220
  <li><strong>Mixing categories</strong> in one file. A representation result (MAE, Rยฒ, retrieval) and a design result (SUN rate)
2221
  are two files.</li>
 
2236
  </ol>
2237
  <p><strong>Verified</strong> means <em>reproduced from the submitted configuration with this code</em>. It does not mean the material is
2238
  real: that is what the validation level says. A re-run that does <strong>not</strong> agree is kept too
2239
+ (<code>benchmarks/verified/&lt;id&gt;.attempt.json</code>) and shown on the row's page next to the submitted numbers, so that
2240
+ disagreements are visible. This applies to the paper's own rows as well.</p>
2241
  <p>Representation rows that are reproduced here also get their per-material predictions saved
2242
  (<code>benchmarks/verified/&lt;id&gt;.predictions.csv</code>), which the pages turn into parity plots and a latent-agreement histogram.</p>
2243
  <p>If you prefer not to open a pull request, the issue template <em>Benchmark submission</em> asks for the same fields and the
2244
+ maintainer converts it. Submissions are reviewed by the author of MEIDNet.</p>
2245
 
2246
 
2247
 
site/community/index.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/examples/double-perovskite.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1612,7 +1612,7 @@
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
- Why you can trust (or not) a candidate
1616
 
1617
 
1618
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
+ Interpreting a candidate
1616
 
1617
 
1618
 
site/examples/perov5.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1612,7 +1612,7 @@
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
- Why you can trust (or not) a candidate
1616
 
1617
 
1618
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
+ Interpreting a candidate
1616
 
1617
 
1618
 
site/explore/capabilities.html CHANGED
@@ -27,7 +27,7 @@
27
 
28
 
29
 
30
- <title>Capabilities (what works today) - MEIDNet Prism</title>
31
 
32
 
33
 
@@ -80,7 +80,7 @@
80
  <div data-md-component="skip">
81
 
82
 
83
- <a href="#capabilities-what-works-today" class="md-skip">
84
  Skip to content
85
  </a>
86
 
@@ -113,7 +113,7 @@
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
- Capabilities (what works today)
117
 
118
  </span>
119
  </div>
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -912,7 +912,7 @@
912
  <span class="md-ellipsis">
913
 
914
 
915
- Capabilities (what works today)
916
 
917
 
918
 
@@ -930,7 +930,7 @@
930
  <span class="md-ellipsis">
931
 
932
 
933
- Capabilities (what works today)
934
 
935
 
936
 
@@ -1736,7 +1736,7 @@
1736
  <span class="md-ellipsis">
1737
 
1738
 
1739
- Why you can trust (or not) a candidate
1740
 
1741
 
1742
 
@@ -2250,8 +2250,8 @@
2250
 
2251
 
2252
 
2253
- <h1 id="capabilities-what-works-today">Capabilities: what works today<a class="headerlink" href="#capabilities-what-works-today" title="Permanent link">&para;</a></h1>
2254
- <p>Generated from the code, so it cannot promise more than the code does. <strong>Supported</strong> = in this release; <strong>Community-tested</strong> = a benchmark result reproduced here names it; <strong>Planned</strong> = designed for, not implemented (<a href="../understand/limits.html">roadmap</a>).</p>
2255
  <h2 id="modalities">Modalities<a class="headerlink" href="#modalities" title="Permanent link">&para;</a></h2>
2256
  <table>
2257
  <thead>
@@ -2300,7 +2300,7 @@
2300
  </tbody>
2301
  </table>
2302
  <h2 id="fusion">Fusion<a class="headerlink" href="#fusion" title="Permanent link">&para;</a></h2>
2303
- <p>One scheme: <strong>early fusion</strong> - the structure latent and the property latent of a material are averaged into the joint latent (<code>meidnet/model.py</code>), after a contrastive alignment whose weight ramps up over <code>training.contrastive_warmup_epochs</code> (the curriculum of the paper). There is no late-fusion option; a selector would be a fiction.</p>
2304
  <h2 id="input-formats">Input formats<a class="headerlink" href="#input-formats" title="Permanent link">&para;</a></h2>
2305
  <table>
2306
  <thead>
 
27
 
28
 
29
 
30
+ <title>Capabilities - MEIDNet Prism</title>
31
 
32
 
33
 
 
80
  <div data-md-component="skip">
81
 
82
 
83
+ <a href="#capabilities" class="md-skip">
84
  Skip to content
85
  </a>
86
 
 
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
+ Capabilities
117
 
118
  </span>
119
  </div>
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
912
  <span class="md-ellipsis">
913
 
914
 
915
+ Capabilities
916
 
917
 
918
 
 
930
  <span class="md-ellipsis">
931
 
932
 
933
+ Capabilities
934
 
935
 
936
 
 
1736
  <span class="md-ellipsis">
1737
 
1738
 
1739
+ Interpreting a candidate
1740
 
1741
 
1742
 
 
2250
 
2251
 
2252
 
2253
+ <h1 id="capabilities">Capabilities<a class="headerlink" href="#capabilities" title="Permanent link">&para;</a></h1>
2254
+ <p>This page is generated from the code. <strong>Available</strong>: in this release. <strong>Community-tested</strong>: used by a benchmark result reproduced here. <strong>Planned</strong>: on the <a href="../understand/limits.html">roadmap</a>, not yet implemented.</p>
2255
  <h2 id="modalities">Modalities<a class="headerlink" href="#modalities" title="Permanent link">&para;</a></h2>
2256
  <table>
2257
  <thead>
 
2300
  </tbody>
2301
  </table>
2302
  <h2 id="fusion">Fusion<a class="headerlink" href="#fusion" title="Permanent link">&para;</a></h2>
2303
+ <p>The structure latent and the property latent of a material are averaged into the joint latent (<code>meidnet/model.py</code>); the paper calls this early fusion. The two latents are first aligned by a contrastive loss whose weight increases over <code>training.contrastive_warmup_epochs</code> (the curriculum of the paper). Other fusion schemes are compared in the <a href="../learn/architectures.html">Architecture Atlas</a>.</p>
2304
  <h2 id="input-formats">Input formats<a class="headerlink" href="#input-formats" title="Permanent link">&para;</a></h2>
2305
  <table>
2306
  <thead>
site/explore/databases.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -1071,7 +1071,7 @@
1071
  <span class="md-ellipsis">
1072
 
1073
 
1074
- Capabilities (what works today)
1075
 
1076
 
1077
 
@@ -1780,7 +1780,7 @@
1780
  <span class="md-ellipsis">
1781
 
1782
 
1783
- Why you can trust (or not) a candidate
1784
 
1785
 
1786
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
1071
  <span class="md-ellipsis">
1072
 
1073
 
1074
+ Capabilities
1075
 
1076
 
1077
 
 
1780
  <span class="md-ellipsis">
1781
 
1782
 
1783
+ Interpreting a candidate
1784
 
1785
 
1786
 
site/explore/datasets.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -911,10 +911,10 @@
911
  </li>
912
 
913
  <li class="md-nav__item">
914
- <a href="#datasets-we-would-like-to-see-benchmarked" class="md-nav__link">
915
  <span class="md-ellipsis">
916
 
917
- Datasets we would like to see benchmarked
918
 
919
  </span>
920
  </a>
@@ -972,7 +972,7 @@
972
  <span class="md-ellipsis">
973
 
974
 
975
- Capabilities (what works today)
976
 
977
 
978
 
@@ -1681,7 +1681,7 @@
1681
  <span class="md-ellipsis">
1682
 
1683
 
1684
- Why you can trust (or not) a candidate
1685
 
1686
 
1687
 
@@ -2110,10 +2110,10 @@
2110
  </li>
2111
 
2112
  <li class="md-nav__item">
2113
- <a href="#datasets-we-would-like-to-see-benchmarked" class="md-nav__link">
2114
  <span class="md-ellipsis">
2115
 
2116
- Datasets we would like to see benchmarked
2117
 
2118
  </span>
2119
  </a>
@@ -2141,9 +2141,8 @@
2141
 
2142
 
2143
  <h1 id="datasets">Datasets<a class="headerlink" href="#datasets" title="Permanent link">&para;</a></h1>
2144
- <p>Datasets that work with MEIDNet, and what has been done with each. <strong>One card per dataset, never one score
2145
- across datasets</strong>: the tasks, sizes and properties differ, so results are only compared within a dataset
2146
- (see <a href="../benchmarks/index.html">Benchmarks</a>).</p>
2147
  <table>
2148
  <thead>
2149
  <tr>
@@ -2151,7 +2150,7 @@ across datasets</strong>: the tasks, sizes and properties differ, so results are
2151
  <th>structures</th>
2152
  <th>properties used</th>
2153
  <th>size</th>
2154
- <th>with MEIDNet</th>
2155
  </tr>
2156
  </thead>
2157
  <tbody>
@@ -2160,35 +2159,35 @@ across datasets</strong>: the tasks, sizes and properties differ, so results are
2160
  <td>cubic ABXโ‚ƒ perovskites, 5 atoms per cell</td>
2161
  <td>direct band gap, formation enthalpy</td>
2162
  <td>18,928</td>
2163
- <td><span class="mstatus sup">trained model, configuration, tutorial, benchmark</span></td>
2164
  </tr>
2165
  <tr>
2166
  <td><a href="#mp-20">MP-20</a></td>
2167
  <td>Materials Project, up to 20 atoms</td>
2168
  <td>none aligned in the paper</td>
2169
  <td>about 45,000</td>
2170
- <td><span class="mstatus plan">structure representation, published</span></td>
2171
  </tr>
2172
  <tr>
2173
  <td><a href="#carbon-24">Carbon-24</a></td>
2174
  <td>carbon allotropes, up to 24 atoms</td>
2175
  <td>none aligned in the paper</td>
2176
  <td>about 10,000</td>
2177
- <td><span class="mstatus plan">structure representation, published</span></td>
2178
  </tr>
2179
  <tr>
2180
  <td><a href="../examples/double-perovskite.html">Double perovskites Aโ‚‚BBโ€ฒXโ‚†</a></td>
2181
  <td>a family file, no dataset</td>
2182
  <td>none</td>
2183
  <td>10,800 compositions (halide variant)</td>
2184
- <td><span class="mstatus part">design space and rules only</span></td>
2185
  </tr>
2186
  <tr>
2187
  <td><a href="#your-dataset">Your dataset</a></td>
2188
  <td>one material family</td>
2189
  <td>any scalar columns</td>
2190
  <td>any</td>
2191
- <td><span class="mstatus sup">supported</span></td>
2192
  </tr>
2193
  </tbody>
2194
  </table>
@@ -2211,9 +2210,8 @@ with MACE and validated by DFT).</p>
2211
  the <a href="https://babu09-meidnet.hf.space/studio/">live Studio</a>.</p>
2212
  <p><strong>Suitable tasks:</strong> inverse design from a band gap and a stability target ยท property prediction from the
2213
  structure ยท structureโ€“property retrieval ยท measuring how well two modalities align.</p>
2214
- <p><strong>MEIDNet implementation:</strong> โœ“ pretrained model ยท โœ“ configuration (<code>examples/perov5/meidnet.yaml</code>) ยท
2215
- โœ“ tutorial (<a href="../examples/perov5.html">the paper's experiment</a>, <a href="../start/colab.html">Colab</a>) ยท
2216
- โœ“ benchmark results.</p>
2217
  <p><a class="md-button md-button--primary" href="https://babu09-meidnet.hf.space/studio/">Open in the Studio</a></p>
2218
  <p><a href="../benchmarks/perov5.html">Benchmark results</a> ยท <a href="../examples/perov5.html">The paper's experiment</a> ยท
2219
  <a href="https://github.com/txie-93/cdvae/tree/main/data/perov_5">Dataset source (CDVAE)</a> ยท
@@ -2245,10 +2243,10 @@ or one <code>.cif</code> file per id) can be used directly: upload it in the <a
2245
  or run <code>meidnet init</code> โ†’ <code>check</code> โ†’ <code>train</code> โ†’ <code>generate</code> (<a href="../use/your-data.html">bring your own dataset</a>).
2246
  The structures must belong to one <a href="../reference/families.html">material family</a> (prototype + site groups), which is
2247
  what the rules and the search need.</p>
2248
- <h2 id="datasets-we-would-like-to-see-benchmarked">Datasets we would like to see benchmarked<a class="headerlink" href="#datasets-we-would-like-to-see-benchmarked" title="Permanent link">&para;</a></h2>
2249
- <p>Battery conductors, MOFs, 2D materials and spinels are natural next families. If you run MEIDNet on one of them,
2250
- <a href="../community/contribute.html">contribute the result</a>: the dataset gets its own benchmark page, and a verified row
2251
- once the result has been reproduced here.</p>
2252
 
2253
 
2254
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
911
  </li>
912
 
913
  <li class="md-nav__item">
914
+ <a href="#next-datasets" class="md-nav__link">
915
  <span class="md-ellipsis">
916
 
917
+ Next datasets
918
 
919
  </span>
920
  </a>
 
972
  <span class="md-ellipsis">
973
 
974
 
975
+ Capabilities
976
 
977
 
978
 
 
1681
  <span class="md-ellipsis">
1682
 
1683
 
1684
+ Interpreting a candidate
1685
 
1686
 
1687
 
 
2110
  </li>
2111
 
2112
  <li class="md-nav__item">
2113
+ <a href="#next-datasets" class="md-nav__link">
2114
  <span class="md-ellipsis">
2115
 
2116
+ Next datasets
2117
 
2118
  </span>
2119
  </a>
 
2141
 
2142
 
2143
  <h1 id="datasets">Datasets<a class="headerlink" href="#datasets" title="Permanent link">&para;</a></h1>
2144
+ <p>Datasets used with MEIDNet and what has been done with each. Tasks, sizes and properties differ from one dataset to
2145
+ the next, so results are compared within a dataset only (see <a href="../benchmarks/index.html">Benchmarks</a>).</p>
 
2146
  <table>
2147
  <thead>
2148
  <tr>
 
2150
  <th>structures</th>
2151
  <th>properties used</th>
2152
  <th>size</th>
2153
+ <th>available here</th>
2154
  </tr>
2155
  </thead>
2156
  <tbody>
 
2159
  <td>cubic ABXโ‚ƒ perovskites, 5 atoms per cell</td>
2160
  <td>direct band gap, formation enthalpy</td>
2161
  <td>18,928</td>
2162
+ <td>pretrained model, configuration, tutorial, benchmark results</td>
2163
  </tr>
2164
  <tr>
2165
  <td><a href="#mp-20">MP-20</a></td>
2166
  <td>Materials Project, up to 20 atoms</td>
2167
  <td>none aligned in the paper</td>
2168
  <td>about 45,000</td>
2169
+ <td>structure-representation results in the paper</td>
2170
  </tr>
2171
  <tr>
2172
  <td><a href="#carbon-24">Carbon-24</a></td>
2173
  <td>carbon allotropes, up to 24 atoms</td>
2174
  <td>none aligned in the paper</td>
2175
  <td>about 10,000</td>
2176
+ <td>structure-representation results in the paper</td>
2177
  </tr>
2178
  <tr>
2179
  <td><a href="../examples/double-perovskite.html">Double perovskites Aโ‚‚BBโ€ฒXโ‚†</a></td>
2180
  <td>a family file, no dataset</td>
2181
  <td>none</td>
2182
  <td>10,800 compositions (halide variant)</td>
2183
+ <td>design space and rules</td>
2184
  </tr>
2185
  <tr>
2186
  <td><a href="#your-dataset">Your dataset</a></td>
2187
  <td>one material family</td>
2188
  <td>any scalar columns</td>
2189
  <td>any</td>
2190
+ <td>upload in the Studio, or the command line</td>
2191
  </tr>
2192
  </tbody>
2193
  </table>
 
2210
  the <a href="https://babu09-meidnet.hf.space/studio/">live Studio</a>.</p>
2211
  <p><strong>Suitable tasks:</strong> inverse design from a band gap and a stability target ยท property prediction from the
2212
  structure ยท structureโ€“property retrieval ยท measuring how well two modalities align.</p>
2213
+ <p><strong>Available here:</strong> pretrained model ยท configuration (<code>examples/perov5/meidnet.yaml</code>) ยท
2214
+ tutorial (<a href="../examples/perov5.html">the paper's experiment</a>, <a href="../start/colab.html">Colab</a>) ยท benchmark results.</p>
 
2215
  <p><a class="md-button md-button--primary" href="https://babu09-meidnet.hf.space/studio/">Open in the Studio</a></p>
2216
  <p><a href="../benchmarks/perov5.html">Benchmark results</a> ยท <a href="../examples/perov5.html">The paper's experiment</a> ยท
2217
  <a href="https://github.com/txie-93/cdvae/tree/main/data/perov_5">Dataset source (CDVAE)</a> ยท
 
2243
  or run <code>meidnet init</code> โ†’ <code>check</code> โ†’ <code>train</code> โ†’ <code>generate</code> (<a href="../use/your-data.html">bring your own dataset</a>).
2244
  The structures must belong to one <a href="../reference/families.html">material family</a> (prototype + site groups), which is
2245
  what the rules and the search need.</p>
2246
+ <h2 id="next-datasets">Next datasets<a class="headerlink" href="#next-datasets" title="Permanent link">&para;</a></h2>
2247
+ <p>Battery conductors, MOFs, 2D materials and spinels are natural next families. Results on any of them can be
2248
+ <a href="../community/contribute.html">contributed</a>: the dataset gets its own benchmark page, and a result reproduced here is
2249
+ marked as verified.</p>
2250
 
2251
 
2252
 
site/index.html CHANGED
@@ -540,10 +540,10 @@
540
  </li>
541
 
542
  <li class="md-nav__item">
543
- <a href="#honest-scope" class="md-nav__link">
544
  <span class="md-ellipsis">
545
 
546
- Honest scope
547
 
548
  </span>
549
  </a>
@@ -777,7 +777,7 @@
777
  <span class="md-ellipsis">
778
 
779
 
780
- MEIDNet Studio (live workbench)
781
 
782
 
783
 
@@ -976,7 +976,7 @@
976
  <span class="md-ellipsis">
977
 
978
 
979
- Capabilities (what works today)
980
 
981
 
982
 
@@ -1685,7 +1685,7 @@
1685
  <span class="md-ellipsis">
1686
 
1687
 
1688
- Why you can trust (or not) a candidate
1689
 
1690
 
1691
 
@@ -2114,10 +2114,10 @@
2114
  </li>
2115
 
2116
  <li class="md-nav__item">
2117
- <a href="#honest-scope" class="md-nav__link">
2118
  <span class="md-ellipsis">
2119
 
2120
- Honest scope
2121
 
2122
  </span>
2123
  </a>
@@ -2160,7 +2160,8 @@
2160
  <h1 id="meidnet-prism">MEIDNet Prism<a class="headerlink" href="#meidnet-prism" title="Permanent link">&para;</a></h1>
2161
  <p><a href="https://babu09-meidnet.hf.space/">โ† MEIDNet Prism home</a> ยท the documentation of the MEIDNet framework and its platform.</p>
2162
  <p><strong>Learn, build and benchmark multimodal AI for materials discovery.</strong> MEIDNet is the reference implementation:
2163
- it designs crystalline materials from target properties, with your own data, your own rules and no code to edit.</p>
 
2164
  <div class="highlight"><pre><span></span><code> Learn โ”€โ”€โ–บ Architectures โ”€โ”€โ–บ Build โ”€โ”€โ–บ Datasets โ”€โ”€โ–บ Benchmarks โ”€โ”€โ–บ Community
2165
  what is which design MEIDNet data that results with share and
2166
  multimodal fits your data Studio works evidence reproduce
@@ -2197,22 +2198,22 @@ that recommends one for your data and goal.</p>
2197
  <li>
2198
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 16.5v-9l6 4.5M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg></span> <strong>Try MEIDNet</strong></p>
2199
  <hr />
2200
- <p>See what it does in 30 seconds: the <a href="https://babu09-meidnet.hf.space/studio/">live Studio</a> needs nothing installed;
2201
- <code>meidnet demo</code> runs on any laptop.</p>
2202
  <p><a href="start/quickstart.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> 5-minute quickstart</a></p>
2203
  </li>
2204
  <li>
2205
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C8.59 3 5.69 4.07 4.54 5.57l5.25 5.25c.71.11 1.43.18 2.21.18 4.42 0 8-1.79 8-4s-3.58-4-8-4M3.92 7.08 2.5 8.5 5 11H0v2h5l-2.5 2.5 1.42 1.42L8.84 12M20 9c0 2.21-3.58 4-8 4-.66 0-1.3-.05-1.91-.13l-2.47 2.47c1.26.41 2.76.66 4.38.66 4.42 0 8-1.79 8-4m0 2c0 2.21-3.58 4-8 4-2.28 0-4.33-.5-5.79-1.25l-1.68 1.68C5.68 19.93 8.59 21 12 21c4.42 0 8-1.79 8-4"/></svg></span> <strong>Use MEIDNet on my data</strong></p>
2206
  <hr />
2207
- <p>A table with an id, properties and CIFs is all you need. Four commands take you from
2208
- "is my data usable?" to candidates with explanations.</p>
2209
  <p><a href="use/your-data.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> Bring your own dataset</a></p>
2210
  </li>
2211
  <li>
2212
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z"/></svg></span> <strong>Change what it does</strong></p>
2213
  <hr />
2214
- <p>Targets, elements, rules, family โ€” all in one YAML file, or by moving sliders in
2215
- MEIDNet Studio and exporting the file.</p>
2216
  <p><a href="recipes/change-targets.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> Recipes</a></p>
2217
  </li>
2218
  <li>
@@ -2229,9 +2230,9 @@ and where the limits are.</p>
2229
  table shared prototype hard property latent CIFs + report
2230
  + CIFs latent + sites checks goals optimisation
2231
  </code></pre></div>
2232
- <p>Each block is a setting in <code>meidnet.yaml</code>, a node in <a href="use/studio.html">MEIDNet Studio</a> โ€” where changing one
2233
- block immediately shows its effect on the ones after it โ€” and a section in the HTML report each step writes.</p>
2234
- <h2 id="honest-scope">Honest scope<a class="headerlink" href="#honest-scope" title="Permanent link">&para;</a></h2>
2235
  <ul>
2236
  <li>Generation works for <strong>prototype families</strong>: a fixed arrangement of sites whose occupants and cell size are
2237
  chosen (ABXโ‚ƒ perovskites, Aโ‚‚BBโ€ฒXโ‚† double perovskites, and anything you describe the same way). MEIDNet does
@@ -2243,6 +2244,11 @@ block immediately shows its effect on the ones after it โ€” and a section in the
2243
  <p>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, <em>MEIDNet: Multimodal generative AI framework for
2244
  inverse materials design</em>, npj Computational Materials (2026). <a href="research/paper.html">Citation and benchmarks</a> ยท
2245
  <a href="https://github.com/ABnano/MEIDNet/releases/tag/v1.0.0-paper">code as published (v1.0)</a>.</p>
 
 
 
 
 
2246
 
2247
 
2248
 
 
540
  </li>
541
 
542
  <li class="md-nav__item">
543
+ <a href="#scope" class="md-nav__link">
544
  <span class="md-ellipsis">
545
 
546
+ Scope
547
 
548
  </span>
549
  </a>
 
777
  <span class="md-ellipsis">
778
 
779
 
780
+ MEIDNet Studio
781
 
782
 
783
 
 
976
  <span class="md-ellipsis">
977
 
978
 
979
+ Capabilities
980
 
981
 
982
 
 
1685
  <span class="md-ellipsis">
1686
 
1687
 
1688
+ Interpreting a candidate
1689
 
1690
 
1691
 
 
2114
  </li>
2115
 
2116
  <li class="md-nav__item">
2117
+ <a href="#scope" class="md-nav__link">
2118
  <span class="md-ellipsis">
2119
 
2120
+ Scope
2121
 
2122
  </span>
2123
  </a>
 
2160
  <h1 id="meidnet-prism">MEIDNet Prism<a class="headerlink" href="#meidnet-prism" title="Permanent link">&para;</a></h1>
2161
  <p><a href="https://babu09-meidnet.hf.space/">โ† MEIDNet Prism home</a> ยท the documentation of the MEIDNet framework and its platform.</p>
2162
  <p><strong>Learn, build and benchmark multimodal AI for materials discovery.</strong> MEIDNet is the reference implementation:
2163
+ it designs crystalline materials from target properties, using your own data and rules, configured in one YAML
2164
+ file or in the Studio.</p>
2165
  <div class="highlight"><pre><span></span><code> Learn โ”€โ”€โ–บ Architectures โ”€โ”€โ–บ Build โ”€โ”€โ–บ Datasets โ”€โ”€โ–บ Benchmarks โ”€โ”€โ–บ Community
2166
  what is which design MEIDNet data that results with share and
2167
  multimodal fits your data Studio works evidence reproduce
 
2198
  <li>
2199
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 16.5v-9l6 4.5M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2"/></svg></span> <strong>Try MEIDNet</strong></p>
2200
  <hr />
2201
+ <p>The <a href="https://babu09-meidnet.hf.space/studio/">live Studio</a> runs in the browser without installation;
2202
+ <code>meidnet demo</code> runs on a laptop CPU.</p>
2203
  <p><a href="start/quickstart.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> 5-minute quickstart</a></p>
2204
  </li>
2205
  <li>
2206
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 3C8.59 3 5.69 4.07 4.54 5.57l5.25 5.25c.71.11 1.43.18 2.21.18 4.42 0 8-1.79 8-4s-3.58-4-8-4M3.92 7.08 2.5 8.5 5 11H0v2h5l-2.5 2.5 1.42 1.42L8.84 12M20 9c0 2.21-3.58 4-8 4-.66 0-1.3-.05-1.91-.13l-2.47 2.47c1.26.41 2.76.66 4.38.66 4.42 0 8-1.79 8-4m0 2c0 2.21-3.58 4-8 4-2.28 0-4.33-.5-5.79-1.25l-1.68 1.68C5.68 19.93 8.59 21 12 21c4.42 0 8-1.79 8-4"/></svg></span> <strong>Use MEIDNet on my data</strong></p>
2207
  <hr />
2208
+ <p>A table with an id, property columns and CIFs. Four commands lead from a data check to
2209
+ candidates with reports.</p>
2210
  <p><a href="use/your-data.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> Bring your own dataset</a></p>
2211
  </li>
2212
  <li>
2213
  <p><span class="twemoji lg middle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z"/></svg></span> <strong>Change what it does</strong></p>
2214
  <hr />
2215
+ <p>Targets, elements, rules and family are set in one YAML file, or with the controls of
2216
+ MEIDNet Studio, which exports the same file.</p>
2217
  <p><a href="recipes/change-targets.html"><span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13.22 19.03a.75.75 0 0 1 0-1.06L18.19 13H3.75a.75.75 0 0 1 0-1.5h14.44l-4.97-4.97a.749.749 0 0 1 .326-1.275.75.75 0 0 1 .734.215l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0"/></svg></span> Recipes</a></p>
2218
  </li>
2219
  <li>
 
2230
  table shared prototype hard property latent CIFs + report
2231
  + CIFs latent + sites checks goals optimisation
2232
  </code></pre></div>
2233
+ <p>Each block is a setting in <code>meidnet.yaml</code>, a node in <a href="use/studio.html">MEIDNet Studio</a>, where a change in one block
2234
+ updates the blocks after it, and a section in the HTML report that each step writes.</p>
2235
+ <h2 id="scope">Scope<a class="headerlink" href="#scope" title="Permanent link">&para;</a></h2>
2236
  <ul>
2237
  <li>Generation works for <strong>prototype families</strong>: a fixed arrangement of sites whose occupants and cell size are
2238
  chosen (ABXโ‚ƒ perovskites, Aโ‚‚BBโ€ฒXโ‚† double perovskites, and anything you describe the same way). MEIDNet does
 
2244
  <p>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, <em>MEIDNet: Multimodal generative AI framework for
2245
  inverse materials design</em>, npj Computational Materials (2026). <a href="research/paper.html">Citation and benchmarks</a> ยท
2246
  <a href="https://github.com/ABnano/MEIDNet/releases/tag/v1.0.0-paper">code as published (v1.0)</a>.</p>
2247
+ <p>Further reading: A. Babu, N. M. A. Krishnan, <em>Multimodal and cross-modal learning techniques</em>, APL Machine
2248
+ Learning <strong>4</strong>, 030901 (2026), <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a> ยท A. Babu,
2249
+ R. Almeida Gouvรชa, G.-M. Rignanese, <em>Toward automated discovery with generative models multimodal learning and
2250
+ closed loop workflows in inverse materials design</em>, Cell Reports Physical Science <strong>7</strong>, 103561 (2026),
2251
+ <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a>.</p>
2252
 
2253
 
2254
 
site/learn/architectures.html CHANGED
@@ -845,7 +845,7 @@
845
  <span class="md-ellipsis">
846
 
847
 
848
- MEIDNet Studio (live workbench)
849
 
850
 
851
 
@@ -1044,7 +1044,7 @@
1044
  <span class="md-ellipsis">
1045
 
1046
 
1047
- Capabilities (what works today)
1048
 
1049
 
1050
 
@@ -1753,7 +1753,7 @@
1753
  <span class="md-ellipsis">
1754
 
1755
 
1756
- Why you can trust (or not) a candidate
1757
 
1758
 
1759
 
@@ -2290,10 +2290,12 @@
2290
 
2291
 
2292
  <h1 id="architecture-atlas">Architecture Atlas<a class="headerlink" href="#architecture-atlas" title="Permanent link">&para;</a></h1>
2293
- <p>Five ways to build a model from several modalities, drawn the same way: inputs on the left, what the model produces
2294
- on the right. Each card says when the design fits, what it costs, an example from materials science and whether
2295
- MEIDNet implements it. At the end, <a href="#advisor">the advisor</a> recommends one for your data and your goal.</p>
2296
- <p>New to the topic? Start with <a href="index.html">Learn multimodality</a>.</p>
 
 
2297
  <div class="atlas">
2298
  <div class="atlas-card">
2299
  <div class="atlas-fig"><svg class="ad" viewBox="0 0 360 132" role="img" aria-label="Early fusion: features of two modalities are concatenated and given to one model">
@@ -2310,7 +2312,6 @@ MEIDNet implements it. At the end, <a href="#advisor">the advisor</a> recommends
2310
  </svg></div>
2311
  <div class="atlas-body">
2312
  <h3 id="early-fusion">Early fusion<a class="headerlink" href="#early-fusion" title="Permanent link">&para;</a></h3>
2313
- <p><span class="mstatus no">Not in MEIDNet</span></p>
2314
  <p><strong>Idea.</strong> Join the modalities at the input: turn each into features, concatenate them into one vector, train one
2315
  model on it.</p>
2316
  <p><strong>When it fits.</strong> Every material has every modality; the features have a fixed length and similar scales; you want
@@ -2340,7 +2341,6 @@ pattern, concatenated and given to a gradient-boosted regressor.</p>
2340
  </svg></div>
2341
  <div class="atlas-body">
2342
  <h3 id="late-fusion">Late fusion<a class="headerlink" href="#late-fusion" title="Permanent link">&para;</a></h3>
2343
- <p><span class="mstatus no">Not in MEIDNet</span></p>
2344
  <p><strong>Idea.</strong> One model per modality, each makes its own prediction; the predictions are combined by averaging, voting
2345
  or a small model on top.</p>
2346
  <p><strong>When it fits.</strong> Modalities are often missing, models for each already exist, or robustness matters more than
@@ -2373,7 +2373,6 @@ phase label; the final label averages their probabilities.</p>
2373
  </svg></div>
2374
  <div class="atlas-body">
2375
  <h3 id="shared-latent">Shared latent space (joint and coordinated)<a class="headerlink" href="#shared-latent" title="Permanent link">&para;</a></h3>
2376
- <p><span class="mstatus core">Core idea used by MEIDNet</span> <span class="mstatus sup">Supported</span></p>
2377
  <p><strong>Idea.</strong> One encoder per modality maps into a common space. In a <em>coordinated</em> representation the latents stay
2378
  separate but are trained to agree; in a <em>joint</em> representation they are merged into one vector that the decoders
2379
  read. MEIDNet does both: the structure latent and the property latent are aligned by
@@ -2386,7 +2385,8 @@ encoder that suits its shape.
2386
  <strong>Weaknesses.</strong> Needs paired data. The space is only as good as the alignment. Several losses must be balanced.</p>
2387
  <p><strong>Materials example.</strong> MEIDNet: crystal structures and DFT properties of 18,928 cubic perovskites, searched for
2388
  compositions with a target band gap and formation enthalpy (<a href="../examples/perov5.html">the paper's experiment</a>).</p>
2389
- <p><em>References:</em> Ngiam <em>et al.</em> 2011; Baltruลกaitis <em>et al.</em> 2019; Babu <em>et al.</em> 2026; Moro, Loh <em>et al.</em> 2025.</p>
 
2390
  </div>
2391
  </div>
2392
  <div class="atlas-card">
@@ -2406,7 +2406,6 @@ compositions with a target band gap and formation enthalpy (<a href="../examples
2406
  </svg></div>
2407
  <div class="atlas-body">
2408
  <h3 id="cross-attention">Cross-attention and transformer fusion<a class="headerlink" href="#cross-attention" title="Permanent link">&para;</a></h3>
2409
- <p><span class="mstatus no">Not in MEIDNet</span></p>
2410
  <p><strong>Idea.</strong> Each modality becomes a sequence of tokens (atoms, segments of a spectrum, words). Attention lets every
2411
  token of one modality look up the tokens of the other that matter to it, layer after layer.</p>
2412
  <p><strong>When it fits.</strong> The modalities have parts that interact in detail and are not aligned in advance; the dataset is
@@ -2437,18 +2436,17 @@ which spectral features.</p>
2437
  </svg></div>
2438
  <div class="atlas-body">
2439
  <h3 id="contrastive">Contrastive learning<a class="headerlink" href="#contrastive" title="Permanent link">&para;</a></h3>
2440
- <p><span class="mstatus core">Used by MEIDNet</span> <span class="mstatus sup">Supported</span></p>
2441
  <p><strong>Idea.</strong> A training objective rather than a wiring. In a batch of paired examples, each example's two embeddings
2442
  must be more similar to each other than to any other example's. It is how the latents of a
2443
  <a href="#shared-latent">shared space</a> are coordinated.</p>
2444
  <p><strong>When it fits.</strong> You have pairs (a structure and its properties, a pattern and its structure) and want a space in
2445
  which nearest neighbours are meaningful across modalities.</p>
2446
- <p><strong>Strengths.</strong> Learns from the pairing alone; gives retrieval for free; scales to large datasets.
2447
- <strong>Weaknesses.</strong> Needs batches with enough other examples; sensitive to the temperature; two genuinely similar
2448
- materials in one batch are still pushed apart.</p>
2449
  <p><strong>In MEIDNet.</strong> Symmetric InfoNCE with temperature 0.01 and weight 5, switched on gradually over the warm-up
2450
  (the paper's curriculum). <a href="index.html#contrastive-learning">The formula and a playground</a>.</p>
2451
- <p><em>References:</em> van den Oord <em>et al.</em> 2018 (InfoNCE); Radford <em>et al.</em> 2021 (CLIP).</p>
2452
  </div>
2453
  </div>
2454
  </div>
@@ -2506,21 +2504,21 @@ materials in one batch are still pushed apart.</p>
2506
  <td>medium to large</td>
2507
  </tr>
2508
  <tr>
2509
- <td>in MEIDNet</td>
2510
- <td>no</td>
2511
- <td>no</td>
2512
- <td><strong>yes, the core</strong></td>
2513
- <td>no</td>
2514
- <td><strong>yes</strong></td>
2515
  </tr>
2516
  </tbody>
2517
  </table>
2518
  <p><strong>Beyond these five.</strong> Conditional generative models such as diffusion (MatterGen) or variational autoencoders
2519
- (CDVAE) also translate from properties to structures, and they generate free atomic arrangements, which MEIDNet does
2520
- not. MEIDNet instead decodes compositions onto a prototype family and checks them against chemical rules.</p>
 
2521
  <h2 id="advisor">Which architecture should I use?<a class="headerlink" href="#advisor" title="Permanent link">&para;</a></h2>
2522
- <p>Tick the data you have and choose what you want to do. The recommendation says why, what it costs and whether
2523
- MEIDNet can do it today.</p>
2524
  <div class="advisor" id="arch-advisor" aria-live="polite"></div>
2525
 
2526
  <noscript>The advisor needs JavaScript. In short: structures with scalar properties, for design or retrieval โ†’
@@ -2562,6 +2560,11 @@ over <code>training.contrastive_warmup_epochs</code>, so that the decoders learn
2562
  (2022). <a href="https://arxiv.org/abs/2110.06197">arXiv:2110.06197</a></li>
2563
  <li>V. Moro, C. Loh <em>et al.</em>, "Multimodal foundation models for material property prediction and discovery",
2564
  <em>Newton</em> (2025). <a href="https://doi.org/10.1016/j.newton.2025.100016">doi:10.1016/j.newton.2025.100016</a></li>
 
 
 
 
 
2565
  <li>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, "MEIDNet: Multimodal generative AI framework for
2566
  inverse materials design", <em>npj Comput. Mater.</em> (2026). <a href="https://doi.org/10.1038/s41524-026-02153-3">doi:10.1038/s41524-026-02153-3</a></li>
2567
  </ul>
 
845
  <span class="md-ellipsis">
846
 
847
 
848
+ MEIDNet Studio
849
 
850
 
851
 
 
1044
  <span class="md-ellipsis">
1045
 
1046
 
1047
+ Capabilities
1048
 
1049
 
1050
 
 
1753
  <span class="md-ellipsis">
1754
 
1755
 
1756
+ Interpreting a candidate
1757
 
1758
 
1759
 
 
2290
 
2291
 
2292
  <h1 id="architecture-atlas">Architecture Atlas<a class="headerlink" href="#architecture-atlas" title="Permanent link">&para;</a></h1>
2293
+ <p>Five ways to build a model from several modalities, drawn the same way: inputs on the left, outputs on the right.
2294
+ Each card gives the idea, when it fits, its strengths and weaknesses, an example from materials science and
2295
+ references. The <a href="#side-by-side">comparison table</a> shows which of these designs MEIDNet uses, and
2296
+ <a href="#advisor">the advisor</a> suggests one for a given dataset and task.</p>
2297
+ <p>New to the topic? Start with <a href="index.html">Learn multimodality</a>. Babu and Krishnan (2026) review multimodal and
2298
+ cross-modal learning techniques in more depth.</p>
2299
  <div class="atlas">
2300
  <div class="atlas-card">
2301
  <div class="atlas-fig"><svg class="ad" viewBox="0 0 360 132" role="img" aria-label="Early fusion: features of two modalities are concatenated and given to one model">
 
2312
  </svg></div>
2313
  <div class="atlas-body">
2314
  <h3 id="early-fusion">Early fusion<a class="headerlink" href="#early-fusion" title="Permanent link">&para;</a></h3>
 
2315
  <p><strong>Idea.</strong> Join the modalities at the input: turn each into features, concatenate them into one vector, train one
2316
  model on it.</p>
2317
  <p><strong>When it fits.</strong> Every material has every modality; the features have a fixed length and similar scales; you want
 
2341
  </svg></div>
2342
  <div class="atlas-body">
2343
  <h3 id="late-fusion">Late fusion<a class="headerlink" href="#late-fusion" title="Permanent link">&para;</a></h3>
 
2344
  <p><strong>Idea.</strong> One model per modality, each makes its own prediction; the predictions are combined by averaging, voting
2345
  or a small model on top.</p>
2346
  <p><strong>When it fits.</strong> Modalities are often missing, models for each already exist, or robustness matters more than
 
2373
  </svg></div>
2374
  <div class="atlas-body">
2375
  <h3 id="shared-latent">Shared latent space (joint and coordinated)<a class="headerlink" href="#shared-latent" title="Permanent link">&para;</a></h3>
 
2376
  <p><strong>Idea.</strong> One encoder per modality maps into a common space. In a <em>coordinated</em> representation the latents stay
2377
  separate but are trained to agree; in a <em>joint</em> representation they are merged into one vector that the decoders
2378
  read. MEIDNet does both: the structure latent and the property latent are aligned by
 
2385
  <strong>Weaknesses.</strong> Needs paired data. The space is only as good as the alignment. Several losses must be balanced.</p>
2386
  <p><strong>Materials example.</strong> MEIDNet: crystal structures and DFT properties of 18,928 cubic perovskites, searched for
2387
  compositions with a target band gap and formation enthalpy (<a href="../examples/perov5.html">the paper's experiment</a>).</p>
2388
+ <p><em>References:</em> Ngiam <em>et al.</em> 2011; Baltruลกaitis <em>et al.</em> 2019; Babu <em>et al.</em> 2026 (MEIDNet); Moro, Loh <em>et al.</em> 2025;
2389
+ Babu and Krishnan 2026.</p>
2390
  </div>
2391
  </div>
2392
  <div class="atlas-card">
 
2406
  </svg></div>
2407
  <div class="atlas-body">
2408
  <h3 id="cross-attention">Cross-attention and transformer fusion<a class="headerlink" href="#cross-attention" title="Permanent link">&para;</a></h3>
 
2409
  <p><strong>Idea.</strong> Each modality becomes a sequence of tokens (atoms, segments of a spectrum, words). Attention lets every
2410
  token of one modality look up the tokens of the other that matter to it, layer after layer.</p>
2411
  <p><strong>When it fits.</strong> The modalities have parts that interact in detail and are not aligned in advance; the dataset is
 
2436
  </svg></div>
2437
  <div class="atlas-body">
2438
  <h3 id="contrastive">Contrastive learning<a class="headerlink" href="#contrastive" title="Permanent link">&para;</a></h3>
 
2439
  <p><strong>Idea.</strong> A training objective rather than a wiring. In a batch of paired examples, each example's two embeddings
2440
  must be more similar to each other than to any other example's. It is how the latents of a
2441
  <a href="#shared-latent">shared space</a> are coordinated.</p>
2442
  <p><strong>When it fits.</strong> You have pairs (a structure and its properties, a pattern and its structure) and want a space in
2443
  which nearest neighbours are meaningful across modalities.</p>
2444
+ <p><strong>Strengths.</strong> Learns from the pairing alone; provides cross-modal retrieval; scales to large datasets.
2445
+ <strong>Weaknesses.</strong> Needs large enough batches; sensitive to the temperature; two similar materials in the same batch
2446
+ are treated as negatives and pushed apart.</p>
2447
  <p><strong>In MEIDNet.</strong> Symmetric InfoNCE with temperature 0.01 and weight 5, switched on gradually over the warm-up
2448
  (the paper's curriculum). <a href="index.html#contrastive-learning">The formula and a playground</a>.</p>
2449
+ <p><em>References:</em> van den Oord <em>et al.</em> 2018 (InfoNCE); Radford <em>et al.</em> 2021 (CLIP); Babu and Krishnan 2026.</p>
2450
  </div>
2451
  </div>
2452
  </div>
 
2504
  <td>medium to large</td>
2505
  </tr>
2506
  <tr>
2507
+ <td>used in MEIDNet</td>
2508
+ <td>โ€“</td>
2509
+ <td>โ€“</td>
2510
+ <td>yes: structure and property encoders, averaged latent</td>
2511
+ <td>โ€“</td>
2512
+ <td>yes: symmetric InfoNCE</td>
2513
  </tr>
2514
  </tbody>
2515
  </table>
2516
  <p><strong>Beyond these five.</strong> Conditional generative models such as diffusion (MatterGen) or variational autoencoders
2517
+ (CDVAE) also translate from properties to structures, and they generate free atomic arrangements. MEIDNet instead
2518
+ decodes compositions onto a prototype family and checks them against chemical rules. Babu, Gouvรชa and Rignanese
2519
+ (2026) review generative models, multimodal learning and closed-loop workflows for inverse materials design.</p>
2520
  <h2 id="advisor">Which architecture should I use?<a class="headerlink" href="#advisor" title="Permanent link">&para;</a></h2>
2521
+ <p>Select the data you have and the task. The recommendation explains the choice and says where it can be run.</p>
 
2522
  <div class="advisor" id="arch-advisor" aria-live="polite"></div>
2523
 
2524
  <noscript>The advisor needs JavaScript. In short: structures with scalar properties, for design or retrieval โ†’
 
2560
  (2022). <a href="https://arxiv.org/abs/2110.06197">arXiv:2110.06197</a></li>
2561
  <li>V. Moro, C. Loh <em>et al.</em>, "Multimodal foundation models for material property prediction and discovery",
2562
  <em>Newton</em> (2025). <a href="https://doi.org/10.1016/j.newton.2025.100016">doi:10.1016/j.newton.2025.100016</a></li>
2563
+ <li>A. Babu, N. M. A. Krishnan, "Multimodal and cross-modal learning techniques", <em>APL Mach. Learn.</em> <strong>4</strong>, 030901
2564
+ (2026). <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a></li>
2565
+ <li>A. Babu, R. Almeida Gouvรชa, G.-M. Rignanese, "Toward automated discovery with generative models multimodal
2566
+ learning and closed loop workflows in inverse materials design", <em>Cell Rep. Phys. Sci.</em> <strong>7</strong>, 103561 (2026).
2567
+ <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a></li>
2568
  <li>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, "MEIDNet: Multimodal generative AI framework for
2569
  inverse materials design", <em>npj Comput. Mater.</em> (2026). <a href="https://doi.org/10.1038/s41524-026-02153-3">doi:10.1038/s41524-026-02153-3</a></li>
2570
  </ul>
site/learn/index.html CHANGED
@@ -828,7 +828,7 @@
828
  <span class="md-ellipsis">
829
 
830
 
831
- MEIDNet Studio (live workbench)
832
 
833
 
834
 
@@ -1027,7 +1027,7 @@
1027
  <span class="md-ellipsis">
1028
 
1029
 
1030
- Capabilities (what works today)
1031
 
1032
 
1033
 
@@ -1736,7 +1736,7 @@
1736
  <span class="md-ellipsis">
1737
 
1738
 
1739
- Why you can trust (or not) a candidate
1740
 
1741
 
1742
 
@@ -2254,10 +2254,10 @@
2254
  <p>A material can be described in many ways: by its atoms and their positions, by a formula, by measured or computed
2255
  properties, by a diffraction pattern, a spectrum, a micrograph or a paragraph in a paper. Each way of describing it
2256
  is a <strong>modality</strong>. Multimodal learning trains one model on several modalities of the same materials, so that it can
2257
- connect them: read a structure and predict a property, or โ€” the point of MEIDNet โ€” start from the properties you
2258
- want and propose a structure.</p>
2259
- <p>This short course takes about ten minutes. It explains the ideas behind MEIDNet and the alternatives to it, and every
2260
- item says what works in MEIDNet today.</p>
2261
  <div class="learn-steps">
2262
  <ol>
2263
  <li><a href="#what-is-a-modality">What is a modality?</a></li>
@@ -2331,8 +2331,8 @@ together can translate between them in either direction.</p>
2331
  <p><strong>What it needs:</strong> <em>paired</em> data, where several modalities describe the same material. In Perov-5, every one of the
2332
  18,928 structures comes with its DFT band gap and formation enthalpy, which makes it a two-modality dataset.</p>
2333
  <h2 id="the-multimodality-map">2. The multimodality map<a class="headerlink" href="#the-multimodality-map" title="Permanent link">&para;</a></h2>
2334
- <p>Click a modality to see what it is, which networks read it, how it is combined with others and its status in
2335
- MEIDNet. Click the centre for the idea that ties them together.</p>
2336
  <div class="mm" id="mm-map" aria-label="Interactive map of materials modalities"></div>
2337
 
2338
  <details class="note">
@@ -2341,54 +2341,54 @@ MEIDNet. Click the centre for the idea that ties them together.</p>
2341
  <thead>
2342
  <tr>
2343
  <th>modality</th>
2344
- <th>status in MEIDNet</th>
2345
  <th>how</th>
2346
  </tr>
2347
  </thead>
2348
  <tbody>
2349
  <tr>
2350
  <td>Crystal structure</td>
2351
- <td><strong>Supported</strong></td>
2352
  <td>an E(n)-equivariant graph network (EGNN) encodes up to <code>max_sites</code> atoms (default 20)</td>
2353
  </tr>
2354
  <tr>
2355
  <td>Scalar properties</td>
2356
- <td><strong>Supported</strong></td>
2357
  <td>all numeric columns form one vector, read by one MLP; every column becomes a target</td>
2358
  </tr>
2359
  <tr>
2360
  <td>Composition</td>
2361
- <td><strong>Inside the structure</strong></td>
2362
  <td>the element on each site is part of the structure; formula-only data needs a composition model</td>
2363
  </tr>
2364
  <tr>
2365
  <td>Processing conditions</td>
2366
- <td><strong>Partly</strong></td>
2367
  <td>numeric conditions can be extra scalar columns, encoded together with the properties</td>
2368
  </tr>
2369
  <tr>
2370
  <td>Diffraction (XRD)</td>
2371
- <td><strong>Planned</strong></td>
2372
  <td>a vector-modality encoder for binned patterns, first item of the <a href="../understand/limits.html">roadmap</a></td>
2373
  </tr>
2374
  <tr>
2375
  <td>Spectra and DOS</td>
2376
- <td><strong>Planned</strong></td>
2377
  <td>as vector modalities</td>
2378
  </tr>
2379
  <tr>
2380
  <td>Microscopy images</td>
2381
- <td><strong>Planned</strong></td>
2382
  <td>an image encoder into the shared space</td>
2383
  </tr>
2384
  <tr>
2385
  <td>Text</td>
2386
- <td><strong>Planned</strong></td>
2387
  <td>a text encoder into the shared space</td>
2388
  </tr>
2389
  </tbody>
2390
  </table>
2391
- <p>The same statuses, generated from the code, are on the <a href="../explore/capabilities.html">capabilities page</a>.</p>
2392
  </details>
2393
  <h2 id="five-challenges">3. Five challenges of multimodal learning<a class="headerlink" href="#five-challenges" title="Permanent link">&para;</a></h2>
2394
  <p>Baltruลกaitis, Ahuja and Morency organise multimodal machine learning around five challenges. Every multimodal model
@@ -2399,7 +2399,7 @@ answers each of them in some way, even if only by leaving it out.</p>
2399
  <th>challenge</th>
2400
  <th>the question</th>
2401
  <th>a materials example</th>
2402
- <th>the answer in MEIDNet</th>
2403
  </tr>
2404
  </thead>
2405
  <tbody>
@@ -2436,7 +2436,8 @@ answers each of them in some way, even if only by leaving it out.</p>
2436
  </tbody>
2437
  </table>
2438
  <p><em>Further reading:</em> Baltruลกaitis <em>et al.</em> 2019 (the taxonomy) ยท Guo <em>et al.</em> 2019 (deep multimodal
2439
- representation learning) ยท Ngiam <em>et al.</em> 2011 (shared representations between modalities).</p>
 
2440
  <h2 id="contrastive-learning">4. Contrastive learning: how two modalities are aligned<a class="headerlink" href="#contrastive-learning" title="Permanent link">&para;</a></h2>
2441
  <p>Take a batch of <span class="arithmatex">\(N\)</span> materials. Each gives two vectors of length one: <span class="arithmatex">\(z_c\)</span> from its structure and <span class="arithmatex">\(z_p\)</span> from its
2442
  properties. The dot product of two such vectors is their cosine similarity. Lay out all <span class="arithmatex">\(N \times N\)</span> similarities
@@ -2490,7 +2491,7 @@ latents are pulled together. After training, the <a href="../use/reports.html">t
2490
  <em>retrieval</em>: how often the nearest property vector to a structure is its own (top 1) or among the five nearest
2491
  (top 5). The Studio's Model block plots the mean cosine between matched pairs during training.</p>
2492
  <p>The same loss pairs pictures with their captions in CLIP; MEIDNet pairs crystals with their properties.</p>
2493
- <p><em>Further reading:</em> van den Oord <em>et al.</em> 2018 (InfoNCE) ยท Radford <em>et al.</em> 2021 (CLIP) ยท
2494
  <a href="architectures.html#contrastive">Contrastive learning in the Architecture Atlas</a>.</p>
2495
  <h2 id="inverse-design">5. From a shared space to inverse design<a class="headerlink" href="#inverse-design" title="Permanent link">&para;</a></h2>
2496
  <p>Once both modalities live in one space, a point in it can be read in both directions. MEIDNet makes the reverse
@@ -2509,8 +2510,9 @@ alone</strong>. A vector of wanted properties can then be encoded and decoded in
2509
  <p>The full objective and every step are in <a href="../understand/how-it-works.html">How MEIDNet works</a>. Two limits matter:
2510
  MEIDNet does not invent new atomic arrangements, and its predicted properties are estimates to confirm with DFT or
2511
  experiment (<a href="../understand/limits.html">scope and roadmap</a>).</p>
2512
- <p><em>Further reading:</em> the MEIDNet paper (Babu <em>et al.</em> 2026) ยท Moro, Loh <em>et al.</em> 2025 (multimodal foundation models
2513
- for materials).</p>
 
2514
  <h2 id="where-next">6. Where to go next<a class="headerlink" href="#where-next" title="Permanent link">&para;</a></h2>
2515
  <div class="grid cards">
2516
  <ul>
@@ -2556,6 +2558,11 @@ with an advisor that recommends one for your data.</p>
2556
  <a href="https://arxiv.org/abs/2102.09844">arXiv:2102.09844</a></li>
2557
  <li>V. Moro, C. Loh <em>et al.</em>, "Multimodal foundation models for material property prediction and discovery",
2558
  <em>Newton</em> (2025). <a href="https://doi.org/10.1016/j.newton.2025.100016">doi:10.1016/j.newton.2025.100016</a></li>
 
 
 
 
 
2559
  <li>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, "MEIDNet: Multimodal generative AI framework for
2560
  inverse materials design", <em>npj Comput. Mater.</em> (2026). <a href="https://doi.org/10.1038/s41524-026-02153-3">doi:10.1038/s41524-026-02153-3</a></li>
2561
  </ul>
 
828
  <span class="md-ellipsis">
829
 
830
 
831
+ MEIDNet Studio
832
 
833
 
834
 
 
1027
  <span class="md-ellipsis">
1028
 
1029
 
1030
+ Capabilities
1031
 
1032
 
1033
 
 
1736
  <span class="md-ellipsis">
1737
 
1738
 
1739
+ Interpreting a candidate
1740
 
1741
 
1742
 
 
2254
  <p>A material can be described in many ways: by its atoms and their positions, by a formula, by measured or computed
2255
  properties, by a diffraction pattern, a spectrum, a micrograph or a paragraph in a paper. Each way of describing it
2256
  is a <strong>modality</strong>. Multimodal learning trains one model on several modalities of the same materials, so that it can
2257
+ connect them: read a structure and predict a property, or start from the properties you want and propose a
2258
+ structure, which is what MEIDNet does.</p>
2259
+ <p>This short course takes about ten minutes. It covers the main ideas of multimodal learning for materials and, for
2260
+ each, how MEIDNet implements it. For a full review, see Babu and Krishnan (2026).</p>
2261
  <div class="learn-steps">
2262
  <ol>
2263
  <li><a href="#what-is-a-modality">What is a modality?</a></li>
 
2331
  <p><strong>What it needs:</strong> <em>paired</em> data, where several modalities describe the same material. In Perov-5, every one of the
2332
  18,928 structures comes with its DFT band gap and formation enthalpy, which makes it a two-modality dataset.</p>
2333
  <h2 id="the-multimodality-map">2. The multimodality map<a class="headerlink" href="#the-multimodality-map" title="Permanent link">&para;</a></h2>
2334
+ <p>Select a modality to see what it contains, which networks encode it, how it is combined with other modalities and
2335
+ how MEIDNet handles it. The centre describes the shared representation.</p>
2336
  <div class="mm" id="mm-map" aria-label="Interactive map of materials modalities"></div>
2337
 
2338
  <details class="note">
 
2341
  <thead>
2342
  <tr>
2343
  <th>modality</th>
2344
+ <th>MEIDNet</th>
2345
  <th>how</th>
2346
  </tr>
2347
  </thead>
2348
  <tbody>
2349
  <tr>
2350
  <td>Crystal structure</td>
2351
+ <td>available</td>
2352
  <td>an E(n)-equivariant graph network (EGNN) encodes up to <code>max_sites</code> atoms (default 20)</td>
2353
  </tr>
2354
  <tr>
2355
  <td>Scalar properties</td>
2356
+ <td>available</td>
2357
  <td>all numeric columns form one vector, read by one MLP; every column becomes a target</td>
2358
  </tr>
2359
  <tr>
2360
  <td>Composition</td>
2361
+ <td>via the structure</td>
2362
  <td>the element on each site is part of the structure; formula-only data needs a composition model</td>
2363
  </tr>
2364
  <tr>
2365
  <td>Processing conditions</td>
2366
+ <td>partial</td>
2367
  <td>numeric conditions can be extra scalar columns, encoded together with the properties</td>
2368
  </tr>
2369
  <tr>
2370
  <td>Diffraction (XRD)</td>
2371
+ <td>planned</td>
2372
  <td>a vector-modality encoder for binned patterns, first item of the <a href="../understand/limits.html">roadmap</a></td>
2373
  </tr>
2374
  <tr>
2375
  <td>Spectra and DOS</td>
2376
+ <td>planned</td>
2377
  <td>as vector modalities</td>
2378
  </tr>
2379
  <tr>
2380
  <td>Microscopy images</td>
2381
+ <td>planned</td>
2382
  <td>an image encoder into the shared space</td>
2383
  </tr>
2384
  <tr>
2385
  <td>Text</td>
2386
+ <td>planned</td>
2387
  <td>a text encoder into the shared space</td>
2388
  </tr>
2389
  </tbody>
2390
  </table>
2391
+ <p>The <a href="../explore/capabilities.html">capabilities page</a> lists the same information, generated from the code.</p>
2392
  </details>
2393
  <h2 id="five-challenges">3. Five challenges of multimodal learning<a class="headerlink" href="#five-challenges" title="Permanent link">&para;</a></h2>
2394
  <p>Baltruลกaitis, Ahuja and Morency organise multimodal machine learning around five challenges. Every multimodal model
 
2399
  <th>challenge</th>
2400
  <th>the question</th>
2401
  <th>a materials example</th>
2402
+ <th>in MEIDNet</th>
2403
  </tr>
2404
  </thead>
2405
  <tbody>
 
2436
  </tbody>
2437
  </table>
2438
  <p><em>Further reading:</em> Baltruลกaitis <em>et al.</em> 2019 (the taxonomy) ยท Guo <em>et al.</em> 2019 (deep multimodal
2439
+ representation learning) ยท Ngiam <em>et al.</em> 2011 (shared representations between modalities) ยท Babu and Krishnan
2440
+ 2026 (multimodal and cross-modal learning techniques).</p>
2441
  <h2 id="contrastive-learning">4. Contrastive learning: how two modalities are aligned<a class="headerlink" href="#contrastive-learning" title="Permanent link">&para;</a></h2>
2442
  <p>Take a batch of <span class="arithmatex">\(N\)</span> materials. Each gives two vectors of length one: <span class="arithmatex">\(z_c\)</span> from its structure and <span class="arithmatex">\(z_p\)</span> from its
2443
  properties. The dot product of two such vectors is their cosine similarity. Lay out all <span class="arithmatex">\(N \times N\)</span> similarities
 
2491
  <em>retrieval</em>: how often the nearest property vector to a structure is its own (top 1) or among the five nearest
2492
  (top 5). The Studio's Model block plots the mean cosine between matched pairs during training.</p>
2493
  <p>The same loss pairs pictures with their captions in CLIP; MEIDNet pairs crystals with their properties.</p>
2494
+ <p><em>Further reading:</em> van den Oord <em>et al.</em> 2018 (InfoNCE) ยท Radford <em>et al.</em> 2021 (CLIP) ยท Babu and Krishnan 2026 ยท
2495
  <a href="architectures.html#contrastive">Contrastive learning in the Architecture Atlas</a>.</p>
2496
  <h2 id="inverse-design">5. From a shared space to inverse design<a class="headerlink" href="#inverse-design" title="Permanent link">&para;</a></h2>
2497
  <p>Once both modalities live in one space, a point in it can be read in both directions. MEIDNet makes the reverse
 
2510
  <p>The full objective and every step are in <a href="../understand/how-it-works.html">How MEIDNet works</a>. Two limits matter:
2511
  MEIDNet does not invent new atomic arrangements, and its predicted properties are estimates to confirm with DFT or
2512
  experiment (<a href="../understand/limits.html">scope and roadmap</a>).</p>
2513
+ <p><em>Further reading:</em> the MEIDNet paper (Babu <em>et al.</em> 2026) ยท Babu, Gouvรชa and Rignanese 2026 (generative models,
2514
+ multimodal learning and closed-loop workflows in inverse materials design) ยท Moro, Loh <em>et al.</em> 2025 (multimodal
2515
+ foundation models for materials).</p>
2516
  <h2 id="where-next">6. Where to go next<a class="headerlink" href="#where-next" title="Permanent link">&para;</a></h2>
2517
  <div class="grid cards">
2518
  <ul>
 
2558
  <a href="https://arxiv.org/abs/2102.09844">arXiv:2102.09844</a></li>
2559
  <li>V. Moro, C. Loh <em>et al.</em>, "Multimodal foundation models for material property prediction and discovery",
2560
  <em>Newton</em> (2025). <a href="https://doi.org/10.1016/j.newton.2025.100016">doi:10.1016/j.newton.2025.100016</a></li>
2561
+ <li>A. Babu, N. M. A. Krishnan, "Multimodal and cross-modal learning techniques", <em>APL Mach. Learn.</em> <strong>4</strong>, 030901
2562
+ (2026). <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a></li>
2563
+ <li>A. Babu, R. Almeida Gouvรชa, G.-M. Rignanese, "Toward automated discovery with generative models multimodal
2564
+ learning and closed loop workflows in inverse materials design", <em>Cell Rep. Phys. Sci.</em> <strong>7</strong>, 103561 (2026).
2565
+ <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a></li>
2566
  <li>A. Babu, R. Almeida Gouvรชa, P. Vandergheynst, G.-M. Rignanese, "MEIDNet: Multimodal generative AI framework for
2567
  inverse materials design", <em>npj Comput. Mater.</em> (2026). <a href="https://doi.org/10.1038/s41524-026-02153-3">doi:10.1038/s41524-026-02153-3</a></li>
2568
  </ul>
site/learn/recipes.html CHANGED
@@ -839,7 +839,7 @@
839
  <span class="md-ellipsis">
840
 
841
 
842
- MEIDNet Studio (live workbench)
843
 
844
 
845
 
@@ -1038,7 +1038,7 @@
1038
  <span class="md-ellipsis">
1039
 
1040
 
1041
- Capabilities (what works today)
1042
 
1043
 
1044
 
@@ -1747,7 +1747,7 @@
1747
  <span class="md-ellipsis">
1748
 
1749
 
1750
- Why you can trust (or not) a candidate
1751
 
1752
 
1753
 
@@ -2273,9 +2273,9 @@
2273
 
2274
 
2275
  <h1 id="recipes-by-problem">Recipes by problem<a class="headerlink" href="#recipes-by-problem" title="Permanent link">&para;</a></h1>
2276
- <p>Start from a research question. Each recipe goes <strong>problem โ†’ architecture โ†’ why โ†’ data โ†’ configuration โ†’ tutorial
2277
- โ†’ references</strong>, and says plainly whether MEIDNet does it today. Where it does not, the recipe points to the kind of
2278
- model that does.</p>
2279
  <p>For step-by-step changes to a MEIDNet configuration (another target, another family, a new rule), see the
2280
  <a href="../recipes/change-targets.html">how-to guides</a>.</p>
2281
  <table>
@@ -2283,49 +2283,48 @@ model that does.</p>
2283
  <tr>
2284
  <th>problem</th>
2285
  <th>architecture</th>
2286
- <th>MEIDNet today</th>
2287
  </tr>
2288
  </thead>
2289
  <tbody>
2290
  <tr>
2291
  <td><a href="#target-band-gap">Perovskites with a target band gap that are likely to be stable</a></td>
2292
  <td>shared latent + contrastive</td>
2293
- <td><span class="mstatus sup">Supported</span></td>
2294
  </tr>
2295
  <tr>
2296
  <td><a href="#own-family">Candidates from your own DFT results for one family</a></td>
2297
  <td>shared latent + contrastive</td>
2298
- <td><span class="mstatus sup">Supported</span></td>
2299
  </tr>
2300
  <tr>
2301
  <td><a href="#screen-family">Screen a whole family for a target before searching</a></td>
2302
  <td>structure encoder of the shared space</td>
2303
- <td><span class="mstatus sup">Supported</span></td>
2304
  </tr>
2305
  <tr>
2306
  <td><a href="#xrd-structure">Identify the crystal structure from an XRD pattern</a></td>
2307
  <td>1D convolutional network; contrastive pattern โ†” structure</td>
2308
- <td><span class="mstatus plan">Planned</span></td>
2309
  </tr>
2310
  <tr>
2311
  <td><a href="#formula-only">Predict a property when only the formula is known</a></td>
2312
  <td>composition network</td>
2313
- <td><span class="mstatus no">Use another tool</span></td>
2314
  </tr>
2315
  <tr>
2316
  <td><a href="#synthesis-text">Connect synthesis text with structures</a></td>
2317
  <td>text encoder + contrastive or cross-attention</td>
2318
- <td><span class="mstatus plan">Planned</span></td>
2319
  </tr>
2320
  <tr>
2321
  <td><a href="#new-arrangements">Design new atomic arrangements</a></td>
2322
  <td>conditional generative model over full geometry</td>
2323
- <td><span class="mstatus no">Use another tool</span></td>
2324
  </tr>
2325
  </tbody>
2326
  </table>
2327
  <h2 id="target-band-gap">Perovskites with a target band gap that are likely to be stable<a class="headerlink" href="#target-band-gap" title="Permanent link">&para;</a></h2>
2328
- <p><span class="mstatus sup">Supported in MEIDNet</span></p>
2329
  <table>
2330
  <thead>
2331
  <tr>
@@ -2351,12 +2350,16 @@ model that does.</p>
2351
  <td>Perov-5: 18,928 structures with DFT band gap and formation enthalpy (<a href="../explore/datasets.html">dataset card</a>). The published checkpoint is trained on it.</td>
2352
  </tr>
2353
  <tr>
 
 
 
 
2354
  <td><strong>Tutorial</strong></td>
2355
  <td><a href="../examples/perov5.html">The paper's experiment</a> ยท in the browser: <a href="https://babu09-meidnet.hf.space/studio/?panel=targets">Studio, Targets block</a> ยท <a href="../recipes/screen.html">screen the candidates with MACE</a></td>
2356
  </tr>
2357
  <tr>
2358
  <td><strong>References</strong></td>
2359
- <td>Babu <em>et al.</em> 2026 (MEIDNet); Castelli <em>et al.</em> 2012 (the dataset).</td>
2360
  </tr>
2361
  </tbody>
2362
  </table>
@@ -2374,7 +2377,6 @@ model that does.</p>
2374
  <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">dir_gap</span><span class="p">:</span><span class="w"> </span><span class="nv">1.5</span><span class="p p-Indicator">,</span><span class="nt"> heat_all</span><span class="p">:</span><span class="w"> </span><span class="nv">-0.10</span><span class="p p-Indicator">}</span>
2375
  </code></pre></div>
2376
  <h2 id="own-family">Candidates from your own DFT results for one family<a class="headerlink" href="#own-family" title="Permanent link">&para;</a></h2>
2377
- <p><span class="mstatus sup">Supported in MEIDNet</span></p>
2378
  <table>
2379
  <thead>
2380
  <tr>
@@ -2400,12 +2402,16 @@ model that does.</p>
2400
  <td>A table with an id, numeric property columns and one CIF per row. Public sources by application are on <a href="../explore/databases.html">Databases by application</a>.</td>
2401
  </tr>
2402
  <tr>
 
 
 
 
2403
  <td><strong>Tutorial</strong></td>
2404
  <td><a href="../use/your-data.html">Bring your own dataset</a> ยท in the browser: <a href="https://babu09-meidnet.hf.space/studio/?panel=data">Studio, Data block</a> ยท <a href="../recipes/change-family.html">change the material family</a></td>
2405
  </tr>
2406
  <tr>
2407
  <td><strong>References</strong></td>
2408
- <td>Babu <em>et al.</em> 2026.</td>
2409
  </tr>
2410
  </tbody>
2411
  </table>
@@ -2427,7 +2433,6 @@ model that does.</p>
2427
  </code></pre></div>
2428
  <p>Then <code>meidnet check</code> โ†’ <code>meidnet train</code> โ†’ <code>meidnet generate</code>; each step writes a report.</p>
2429
  <h2 id="screen-family">Screen a whole family for a target before searching<a class="headerlink" href="#screen-family" title="Permanent link">&para;</a></h2>
2430
- <p><span class="mstatus sup">Supported in MEIDNet</span></p>
2431
  <table>
2432
  <thead>
2433
  <tr>
@@ -2450,7 +2455,11 @@ model that does.</p>
2450
  </tr>
2451
  <tr>
2452
  <td><strong>Data</strong></td>
2453
- <td>A trained model and a family; nothing else.</td>
 
 
 
 
2454
  </tr>
2455
  <tr>
2456
  <td><strong>Tutorial</strong></td>
@@ -2458,14 +2467,13 @@ model that does.</p>
2458
  </tr>
2459
  <tr>
2460
  <td><strong>References</strong></td>
2461
- <td>Babu <em>et al.</em> 2026.</td>
2462
  </tr>
2463
  </tbody>
2464
  </table>
2465
  <div class="highlight"><pre><span></span><code>meidnet<span class="w"> </span>space<span class="w"> </span>examples/perov5/meidnet.yaml<span class="w"> </span>--model<span class="w"> </span>checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth<span class="w"> </span>-o<span class="w"> </span>space.csv
2466
  </code></pre></div>
2467
  <h2 id="xrd-structure">Identify the crystal structure from an XRD pattern<a class="headerlink" href="#xrd-structure" title="Permanent link">&para;</a></h2>
2468
- <p><span class="mstatus plan">Planned in MEIDNet</span></p>
2469
  <table>
2470
  <thead>
2471
  <tr>
@@ -2480,7 +2488,7 @@ model that does.</p>
2480
  </tr>
2481
  <tr>
2482
  <td><strong>Architecture</strong></td>
2483
- <td>Today: a 1D convolutional classifier on the pattern (one modality). Multimodal: a pattern encoder aligned with a structure encoder by <a href="architectures.html#contrastive">contrastive learning</a>, so a pattern retrieves the structures it matches.</td>
2484
  </tr>
2485
  <tr>
2486
  <td><strong>Why</strong></td>
@@ -2491,17 +2499,16 @@ model that does.</p>
2491
  <td>Simulate patterns from computed or experimental structures (<a href="../explore/databases.html#semiconductor-physics">semiconductor physics</a>, <a href="../explore/databases.html#all-databases">all databases</a>), for example with pymatgen's XRD calculator; validate on measured patterns.</td>
2492
  </tr>
2493
  <tr>
2494
- <td><strong>In MEIDNet</strong></td>
2495
- <td>A vector-modality encoder for binned XRD is the first item of the <a href="../understand/limits.html">roadmap</a>. It is not implemented.</td>
2496
  </tr>
2497
  <tr>
2498
  <td><strong>References</strong></td>
2499
- <td>Park <em>et al.</em> 2017; Baltruลกaitis <em>et al.</em> 2019.</td>
2500
  </tr>
2501
  </tbody>
2502
  </table>
2503
  <h2 id="formula-only">Predict a property when only the formula is known<a class="headerlink" href="#formula-only" title="Permanent link">&para;</a></h2>
2504
- <p><span class="mstatus no">Use another tool</span></p>
2505
  <table>
2506
  <thead>
2507
  <tr>
@@ -2520,20 +2527,23 @@ model that does.</p>
2520
  </tr>
2521
  <tr>
2522
  <td><strong>Why</strong></td>
2523
- <td>MEIDNet needs a structure for every row. If your formulas all sit on one prototype (for example ABXโ‚ƒ), you can build those structures on the prototype and use MEIDNet; otherwise a composition model is the right tool.</td>
2524
  </tr>
2525
  <tr>
2526
  <td><strong>Data</strong></td>
2527
  <td>Experimental band gaps and Matbench tasks are listed on <a href="../explore/databases.html#semiconductor-physics">Databases by application</a>.</td>
2528
  </tr>
2529
  <tr>
 
 
 
 
2530
  <td><strong>References</strong></td>
2531
  <td>Goodall and Lee 2020 (Roost); Dunn <em>et al.</em> 2020 (Matbench).</td>
2532
  </tr>
2533
  </tbody>
2534
  </table>
2535
  <h2 id="synthesis-text">Connect synthesis text with structures<a class="headerlink" href="#synthesis-text" title="Permanent link">&para;</a></h2>
2536
- <p><span class="mstatus plan">Planned in MEIDNet</span></p>
2537
  <table>
2538
  <thead>
2539
  <tr>
@@ -2559,17 +2569,16 @@ model that does.</p>
2559
  <td>Text-mined synthesis recipes (Kononova <em>et al.</em> 2019) paired with structures from a structure database.</td>
2560
  </tr>
2561
  <tr>
2562
- <td><strong>In MEIDNet</strong></td>
2563
- <td>A text encoder into the shared space is planned, not implemented.</td>
2564
  </tr>
2565
  <tr>
2566
  <td><strong>References</strong></td>
2567
- <td>Kononova <em>et al.</em> 2019; Moro, Loh <em>et al.</em> 2025.</td>
2568
  </tr>
2569
  </tbody>
2570
  </table>
2571
  <h2 id="new-arrangements">Design new atomic arrangements<a class="headerlink" href="#new-arrangements" title="Permanent link">&para;</a></h2>
2572
- <p><span class="mstatus no">Use another tool</span></p>
2573
  <table>
2574
  <thead>
2575
  <tr>
@@ -2595,8 +2604,12 @@ model that does.</p>
2595
  <td>Large structure databases; the generative benchmarks are listed under <a href="../explore/databases.html#generative-model-benchmarks">generative-model benchmarks</a>.</td>
2596
  </tr>
2597
  <tr>
 
 
 
 
2598
  <td><strong>References</strong></td>
2599
- <td>Zeni <em>et al.</em> 2025 (MatterGen); Xie <em>et al.</em> 2022 (CDVAE).</td>
2600
  </tr>
2601
  </tbody>
2602
  </table>
@@ -2614,6 +2627,11 @@ model that does.</p>
2614
  test set and Automatminer reference algorithm", <em>npj Comput. Mater.</em> <strong>6</strong>, 138 (2020). <a href="https://doi.org/10.1038/s41524-020-00406-3">doi:10.1038/s41524-020-00406-3</a></li>
2615
  <li>O. Kononova <em>et al.</em>, "Text-mined dataset of inorganic materials synthesis recipes", <em>Sci. Data</em> <strong>6</strong>, 203 (2019).
2616
  <a href="https://doi.org/10.1038/s41597-019-0224-1">doi:10.1038/s41597-019-0224-1</a></li>
 
 
 
 
 
2617
  <li>C. Zeni <em>et al.</em>, "A generative model for inorganic materials design", <em>Nature</em> <strong>639</strong>, 624โ€“632 (2025).
2618
  <a href="https://doi.org/10.1038/s41586-025-08628-5">doi:10.1038/s41586-025-08628-5</a></li>
2619
  <li>T. Xie <em>et al.</em>, "Crystal diffusion variational autoencoder for periodic material generation", <em>ICLR</em> (2022).
 
839
  <span class="md-ellipsis">
840
 
841
 
842
+ MEIDNet Studio
843
 
844
 
845
 
 
1038
  <span class="md-ellipsis">
1039
 
1040
 
1041
+ Capabilities
1042
 
1043
 
1044
 
 
1747
  <span class="md-ellipsis">
1748
 
1749
 
1750
+ Interpreting a candidate
1751
 
1752
 
1753
 
 
2273
 
2274
 
2275
  <h1 id="recipes-by-problem">Recipes by problem<a class="headerlink" href="#recipes-by-problem" title="Permanent link">&para;</a></h1>
2276
+ <p>Start from a research question. Each recipe goes <strong>problem โ†’ architecture โ†’ why โ†’ data โ†’ implementation โ†’
2277
+ tutorial โ†’ references</strong>. The implementation is MEIDNet where it applies; otherwise the recipe names established
2278
+ alternatives.</p>
2279
  <p>For step-by-step changes to a MEIDNet configuration (another target, another family, a new rule), see the
2280
  <a href="../recipes/change-targets.html">how-to guides</a>.</p>
2281
  <table>
 
2283
  <tr>
2284
  <th>problem</th>
2285
  <th>architecture</th>
2286
+ <th>implementation</th>
2287
  </tr>
2288
  </thead>
2289
  <tbody>
2290
  <tr>
2291
  <td><a href="#target-band-gap">Perovskites with a target band gap that are likely to be stable</a></td>
2292
  <td>shared latent + contrastive</td>
2293
+ <td>MEIDNet</td>
2294
  </tr>
2295
  <tr>
2296
  <td><a href="#own-family">Candidates from your own DFT results for one family</a></td>
2297
  <td>shared latent + contrastive</td>
2298
+ <td>MEIDNet</td>
2299
  </tr>
2300
  <tr>
2301
  <td><a href="#screen-family">Screen a whole family for a target before searching</a></td>
2302
  <td>structure encoder of the shared space</td>
2303
+ <td>MEIDNet</td>
2304
  </tr>
2305
  <tr>
2306
  <td><a href="#xrd-structure">Identify the crystal structure from an XRD pattern</a></td>
2307
  <td>1D convolutional network; contrastive pattern โ†” structure</td>
2308
+ <td>1D CNN classifiers; pattern encoder planned for MEIDNet</td>
2309
  </tr>
2310
  <tr>
2311
  <td><a href="#formula-only">Predict a property when only the formula is known</a></td>
2312
  <td>composition network</td>
2313
+ <td>Roost and similar composition models</td>
2314
  </tr>
2315
  <tr>
2316
  <td><a href="#synthesis-text">Connect synthesis text with structures</a></td>
2317
  <td>text encoder + contrastive or cross-attention</td>
2318
+ <td>text encoder planned for MEIDNet</td>
2319
  </tr>
2320
  <tr>
2321
  <td><a href="#new-arrangements">Design new atomic arrangements</a></td>
2322
  <td>conditional generative model over full geometry</td>
2323
+ <td>MatterGen, CDVAE</td>
2324
  </tr>
2325
  </tbody>
2326
  </table>
2327
  <h2 id="target-band-gap">Perovskites with a target band gap that are likely to be stable<a class="headerlink" href="#target-band-gap" title="Permanent link">&para;</a></h2>
 
2328
  <table>
2329
  <thead>
2330
  <tr>
 
2350
  <td>Perov-5: 18,928 structures with DFT band gap and formation enthalpy (<a href="../explore/datasets.html">dataset card</a>). The published checkpoint is trained on it.</td>
2351
  </tr>
2352
  <tr>
2353
+ <td><strong>Implementation</strong></td>
2354
+ <td>MEIDNet: <code>meidnet demo</code>, <code>meidnet generate</code> or the Studio's Targets and Search blocks.</td>
2355
+ </tr>
2356
+ <tr>
2357
  <td><strong>Tutorial</strong></td>
2358
  <td><a href="../examples/perov5.html">The paper's experiment</a> ยท in the browser: <a href="https://babu09-meidnet.hf.space/studio/?panel=targets">Studio, Targets block</a> ยท <a href="../recipes/screen.html">screen the candidates with MACE</a></td>
2359
  </tr>
2360
  <tr>
2361
  <td><strong>References</strong></td>
2362
+ <td>Babu <em>et al.</em> 2026 (MEIDNet); Castelli <em>et al.</em> 2012 (the dataset); Babu, Gouvรชa and Rignanese 2026 (review of inverse design).</td>
2363
  </tr>
2364
  </tbody>
2365
  </table>
 
2377
  <span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">dir_gap</span><span class="p">:</span><span class="w"> </span><span class="nv">1.5</span><span class="p p-Indicator">,</span><span class="nt"> heat_all</span><span class="p">:</span><span class="w"> </span><span class="nv">-0.10</span><span class="p p-Indicator">}</span>
2378
  </code></pre></div>
2379
  <h2 id="own-family">Candidates from your own DFT results for one family<a class="headerlink" href="#own-family" title="Permanent link">&para;</a></h2>
 
2380
  <table>
2381
  <thead>
2382
  <tr>
 
2402
  <td>A table with an id, numeric property columns and one CIF per row. Public sources by application are on <a href="../explore/databases.html">Databases by application</a>.</td>
2403
  </tr>
2404
  <tr>
2405
+ <td><strong>Implementation</strong></td>
2406
+ <td>MEIDNet: <code>meidnet init</code>, <code>check</code>, <code>train</code>, <code>generate</code>, or the Studio's Data and Model blocks.</td>
2407
+ </tr>
2408
+ <tr>
2409
  <td><strong>Tutorial</strong></td>
2410
  <td><a href="../use/your-data.html">Bring your own dataset</a> ยท in the browser: <a href="https://babu09-meidnet.hf.space/studio/?panel=data">Studio, Data block</a> ยท <a href="../recipes/change-family.html">change the material family</a></td>
2411
  </tr>
2412
  <tr>
2413
  <td><strong>References</strong></td>
2414
+ <td>Babu <em>et al.</em> 2026 (MEIDNet).</td>
2415
  </tr>
2416
  </tbody>
2417
  </table>
 
2433
  </code></pre></div>
2434
  <p>Then <code>meidnet check</code> โ†’ <code>meidnet train</code> โ†’ <code>meidnet generate</code>; each step writes a report.</p>
2435
  <h2 id="screen-family">Screen a whole family for a target before searching<a class="headerlink" href="#screen-family" title="Permanent link">&para;</a></h2>
 
2436
  <table>
2437
  <thead>
2438
  <tr>
 
2455
  </tr>
2456
  <tr>
2457
  <td><strong>Data</strong></td>
2458
+ <td>A trained model and a family.</td>
2459
+ </tr>
2460
+ <tr>
2461
+ <td><strong>Implementation</strong></td>
2462
+ <td>MEIDNet: <code>meidnet space</code> or the Studio's design-space view.</td>
2463
  </tr>
2464
  <tr>
2465
  <td><strong>Tutorial</strong></td>
 
2467
  </tr>
2468
  <tr>
2469
  <td><strong>References</strong></td>
2470
+ <td>Babu <em>et al.</em> 2026 (MEIDNet).</td>
2471
  </tr>
2472
  </tbody>
2473
  </table>
2474
  <div class="highlight"><pre><span></span><code>meidnet<span class="w"> </span>space<span class="w"> </span>examples/perov5/meidnet.yaml<span class="w"> </span>--model<span class="w"> </span>checkpoints/dual_autoencoder_clip_earlyfusion_propertyaware_2k.pth<span class="w"> </span>-o<span class="w"> </span>space.csv
2475
  </code></pre></div>
2476
  <h2 id="xrd-structure">Identify the crystal structure from an XRD pattern<a class="headerlink" href="#xrd-structure" title="Permanent link">&para;</a></h2>
 
2477
  <table>
2478
  <thead>
2479
  <tr>
 
2488
  </tr>
2489
  <tr>
2490
  <td><strong>Architecture</strong></td>
2491
+ <td>A 1D convolutional classifier on the pattern (one modality). Multimodal: a pattern encoder aligned with a structure encoder by <a href="architectures.html#contrastive">contrastive learning</a>, so a pattern retrieves the structures it matches.</td>
2492
  </tr>
2493
  <tr>
2494
  <td><strong>Why</strong></td>
 
2499
  <td>Simulate patterns from computed or experimental structures (<a href="../explore/databases.html#semiconductor-physics">semiconductor physics</a>, <a href="../explore/databases.html#all-databases">all databases</a>), for example with pymatgen's XRD calculator; validate on measured patterns.</td>
2500
  </tr>
2501
  <tr>
2502
+ <td><strong>Implementation</strong></td>
2503
+ <td>1D convolutional classifiers such as Park <em>et al.</em> (2017). In MEIDNet, an encoder for binned XRD patterns is the first item of the <a href="../understand/limits.html">roadmap</a> and is not yet available.</td>
2504
  </tr>
2505
  <tr>
2506
  <td><strong>References</strong></td>
2507
+ <td>Park <em>et al.</em> 2017; Baltruลกaitis <em>et al.</em> 2019; Babu and Krishnan 2026.</td>
2508
  </tr>
2509
  </tbody>
2510
  </table>
2511
  <h2 id="formula-only">Predict a property when only the formula is known<a class="headerlink" href="#formula-only" title="Permanent link">&para;</a></h2>
 
2512
  <table>
2513
  <thead>
2514
  <tr>
 
2527
  </tr>
2528
  <tr>
2529
  <td><strong>Why</strong></td>
2530
+ <td>MEIDNet needs a structure for every row. If your formulas all sit on one prototype (for example ABXโ‚ƒ), you can build those structures on the prototype and use MEIDNet; otherwise a composition model is the appropriate choice.</td>
2531
  </tr>
2532
  <tr>
2533
  <td><strong>Data</strong></td>
2534
  <td>Experimental band gaps and Matbench tasks are listed on <a href="../explore/databases.html#semiconductor-physics">Databases by application</a>.</td>
2535
  </tr>
2536
  <tr>
2537
+ <td><strong>Implementation</strong></td>
2538
+ <td>Roost or another composition model; outside MEIDNet, which requires a crystal structure per material.</td>
2539
+ </tr>
2540
+ <tr>
2541
  <td><strong>References</strong></td>
2542
  <td>Goodall and Lee 2020 (Roost); Dunn <em>et al.</em> 2020 (Matbench).</td>
2543
  </tr>
2544
  </tbody>
2545
  </table>
2546
  <h2 id="synthesis-text">Connect synthesis text with structures<a class="headerlink" href="#synthesis-text" title="Permanent link">&para;</a></h2>
 
2547
  <table>
2548
  <thead>
2549
  <tr>
 
2569
  <td>Text-mined synthesis recipes (Kononova <em>et al.</em> 2019) paired with structures from a structure database.</td>
2570
  </tr>
2571
  <tr>
2572
+ <td><strong>Implementation</strong></td>
2573
+ <td>A text encoder that maps into MEIDNet's shared space is planned and not yet available.</td>
2574
  </tr>
2575
  <tr>
2576
  <td><strong>References</strong></td>
2577
+ <td>Kononova <em>et al.</em> 2019; Moro, Loh <em>et al.</em> 2025; Babu and Krishnan 2026.</td>
2578
  </tr>
2579
  </tbody>
2580
  </table>
2581
  <h2 id="new-arrangements">Design new atomic arrangements<a class="headerlink" href="#new-arrangements" title="Permanent link">&para;</a></h2>
 
2582
  <table>
2583
  <thead>
2584
  <tr>
 
2604
  <td>Large structure databases; the generative benchmarks are listed under <a href="../explore/databases.html#generative-model-benchmarks">generative-model benchmarks</a>.</td>
2605
  </tr>
2606
  <tr>
2607
+ <td><strong>Implementation</strong></td>
2608
+ <td>MatterGen, CDVAE and related generative models.</td>
2609
+ </tr>
2610
+ <tr>
2611
  <td><strong>References</strong></td>
2612
+ <td>Zeni <em>et al.</em> 2025 (MatterGen); Xie <em>et al.</em> 2022 (CDVAE); Babu, Gouvรชa and Rignanese 2026 (review).</td>
2613
  </tr>
2614
  </tbody>
2615
  </table>
 
2627
  test set and Automatminer reference algorithm", <em>npj Comput. Mater.</em> <strong>6</strong>, 138 (2020). <a href="https://doi.org/10.1038/s41524-020-00406-3">doi:10.1038/s41524-020-00406-3</a></li>
2628
  <li>O. Kononova <em>et al.</em>, "Text-mined dataset of inorganic materials synthesis recipes", <em>Sci. Data</em> <strong>6</strong>, 203 (2019).
2629
  <a href="https://doi.org/10.1038/s41597-019-0224-1">doi:10.1038/s41597-019-0224-1</a></li>
2630
+ <li>A. Babu, N. M. A. Krishnan, "Multimodal and cross-modal learning techniques", <em>APL Mach. Learn.</em> <strong>4</strong>, 030901
2631
+ (2026). <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a></li>
2632
+ <li>A. Babu, R. Almeida Gouvรชa, G.-M. Rignanese, "Toward automated discovery with generative models multimodal
2633
+ learning and closed loop workflows in inverse materials design", <em>Cell Rep. Phys. Sci.</em> <strong>7</strong>, 103561 (2026).
2634
+ <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a></li>
2635
  <li>C. Zeni <em>et al.</em>, "A generative model for inorganic materials design", <em>Nature</em> <strong>639</strong>, 624โ€“632 (2025).
2636
  <a href="https://doi.org/10.1038/s41586-025-08628-5">doi:10.1038/s41586-025-08628-5</a></li>
2637
  <li>T. Xie <em>et al.</em>, "Crystal diffusion variational autoencoder for periodic material generation", <em>ICLR</em> (2022).
site/recipes/add-constraint.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
site/recipes/add-property.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/recipes/change-family.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
site/recipes/change-targets.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
site/recipes/elements.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/recipes/screen.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1622,7 +1622,7 @@
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
- Why you can trust (or not) a candidate
1626
 
1627
 
1628
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1622
  <span class="md-ellipsis">
1623
 
1624
 
1625
+ Interpreting a candidate
1626
 
1627
 
1628
 
site/reference/api.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1607,7 +1607,7 @@
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
- Why you can trust (or not) a candidate
1611
 
1612
 
1613
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
+ Interpreting a candidate
1611
 
1612
 
1613
 
site/reference/cli.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1607,7 +1607,7 @@
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
- Why you can trust (or not) a candidate
1611
 
1612
 
1613
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
+ Interpreting a candidate
1611
 
1612
 
1613
 
site/reference/config.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1607,7 +1607,7 @@
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
- Why you can trust (or not) a candidate
1611
 
1612
 
1613
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
+ Interpreting a candidate
1611
 
1612
 
1613
 
site/reference/families.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1607,7 +1607,7 @@
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
- Why you can trust (or not) a candidate
1611
 
1612
 
1613
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
+ Interpreting a candidate
1611
 
1612
 
1613
 
site/reference/rules.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1607,7 +1607,7 @@
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
- Why you can trust (or not) a candidate
1611
 
1612
 
1613
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1607
  <span class="md-ellipsis">
1608
 
1609
 
1610
+ Interpreting a candidate
1611
 
1612
 
1613
 
site/research/paper.html CHANGED
@@ -697,7 +697,7 @@
697
  <span class="md-ellipsis">
698
 
699
 
700
- MEIDNet Studio (live workbench)
701
 
702
 
703
 
@@ -896,7 +896,7 @@
896
  <span class="md-ellipsis">
897
 
898
 
899
- Capabilities (what works today)
900
 
901
 
902
 
@@ -1605,7 +1605,7 @@
1605
  <span class="md-ellipsis">
1606
 
1607
 
1608
- Why you can trust (or not) a candidate
1609
 
1610
 
1611
 
@@ -2161,6 +2161,15 @@ Anand Babu, Rogรฉrio Almeida Gouvรชa, Pierre Vandergheynst, Gian-Marco Rignanese
2161
  <li>Generated structures: <code>examples/perov5/paper_results/</code>.</li>
2162
  </ul>
2163
  <h2 id="related">Related<a class="headerlink" href="#related" title="Permanent link">&para;</a></h2>
 
 
 
 
 
 
 
 
 
2164
  <ul>
2165
  <li>Satorras, Hoogeboom, Welling, <em>E(n) equivariant graph neural networks</em>, ICML 2021 (the encoder).</li>
2166
  <li>Radford et al., <em>CLIP</em>, ICML 2021 (the alignment objective).</li>
 
697
  <span class="md-ellipsis">
698
 
699
 
700
+ MEIDNet Studio
701
 
702
 
703
 
 
896
  <span class="md-ellipsis">
897
 
898
 
899
+ Capabilities
900
 
901
 
902
 
 
1605
  <span class="md-ellipsis">
1606
 
1607
 
1608
+ Interpreting a candidate
1609
 
1610
 
1611
 
 
2161
  <li>Generated structures: <code>examples/perov5/paper_results/</code>.</li>
2162
  </ul>
2163
  <h2 id="related">Related<a class="headerlink" href="#related" title="Permanent link">&para;</a></h2>
2164
+ <p>Reviews by the authors:</p>
2165
+ <ul>
2166
+ <li>A. Babu, N. M. A. Krishnan, <em>Multimodal and cross-modal learning techniques</em>, APL Machine Learning <strong>4</strong>, 030901
2167
+ (2026). <a href="https://doi.org/10.1063/5.0346744">doi:10.1063/5.0346744</a></li>
2168
+ <li>A. Babu, R. Almeida Gouvรชa, G.-M. Rignanese, <em>Toward automated discovery with generative models multimodal
2169
+ learning and closed loop workflows in inverse materials design</em>, Cell Reports Physical Science <strong>7</strong>, 103561
2170
+ (2026). <a href="https://doi.org/10.1016/j.xcrp.2026.103561">doi:10.1016/j.xcrp.2026.103561</a></li>
2171
+ </ul>
2172
+ <p>Methods MEIDNet builds on:</p>
2173
  <ul>
2174
  <li>Satorras, Hoogeboom, Welling, <em>E(n) equivariant graph neural networks</em>, ICML 2021 (the encoder).</li>
2175
  <li>Radford et al., <em>CLIP</em>, ICML 2021 (the alignment objective).</li>
site/search/search_index.json CHANGED
The diff for this file is too large to render. See raw diff
 
site/start/colab.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1670,7 +1670,7 @@
1670
  <span class="md-ellipsis">
1671
 
1672
 
1673
- Why you can trust (or not) a candidate
1674
 
1675
 
1676
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1670
  <span class="md-ellipsis">
1671
 
1672
 
1673
+ Interpreting a candidate
1674
 
1675
 
1676
 
site/start/quickstart.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1329,10 +1329,10 @@
1329
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1330
 
1331
  <li class="md-nav__item">
1332
- <a href="#what-you-just-saw" class="md-nav__link">
1333
  <span class="md-ellipsis">
1334
 
1335
- What you just saw
1336
 
1337
  </span>
1338
  </a>
@@ -1681,7 +1681,7 @@
1681
  <span class="md-ellipsis">
1682
 
1683
 
1684
- Why you can trust (or not) a candidate
1685
 
1686
 
1687
 
@@ -2099,10 +2099,10 @@
2099
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2100
 
2101
  <li class="md-nav__item">
2102
- <a href="#what-you-just-saw" class="md-nav__link">
2103
  <span class="md-ellipsis">
2104
 
2105
- What you just saw
2106
 
2107
  </span>
2108
  </a>
@@ -2164,7 +2164,7 @@ meidnet<span class="w"> </span>studio<span class="w"> </span><span
2164
  </div>
2165
  </div>
2166
  </div>
2167
- <h2 id="what-you-just-saw">What you just saw<a class="headerlink" href="#what-you-just-saw" title="Permanent link">&para;</a></h2>
2168
  <ol>
2169
  <li><strong>Targets โ†’ latent.</strong> The property encoder maps (band gap, enthalpy) to a point in the shared latent space.</li>
2170
  <li><strong>Search.</strong> A population of latents near that point is optimised so that the decoder's output matches the
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1329
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1330
 
1331
  <li class="md-nav__item">
1332
+ <a href="#what-the-demo-did" class="md-nav__link">
1333
  <span class="md-ellipsis">
1334
 
1335
+ What the demo did
1336
 
1337
  </span>
1338
  </a>
 
1681
  <span class="md-ellipsis">
1682
 
1683
 
1684
+ Interpreting a candidate
1685
 
1686
 
1687
 
 
2099
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2100
 
2101
  <li class="md-nav__item">
2102
+ <a href="#what-the-demo-did" class="md-nav__link">
2103
  <span class="md-ellipsis">
2104
 
2105
+ What the demo did
2106
 
2107
  </span>
2108
  </a>
 
2164
  </div>
2165
  </div>
2166
  </div>
2167
+ <h2 id="what-the-demo-did">What the demo did<a class="headerlink" href="#what-the-demo-did" title="Permanent link">&para;</a></h2>
2168
  <ol>
2169
  <li><strong>Targets โ†’ latent.</strong> The property encoder maps (band gap, enthalpy) to a point in the shared latent space.</li>
2170
  <li><strong>Search.</strong> A population of latents near that point is optimised so that the decoder's output matches the
site/start/what-data.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1714,7 +1714,7 @@
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
- Why you can trust (or not) a candidate
1718
 
1719
 
1720
 
@@ -2254,7 +2254,7 @@ but expect rough predictions (the training report tells you how rough).</p>
2254
  <h2 id="what-happens-to-each-row">What happens to each row<a class="headerlink" href="#what-happens-to-each-row" title="Permanent link">&para;</a></h2>
2255
  <p><code>meidnet check</code> reads every row exactly as training would and writes <code>check_report.html</code> with one line per
2256
  reason a row was skipped (unreadable CIF, too many atoms, missing value, does not match the prototype) and
2257
- example ids. Nothing is silently dropped.</p>
2258
  <h2 id="properties-and-ranges">Properties and ranges<a class="headerlink" href="#properties-and-ranges" title="Permanent link">&para;</a></h2>
2259
  <p>MEIDNet can only design for property values it has seen. The check report draws each property's distribution;
2260
  the generation report flags targets outside the training range as extrapolation.</p>
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
+ Interpreting a candidate
1718
 
1719
 
1720
 
 
2254
  <h2 id="what-happens-to-each-row">What happens to each row<a class="headerlink" href="#what-happens-to-each-row" title="Permanent link">&para;</a></h2>
2255
  <p><code>meidnet check</code> reads every row exactly as training would and writes <code>check_report.html</code> with one line per
2256
  reason a row was skipped (unreadable CIF, too many atoms, missing value, does not match the prototype) and
2257
+ example ids, so every skipped row is accounted for.</p>
2258
  <h2 id="properties-and-ranges">Properties and ranges<a class="headerlink" href="#properties-and-ranges" title="Permanent link">&para;</a></h2>
2259
  <p>MEIDNet can only design for property values it has seen. The check report draws each property's distribution;
2260
  the generation report flags targets outside the training range as extrapolation.</p>
site/studio.html CHANGED
@@ -198,7 +198,7 @@ body>div:empty:not([id]):not([class]){position:absolute;top:0;left:0;width:0;hei
198
  </div>
199
  </section>
200
  <div class="card strip"><div class="strip-scroll"><svg id="pipe" viewBox="0 0 1270 150" aria-label="MEIDNet workflow"></svg></div></div>
201
- <div class="chain" id="chain"><span class="lead">Change anything above or in a block โ€” what it does to the blocks after it appears here.</span></div>
202
  <details id="flowlog"><summary>Flow log (0)</summary><ol id="flowlog-list"></ol></details>
203
  <div class="cols">
204
  <div id="panel"><div class="card loading-card"><h2>Loading MEIDNet Studioโ€ฆ</h2><p class="muted">Fetching the model and every composition of the perovskite family. This takes a few seconds; on the hosted Studio the very first visit can take up to a minute while the server wakes up.</p><div class="prog"><i class="indeterminate"></i></div></div></div>
@@ -331,7 +331,7 @@ async function boot(){
331
  if(BLOCKS.some(b=>b.id===qs.get('panel'))) S.panel = qs.get('panel');
332
  await loadFamily();
333
  render();
334
- chainText(`Ready: ${nfmt(S.ev.rows.length)} compositions, ${nfmt(S.ev.alive.length)} pass every rule. Change anything โ€” its effect on every later block appears here.`);
335
  if(!STATIC) await resumeJobs();
336
  if(['space','candidates','data'].includes(qs.get('explore'))) openExplore(qs.get('explore'));
337
  api('/api/data').then(d=>{ S.data=d; S.dataOwn = !!(S.state.session && S.state.session.checked); statusAll(); updateEdges(); render(); }).catch(()=>{});
@@ -652,7 +652,7 @@ function render(){
652
  const b=BLOCKS.find(x=>x.id===S.panel); const n=BLOCKS.indexOf(b)+1;
653
  P.dataset.block=S.panel;
654
  P.innerHTML = `<div class="card"><div class="eyebrow">Block ${n} of 7 ยท ${esc(b.name)}</div><h2>${esc(b.name)}</h2><p class="purpose">${esc(b.purpose)}</p>
655
- <div class="plain beginner-only"><b>In plain words.</b> ${esc(b.plain)}</div>${ioStrip(S.panel)}${f?f():''}${behind(S.panel)}</div>`;
656
  document.querySelectorAll('.node').forEach(nd=>nd.classList.toggle('sel', nd.id==='node-'+S.panel));
657
  if(!S.ev && S.fam) recompute(null, null); else { statusAll(); updateEdges(); renderLive(); }
658
  renderLegend(); mountAll3d();
@@ -860,7 +860,7 @@ function trainBox(){
860
  <tr><td>typical error (MAE)</td>${Object.entries(p.val.mae).map(([k,v])=>`<td>${fmt(v)}${esc(unit(k))}</td>`).join('')}<td>${(100*p.val.retrieval_top1).toFixed(0)}%</td></tr>
861
  <tr><td>quality</td>${q.map(x=>`<td class="${x.css}">${x.word}</td>`).join('')}<td></td></tr></table>
862
  <p class="small muted beginner-only">The typical error is compared with how much each property varies in your data: under 25% of that spread is <b>good</b>, under 50% <b>fair</b>, otherwise <b>weak</b>. "Matched correctly" is how often a material's structure and its properties land closest to each other in the model's hidden space (higher is better). A few epochs give a rough model; more epochs or more data usually help.</p>`; }
863
- if(st.done&&!st.error) b+=`<div class="verdict good">โœ… Model ready โ€” the blocks below now use <b>your</b> model and properties.${st.report?` <a href="/files/${esc(st.report)}" target="_blank">training report</a> ยท <a href="/files/${esc(st.report.replace('training_report.html','model.pt'))}" download="model.pt">download model.pt</a>`:''}</div>`; }
864
  return b;
865
  }
866
  async function startTrain(){
@@ -913,13 +913,13 @@ function panelFamily(){
913
  b+=`<h3>Elements per site group <span class="muted small">(click to exclude / include)</span></h3>`;
914
  for(const [g,grp] of Object.entries(f.groups)){ b+=`<h4>${esc(g)} โ€” ${esc(grp.description)} ยท ${grp.slots.length} site${grp.slots.length>1?'s':''}</h4><div>`;
915
  for(const el of grp.sample){ const off=S.ui.exclude.has(el); const ox=(grp.oxidation_states[el]||[]).map(q=>(q>0?'+':'')+q).join('/'); b+=`<span class="chip ${off?'off':''}" onclick="toggleEl(${jsq(el)})" title="charges ${esc(ox)}"><span style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${CPK[el]||'#999'};border:1px solid var(--line);margin-right:5px;vertical-align:-1px"></span>${esc(el)}<small class="muted"> ${esc(ox)}</small></span>`; } b+='</div>'; }
916
- b+=`<div class="help beginner-only">Excluding an element removes every composition containing it โ€” watch the Family โ†’ Rules numbers change. To change which elements a family allows at all, copy <code>${esc(S.ui.family)}.yaml</code> and edit its <code>groups:</code>.</div>`;
917
  return b;
918
  }
919
 
920
  /* โ”€โ”€ Rules โ”€โ”€ */
921
  function panelRules(){
922
- const ev=S.ev||evaluateSpace(); let b=`<p class="muted small">Move a limit and watch the count change โ€” the search enforces exactly these windows.</p>`;
923
  for(const c of S.fam.constraints){ const key=ruleKey(c); const r=S.ui.rules[key]; const d=S.fam.space.rows.map(x=>x.d[key]).filter(Number.isFinite);
924
  b+=`<div class="rule ${r.enabled?'':'off'}"><div class="hd"><input type="checkbox" ${r.enabled?'checked':''} onchange="toggleRule(${jsq(key)},this.checked)"><b>${esc(ruleTitle(key))}</b><span class="muted small"><b style="color:var(--accent-text)">${nfmt(ev.perRule[key]??0)}</b> of ${nfmt(ev.rows.length)} pass</span></div><p class="small muted">${esc(ruleText(key))}</p>`;
925
  const num=Object.entries(r.params).filter(([k,v])=>typeof v==='number' && !['cutoff'].includes(k));
@@ -1005,7 +1005,7 @@ function renderLive(){
1005
  L.innerHTML=b;
1006
  }
1007
  function renderLegend(){ const beg=document.body.classList.contains('beginner');
1008
- $('legend').innerHTML = beg ? `<h4>Glossary</h4><dl class="gloss"><dt>Composition</dt><dd>one element per site of the prototype, e.g. CsPbBrโ‚ƒ.</dd><dt>Rule</dt><dd>a hard check with a measured value and an allowed window.</dd><dt>Target</dt><dd>a property value you want; the model predicts how close each composition gets.</dd><dt>Latent space</dt><dd>the hidden coordinates where structures and properties meet; the search moves through it.</dd><dt>Extrapolation</dt><dd>a target outside the training range โ€” predictions there are guesses.</dd></dl><p class="small muted">Switch on Researcher mode in the header for the configuration as text and the Python behind each block.</p>`
1009
  : `<h4>How to use</h4><ol class="small" style="padding-left:18px;margin:4px 0"><li><b>Family</b>: pick the crystal type; exclude elements.</li><li><b>Rules</b>: move limits; counts update live.</li><li><b>Targets</b>: set values; see the closest compositions.</li><li><b>Search</b> runs the latent optimisation; <b>Candidates</b> explains each result.</li><li><b>Data/Model</b>: upload your table, train, and design with your own properties.</li></ol>`; }
1010
 
1011
  /* โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• actions โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• */
 
198
  </div>
199
  </section>
200
  <div class="card strip"><div class="strip-scroll"><svg id="pipe" viewBox="0 0 1270 150" aria-label="MEIDNet workflow"></svg></div></div>
201
+ <div class="chain" id="chain"><span class="lead">Changes made above or in a block are listed here, with their effect on the blocks after it.</span></div>
202
  <details id="flowlog"><summary>Flow log (0)</summary><ol id="flowlog-list"></ol></details>
203
  <div class="cols">
204
  <div id="panel"><div class="card loading-card"><h2>Loading MEIDNet Studioโ€ฆ</h2><p class="muted">Fetching the model and every composition of the perovskite family. This takes a few seconds; on the hosted Studio the very first visit can take up to a minute while the server wakes up.</p><div class="prog"><i class="indeterminate"></i></div></div></div>
 
331
  if(BLOCKS.some(b=>b.id===qs.get('panel'))) S.panel = qs.get('panel');
332
  await loadFamily();
333
  render();
334
+ chainText(`Ready: ${nfmt(S.ev.rows.length)} compositions, ${nfmt(S.ev.alive.length)} pass every rule. Changes and their effect on the later blocks are listed here.`);
335
  if(!STATIC) await resumeJobs();
336
  if(['space','candidates','data'].includes(qs.get('explore'))) openExplore(qs.get('explore'));
337
  api('/api/data').then(d=>{ S.data=d; S.dataOwn = !!(S.state.session && S.state.session.checked); statusAll(); updateEdges(); render(); }).catch(()=>{});
 
652
  const b=BLOCKS.find(x=>x.id===S.panel); const n=BLOCKS.indexOf(b)+1;
653
  P.dataset.block=S.panel;
654
  P.innerHTML = `<div class="card"><div class="eyebrow">Block ${n} of 7 ยท ${esc(b.name)}</div><h2>${esc(b.name)}</h2><p class="purpose">${esc(b.purpose)}</p>
655
+ <div class="plain beginner-only"><b>In short.</b> ${esc(b.plain)}</div>${ioStrip(S.panel)}${f?f():''}${behind(S.panel)}</div>`;
656
  document.querySelectorAll('.node').forEach(nd=>nd.classList.toggle('sel', nd.id==='node-'+S.panel));
657
  if(!S.ev && S.fam) recompute(null, null); else { statusAll(); updateEdges(); renderLive(); }
658
  renderLegend(); mountAll3d();
 
860
  <tr><td>typical error (MAE)</td>${Object.entries(p.val.mae).map(([k,v])=>`<td>${fmt(v)}${esc(unit(k))}</td>`).join('')}<td>${(100*p.val.retrieval_top1).toFixed(0)}%</td></tr>
861
  <tr><td>quality</td>${q.map(x=>`<td class="${x.css}">${x.word}</td>`).join('')}<td></td></tr></table>
862
  <p class="small muted beginner-only">The typical error is compared with how much each property varies in your data: under 25% of that spread is <b>good</b>, under 50% <b>fair</b>, otherwise <b>weak</b>. "Matched correctly" is how often a material's structure and its properties land closest to each other in the model's hidden space (higher is better). A few epochs give a rough model; more epochs or more data usually help.</p>`; }
863
+ if(st.done&&!st.error) b+=`<div class="verdict good">Model ready. The blocks below now use <b>your</b> model and properties.${st.report?` <a href="/files/${esc(st.report)}" target="_blank">training report</a> ยท <a href="/files/${esc(st.report.replace('training_report.html','model.pt'))}" download="model.pt">download model.pt</a>`:''}</div>`; }
864
  return b;
865
  }
866
  async function startTrain(){
 
913
  b+=`<h3>Elements per site group <span class="muted small">(click to exclude / include)</span></h3>`;
914
  for(const [g,grp] of Object.entries(f.groups)){ b+=`<h4>${esc(g)} โ€” ${esc(grp.description)} ยท ${grp.slots.length} site${grp.slots.length>1?'s':''}</h4><div>`;
915
  for(const el of grp.sample){ const off=S.ui.exclude.has(el); const ox=(grp.oxidation_states[el]||[]).map(q=>(q>0?'+':'')+q).join('/'); b+=`<span class="chip ${off?'off':''}" onclick="toggleEl(${jsq(el)})" title="charges ${esc(ox)}"><span style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${CPK[el]||'#999'};border:1px solid var(--line);margin-right:5px;vertical-align:-1px"></span>${esc(el)}<small class="muted"> ${esc(ox)}</small></span>`; } b+='</div>'; }
916
+ b+=`<div class="help beginner-only">Excluding an element removes every composition that contains it; the Family and Rules counts update accordingly. To change which elements a family allows at all, copy <code>${esc(S.ui.family)}.yaml</code> and edit its <code>groups:</code>.</div>`;
917
  return b;
918
  }
919
 
920
  /* โ”€โ”€ Rules โ”€โ”€ */
921
  function panelRules(){
922
+ const ev=S.ev||evaluateSpace(); let b=`<p class="muted small">Moving a limit updates the count; the search applies exactly these windows.</p>`;
923
  for(const c of S.fam.constraints){ const key=ruleKey(c); const r=S.ui.rules[key]; const d=S.fam.space.rows.map(x=>x.d[key]).filter(Number.isFinite);
924
  b+=`<div class="rule ${r.enabled?'':'off'}"><div class="hd"><input type="checkbox" ${r.enabled?'checked':''} onchange="toggleRule(${jsq(key)},this.checked)"><b>${esc(ruleTitle(key))}</b><span class="muted small"><b style="color:var(--accent-text)">${nfmt(ev.perRule[key]??0)}</b> of ${nfmt(ev.rows.length)} pass</span></div><p class="small muted">${esc(ruleText(key))}</p>`;
925
  const num=Object.entries(r.params).filter(([k,v])=>typeof v==='number' && !['cutoff'].includes(k));
 
1005
  L.innerHTML=b;
1006
  }
1007
  function renderLegend(){ const beg=document.body.classList.contains('beginner');
1008
+ $('legend').innerHTML = beg ? `<h4>Glossary</h4><dl class="gloss"><dt>Composition</dt><dd>one element per site of the prototype, e.g. CsPbBrโ‚ƒ.</dd><dt>Rule</dt><dd>a hard check with a measured value and an allowed window.</dd><dt>Target</dt><dd>a property value you want; the model predicts how close each composition gets.</dd><dt>Latent space</dt><dd>the hidden coordinates where structures and properties meet; the search moves through it.</dd><dt>Extrapolation</dt><dd>a target outside the training range; predictions there are less reliable.</dd></dl><p class="small muted">Switch on Researcher mode in the header for the configuration as text and the Python behind each block.</p>`
1009
  : `<h4>How to use</h4><ol class="small" style="padding-left:18px;margin:4px 0"><li><b>Family</b>: pick the crystal type; exclude elements.</li><li><b>Rules</b>: move limits; counts update live.</li><li><b>Targets</b>: set values; see the closest compositions.</li><li><b>Search</b> runs the latent optimisation; <b>Candidates</b> explains each result.</li><li><b>Data/Model</b>: upload your table, train, and design with your own properties.</li></ol>`; }
1010
 
1011
  /* โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• actions โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• */
site/understand/how-it-works.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1714,7 +1714,7 @@
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
- Why you can trust (or not) a candidate
1718
 
1719
 
1720
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
+ Interpreting a candidate
1718
 
1719
 
1720
 
site/understand/interpretability.html CHANGED
@@ -27,7 +27,7 @@
27
 
28
 
29
 
30
- <title>Why you can trust (or not) a candidate - MEIDNet Prism</title>
31
 
32
 
33
 
@@ -80,7 +80,7 @@
80
  <div data-md-component="skip">
81
 
82
 
83
- <a href="#why-you-can-trust-or-not-a-candidate" class="md-skip">
84
  Skip to content
85
  </a>
86
 
@@ -113,7 +113,7 @@
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
- Why you can trust (or not) a candidate
117
 
118
  </span>
119
  </div>
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1621,7 +1621,7 @@
1621
  <span class="md-ellipsis">
1622
 
1623
 
1624
- Why you can trust (or not) a candidate
1625
 
1626
 
1627
 
@@ -1639,7 +1639,7 @@
1639
  <span class="md-ellipsis">
1640
 
1641
 
1642
- Why you can trust (or not) a candidate
1643
 
1644
 
1645
 
@@ -1698,10 +1698,10 @@
1698
  </li>
1699
 
1700
  <li class="md-nav__item">
1701
- <a href="#what-meidnet-never-claims" class="md-nav__link">
1702
  <span class="md-ellipsis">
1703
 
1704
- What MEIDNet never claims
1705
 
1706
  </span>
1707
  </a>
@@ -2154,10 +2154,10 @@
2154
  </li>
2155
 
2156
  <li class="md-nav__item">
2157
- <a href="#what-meidnet-never-claims" class="md-nav__link">
2158
  <span class="md-ellipsis">
2159
 
2160
- What MEIDNet never claims
2161
 
2162
  </span>
2163
  </a>
@@ -2184,7 +2184,7 @@
2184
 
2185
 
2186
 
2187
- <h1 id="why-you-can-trust-or-not-a-candidate">Why you can trust (or not) a candidate<a class="headerlink" href="#why-you-can-trust-or-not-a-candidate" title="Permanent link">&para;</a></h1>
2188
  <p>MEIDNet shows its reasoning rather than a score. Where to look:</p>
2189
  <h2 id="before-trusting-the-model">Before trusting the model<a class="headerlink" href="#before-trusting-the-model" title="Permanent link">&para;</a></h2>
2190
  <ul>
@@ -2215,7 +2215,7 @@
2215
  <li><strong>Rejected examples</strong> โ€” what the search <em>wanted</em> to make; often more informative than what it kept.</li>
2216
  <li><strong>Latent map</strong> โ€” whether the population spread out (diversity) or collapsed.</li>
2217
  </ul>
2218
- <h2 id="what-meidnet-never-claims">What MEIDNet never claims<a class="headerlink" href="#what-meidnet-never-claims" title="Permanent link">&para;</a></h2>
2219
  <p>A candidate is a <em>composition on an ideal prototype with model-predicted properties</em>. Whether it is stable,
2220
  synthesisable, or has those properties is for <code>meidnet screen</code>, DFT and the lab to decide.</p>
2221
 
 
27
 
28
 
29
 
30
+ <title>Interpreting a candidate - MEIDNet Prism</title>
31
 
32
 
33
 
 
80
  <div data-md-component="skip">
81
 
82
 
83
+ <a href="#interpreting-a-candidate" class="md-skip">
84
  Skip to content
85
  </a>
86
 
 
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
+ Interpreting a candidate
117
 
118
  </span>
119
  </div>
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1621
  <span class="md-ellipsis">
1622
 
1623
 
1624
+ Interpreting a candidate
1625
 
1626
 
1627
 
 
1639
  <span class="md-ellipsis">
1640
 
1641
 
1642
+ Interpreting a candidate
1643
 
1644
 
1645
 
 
1698
  </li>
1699
 
1700
  <li class="md-nav__item">
1701
+ <a href="#what-a-candidate-is" class="md-nav__link">
1702
  <span class="md-ellipsis">
1703
 
1704
+ What a candidate is
1705
 
1706
  </span>
1707
  </a>
 
2154
  </li>
2155
 
2156
  <li class="md-nav__item">
2157
+ <a href="#what-a-candidate-is" class="md-nav__link">
2158
  <span class="md-ellipsis">
2159
 
2160
+ What a candidate is
2161
 
2162
  </span>
2163
  </a>
 
2184
 
2185
 
2186
 
2187
+ <h1 id="interpreting-a-candidate">Interpreting a candidate<a class="headerlink" href="#interpreting-a-candidate" title="Permanent link">&para;</a></h1>
2188
  <p>MEIDNet shows its reasoning rather than a score. Where to look:</p>
2189
  <h2 id="before-trusting-the-model">Before trusting the model<a class="headerlink" href="#before-trusting-the-model" title="Permanent link">&para;</a></h2>
2190
  <ul>
 
2215
  <li><strong>Rejected examples</strong> โ€” what the search <em>wanted</em> to make; often more informative than what it kept.</li>
2216
  <li><strong>Latent map</strong> โ€” whether the population spread out (diversity) or collapsed.</li>
2217
  </ul>
2218
+ <h2 id="what-a-candidate-is">What a candidate is<a class="headerlink" href="#what-a-candidate-is" title="Permanent link">&para;</a></h2>
2219
  <p>A candidate is a <em>composition on an ideal prototype with model-predicted properties</em>. Whether it is stable,
2220
  synthesisable, or has those properties is for <code>meidnet screen</code>, DFT and the lab to decide.</p>
2221
 
site/understand/limits.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1612,7 +1612,7 @@
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
- Why you can trust (or not) a candidate
1616
 
1617
 
1618
 
@@ -1693,10 +1693,10 @@
1693
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1694
 
1695
  <li class="md-nav__item">
1696
- <a href="#what-works-today" class="md-nav__link">
1697
  <span class="md-ellipsis">
1698
 
1699
- What works today
1700
 
1701
  </span>
1702
  </a>
@@ -1704,10 +1704,10 @@
1704
  </li>
1705
 
1706
  <li class="md-nav__item">
1707
- <a href="#what-does-not-work-yet" class="md-nav__link">
1708
  <span class="md-ellipsis">
1709
 
1710
- What does not work (yet)
1711
 
1712
  </span>
1713
  </a>
@@ -2110,10 +2110,10 @@
2110
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2111
 
2112
  <li class="md-nav__item">
2113
- <a href="#what-works-today" class="md-nav__link">
2114
  <span class="md-ellipsis">
2115
 
2116
- What works today
2117
 
2118
  </span>
2119
  </a>
@@ -2121,10 +2121,10 @@
2121
  </li>
2122
 
2123
  <li class="md-nav__item">
2124
- <a href="#what-does-not-work-yet" class="md-nav__link">
2125
  <span class="md-ellipsis">
2126
 
2127
- What does not work (yet)
2128
 
2129
  </span>
2130
  </a>
@@ -2163,7 +2163,7 @@
2163
 
2164
 
2165
  <h1 id="scope-and-roadmap">Scope and roadmap<a class="headerlink" href="#scope-and-roadmap" title="Permanent link">&para;</a></h1>
2166
- <h2 id="what-works-today">What works today<a class="headerlink" href="#what-works-today" title="Permanent link">&para;</a></h2>
2167
  <table>
2168
  <thead>
2169
  <tr>
@@ -2198,7 +2198,7 @@
2198
  </tr>
2199
  </tbody>
2200
  </table>
2201
- <h2 id="what-does-not-work-yet">What does not work (yet)<a class="headerlink" href="#what-does-not-work-yet" title="Permanent link">&para;</a></h2>
2202
  <ul>
2203
  <li><strong>New atomic arrangements.</strong> The decoder's positions are not used to create geometry; candidates are
2204
  compositions placed on the family prototype. Generating free geometry needs a decoder trained to produce it
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1612
  <span class="md-ellipsis">
1613
 
1614
 
1615
+ Interpreting a candidate
1616
 
1617
 
1618
 
 
1693
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1694
 
1695
  <li class="md-nav__item">
1696
+ <a href="#current-capabilities" class="md-nav__link">
1697
  <span class="md-ellipsis">
1698
 
1699
+ Current capabilities
1700
 
1701
  </span>
1702
  </a>
 
1704
  </li>
1705
 
1706
  <li class="md-nav__item">
1707
+ <a href="#not-yet-supported" class="md-nav__link">
1708
  <span class="md-ellipsis">
1709
 
1710
+ Not yet supported
1711
 
1712
  </span>
1713
  </a>
 
2110
  <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
2111
 
2112
  <li class="md-nav__item">
2113
+ <a href="#current-capabilities" class="md-nav__link">
2114
  <span class="md-ellipsis">
2115
 
2116
+ Current capabilities
2117
 
2118
  </span>
2119
  </a>
 
2121
  </li>
2122
 
2123
  <li class="md-nav__item">
2124
+ <a href="#not-yet-supported" class="md-nav__link">
2125
  <span class="md-ellipsis">
2126
 
2127
+ Not yet supported
2128
 
2129
  </span>
2130
  </a>
 
2163
 
2164
 
2165
  <h1 id="scope-and-roadmap">Scope and roadmap<a class="headerlink" href="#scope-and-roadmap" title="Permanent link">&para;</a></h1>
2166
+ <h2 id="current-capabilities">Current capabilities<a class="headerlink" href="#current-capabilities" title="Permanent link">&para;</a></h2>
2167
  <table>
2168
  <thead>
2169
  <tr>
 
2198
  </tr>
2199
  </tbody>
2200
  </table>
2201
+ <h2 id="not-yet-supported">Not yet supported<a class="headerlink" href="#not-yet-supported" title="Permanent link">&para;</a></h2>
2202
  <ul>
2203
  <li><strong>New atomic arrangements.</strong> The decoder's positions are not used to create geometry; candidates are
2204
  compositions placed on the family prototype. Generating free geometry needs a decoder trained to produce it
site/use/config.html CHANGED
@@ -699,7 +699,7 @@
699
  <span class="md-ellipsis">
700
 
701
 
702
- MEIDNet Studio (live workbench)
703
 
704
 
705
 
@@ -898,7 +898,7 @@
898
  <span class="md-ellipsis">
899
 
900
 
901
- Capabilities (what works today)
902
 
903
 
904
 
@@ -1670,7 +1670,7 @@
1670
  <span class="md-ellipsis">
1671
 
1672
 
1673
- Why you can trust (or not) a candidate
1674
 
1675
 
1676
 
 
699
  <span class="md-ellipsis">
700
 
701
 
702
+ MEIDNet Studio
703
 
704
 
705
 
 
898
  <span class="md-ellipsis">
899
 
900
 
901
+ Capabilities
902
 
903
 
904
 
 
1670
  <span class="md-ellipsis">
1671
 
1672
 
1673
+ Interpreting a candidate
1674
 
1675
 
1676
 
site/use/explore-3d.html CHANGED
@@ -704,7 +704,7 @@
704
  <span class="md-ellipsis">
705
 
706
 
707
- MEIDNet Studio (live workbench)
708
 
709
 
710
 
@@ -1005,7 +1005,7 @@
1005
  <span class="md-ellipsis">
1006
 
1007
 
1008
- Capabilities (what works today)
1009
 
1010
 
1011
 
@@ -1714,7 +1714,7 @@
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
- Why you can trust (or not) a candidate
1718
 
1719
 
1720
 
 
704
  <span class="md-ellipsis">
705
 
706
 
707
+ MEIDNet Studio
708
 
709
 
710
 
 
1005
  <span class="md-ellipsis">
1006
 
1007
 
1008
+ Capabilities
1009
 
1010
 
1011
 
 
1714
  <span class="md-ellipsis">
1715
 
1716
 
1717
+ Interpreting a candidate
1718
 
1719
 
1720
 
site/use/reports.html CHANGED
@@ -704,7 +704,7 @@
704
  <span class="md-ellipsis">
705
 
706
 
707
- MEIDNet Studio (live workbench)
708
 
709
 
710
 
@@ -994,7 +994,7 @@
994
  <span class="md-ellipsis">
995
 
996
 
997
- Capabilities (what works today)
998
 
999
 
1000
 
@@ -1703,7 +1703,7 @@
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
- Why you can trust (or not) a candidate
1707
 
1708
 
1709
 
 
704
  <span class="md-ellipsis">
705
 
706
 
707
+ MEIDNet Studio
708
 
709
 
710
 
 
994
  <span class="md-ellipsis">
995
 
996
 
997
+ Capabilities
998
 
999
 
1000
 
 
1703
  <span class="md-ellipsis">
1704
 
1705
 
1706
+ Interpreting a candidate
1707
 
1708
 
1709
 
site/use/studio.html CHANGED
@@ -27,7 +27,7 @@
27
 
28
 
29
 
30
- <title>MEIDNet Studio (live workbench) - MEIDNet Prism</title>
31
 
32
 
33
 
@@ -113,7 +113,7 @@
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
- MEIDNet Studio (live workbench)
117
 
118
  </span>
119
  </div>
@@ -713,7 +713,7 @@
713
  <span class="md-ellipsis">
714
 
715
 
716
- MEIDNet Studio (live workbench)
717
 
718
 
719
 
@@ -731,7 +731,7 @@
731
  <span class="md-ellipsis">
732
 
733
 
734
- MEIDNet Studio (live workbench)
735
 
736
 
737
 
@@ -1093,7 +1093,7 @@
1093
  <span class="md-ellipsis">
1094
 
1095
 
1096
- Capabilities (what works today)
1097
 
1098
 
1099
 
@@ -1802,7 +1802,7 @@
1802
  <span class="md-ellipsis">
1803
 
1804
 
1805
- Why you can trust (or not) a candidate
1806
 
1807
 
1808
 
@@ -2526,7 +2526,7 @@ the encoder considers best, and whether the predictions agree.</p>
2526
  <h2 id="beginner-view-and-researcher-mode">Beginner view and Researcher mode<a class="headerlink" href="#beginner-view-and-researcher-mode" title="Permanent link">&para;</a></h2>
2527
  <p>The page opens in the <strong>beginner view</strong>: every block has an <strong>Input โžœ Logic โžœ Output</strong> strip with live numbers
2528
  ("924 compositions โžœ 5 hard rules, applied in order โžœ 27 pass every rule") and the name of the Python function that
2529
- does the work, a short <strong>In plain words</strong> explanation, and a <strong>glossary</strong> in the side panel (composition, rule,
2530
  target, latent space, extrapolation).</p>
2531
  <p>The <strong>Researcher mode</strong> switch in the header trades these for the technical view: the <strong>โœŽ Edit as text</strong> YAML
2532
  drawer, and a <strong>Behind the scenes</strong> panel in every block with the <code>meidnet.yaml</code> and the Python of that block.
 
27
 
28
 
29
 
30
+ <title>MEIDNet Studio - MEIDNet Prism</title>
31
 
32
 
33
 
 
113
  <div class="md-header__topic" data-md-component="header-topic">
114
  <span class="md-ellipsis">
115
 
116
+ MEIDNet Studio
117
 
118
  </span>
119
  </div>
 
713
  <span class="md-ellipsis">
714
 
715
 
716
+ MEIDNet Studio
717
 
718
 
719
 
 
731
  <span class="md-ellipsis">
732
 
733
 
734
+ MEIDNet Studio
735
 
736
 
737
 
 
1093
  <span class="md-ellipsis">
1094
 
1095
 
1096
+ Capabilities
1097
 
1098
 
1099
 
 
1802
  <span class="md-ellipsis">
1803
 
1804
 
1805
+ Interpreting a candidate
1806
 
1807
 
1808
 
 
2526
  <h2 id="beginner-view-and-researcher-mode">Beginner view and Researcher mode<a class="headerlink" href="#beginner-view-and-researcher-mode" title="Permanent link">&para;</a></h2>
2527
  <p>The page opens in the <strong>beginner view</strong>: every block has an <strong>Input โžœ Logic โžœ Output</strong> strip with live numbers
2528
  ("924 compositions โžœ 5 hard rules, applied in order โžœ 27 pass every rule") and the name of the Python function that
2529
+ does the work, a short <strong>In short</strong> explanation, and a <strong>glossary</strong> in the side panel (composition, rule,
2530
  target, latent space, extrapolation).</p>
2531
  <p>The <strong>Researcher mode</strong> switch in the header trades these for the technical view: the <strong>โœŽ Edit as text</strong> YAML
2532
  drawer, and a <strong>Behind the scenes</strong> panel in every block with the <code>meidnet.yaml</code> and the Python of that block.