renjianzhexuejia commited on
Commit
8782e2a
·
verified ·
1 Parent(s): 9ad07ca

Prepare Hugging Face organization sign-in for VisionXLab reviewers

Browse files
Files changed (10) hide show
  1. README.md +5 -0
  2. admin.html +2 -1
  3. dist/admin.html +2 -1
  4. dist/portal.css +4 -0
  5. dist/portal.js +15 -6
  6. portal.css +4 -0
  7. portal.js +15 -6
  8. pyproject.toml +1 -1
  9. server/app.py +17 -37
  10. server/auth.py +195 -0
README.md CHANGED
@@ -4,6 +4,11 @@ emoji: 📈
4
  colorFrom: blue
5
  colorTo: gray
6
  sdk: static
 
 
 
 
 
7
  app_file: index.html
8
  pinned: false
9
  fullWidth: true
 
4
  colorFrom: blue
5
  colorTo: gray
6
  sdk: static
7
+ hf_oauth: true
8
+ hf_oauth_expiration_minutes: 480
9
+ hf_oauth_scopes:
10
+ - read-memberships
11
+ hf_oauth_authorized_org: VisionXLab
12
  app_file: index.html
13
  pinned: false
14
  fullWidth: true
admin.html CHANGED
@@ -4,7 +4,8 @@
4
  <nav class="portal-nav" aria-label="Main navigation"><a class="wordmark" href="index.html">RISEBench<span>++</span></a><div><a href="index.html">Leaderboard</a><a href="submit.html">Submit results</a><button id="sign-out" class="text-button" hidden>Sign out</button></div></nav>
5
  <header class="portal-heading"><span class="section-kicker">REVIEW WORKSPACE</span><h1>Review submissions.</h1><p>Verify evaluation artifacts, then approve or return results.</p></header>
6
  <p class="notice" id="service-notice" hidden></p>
7
- <section class="portal-card login-card" id="login-panel"><h2>Administrator sign in</h2><form id="login-form"><label id="passphrase-label">Passphrase<input type="password" id="admin-passphrase" autocomplete="current-password" required></label><p class="form-message" id="login-message" role="status"></p><button type="submit" class="primary-button" id="login-button">Sign in</button></form></section>
 
8
  <section id="review-workspace" hidden><div class="review-toolbar"><div class="review-filters" role="group" aria-label="Submission status"><button data-status="pending" aria-pressed="true">Pending <span id="pending-count">0</span></button><button data-status="approved" aria-pressed="false">Approved</button><button data-status="rejected" aria-pressed="false">Returned</button><button data-status="withdrawn" aria-pressed="false">Withdrawn</button><button data-status="all" aria-pressed="false">All</button></div><button class="outline-button" id="refresh-queue">Refresh</button></div><p id="queue-message" class="form-message" role="status"></p><div class="review-layout"><aside class="review-list" id="review-list" aria-label="Submissions"></aside><section class="portal-card review-detail" id="review-detail"><div class="review-empty"><h2>Select a submission</h2><p>Its scores and evaluation artifacts will appear here.</p></div></section></div></section>
9
  <footer class="page-footer"><a href="index.html">← Back to leaderboard</a><span>Private review workspace</span></footer>
10
  </main><script id="submission-schema" type="application/json">{"benchmarks": [{"id": "risebench-plusplus", "name": "RISEBench++", "case_count": 1000, "available_result_languages": ["en", "zh"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}, {"key": "single", "label": "Single", "description": "Accuracy on single-image cases."}, {"key": "multi", "label": "Multi", "description": "Accuracy on multi-image cases. Not evaluated for models without multi-image support."}, {"key": "total", "label": "Total", "description": "Accuracy on the complete benchmark. Not evaluated for single-image-only models."}], "subcategory_columns": [{"key": "temporal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "temporal", "case_count": 85, "multi_image_case_count": 0, "code": "CSK", "description": "Temporal · Common-Sense Knowledge — accuracy (%)"}, {"key": "temporal_context_knowledge", "label": "Context Knowledge", "dimension": "temporal", "case_count": 52, "multi_image_case_count": 28, "code": "CtxK", "description": "Temporal · Context Knowledge — accuracy (%)"}, {"key": "temporal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "temporal", "case_count": 63, "multi_image_case_count": 4, "code": "DK", "description": "Temporal · Disciplinary Knowledge — accuracy (%)"}, {"key": "causal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 1, "code": "CSK", "description": "Causal · Common-Sense Knowledge — accuracy (%)"}, {"key": "causal_context_knowledge", "label": "Context Knowledge", "dimension": "causal", "case_count": 40, "multi_image_case_count": 2, "code": "CtxK", "description": "Causal · Context Knowledge — accuracy (%)"}, {"key": "causal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 5, "code": "DK", "description": "Causal · Disciplinary Knowledge — accuracy (%)"}, {"key": "spatial_relation", "label": "Relation", "dimension": "spatial", "case_count": 106, "multi_image_case_count": 6, "code": "Rel.", "description": "Spatial · Relation — accuracy (%)"}, {"key": "spatial_structure", "label": "Structure", "dimension": "spatial", "case_count": 94, "multi_image_case_count": 12, "code": "Struct.", "description": "Spatial · Structure — accuracy (%)"}, {"key": "logical_explicit_rule_deduction", "label": "Explicit Rule Deduction", "dimension": "logical", "case_count": 123, "multi_image_case_count": 0, "code": "ERD", "description": "Logical · Explicit Rule Deduction — accuracy (%)"}, {"key": "logical_implicit_pattern_induction", "label": "Implicit Pattern Induction", "dimension": "logical", "case_count": 77, "multi_image_case_count": 20, "code": "IPI", "description": "Logical · Implicit Pattern Induction — accuracy (%)"}, {"key": "counterfactual_counterfactual_imagination", "label": "Counterfactual Imagination", "dimension": "counterfactual", "case_count": 70, "multi_image_case_count": 0, "code": "CFI", "description": "Counterfactual · Counterfactual Imagination — accuracy (%)"}, {"key": "counterfactual_anomaly_correction_and_generation", "label": "Anomaly Correction and Generation", "dimension": "counterfactual", "case_count": 30, "multi_image_case_count": 0, "code": "ACG", "description": "Counterfactual · Anomaly Correction and Generation — accuracy (%)"}], "task_type_columns": [{"key": "T01", "code": "T01", "label": "Life Progression", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 24, "multi_image_case_count": 0, "description": "Temporal · Life Progression — accuracy (%)"}, {"key": "T02", "code": "T02", "label": "Material Transformation", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Material Transformation — accuracy (%)"}, {"key": "T03", "code": "T03", "label": "Natural Environmental Changes", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 13, "multi_image_case_count": 0, "description": "Temporal · Natural Environmental Changes — accuracy (%)"}, {"key": "T04", "code": "T04", "label": "Physical Aging", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 20, "multi_image_case_count": 0, "description": "Temporal · Physical Aging — accuracy (%)"}, {"key": "T05", "code": "T05", "label": "Social Activities", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 8, "multi_image_case_count": 0, "description": "Temporal · Social Activities — accuracy (%)"}, {"key": "T06", "code": "T06", "label": "Tool Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 7, "multi_image_case_count": 0, "description": "Temporal · Tool Evolution — accuracy (%)"}, {"key": "T07", "code": "T07", "label": "Urban Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Urban Evolution — accuracy (%)"}, {"key": "T08", "code": "T08", "label": "Temporal State Transition", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 4, "description": "Temporal · Temporal State Transition — accuracy (%)"}, {"key": "T09", "code": "T09", "label": "Precise Temporal Localization", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 14, "multi_image_case_count": 2, "description": "Temporal · Precise Temporal Localization — accuracy (%)"}, {"key": "T10", "code": "T10", "label": "Position Change", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 14, "description": "Temporal · Position Change — accuracy (%)"}, {"key": "T11", "code": "T11", "label": "Action Sequence", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 8, "multi_image_case_count": 8, "description": "Temporal · Action Sequence — accuracy (%)"}, {"key": "T12", "code": "T12", "label": "Physics", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Physics — accuracy (%)"}, {"key": "T13", "code": "T13", "label": "Chemistry", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 8, "multi_image_case_count": 4, "description": "Temporal · Chemistry — accuracy (%)"}, {"key": "T14", "code": "T14", "label": "Biology", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Biology — accuracy (%)"}, {"key": "T15", "code": "T15", "label": "Astronomy", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Temporal · Astronomy — accuracy (%)"}, {"key": "T16", "code": "T16", "label": "Geography", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 18, "multi_image_case_count": 0, "description": "Temporal · Geography — accuracy (%)"}, {"key": "T17", "code": "T17", "label": "History", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 5, "multi_image_case_count": 0, "description": "Temporal · History — accuracy (%)"}, {"key": "T18", "code": "T18", "label": "Medicine", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Medicine — accuracy (%)"}, {"key": "T19", "code": "T19", "label": "Computer Science", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Temporal · Computer Science — accuracy (%)"}, {"key": "C01", "code": "C01", "label": "Physical State Transition", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 31, "multi_image_case_count": 0, "description": "Causal · Physical State Transition — accuracy (%)"}, {"key": "C02", "code": "C02", "label": "Structural Damage", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 27, "multi_image_case_count": 0, "description": "Causal · Structural Damage — accuracy (%)"}, {"key": "C03", "code": "C03", "label": "Flexible Deformation", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 22, "multi_image_case_count": 1, "description": "Causal · Flexible Deformation — accuracy (%)"}, {"key": "C04", "code": "C04", "label": "Magnitude Change", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Magnitude Change — accuracy (%)"}, {"key": "C05", "code": "C05", "label": "Reading Offset", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 2, "description": "Causal · Reading Offset — accuracy (%)"}, {"key": "C06", "code": "C06", "label": "Order Relation", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Order Relation — accuracy (%)"}, {"key": "C07", "code": "C07", "label": "Feature Mapping", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Feature Mapping — accuracy (%)"}, {"key": "C08", "code": "C08", "label": "Physics", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 25, "multi_image_case_count": 1, "description": "Causal · Physics — accuracy (%)"}, {"key": "C09", "code": "C09", "label": "Chemistry", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 23, "multi_image_case_count": 4, "description": "Causal · Chemistry — accuracy (%)"}, {"key": "C10", "code": "C10", "label": "Biology", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Causal · Biology — accuracy (%)"}, {"key": "C11", "code": "C11", "label": "Astronomy", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Astronomy — accuracy (%)"}, {"key": "C12", "code": "C12", "label": "Medicine", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Causal · Medicine — accuracy (%)"}, {"key": "C13", "code": "C13", "label": "Music Theory", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Music Theory — accuracy (%)"}, {"key": "C14", "code": "C14", "label": "Computer Science", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Computer Science — accuracy (%)"}, {"key": "S01", "code": "S01", "label": "Adjacency", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Adjacency — accuracy (%)"}, {"key": "S02", "code": "S02", "label": "Direction", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Direction — accuracy (%)"}, {"key": "S03", "code": "S03", "label": "Orientation", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Orientation — accuracy (%)"}, {"key": "S04", "code": "S04", "label": "Projection", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 12, "multi_image_case_count": 0, "description": "Spatial · Projection — accuracy (%)"}, {"key": "S05", "code": "S05", "label": "Distance", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 13, "multi_image_case_count": 0, "description": "Spatial · Distance — accuracy (%)"}, {"key": "S06", "code": "S06", "label": "Size", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Size — accuracy (%)"}, {"key": "S07", "code": "S07", "label": "Configuration", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 18, "multi_image_case_count": 0, "description": "Spatial · Configuration — accuracy (%)"}, {"key": "S08", "code": "S08", "label": "Viewing Scale", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 9, "multi_image_case_count": 0, "description": "Spatial · Viewing Scale — accuracy (%)"}, {"key": "S09", "code": "S09", "label": "Localization", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 6, "multi_image_case_count": 6, "description": "Spatial · Localization — accuracy (%)"}, {"key": "S10", "code": "S10", "label": "Part-Whole Perception", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 24, "multi_image_case_count": 0, "description": "Spatial · Part-Whole Perception — accuracy (%)"}, {"key": "S11", "code": "S11", "label": "Geometric Regularities Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Geometric Regularities Reasoning — accuracy (%)"}, {"key": "S12", "code": "S12", "label": "Viewpoint Generation", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 26, "multi_image_case_count": 0, "description": "Spatial · Viewpoint Generation — accuracy (%)"}, {"key": "S13", "code": "S13", "label": "Environmental Structure Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 19, "multi_image_case_count": 2, "description": "Spatial · Environmental Structure Reasoning — accuracy (%)"}, {"key": "S14", "code": "S14", "label": "Egocentric Scene Reconstruction", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 10, "multi_image_case_count": 10, "description": "Spatial · Egocentric Scene Reconstruction — accuracy (%)"}, {"key": "L01", "code": "L01", "label": "Path Searching", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 24, "multi_image_case_count": 0, "description": "Logical · Path Searching — accuracy (%)"}, {"key": "L02", "code": "L02", "label": "Mathematical Derivation", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 27, "multi_image_case_count": 0, "description": "Logical · Mathematical Derivation — accuracy (%)"}, {"key": "L03", "code": "L03", "label": "Game Deduction", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 37, "multi_image_case_count": 0, "description": "Logical · Game Deduction — accuracy (%)"}, {"key": "L04", "code": "L04", "label": "Puzzle Solving", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 35, "multi_image_case_count": 0, "description": "Logical · Puzzle Solving — accuracy (%)"}, {"key": "L05", "code": "L05", "label": "Pattern Prediction", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 39, "multi_image_case_count": 0, "description": "Logical · Pattern Prediction — accuracy (%)"}, {"key": "L06", "code": "L06", "label": "Visual Oddity Detection", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 18, "multi_image_case_count": 0, "description": "Logical · Visual Oddity Detection — accuracy (%)"}, {"key": "L07", "code": "L07", "label": "Rule Transfer", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 20, "multi_image_case_count": 20, "description": "Logical · Rule Transfer — accuracy (%)"}, {"key": "F01", "code": "F01", "label": "Physical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 23, "multi_image_case_count": 0, "description": "Counterfactual · Physical Counterfactual — accuracy (%)"}, {"key": "F02", "code": "F02", "label": "Chemical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Chemical Counterfactual — accuracy (%)"}, {"key": "F03", "code": "F03", "label": "Biological Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Biological Counterfactual — accuracy (%)"}, {"key": "F04", "code": "F04", "label": "Astronomy Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · Astronomy Counterfactual — accuracy (%)"}, {"key": "F05", "code": "F05", "label": "Geography Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Geography Counterfactual — accuracy (%)"}, {"key": "F06", "code": "F06", "label": "History Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · History Counterfactual — accuracy (%)"}, {"key": "F07", "code": "F07", "label": "Music Theory Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Music Theory Counterfactual — accuracy (%)"}, {"key": "F08", "code": "F08", "label": "Computer Science Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Computer Science Counterfactual — accuracy (%)"}, {"key": "F09", "code": "F09", "label": "Anatomical Errors", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 10, "multi_image_case_count": 0, "description": "Counterfactual · Anatomical Errors — accuracy (%)"}, {"key": "F10", "code": "F10", "label": "Structural Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 11, "multi_image_case_count": 0, "description": "Counterfactual · Structural Anomalies — accuracy (%)"}, {"key": "F11", "code": "F11", "label": "Relational Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Relational Anomalies — accuracy (%)"}], "links": {"paper": "https://arxiv.org/abs/2610.12343", "data": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus", "outputs": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench%2B%2B"}, "judges": {"instruction_reasoning": "Gemini-3-Flash", "appearance_consistency": "Gemini-3-Flash", "visual_plausibility": "Gemini-3.1-Flash-Lite"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}, "zh": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}}}, {"id": "risebench", "name": "RISEBench", "case_count": 360, "available_result_languages": ["en"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "total", "label": "Overall", "description": "Accuracy on the complete RISEBench-360 benchmark."}], "links": {"paper": "https://arxiv.org/abs/2504.02826", "data": "https://huggingface.co/datasets/PhoenixZ/RISEBench", "outputs": "https://huggingface.co/datasets/zpy777/RISEBench_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench"}, "judges": {"instruction_reasoning": "GPT-4o", "appearance_consistency": "GPT-4o", "visual_plausibility": "GPT-4o"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gemini-3-pro-image-preview-nano-banana-pro", "name": "Gemini-3-pro-image-preview (Nano Banana-pro)"}, {"id": "gemini-2-5-flash-image-nano-banana", "name": "Gemini-2.5-Flash-Image (Nano Banana)"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "gpt-image-1-mini", "name": "GPT-Image-1-mini"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "gemini-2-0-flash-exp", "name": "Gemini-2.0-Flash-exp"}, {"id": "seedream-4-0", "name": "Seedream-4.0"}, {"id": "gemini-2-0-flash-pre", "name": "Gemini-2.0-Flash-pre"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "bagel", "name": "BAGEL"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1-Kontext-Dev"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "step1x-edit", "name": "Step1X-Edit"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2", "name": "EMU2"}, {"id": "hidream-edit", "name": "HiDream-Edit"}, {"id": "flux-1-canny", "name": "FLUX.1-Canny"}]}}}]}</script><script src="portal.js" defer></script></body></html>
 
4
  <nav class="portal-nav" aria-label="Main navigation"><a class="wordmark" href="index.html">RISEBench<span>++</span></a><div><a href="index.html">Leaderboard</a><a href="submit.html">Submit results</a><button id="sign-out" class="text-button" hidden>Sign out</button></div></nav>
5
  <header class="portal-heading"><span class="section-kicker">REVIEW WORKSPACE</span><h1>Review submissions.</h1><p>Verify evaluation artifacts, then approve or return results.</p></header>
6
  <p class="notice" id="service-notice" hidden></p>
7
+ <section class="portal-card login-card" id="login-panel"><h2>Administrator sign in</h2><p class="login-caption" id="login-caption">VisionXLab members can sign in with their Hugging Face account.</p><p class="form-message" id="login-message" role="status"></p><a class="primary-button hf-login" id="hf-login" href="https://visionxlab-risebench-leaderboard.hf.space/api/admin/login" target="_blank" rel="noopener noreferrer" hidden>Sign in with Hugging Face ↗</a><form id="login-form" hidden><button type="submit" class="primary-button" id="login-button">Open local review</button></form></section>
8
+ <p class="review-identity" id="review-identity" hidden></p>
9
  <section id="review-workspace" hidden><div class="review-toolbar"><div class="review-filters" role="group" aria-label="Submission status"><button data-status="pending" aria-pressed="true">Pending <span id="pending-count">0</span></button><button data-status="approved" aria-pressed="false">Approved</button><button data-status="rejected" aria-pressed="false">Returned</button><button data-status="withdrawn" aria-pressed="false">Withdrawn</button><button data-status="all" aria-pressed="false">All</button></div><button class="outline-button" id="refresh-queue">Refresh</button></div><p id="queue-message" class="form-message" role="status"></p><div class="review-layout"><aside class="review-list" id="review-list" aria-label="Submissions"></aside><section class="portal-card review-detail" id="review-detail"><div class="review-empty"><h2>Select a submission</h2><p>Its scores and evaluation artifacts will appear here.</p></div></section></div></section>
10
  <footer class="page-footer"><a href="index.html">← Back to leaderboard</a><span>Private review workspace</span></footer>
11
  </main><script id="submission-schema" type="application/json">{"benchmarks": [{"id": "risebench-plusplus", "name": "RISEBench++", "case_count": 1000, "available_result_languages": ["en", "zh"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}, {"key": "single", "label": "Single", "description": "Accuracy on single-image cases."}, {"key": "multi", "label": "Multi", "description": "Accuracy on multi-image cases. Not evaluated for models without multi-image support."}, {"key": "total", "label": "Total", "description": "Accuracy on the complete benchmark. Not evaluated for single-image-only models."}], "subcategory_columns": [{"key": "temporal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "temporal", "case_count": 85, "multi_image_case_count": 0, "code": "CSK", "description": "Temporal · Common-Sense Knowledge — accuracy (%)"}, {"key": "temporal_context_knowledge", "label": "Context Knowledge", "dimension": "temporal", "case_count": 52, "multi_image_case_count": 28, "code": "CtxK", "description": "Temporal · Context Knowledge — accuracy (%)"}, {"key": "temporal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "temporal", "case_count": 63, "multi_image_case_count": 4, "code": "DK", "description": "Temporal · Disciplinary Knowledge — accuracy (%)"}, {"key": "causal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 1, "code": "CSK", "description": "Causal · Common-Sense Knowledge — accuracy (%)"}, {"key": "causal_context_knowledge", "label": "Context Knowledge", "dimension": "causal", "case_count": 40, "multi_image_case_count": 2, "code": "CtxK", "description": "Causal · Context Knowledge — accuracy (%)"}, {"key": "causal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 5, "code": "DK", "description": "Causal · Disciplinary Knowledge — accuracy (%)"}, {"key": "spatial_relation", "label": "Relation", "dimension": "spatial", "case_count": 106, "multi_image_case_count": 6, "code": "Rel.", "description": "Spatial · Relation — accuracy (%)"}, {"key": "spatial_structure", "label": "Structure", "dimension": "spatial", "case_count": 94, "multi_image_case_count": 12, "code": "Struct.", "description": "Spatial · Structure — accuracy (%)"}, {"key": "logical_explicit_rule_deduction", "label": "Explicit Rule Deduction", "dimension": "logical", "case_count": 123, "multi_image_case_count": 0, "code": "ERD", "description": "Logical · Explicit Rule Deduction — accuracy (%)"}, {"key": "logical_implicit_pattern_induction", "label": "Implicit Pattern Induction", "dimension": "logical", "case_count": 77, "multi_image_case_count": 20, "code": "IPI", "description": "Logical · Implicit Pattern Induction — accuracy (%)"}, {"key": "counterfactual_counterfactual_imagination", "label": "Counterfactual Imagination", "dimension": "counterfactual", "case_count": 70, "multi_image_case_count": 0, "code": "CFI", "description": "Counterfactual · Counterfactual Imagination — accuracy (%)"}, {"key": "counterfactual_anomaly_correction_and_generation", "label": "Anomaly Correction and Generation", "dimension": "counterfactual", "case_count": 30, "multi_image_case_count": 0, "code": "ACG", "description": "Counterfactual · Anomaly Correction and Generation — accuracy (%)"}], "task_type_columns": [{"key": "T01", "code": "T01", "label": "Life Progression", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 24, "multi_image_case_count": 0, "description": "Temporal · Life Progression — accuracy (%)"}, {"key": "T02", "code": "T02", "label": "Material Transformation", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Material Transformation — accuracy (%)"}, {"key": "T03", "code": "T03", "label": "Natural Environmental Changes", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 13, "multi_image_case_count": 0, "description": "Temporal · Natural Environmental Changes — accuracy (%)"}, {"key": "T04", "code": "T04", "label": "Physical Aging", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 20, "multi_image_case_count": 0, "description": "Temporal · Physical Aging — accuracy (%)"}, {"key": "T05", "code": "T05", "label": "Social Activities", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 8, "multi_image_case_count": 0, "description": "Temporal · Social Activities — accuracy (%)"}, {"key": "T06", "code": "T06", "label": "Tool Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 7, "multi_image_case_count": 0, "description": "Temporal · Tool Evolution — accuracy (%)"}, {"key": "T07", "code": "T07", "label": "Urban Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Urban Evolution — accuracy (%)"}, {"key": "T08", "code": "T08", "label": "Temporal State Transition", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 4, "description": "Temporal · Temporal State Transition — accuracy (%)"}, {"key": "T09", "code": "T09", "label": "Precise Temporal Localization", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 14, "multi_image_case_count": 2, "description": "Temporal · Precise Temporal Localization — accuracy (%)"}, {"key": "T10", "code": "T10", "label": "Position Change", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 14, "description": "Temporal · Position Change — accuracy (%)"}, {"key": "T11", "code": "T11", "label": "Action Sequence", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 8, "multi_image_case_count": 8, "description": "Temporal · Action Sequence — accuracy (%)"}, {"key": "T12", "code": "T12", "label": "Physics", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Physics — accuracy (%)"}, {"key": "T13", "code": "T13", "label": "Chemistry", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 8, "multi_image_case_count": 4, "description": "Temporal · Chemistry — accuracy (%)"}, {"key": "T14", "code": "T14", "label": "Biology", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Biology — accuracy (%)"}, {"key": "T15", "code": "T15", "label": "Astronomy", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Temporal · Astronomy — accuracy (%)"}, {"key": "T16", "code": "T16", "label": "Geography", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 18, "multi_image_case_count": 0, "description": "Temporal · Geography — accuracy (%)"}, {"key": "T17", "code": "T17", "label": "History", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 5, "multi_image_case_count": 0, "description": "Temporal · History — accuracy (%)"}, {"key": "T18", "code": "T18", "label": "Medicine", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Medicine — accuracy (%)"}, {"key": "T19", "code": "T19", "label": "Computer Science", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Temporal · Computer Science — accuracy (%)"}, {"key": "C01", "code": "C01", "label": "Physical State Transition", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 31, "multi_image_case_count": 0, "description": "Causal · Physical State Transition — accuracy (%)"}, {"key": "C02", "code": "C02", "label": "Structural Damage", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 27, "multi_image_case_count": 0, "description": "Causal · Structural Damage — accuracy (%)"}, {"key": "C03", "code": "C03", "label": "Flexible Deformation", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 22, "multi_image_case_count": 1, "description": "Causal · Flexible Deformation — accuracy (%)"}, {"key": "C04", "code": "C04", "label": "Magnitude Change", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Magnitude Change — accuracy (%)"}, {"key": "C05", "code": "C05", "label": "Reading Offset", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 2, "description": "Causal · Reading Offset — accuracy (%)"}, {"key": "C06", "code": "C06", "label": "Order Relation", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Order Relation — accuracy (%)"}, {"key": "C07", "code": "C07", "label": "Feature Mapping", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Feature Mapping — accuracy (%)"}, {"key": "C08", "code": "C08", "label": "Physics", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 25, "multi_image_case_count": 1, "description": "Causal · Physics — accuracy (%)"}, {"key": "C09", "code": "C09", "label": "Chemistry", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 23, "multi_image_case_count": 4, "description": "Causal · Chemistry — accuracy (%)"}, {"key": "C10", "code": "C10", "label": "Biology", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Causal · Biology — accuracy (%)"}, {"key": "C11", "code": "C11", "label": "Astronomy", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Astronomy — accuracy (%)"}, {"key": "C12", "code": "C12", "label": "Medicine", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Causal · Medicine — accuracy (%)"}, {"key": "C13", "code": "C13", "label": "Music Theory", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Music Theory — accuracy (%)"}, {"key": "C14", "code": "C14", "label": "Computer Science", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Computer Science — accuracy (%)"}, {"key": "S01", "code": "S01", "label": "Adjacency", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Adjacency — accuracy (%)"}, {"key": "S02", "code": "S02", "label": "Direction", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Direction — accuracy (%)"}, {"key": "S03", "code": "S03", "label": "Orientation", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Orientation — accuracy (%)"}, {"key": "S04", "code": "S04", "label": "Projection", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 12, "multi_image_case_count": 0, "description": "Spatial · Projection — accuracy (%)"}, {"key": "S05", "code": "S05", "label": "Distance", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 13, "multi_image_case_count": 0, "description": "Spatial · Distance — accuracy (%)"}, {"key": "S06", "code": "S06", "label": "Size", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Size — accuracy (%)"}, {"key": "S07", "code": "S07", "label": "Configuration", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 18, "multi_image_case_count": 0, "description": "Spatial · Configuration — accuracy (%)"}, {"key": "S08", "code": "S08", "label": "Viewing Scale", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 9, "multi_image_case_count": 0, "description": "Spatial · Viewing Scale — accuracy (%)"}, {"key": "S09", "code": "S09", "label": "Localization", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 6, "multi_image_case_count": 6, "description": "Spatial · Localization — accuracy (%)"}, {"key": "S10", "code": "S10", "label": "Part-Whole Perception", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 24, "multi_image_case_count": 0, "description": "Spatial · Part-Whole Perception — accuracy (%)"}, {"key": "S11", "code": "S11", "label": "Geometric Regularities Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Geometric Regularities Reasoning — accuracy (%)"}, {"key": "S12", "code": "S12", "label": "Viewpoint Generation", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 26, "multi_image_case_count": 0, "description": "Spatial · Viewpoint Generation — accuracy (%)"}, {"key": "S13", "code": "S13", "label": "Environmental Structure Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 19, "multi_image_case_count": 2, "description": "Spatial · Environmental Structure Reasoning — accuracy (%)"}, {"key": "S14", "code": "S14", "label": "Egocentric Scene Reconstruction", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 10, "multi_image_case_count": 10, "description": "Spatial · Egocentric Scene Reconstruction — accuracy (%)"}, {"key": "L01", "code": "L01", "label": "Path Searching", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 24, "multi_image_case_count": 0, "description": "Logical · Path Searching — accuracy (%)"}, {"key": "L02", "code": "L02", "label": "Mathematical Derivation", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 27, "multi_image_case_count": 0, "description": "Logical · Mathematical Derivation — accuracy (%)"}, {"key": "L03", "code": "L03", "label": "Game Deduction", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 37, "multi_image_case_count": 0, "description": "Logical · Game Deduction — accuracy (%)"}, {"key": "L04", "code": "L04", "label": "Puzzle Solving", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 35, "multi_image_case_count": 0, "description": "Logical · Puzzle Solving — accuracy (%)"}, {"key": "L05", "code": "L05", "label": "Pattern Prediction", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 39, "multi_image_case_count": 0, "description": "Logical · Pattern Prediction — accuracy (%)"}, {"key": "L06", "code": "L06", "label": "Visual Oddity Detection", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 18, "multi_image_case_count": 0, "description": "Logical · Visual Oddity Detection — accuracy (%)"}, {"key": "L07", "code": "L07", "label": "Rule Transfer", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 20, "multi_image_case_count": 20, "description": "Logical · Rule Transfer — accuracy (%)"}, {"key": "F01", "code": "F01", "label": "Physical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 23, "multi_image_case_count": 0, "description": "Counterfactual · Physical Counterfactual — accuracy (%)"}, {"key": "F02", "code": "F02", "label": "Chemical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Chemical Counterfactual — accuracy (%)"}, {"key": "F03", "code": "F03", "label": "Biological Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Biological Counterfactual — accuracy (%)"}, {"key": "F04", "code": "F04", "label": "Astronomy Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · Astronomy Counterfactual — accuracy (%)"}, {"key": "F05", "code": "F05", "label": "Geography Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Geography Counterfactual — accuracy (%)"}, {"key": "F06", "code": "F06", "label": "History Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · History Counterfactual — accuracy (%)"}, {"key": "F07", "code": "F07", "label": "Music Theory Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Music Theory Counterfactual — accuracy (%)"}, {"key": "F08", "code": "F08", "label": "Computer Science Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Computer Science Counterfactual — accuracy (%)"}, {"key": "F09", "code": "F09", "label": "Anatomical Errors", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 10, "multi_image_case_count": 0, "description": "Counterfactual · Anatomical Errors — accuracy (%)"}, {"key": "F10", "code": "F10", "label": "Structural Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 11, "multi_image_case_count": 0, "description": "Counterfactual · Structural Anomalies — accuracy (%)"}, {"key": "F11", "code": "F11", "label": "Relational Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Relational Anomalies — accuracy (%)"}], "links": {"paper": "https://arxiv.org/abs/2610.12343", "data": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus", "outputs": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench%2B%2B"}, "judges": {"instruction_reasoning": "Gemini-3-Flash", "appearance_consistency": "Gemini-3-Flash", "visual_plausibility": "Gemini-3.1-Flash-Lite"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}, "zh": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}}}, {"id": "risebench", "name": "RISEBench", "case_count": 360, "available_result_languages": ["en"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "total", "label": "Overall", "description": "Accuracy on the complete RISEBench-360 benchmark."}], "links": {"paper": "https://arxiv.org/abs/2504.02826", "data": "https://huggingface.co/datasets/PhoenixZ/RISEBench", "outputs": "https://huggingface.co/datasets/zpy777/RISEBench_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench"}, "judges": {"instruction_reasoning": "GPT-4o", "appearance_consistency": "GPT-4o", "visual_plausibility": "GPT-4o"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gemini-3-pro-image-preview-nano-banana-pro", "name": "Gemini-3-pro-image-preview (Nano Banana-pro)"}, {"id": "gemini-2-5-flash-image-nano-banana", "name": "Gemini-2.5-Flash-Image (Nano Banana)"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "gpt-image-1-mini", "name": "GPT-Image-1-mini"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "gemini-2-0-flash-exp", "name": "Gemini-2.0-Flash-exp"}, {"id": "seedream-4-0", "name": "Seedream-4.0"}, {"id": "gemini-2-0-flash-pre", "name": "Gemini-2.0-Flash-pre"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "bagel", "name": "BAGEL"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1-Kontext-Dev"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "step1x-edit", "name": "Step1X-Edit"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2", "name": "EMU2"}, {"id": "hidream-edit", "name": "HiDream-Edit"}, {"id": "flux-1-canny", "name": "FLUX.1-Canny"}]}}}]}</script><script src="portal.js" defer></script></body></html>
dist/admin.html CHANGED
@@ -4,7 +4,8 @@
4
  <nav class="portal-nav" aria-label="Main navigation"><a class="wordmark" href="index.html">RISEBench<span>++</span></a><div><a href="index.html">Leaderboard</a><a href="submit.html">Submit results</a><button id="sign-out" class="text-button" hidden>Sign out</button></div></nav>
5
  <header class="portal-heading"><span class="section-kicker">REVIEW WORKSPACE</span><h1>Review submissions.</h1><p>Verify evaluation artifacts, then approve or return results.</p></header>
6
  <p class="notice" id="service-notice" hidden></p>
7
- <section class="portal-card login-card" id="login-panel"><h2>Administrator sign in</h2><form id="login-form"><label id="passphrase-label">Passphrase<input type="password" id="admin-passphrase" autocomplete="current-password" required></label><p class="form-message" id="login-message" role="status"></p><button type="submit" class="primary-button" id="login-button">Sign in</button></form></section>
 
8
  <section id="review-workspace" hidden><div class="review-toolbar"><div class="review-filters" role="group" aria-label="Submission status"><button data-status="pending" aria-pressed="true">Pending <span id="pending-count">0</span></button><button data-status="approved" aria-pressed="false">Approved</button><button data-status="rejected" aria-pressed="false">Returned</button><button data-status="withdrawn" aria-pressed="false">Withdrawn</button><button data-status="all" aria-pressed="false">All</button></div><button class="outline-button" id="refresh-queue">Refresh</button></div><p id="queue-message" class="form-message" role="status"></p><div class="review-layout"><aside class="review-list" id="review-list" aria-label="Submissions"></aside><section class="portal-card review-detail" id="review-detail"><div class="review-empty"><h2>Select a submission</h2><p>Its scores and evaluation artifacts will appear here.</p></div></section></div></section>
9
  <footer class="page-footer"><a href="index.html">← Back to leaderboard</a><span>Private review workspace</span></footer>
10
  </main><script id="submission-schema" type="application/json">{"benchmarks": [{"id": "risebench-plusplus", "name": "RISEBench++", "case_count": 1000, "available_result_languages": ["en", "zh"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}, {"key": "single", "label": "Single", "description": "Accuracy on single-image cases."}, {"key": "multi", "label": "Multi", "description": "Accuracy on multi-image cases. Not evaluated for models without multi-image support."}, {"key": "total", "label": "Total", "description": "Accuracy on the complete benchmark. Not evaluated for single-image-only models."}], "subcategory_columns": [{"key": "temporal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "temporal", "case_count": 85, "multi_image_case_count": 0, "code": "CSK", "description": "Temporal · Common-Sense Knowledge — accuracy (%)"}, {"key": "temporal_context_knowledge", "label": "Context Knowledge", "dimension": "temporal", "case_count": 52, "multi_image_case_count": 28, "code": "CtxK", "description": "Temporal · Context Knowledge — accuracy (%)"}, {"key": "temporal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "temporal", "case_count": 63, "multi_image_case_count": 4, "code": "DK", "description": "Temporal · Disciplinary Knowledge — accuracy (%)"}, {"key": "causal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 1, "code": "CSK", "description": "Causal · Common-Sense Knowledge — accuracy (%)"}, {"key": "causal_context_knowledge", "label": "Context Knowledge", "dimension": "causal", "case_count": 40, "multi_image_case_count": 2, "code": "CtxK", "description": "Causal · Context Knowledge — accuracy (%)"}, {"key": "causal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 5, "code": "DK", "description": "Causal · Disciplinary Knowledge — accuracy (%)"}, {"key": "spatial_relation", "label": "Relation", "dimension": "spatial", "case_count": 106, "multi_image_case_count": 6, "code": "Rel.", "description": "Spatial · Relation — accuracy (%)"}, {"key": "spatial_structure", "label": "Structure", "dimension": "spatial", "case_count": 94, "multi_image_case_count": 12, "code": "Struct.", "description": "Spatial · Structure — accuracy (%)"}, {"key": "logical_explicit_rule_deduction", "label": "Explicit Rule Deduction", "dimension": "logical", "case_count": 123, "multi_image_case_count": 0, "code": "ERD", "description": "Logical · Explicit Rule Deduction — accuracy (%)"}, {"key": "logical_implicit_pattern_induction", "label": "Implicit Pattern Induction", "dimension": "logical", "case_count": 77, "multi_image_case_count": 20, "code": "IPI", "description": "Logical · Implicit Pattern Induction — accuracy (%)"}, {"key": "counterfactual_counterfactual_imagination", "label": "Counterfactual Imagination", "dimension": "counterfactual", "case_count": 70, "multi_image_case_count": 0, "code": "CFI", "description": "Counterfactual · Counterfactual Imagination — accuracy (%)"}, {"key": "counterfactual_anomaly_correction_and_generation", "label": "Anomaly Correction and Generation", "dimension": "counterfactual", "case_count": 30, "multi_image_case_count": 0, "code": "ACG", "description": "Counterfactual · Anomaly Correction and Generation — accuracy (%)"}], "task_type_columns": [{"key": "T01", "code": "T01", "label": "Life Progression", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 24, "multi_image_case_count": 0, "description": "Temporal · Life Progression — accuracy (%)"}, {"key": "T02", "code": "T02", "label": "Material Transformation", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Material Transformation — accuracy (%)"}, {"key": "T03", "code": "T03", "label": "Natural Environmental Changes", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 13, "multi_image_case_count": 0, "description": "Temporal · Natural Environmental Changes — accuracy (%)"}, {"key": "T04", "code": "T04", "label": "Physical Aging", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 20, "multi_image_case_count": 0, "description": "Temporal · Physical Aging — accuracy (%)"}, {"key": "T05", "code": "T05", "label": "Social Activities", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 8, "multi_image_case_count": 0, "description": "Temporal · Social Activities — accuracy (%)"}, {"key": "T06", "code": "T06", "label": "Tool Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 7, "multi_image_case_count": 0, "description": "Temporal · Tool Evolution — accuracy (%)"}, {"key": "T07", "code": "T07", "label": "Urban Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Urban Evolution — accuracy (%)"}, {"key": "T08", "code": "T08", "label": "Temporal State Transition", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 4, "description": "Temporal · Temporal State Transition — accuracy (%)"}, {"key": "T09", "code": "T09", "label": "Precise Temporal Localization", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 14, "multi_image_case_count": 2, "description": "Temporal · Precise Temporal Localization — accuracy (%)"}, {"key": "T10", "code": "T10", "label": "Position Change", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 14, "description": "Temporal · Position Change — accuracy (%)"}, {"key": "T11", "code": "T11", "label": "Action Sequence", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 8, "multi_image_case_count": 8, "description": "Temporal · Action Sequence — accuracy (%)"}, {"key": "T12", "code": "T12", "label": "Physics", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Physics — accuracy (%)"}, {"key": "T13", "code": "T13", "label": "Chemistry", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 8, "multi_image_case_count": 4, "description": "Temporal · Chemistry — accuracy (%)"}, {"key": "T14", "code": "T14", "label": "Biology", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Biology — accuracy (%)"}, {"key": "T15", "code": "T15", "label": "Astronomy", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Temporal · Astronomy — accuracy (%)"}, {"key": "T16", "code": "T16", "label": "Geography", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 18, "multi_image_case_count": 0, "description": "Temporal · Geography — accuracy (%)"}, {"key": "T17", "code": "T17", "label": "History", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 5, "multi_image_case_count": 0, "description": "Temporal · History — accuracy (%)"}, {"key": "T18", "code": "T18", "label": "Medicine", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Medicine — accuracy (%)"}, {"key": "T19", "code": "T19", "label": "Computer Science", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Temporal · Computer Science — accuracy (%)"}, {"key": "C01", "code": "C01", "label": "Physical State Transition", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 31, "multi_image_case_count": 0, "description": "Causal · Physical State Transition — accuracy (%)"}, {"key": "C02", "code": "C02", "label": "Structural Damage", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 27, "multi_image_case_count": 0, "description": "Causal · Structural Damage — accuracy (%)"}, {"key": "C03", "code": "C03", "label": "Flexible Deformation", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 22, "multi_image_case_count": 1, "description": "Causal · Flexible Deformation — accuracy (%)"}, {"key": "C04", "code": "C04", "label": "Magnitude Change", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Magnitude Change — accuracy (%)"}, {"key": "C05", "code": "C05", "label": "Reading Offset", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 2, "description": "Causal · Reading Offset — accuracy (%)"}, {"key": "C06", "code": "C06", "label": "Order Relation", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Order Relation — accuracy (%)"}, {"key": "C07", "code": "C07", "label": "Feature Mapping", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Feature Mapping — accuracy (%)"}, {"key": "C08", "code": "C08", "label": "Physics", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 25, "multi_image_case_count": 1, "description": "Causal · Physics — accuracy (%)"}, {"key": "C09", "code": "C09", "label": "Chemistry", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 23, "multi_image_case_count": 4, "description": "Causal · Chemistry — accuracy (%)"}, {"key": "C10", "code": "C10", "label": "Biology", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Causal · Biology — accuracy (%)"}, {"key": "C11", "code": "C11", "label": "Astronomy", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Astronomy — accuracy (%)"}, {"key": "C12", "code": "C12", "label": "Medicine", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Causal · Medicine — accuracy (%)"}, {"key": "C13", "code": "C13", "label": "Music Theory", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Music Theory — accuracy (%)"}, {"key": "C14", "code": "C14", "label": "Computer Science", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Computer Science — accuracy (%)"}, {"key": "S01", "code": "S01", "label": "Adjacency", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Adjacency — accuracy (%)"}, {"key": "S02", "code": "S02", "label": "Direction", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Direction — accuracy (%)"}, {"key": "S03", "code": "S03", "label": "Orientation", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Orientation — accuracy (%)"}, {"key": "S04", "code": "S04", "label": "Projection", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 12, "multi_image_case_count": 0, "description": "Spatial · Projection — accuracy (%)"}, {"key": "S05", "code": "S05", "label": "Distance", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 13, "multi_image_case_count": 0, "description": "Spatial · Distance — accuracy (%)"}, {"key": "S06", "code": "S06", "label": "Size", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Size — accuracy (%)"}, {"key": "S07", "code": "S07", "label": "Configuration", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 18, "multi_image_case_count": 0, "description": "Spatial · Configuration — accuracy (%)"}, {"key": "S08", "code": "S08", "label": "Viewing Scale", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 9, "multi_image_case_count": 0, "description": "Spatial · Viewing Scale — accuracy (%)"}, {"key": "S09", "code": "S09", "label": "Localization", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 6, "multi_image_case_count": 6, "description": "Spatial · Localization — accuracy (%)"}, {"key": "S10", "code": "S10", "label": "Part-Whole Perception", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 24, "multi_image_case_count": 0, "description": "Spatial · Part-Whole Perception — accuracy (%)"}, {"key": "S11", "code": "S11", "label": "Geometric Regularities Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Geometric Regularities Reasoning — accuracy (%)"}, {"key": "S12", "code": "S12", "label": "Viewpoint Generation", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 26, "multi_image_case_count": 0, "description": "Spatial · Viewpoint Generation — accuracy (%)"}, {"key": "S13", "code": "S13", "label": "Environmental Structure Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 19, "multi_image_case_count": 2, "description": "Spatial · Environmental Structure Reasoning — accuracy (%)"}, {"key": "S14", "code": "S14", "label": "Egocentric Scene Reconstruction", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 10, "multi_image_case_count": 10, "description": "Spatial · Egocentric Scene Reconstruction — accuracy (%)"}, {"key": "L01", "code": "L01", "label": "Path Searching", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 24, "multi_image_case_count": 0, "description": "Logical · Path Searching — accuracy (%)"}, {"key": "L02", "code": "L02", "label": "Mathematical Derivation", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 27, "multi_image_case_count": 0, "description": "Logical · Mathematical Derivation — accuracy (%)"}, {"key": "L03", "code": "L03", "label": "Game Deduction", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 37, "multi_image_case_count": 0, "description": "Logical · Game Deduction — accuracy (%)"}, {"key": "L04", "code": "L04", "label": "Puzzle Solving", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 35, "multi_image_case_count": 0, "description": "Logical · Puzzle Solving — accuracy (%)"}, {"key": "L05", "code": "L05", "label": "Pattern Prediction", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 39, "multi_image_case_count": 0, "description": "Logical · Pattern Prediction — accuracy (%)"}, {"key": "L06", "code": "L06", "label": "Visual Oddity Detection", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 18, "multi_image_case_count": 0, "description": "Logical · Visual Oddity Detection — accuracy (%)"}, {"key": "L07", "code": "L07", "label": "Rule Transfer", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 20, "multi_image_case_count": 20, "description": "Logical · Rule Transfer — accuracy (%)"}, {"key": "F01", "code": "F01", "label": "Physical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 23, "multi_image_case_count": 0, "description": "Counterfactual · Physical Counterfactual — accuracy (%)"}, {"key": "F02", "code": "F02", "label": "Chemical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Chemical Counterfactual — accuracy (%)"}, {"key": "F03", "code": "F03", "label": "Biological Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Biological Counterfactual — accuracy (%)"}, {"key": "F04", "code": "F04", "label": "Astronomy Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · Astronomy Counterfactual — accuracy (%)"}, {"key": "F05", "code": "F05", "label": "Geography Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Geography Counterfactual — accuracy (%)"}, {"key": "F06", "code": "F06", "label": "History Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · History Counterfactual — accuracy (%)"}, {"key": "F07", "code": "F07", "label": "Music Theory Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Music Theory Counterfactual — accuracy (%)"}, {"key": "F08", "code": "F08", "label": "Computer Science Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Computer Science Counterfactual — accuracy (%)"}, {"key": "F09", "code": "F09", "label": "Anatomical Errors", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 10, "multi_image_case_count": 0, "description": "Counterfactual · Anatomical Errors — accuracy (%)"}, {"key": "F10", "code": "F10", "label": "Structural Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 11, "multi_image_case_count": 0, "description": "Counterfactual · Structural Anomalies — accuracy (%)"}, {"key": "F11", "code": "F11", "label": "Relational Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Relational Anomalies — accuracy (%)"}], "links": {"paper": "https://arxiv.org/abs/2610.12343", "data": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus", "outputs": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench%2B%2B"}, "judges": {"instruction_reasoning": "Gemini-3-Flash", "appearance_consistency": "Gemini-3-Flash", "visual_plausibility": "Gemini-3.1-Flash-Lite"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}, "zh": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}}}, {"id": "risebench", "name": "RISEBench", "case_count": 360, "available_result_languages": ["en"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "total", "label": "Overall", "description": "Accuracy on the complete RISEBench-360 benchmark."}], "links": {"paper": "https://arxiv.org/abs/2504.02826", "data": "https://huggingface.co/datasets/PhoenixZ/RISEBench", "outputs": "https://huggingface.co/datasets/zpy777/RISEBench_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench"}, "judges": {"instruction_reasoning": "GPT-4o", "appearance_consistency": "GPT-4o", "visual_plausibility": "GPT-4o"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gemini-3-pro-image-preview-nano-banana-pro", "name": "Gemini-3-pro-image-preview (Nano Banana-pro)"}, {"id": "gemini-2-5-flash-image-nano-banana", "name": "Gemini-2.5-Flash-Image (Nano Banana)"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "gpt-image-1-mini", "name": "GPT-Image-1-mini"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "gemini-2-0-flash-exp", "name": "Gemini-2.0-Flash-exp"}, {"id": "seedream-4-0", "name": "Seedream-4.0"}, {"id": "gemini-2-0-flash-pre", "name": "Gemini-2.0-Flash-pre"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "bagel", "name": "BAGEL"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1-Kontext-Dev"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "step1x-edit", "name": "Step1X-Edit"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2", "name": "EMU2"}, {"id": "hidream-edit", "name": "HiDream-Edit"}, {"id": "flux-1-canny", "name": "FLUX.1-Canny"}]}}}]}</script><script src="portal.js" defer></script></body></html>
 
4
  <nav class="portal-nav" aria-label="Main navigation"><a class="wordmark" href="index.html">RISEBench<span>++</span></a><div><a href="index.html">Leaderboard</a><a href="submit.html">Submit results</a><button id="sign-out" class="text-button" hidden>Sign out</button></div></nav>
5
  <header class="portal-heading"><span class="section-kicker">REVIEW WORKSPACE</span><h1>Review submissions.</h1><p>Verify evaluation artifacts, then approve or return results.</p></header>
6
  <p class="notice" id="service-notice" hidden></p>
7
+ <section class="portal-card login-card" id="login-panel"><h2>Administrator sign in</h2><p class="login-caption" id="login-caption">VisionXLab members can sign in with their Hugging Face account.</p><p class="form-message" id="login-message" role="status"></p><a class="primary-button hf-login" id="hf-login" href="https://visionxlab-risebench-leaderboard.hf.space/api/admin/login" target="_blank" rel="noopener noreferrer" hidden>Sign in with Hugging Face ↗</a><form id="login-form" hidden><button type="submit" class="primary-button" id="login-button">Open local review</button></form></section>
8
+ <p class="review-identity" id="review-identity" hidden></p>
9
  <section id="review-workspace" hidden><div class="review-toolbar"><div class="review-filters" role="group" aria-label="Submission status"><button data-status="pending" aria-pressed="true">Pending <span id="pending-count">0</span></button><button data-status="approved" aria-pressed="false">Approved</button><button data-status="rejected" aria-pressed="false">Returned</button><button data-status="withdrawn" aria-pressed="false">Withdrawn</button><button data-status="all" aria-pressed="false">All</button></div><button class="outline-button" id="refresh-queue">Refresh</button></div><p id="queue-message" class="form-message" role="status"></p><div class="review-layout"><aside class="review-list" id="review-list" aria-label="Submissions"></aside><section class="portal-card review-detail" id="review-detail"><div class="review-empty"><h2>Select a submission</h2><p>Its scores and evaluation artifacts will appear here.</p></div></section></div></section>
10
  <footer class="page-footer"><a href="index.html">← Back to leaderboard</a><span>Private review workspace</span></footer>
11
  </main><script id="submission-schema" type="application/json">{"benchmarks": [{"id": "risebench-plusplus", "name": "RISEBench++", "case_count": 1000, "available_result_languages": ["en", "zh"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "counterfactual", "label": "Counterfactual", "description": "Visualize outcomes under hypothetical or contrary-to-fact conditions."}, {"key": "hybrid", "label": "Hybrid", "description": "Combine reasoning across three to five successive editing instructions."}, {"key": "single", "label": "Single", "description": "Accuracy on single-image cases."}, {"key": "multi", "label": "Multi", "description": "Accuracy on multi-image cases. Not evaluated for models without multi-image support."}, {"key": "total", "label": "Total", "description": "Accuracy on the complete benchmark. Not evaluated for single-image-only models."}], "subcategory_columns": [{"key": "temporal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "temporal", "case_count": 85, "multi_image_case_count": 0, "code": "CSK", "description": "Temporal · Common-Sense Knowledge — accuracy (%)"}, {"key": "temporal_context_knowledge", "label": "Context Knowledge", "dimension": "temporal", "case_count": 52, "multi_image_case_count": 28, "code": "CtxK", "description": "Temporal · Context Knowledge — accuracy (%)"}, {"key": "temporal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "temporal", "case_count": 63, "multi_image_case_count": 4, "code": "DK", "description": "Temporal · Disciplinary Knowledge — accuracy (%)"}, {"key": "causal_common_sense_knowledge", "label": "Common-Sense Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 1, "code": "CSK", "description": "Causal · Common-Sense Knowledge — accuracy (%)"}, {"key": "causal_context_knowledge", "label": "Context Knowledge", "dimension": "causal", "case_count": 40, "multi_image_case_count": 2, "code": "CtxK", "description": "Causal · Context Knowledge — accuracy (%)"}, {"key": "causal_disciplinary_knowledge", "label": "Disciplinary Knowledge", "dimension": "causal", "case_count": 80, "multi_image_case_count": 5, "code": "DK", "description": "Causal · Disciplinary Knowledge — accuracy (%)"}, {"key": "spatial_relation", "label": "Relation", "dimension": "spatial", "case_count": 106, "multi_image_case_count": 6, "code": "Rel.", "description": "Spatial · Relation — accuracy (%)"}, {"key": "spatial_structure", "label": "Structure", "dimension": "spatial", "case_count": 94, "multi_image_case_count": 12, "code": "Struct.", "description": "Spatial · Structure — accuracy (%)"}, {"key": "logical_explicit_rule_deduction", "label": "Explicit Rule Deduction", "dimension": "logical", "case_count": 123, "multi_image_case_count": 0, "code": "ERD", "description": "Logical · Explicit Rule Deduction — accuracy (%)"}, {"key": "logical_implicit_pattern_induction", "label": "Implicit Pattern Induction", "dimension": "logical", "case_count": 77, "multi_image_case_count": 20, "code": "IPI", "description": "Logical · Implicit Pattern Induction — accuracy (%)"}, {"key": "counterfactual_counterfactual_imagination", "label": "Counterfactual Imagination", "dimension": "counterfactual", "case_count": 70, "multi_image_case_count": 0, "code": "CFI", "description": "Counterfactual · Counterfactual Imagination — accuracy (%)"}, {"key": "counterfactual_anomaly_correction_and_generation", "label": "Anomaly Correction and Generation", "dimension": "counterfactual", "case_count": 30, "multi_image_case_count": 0, "code": "ACG", "description": "Counterfactual · Anomaly Correction and Generation — accuracy (%)"}], "task_type_columns": [{"key": "T01", "code": "T01", "label": "Life Progression", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 24, "multi_image_case_count": 0, "description": "Temporal · Life Progression — accuracy (%)"}, {"key": "T02", "code": "T02", "label": "Material Transformation", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Material Transformation — accuracy (%)"}, {"key": "T03", "code": "T03", "label": "Natural Environmental Changes", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 13, "multi_image_case_count": 0, "description": "Temporal · Natural Environmental Changes — accuracy (%)"}, {"key": "T04", "code": "T04", "label": "Physical Aging", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 20, "multi_image_case_count": 0, "description": "Temporal · Physical Aging — accuracy (%)"}, {"key": "T05", "code": "T05", "label": "Social Activities", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 8, "multi_image_case_count": 0, "description": "Temporal · Social Activities — accuracy (%)"}, {"key": "T06", "code": "T06", "label": "Tool Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 7, "multi_image_case_count": 0, "description": "Temporal · Tool Evolution — accuracy (%)"}, {"key": "T07", "code": "T07", "label": "Urban Evolution", "dimension": "temporal", "subcategory": "temporal_common_sense_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Urban Evolution — accuracy (%)"}, {"key": "T08", "code": "T08", "label": "Temporal State Transition", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 4, "description": "Temporal · Temporal State Transition — accuracy (%)"}, {"key": "T09", "code": "T09", "label": "Precise Temporal Localization", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 14, "multi_image_case_count": 2, "description": "Temporal · Precise Temporal Localization — accuracy (%)"}, {"key": "T10", "code": "T10", "label": "Position Change", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 15, "multi_image_case_count": 14, "description": "Temporal · Position Change — accuracy (%)"}, {"key": "T11", "code": "T11", "label": "Action Sequence", "dimension": "temporal", "subcategory": "temporal_context_knowledge", "case_count": 8, "multi_image_case_count": 8, "description": "Temporal · Action Sequence — accuracy (%)"}, {"key": "T12", "code": "T12", "label": "Physics", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Physics — accuracy (%)"}, {"key": "T13", "code": "T13", "label": "Chemistry", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 8, "multi_image_case_count": 4, "description": "Temporal · Chemistry — accuracy (%)"}, {"key": "T14", "code": "T14", "label": "Biology", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 9, "multi_image_case_count": 0, "description": "Temporal · Biology — accuracy (%)"}, {"key": "T15", "code": "T15", "label": "Astronomy", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Temporal · Astronomy — accuracy (%)"}, {"key": "T16", "code": "T16", "label": "Geography", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 18, "multi_image_case_count": 0, "description": "Temporal · Geography — accuracy (%)"}, {"key": "T17", "code": "T17", "label": "History", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 5, "multi_image_case_count": 0, "description": "Temporal · History — accuracy (%)"}, {"key": "T18", "code": "T18", "label": "Medicine", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Temporal · Medicine — accuracy (%)"}, {"key": "T19", "code": "T19", "label": "Computer Science", "dimension": "temporal", "subcategory": "temporal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Temporal · Computer Science — accuracy (%)"}, {"key": "C01", "code": "C01", "label": "Physical State Transition", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 31, "multi_image_case_count": 0, "description": "Causal · Physical State Transition — accuracy (%)"}, {"key": "C02", "code": "C02", "label": "Structural Damage", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 27, "multi_image_case_count": 0, "description": "Causal · Structural Damage — accuracy (%)"}, {"key": "C03", "code": "C03", "label": "Flexible Deformation", "dimension": "causal", "subcategory": "causal_common_sense_knowledge", "case_count": 22, "multi_image_case_count": 1, "description": "Causal · Flexible Deformation — accuracy (%)"}, {"key": "C04", "code": "C04", "label": "Magnitude Change", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Magnitude Change — accuracy (%)"}, {"key": "C05", "code": "C05", "label": "Reading Offset", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 2, "description": "Causal · Reading Offset — accuracy (%)"}, {"key": "C06", "code": "C06", "label": "Order Relation", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Order Relation — accuracy (%)"}, {"key": "C07", "code": "C07", "label": "Feature Mapping", "dimension": "causal", "subcategory": "causal_context_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Feature Mapping — accuracy (%)"}, {"key": "C08", "code": "C08", "label": "Physics", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 25, "multi_image_case_count": 1, "description": "Causal · Physics — accuracy (%)"}, {"key": "C09", "code": "C09", "label": "Chemistry", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 23, "multi_image_case_count": 4, "description": "Causal · Chemistry — accuracy (%)"}, {"key": "C10", "code": "C10", "label": "Biology", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 12, "multi_image_case_count": 0, "description": "Causal · Biology — accuracy (%)"}, {"key": "C11", "code": "C11", "label": "Astronomy", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Astronomy — accuracy (%)"}, {"key": "C12", "code": "C12", "label": "Medicine", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 4, "multi_image_case_count": 0, "description": "Causal · Medicine — accuracy (%)"}, {"key": "C13", "code": "C13", "label": "Music Theory", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 3, "multi_image_case_count": 0, "description": "Causal · Music Theory — accuracy (%)"}, {"key": "C14", "code": "C14", "label": "Computer Science", "dimension": "causal", "subcategory": "causal_disciplinary_knowledge", "case_count": 10, "multi_image_case_count": 0, "description": "Causal · Computer Science — accuracy (%)"}, {"key": "S01", "code": "S01", "label": "Adjacency", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Adjacency — accuracy (%)"}, {"key": "S02", "code": "S02", "label": "Direction", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Direction — accuracy (%)"}, {"key": "S03", "code": "S03", "label": "Orientation", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 11, "multi_image_case_count": 0, "description": "Spatial · Orientation — accuracy (%)"}, {"key": "S04", "code": "S04", "label": "Projection", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 12, "multi_image_case_count": 0, "description": "Spatial · Projection — accuracy (%)"}, {"key": "S05", "code": "S05", "label": "Distance", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 13, "multi_image_case_count": 0, "description": "Spatial · Distance — accuracy (%)"}, {"key": "S06", "code": "S06", "label": "Size", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Size — accuracy (%)"}, {"key": "S07", "code": "S07", "label": "Configuration", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 18, "multi_image_case_count": 0, "description": "Spatial · Configuration — accuracy (%)"}, {"key": "S08", "code": "S08", "label": "Viewing Scale", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 9, "multi_image_case_count": 0, "description": "Spatial · Viewing Scale — accuracy (%)"}, {"key": "S09", "code": "S09", "label": "Localization", "dimension": "spatial", "subcategory": "spatial_relation", "case_count": 6, "multi_image_case_count": 6, "description": "Spatial · Localization — accuracy (%)"}, {"key": "S10", "code": "S10", "label": "Part-Whole Perception", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 24, "multi_image_case_count": 0, "description": "Spatial · Part-Whole Perception — accuracy (%)"}, {"key": "S11", "code": "S11", "label": "Geometric Regularities Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 15, "multi_image_case_count": 0, "description": "Spatial · Geometric Regularities Reasoning — accuracy (%)"}, {"key": "S12", "code": "S12", "label": "Viewpoint Generation", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 26, "multi_image_case_count": 0, "description": "Spatial · Viewpoint Generation — accuracy (%)"}, {"key": "S13", "code": "S13", "label": "Environmental Structure Reasoning", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 19, "multi_image_case_count": 2, "description": "Spatial · Environmental Structure Reasoning — accuracy (%)"}, {"key": "S14", "code": "S14", "label": "Egocentric Scene Reconstruction", "dimension": "spatial", "subcategory": "spatial_structure", "case_count": 10, "multi_image_case_count": 10, "description": "Spatial · Egocentric Scene Reconstruction — accuracy (%)"}, {"key": "L01", "code": "L01", "label": "Path Searching", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 24, "multi_image_case_count": 0, "description": "Logical · Path Searching — accuracy (%)"}, {"key": "L02", "code": "L02", "label": "Mathematical Derivation", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 27, "multi_image_case_count": 0, "description": "Logical · Mathematical Derivation — accuracy (%)"}, {"key": "L03", "code": "L03", "label": "Game Deduction", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 37, "multi_image_case_count": 0, "description": "Logical · Game Deduction — accuracy (%)"}, {"key": "L04", "code": "L04", "label": "Puzzle Solving", "dimension": "logical", "subcategory": "logical_explicit_rule_deduction", "case_count": 35, "multi_image_case_count": 0, "description": "Logical · Puzzle Solving — accuracy (%)"}, {"key": "L05", "code": "L05", "label": "Pattern Prediction", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 39, "multi_image_case_count": 0, "description": "Logical · Pattern Prediction — accuracy (%)"}, {"key": "L06", "code": "L06", "label": "Visual Oddity Detection", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 18, "multi_image_case_count": 0, "description": "Logical · Visual Oddity Detection — accuracy (%)"}, {"key": "L07", "code": "L07", "label": "Rule Transfer", "dimension": "logical", "subcategory": "logical_implicit_pattern_induction", "case_count": 20, "multi_image_case_count": 20, "description": "Logical · Rule Transfer — accuracy (%)"}, {"key": "F01", "code": "F01", "label": "Physical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 23, "multi_image_case_count": 0, "description": "Counterfactual · Physical Counterfactual — accuracy (%)"}, {"key": "F02", "code": "F02", "label": "Chemical Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Chemical Counterfactual — accuracy (%)"}, {"key": "F03", "code": "F03", "label": "Biological Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Biological Counterfactual — accuracy (%)"}, {"key": "F04", "code": "F04", "label": "Astronomy Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · Astronomy Counterfactual — accuracy (%)"}, {"key": "F05", "code": "F05", "label": "Geography Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 8, "multi_image_case_count": 0, "description": "Counterfactual · Geography Counterfactual — accuracy (%)"}, {"key": "F06", "code": "F06", "label": "History Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 7, "multi_image_case_count": 0, "description": "Counterfactual · History Counterfactual — accuracy (%)"}, {"key": "F07", "code": "F07", "label": "Music Theory Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Music Theory Counterfactual — accuracy (%)"}, {"key": "F08", "code": "F08", "label": "Computer Science Counterfactual", "dimension": "counterfactual", "subcategory": "counterfactual_counterfactual_imagination", "case_count": 4, "multi_image_case_count": 0, "description": "Counterfactual · Computer Science Counterfactual — accuracy (%)"}, {"key": "F09", "code": "F09", "label": "Anatomical Errors", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 10, "multi_image_case_count": 0, "description": "Counterfactual · Anatomical Errors — accuracy (%)"}, {"key": "F10", "code": "F10", "label": "Structural Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 11, "multi_image_case_count": 0, "description": "Counterfactual · Structural Anomalies — accuracy (%)"}, {"key": "F11", "code": "F11", "label": "Relational Anomalies", "dimension": "counterfactual", "subcategory": "counterfactual_anomaly_correction_and_generation", "case_count": 9, "multi_image_case_count": 0, "description": "Counterfactual · Relational Anomalies — accuracy (%)"}], "links": {"paper": "https://arxiv.org/abs/2610.12343", "data": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus", "outputs": "https://huggingface.co/datasets/VisionXLab/RISEBench-plusplus_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench%2B%2B"}, "judges": {"instruction_reasoning": "Gemini-3-Flash", "appearance_consistency": "Gemini-3-Flash", "visual_plausibility": "Gemini-3.1-Flash-Lite"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}, "zh": {"models": [{"id": "gpt-image-2-5-sunburst", "name": "GPT-Image-2.5 Sunburst"}, {"id": "nano-banana-pro", "name": "Nano Banana Pro"}, {"id": "nano-banana-2", "name": "Nano Banana 2"}, {"id": "luma-uni-1", "name": "Luma Uni-1"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "qwen-image-3-0", "name": "Qwen-Image-3.0"}, {"id": "gpt-image-2-5-flare", "name": "GPT-Image-2.5 Flare"}, {"id": "flux-2-max", "name": "FLUX.2 Max"}, {"id": "nano-banana-2-lite", "name": "Nano Banana 2 Lite"}, {"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "nano-banana", "name": "Nano Banana"}, {"id": "flux-2-pro", "name": "FLUX.2 Pro"}, {"id": "hunyuanimage-3-5", "name": "HunyuanImage-3.5"}, {"id": "wan2-7-image-pro", "name": "Wan2.7-Image-Pro"}, {"id": "qwen-image-2-0", "name": "Qwen-Image-2.0"}, {"id": "seedream-4-5", "name": "Seedream 4.5"}, {"id": "seedream-5-0", "name": "Seedream 5.0"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "step-image-edit-2", "name": "Step Image Edit 2"}, {"id": "hunyuanimage-3-0-instruct", "name": "HunyuanImage-3.0-Instruct"}, {"id": "qwen-image-2-1", "name": "Qwen-Image-2.1"}, {"id": "firered-image-edit-1-1", "name": "FireRed-Image-Edit-1.1"}, {"id": "flux-2-dev", "name": "FLUX.2 Dev"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "firered-image-edit-1-0", "name": "FireRed-Image-Edit-1.0"}, {"id": "sensenova-u1-a3b-mot-sft", "name": "SenseNova-U1-A3B-MoT-SFT"}, {"id": "joyai-image-edit-plus", "name": "JoyAI-Image-Edit-Plus"}, {"id": "flux-2-klein-9b", "name": "FLUX.2 Klein 9B"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "hidream-o1-image", "name": "HiDream-O1-Image"}, {"id": "flux-2-klein-4b", "name": "FLUX.2 Klein 4B"}, {"id": "uniworld-v2", "name": "UniWorld-V2"}, {"id": "sensenova-u1-8b-mot-sft", "name": "SenseNova-U1-8B-MoT-SFT"}, {"id": "unipic-3-0", "name": "UniPic 3.0"}, {"id": "bagel", "name": "BAGEL"}, {"id": "omnigen2", "name": "OmniGen2"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2-gen", "name": "Emu2-Gen"}, {"id": "joyai-image-edit", "name": "JoyAI-Image-Edit"}, {"id": "boogu-image-0-1-edit", "name": "Boogu-Image-0.1-Edit"}, {"id": "step1x-edit-thinking-reflection", "name": "Step1X-Edit (thinking + reflection)"}, {"id": "step1x-edit-thinking", "name": "Step1X-Edit (thinking)"}, {"id": "step1x-edit-base", "name": "Step1X-Edit (base)"}, {"id": "longcat-image-edit", "name": "LongCat-Image-Edit"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1 Kontext Dev"}, {"id": "llada-image", "name": "LLaDA-Image"}, {"id": "internvl-u-w-cot", "name": "InternVL-U (w/ CoT)"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "internvl-u", "name": "InternVL-U"}, {"id": "lumina-dimoo", "name": "Lumina-DiMOO"}, {"id": "uniworld-v1", "name": "UniWorld-V1"}, {"id": "unipic2-sd3-5m-kontext-2b", "name": "UniPic2-SD3.5M-Kontext-2B"}, {"id": "rise-agent-ours", "name": "RISE-Agent (Ours)"}, {"id": "mindbrush", "name": "MindBrush"}, {"id": "interleavethinker", "name": "InterleaveThinker"}, {"id": "intentedit", "name": "IntentEdit"}, {"id": "imagent", "name": "ImAgent"}]}}}, {"id": "risebench", "name": "RISEBench", "case_count": 360, "available_result_languages": ["en"], "accuracy_unit": "%", "metric_unit": "/100", "score_decimals": 1, "default_sort": "total", "dimensions": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}], "metrics": [{"key": "instruction_reasoning", "label": "Instruction Reasoning", "description": "Whether the edit realizes the intended reasoning outcome."}, {"key": "appearance_consistency", "label": "Appearance Consistency", "description": "Whether content that should remain unchanged is preserved."}, {"key": "visual_plausibility", "label": "Visual Plausibility", "description": "Visual quality and plausibility; logical tasks are excluded."}], "accuracy_columns": [{"key": "temporal", "label": "Temporal", "description": "Infer how a scene changes over time."}, {"key": "causal", "label": "Causal", "description": "Reason about causes, actions, and their consequences."}, {"key": "spatial", "label": "Spatial", "description": "Reason about spatial relationships and transformations."}, {"key": "logical", "label": "Logical", "description": "Apply explicit rules, patterns, and logical constraints."}, {"key": "total", "label": "Overall", "description": "Accuracy on the complete RISEBench-360 benchmark."}], "links": {"paper": "https://arxiv.org/abs/2504.02826", "data": "https://huggingface.co/datasets/PhoenixZ/RISEBench", "outputs": "https://huggingface.co/datasets/zpy777/RISEBench_Outputs", "github": "https://github.com/VisionXLab/RISEBench/tree/main/RISEBench"}, "judges": {"instruction_reasoning": "GPT-4o", "appearance_consistency": "GPT-4o", "visual_plausibility": "GPT-4o"}, "results_by_language": {"en": {"models": [{"id": "gpt-image-1-5", "name": "GPT-Image-1.5"}, {"id": "gpt-image-2", "name": "GPT-Image-2"}, {"id": "gemini-3-pro-image-preview-nano-banana-pro", "name": "Gemini-3-pro-image-preview (Nano Banana-pro)"}, {"id": "gemini-2-5-flash-image-nano-banana", "name": "Gemini-2.5-Flash-Image (Nano Banana)"}, {"id": "gpt-image-1", "name": "GPT-Image-1"}, {"id": "gpt-image-1-mini", "name": "GPT-Image-1-mini"}, {"id": "qwen-image-edit-2511", "name": "Qwen-Image-Edit-2511"}, {"id": "bagel-w-cot", "name": "BAGEL (w/ CoT)"}, {"id": "gemini-2-0-flash-exp", "name": "Gemini-2.0-Flash-exp"}, {"id": "seedream-4-0", "name": "Seedream-4.0"}, {"id": "gemini-2-0-flash-pre", "name": "Gemini-2.0-Flash-pre"}, {"id": "qwen-image-edit-2509", "name": "Qwen-Image-Edit-2509"}, {"id": "bagel", "name": "BAGEL"}, {"id": "flux-1-kontext-dev", "name": "FLUX.1-Kontext-Dev"}, {"id": "ovis-u1", "name": "Ovis-U1"}, {"id": "step1x-edit", "name": "Step1X-Edit"}, {"id": "omnigen", "name": "OmniGen"}, {"id": "emu2", "name": "EMU2"}, {"id": "hidream-edit", "name": "HiDream-Edit"}, {"id": "flux-1-canny", "name": "FLUX.1-Canny"}]}}}]}</script><script src="portal.js" defer></script></body></html>
dist/portal.css CHANGED
@@ -54,6 +54,10 @@
54
  .login-card { max-width: 510px; }
55
  .login-card h2 { margin-bottom: 22px; }
56
  .login-card .form-message { margin: 16px 0; }
 
 
 
 
57
  .review-toolbar { display: flex; gap: 18px; justify-content: space-between; align-items: center; margin-bottom: 24px; }
58
  .review-filters { display: flex; gap: 6px; flex-wrap: wrap; }
59
  .review-filters button { padding: 8px 12px; border: 1px solid transparent; border-radius: 7px; color: #8190a4; font-size: 14px; }
 
54
  .login-card { max-width: 510px; }
55
  .login-card h2 { margin-bottom: 22px; }
56
  .login-card .form-message { margin: 16px 0; }
57
+ .login-caption { color: #667991; font-size: 16px; line-height: 1.7; }
58
+ .hf-login { display: inline-flex; color: #fff; text-decoration: none; align-items: center; }
59
+ .hf-login[hidden] { display: none; }
60
+ .review-identity { color: #64758b; font-size: 14px; margin: 0 0 20px; }
61
  .review-toolbar { display: flex; gap: 18px; justify-content: space-between; align-items: center; margin-bottom: 24px; }
62
  .review-filters { display: flex; gap: 6px; flex-wrap: wrap; }
63
  .review-filters button { padding: 8px 12px; border: 1px solid transparent; border-radius: 7px; color: #8190a4; font-size: 14px; }
dist/portal.js CHANGED
@@ -99,16 +99,17 @@
99
  const current=()=>records.find(r=>r.id===selected);
100
  function signOutView() {
101
  token='';sessionStorage.removeItem('rise-review-session');records=[];selected=null;
102
- $('#login-panel').hidden=false;$('#review-workspace').hidden=true;$('#sign-out').hidden=true;
103
  $('#review-list').innerHTML='';$('#review-detail').innerHTML='';
104
  }
105
  async function loadQueue() {
106
  try{
107
- [records,live]=await Promise.all([api('/api/admin/submissions',undefined,true),api('/api/leaderboard')]);
108
  $('#login-panel').hidden=true;$('#review-workspace').hidden=false;$('#sign-out').hidden=false;
 
109
  $('#pending-count').textContent=records.filter(r=>r.status==='pending').length;
110
  message('#queue-message','');renderQueue();
111
- }catch(error){if(error.status===401)signOutView();message(token?'#queue-message':'#login-message',error.message,true);}
112
  }
113
  function renderQueue() {
114
  const items=records.filter(r=>filter==='all'||r.status===filter);
@@ -129,7 +130,7 @@
129
  function renderDetail() {
130
  const r=current();if(!r){$('#review-detail').innerHTML='<div class="review-empty"><h2>Ready for review</h2><p>Select a submission to inspect its results.</p></div>';return;}
131
  const p=r.payload,active=['pending','approved'].includes(r.status);
132
- $('#review-detail').innerHTML=`<div class="card-heading"><h2>${esc(p.model_name)}</h2><span class="status-badge ${r.status}">${labels[r.status]}</span></div><dl class="review-meta"><div><dt>Benchmark</dt><dd>${esc(bById(p.benchmark).name)} · ${language(p.language)}</dd></div><div><dt>Input support</dt><dd>${p.multi_image?'Multiple input images':'Single input image'}</dd></div><div><dt>Team</dt><dd>${esc(p.team||'Not specified')}</dd></div><div><dt>Contact · private</dt><dd>${esc(p.email)}</dd></div><div><dt>Project</dt><dd><a href="${esc(p.project_url)}" target="_blank" rel="noopener noreferrer">Open project ↗</a></dd></div><div><dt>Evaluation artifacts</dt><dd><a href="${esc(p.evidence_url)}" target="_blank" rel="noopener noreferrer">Inspect results ↗</a></dd></div><div><dt>Submitted</dt><dd>${esc(new Date(r.submitted_at).toLocaleString())}</dd></div><div><dt>Model category</dt><dd>${esc({open:'Open-source',closed:'Closed-source',agentic:'Agentic method'}[p.group])}</dd></div></dl>${p.revision_of?'<p class="notice">This update replaces an existing result. Verify the submitter’s authority before approval.</p>':''}${p.notes?`<div class="review-notes">${esc(p.notes)}</div>`:''}${scoreTable(r)}<button class="outline-button" id="download-review-json">Download submission ↓</button>${active?`<form id="review-form"><label style="margin-top:24px">Review note<textarea id="review-note" rows="3" maxlength="3000" placeholder="Required when returning or withdrawing results; visible to the submitter"></textarea></label><label class="confirmation"><input id="review-confirmed" type="checkbox" required><span>${r.status==='pending'?'I have checked the evaluation artifacts, full-dataset protocol, and submitter’s authority.':'I confirm this approved result should be withdrawn from the leaderboard.'}</span></label><p class="form-message" id="review-message" role="status"></p><div class="review-actions">${r.status==='pending'?'<button type="submit" class="primary-button" value="approve">Approve & publish</button><button type="submit" class="outline-button reject-button" value="reject">Return to submitter</button>':'<button type="submit" class="outline-button reject-button" value="withdraw">Withdraw result</button>'}</div></form>`:''}${r.history.length?`<h3 style="font-size:14px;margin-top:28px">Review history</h3><ul class="history-list">${r.history.map(h=>`<li>${esc(h.decision)} · ${esc(new Date(h.at).toLocaleString())}${h.note?' — '+esc(h.note):''}</li>`).join('')}</ul>`:''}`;
133
  $('#download-review-json').addEventListener('click',()=>download('rise-submission-'+r.id+'.json',r));
134
  $('#review-form')?.addEventListener('submit',async e=>{
135
  e.preventDefault();const decision=e.submitter.value,note=$('#review-note').value.trim();
@@ -140,9 +141,17 @@
140
  });
141
  }
142
  document.addEventListener('click',e=>{const button=e.target.closest('button');if(!button)return;if(button.dataset.record){selected=button.dataset.record;renderQueue();}if(button.dataset.status){filter=button.dataset.status;$$('[data-status]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.status===filter));renderQueue();}});
143
- $('#login-form').addEventListener('submit',async e=>{e.preventDefault();$('#login-button').disabled=true;try{const r=await api('/api/admin/session',{password:$('#admin-passphrase').value});token=r.token;sessionStorage.setItem('rise-review-session',token);$('#admin-passphrase').value='';await loadQueue();}catch(error){message('#login-message',error.message,true);}finally{$('#login-button').disabled=false;}});
144
  $('#sign-out').addEventListener('click',async()=>{try{await api('/api/admin/logout',{},true);}finally{signOutView();}});
145
  $('#refresh-queue').addEventListener('click',loadQueue);
146
- connect().then(()=>{if(!config){$('#login-button').disabled=true;return;}if(config.local_preview){$('#passphrase-label').hidden=true;$('#admin-passphrase').required=false;$('#login-button').textContent='Open local review';}if(token)loadQueue();});
 
 
 
 
 
 
 
 
147
  }
148
  })();
 
99
  const current=()=>records.find(r=>r.id===selected);
100
  function signOutView() {
101
  token='';sessionStorage.removeItem('rise-review-session');records=[];selected=null;
102
+ $('#login-panel').hidden=false;$('#review-workspace').hidden=true;$('#sign-out').hidden=true;$('#review-identity').hidden=true;
103
  $('#review-list').innerHTML='';$('#review-detail').innerHTML='';
104
  }
105
  async function loadQueue() {
106
  try{
107
+ let reviewer;[records,live,reviewer]=await Promise.all([api('/api/admin/submissions',undefined,true),api('/api/leaderboard'),api('/api/admin/me',undefined,true)]);
108
  $('#login-panel').hidden=true;$('#review-workspace').hidden=false;$('#sign-out').hidden=false;
109
+ $('#review-identity').hidden=false;$('#review-identity').textContent=`Signed in as ${reviewer.username}${reviewer.organization?' · '+reviewer.organization:''}`;
110
  $('#pending-count').textContent=records.filter(r=>r.status==='pending').length;
111
  message('#queue-message','');renderQueue();
112
+ }catch(error){if(error.status===401||error.status===403)signOutView();message($('#review-workspace').hidden?'#login-message':'#queue-message',error.message,true);}
113
  }
114
  function renderQueue() {
115
  const items=records.filter(r=>filter==='all'||r.status===filter);
 
130
  function renderDetail() {
131
  const r=current();if(!r){$('#review-detail').innerHTML='<div class="review-empty"><h2>Ready for review</h2><p>Select a submission to inspect its results.</p></div>';return;}
132
  const p=r.payload,active=['pending','approved'].includes(r.status);
133
+ $('#review-detail').innerHTML=`<div class="card-heading"><h2>${esc(p.model_name)}</h2><span class="status-badge ${r.status}">${labels[r.status]}</span></div><dl class="review-meta"><div><dt>Benchmark</dt><dd>${esc(bById(p.benchmark).name)} · ${language(p.language)}</dd></div><div><dt>Input support</dt><dd>${p.multi_image?'Multiple input images':'Single input image'}</dd></div><div><dt>Team</dt><dd>${esc(p.team||'Not specified')}</dd></div><div><dt>Contact · private</dt><dd>${esc(p.email)}</dd></div><div><dt>Project</dt><dd><a href="${esc(p.project_url)}" target="_blank" rel="noopener noreferrer">Open project ↗</a></dd></div><div><dt>Evaluation artifacts</dt><dd><a href="${esc(p.evidence_url)}" target="_blank" rel="noopener noreferrer">Inspect results ↗</a></dd></div><div><dt>Submitted</dt><dd>${esc(new Date(r.submitted_at).toLocaleString())}</dd></div><div><dt>Model category</dt><dd>${esc({open:'Open-source',closed:'Closed-source',agentic:'Agentic method'}[p.group])}</dd></div></dl>${p.revision_of?'<p class="notice">This update replaces an existing result. Verify the submitter’s authority before approval.</p>':''}${p.notes?`<div class="review-notes">${esc(p.notes)}</div>`:''}${scoreTable(r)}<button class="outline-button" id="download-review-json">Download submission ↓</button>${active?`<form id="review-form"><label style="margin-top:24px">Review note<textarea id="review-note" rows="3" maxlength="3000" placeholder="Required when returning or withdrawing results; visible to the submitter"></textarea></label><label class="confirmation"><input id="review-confirmed" type="checkbox" required><span>${r.status==='pending'?'I have checked the evaluation artifacts, full-dataset protocol, and submitter’s authority.':'I confirm this approved result should be withdrawn from the leaderboard.'}</span></label><p class="form-message" id="review-message" role="status"></p><div class="review-actions">${r.status==='pending'?'<button type="submit" class="primary-button" value="approve">Approve & publish</button><button type="submit" class="outline-button reject-button" value="reject">Return to submitter</button>':'<button type="submit" class="outline-button reject-button" value="withdraw">Withdraw result</button>'}</div></form>`:''}${r.history.length?`<h3 style="font-size:14px;margin-top:28px">Review history</h3><ul class="history-list">${r.history.map(h=>`<li>${esc(h.decision)} · ${esc(new Date(h.at).toLocaleString())}${h.reviewer?' · '+esc(h.reviewer):''}${h.note?' — '+esc(h.note):''}</li>`).join('')}</ul>`:''}`;
134
  $('#download-review-json').addEventListener('click',()=>download('rise-submission-'+r.id+'.json',r));
135
  $('#review-form')?.addEventListener('submit',async e=>{
136
  e.preventDefault();const decision=e.submitter.value,note=$('#review-note').value.trim();
 
141
  });
142
  }
143
  document.addEventListener('click',e=>{const button=e.target.closest('button');if(!button)return;if(button.dataset.record){selected=button.dataset.record;renderQueue();}if(button.dataset.status){filter=button.dataset.status;$$('[data-status]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.status===filter));renderQueue();}});
144
+ $('#login-form').addEventListener('submit',async e=>{e.preventDefault();$('#login-button').disabled=true;try{const r=await api('/api/admin/session',{});token=r.token;sessionStorage.setItem('rise-review-session',token);await loadQueue();}catch(error){message('#login-message',error.message,true);}finally{$('#login-button').disabled=false;}});
145
  $('#sign-out').addEventListener('click',async()=>{try{await api('/api/admin/logout',{},true);}finally{signOutView();}});
146
  $('#refresh-queue').addEventListener('click',loadQueue);
147
+ connect().then(async()=>{
148
+ if(!config){$('#login-caption').textContent='Administrator sign-in is not available yet.';return;}
149
+ $('#login-form').hidden=!config.local_preview;$('#hf-login').hidden=config.local_preview;
150
+ if(config.local_preview){$('#login-caption').textContent='Open the review workspace for this local preview.';if(token)loadQueue();return;}
151
+ token='';sessionStorage.removeItem('rise-review-session');$('#hf-login').href=config.admin_login_url;
152
+ const error=new URLSearchParams(location.search).get('login_error');
153
+ if(error){message('#login-message',({membership:'Only current VisionXLab members can review submissions.',state:'This sign-in attempt expired. Please try again.',cancelled:'Sign-in was cancelled.',signin:'Could not complete Hugging Face sign-in. Please try again.'})[error]||'Please sign in again.',true);history.replaceState(null,'',location.pathname);return;}
154
+ try{await api('/api/admin/me');await loadQueue();}catch(error){if(error.status!==401)message('#login-message',error.message,true);}
155
+ });
156
  }
157
  })();
portal.css CHANGED
@@ -54,6 +54,10 @@
54
  .login-card { max-width: 510px; }
55
  .login-card h2 { margin-bottom: 22px; }
56
  .login-card .form-message { margin: 16px 0; }
 
 
 
 
57
  .review-toolbar { display: flex; gap: 18px; justify-content: space-between; align-items: center; margin-bottom: 24px; }
58
  .review-filters { display: flex; gap: 6px; flex-wrap: wrap; }
59
  .review-filters button { padding: 8px 12px; border: 1px solid transparent; border-radius: 7px; color: #8190a4; font-size: 14px; }
 
54
  .login-card { max-width: 510px; }
55
  .login-card h2 { margin-bottom: 22px; }
56
  .login-card .form-message { margin: 16px 0; }
57
+ .login-caption { color: #667991; font-size: 16px; line-height: 1.7; }
58
+ .hf-login { display: inline-flex; color: #fff; text-decoration: none; align-items: center; }
59
+ .hf-login[hidden] { display: none; }
60
+ .review-identity { color: #64758b; font-size: 14px; margin: 0 0 20px; }
61
  .review-toolbar { display: flex; gap: 18px; justify-content: space-between; align-items: center; margin-bottom: 24px; }
62
  .review-filters { display: flex; gap: 6px; flex-wrap: wrap; }
63
  .review-filters button { padding: 8px 12px; border: 1px solid transparent; border-radius: 7px; color: #8190a4; font-size: 14px; }
portal.js CHANGED
@@ -99,16 +99,17 @@
99
  const current=()=>records.find(r=>r.id===selected);
100
  function signOutView() {
101
  token='';sessionStorage.removeItem('rise-review-session');records=[];selected=null;
102
- $('#login-panel').hidden=false;$('#review-workspace').hidden=true;$('#sign-out').hidden=true;
103
  $('#review-list').innerHTML='';$('#review-detail').innerHTML='';
104
  }
105
  async function loadQueue() {
106
  try{
107
- [records,live]=await Promise.all([api('/api/admin/submissions',undefined,true),api('/api/leaderboard')]);
108
  $('#login-panel').hidden=true;$('#review-workspace').hidden=false;$('#sign-out').hidden=false;
 
109
  $('#pending-count').textContent=records.filter(r=>r.status==='pending').length;
110
  message('#queue-message','');renderQueue();
111
- }catch(error){if(error.status===401)signOutView();message(token?'#queue-message':'#login-message',error.message,true);}
112
  }
113
  function renderQueue() {
114
  const items=records.filter(r=>filter==='all'||r.status===filter);
@@ -129,7 +130,7 @@
129
  function renderDetail() {
130
  const r=current();if(!r){$('#review-detail').innerHTML='<div class="review-empty"><h2>Ready for review</h2><p>Select a submission to inspect its results.</p></div>';return;}
131
  const p=r.payload,active=['pending','approved'].includes(r.status);
132
- $('#review-detail').innerHTML=`<div class="card-heading"><h2>${esc(p.model_name)}</h2><span class="status-badge ${r.status}">${labels[r.status]}</span></div><dl class="review-meta"><div><dt>Benchmark</dt><dd>${esc(bById(p.benchmark).name)} · ${language(p.language)}</dd></div><div><dt>Input support</dt><dd>${p.multi_image?'Multiple input images':'Single input image'}</dd></div><div><dt>Team</dt><dd>${esc(p.team||'Not specified')}</dd></div><div><dt>Contact · private</dt><dd>${esc(p.email)}</dd></div><div><dt>Project</dt><dd><a href="${esc(p.project_url)}" target="_blank" rel="noopener noreferrer">Open project ↗</a></dd></div><div><dt>Evaluation artifacts</dt><dd><a href="${esc(p.evidence_url)}" target="_blank" rel="noopener noreferrer">Inspect results ↗</a></dd></div><div><dt>Submitted</dt><dd>${esc(new Date(r.submitted_at).toLocaleString())}</dd></div><div><dt>Model category</dt><dd>${esc({open:'Open-source',closed:'Closed-source',agentic:'Agentic method'}[p.group])}</dd></div></dl>${p.revision_of?'<p class="notice">This update replaces an existing result. Verify the submitter’s authority before approval.</p>':''}${p.notes?`<div class="review-notes">${esc(p.notes)}</div>`:''}${scoreTable(r)}<button class="outline-button" id="download-review-json">Download submission ↓</button>${active?`<form id="review-form"><label style="margin-top:24px">Review note<textarea id="review-note" rows="3" maxlength="3000" placeholder="Required when returning or withdrawing results; visible to the submitter"></textarea></label><label class="confirmation"><input id="review-confirmed" type="checkbox" required><span>${r.status==='pending'?'I have checked the evaluation artifacts, full-dataset protocol, and submitter’s authority.':'I confirm this approved result should be withdrawn from the leaderboard.'}</span></label><p class="form-message" id="review-message" role="status"></p><div class="review-actions">${r.status==='pending'?'<button type="submit" class="primary-button" value="approve">Approve & publish</button><button type="submit" class="outline-button reject-button" value="reject">Return to submitter</button>':'<button type="submit" class="outline-button reject-button" value="withdraw">Withdraw result</button>'}</div></form>`:''}${r.history.length?`<h3 style="font-size:14px;margin-top:28px">Review history</h3><ul class="history-list">${r.history.map(h=>`<li>${esc(h.decision)} · ${esc(new Date(h.at).toLocaleString())}${h.note?' — '+esc(h.note):''}</li>`).join('')}</ul>`:''}`;
133
  $('#download-review-json').addEventListener('click',()=>download('rise-submission-'+r.id+'.json',r));
134
  $('#review-form')?.addEventListener('submit',async e=>{
135
  e.preventDefault();const decision=e.submitter.value,note=$('#review-note').value.trim();
@@ -140,9 +141,17 @@
140
  });
141
  }
142
  document.addEventListener('click',e=>{const button=e.target.closest('button');if(!button)return;if(button.dataset.record){selected=button.dataset.record;renderQueue();}if(button.dataset.status){filter=button.dataset.status;$$('[data-status]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.status===filter));renderQueue();}});
143
- $('#login-form').addEventListener('submit',async e=>{e.preventDefault();$('#login-button').disabled=true;try{const r=await api('/api/admin/session',{password:$('#admin-passphrase').value});token=r.token;sessionStorage.setItem('rise-review-session',token);$('#admin-passphrase').value='';await loadQueue();}catch(error){message('#login-message',error.message,true);}finally{$('#login-button').disabled=false;}});
144
  $('#sign-out').addEventListener('click',async()=>{try{await api('/api/admin/logout',{},true);}finally{signOutView();}});
145
  $('#refresh-queue').addEventListener('click',loadQueue);
146
- connect().then(()=>{if(!config){$('#login-button').disabled=true;return;}if(config.local_preview){$('#passphrase-label').hidden=true;$('#admin-passphrase').required=false;$('#login-button').textContent='Open local review';}if(token)loadQueue();});
 
 
 
 
 
 
 
 
147
  }
148
  })();
 
99
  const current=()=>records.find(r=>r.id===selected);
100
  function signOutView() {
101
  token='';sessionStorage.removeItem('rise-review-session');records=[];selected=null;
102
+ $('#login-panel').hidden=false;$('#review-workspace').hidden=true;$('#sign-out').hidden=true;$('#review-identity').hidden=true;
103
  $('#review-list').innerHTML='';$('#review-detail').innerHTML='';
104
  }
105
  async function loadQueue() {
106
  try{
107
+ let reviewer;[records,live,reviewer]=await Promise.all([api('/api/admin/submissions',undefined,true),api('/api/leaderboard'),api('/api/admin/me',undefined,true)]);
108
  $('#login-panel').hidden=true;$('#review-workspace').hidden=false;$('#sign-out').hidden=false;
109
+ $('#review-identity').hidden=false;$('#review-identity').textContent=`Signed in as ${reviewer.username}${reviewer.organization?' · '+reviewer.organization:''}`;
110
  $('#pending-count').textContent=records.filter(r=>r.status==='pending').length;
111
  message('#queue-message','');renderQueue();
112
+ }catch(error){if(error.status===401||error.status===403)signOutView();message($('#review-workspace').hidden?'#login-message':'#queue-message',error.message,true);}
113
  }
114
  function renderQueue() {
115
  const items=records.filter(r=>filter==='all'||r.status===filter);
 
130
  function renderDetail() {
131
  const r=current();if(!r){$('#review-detail').innerHTML='<div class="review-empty"><h2>Ready for review</h2><p>Select a submission to inspect its results.</p></div>';return;}
132
  const p=r.payload,active=['pending','approved'].includes(r.status);
133
+ $('#review-detail').innerHTML=`<div class="card-heading"><h2>${esc(p.model_name)}</h2><span class="status-badge ${r.status}">${labels[r.status]}</span></div><dl class="review-meta"><div><dt>Benchmark</dt><dd>${esc(bById(p.benchmark).name)} · ${language(p.language)}</dd></div><div><dt>Input support</dt><dd>${p.multi_image?'Multiple input images':'Single input image'}</dd></div><div><dt>Team</dt><dd>${esc(p.team||'Not specified')}</dd></div><div><dt>Contact · private</dt><dd>${esc(p.email)}</dd></div><div><dt>Project</dt><dd><a href="${esc(p.project_url)}" target="_blank" rel="noopener noreferrer">Open project ↗</a></dd></div><div><dt>Evaluation artifacts</dt><dd><a href="${esc(p.evidence_url)}" target="_blank" rel="noopener noreferrer">Inspect results ↗</a></dd></div><div><dt>Submitted</dt><dd>${esc(new Date(r.submitted_at).toLocaleString())}</dd></div><div><dt>Model category</dt><dd>${esc({open:'Open-source',closed:'Closed-source',agentic:'Agentic method'}[p.group])}</dd></div></dl>${p.revision_of?'<p class="notice">This update replaces an existing result. Verify the submitter’s authority before approval.</p>':''}${p.notes?`<div class="review-notes">${esc(p.notes)}</div>`:''}${scoreTable(r)}<button class="outline-button" id="download-review-json">Download submission ↓</button>${active?`<form id="review-form"><label style="margin-top:24px">Review note<textarea id="review-note" rows="3" maxlength="3000" placeholder="Required when returning or withdrawing results; visible to the submitter"></textarea></label><label class="confirmation"><input id="review-confirmed" type="checkbox" required><span>${r.status==='pending'?'I have checked the evaluation artifacts, full-dataset protocol, and submitter’s authority.':'I confirm this approved result should be withdrawn from the leaderboard.'}</span></label><p class="form-message" id="review-message" role="status"></p><div class="review-actions">${r.status==='pending'?'<button type="submit" class="primary-button" value="approve">Approve & publish</button><button type="submit" class="outline-button reject-button" value="reject">Return to submitter</button>':'<button type="submit" class="outline-button reject-button" value="withdraw">Withdraw result</button>'}</div></form>`:''}${r.history.length?`<h3 style="font-size:14px;margin-top:28px">Review history</h3><ul class="history-list">${r.history.map(h=>`<li>${esc(h.decision)} · ${esc(new Date(h.at).toLocaleString())}${h.reviewer?' · '+esc(h.reviewer):''}${h.note?' — '+esc(h.note):''}</li>`).join('')}</ul>`:''}`;
134
  $('#download-review-json').addEventListener('click',()=>download('rise-submission-'+r.id+'.json',r));
135
  $('#review-form')?.addEventListener('submit',async e=>{
136
  e.preventDefault();const decision=e.submitter.value,note=$('#review-note').value.trim();
 
141
  });
142
  }
143
  document.addEventListener('click',e=>{const button=e.target.closest('button');if(!button)return;if(button.dataset.record){selected=button.dataset.record;renderQueue();}if(button.dataset.status){filter=button.dataset.status;$$('[data-status]').forEach(b=>b.setAttribute('aria-pressed',b.dataset.status===filter));renderQueue();}});
144
+ $('#login-form').addEventListener('submit',async e=>{e.preventDefault();$('#login-button').disabled=true;try{const r=await api('/api/admin/session',{});token=r.token;sessionStorage.setItem('rise-review-session',token);await loadQueue();}catch(error){message('#login-message',error.message,true);}finally{$('#login-button').disabled=false;}});
145
  $('#sign-out').addEventListener('click',async()=>{try{await api('/api/admin/logout',{},true);}finally{signOutView();}});
146
  $('#refresh-queue').addEventListener('click',loadQueue);
147
+ connect().then(async()=>{
148
+ if(!config){$('#login-caption').textContent='Administrator sign-in is not available yet.';return;}
149
+ $('#login-form').hidden=!config.local_preview;$('#hf-login').hidden=config.local_preview;
150
+ if(config.local_preview){$('#login-caption').textContent='Open the review workspace for this local preview.';if(token)loadQueue();return;}
151
+ token='';sessionStorage.removeItem('rise-review-session');$('#hf-login').href=config.admin_login_url;
152
+ const error=new URLSearchParams(location.search).get('login_error');
153
+ if(error){message('#login-message',({membership:'Only current VisionXLab members can review submissions.',state:'This sign-in attempt expired. Please try again.',cancelled:'Sign-in was cancelled.',signin:'Could not complete Hugging Face sign-in. Please try again.'})[error]||'Please sign in again.',true);history.replaceState(null,'',location.pathname);return;}
154
+ try{await api('/api/admin/me');await loadQueue();}catch(error){if(error.status!==401)message('#login-message',error.message,true);}
155
+ });
156
  }
157
  })();
pyproject.toml CHANGED
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
  name = "rise-leaderboard"
7
  version = "0.1.0"
8
  requires-python = ">=3.9"
9
- dependencies = ["fastapi==0.128.8", "uvicorn==0.39.0", "huggingface_hub==1.8.0"]
10
 
11
  [project.optional-dependencies]
12
  test = ["httpx==0.28.1"]
 
6
  name = "rise-leaderboard"
7
  version = "0.1.0"
8
  requires-python = ">=3.9"
9
+ dependencies = ["fastapi==0.128.8", "uvicorn==0.39.0", "huggingface_hub==1.8.0", "httpx==0.28.1"]
10
 
11
  [project.optional-dependencies]
12
  test = ["httpx==0.28.1"]
server/app.py CHANGED
@@ -17,12 +17,12 @@ from fastapi import FastAPI, HTTPException, Request
17
  from fastapi.responses import JSONResponse
18
  from fastapi.staticfiles import StaticFiles
19
 
 
20
  from .storage import HubStore, LocalStore
21
  from .validation import Invalid, public_leaderboard, template, text, validate_submission
22
 
23
  ROOT = Path(__file__).resolve().parents[1]
24
  MAX_BODY = 262144
25
- SESSION_SECONDS = 8 * 3600
26
 
27
 
28
  def now():
@@ -49,14 +49,16 @@ def strict_json(raw):
49
  class Settings:
50
  def __init__(self, local=False, state_dir=None):
51
  self.local = local
52
- self.password = os.environ.get("RISE_ADMIN_PASSWORD", "")
 
 
53
  self.origin = os.environ.get("RISE_PUBLIC_ORIGIN", "").rstrip("/")
54
  self.repo = os.environ.get("RISE_SUBMISSIONS_REPO", "")
55
  self.token = os.environ.get("RISE_STORAGE_TOKEN", "")
56
  self.state_dir = Path(state_dir or ROOT / ".local")
57
  if not local:
58
- if len(self.password) < 20:
59
- raise RuntimeError("Set RISE_ADMIN_PASSWORD to a private passphrase of at least 20 characters.")
60
  if not self.origin.startswith("https://") or urlsplit(self.origin).path:
61
  raise RuntimeError("Set RISE_PUBLIC_ORIGIN to the https origin of the Space app.")
62
  if not self.repo or not self.token:
@@ -68,7 +70,7 @@ def create_app(settings=None, store=None, base=None):
68
  store = store or (LocalStore(settings.state_dir) if settings.local else HubStore(settings.repo, settings.token))
69
  base = base or json.loads((ROOT / "dist/data/leaderboard.json").read_text())
70
  app = FastAPI(docs_url=None, redoc_url=None, openapi_url=None)
71
- sessions, attempts = {}, defaultdict(deque)
72
  security_lock = threading.Lock()
73
 
74
  def rate_limit(request, scope, limit, window=3600):
@@ -86,15 +88,6 @@ def create_app(settings=None, store=None, base=None):
86
  raise HTTPException(429, "Too many requests. Please try again later.")
87
  queue.append(stamp)
88
 
89
- def require_admin(request):
90
- token = request.headers.get("authorization", "").removeprefix("Bearer ")
91
- with security_lock:
92
- for key in [key for key, expiry in sessions.items() if expiry <= time.monotonic()]:
93
- sessions.pop(key, None)
94
- if not token or sessions.get(digest(token), 0) <= time.monotonic():
95
- raise HTTPException(401, "Sign in to review submissions.")
96
- return token
97
-
98
  def payload(request):
99
  value = getattr(request.state, "json", None)
100
  if not isinstance(value, dict):
@@ -116,7 +109,7 @@ def create_app(settings=None, store=None, base=None):
116
  if request.method == "POST":
117
  origin = request.headers.get("origin")
118
  expected = str(request.base_url).rstrip("/") if settings.local else settings.origin
119
- if origin and origin != expected:
120
  return JSONResponse({"detail": "Cross-origin submissions are not accepted."}, status_code=403)
121
  if request.headers.get("content-type", "").split(";")[0] != "application/json":
122
  return JSONResponse({"detail": "Use application/json."}, status_code=415)
@@ -139,13 +132,15 @@ def create_app(settings=None, store=None, base=None):
139
  response.headers["Referrer-Policy"] = "no-referrer"
140
  response.headers["Permissions-Policy"] = "camera=(), microphone=(), geolocation=()"
141
  response.headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self' https://huggingface.co"
142
- if request.url.path.startswith('/api/'):
143
  response.headers["Cache-Control"] = "no-store"
144
  return response
145
 
146
  @app.get("/api/config")
147
  def config():
148
- return {"available": True, "local_preview": settings.local, "max_file_bytes": 200000}
 
 
149
 
150
  @app.get("/api/leaderboard")
151
  def leaderboard():
@@ -198,33 +193,17 @@ def create_app(settings=None, store=None, base=None):
198
  return {"submission_id": ident, "status": record["status"], "model_name": record["payload"]["model_name"],
199
  "submitted_at": record["submitted_at"], "review_note": record["review_note"]}
200
 
201
- @app.post("/api/admin/session")
202
- def login(request: Request):
203
- rate_limit(request, "login", 10, 900)
204
- candidate = payload(request).get("password", "")
205
- if not isinstance(candidate, str) or (not settings.local and not secrets.compare_digest(candidate.encode(), settings.password.encode())):
206
- raise HTTPException(401, "Incorrect administrator passphrase.")
207
- token = secrets.token_urlsafe(40)
208
- with security_lock:
209
- sessions[digest(token)] = time.monotonic() + SESSION_SECONDS
210
- return {"token": token, "expires_in": SESSION_SECONDS}
211
-
212
- @app.post("/api/admin/logout")
213
- def logout(request: Request):
214
- token = require_admin(request)
215
- with security_lock:
216
- sessions.pop(digest(token), None)
217
- return {"ok": True}
218
 
219
  @app.get("/api/admin/submissions")
220
  def submissions(request: Request):
221
- require_admin(request)
222
  return [{key: copy.deepcopy(value) for key, value in record.items() if key not in {"receipt_hash", "fingerprint"}}
223
  for record in sorted(store.read()["submissions"].values(), key=lambda r: r["submitted_at"], reverse=True)]
224
 
225
  @app.post("/api/admin/submissions/{ident}/review")
226
  def review(ident: str, request: Request):
227
- require_admin(request)
228
  body = payload(request)
229
  decision = body.get("decision")
230
  if decision not in {"approve", "reject", "withdraw"}:
@@ -258,7 +237,8 @@ def create_app(settings=None, store=None, base=None):
258
  record["status"] = {"approve": "approved", "reject": "rejected", "withdraw": "withdrawn"}[decision]
259
  record["revision"] += 1
260
  record["reviewed_at"], record["review_note"] = now(), note
261
- record["history"].append({"decision": decision, "at": record["reviewed_at"], "note": note})
 
262
  return {"id": ident, "status": record["status"], "revision": record["revision"]}
263
  return store.mutate(update)
264
 
 
17
  from fastapi.responses import JSONResponse
18
  from fastapi.staticfiles import StaticFiles
19
 
20
+ from .auth import AdminAuth
21
  from .storage import HubStore, LocalStore
22
  from .validation import Invalid, public_leaderboard, template, text, validate_submission
23
 
24
  ROOT = Path(__file__).resolve().parents[1]
25
  MAX_BODY = 262144
 
26
 
27
 
28
  def now():
 
49
  class Settings:
50
  def __init__(self, local=False, state_dir=None):
51
  self.local = local
52
+ self.admin_org = "VisionXLab"
53
+ self.oauth_client_id = os.environ.get("OAUTH_CLIENT_ID", "")
54
+ self.oauth_client_secret = os.environ.get("OAUTH_CLIENT_SECRET", "")
55
  self.origin = os.environ.get("RISE_PUBLIC_ORIGIN", "").rstrip("/")
56
  self.repo = os.environ.get("RISE_SUBMISSIONS_REPO", "")
57
  self.token = os.environ.get("RISE_STORAGE_TOKEN", "")
58
  self.state_dir = Path(state_dir or ROOT / ".local")
59
  if not local:
60
+ if not self.oauth_client_id or not self.oauth_client_secret:
61
+ raise RuntimeError("Enable hf_oauth in the Space README to configure Hugging Face sign-in.")
62
  if not self.origin.startswith("https://") or urlsplit(self.origin).path:
63
  raise RuntimeError("Set RISE_PUBLIC_ORIGIN to the https origin of the Space app.")
64
  if not self.repo or not self.token:
 
70
  store = store or (LocalStore(settings.state_dir) if settings.local else HubStore(settings.repo, settings.token))
71
  base = base or json.loads((ROOT / "dist/data/leaderboard.json").read_text())
72
  app = FastAPI(docs_url=None, redoc_url=None, openapi_url=None)
73
+ auth, attempts = AdminAuth(settings), defaultdict(deque)
74
  security_lock = threading.Lock()
75
 
76
  def rate_limit(request, scope, limit, window=3600):
 
88
  raise HTTPException(429, "Too many requests. Please try again later.")
89
  queue.append(stamp)
90
 
 
 
 
 
 
 
 
 
 
91
  def payload(request):
92
  value = getattr(request.state, "json", None)
93
  if not isinstance(value, dict):
 
109
  if request.method == "POST":
110
  origin = request.headers.get("origin")
111
  expected = str(request.base_url).rstrip("/") if settings.local else settings.origin
112
+ if (origin and origin != expected) or (not settings.local and request.url.path.startswith("/api/admin/") and origin != expected):
113
  return JSONResponse({"detail": "Cross-origin submissions are not accepted."}, status_code=403)
114
  if request.headers.get("content-type", "").split(";")[0] != "application/json":
115
  return JSONResponse({"detail": "Use application/json."}, status_code=415)
 
132
  response.headers["Referrer-Policy"] = "no-referrer"
133
  response.headers["Permissions-Policy"] = "camera=(), microphone=(), geolocation=()"
134
  response.headers["Content-Security-Policy"] = "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self' https://huggingface.co"
135
+ if request.url.path.startswith('/api/') or request.url.path == '/admin.html':
136
  response.headers["Cache-Control"] = "no-store"
137
  return response
138
 
139
  @app.get("/api/config")
140
  def config():
141
+ return {"available": True, "local_preview": settings.local, "max_file_bytes": 200000,
142
+ "admin_auth": "local" if settings.local else "huggingface", "admin_organization": settings.admin_org,
143
+ "admin_login_url": settings.origin + "/api/admin/login" if not settings.local else ""}
144
 
145
  @app.get("/api/leaderboard")
146
  def leaderboard():
 
193
  return {"submission_id": ident, "status": record["status"], "model_name": record["payload"]["model_name"],
194
  "submitted_at": record["submitted_at"], "review_note": record["review_note"]}
195
 
196
+ auth.attach(app, rate_limit)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
 
198
  @app.get("/api/admin/submissions")
199
  def submissions(request: Request):
200
+ auth.require(request)
201
  return [{key: copy.deepcopy(value) for key, value in record.items() if key not in {"receipt_hash", "fingerprint"}}
202
  for record in sorted(store.read()["submissions"].values(), key=lambda r: r["submitted_at"], reverse=True)]
203
 
204
  @app.post("/api/admin/submissions/{ident}/review")
205
  def review(ident: str, request: Request):
206
+ reviewer = auth.require(request)
207
  body = payload(request)
208
  decision = body.get("decision")
209
  if decision not in {"approve", "reject", "withdraw"}:
 
237
  record["status"] = {"approve": "approved", "reject": "rejected", "withdraw": "withdrawn"}[decision]
238
  record["revision"] += 1
239
  record["reviewed_at"], record["review_note"] = now(), note
240
+ record["history"].append({"decision": decision, "at": record["reviewed_at"], "note": note,
241
+ "reviewer": reviewer["username"], "reviewer_id": reviewer["subject"]})
242
  return {"id": ident, "status": record["status"], "revision": record["revision"]}
243
  return store.mutate(update)
244
 
server/auth.py ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Hugging Face OAuth with server-side sessions and live organization checks."""
2
+ import base64
3
+ import hashlib
4
+ import math
5
+ import secrets
6
+ import threading
7
+ import time
8
+ from urllib.parse import urlencode
9
+
10
+ import httpx
11
+ from fastapi import HTTPException, Request
12
+ from fastapi.responses import JSONResponse, RedirectResponse
13
+
14
+ HF_ORIGIN = "https://huggingface.co"
15
+ SESSION_COOKIE = "__Host-rise_admin"
16
+ STATE_COOKIE = "__Host-rise_oauth"
17
+ SESSION_SECONDS = 8 * 3600
18
+ SCOPES = "openid profile read-memberships"
19
+
20
+
21
+ def digest(value):
22
+ return hashlib.sha256(value.encode()).hexdigest()
23
+
24
+
25
+ def hf_userinfo(access_token):
26
+ try:
27
+ response = httpx.get(HF_ORIGIN + "/oauth/userinfo",
28
+ headers={"Authorization": "Bearer " + access_token}, timeout=15)
29
+ if response.status_code in (401, 403):
30
+ raise HTTPException(401, "Hugging Face sign-in expired. Please sign in again.")
31
+ response.raise_for_status()
32
+ result = response.json()
33
+ if not isinstance(result, dict):
34
+ raise ValueError("Invalid profile")
35
+ return result
36
+ except (httpx.HTTPError, ValueError):
37
+ raise HTTPException(503, "Hugging Face membership verification is temporarily unavailable.") from None
38
+
39
+
40
+ def member_identity(profile, organization):
41
+ subject, username = profile.get("sub"), profile.get("preferred_username")
42
+ if not isinstance(subject, str) or not subject or not isinstance(username, str) or not username:
43
+ raise HTTPException(403, "Unable to verify the Hugging Face account.")
44
+ # Current OAuth responses use `orgs`; some provider versions use `organizations`.
45
+ orgs = profile.get("orgs", profile.get("organizations", []))
46
+ if not isinstance(orgs, list):
47
+ orgs = []
48
+ for org in orgs:
49
+ if (isinstance(org, dict) and org.get("preferred_username", "").casefold() == organization.casefold()
50
+ and org.get("roleInOrg") in {"read", "contributor", "write", "admin"}
51
+ and not org.get("securityRestrictions")):
52
+ return {"subject": subject, "username": username, "organization": organization}
53
+ raise HTTPException(403, "Only current " + organization + " members can review submissions.")
54
+
55
+
56
+ def exchange_code(settings, code, verifier):
57
+ try:
58
+ response = httpx.post(HF_ORIGIN + "/oauth/token",
59
+ auth=(settings.oauth_client_id, settings.oauth_client_secret),
60
+ data={"client_id": settings.oauth_client_id, "grant_type": "authorization_code",
61
+ "code": code, "code_verifier": verifier,
62
+ "redirect_uri": settings.origin + "/api/admin/callback"}, timeout=20)
63
+ response.raise_for_status()
64
+ value = response.json()
65
+ token, lifetime = value.get("access_token"), value.get("expires_in")
66
+ if (not isinstance(token, str) or not token or type(lifetime) not in (int, float)
67
+ or not math.isfinite(lifetime) or lifetime <= 0
68
+ or "read-memberships" not in value.get("scope", "").split()):
69
+ raise ValueError("Invalid OAuth response")
70
+ return token, min(lifetime, SESSION_SECONDS)
71
+ except (httpx.HTTPError, ValueError, AttributeError):
72
+ raise HTTPException(401, "Could not complete Hugging Face sign-in. Please try again.") from None
73
+
74
+
75
+ class AdminAuth:
76
+ def __init__(self, settings):
77
+ self.settings = settings
78
+ self.sessions, self.pending = {}, {}
79
+ self.lock = threading.RLock()
80
+
81
+ def cleanup(self):
82
+ stamp = time.monotonic()
83
+ for collection in (self.sessions, self.pending):
84
+ for key in [key for key, value in collection.items() if value["expires"] <= stamp]:
85
+ collection.pop(key, None)
86
+
87
+ def issue(self, identity, access_token="", lifetime=SESSION_SECONDS):
88
+ token = secrets.token_urlsafe(40)
89
+ with self.lock:
90
+ self.cleanup()
91
+ if len(self.sessions) >= 1000:
92
+ raise HTTPException(503, "Too many active review sessions. Please try again later.")
93
+ self.sessions[digest(token)] = {"identity": identity, "access_token": access_token,
94
+ "expires": time.monotonic() + lifetime}
95
+ return token
96
+
97
+ def session_key(self, request):
98
+ if self.settings.local:
99
+ return request.headers.get("authorization", "").removeprefix("Bearer ")
100
+ return request.cookies.get(SESSION_COOKIE, "")
101
+
102
+ def require(self, request):
103
+ key = digest(self.session_key(request))
104
+ with self.lock:
105
+ self.cleanup()
106
+ session = self.sessions.get(key)
107
+ if not session:
108
+ raise HTTPException(401, "Sign in to review submissions.")
109
+ identity = session["identity"]
110
+ if not self.settings.local:
111
+ try:
112
+ current = member_identity(hf_userinfo(session["access_token"]), self.settings.admin_org)
113
+ if current["subject"] != identity["subject"]:
114
+ raise HTTPException(401, "Account verification failed. Please sign in again.")
115
+ identity = current
116
+ except HTTPException as error:
117
+ if error.status_code in (401, 403):
118
+ with self.lock:
119
+ self.sessions.pop(key, None)
120
+ raise
121
+ # A simultaneous logout must not revive an already removed session.
122
+ with self.lock:
123
+ if key not in self.sessions:
124
+ raise HTTPException(401, "Sign in to review submissions.")
125
+ return identity
126
+
127
+ def attach(self, app, rate_limit):
128
+ settings = self.settings
129
+
130
+ @app.post("/api/admin/session")
131
+ def local_login(request: Request):
132
+ rate_limit(request, "login", 10, 900)
133
+ if not settings.local:
134
+ raise HTTPException(403, "Use Sign in with Hugging Face. Password login is disabled.")
135
+ token = self.issue({"subject": "local-preview", "username": "Local reviewer", "organization": ""})
136
+ return {"token": token, "expires_in": SESSION_SECONDS}
137
+
138
+ @app.get("/api/admin/login")
139
+ def login(request: Request):
140
+ if settings.local:
141
+ raise HTTPException(400, "Use Open local review in the local preview.")
142
+ rate_limit(request, "oauth-login", 20, 900)
143
+ state, binding, verifier = (secrets.token_urlsafe(40) for _ in range(3))
144
+ with self.lock:
145
+ self.cleanup()
146
+ if len(self.pending) >= 1000:
147
+ raise HTTPException(503, "Too many sign-in attempts. Please try again later.")
148
+ self.pending[digest(state)] = {"binding": digest(binding), "verifier": verifier,
149
+ "expires": time.monotonic() + 600}
150
+ challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b"=").decode()
151
+ response = RedirectResponse(HF_ORIGIN + "/oauth/authorize?" + urlencode({
152
+ "client_id": settings.oauth_client_id, "response_type": "code", "scope": SCOPES,
153
+ "redirect_uri": settings.origin + "/api/admin/callback", "state": state,
154
+ "code_challenge": challenge, "code_challenge_method": "S256"}), status_code=302)
155
+ response.set_cookie(STATE_COOKIE, binding, max_age=600, secure=True, httponly=True, samesite="lax")
156
+ return response
157
+
158
+ @app.get("/api/admin/callback")
159
+ def callback(request: Request):
160
+ if settings.local:
161
+ raise HTTPException(400, "OAuth is available only in the deployed Space.")
162
+ state, code = request.query_params.get("state", ""), request.query_params.get("code", "")
163
+ with self.lock:
164
+ self.cleanup()
165
+ pending = self.pending.pop(digest(state), None)
166
+ error, session = "state", None
167
+ if (pending and state and secrets.compare_digest(pending["binding"], digest(request.cookies.get(STATE_COOKIE, "")))
168
+ and len(request.query_params.getlist("state")) == 1 and len(request.query_params.getlist("code")) <= 1):
169
+ error = "cancelled" if request.query_params.get("error") else "signin"
170
+ if code and not request.query_params.get("error"):
171
+ try:
172
+ access_token, lifetime = exchange_code(settings, code, pending["verifier"])
173
+ identity = member_identity(hf_userinfo(access_token), settings.admin_org)
174
+ session = self.issue(identity, access_token, lifetime)
175
+ except HTTPException as failure:
176
+ error = "membership" if failure.status_code == 403 else "signin"
177
+ response = RedirectResponse("/admin.html" + ("" if session else "?login_error=" + error), status_code=303)
178
+ response.delete_cookie(STATE_COOKIE, secure=True, httponly=True, samesite="lax")
179
+ if session:
180
+ with self.lock:
181
+ self.sessions.pop(digest(request.cookies.get(SESSION_COOKIE, "")), None)
182
+ response.set_cookie(SESSION_COOKIE, session, max_age=int(lifetime), secure=True, httponly=True, samesite="lax")
183
+ return response
184
+
185
+ @app.get("/api/admin/me")
186
+ def me(request: Request):
187
+ return self.require(request)
188
+
189
+ @app.post("/api/admin/logout")
190
+ def logout(request: Request):
191
+ with self.lock:
192
+ self.sessions.pop(digest(self.session_key(request)), None)
193
+ response = JSONResponse({"ok": True})
194
+ response.delete_cookie(SESSION_COOKIE, secure=True, httponly=True, samesite="lax")
195
+ return response