File size: 5,508 Bytes
df549ad
e6fec6b
 
 
 
95fa686
 
 
 
 
 
 
 
 
e6fec6b
 
bce3a70
 
 
 
9d75f8c
 
bce3a70
e6fec6b
 
 
 
 
 
 
 
 
 
 
 
 
 
fd46c63
bce3a70
e6fec6b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
712aa47
 
 
 
 
 
e6fec6b
 
 
 
 
 
 
 
 
6079fc1
 
e6fec6b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
df549ad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script>
      // a copy of this page cached from before a deploy asks for bundles the deploy removed: reload once (src/app/boot.ts)
      addEventListener('error', (e) => {
        const u = e.target && (e.target.src || e.target.href);
        if (!u || !/\/assets\//.test(u)) return;
        try { if (sessionStorage.getItem('mlipviz-stale')) return; sessionStorage.setItem('mlipviz-stale', '1'); } catch (_) { return; }
        location.reload();
      }, true);
    </script>
    <title>MLIP Visualization</title>
    <meta name="description" content="Machine-learning interatomic potentials (PET, ANI-2x, KRR/SOAP, PhysNet) running in your browser, with every forward and backward pass visualised." />
    <script>
      // the saved theme (or the system's), before the first paint; see src/viz/theme.ts
      try { const t = localStorage.getItem('mlipviz-theme'); document.documentElement.dataset.theme = t === 'light' || t === 'dark' ? t : matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'; } catch (e) {}
    </script>
    <script type="module" crossorigin src="./assets/main-X5IWlUFm.js"></script>
    <link rel="modulepreload" crossorigin href="./assets/xyz-BkjxBniX.js">
    <link rel="stylesheet" crossorigin href="./assets/xyz-CMSHb8Wz.css">
  </head>
  <body>
    <header>
      <div class="brand">MLIP<span>viz</span></div>
      <label title="The kind of model">Model <select id="kind"></select></label>
      <label title="Which trained weights (for KRR: which model it is fitted to)"><span id="variant-label">Weights</span> <select id="model"></select></label>
      <label class="file">Open model…<input id="model-files" type="file" accept=".json,.safetensors" multiple /></label>
      <label>Structure <select id="structure"></select></label>
      <label class="file">Open .xyz…<input id="xyz-file" type="file" accept=".xyz,.extxyz" /></label>
 <label id="force-mode-wrap" title="How forces are computed">Forces <select id="force-mode">
        <option value="conservative">conservative (−∂E/∂r)</option>
        <option value="direct">direct (non-conservative)</option>
        <option value="both">both, compared</option></select></label>
      <button id="rattle" title="Displace every atom a little and run a new pass">Rattle</button>
      <a class="nav" id="md-link" href="md.html" title="Molecular dynamics and diffusion Monte Carlo with this model">MD &amp; DMC →</a>
      <button id="theme" title="Theme"></button>
      <div id="status"></div>
    </header>
    <main>
      <aside id="walk">
        <div id="chapter-head"><span id="chapter-phase"></span><div id="chapter-title">Loading…</div></div>
        <div id="intro">
          <div id="intro-text"></div>
          <figure><div id="diagram"></div><figcaption>The architecture of the loaded model. Click a box to jump there; ± collapses it in 3D.</figcaption></figure>
          <p class="keys"><kbd>Space</kbd> continue · <kbd>←</kbd> <kbd>→</kbd> step · drag to pan, scroll to zoom, right-drag to rotate</p>
        </div>
        <div id="article"></div>
        <div id="model-card"></div>
      </aside>
      <section id="net">
        <div id="tooltip" hidden></div>
        <div id="loading" hidden role="status" aria-live="polite">
          <div class="loader-grid" aria-hidden="true"></div>
          <div class="loader-title"></div>
          <div class="loader-stage"></div>
          <div class="loader-bar"><i></i></div>
        </div>
        <div id="zen-count"><span id="zen-params"></span><small>parameters</small></div>
        <div id="zen-progress"><i class="f"></i><i class="b"></i></div>
        <div id="legend">
          <span><i class="sw value"></i>activation</span>
          <span><i class="sw grad"></i>gradient ∂E/∂·</span>
          <span><i class="sw weight"></i><span id="legend-weights">weights</span></span>
          <span id="legend-attn"><i class="sw attn"></i>attention</span>
        </div>
        <div id="net-buttons">
          <button id="follow" title="Camera follows the active op">Follow</button>
          <button id="overview" class="on" title="Show the whole network">Overview</button>
 <button id="weights-only" title="Show only the weights of the model">Weights</button>
          <button id="zen" title="Just the numbers, forward and backward, on a loop (Esc to leave)">Zen</button>
        </div>
          <div id="right">
            <div id="molecule"></div>
            <div id="right-text">
              <div id="graph-caption"></div>
              <div id="energies"></div>
            </div>
          </div>
      </section>

    </main>
    <footer>
      <button id="restart" title="Back to the start (Home)">⏮</button>
      <button id="prev" title="Previous op (←)">◀</button>
      <button id="play" title="Play the whole pass">▶</button>
      <button id="continue" class="primary" title="Play to the end of this step (Space)">Continue</button>
      <button id="next" title="Next op (→)">▶|</button>
      <button id="end" title="Show the whole pass (End)">⏭</button>
      <label class="speed">Speed <input id="speed" type="range" min="0" max="1" step="0.01" value="0.35" /><span id="speed-val"></span></label>
      <div id="scrub"><canvas id="timeline"></canvas><div id="scrub-label"></div></div>
    </footer>
  </body>
</html>