File size: 138,656 Bytes
bf97704
aa21804
 
9b1dd5d
aa21804
 
 
 
 
9b1dd5d
aa21804
 
 
 
 
 
9b1dd5d
aa21804
 
 
9b1dd5d
aa21804
9b1dd5d
 
 
aa21804
 
9b1dd5d
 
 
 
 
 
aa21804
9b1dd5d
aa21804
9b1dd5d
 
 
aa21804
9b1dd5d
 
 
 
 
 
 
 
 
 
 
 
aa21804
 
 
9b1dd5d
aa21804
 
 
9b1dd5d
 
 
 
aa21804
 
 
9b1dd5d
aa21804
9b1dd5d
aa21804
 
 
9b1dd5d
 
 
 
 
 
aa21804
 
9b1dd5d
aa21804
 
 
9b1dd5d
5fd6d07
9b1dd5d
 
5fd6d07
9b1dd5d
 
5fd6d07
 
9b1dd5d
aa21804
 
 
 
9b1dd5d
 
 
 
 
aa21804
9b1dd5d
 
 
 
 
aa21804
 
 
13f71a9
9b1dd5d
 
 
 
aa21804
 
91687bb
9b1dd5d
 
aa21804
 
91687bb
9b1dd5d
 
aa21804
 
91687bb
9b1dd5d
 
 
 
 
 
 
91687bb
9b1dd5d
 
 
 
91687bb
9b1dd5d
 
 
 
91687bb
9b1dd5d
 
95f9932
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13f71a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b1dd5d
 
aa21804
 
 
 
 
 
 
5fd6d07
 
 
 
 
 
 
 
 
 
9b1dd5d
 
 
5fd6d07
 
 
 
 
9b1dd5d
5fd6d07
aa21804
 
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
<!doctype html>
<html lang="en"><head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cosmos gen-7b — overfit & cross-architecture</title>
<style>
:root{
  --bg:#f7f7f8; --panel:#ffffff; --ink:#16181d; --sub:#5c6270; --line:#e6e8ec;
  --accent:#4f46e5; --accent2:#0ea5e9;
  --ok:#0f9d58; --okbg:#e7f6ee; --warn:#c77700; --warnbg:#fdf3e3; --bad:#d92d20; --badbg:#fdeceb;
  --win:#0f9d58; --winbg:#e7f6ee;
  --radius:16px; --shadow:0 1px 2px rgba(16,24,40,.04),0 8px 24px rgba(16,24,40,.06);
}
@media(prefers-color-scheme:dark){:root{
  --bg:#0d0f14; --panel:#151922; --ink:#eaecef; --sub:#98a1b3; --line:#232936;
  --accent:#8b8cf7; --accent2:#38bdf8;
  --ok:#37d399; --okbg:#0f2a20; --warn:#f2b34b; --warnbg:#2a2110; --bad:#f77066; --badbg:#2a1414;
  --win:#37d399; --winbg:#0f2a20;
  --shadow:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.35);
}}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:96px}
body{margin:0;background:var(--bg);color:var(--ink);
  font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}
.wrap{max-width:1200px;margin:0 auto;padding:0 20px}
.hero{padding:56px 0 26px}
.hero .kick{color:var(--accent);font-weight:700;letter-spacing:.08em;text-transform:uppercase;font-size:12px}
.hero h1{margin:.25em 0 .35em;font-size:clamp(26px,4vw,40px);line-height:1.1;letter-spacing:-.02em}
.hero p.lede{margin:0;color:var(--sub);max-width:74ch;font-size:16px}
.reading{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 18px;margin:18px 0 4px;box-shadow:var(--shadow);font-size:13.5px;color:var(--sub)}
.reading b{color:var(--ink)}
.dot{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px}
.legend{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin:22px 0 4px}
.chip{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;box-shadow:var(--shadow)}
.chip b{display:block;font-size:14px;margin-bottom:3px}.chip span{color:var(--sub);font-size:12.5px;line-height:1.45}
nav.sticky{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 82%,transparent);
  backdrop-filter:saturate(150%) blur(10px);border-bottom:1px solid var(--line);margin-top:24px}
nav.sticky .wrap{display:flex;gap:7px;flex-wrap:wrap;align-items:center;padding-top:10px;padding-bottom:10px}
nav.sticky a{color:var(--sub);text-decoration:none;font-weight:600;font-size:13px;padding:5px 11px;border-radius:999px;border:1px solid transparent}
nav.sticky a:hover{color:var(--ink);border-color:var(--line);background:var(--panel)}
nav.sticky .ngrp{color:var(--accent);font-weight:700;text-transform:uppercase;letter-spacing:.06em;font-size:10.5px;padding-left:8px}
.band{border-top:1px solid var(--line);margin-top:8px}
.band-h{padding:34px 0 2px}.band-h .t{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}
.band-h h2.big{margin:.2em 0 .1em;font-size:24px;letter-spacing:-.01em}
.band-h p{margin:0;color:var(--sub);max-width:80ch;font-size:14.5px}
section.run{padding:30px 0;border-top:1px solid var(--line)}
.run-head h2{margin:0 0 4px;font-size:20px;letter-spacing:-.01em}
.run-head p{margin:0 0 18px;color:var(--sub);max-width:82ch}
.cols{display:grid;grid-template-columns:minmax(400px,1fr) minmax(430px,1.15fr);gap:26px;align-items:start}
@media(max-width:980px){.cols{grid-template-columns:1fr}}
.xwrap{display:grid;grid-template-columns:minmax(280px,.7fr) minmax(520px,1.6fr);gap:26px;align-items:start}
@media(max-width:980px){.xwrap{grid-template-columns:1fr}}
h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--sub);margin:0 0 12px}
.qt{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);font-variant-numeric:tabular-nums}
.qt th{text-align:right;font-size:12px;color:var(--sub);font-weight:600;padding:11px 14px;border-bottom:1px solid var(--line)}
.qt th:first-child{text-align:left}
.qt td{padding:9px 14px;border-bottom:1px solid var(--line)}
.qt tr:last-child td{border-bottom:none}
.qt .mname{font-weight:500}.qt .arrow{color:var(--sub);font-size:11px}
.qt .num{text-align:right}
.qt tr.grp td{background:color-mix(in srgb,var(--accent) 7%,var(--panel));font-size:11px;text-transform:uppercase;
  letter-spacing:.05em;color:var(--sub);font-weight:700;padding:7px 14px}
.gap-ok{color:var(--ok);background:var(--okbg);font-weight:600;border-radius:6px}
.gap-warn{color:var(--warn);background:var(--warnbg);font-weight:600;border-radius:6px}
.gap-bad{color:var(--bad);background:var(--badbg);font-weight:700;border-radius:6px}
.win{color:var(--win);background:var(--winbg);font-weight:700;border-radius:6px}
.seg{display:inline-flex;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:3px;margin-bottom:14px}
.seg-b{border:none;background:transparent;color:var(--sub);font:inherit;font-weight:600;font-size:13px;padding:5px 16px;border-radius:999px;cursor:pointer}
.seg-b.active{background:var(--accent);color:#fff}
.pane{display:none}.pane.show{display:block}
.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
@media(max-width:560px){.grid{grid-template-columns:1fr}}
.xgal{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:720px){.xgal{grid-template-columns:1fr}}
.xcol-h{font-size:12px;font-weight:700;letter-spacing:.03em;color:var(--ink);margin:0 0 10px;
  padding:6px 10px;background:var(--panel);border:1px solid var(--line);border-radius:8px;display:inline-block}
.cgrid{display:grid;grid-template-columns:1fr;gap:12px}
.scard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px;box-shadow:var(--shadow)}
.scard-h{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--sub);font-weight:700;margin:2px 4px 8px}
.vid{margin:0 0 8px}.vid:last-of-type{margin-bottom:2px}
.vid video{width:100%;display:block;border-radius:8px;background:#000;aspect-ratio:2/1;object-fit:cover}
.vid figcaption{font-size:11.5px;color:var(--sub);margin-top:4px;display:flex;justify-content:space-between}
.vid .gtp{color:var(--accent2);font-weight:600}
.empty{color:var(--sub);font-style:italic;padding:16px}
.ctrl{display:flex;align-items:center;gap:9px;margin-top:8px;padding:2px 2px 0}
.pp{flex:0 0 auto;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);background:var(--panel);
  color:var(--ink);font-size:12px;cursor:pointer;display:grid;place-items:center}
.pp:hover{border-color:var(--accent)}
.scrub{flex:1 1 auto;-webkit-appearance:none;appearance:none;height:5px;border-radius:999px;background:var(--line);cursor:pointer;outline:none}
.scrub::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent);border:2px solid var(--panel);box-shadow:0 1px 3px rgba(0,0,0,.3)}
.scrub::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--accent);border:2px solid var(--panel)}
.tlabel{flex:0 0 auto;font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums;min-width:38px;text-align:right}
footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);font-size:12.5px;margin-top:20px}
</style></head>
<body>
<header class="hero"><div class="wrap">
  <div class="kick">Visuo-tactile world model · Cosmos gen-7b</div>
  <h1>Overfit test &amp; cross-architecture</h1>
  <p class="lede">Short-horizon (16-frame) Cosmos-decoded rollouts. <b>Part 1</b> compares
    the <b>train</b> vs <b>val</b> set (overfit test) for the full V+T models. <b>Part 2</b> swaps
    the diffusion backbone <b>causal ↔ noncausal</b> across three modality configs
    (V+T, vision-only, tactile-only). Vision and tactile clips are latency-corrected and play in lockstep.</p>
  <div class="reading">
    <b>Gap column (Part 1):</b>
    <span class="dot" style="background:var(--ok)"></span>≤10% generalizing &nbsp;
    <span class="dot" style="background:var(--warn)"></span>10–35% mild &nbsp;
    <span class="dot" style="background:var(--bad)"></span>&gt;35% strong overfit. &nbsp;·&nbsp;
    <b>Green cell (Part 2)</b> = the winning backbone for that metric.
  </div>
  <div class="legend"><div class="chip"><b>v3 · baseline</b><span>Bidirectional temporal attention (full-window). The original Cosmos-tokenizer world model.</span></div><div class="chip"><b>v3 · causal</b><span>Causal temporal attention (per-frame tril mask) — matches the causal tokenizer and AR rollout regime.</span></div><div class="chip"><b>v3 · contact-aware</b><span>Adds the contact-aware tactile aux loss (x0-space, alpha_bar-weighted) on top of v3.</span></div></div>
</div></header>
<nav class="sticky"><div class="wrap"><span class="ngrp">Overfit</span><a href="#v3">v3 · baseline</a><a href="#causal">v3 · causal</a><a href="#contact">v3 · contact-aware</a><span class="ngrp">Cross-arch</span><a href="#x-vt">Full V + T</a><a href="#x-vision">Vision-only</a><a href="#x-tactile">Tactile-only</a><span class="ngrp">Ref frame</span><a href="#ref-v3">fixed p01 ref · baseline</a><a href="#ref-p01rand">random no-contact ref</a><a href="#ref-p01rand_v2t">random ref + V→T aux</a><span class="ngrp">Refinements</span><a href="#rf-p01rand">random ref (in-video)</a><a href="#rf-difflat">clean reference bank</a><a href="#rf-diffimg">difference image</a></div></nav>
<main class="wrap">
  <div class="band-h"><div class="t">Part 1</div><h2 class="big">Overfit test — full V + T</h2>
    <p>Same recipe, three backbones. Does the model memorize the ~30 training episodes?</p></div>
  <section class="run" id="v3">
      <div class="run-head"><h2>v3 · baseline</h2><p>Bidirectional temporal attention (full-window). The original Cosmos-tokenizer world model.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0955</td><td class="num">0.0827</td><td class="num gap-ok">-13%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8190</td><td class="num">0.8529</td><td class="num gap-ok">-4%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">25.3119</td><td class="num">26.5329</td><td class="num gap-ok">-5%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1508</td><td class="num">0.0839</td><td class="num gap-ok">-44%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1933</td><td class="num">0.0661</td><td class="num gap-ok">-66%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.3559</td><td class="num">0.1712</td><td class="num gap-bad">+52%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">131.7636</td><td class="num">34.5099</td><td class="num gap-ok">-74%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">104.3420</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3031</td><td class="num">0.5875</td><td class="num gap-ok">-94%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="causal">
      <div class="run-head"><h2>v3 · causal</h2><p>Causal temporal attention (per-frame tril mask) — matches the causal tokenizer and AR rollout regime.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0530</td><td class="num">0.0454</td><td class="num gap-ok">-14%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8789</td><td class="num">0.9016</td><td class="num gap-ok">-3%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">28.0306</td><td class="num">29.3914</td><td class="num gap-ok">-5%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1612</td><td class="num">0.0856</td><td class="num gap-ok">-47%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.2013</td><td class="num">0.0667</td><td class="num gap-ok">-67%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.2755</td><td class="num">0.1542</td><td class="num gap-bad">+44%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">144.7365</td><td class="num">33.4357</td><td class="num gap-ok">-77%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">27.4073</td><td class="num">0.0000</td><td class="num gap-ok">-100%</td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3281</td><td class="num">0.5312</td><td class="num gap-ok">-62%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/causal/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/causal/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/causal/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/causal/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/causal/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/causal/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/causal/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/causal/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="contact">
      <div class="run-head"><h2>v3 · contact-aware</h2><p>Adds the contact-aware tactile aux loss (x0-space, alpha_bar-weighted) on top of v3.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0659</td><td class="num">0.0508</td><td class="num gap-ok">-23%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8553</td><td class="num">0.8887</td><td class="num gap-ok">-4%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">26.7893</td><td class="num">28.5571</td><td class="num gap-ok">-7%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1350</td><td class="num">0.0735</td><td class="num gap-ok">-46%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1952</td><td class="num">0.0639</td><td class="num gap-ok">-67%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.3481</td><td class="num">0.2051</td><td class="num gap-bad">+41%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">130.1456</td><td class="num">32.8804</td><td class="num gap-ok">-75%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">0.3817</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.4219</td><td class="num">0.5844</td><td class="num gap-ok">-39%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/contact/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/contact/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/contact/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/contact/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/contact/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/contact/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/contact/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/contact/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/contact/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section>
  <div class="band band-h"><div class="t">Part 2</div><h2 class="big">Cross-architecture — causal vs noncausal</h2>
    <p>The same causal-backbone swap under three modality configurations. Val metrics; the winning backbone per metric is highlighted.</p></div>
  <section class="run xa" id="x-vt">
      <div class="run-head"><h2>Full V + T — causal vs noncausal</h2><p>Three views + two tactile sensors. Swapping the backbone from bidirectional (v3) to causal.</p></div>
      <div class="xwrap">
        <div class="xtab"><h3>noncausal vs causal (val)</h3><table class="qt"><thead><tr><th>metric (val)</th><th>noncausal</th><th>causal</th></tr></thead><tbody><tr class="grp"><td colspan="3">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num ">0.0827</td><td class="num win">0.0454</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num ">0.8529</td><td class="num win">0.9016</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num ">26.5329</td><td class="num win">29.3914</td></tr><tr class="grp"><td colspan="3">Tactile</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num win">0.0839</td><td class="num ">0.0856</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num win">0.0661</td><td class="num ">0.0667</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num win">0.1712</td><td class="num ">0.1542</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num ">34.5099</td><td class="num win">33.4357</td></tr><tr><td class="mname">onset err ms <span class="arrow"></span></td><td class="num ">104.3420</td><td class="num win">0.0000</td></tr></tbody></table></div>
        <div class="xvid"><h3>Rollouts — noncausal | causal</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="val">Val set</button><button class="seg-b" data-t="train">Train set</button></div><div class="xgal"><div class="xcol"><div class="xcol-h">noncausal · val_loss 0.1234</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div><div class="xcol"><div class="xcol-h">causal · val_loss 0.1647</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/causal/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/causal/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/causal/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/causal/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/causal/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/causal/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/causal/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/causal/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/causal/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div></div></div>
      </div></section><section class="run xa" id="x-vision">
      <div class="run-head"><h2>Vision-only — causal vs noncausal</h2><p>Tactile stream removed — isolates how the causal backbone affects pure visual prediction.</p></div>
      <div class="xwrap">
        <div class="xtab"><h3>noncausal vs causal (val)</h3><table class="qt"><thead><tr><th>metric (val)</th><th>noncausal</th><th>causal</th></tr></thead><tbody><tr class="grp"><td colspan="3">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num ">0.0687</td><td class="num win">0.0584</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num ">0.8555</td><td class="num win">0.8767</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num ">26.5801</td><td class="num win">27.8866</td></tr></tbody></table></div>
        <div class="xvid"><h3>Rollouts — noncausal | causal</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="val">Val set</button><button class="seg-b" data-t="train">Train set</button></div><div class="xgal"><div class="xcol"><div class="xcol-h">noncausal · val_loss 0.0297</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/vo_noncausal/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/vo_noncausal/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/vo_noncausal/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/vo_noncausal/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/vo_noncausal/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/vo_noncausal/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/vo_noncausal/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/vo_noncausal/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div><div class="xcol"><div class="xcol-h">causal · val_loss 0.0347</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/vo_causal/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/vo_causal/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/vo_causal/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/vo_causal/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/vo_causal/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/vo_causal/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/vo_causal/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/vo_causal/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div></div></div>
      </div></section><section class="run xa" id="x-tactile">
      <div class="run-head"><h2>Tactile-only — causal vs noncausal</h2><p>Visual stream removed — isolates the causal backbone's effect on tactile / contact prediction.</p></div>
      <div class="xwrap">
        <div class="xtab"><h3>noncausal vs causal (val)</h3><table class="qt"><thead><tr><th>metric (val)</th><th>noncausal</th><th>causal</th></tr></thead><tbody><tr class="grp"><td colspan="3">Tactile</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num win">0.0790</td><td class="num ">0.0790</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num win">0.0667</td><td class="num ">0.0676</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num win">0.1748</td><td class="num ">0.1674</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num win">34.2550</td><td class="num ">34.4423</td></tr><tr><td class="mname">onset err ms <span class="arrow"></span></td><td class="num win">0.0000</td><td class="num ">87.2179</td></tr></tbody></table></div>
        <div class="xvid"><h3>Rollouts — noncausal | causal</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="val">Val set</button><button class="seg-b" data-t="train">Train set</button></div><div class="xgal"><div class="xcol"><div class="xcol-h">noncausal · val_loss 0.1084</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/to_noncausal/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/to_noncausal/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/to_noncausal/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/to_noncausal/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/to_noncausal/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/to_noncausal/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/to_noncausal/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/to_noncausal/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_noncausal/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div><div class="xcol"><div class="xcol-h">causal · val_loss 0.1208</div><div class="pane show" data-split="val"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/to_causal/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/to_causal/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/to_causal/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/to_causal/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="train"><div class="cgrid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/to_causal/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/to_causal/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/to_causal/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/to_causal/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/to_causal/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div></div></div>
      </div></section>
  <div class="band band-h"><div class="t">Part 3</div><h2 class="big">Tactile reference frame — fixed vs random</h2>
    <p>Does sampling a random no-contact reference (vs one fixed p01 anchor) fix the tactile train/val divergence? The gap collapses and visual val LPIPS roughly halves — but held-out tactile contact quality (val IoU / spearman) stays flat: the pathology is removed, the data ceiling remains. The V→T aux head adds nothing.</p></div>
  <section class="run" id="ref-v3">
      <div class="run-head"><h2>fixed p01 ref · baseline</h2><p>Tactile delta measured against ONE fixed no-contact anchor per episode. The suspected-overfit baseline (train↓ / val plateau).</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0955</td><td class="num">0.0827</td><td class="num gap-ok">-13%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8190</td><td class="num">0.8529</td><td class="num gap-ok">-4%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">25.3119</td><td class="num">26.5329</td><td class="num gap-ok">-5%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1508</td><td class="num">0.0839</td><td class="num gap-ok">-44%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1933</td><td class="num">0.0661</td><td class="num gap-ok">-66%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.3559</td><td class="num">0.1712</td><td class="num gap-bad">+52%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">131.7636</td><td class="num">34.5099</td><td class="num gap-ok">-74%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">104.3420</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3031</td><td class="num">0.5875</td><td class="num gap-ok">-94%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/v3/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/v3/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/v3/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/v3/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/v3/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="ref-p01rand">
      <div class="run-head"><h2>random no-contact ref</h2><p>A random pixel-labeled no-contact frame is sampled as the reference per window (train aug). Collapses the tactile train/val loss gap 1.39→1.09 and roughly halves visual val LPIPS.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0395</td><td class="num">0.0419</td><td class="num gap-ok">+6%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.9061</td><td class="num">0.9001</td><td class="num gap-ok">+1%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">29.2115</td><td class="num">29.1317</td><td class="num gap-ok">+0%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.0839</td><td class="num">0.0813</td><td class="num gap-ok">-3%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1151</td><td class="num">0.0698</td><td class="num gap-ok">-39%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.4778</td><td class="num">0.1734</td><td class="num gap-bad">+64%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">92.2412</td><td class="num">35.5656</td><td class="num gap-ok">-61%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">0.0000</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3500</td><td class="num">0.5219</td><td class="num gap-ok">-49%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="ref-p01rand_v2t">
      <div class="run-head"><h2>random ref + V→T aux</h2><p>Same random reference plus the V→T auxiliary head (weight 0.5). Adds no gain — slightly worse tactile/visual than random-ref alone; V→T can be dropped.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0473</td><td class="num">0.0460</td><td class="num gap-ok">-3%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8962</td><td class="num">0.8977</td><td class="num gap-ok">-0%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">28.5951</td><td class="num">28.8901</td><td class="num gap-ok">-1%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1010</td><td class="num">0.0765</td><td class="num gap-ok">-24%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1582</td><td class="num">0.0687</td><td class="num gap-ok">-57%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.4096</td><td class="num">0.1762</td><td class="num gap-bad">+57%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">115.7422</td><td class="num">34.2311</td><td class="num gap-ok">-70%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">27.3989</td><td class="num">0.0000</td><td class="num gap-ok">-100%</td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3625</td><td class="num">0.5844</td><td class="num gap-ok">-61%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand_v2t/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand_v2t/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand_v2t/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand_v2t/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand_v2t/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand_v2t/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand_v2t/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand_v2t/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand_v2t/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section>
  <div class="band band-h"><div class="t">Part 4</div><h2 class="big">Reference refinements — clean bank & difference-image</h2>
    <p>Two principled attempts to push past the random-reference result: (1) guarantee the reference latent is clean via a replicate-16 bank; (2) target the encoded pixel-difference instead of the latent-difference. Neither beats plain random-reference — clean-bank is a wash (pool contamination was negligible), and difference-image is worst (its decode+ref reconstruction adds error, even though the model predicts the diff latent near-perfectly). The tactile ceiling is data + tokenizer fidelity, not reference cleanliness or diff-space.</p></div>
  <section class="run" id="rf-p01rand">
      <div class="run-head"><h2>random ref (in-video)</h2><p>The winner so far: random in-video no-contact reference, difference-LATENT target. Baseline for the two refinements.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0395</td><td class="num">0.0419</td><td class="num gap-ok">+6%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.9061</td><td class="num">0.9001</td><td class="num gap-ok">+1%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">29.2115</td><td class="num">29.1317</td><td class="num gap-ok">+0%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.0839</td><td class="num">0.0813</td><td class="num gap-ok">-3%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1151</td><td class="num">0.0698</td><td class="num gap-ok">-39%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.4778</td><td class="num">0.1734</td><td class="num gap-bad">+64%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">92.2412</td><td class="num">35.5656</td><td class="num gap-ok">-61%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">0.0000</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3500</td><td class="num">0.5219</td><td class="num gap-ok">-49%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/p01rand/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/p01rand/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/p01rand/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/p01rand/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/p01rand/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="rf-difflat">
      <div class="run-head"><h2>clean reference bank</h2><p>Guarantee the reference latent is clean via a replicate-16 bank (no in-video ti≥1 contamination). No gain — decoded LPIPS slightly worse, contact IoU tied: pool contamination was negligible in practice.</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0476</td><td class="num">0.0433</td><td class="num gap-ok">-9%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8970</td><td class="num">0.9040</td><td class="num gap-ok">-1%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">28.8151</td><td class="num">29.3747</td><td class="num gap-ok">-2%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1007</td><td class="num">0.0876</td><td class="num gap-ok">-13%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1427</td><td class="num">0.0743</td><td class="num gap-ok">-48%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.4012</td><td class="num">0.1763</td><td class="num gap-bad">+56%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">122.4160</td><td class="num">35.8125</td><td class="num gap-ok">-71%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num">51.4189</td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.3344</td><td class="num">0.4750</td><td class="num gap-ok">-42%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/difflat/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/difflat/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/difflat/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/difflat/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/difflat/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/difflat/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/difflat/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/difflat/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/difflat/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section><section class="run" id="rf-diffimg">
      <div class="run-head"><h2>difference image</h2><p>Target = encode((tac−ref)/255) on the fly; reconstruct tac ≈ decode(pred)+ref. The model predicts the diff latent near-perfectly, but the decode+ref roundtrip adds error → WORST decoded quality. (Its latent contact metrics are in diff-space, not comparable.)</p></div>
      <div class="cols">
        <div class="col-q"><h3>Overfit test — train vs val</h3><table class="qt"><thead><tr><th>metric</th><th>train (n=16)</th><th>val (n=16)</th><th>gap</th></tr></thead><tbody><tr class="grp"><td colspan="4">Visual — middle view</td></tr><tr><td class="mname">LPIPS <span class="arrow"></span></td><td class="num">0.0505</td><td class="num">0.0453</td><td class="num gap-ok">-10%</td></tr><tr><td class="mname">SSIM <span class="arrow"></span></td><td class="num">0.8939</td><td class="num">0.8965</td><td class="num gap-ok">-0%</td></tr><tr><td class="mname">PSNR <span class="arrow"></span></td><td class="num">28.7100</td><td class="num">28.8675</td><td class="num gap-ok">-1%</td></tr><tr class="grp"><td colspan="4">Tactile — perceptual</td></tr><tr><td class="mname">LPIPS · left <span class="arrow"></span></td><td class="num">0.1271</td><td class="num">0.0928</td><td class="num gap-ok">-27%</td></tr><tr><td class="mname">LPIPS · right <span class="arrow"></span></td><td class="num">0.1670</td><td class="num">0.0779</td><td class="num gap-ok">-53%</td></tr><tr class="grp"><td colspan="4">Tactile — contact / physics</td></tr><tr><td class="mname">mask IoU (τ8) <span class="arrow"></span></td><td class="num">0.2804</td><td class="num">0.0672</td><td class="num gap-bad">+76%</td></tr><tr><td class="mname">contact MSE <span class="arrow"></span></td><td class="num">149.4884</td><td class="num">46.5032</td><td class="num gap-ok">-69%</td></tr><tr><td class="mname">onset err <span class="arrow"></span></td><td class="num">0.0000</td><td class="num"></td><td class="num "></td></tr><tr><td class="mname">intensity spearman <span class="arrow"></span></td><td class="num">0.2656</td><td class="num">0.5062</td><td class="num gap-ok">-91%</td></tr></tbody></table></div>
        <div class="col-v"><h3>Short-horizon rollouts</h3><div class="qual"><div class="seg"><button class="seg-b active" data-t="train">Train set</button><button class="seg-b" data-t="val">Val set</button></div><div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/diffimg/train/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/diffimg/train/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/diffimg/train/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/diffimg/train/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/train/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div><div class="pane" data-split="val"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid"><video src="media/diffimg/val/sample_000/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_000/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_000/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid"><video src="media/diffimg/val/sample_001/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_001/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_001/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid"><video src="media/diffimg/val/sample_002/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_002/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_002/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid"><video src="media/diffimg/val/sample_003/view.mp4" muted playsinline preload="auto" data-lead="1"></video><figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_003/tl.mp4" muted playsinline preload="auto"></video><figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><figure class="vid"><video src="media/diffimg/val/sample_003/tr.mp4" muted playsinline preload="auto"></video><figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption></figure><div class="ctrl"><button class="pp" aria-label="play/pause"></button><input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub"><span class="tlabel">0/16</span></div></div></div></div></div></div>
      </div></section>
</main>
<footer><div class="wrap">Visuo-tactile world model · decoded with Cosmos CV4x8x8 · GT&nbsp;|&nbsp;pred are future-half predictions (history skipped for metrics).</div></footer>
<script>
document.querySelectorAll('.qual').forEach(q=>{
  const panes=q.querySelectorAll('.pane'), btns=q.querySelectorAll('.seg-b');
  function sel(t){panes.forEach(p=>p.classList.toggle('show',p.dataset.split===t));
    btns.forEach(b=>b.classList.toggle('active',b.dataset.t===t));}
  btns.forEach(b=>b.addEventListener('click',()=>sel(b.dataset.t)));
});
const FPS=6;
document.querySelectorAll('.scard').forEach(card=>{
  const vids=[...card.querySelectorAll('video')];
  const lead=card.querySelector('video[data-lead]')||vids[0];
  const bar=card.querySelector('.scrub'), btn=card.querySelector('.pp'), lbl=card.querySelector('.tlabel');
  let userPaused=false, visible=false, dur=0, nF=16;
  function seekAll(t){vids.forEach(v=>{if(Math.abs(v.currentTime-t)>0.03){try{v.currentTime=t;}catch(e){}}});}
  function paint(){const t=lead.currentTime; if(dur) bar.value=Math.round(t/dur*1000);
    lbl.textContent=Math.min(Math.round(t*FPS),nF)+'/'+nF;}
  lead.addEventListener('loadedmetadata',()=>{dur=lead.duration||0;nF=Math.max(1,Math.round(dur*FPS));paint();});
  lead.addEventListener('timeupdate',()=>{
    vids.forEach(v=>{if(v!==lead&&Math.abs(v.currentTime-lead.currentTime)>0.05){try{v.currentTime=lead.currentTime;}catch(e){}}});paint();});
  lead.addEventListener('ended',()=>{seekAll(0); if(!userPaused&&visible) playAll();});
  function playAll(){btn.textContent='⏸';vids.forEach(v=>v.play().catch(()=>{}));}
  function pauseAll(){btn.textContent='▶';vids.forEach(v=>v.pause());}
  btn.addEventListener('click',()=>{ if(lead.paused){userPaused=false;playAll();} else {userPaused=true;pauseAll();} });
  bar.addEventListener('input',()=>{userPaused=true;pauseAll();seekAll(parseInt(bar.value,10)/1000*(dur||0));paint();});
  new IntersectionObserver(es=>es.forEach(e=>{visible=e.isIntersecting;
    if(visible&&!userPaused) playAll(); else if(!visible) pauseAll();}),{threshold:0.2}).observe(card);
});
</script>
</body></html>