liukqchoco04 commited on
Commit
0e47d41
·
verified ·
1 Parent(s): 9184e45

Upload 5 files

Browse files
Files changed (4) hide show
  1. app.js +33 -13
  2. data.json +11 -11
  3. index.html +26 -0
  4. styles.css +70 -7
app.js CHANGED
@@ -200,6 +200,33 @@ function filteredModels() {
200
  .sort((a, b) => compareScores(a, b, state.sortMetric, state.sortDirection));
201
  }
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  function renderTable() {
204
  const category = currentCategory();
205
  const metric = currentMetric();
@@ -207,6 +234,7 @@ function renderTable() {
207
  const rankMap = buildRankMap(state.sortMetric);
208
  const arrow = state.sortDirection === "desc" ? "↓" : "↑";
209
  const preferredDirection = metric.direction === "higher" ? "Higher is better" : "Lower is better";
 
210
  const isDiagnostics = state.track === "diagnostics";
211
 
212
  elements.tablePanel.classList.toggle("is-diagnostics", isDiagnostics);
@@ -215,17 +243,9 @@ function renderTable() {
215
  elements.categoryDescription.textContent = category.description;
216
  elements.rankingLabel.innerHTML = `
217
  Ranked by <strong>${escapeHtml(metric.name)}</strong>
218
- <span>${preferredDirection}</span>
219
  `;
220
- elements.contextCopy.innerHTML = isDiagnostics
221
- ? `
222
- <p><strong>Diagnostic status.</strong> These four adjusted diagnostics are reported separately from the 32 core metrics. They complement—rather than replace—PVRL, PARL, and HDF, and they are not combined into an overall score.</p>
223
- <p>SA-PVRL and SA-PARL assign the 30-second cap to unachieved targets. CA-HDF-A and CA-HDF-L normalize conditional HDF to [0,1] and assign zero when the required source state was not established.</p>
224
- `
225
- : `
226
- <p><strong>Reading the ranks.</strong> Click any metric header to rank by that metric. Published three-decimal ties use competition ranking (for example, 1, 1, 3). PVRL and PARL are conditional on successful target achievement and should be read with PVUAR and PAUAR.</p>
227
- <p>HDF is evaluated only when its required source state was established. NBC, FPS, and TTFC are unavailable for PixVerse R1, HappyOyster, and Odyssey-2 because their web interfaces do not expose the required traces.</p>
228
- `;
229
 
230
  const metricHeaders = category.metrics.map((metricKey) => {
231
  const item = state.data.metrics[metricKey];
@@ -233,9 +253,10 @@ function renderTable() {
233
  const ariaSort = active
234
  ? (state.sortDirection === "desc" ? "descending" : "ascending")
235
  : "none";
 
236
  return `
237
  <th scope="col" aria-sort="${ariaSort}" class="metric-column ${active ? "is-sorted" : ""}">
238
- <button type="button" data-sort="${escapeHtml(metricKey)}" title="Sort by ${escapeHtml(item.name)}">
239
  <span>${escapeHtml(item.abbr)}</span>
240
  <i aria-hidden="true">${active ? arrow : "↕"}</i>
241
  <small>${item.direction === "higher" ? "higher" : "lower"}</small>
@@ -359,8 +380,7 @@ function renderMetricGuide() {
359
  <h3>${escapeHtml(metric.name)}</h3>
360
  <p>${escapeHtml(metric.description)}</p>
361
  <dl>
362
- <div><dt>Scale</dt><dd>${escapeHtml(metric.range)}${metric.unit ? ` · ${escapeHtml(metric.unit)}` : ""}</dd></div>
363
- <div><dt>Evaluator</dt><dd>${escapeHtml(metric.evaluator)}</dd></div>
364
  </dl>
365
  </article>
366
  `;
 
200
  .sort((a, b) => compareScores(a, b, state.sortMetric, state.sortDirection));
201
  }
202
 
203
+ function contextForCategory(categoryId) {
204
+ const ranking = `
205
+ <p><strong>Ranking.</strong> Ranks use published three-decimal scores; ties use competition ranking (for example, 1, 1, 3). Select a metric to show the best values first, or click its active table header to reverse the display order.</p>
206
+ `;
207
+ const notes = {
208
+ streaming: `
209
+ <p><strong>Availability.</strong> NBC, FPS, and TTFC are unavailable for PixVerse R1, HappyOyster, and Odyssey-2 because their web interfaces do not expose model-native boundaries or reliable generation-time traces.</p>
210
+ `,
211
+ adherence: `
212
+ <p><strong>Endpoint drift.</strong> VID and AID are absolute changes between the first and last 30-second intervals; lower values indicate better stability.</p>
213
+ `,
214
+ stability: `
215
+ <p><strong>Reading drift.</strong> The six drift metrics favor lower endpoint change, while subject and background consistency favor higher values.</p>
216
+ `,
217
+ response: `
218
+ <p><strong>Conditional latency.</strong> PVRL and PARL are measured only for achieved targets and should be read together with PVUAR and PAUAR.</p>
219
+ `,
220
+ state: `
221
+ <p><strong>Conditional coverage.</strong> HDF is evaluated only when the required source state was established.</p>
222
+ `,
223
+ adjusted: `
224
+ <p><strong>Diagnostic status.</strong> These four adjusted diagnostics are separate from the 32 core metrics. SA-PVRL and SA-PARL assign the 30-second cap to unachieved targets; CA-HDF-A and CA-HDF-L assign zero when the required source state was not established.</p>
225
+ `
226
+ };
227
+ return `${ranking}${notes[categoryId] || ""}`;
228
+ }
229
+
230
  function renderTable() {
231
  const category = currentCategory();
232
  const metric = currentMetric();
 
234
  const rankMap = buildRankMap(state.sortMetric);
235
  const arrow = state.sortDirection === "desc" ? "↓" : "↑";
236
  const preferredDirection = metric.direction === "higher" ? "Higher is better" : "Lower is better";
237
+ const displayOrder = state.sortDirection === directionFor(metric) ? "Best to worst" : "Worst to best";
238
  const isDiagnostics = state.track === "diagnostics";
239
 
240
  elements.tablePanel.classList.toggle("is-diagnostics", isDiagnostics);
 
243
  elements.categoryDescription.textContent = category.description;
244
  elements.rankingLabel.innerHTML = `
245
  Ranked by <strong>${escapeHtml(metric.name)}</strong>
246
+ <span>${preferredDirection} &middot; ${displayOrder}</span>
247
  `;
248
+ elements.contextCopy.innerHTML = contextForCategory(category.id);
 
 
 
 
 
 
 
 
249
 
250
  const metricHeaders = category.metrics.map((metricKey) => {
251
  const item = state.data.metrics[metricKey];
 
253
  const ariaSort = active
254
  ? (state.sortDirection === "desc" ? "descending" : "ascending")
255
  : "none";
256
+ const title = active ? `Reverse ${item.name} order` : `Rank by ${item.name}`;
257
  return `
258
  <th scope="col" aria-sort="${ariaSort}" class="metric-column ${active ? "is-sorted" : ""}">
259
+ <button type="button" data-sort="${escapeHtml(metricKey)}" title="${escapeHtml(title)}">
260
  <span>${escapeHtml(item.abbr)}</span>
261
  <i aria-hidden="true">${active ? arrow : "↕"}</i>
262
  <small>${item.direction === "higher" ? "higher" : "lower"}</small>
 
380
  <h3>${escapeHtml(metric.name)}</h3>
381
  <p>${escapeHtml(metric.description)}</p>
382
  <dl>
383
+ <div><dt>Reported as</dt><dd>${escapeHtml(metric.range)}${metric.unit ? ` · ${escapeHtml(metric.unit)}` : ""}</dd></div>
 
384
  </dl>
385
  </article>
386
  `;
data.json CHANGED
@@ -129,7 +129,7 @@
129
  "abbr": "PQ",
130
  "name": "Production Quality",
131
  "direction": "higher",
132
- "range": "Original evaluator scale",
133
  "unit": "",
134
  "evaluator": "Audiobox Aesthetics",
135
  "description": "Perceptual and production fidelity of the generated audio."
@@ -228,7 +228,7 @@
228
  "abbr": "VA-D",
229
  "name": "Visual Aesthetics Drift",
230
  "direction": "lower",
231
- "range": "VA units",
232
  "unit": "",
233
  "evaluator": "LAION Aesthetic Predictor",
234
  "description": "Absolute change in visual aesthetics between the first and last intervals."
@@ -237,7 +237,7 @@
237
  "abbr": "VQ-D",
238
  "name": "Visual Quality Drift",
239
  "direction": "lower",
240
- "range": "VQ units",
241
  "unit": "",
242
  "evaluator": "Gemini 3.1 Pro",
243
  "description": "Absolute change in visual quality between the first and last intervals."
@@ -246,7 +246,7 @@
246
  "abbr": "PQ-D",
247
  "name": "Production Quality Drift",
248
  "direction": "lower",
249
- "range": "PQ units",
250
  "unit": "",
251
  "evaluator": "Audiobox Aesthetics",
252
  "description": "Absolute change in production quality between the first and last intervals."
@@ -255,7 +255,7 @@
255
  "abbr": "AQ-D",
256
  "name": "Audio Quality Drift",
257
  "direction": "lower",
258
- "range": "AQ units",
259
  "unit": "",
260
  "evaluator": "Gemini 3.1 Pro",
261
  "description": "Absolute change in audio quality between the first and last intervals."
@@ -264,7 +264,7 @@
264
  "abbr": "SC",
265
  "name": "Subject Consistency",
266
  "direction": "higher",
267
- "range": "Original evaluator scale",
268
  "unit": "",
269
  "evaluator": "VBench-Long protocol",
270
  "description": "Temporal consistency of subject appearance over the generated sequence."
@@ -273,7 +273,7 @@
273
  "abbr": "BC",
274
  "name": "Background Consistency",
275
  "direction": "higher",
276
- "range": "Original evaluator scale",
277
  "unit": "",
278
  "evaluator": "VBench-Long protocol",
279
  "description": "Temporal consistency of background scenes over the generated sequence."
@@ -282,7 +282,7 @@
282
  "abbr": "AVAlign-D",
283
  "name": "Audio-Video Alignment Drift",
284
  "direction": "lower",
285
- "range": "AVAlign units",
286
  "unit": "",
287
  "evaluator": "ImageBind",
288
  "description": "Absolute change in audio-video semantic correspondence between the first and last intervals."
@@ -291,7 +291,7 @@
291
  "abbr": "AVSync-D",
292
  "name": "Audio-Video Synchronization Drift",
293
  "direction": "lower",
294
- "range": "AVSync units",
295
  "unit": "s",
296
  "evaluator": "Synchformer",
297
  "description": "Absolute change in audio-video synchronization offset between the first and last intervals."
@@ -354,7 +354,7 @@
354
  "abbr": "PVRL",
355
  "name": "Prompt-Based Visual Response Latency",
356
  "direction": "lower",
357
- "range": "Media time",
358
  "unit": "s",
359
  "evaluator": "Media-time measurement",
360
  "description": "Conditional latency to the first clear realization of an achieved visual target."
@@ -363,7 +363,7 @@
363
  "abbr": "PARL",
364
  "name": "Prompt-Based Audio Response Latency",
365
  "direction": "lower",
366
- "range": "Media time",
367
  "unit": "s",
368
  "evaluator": "Media-time measurement",
369
  "description": "Conditional latency to the first clear realization of an achieved audio target."
 
129
  "abbr": "PQ",
130
  "name": "Production Quality",
131
  "direction": "higher",
132
+ "range": "Original score",
133
  "unit": "",
134
  "evaluator": "Audiobox Aesthetics",
135
  "description": "Perceptual and production fidelity of the generated audio."
 
228
  "abbr": "VA-D",
229
  "name": "Visual Aesthetics Drift",
230
  "direction": "lower",
231
+ "range": "Absolute VA change",
232
  "unit": "",
233
  "evaluator": "LAION Aesthetic Predictor",
234
  "description": "Absolute change in visual aesthetics between the first and last intervals."
 
237
  "abbr": "VQ-D",
238
  "name": "Visual Quality Drift",
239
  "direction": "lower",
240
+ "range": "Absolute VQ change",
241
  "unit": "",
242
  "evaluator": "Gemini 3.1 Pro",
243
  "description": "Absolute change in visual quality between the first and last intervals."
 
246
  "abbr": "PQ-D",
247
  "name": "Production Quality Drift",
248
  "direction": "lower",
249
+ "range": "Absolute PQ change",
250
  "unit": "",
251
  "evaluator": "Audiobox Aesthetics",
252
  "description": "Absolute change in production quality between the first and last intervals."
 
255
  "abbr": "AQ-D",
256
  "name": "Audio Quality Drift",
257
  "direction": "lower",
258
+ "range": "Absolute AQ change",
259
  "unit": "",
260
  "evaluator": "Gemini 3.1 Pro",
261
  "description": "Absolute change in audio quality between the first and last intervals."
 
264
  "abbr": "SC",
265
  "name": "Subject Consistency",
266
  "direction": "higher",
267
+ "range": "Original score",
268
  "unit": "",
269
  "evaluator": "VBench-Long protocol",
270
  "description": "Temporal consistency of subject appearance over the generated sequence."
 
273
  "abbr": "BC",
274
  "name": "Background Consistency",
275
  "direction": "higher",
276
+ "range": "Original score",
277
  "unit": "",
278
  "evaluator": "VBench-Long protocol",
279
  "description": "Temporal consistency of background scenes over the generated sequence."
 
282
  "abbr": "AVAlign-D",
283
  "name": "Audio-Video Alignment Drift",
284
  "direction": "lower",
285
+ "range": "Absolute AVAlign change",
286
  "unit": "",
287
  "evaluator": "ImageBind",
288
  "description": "Absolute change in audio-video semantic correspondence between the first and last intervals."
 
291
  "abbr": "AVSync-D",
292
  "name": "Audio-Video Synchronization Drift",
293
  "direction": "lower",
294
+ "range": "Absolute AVSync change",
295
  "unit": "s",
296
  "evaluator": "Synchformer",
297
  "description": "Absolute change in audio-video synchronization offset between the first and last intervals."
 
354
  "abbr": "PVRL",
355
  "name": "Prompt-Based Visual Response Latency",
356
  "direction": "lower",
357
+ "range": "Media-time latency",
358
  "unit": "s",
359
  "evaluator": "Media-time measurement",
360
  "description": "Conditional latency to the first clear realization of an achieved visual target."
 
363
  "abbr": "PARL",
364
  "name": "Prompt-Based Audio Response Latency",
365
  "direction": "lower",
366
+ "range": "Media-time latency",
367
  "unit": "s",
368
  "evaluator": "Media-time measurement",
369
  "description": "Conditional latency to the first clear realization of an achieved audio target."
index.html CHANGED
@@ -237,6 +237,32 @@
237
  </div>
238
  </section>
239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
240
  </main>
241
 
242
  <footer>
 
237
  </div>
238
  </section>
239
 
240
+ <section class="section protocol-section">
241
+ <div class="shell">
242
+ <div class="section-heading">
243
+ <p class="kicker">How to read StreamAV-Bench</p>
244
+ <h2>Performance is a profile, not a single number.</h2>
245
+ </div>
246
+ <div class="protocol-grid">
247
+ <article>
248
+ <span>01</span>
249
+ <h3>Choose the evaluation track</h3>
250
+ <p>Use Progressive for fixed-prompt long-horizon behavior and Interactive for runtime response, retention, and reuse.</p>
251
+ </article>
252
+ <article>
253
+ <span>02</span>
254
+ <h3>Read score and drift together</h3>
255
+ <p>High quality or fulfillment can coexist with temporal drift. Read absolute scores alongside their drift counterparts.</p>
256
+ </article>
257
+ <article>
258
+ <span>03</span>
259
+ <h3>Read success rate with latency</h3>
260
+ <p>Low conditional latency does not guarantee reliable updates. Read response latency together with achievement rate.</p>
261
+ </article>
262
+ </div>
263
+ </div>
264
+ </section>
265
+
266
  </main>
267
 
268
  <footer>
styles.css CHANGED
@@ -1001,7 +1001,7 @@ thead th.metric-column {
1001
  grid-column: 1 / -1;
1002
  margin-top: 2px;
1003
  color: var(--ink-soft);
1004
- font-size: 9px;
1005
  letter-spacing: 0.07em;
1006
  text-transform: uppercase;
1007
  }
@@ -1166,7 +1166,7 @@ thead .model-heading {
1166
  .score-cell small {
1167
  margin-left: 2px;
1168
  color: var(--ink-soft);
1169
- font-size: 9px;
1170
  }
1171
 
1172
  .score-cell.is-sorted {
@@ -1315,7 +1315,7 @@ thead .model-heading {
1315
  }
1316
 
1317
  .metric-card {
1318
- min-height: 270px;
1319
  padding: 22px;
1320
  color: var(--ink);
1321
  background: var(--white);
@@ -1338,7 +1338,7 @@ thead .model-heading {
1338
  align-items: center;
1339
  justify-content: space-between;
1340
  width: 100%;
1341
- margin-bottom: 30px;
1342
  padding: 0;
1343
  background: transparent;
1344
  border: 0;
@@ -1386,8 +1386,8 @@ thead .model-heading {
1386
  }
1387
 
1388
  .metric-card > p {
1389
- min-height: 66px;
1390
- margin-bottom: 20px;
1391
  color: var(--ink-soft);
1392
  font-size: 14px;
1393
  }
@@ -1396,7 +1396,7 @@ thead .model-heading {
1396
  display: grid;
1397
  gap: 7px;
1398
  margin: 0;
1399
- padding-top: 15px;
1400
  border-top: 1px solid var(--line);
1401
  }
1402
 
@@ -1421,6 +1421,52 @@ thead .model-heading {
1421
  text-align: right;
1422
  }
1423
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1424
  .is-disabled {
1425
  cursor: default;
1426
  opacity: 0.56;
@@ -1574,6 +1620,18 @@ footer {
1574
  grid-column: 1 / -1;
1575
  }
1576
 
 
 
 
 
 
 
 
 
 
 
 
 
1577
  .footer-inner {
1578
  grid-template-columns: 1fr;
1579
  justify-items: center;
@@ -1758,6 +1816,11 @@ footer {
1758
  min-height: auto;
1759
  }
1760
 
 
 
 
 
 
1761
  }
1762
 
1763
  @media (prefers-reduced-motion: reduce) {
 
1001
  grid-column: 1 / -1;
1002
  margin-top: 2px;
1003
  color: var(--ink-soft);
1004
+ font-size: 10px;
1005
  letter-spacing: 0.07em;
1006
  text-transform: uppercase;
1007
  }
 
1166
  .score-cell small {
1167
  margin-left: 2px;
1168
  color: var(--ink-soft);
1169
+ font-size: 10px;
1170
  }
1171
 
1172
  .score-cell.is-sorted {
 
1315
  }
1316
 
1317
  .metric-card {
1318
+ min-height: 230px;
1319
  padding: 22px;
1320
  color: var(--ink);
1321
  background: var(--white);
 
1338
  align-items: center;
1339
  justify-content: space-between;
1340
  width: 100%;
1341
+ margin-bottom: 22px;
1342
  padding: 0;
1343
  background: transparent;
1344
  border: 0;
 
1386
  }
1387
 
1388
  .metric-card > p {
1389
+ min-height: 58px;
1390
+ margin-bottom: 16px;
1391
  color: var(--ink-soft);
1392
  font-size: 14px;
1393
  }
 
1396
  display: grid;
1397
  gap: 7px;
1398
  margin: 0;
1399
+ padding-top: 12px;
1400
  border-top: 1px solid var(--line);
1401
  }
1402
 
 
1421
  text-align: right;
1422
  }
1423
 
1424
+ .protocol-section {
1425
+ background: var(--paper-deep);
1426
+ }
1427
+
1428
+ .protocol-grid {
1429
+ display: grid;
1430
+ grid-template-columns: repeat(3, 1fr);
1431
+ gap: 16px;
1432
+ }
1433
+
1434
+ .protocol-grid article {
1435
+ min-height: 280px;
1436
+ padding: 28px;
1437
+ background: var(--white);
1438
+ border: 1px solid var(--line);
1439
+ border-radius: 20px;
1440
+ }
1441
+
1442
+ .protocol-grid article:nth-child(2) {
1443
+ background: var(--green-soft);
1444
+ }
1445
+
1446
+ .protocol-grid article:nth-child(3) {
1447
+ background: var(--blue-soft);
1448
+ }
1449
+
1450
+ .protocol-grid article > span {
1451
+ display: block;
1452
+ margin-bottom: 70px;
1453
+ color: var(--coral);
1454
+ font-family: var(--serif);
1455
+ font-size: 24px;
1456
+ }
1457
+
1458
+ .protocol-grid h3 {
1459
+ margin-bottom: 10px;
1460
+ font-size: 22px;
1461
+ letter-spacing: -0.03em;
1462
+ }
1463
+
1464
+ .protocol-grid p {
1465
+ margin: 0;
1466
+ color: var(--ink-soft);
1467
+ font-size: 15px;
1468
+ }
1469
+
1470
  .is-disabled {
1471
  cursor: default;
1472
  opacity: 0.56;
 
1620
  grid-column: 1 / -1;
1621
  }
1622
 
1623
+ .protocol-grid {
1624
+ grid-template-columns: 1fr;
1625
+ }
1626
+
1627
+ .protocol-grid article {
1628
+ min-height: 220px;
1629
+ }
1630
+
1631
+ .protocol-grid article > span {
1632
+ margin-bottom: 45px;
1633
+ }
1634
+
1635
  .footer-inner {
1636
  grid-template-columns: 1fr;
1637
  justify-items: center;
 
1816
  min-height: auto;
1817
  }
1818
 
1819
+ .protocol-grid article {
1820
+ min-height: 200px;
1821
+ padding: 23px;
1822
+ }
1823
+
1824
  }
1825
 
1826
  @media (prefers-reduced-motion: reduce) {