Update index.html
Browse files- index.html +205 -99
index.html
CHANGED
|
@@ -1,137 +1,213 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html lang="
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8" />
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
| 6 |
-
<title>AVIP – Benchmark</title>
|
| 7 |
-
<meta name="description" content="
|
| 8 |
|
| 9 |
-
<!-- Social
|
| 10 |
<meta property="og:title" content="AVIP Benchmark" />
|
| 11 |
-
<meta property="og:description" content="Do
|
| 12 |
<meta property="og:type" content="website" />
|
|
|
|
| 13 |
<meta name="twitter:card" content="summary_large_image" />
|
| 14 |
|
|
|
|
| 15 |
<style>
|
|
|
|
|
|
|
|
|
|
| 16 |
:root{
|
| 17 |
-
--bg:#0b0b0c;--surface:#111216;--text:#e9e9ee;--muted:#9aa0a6;--accent:#6ee7ff;--ring:rgba(110,231,255,.35)
|
|
|
|
|
|
|
| 18 |
}
|
| 19 |
-
@media (prefers-color-scheme:
|
| 20 |
-
:root{--bg:#fafafa;--surface:#
|
|
|
|
|
|
|
|
|
|
| 21 |
}
|
| 22 |
-
*{box-sizing:border-box}
|
| 23 |
-
html,body{height:100%}
|
| 24 |
body{
|
| 25 |
-
margin:0;
|
| 26 |
-
font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;
|
| 27 |
-
color:var(--text);
|
| 28 |
background:
|
| 29 |
radial-gradient(1200px 800px at 10% -5%, rgba(110,231,255,.08), transparent 40%),
|
| 30 |
radial-gradient(900px 700px at 110% 10%, rgba(110,231,255,.06), transparent 40%),
|
| 31 |
var(--bg);
|
| 32 |
}
|
| 33 |
-
.site-header{
|
| 34 |
-
|
| 35 |
-
display:flex;align-items:center;gap:1rem;justify-content:space-between;
|
| 36 |
-
padding:.8rem 1rem;border-bottom:1px solid rgba(255,255,255,.06);
|
| 37 |
background:color-mix(in oklab, var(--surface), transparent 35%);
|
| 38 |
backdrop-filter:saturate(1.2) blur(8px);
|
| 39 |
}
|
| 40 |
-
.logo{font-weight:
|
| 41 |
-
.logo
|
| 42 |
-
.
|
| 43 |
-
.site-nav
|
| 44 |
-
.site-nav a
|
| 45 |
-
.
|
|
|
|
| 46 |
@media (max-width: 720px){
|
| 47 |
-
.nav-toggle{display:inline-block}
|
| 48 |
-
.site-nav{position:absolute;right:1rem;top:3.4rem;flex-direction:column;padding:.6rem;background:var(--surface);border:
|
| 49 |
-
.site-nav.open{display:flex}
|
| 50 |
}
|
| 51 |
-
|
| 52 |
-
.hero
|
| 53 |
-
.hero
|
| 54 |
-
.
|
| 55 |
-
.
|
| 56 |
-
.
|
| 57 |
-
.
|
| 58 |
-
|
| 59 |
-
.
|
| 60 |
-
.
|
| 61 |
-
.
|
| 62 |
-
|
| 63 |
-
.
|
| 64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
</style>
|
| 66 |
</head>
|
| 67 |
<body>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
<header class="site-header">
|
| 69 |
-
<a href="#" class="logo">AVIP<span>Benchmark</span></a>
|
| 70 |
<button class="nav-toggle" aria-expanded="false" aria-controls="site-nav">☰</button>
|
| 71 |
-
<nav id="site-nav" class="site-nav" aria-label="
|
| 72 |
<a href="#home">Home</a>
|
| 73 |
-
<a href="#
|
| 74 |
<a href="#leaderboard">Leaderboard</a>
|
| 75 |
-
|
| 76 |
-
<a href="#
|
| 77 |
</nav>
|
| 78 |
</header>
|
| 79 |
|
| 80 |
-
<main>
|
| 81 |
-
<section
|
| 82 |
-
<h1>Do you hear it?</h1>
|
| 83 |
-
<p>
|
| 84 |
-
<a class="btn" href="#
|
|
|
|
|
|
|
|
|
|
| 85 |
</section>
|
| 86 |
|
| 87 |
-
<section id="
|
| 88 |
-
<h2>
|
|
|
|
| 89 |
<ul class="features">
|
| 90 |
-
<li>
|
| 91 |
-
<li>
|
| 92 |
-
<li>
|
| 93 |
-
|
| 94 |
-
<li>Ohne Build-Schritt – einfach hochladen</li>
|
| 95 |
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
</section>
|
| 97 |
|
| 98 |
-
<section id="leaderboard" class="section">
|
| 99 |
-
<h2>Leaderboard</h2>
|
| 100 |
-
<p class="muted">
|
| 101 |
<div class="table-wrap">
|
| 102 |
-
<table>
|
| 103 |
<thead>
|
| 104 |
-
<tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
</thead>
|
| 106 |
-
<tbody id="leaderboard-body"><!--
|
| 107 |
</table>
|
| 108 |
</div>
|
| 109 |
-
|
| 110 |
-
<!-- Eingebettete Beispiel-Daten (funktioniert auch lokal ohne Server) -->
|
| 111 |
<script id="leaderboard-data" type="application/json">{
|
| 112 |
"rows": [
|
| 113 |
-
{"rank": 1, "name": "
|
| 114 |
-
{"rank": 2, "name": "Gemini Pro", "score": 92, "updated": "2025-07-28"},
|
| 115 |
-
{"rank": 3, "name": "Gemini Flash
|
| 116 |
-
{"rank": 3, "name": "Gemini Flash
|
| 117 |
-
|
| 118 |
]
|
| 119 |
}</script>
|
| 120 |
</section>
|
| 121 |
|
| 122 |
-
|
| 123 |
-
<h2>
|
| 124 |
-
<
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
|
| 131 |
<section id="contact" class="section">
|
| 132 |
<h2>Contact</h2>
|
| 133 |
-
<p>Questions? <a href="mailto:
|
| 134 |
-
<p class="muted"> https://huggingface.co/Grets/AVIP
|
| 135 |
</section>
|
| 136 |
</main>
|
| 137 |
|
|
@@ -140,7 +216,7 @@
|
|
| 140 |
</footer>
|
| 141 |
|
| 142 |
<script>
|
| 143 |
-
// Mobile
|
| 144 |
const navToggle = document.querySelector('.nav-toggle');
|
| 145 |
const nav = document.getElementById('site-nav');
|
| 146 |
if (navToggle && nav) {
|
|
@@ -149,30 +225,60 @@
|
|
| 149 |
navToggle.setAttribute('aria-expanded', String(open));
|
| 150 |
});
|
| 151 |
}
|
| 152 |
-
//
|
| 153 |
const y = document.getElementById('year');
|
| 154 |
if (y) y.textContent = new Date().getFullYear();
|
| 155 |
|
| 156 |
-
// Leaderboard
|
| 157 |
-
(function renderLeaderboard(){
|
| 158 |
const el = document.getElementById('leaderboard-body');
|
| 159 |
-
const
|
| 160 |
-
if (!el
|
|
|
|
| 161 |
try {
|
| 162 |
-
const
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
})();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
</script>
|
| 177 |
</body>
|
| 178 |
-
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8" />
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
| 6 |
+
<title>AVIP – Audio–Vision Interaction Probe (Benchmark)</title>
|
| 7 |
+
<meta name="description" content="AVIP is a lightweight benchmark to check whether multimodal models truly use audio in videos." />
|
| 8 |
|
| 9 |
+
<!-- Social cards (add your own image at assets/cover.jpg) -->
|
| 10 |
<meta property="og:title" content="AVIP Benchmark" />
|
| 11 |
+
<meta property="og:description" content="Do multimodal models actually use audio in videos?" />
|
| 12 |
<meta property="og:type" content="website" />
|
| 13 |
+
<meta property="og:image" content="assets/cover.jpg" />
|
| 14 |
<meta name="twitter:card" content="summary_large_image" />
|
| 15 |
|
| 16 |
+
<link rel="icon" href="assets/favicon.png" />
|
| 17 |
<style>
|
| 18 |
+
/* =====================
|
| 19 |
+
THEME & BASICS
|
| 20 |
+
===================== */
|
| 21 |
:root{
|
| 22 |
+
--bg:#0b0b0c; --surface:#111216; --text:#e9e9ee; --muted:#9aa0a6; --accent:#6ee7ff; --ring:rgba(110,231,255,.35);
|
| 23 |
+
--card: color-mix(in oklab, var(--surface), transparent 8%);
|
| 24 |
+
--border: 1px solid rgba(255,255,255,.08);
|
| 25 |
}
|
| 26 |
+
@media (prefers-color-scheme: light){
|
| 27 |
+
:root{ --bg:#fafafa; --surface:#ffffff; --text:#101114; --muted:#5f6368; --accent:#0078ff; --ring:rgba(0,120,255,.2);
|
| 28 |
+
--card: color-mix(in oklab, var(--surface), transparent 4%);
|
| 29 |
+
--border: 1px solid rgba(0,0,0,.08);
|
| 30 |
+
}
|
| 31 |
}
|
| 32 |
+
*,*::before,*::after{ box-sizing:border-box }
|
| 33 |
+
html,body{ height:100% }
|
| 34 |
body{
|
| 35 |
+
margin:0; font:16px/1.6 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif; color:var(--text);
|
|
|
|
|
|
|
| 36 |
background:
|
| 37 |
radial-gradient(1200px 800px at 10% -5%, rgba(110,231,255,.08), transparent 40%),
|
| 38 |
radial-gradient(900px 700px at 110% 10%, rgba(110,231,255,.06), transparent 40%),
|
| 39 |
var(--bg);
|
| 40 |
}
|
| 41 |
+
.site-header{ position:sticky; top:0; z-index:20; display:flex; align-items:center; gap:1rem; justify-content:space-between;
|
| 42 |
+
padding:.8rem 1rem; border-bottom:var(--border);
|
|
|
|
|
|
|
| 43 |
background:color-mix(in oklab, var(--surface), transparent 35%);
|
| 44 |
backdrop-filter:saturate(1.2) blur(8px);
|
| 45 |
}
|
| 46 |
+
.logo{ font-weight:800; letter-spacing:.2px; text-decoration:none; color:var(--text); display:flex; align-items:center; gap:.55rem }
|
| 47 |
+
.logo .dot{ width:.7rem; height:.7rem; border-radius:999px; background:var(--accent); box-shadow:0 0 16px var(--ring) }
|
| 48 |
+
.logo span{ color:var(--accent) }
|
| 49 |
+
.site-nav{ display:flex; gap:.75rem }
|
| 50 |
+
.site-nav a{ color:var(--text); text-decoration:none; padding:.4rem .6rem; border-radius:.5rem }
|
| 51 |
+
.site-nav a:hover{ outline:2px solid var(--ring); outline-offset:2px }
|
| 52 |
+
.nav-toggle{ display:none; background:transparent; border:1px solid rgba(255,255,255,.2); color:var(--text); border-radius:.5rem; padding:.4rem .6rem }
|
| 53 |
@media (max-width: 720px){
|
| 54 |
+
.nav-toggle{ display:inline-block }
|
| 55 |
+
.site-nav{ position:absolute; right:1rem; top:3.4rem; flex-direction:column; padding:.6rem; background:var(--surface); border:var(--border); border-radius:.6rem; display:none }
|
| 56 |
+
.site-nav.open{ display:flex }
|
| 57 |
}
|
| 58 |
+
|
| 59 |
+
.hero{ text-align:center; padding:4.5rem 1rem 2rem; max-width:1060px; margin:0 auto }
|
| 60 |
+
.hero h1{ font-size:clamp(2rem,3.6vw,3rem); margin:0 0 .5rem }
|
| 61 |
+
.hero p{ margin:0 0 1.5rem; color:var(--muted) }
|
| 62 |
+
.btn{ display:inline-block; padding:.72rem 1rem; border-radius:.6rem; background:var(--accent); color:#06141b; text-decoration:none; font-weight:700 }
|
| 63 |
+
.cover{ margin:1.2rem auto 0; max-width:980px; aspect-ratio: 16/9; border-radius:.8rem; overflow:hidden; border:var(--border); background:var(--card) }
|
| 64 |
+
.cover img{ width:100%; height:100%; object-fit:cover; display:block }
|
| 65 |
+
|
| 66 |
+
.section{ padding:2.6rem 1rem; max-width:1060px; margin:0 auto }
|
| 67 |
+
.section h2{ font-size:clamp(1.4rem,2.2vw,1.8rem); margin:0 0 .4rem }
|
| 68 |
+
.muted{ color:var(--muted) }
|
| 69 |
+
|
| 70 |
+
.features{ display:grid; gap:.8rem; grid-template-columns:repeat(auto-fill,minmax(230px,1fr)); margin:1rem 0 0 }
|
| 71 |
+
.card{ background:var(--card); border:var(--border); border-radius:.8rem; padding:1rem }
|
| 72 |
+
|
| 73 |
+
/* Leaderboard */
|
| 74 |
+
.table-wrap{ overflow-x:auto; background:var(--card); border-radius:.8rem; border:var(--border) }
|
| 75 |
+
table{ width:100%; border-collapse:collapse }
|
| 76 |
+
th,td{ padding:.7rem .8rem; border-bottom:1px solid rgba(255,255,255,.06); text-align:left }
|
| 77 |
+
th{ font-weight:700 }
|
| 78 |
+
.pill{ display:inline-block; padding:.2rem .5rem; border-radius:.5rem; background:rgba(110,231,255,.18); color:var(--text); font-size:.8rem }
|
| 79 |
+
|
| 80 |
+
/* Media showcase */
|
| 81 |
+
.media-grid{ display:grid; grid-template-columns:2fr 1fr; gap:1rem }
|
| 82 |
+
@media (max-width: 920px){ .media-grid{ grid-template-columns:1fr } }
|
| 83 |
+
figure{ margin:0 }
|
| 84 |
+
.media-card{ background:var(--card); border:var(--border); border-radius:.8rem; padding:.8rem }
|
| 85 |
+
video{ width:100%; max-height:520px; background:#000; border-radius:.6rem }
|
| 86 |
+
.toolbar{ display:flex; gap:.5rem; flex-wrap:wrap; margin:.6rem 0 }
|
| 87 |
+
.toolbar button{ background:transparent; color:var(--text); border:1px solid rgba(255,255,255,.25); padding:.38rem .6rem; border-radius:.5rem; cursor:pointer }
|
| 88 |
+
.toolbar button[aria-pressed="true"]{ outline:2px solid var(--ring) }
|
| 89 |
+
|
| 90 |
+
/* Footer */
|
| 91 |
+
.site-footer{ padding:2rem 1rem 4rem; text-align:center; color:var(--muted) }
|
| 92 |
+
|
| 93 |
+
/* A11y: reduce motion */
|
| 94 |
+
@media (prefers-reduced-motion: reduce){ *{ transition:none!important; animation:none!important } }
|
| 95 |
</style>
|
| 96 |
</head>
|
| 97 |
<body>
|
| 98 |
+
<!--
|
| 99 |
+
ASSETS CHECKLIST (drop into your Space):
|
| 100 |
+
- assets/cover.jpg (hero title image)
|
| 101 |
+
- assets/sample_AV.mp4 (example clip – audio+video)
|
| 102 |
+
- assets/sample_A.mp4 (audio-only version)
|
| 103 |
+
- assets/sample_V.mp4 (video-only version)
|
| 104 |
+
- assets/sample_poster.jpg (poster frame for the video)
|
| 105 |
+
- assets/heatmap.png (overall heatmap graphic)
|
| 106 |
+
- assets/confusion.png (confusion matrix or similar)
|
| 107 |
+
- assets/favicon.png (16–64px)
|
| 108 |
+
-->
|
| 109 |
+
|
| 110 |
<header class="site-header">
|
| 111 |
+
<a href="#home" class="logo" aria-label="AVIP Benchmark home"><span class="dot" aria-hidden="true"></span> AVIP<span>Benchmark</span></a>
|
| 112 |
<button class="nav-toggle" aria-expanded="false" aria-controls="site-nav">☰</button>
|
| 113 |
+
<nav id="site-nav" class="site-nav" aria-label="Main navigation">
|
| 114 |
<a href="#home">Home</a>
|
| 115 |
+
<a href="#about">About</a>
|
| 116 |
<a href="#leaderboard">Leaderboard</a>
|
| 117 |
+
<a href="#media">Examples</a>
|
| 118 |
+
<a href="#contact">Contact</a>
|
| 119 |
</nav>
|
| 120 |
</header>
|
| 121 |
|
| 122 |
+
<main id="home">
|
| 123 |
+
<section class="hero" aria-labelledby="tagline">
|
| 124 |
+
<h1 id="tagline">Do you hear it?</h1>
|
| 125 |
+
<p>AVIP probes whether multimodal models actually use <strong>audio</strong> when interpreting videos.</p>
|
| 126 |
+
<a class="btn" href="#media">See examples</a>
|
| 127 |
+
<div class="cover" aria-hidden="true">
|
| 128 |
+
<img src="assets/cover.jpg" alt="Stylized collage of waveforms and video frames" loading="lazy" />
|
| 129 |
+
</div>
|
| 130 |
</section>
|
| 131 |
|
| 132 |
+
<section id="about" class="section">
|
| 133 |
+
<h2>What is AVIP?</h2>
|
| 134 |
+
<p class="muted">A tiny, controlled benchmark with triplet videos per clip: <span class="pill">A</span> audio-only, <span class="pill">V</span> video-only, and <span class="pill">AV</span> audio+video. Tasks: <em>object</em>, <em>material</em>, <em>outcome</em>. We check top‑1 predictions vs. ground truth and look for cross‑modal gains.</p>
|
| 135 |
<ul class="features">
|
| 136 |
+
<li class="card">📦 <strong>Minimal, reproducible clips</strong><br/>Short single‑impact scenes recorded in a controlled setup.</li>
|
| 137 |
+
<li class="card">🔊 <strong>Modality toggles</strong><br/>Each clip exists as A, V, and AV to test true audio usage.</li>
|
| 138 |
+
<li class="card">📈 <strong>Simple metrics</strong><br/>Top‑1 accuracy per task and an <em>AV − max(A,V)</em> cross‑modal gain.</li>
|
| 139 |
+
<li class="card">🧪 <strong>Probe‑style prompts</strong><br/>Strict label sets & JSON outputs to avoid prompt drift.</li>
|
|
|
|
| 140 |
</ul>
|
| 141 |
+
<details class="card" style="margin-top:1rem">
|
| 142 |
+
<summary><strong>Method (short)</strong></summary>
|
| 143 |
+
<ol>
|
| 144 |
+
<li>For each clip, run models on A, V, and AV variants with the same instruction‑style prompt.</li>
|
| 145 |
+
<li>Decode model outputs into <code>{object, material, outcome}</code> and compare against labels.</li>
|
| 146 |
+
<li>Compute accuracy per task and cross‑modal gain per clip and on average.</li>
|
| 147 |
+
</ol>
|
| 148 |
+
</details>
|
| 149 |
</section>
|
| 150 |
|
| 151 |
+
<section id="leaderboard" class="section" aria-labelledby="lb-title">
|
| 152 |
+
<h2 id="lb-title">Leaderboard</h2>
|
| 153 |
+
<p class="muted">Replace or augment these rows by uploading <code>metrics_by_engine.json</code> or editing the inline JSON below.</p>
|
| 154 |
<div class="table-wrap">
|
| 155 |
+
<table aria-describedby="lb-title">
|
| 156 |
<thead>
|
| 157 |
+
<tr>
|
| 158 |
+
<th scope="col">Rank</th>
|
| 159 |
+
<th scope="col">Model</th>
|
| 160 |
+
<th scope="col">Accuracy*</th>
|
| 161 |
+
<th scope="col">Updated</th>
|
| 162 |
+
</tr>
|
| 163 |
</thead>
|
| 164 |
+
<tbody id="leaderboard-body"><!-- rendered by JS --></tbody>
|
| 165 |
</table>
|
| 166 |
</div>
|
| 167 |
+
<p class="muted" style="margin:.6rem 0 0">* Single summary score (demo). For papers, report per‑task accuracy and cross‑modal gain.</p>
|
|
|
|
| 168 |
<script id="leaderboard-data" type="application/json">{
|
| 169 |
"rows": [
|
| 170 |
+
{"rank": 1, "name": "Qwen2.5‑Omni 7B", "score": 98, "updated": "2025-08-01"},
|
| 171 |
+
{"rank": 2, "name": "Gemini‑2.5 Pro (think)", "score": 92, "updated": "2025-07-28"},
|
| 172 |
+
{"rank": 3, "name": "Gemini‑2.5 Flash (no think)", "score": 89, "updated": "2025-07-20"},
|
| 173 |
+
{"rank": 3, "name": "Gemini‑2.5 Flash (think)", "score": 89, "updated": "2025-07-20"}
|
|
|
|
| 174 |
]
|
| 175 |
}</script>
|
| 176 |
</section>
|
| 177 |
|
| 178 |
+
<section id="media" class="section" aria-labelledby="ex-title">
|
| 179 |
+
<h2 id="ex-title">Example clip</h2>
|
| 180 |
+
<div class="media-grid">
|
| 181 |
+
<figure class="media-card">
|
| 182 |
+
<video id="sampleVideo" controls preload="metadata" playsinline poster="assets/sample_poster.jpg">
|
| 183 |
+
<source src="assets/sample_AV.mp4" type="video/mp4" />
|
| 184 |
+
Your browser doesn’t support HTML5 video.
|
| 185 |
+
</video>
|
| 186 |
+
<div class="toolbar" role="toolbar" aria-label="Version selector">
|
| 187 |
+
<button type="button" class="ver" data-src="assets/sample_A.mp4" aria-pressed="false" aria-label="Audio only (A)">A</button>
|
| 188 |
+
<button type="button" class="ver" data-src="assets/sample_V.mp4" aria-pressed="false" aria-label="Video only (V)">V</button>
|
| 189 |
+
<button type="button" class="ver" data-src="assets/sample_AV.mp4" aria-pressed="true" aria-label="Audio + Video (AV)">AV</button>
|
| 190 |
+
<span class="muted" id="verStatus" aria-live="polite" style="margin-left:.4rem">Now showing: AV</span>
|
| 191 |
+
</div>
|
| 192 |
+
<figcaption class="muted">Task labels (demo): <strong>object</strong>=<code>paperbox</code>, <strong>material</strong>=<code>cardboard</code>, <strong>outcome</strong>=<code>bounce</code></figcaption>
|
| 193 |
+
</figure>
|
| 194 |
+
<div class="media-card">
|
| 195 |
+
<figure>
|
| 196 |
+
<img src="assets/heatmap.png" alt="Overall performance heatmap (placeholder)" loading="lazy" style="width:100%; border-radius:.6rem" />
|
| 197 |
+
<figcaption class="muted">Overall heatmap (example). Replace with your exported figure.</figcaption>
|
| 198 |
+
</figure>
|
| 199 |
+
<figure style="margin-top:.8rem">
|
| 200 |
+
<img src="assets/confusion.png" alt="Confusion matrix (placeholder)" loading="lazy" style="width:100%; border-radius:.6rem" />
|
| 201 |
+
<figcaption class="muted">Confusion matrix (example).</figcaption>
|
| 202 |
+
</figure>
|
| 203 |
+
</div>
|
| 204 |
+
</div>
|
| 205 |
+
</section>
|
| 206 |
|
| 207 |
<section id="contact" class="section">
|
| 208 |
<h2>Contact</h2>
|
| 209 |
+
<p>Questions? <a href="mailto:bramo.g@protonmail.com">bramo.g@protonmail.com</a></p>
|
| 210 |
+
<p class="muted"><a href="https://huggingface.co/Grets/AVIP">huggingface.co/Grets/AVIP</a></p>
|
| 211 |
</section>
|
| 212 |
</main>
|
| 213 |
|
|
|
|
| 216 |
</footer>
|
| 217 |
|
| 218 |
<script>
|
| 219 |
+
// Mobile nav toggle
|
| 220 |
const navToggle = document.querySelector('.nav-toggle');
|
| 221 |
const nav = document.getElementById('site-nav');
|
| 222 |
if (navToggle && nav) {
|
|
|
|
| 225 |
navToggle.setAttribute('aria-expanded', String(open));
|
| 226 |
});
|
| 227 |
}
|
| 228 |
+
// Year in footer
|
| 229 |
const y = document.getElementById('year');
|
| 230 |
if (y) y.textContent = new Date().getFullYear();
|
| 231 |
|
| 232 |
+
// Leaderboard: try to fetch metrics_by_engine.json if present; else fall back to inline JSON
|
| 233 |
+
(async function renderLeaderboard(){
|
| 234 |
const el = document.getElementById('leaderboard-body');
|
| 235 |
+
const inline = document.getElementById('leaderboard-data');
|
| 236 |
+
if (!el) return;
|
| 237 |
+
let rows;
|
| 238 |
try {
|
| 239 |
+
const res = await fetch('metrics_by_engine.json', {cache:'no-store'});
|
| 240 |
+
if (res.ok) {
|
| 241 |
+
const metrics = await res.json();
|
| 242 |
+
// Expecting the AV summary per engine; create a toy score = avg of task accuracies if you provide them.
|
| 243 |
+
// This block is intentionally lightweight – adapt to your file format as needed.
|
| 244 |
+
if (metrics && metrics.leaderboard) {
|
| 245 |
+
rows = metrics.leaderboard;
|
| 246 |
+
}
|
| 247 |
+
}
|
| 248 |
+
} catch(e){ /* ignore and use inline */ }
|
| 249 |
+
if (!rows) {
|
| 250 |
+
try { rows = JSON.parse(inline.textContent.trim()).rows; } catch(e){ rows = []; }
|
| 251 |
}
|
| 252 |
+
rows.sort((a,b) => a.rank - b.rank);
|
| 253 |
+
el.innerHTML = rows.map(r => `
|
| 254 |
+
<tr>
|
| 255 |
+
<td>${r.rank}</td>
|
| 256 |
+
<td>${r.name}</td>
|
| 257 |
+
<td>${r.score}</td>
|
| 258 |
+
<td>${r.updated}</td>
|
| 259 |
+
</tr>`).join('');
|
| 260 |
})();
|
| 261 |
+
|
| 262 |
+
// Example video version toggles
|
| 263 |
+
const video = document.getElementById('sampleVideo');
|
| 264 |
+
const verButtons = document.querySelectorAll('.ver');
|
| 265 |
+
const verStatus = document.getElementById('verStatus');
|
| 266 |
+
verButtons.forEach(btn => {
|
| 267 |
+
btn.addEventListener('click', () => {
|
| 268 |
+
verButtons.forEach(b => b.setAttribute('aria-pressed','false'));
|
| 269 |
+
btn.setAttribute('aria-pressed','true');
|
| 270 |
+
const src = btn.getAttribute('data-src');
|
| 271 |
+
const label = btn.textContent.trim();
|
| 272 |
+
if (src && video) {
|
| 273 |
+
const wasPlaying = !video.paused && !video.ended;
|
| 274 |
+
video.pause();
|
| 275 |
+
video.querySelector('source').src = src;
|
| 276 |
+
video.load();
|
| 277 |
+
if (wasPlaying) video.play().catch(()=>{});
|
| 278 |
+
if (verStatus) verStatus.textContent = `Now showing: ${label}`;
|
| 279 |
+
}
|
| 280 |
+
});
|
| 281 |
+
});
|
| 282 |
</script>
|
| 283 |
</body>
|
| 284 |
+
</html>
|