yxma commited on
Commit
5fd6d07
·
verified ·
1 Parent(s): 4a144de

sync player: shared draggable scrubber, tactile clips slaved to view clock

Browse files
Files changed (1) hide show
  1. index.html +252 -96
index.html CHANGED
@@ -76,6 +76,16 @@ h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--sub)
76
  .vid video{width:100%;display:block;border-radius:8px;background:#000;aspect-ratio:2/1;object-fit:cover}
77
  .vid figcaption{font-size:11.5px;color:var(--sub);margin-top:4px;display:flex;justify-content:space-between}
78
  .vid .gtp{color:var(--accent2);font-weight:600}
 
 
 
 
 
 
 
 
 
 
79
  .empty{color:var(--sub);font-style:italic;padding:20px}
80
  footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);font-size:12.5px}
81
  .reading{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
@@ -163,101 +173,141 @@ footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);fon
163
  </div>
164
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
165
  <video src="media/v3/train/sample_000/view.mp4"
166
- autoplay loop muted playsinline preload="metadata"></video>
167
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
168
  </figure><figure class="vid">
169
  <video src="media/v3/train/sample_000/tl.mp4"
170
- autoplay loop muted playsinline preload="metadata"></video>
171
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
172
  </figure><figure class="vid">
173
  <video src="media/v3/train/sample_000/tr.mp4"
174
- autoplay loop muted playsinline preload="metadata"></video>
175
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
176
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
177
  <video src="media/v3/train/sample_001/view.mp4"
178
- autoplay loop muted playsinline preload="metadata"></video>
179
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
180
  </figure><figure class="vid">
181
  <video src="media/v3/train/sample_001/tl.mp4"
182
- autoplay loop muted playsinline preload="metadata"></video>
183
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
184
  </figure><figure class="vid">
185
  <video src="media/v3/train/sample_001/tr.mp4"
186
- autoplay loop muted playsinline preload="metadata"></video>
187
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
188
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
189
  <video src="media/v3/train/sample_002/view.mp4"
190
- autoplay loop muted playsinline preload="metadata"></video>
191
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
192
  </figure><figure class="vid">
193
  <video src="media/v3/train/sample_002/tl.mp4"
194
- autoplay loop muted playsinline preload="metadata"></video>
195
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
196
  </figure><figure class="vid">
197
  <video src="media/v3/train/sample_002/tr.mp4"
198
- autoplay loop muted playsinline preload="metadata"></video>
199
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
200
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
201
  <video src="media/v3/train/sample_003/view.mp4"
202
- autoplay loop muted playsinline preload="metadata"></video>
203
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
204
  </figure><figure class="vid">
205
  <video src="media/v3/train/sample_003/tl.mp4"
206
- autoplay loop muted playsinline preload="metadata"></video>
207
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
208
  </figure><figure class="vid">
209
  <video src="media/v3/train/sample_003/tr.mp4"
210
- autoplay loop muted playsinline preload="metadata"></video>
211
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
212
- </figure></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">
 
 
 
 
 
213
  <video src="media/v3/val/sample_000/view.mp4"
214
- autoplay loop muted playsinline preload="metadata"></video>
215
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
216
  </figure><figure class="vid">
217
  <video src="media/v3/val/sample_000/tl.mp4"
218
- autoplay loop muted playsinline preload="metadata"></video>
219
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
220
  </figure><figure class="vid">
221
  <video src="media/v3/val/sample_000/tr.mp4"
222
- autoplay loop muted playsinline preload="metadata"></video>
223
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
224
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
225
  <video src="media/v3/val/sample_001/view.mp4"
226
- autoplay loop muted playsinline preload="metadata"></video>
227
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
228
  </figure><figure class="vid">
229
  <video src="media/v3/val/sample_001/tl.mp4"
230
- autoplay loop muted playsinline preload="metadata"></video>
231
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
232
  </figure><figure class="vid">
233
  <video src="media/v3/val/sample_001/tr.mp4"
234
- autoplay loop muted playsinline preload="metadata"></video>
235
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
236
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
237
  <video src="media/v3/val/sample_002/view.mp4"
238
- autoplay loop muted playsinline preload="metadata"></video>
239
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
240
  </figure><figure class="vid">
241
  <video src="media/v3/val/sample_002/tl.mp4"
242
- autoplay loop muted playsinline preload="metadata"></video>
243
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
244
  </figure><figure class="vid">
245
  <video src="media/v3/val/sample_002/tr.mp4"
246
- autoplay loop muted playsinline preload="metadata"></video>
247
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
248
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
249
  <video src="media/v3/val/sample_003/view.mp4"
250
- autoplay loop muted playsinline preload="metadata"></video>
251
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
252
  </figure><figure class="vid">
253
  <video src="media/v3/val/sample_003/tl.mp4"
254
- autoplay loop muted playsinline preload="metadata"></video>
255
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
256
  </figure><figure class="vid">
257
  <video src="media/v3/val/sample_003/tr.mp4"
258
- autoplay loop muted playsinline preload="metadata"></video>
259
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
260
- </figure></div></div></div>
 
 
 
 
 
261
  </div>
262
  </div>
263
  </div>
@@ -325,101 +375,141 @@ footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);fon
325
  </div>
326
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
327
  <video src="media/causal/train/sample_000/view.mp4"
328
- autoplay loop muted playsinline preload="metadata"></video>
329
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
330
  </figure><figure class="vid">
331
  <video src="media/causal/train/sample_000/tl.mp4"
332
- autoplay loop muted playsinline preload="metadata"></video>
333
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
334
  </figure><figure class="vid">
335
  <video src="media/causal/train/sample_000/tr.mp4"
336
- autoplay loop muted playsinline preload="metadata"></video>
337
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
338
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
339
  <video src="media/causal/train/sample_001/view.mp4"
340
- autoplay loop muted playsinline preload="metadata"></video>
341
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
342
  </figure><figure class="vid">
343
  <video src="media/causal/train/sample_001/tl.mp4"
344
- autoplay loop muted playsinline preload="metadata"></video>
345
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
346
  </figure><figure class="vid">
347
  <video src="media/causal/train/sample_001/tr.mp4"
348
- autoplay loop muted playsinline preload="metadata"></video>
349
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
350
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
351
  <video src="media/causal/train/sample_002/view.mp4"
352
- autoplay loop muted playsinline preload="metadata"></video>
353
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
354
  </figure><figure class="vid">
355
  <video src="media/causal/train/sample_002/tl.mp4"
356
- autoplay loop muted playsinline preload="metadata"></video>
357
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
358
  </figure><figure class="vid">
359
  <video src="media/causal/train/sample_002/tr.mp4"
360
- autoplay loop muted playsinline preload="metadata"></video>
361
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
362
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
363
  <video src="media/causal/train/sample_003/view.mp4"
364
- autoplay loop muted playsinline preload="metadata"></video>
365
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
366
  </figure><figure class="vid">
367
  <video src="media/causal/train/sample_003/tl.mp4"
368
- autoplay loop muted playsinline preload="metadata"></video>
369
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
370
  </figure><figure class="vid">
371
  <video src="media/causal/train/sample_003/tr.mp4"
372
- autoplay loop muted playsinline preload="metadata"></video>
373
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
374
- </figure></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">
 
 
 
 
 
375
  <video src="media/causal/val/sample_000/view.mp4"
376
- autoplay loop muted playsinline preload="metadata"></video>
377
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
378
  </figure><figure class="vid">
379
  <video src="media/causal/val/sample_000/tl.mp4"
380
- autoplay loop muted playsinline preload="metadata"></video>
381
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
382
  </figure><figure class="vid">
383
  <video src="media/causal/val/sample_000/tr.mp4"
384
- autoplay loop muted playsinline preload="metadata"></video>
385
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
386
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
387
  <video src="media/causal/val/sample_001/view.mp4"
388
- autoplay loop muted playsinline preload="metadata"></video>
389
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
390
  </figure><figure class="vid">
391
  <video src="media/causal/val/sample_001/tl.mp4"
392
- autoplay loop muted playsinline preload="metadata"></video>
393
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
394
  </figure><figure class="vid">
395
  <video src="media/causal/val/sample_001/tr.mp4"
396
- autoplay loop muted playsinline preload="metadata"></video>
397
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
398
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
399
  <video src="media/causal/val/sample_002/view.mp4"
400
- autoplay loop muted playsinline preload="metadata"></video>
401
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
402
  </figure><figure class="vid">
403
  <video src="media/causal/val/sample_002/tl.mp4"
404
- autoplay loop muted playsinline preload="metadata"></video>
405
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
406
  </figure><figure class="vid">
407
  <video src="media/causal/val/sample_002/tr.mp4"
408
- autoplay loop muted playsinline preload="metadata"></video>
409
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
410
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
411
  <video src="media/causal/val/sample_003/view.mp4"
412
- autoplay loop muted playsinline preload="metadata"></video>
413
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
414
  </figure><figure class="vid">
415
  <video src="media/causal/val/sample_003/tl.mp4"
416
- autoplay loop muted playsinline preload="metadata"></video>
417
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
418
  </figure><figure class="vid">
419
  <video src="media/causal/val/sample_003/tr.mp4"
420
- autoplay loop muted playsinline preload="metadata"></video>
421
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
422
- </figure></div></div></div>
 
 
 
 
 
423
  </div>
424
  </div>
425
  </div>
@@ -487,107 +577,148 @@ footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);fon
487
  </div>
488
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
489
  <video src="media/contact/train/sample_000/view.mp4"
490
- autoplay loop muted playsinline preload="metadata"></video>
491
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
492
  </figure><figure class="vid">
493
  <video src="media/contact/train/sample_000/tl.mp4"
494
- autoplay loop muted playsinline preload="metadata"></video>
495
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
496
  </figure><figure class="vid">
497
  <video src="media/contact/train/sample_000/tr.mp4"
498
- autoplay loop muted playsinline preload="metadata"></video>
499
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
500
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
501
  <video src="media/contact/train/sample_001/view.mp4"
502
- autoplay loop muted playsinline preload="metadata"></video>
503
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
504
  </figure><figure class="vid">
505
  <video src="media/contact/train/sample_001/tl.mp4"
506
- autoplay loop muted playsinline preload="metadata"></video>
507
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
508
  </figure><figure class="vid">
509
  <video src="media/contact/train/sample_001/tr.mp4"
510
- autoplay loop muted playsinline preload="metadata"></video>
511
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
512
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
513
  <video src="media/contact/train/sample_002/view.mp4"
514
- autoplay loop muted playsinline preload="metadata"></video>
515
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
516
  </figure><figure class="vid">
517
  <video src="media/contact/train/sample_002/tl.mp4"
518
- autoplay loop muted playsinline preload="metadata"></video>
519
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
520
  </figure><figure class="vid">
521
  <video src="media/contact/train/sample_002/tr.mp4"
522
- autoplay loop muted playsinline preload="metadata"></video>
523
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
524
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
525
  <video src="media/contact/train/sample_003/view.mp4"
526
- autoplay loop muted playsinline preload="metadata"></video>
527
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
528
  </figure><figure class="vid">
529
  <video src="media/contact/train/sample_003/tl.mp4"
530
- autoplay loop muted playsinline preload="metadata"></video>
531
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
532
  </figure><figure class="vid">
533
  <video src="media/contact/train/sample_003/tr.mp4"
534
- autoplay loop muted playsinline preload="metadata"></video>
535
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
536
- </figure></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">
 
 
 
 
 
537
  <video src="media/contact/val/sample_000/view.mp4"
538
- autoplay loop muted playsinline preload="metadata"></video>
539
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
540
  </figure><figure class="vid">
541
  <video src="media/contact/val/sample_000/tl.mp4"
542
- autoplay loop muted playsinline preload="metadata"></video>
543
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
544
  </figure><figure class="vid">
545
  <video src="media/contact/val/sample_000/tr.mp4"
546
- autoplay loop muted playsinline preload="metadata"></video>
547
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
548
- </figure></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
 
 
 
 
 
549
  <video src="media/contact/val/sample_001/view.mp4"
550
- autoplay loop muted playsinline preload="metadata"></video>
551
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
552
  </figure><figure class="vid">
553
  <video src="media/contact/val/sample_001/tl.mp4"
554
- autoplay loop muted playsinline preload="metadata"></video>
555
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
556
  </figure><figure class="vid">
557
  <video src="media/contact/val/sample_001/tr.mp4"
558
- autoplay loop muted playsinline preload="metadata"></video>
559
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
560
- </figure></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
 
 
 
 
 
561
  <video src="media/contact/val/sample_002/view.mp4"
562
- autoplay loop muted playsinline preload="metadata"></video>
563
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
564
  </figure><figure class="vid">
565
  <video src="media/contact/val/sample_002/tl.mp4"
566
- autoplay loop muted playsinline preload="metadata"></video>
567
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
568
  </figure><figure class="vid">
569
  <video src="media/contact/val/sample_002/tr.mp4"
570
- autoplay loop muted playsinline preload="metadata"></video>
571
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
572
- </figure></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
 
 
 
 
 
573
  <video src="media/contact/val/sample_003/view.mp4"
574
- autoplay loop muted playsinline preload="metadata"></video>
575
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
576
  </figure><figure class="vid">
577
  <video src="media/contact/val/sample_003/tl.mp4"
578
- autoplay loop muted playsinline preload="metadata"></video>
579
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
580
  </figure><figure class="vid">
581
  <video src="media/contact/val/sample_003/tr.mp4"
582
- autoplay loop muted playsinline preload="metadata"></video>
583
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
584
- </figure></div></div></div>
 
 
 
 
 
585
  </div>
586
  </div>
587
  </div>
588
  </section></main>
589
  <footer><div>Visuo-tactile world model · decoded with Cosmos CV4x8x8 · GT&nbsp;|&nbsp;pred videos are future-half predictions (history skipped for metrics).</div></footer>
590
  <script>
 
591
  document.querySelectorAll('.qual').forEach(q=>{
592
  const panes=q.querySelectorAll('.pane'), btns=q.querySelectorAll('.seg-b');
593
  function sel(t){panes.forEach(p=>p.classList.toggle('show',p.dataset.split===t));
@@ -595,5 +726,30 @@ document.querySelectorAll('.qual').forEach(q=>{
595
  btns.forEach(b=>b.addEventListener('click',()=>sel(b.dataset.t)));
596
  sel('train');
597
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  </script>
599
  </body></html>
 
76
  .vid video{width:100%;display:block;border-radius:8px;background:#000;aspect-ratio:2/1;object-fit:cover}
77
  .vid figcaption{font-size:11.5px;color:var(--sub);margin-top:4px;display:flex;justify-content:space-between}
78
  .vid .gtp{color:var(--accent2);font-weight:600}
79
+ .ctrl{display:flex;align-items:center;gap:9px;margin-top:8px;padding:2px 2px 0}
80
+ .pp{flex:0 0 auto;width:30px;height:30px;border-radius:8px;border:1px solid var(--line);
81
+ background:var(--panel);color:var(--ink);font-size:12px;cursor:pointer;line-height:1;display:grid;place-items:center}
82
+ .pp:hover{border-color:var(--accent)}
83
+ .scrub{flex:1 1 auto;-webkit-appearance:none;appearance:none;height:5px;border-radius:999px;
84
+ background:var(--line);cursor:pointer;outline:none}
85
+ .scrub::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;
86
+ background:var(--accent);border:2px solid var(--panel);box-shadow:0 1px 3px rgba(0,0,0,.3)}
87
+ .scrub::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--accent);border:2px solid var(--panel)}
88
+ .tlabel{flex:0 0 auto;font-size:11px;color:var(--sub);font-variant-numeric:tabular-nums;min-width:38px;text-align:right}
89
  .empty{color:var(--sub);font-style:italic;padding:20px}
90
  footer{border-top:1px solid var(--line);padding:26px 0 50px;color:var(--sub);font-size:12.5px}
91
  .reading{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
 
173
  </div>
174
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
175
  <video src="media/v3/train/sample_000/view.mp4"
176
+ muted playsinline preload="auto" data-lead="1"></video>
177
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
178
  </figure><figure class="vid">
179
  <video src="media/v3/train/sample_000/tl.mp4"
180
+ muted playsinline preload="auto"></video>
181
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
182
  </figure><figure class="vid">
183
  <video src="media/v3/train/sample_000/tr.mp4"
184
+ muted playsinline preload="auto"></video>
185
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
186
+ </figure>
187
+ <div class="ctrl">
188
+ <button class="pp" aria-label="play/pause">▶</button>
189
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
190
+ <span class="tlabel">0/16</span>
191
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
192
  <video src="media/v3/train/sample_001/view.mp4"
193
+ muted playsinline preload="auto" data-lead="1"></video>
194
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
195
  </figure><figure class="vid">
196
  <video src="media/v3/train/sample_001/tl.mp4"
197
+ muted playsinline preload="auto"></video>
198
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
199
  </figure><figure class="vid">
200
  <video src="media/v3/train/sample_001/tr.mp4"
201
+ muted playsinline preload="auto"></video>
202
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
203
+ </figure>
204
+ <div class="ctrl">
205
+ <button class="pp" aria-label="play/pause">▶</button>
206
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
207
+ <span class="tlabel">0/16</span>
208
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
209
  <video src="media/v3/train/sample_002/view.mp4"
210
+ muted playsinline preload="auto" data-lead="1"></video>
211
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
212
  </figure><figure class="vid">
213
  <video src="media/v3/train/sample_002/tl.mp4"
214
+ muted playsinline preload="auto"></video>
215
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
216
  </figure><figure class="vid">
217
  <video src="media/v3/train/sample_002/tr.mp4"
218
+ muted playsinline preload="auto"></video>
219
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
220
+ </figure>
221
+ <div class="ctrl">
222
+ <button class="pp" aria-label="play/pause">▶</button>
223
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
224
+ <span class="tlabel">0/16</span>
225
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
226
  <video src="media/v3/train/sample_003/view.mp4"
227
+ muted playsinline preload="auto" data-lead="1"></video>
228
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
229
  </figure><figure class="vid">
230
  <video src="media/v3/train/sample_003/tl.mp4"
231
+ muted playsinline preload="auto"></video>
232
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
233
  </figure><figure class="vid">
234
  <video src="media/v3/train/sample_003/tr.mp4"
235
+ muted playsinline preload="auto"></video>
236
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
237
+ </figure>
238
+ <div class="ctrl">
239
+ <button class="pp" aria-label="play/pause">▶</button>
240
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
241
+ <span class="tlabel">0/16</span>
242
+ </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">
243
  <video src="media/v3/val/sample_000/view.mp4"
244
+ muted playsinline preload="auto" data-lead="1"></video>
245
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
246
  </figure><figure class="vid">
247
  <video src="media/v3/val/sample_000/tl.mp4"
248
+ muted playsinline preload="auto"></video>
249
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
250
  </figure><figure class="vid">
251
  <video src="media/v3/val/sample_000/tr.mp4"
252
+ muted playsinline preload="auto"></video>
253
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
254
+ </figure>
255
+ <div class="ctrl">
256
+ <button class="pp" aria-label="play/pause">▶</button>
257
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
258
+ <span class="tlabel">0/16</span>
259
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
260
  <video src="media/v3/val/sample_001/view.mp4"
261
+ muted playsinline preload="auto" data-lead="1"></video>
262
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
263
  </figure><figure class="vid">
264
  <video src="media/v3/val/sample_001/tl.mp4"
265
+ muted playsinline preload="auto"></video>
266
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
267
  </figure><figure class="vid">
268
  <video src="media/v3/val/sample_001/tr.mp4"
269
+ muted playsinline preload="auto"></video>
270
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
271
+ </figure>
272
+ <div class="ctrl">
273
+ <button class="pp" aria-label="play/pause">▶</button>
274
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
275
+ <span class="tlabel">0/16</span>
276
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
277
  <video src="media/v3/val/sample_002/view.mp4"
278
+ muted playsinline preload="auto" data-lead="1"></video>
279
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
280
  </figure><figure class="vid">
281
  <video src="media/v3/val/sample_002/tl.mp4"
282
+ muted playsinline preload="auto"></video>
283
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
284
  </figure><figure class="vid">
285
  <video src="media/v3/val/sample_002/tr.mp4"
286
+ muted playsinline preload="auto"></video>
287
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
288
+ </figure>
289
+ <div class="ctrl">
290
+ <button class="pp" aria-label="play/pause">▶</button>
291
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
292
+ <span class="tlabel">0/16</span>
293
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
294
  <video src="media/v3/val/sample_003/view.mp4"
295
+ muted playsinline preload="auto" data-lead="1"></video>
296
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
297
  </figure><figure class="vid">
298
  <video src="media/v3/val/sample_003/tl.mp4"
299
+ muted playsinline preload="auto"></video>
300
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
301
  </figure><figure class="vid">
302
  <video src="media/v3/val/sample_003/tr.mp4"
303
+ muted playsinline preload="auto"></video>
304
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
305
+ </figure>
306
+ <div class="ctrl">
307
+ <button class="pp" aria-label="play/pause">▶</button>
308
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
309
+ <span class="tlabel">0/16</span>
310
+ </div></div></div></div>
311
  </div>
312
  </div>
313
  </div>
 
375
  </div>
376
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
377
  <video src="media/causal/train/sample_000/view.mp4"
378
+ muted playsinline preload="auto" data-lead="1"></video>
379
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
380
  </figure><figure class="vid">
381
  <video src="media/causal/train/sample_000/tl.mp4"
382
+ muted playsinline preload="auto"></video>
383
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
384
  </figure><figure class="vid">
385
  <video src="media/causal/train/sample_000/tr.mp4"
386
+ muted playsinline preload="auto"></video>
387
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
388
+ </figure>
389
+ <div class="ctrl">
390
+ <button class="pp" aria-label="play/pause">▶</button>
391
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
392
+ <span class="tlabel">0/16</span>
393
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
394
  <video src="media/causal/train/sample_001/view.mp4"
395
+ muted playsinline preload="auto" data-lead="1"></video>
396
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
397
  </figure><figure class="vid">
398
  <video src="media/causal/train/sample_001/tl.mp4"
399
+ muted playsinline preload="auto"></video>
400
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
401
  </figure><figure class="vid">
402
  <video src="media/causal/train/sample_001/tr.mp4"
403
+ muted playsinline preload="auto"></video>
404
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
405
+ </figure>
406
+ <div class="ctrl">
407
+ <button class="pp" aria-label="play/pause">▶</button>
408
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
409
+ <span class="tlabel">0/16</span>
410
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
411
  <video src="media/causal/train/sample_002/view.mp4"
412
+ muted playsinline preload="auto" data-lead="1"></video>
413
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
414
  </figure><figure class="vid">
415
  <video src="media/causal/train/sample_002/tl.mp4"
416
+ muted playsinline preload="auto"></video>
417
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
418
  </figure><figure class="vid">
419
  <video src="media/causal/train/sample_002/tr.mp4"
420
+ muted playsinline preload="auto"></video>
421
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
422
+ </figure>
423
+ <div class="ctrl">
424
+ <button class="pp" aria-label="play/pause">▶</button>
425
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
426
+ <span class="tlabel">0/16</span>
427
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
428
  <video src="media/causal/train/sample_003/view.mp4"
429
+ muted playsinline preload="auto" data-lead="1"></video>
430
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
431
  </figure><figure class="vid">
432
  <video src="media/causal/train/sample_003/tl.mp4"
433
+ muted playsinline preload="auto"></video>
434
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
435
  </figure><figure class="vid">
436
  <video src="media/causal/train/sample_003/tr.mp4"
437
+ muted playsinline preload="auto"></video>
438
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
439
+ </figure>
440
+ <div class="ctrl">
441
+ <button class="pp" aria-label="play/pause">▶</button>
442
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
443
+ <span class="tlabel">0/16</span>
444
+ </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">
445
  <video src="media/causal/val/sample_000/view.mp4"
446
+ muted playsinline preload="auto" data-lead="1"></video>
447
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
448
  </figure><figure class="vid">
449
  <video src="media/causal/val/sample_000/tl.mp4"
450
+ muted playsinline preload="auto"></video>
451
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
452
  </figure><figure class="vid">
453
  <video src="media/causal/val/sample_000/tr.mp4"
454
+ muted playsinline preload="auto"></video>
455
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
456
+ </figure>
457
+ <div class="ctrl">
458
+ <button class="pp" aria-label="play/pause">▶</button>
459
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
460
+ <span class="tlabel">0/16</span>
461
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
462
  <video src="media/causal/val/sample_001/view.mp4"
463
+ muted playsinline preload="auto" data-lead="1"></video>
464
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
465
  </figure><figure class="vid">
466
  <video src="media/causal/val/sample_001/tl.mp4"
467
+ muted playsinline preload="auto"></video>
468
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
469
  </figure><figure class="vid">
470
  <video src="media/causal/val/sample_001/tr.mp4"
471
+ muted playsinline preload="auto"></video>
472
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
473
+ </figure>
474
+ <div class="ctrl">
475
+ <button class="pp" aria-label="play/pause">▶</button>
476
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
477
+ <span class="tlabel">0/16</span>
478
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
479
  <video src="media/causal/val/sample_002/view.mp4"
480
+ muted playsinline preload="auto" data-lead="1"></video>
481
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
482
  </figure><figure class="vid">
483
  <video src="media/causal/val/sample_002/tl.mp4"
484
+ muted playsinline preload="auto"></video>
485
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
486
  </figure><figure class="vid">
487
  <video src="media/causal/val/sample_002/tr.mp4"
488
+ muted playsinline preload="auto"></video>
489
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
490
+ </figure>
491
+ <div class="ctrl">
492
+ <button class="pp" aria-label="play/pause">▶</button>
493
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
494
+ <span class="tlabel">0/16</span>
495
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
496
  <video src="media/causal/val/sample_003/view.mp4"
497
+ muted playsinline preload="auto" data-lead="1"></video>
498
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
499
  </figure><figure class="vid">
500
  <video src="media/causal/val/sample_003/tl.mp4"
501
+ muted playsinline preload="auto"></video>
502
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
503
  </figure><figure class="vid">
504
  <video src="media/causal/val/sample_003/tr.mp4"
505
+ muted playsinline preload="auto"></video>
506
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
507
+ </figure>
508
+ <div class="ctrl">
509
+ <button class="pp" aria-label="play/pause">▶</button>
510
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
511
+ <span class="tlabel">0/16</span>
512
+ </div></div></div></div>
513
  </div>
514
  </div>
515
  </div>
 
577
  </div>
578
  <div class="pane" data-split="train"><div class="grid"><div class="scard"><div class="scard-h">sample 000</div><figure class="vid">
579
  <video src="media/contact/train/sample_000/view.mp4"
580
+ muted playsinline preload="auto" data-lead="1"></video>
581
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
582
  </figure><figure class="vid">
583
  <video src="media/contact/train/sample_000/tl.mp4"
584
+ muted playsinline preload="auto"></video>
585
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
586
  </figure><figure class="vid">
587
  <video src="media/contact/train/sample_000/tr.mp4"
588
+ muted playsinline preload="auto"></video>
589
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
590
+ </figure>
591
+ <div class="ctrl">
592
+ <button class="pp" aria-label="play/pause">▶</button>
593
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
594
+ <span class="tlabel">0/16</span>
595
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
596
  <video src="media/contact/train/sample_001/view.mp4"
597
+ muted playsinline preload="auto" data-lead="1"></video>
598
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
599
  </figure><figure class="vid">
600
  <video src="media/contact/train/sample_001/tl.mp4"
601
+ muted playsinline preload="auto"></video>
602
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
603
  </figure><figure class="vid">
604
  <video src="media/contact/train/sample_001/tr.mp4"
605
+ muted playsinline preload="auto"></video>
606
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
607
+ </figure>
608
+ <div class="ctrl">
609
+ <button class="pp" aria-label="play/pause">▶</button>
610
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
611
+ <span class="tlabel">0/16</span>
612
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
613
  <video src="media/contact/train/sample_002/view.mp4"
614
+ muted playsinline preload="auto" data-lead="1"></video>
615
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
616
  </figure><figure class="vid">
617
  <video src="media/contact/train/sample_002/tl.mp4"
618
+ muted playsinline preload="auto"></video>
619
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
620
  </figure><figure class="vid">
621
  <video src="media/contact/train/sample_002/tr.mp4"
622
+ muted playsinline preload="auto"></video>
623
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
624
+ </figure>
625
+ <div class="ctrl">
626
+ <button class="pp" aria-label="play/pause">▶</button>
627
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
628
+ <span class="tlabel">0/16</span>
629
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
630
  <video src="media/contact/train/sample_003/view.mp4"
631
+ muted playsinline preload="auto" data-lead="1"></video>
632
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
633
  </figure><figure class="vid">
634
  <video src="media/contact/train/sample_003/tl.mp4"
635
+ muted playsinline preload="auto"></video>
636
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
637
  </figure><figure class="vid">
638
  <video src="media/contact/train/sample_003/tr.mp4"
639
+ muted playsinline preload="auto"></video>
640
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
641
+ </figure>
642
+ <div class="ctrl">
643
+ <button class="pp" aria-label="play/pause">▶</button>
644
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
645
+ <span class="tlabel">0/16</span>
646
+ </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">
647
  <video src="media/contact/val/sample_000/view.mp4"
648
+ muted playsinline preload="auto" data-lead="1"></video>
649
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
650
  </figure><figure class="vid">
651
  <video src="media/contact/val/sample_000/tl.mp4"
652
+ muted playsinline preload="auto"></video>
653
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
654
  </figure><figure class="vid">
655
  <video src="media/contact/val/sample_000/tr.mp4"
656
+ muted playsinline preload="auto"></video>
657
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
658
+ </figure>
659
+ <div class="ctrl">
660
+ <button class="pp" aria-label="play/pause">▶</button>
661
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
662
+ <span class="tlabel">0/16</span>
663
+ </div></div><div class="scard"><div class="scard-h">sample 001</div><figure class="vid">
664
  <video src="media/contact/val/sample_001/view.mp4"
665
+ muted playsinline preload="auto" data-lead="1"></video>
666
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
667
  </figure><figure class="vid">
668
  <video src="media/contact/val/sample_001/tl.mp4"
669
+ muted playsinline preload="auto"></video>
670
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
671
  </figure><figure class="vid">
672
  <video src="media/contact/val/sample_001/tr.mp4"
673
+ muted playsinline preload="auto"></video>
674
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
675
+ </figure>
676
+ <div class="ctrl">
677
+ <button class="pp" aria-label="play/pause">▶</button>
678
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
679
+ <span class="tlabel">0/16</span>
680
+ </div></div><div class="scard"><div class="scard-h">sample 002</div><figure class="vid">
681
  <video src="media/contact/val/sample_002/view.mp4"
682
+ muted playsinline preload="auto" data-lead="1"></video>
683
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
684
  </figure><figure class="vid">
685
  <video src="media/contact/val/sample_002/tl.mp4"
686
+ muted playsinline preload="auto"></video>
687
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
688
  </figure><figure class="vid">
689
  <video src="media/contact/val/sample_002/tr.mp4"
690
+ muted playsinline preload="auto"></video>
691
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
692
+ </figure>
693
+ <div class="ctrl">
694
+ <button class="pp" aria-label="play/pause">▶</button>
695
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
696
+ <span class="tlabel">0/16</span>
697
+ </div></div><div class="scard"><div class="scard-h">sample 003</div><figure class="vid">
698
  <video src="media/contact/val/sample_003/view.mp4"
699
+ muted playsinline preload="auto" data-lead="1"></video>
700
  <figcaption>middle view <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
701
  </figure><figure class="vid">
702
  <video src="media/contact/val/sample_003/tl.mp4"
703
+ muted playsinline preload="auto"></video>
704
  <figcaption>tactile · left <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
705
  </figure><figure class="vid">
706
  <video src="media/contact/val/sample_003/tr.mp4"
707
+ muted playsinline preload="auto"></video>
708
  <figcaption>tactile · right <span class="gtp">GT&nbsp;·&nbsp;pred</span></figcaption>
709
+ </figure>
710
+ <div class="ctrl">
711
+ <button class="pp" aria-label="play/pause">▶</button>
712
+ <input class="scrub" type="range" min="0" max="1000" value="0" step="1" aria-label="scrub">
713
+ <span class="tlabel">0/16</span>
714
+ </div></div></div></div>
715
  </div>
716
  </div>
717
  </div>
718
  </section></main>
719
  <footer><div>Visuo-tactile world model · decoded with Cosmos CV4x8x8 · GT&nbsp;|&nbsp;pred videos are future-half predictions (history skipped for metrics).</div></footer>
720
  <script>
721
+ // ---- train/val toggle ----
722
  document.querySelectorAll('.qual').forEach(q=>{
723
  const panes=q.querySelectorAll('.pane'), btns=q.querySelectorAll('.seg-b');
724
  function sel(t){panes.forEach(p=>p.classList.toggle('show',p.dataset.split===t));
 
726
  btns.forEach(b=>b.addEventListener('click',()=>sel(b.dataset.t)));
727
  sel('train');
728
  });
729
+ // ---- per-sample synchronized player: the middle-view clip is the clock leader;
730
+ // the two tactile clips are continuously slaved to its currentTime, so
731
+ // vision and (latency-corrected) tactile always display the same frame. ----
732
+ const FPS=6;
733
+ document.querySelectorAll('.scard').forEach(card=>{
734
+ const vids=[...card.querySelectorAll('video')];
735
+ const lead=card.querySelector('video[data-lead]')||vids[0];
736
+ const bar=card.querySelector('.scrub'), btn=card.querySelector('.pp'), lbl=card.querySelector('.tlabel');
737
+ let userPaused=false, visible=false, dur=0, nF=16;
738
+ function seekAll(t){vids.forEach(v=>{if(Math.abs(v.currentTime-t)>0.03){try{v.currentTime=t;}catch(e){}}});}
739
+ function paint(){const t=lead.currentTime; if(dur) bar.value=Math.round(t/dur*1000);
740
+ lbl.textContent=Math.min(Math.round(t*FPS),nF)+'/'+nF;}
741
+ lead.addEventListener('loadedmetadata',()=>{dur=lead.duration||0;nF=Math.max(1,Math.round(dur*FPS));paint();});
742
+ lead.addEventListener('timeupdate',()=>{ // relock the tactile clips to the leader every tick
743
+ vids.forEach(v=>{if(v!==lead&&Math.abs(v.currentTime-lead.currentTime)>0.05){try{v.currentTime=lead.currentTime;}catch(e){}}});
744
+ paint();});
745
+ lead.addEventListener('ended',()=>{seekAll(0); if(!userPaused&&visible) playAll();}); // synced loop
746
+ function playAll(){btn.textContent='⏸';vids.forEach(v=>v.play().catch(()=>{}));}
747
+ function pauseAll(){btn.textContent='▶';vids.forEach(v=>v.pause());}
748
+ btn.addEventListener('click',()=>{ if(lead.paused){userPaused=false;playAll();} else {userPaused=true;pauseAll();} });
749
+ bar.addEventListener('input',()=>{userPaused=true;pauseAll();seekAll(parseInt(bar.value,10)/1000*(dur||0));paint();});
750
+ // decode only what's on screen (avoids 70+ simultaneous decoders)
751
+ new IntersectionObserver(es=>es.forEach(e=>{visible=e.isIntersecting;
752
+ if(visible&&!userPaused) playAll(); else if(!visible) pauseAll();}),{threshold:0.25}).observe(card);
753
+ });
754
  </script>
755
  </body></html>