diff --git a/.gitattributes b/.gitattributes index f0df735fd3eab65a211ca6657220109c73c44cbf..c41838348fc08cb89f48356aa98d8522733c3573 100644 --- a/.gitattributes +++ b/.gitattributes @@ -95,3 +95,4 @@ media/t2s/nordic-harbour/qwen-on.jpg filter=lfs diff=lfs merge=lfs -text media/t2s/nordic-harbour/sol.jpg filter=lfs diff=lfs merge=lfs -text media/teaser-poster.jpg filter=lfs diff=lfs merge=lfs -text media/teaser.mp4 filter=lfs diff=lfs merge=lfs -text +media/teaser-v31.mp4 filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md index be804997e5b4f2aa7fea31e01ab15f35e6a28933..50582a7137114074f68fcd8b0c5e7e6d949621ba 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,14 @@ colorTo: gray sdk: static app_file: index.html pinned: false -short_description: Benchmarking coding agents that build and edit 3D scenes +short_description: Benchmarking coding agents that build 3D scenes --- # Code4Scene -Project page for *Code4Scene: Benchmarking Coding Agents for Constructing and Editing 3D Scenes*: the leaderboard on the -95-case public set, the paper's takeaways, and selected cases whose saved Unreal Engine scenes can be viewed in 3D. +Project page for Code4Scene's construction (Text-to-Scene) setting: the leaderboard on the 20-case public set, the paper's +Spatial Composition takeaway, and selected cases whose saved Unreal Engine scenes can be viewed in 3D. Since 2026-10-01 the +page shows Text-to-Scene only; `scripts/t2s_only.py` records that edit. Paper: [arXiv:2609.36777](https://arxiv.org/abs/2609.36777) · Code: [SimWorld-AI/Code4Scene](https://github.com/SimWorld-AI/Code4Scene) @@ -20,23 +21,23 @@ Part of the [SimWorld](https://simworld.org) project. ## Website design -Layout, navigation, wireframe mark, typography and card geometry follow the user-provided [BuildingBench](https://enactra.ai/buildingbench/) design. The bar chart rendering and company palette are adapted from its [Figure Kit](http://ds-serv12.ucsd.edu:8875/figure-kit/#bar), specifically `bar-static/build.py`. All scores, configurations, authors, media, models and evaluator content remain Code4Scene's. The original 95-public-case paper evaluation is distinguished from the current 201 public cases and the 320-case full benchmark target, including private cases. +Layout, navigation, wireframe mark, typography and card geometry follow the user-provided [BuildingBench](https://enactra.ai/buildingbench/) design. The bar chart rendering and company palette are adapted from its [Figure Kit](http://ds-serv12.ucsd.edu:8875/figure-kit/#bar), specifically `bar-static/build.py`. All scores, configurations, authors, media, models and evaluator content remain Code4Scene's. The paper's 20-case public Text-to-Scene evaluation is distinguished from the current 129 public construction cases and the 160-case full construction target, including private cases. The reference toolkit's Inter, IBM Plex Mono and Source Serif 4 font files are bundled with their original SIL Open Font License notices in `assets/fonts/`. Provider marks are from the toolkit's Lobehub icons, used to identify the corresponding model providers. Deployment remains this Hugging Face static Space: `index.html` and `cases.html`, with the existing media/model paths and headers. The pre-restyle version is recoverable at commit `9ff787d0f9d72905d92f780da56bd2229782b981`. -The Pareto renderer (`assets/pareto.js`) ports the reference toolkit's reversed logarithmic cost axis, connected frontier, provider palette and greedy collision-aware label placement. `data/pareto.json` combines unrounded scores from the existing `data/site.js` with exact mean costs from the original published tables; all three task views recompute non-dominance from those values. The table displays three decimals but sorts at source precision. +The Pareto renderer (`assets/pareto.js`) ports the reference toolkit's reversed logarithmic cost axis, connected frontier, provider palette and greedy collision-aware label placement. `data/pareto.json` combines unrounded scores from the existing `data/site.js` with exact mean costs from the original published tables; the Text-to-Scene view recomputes non-dominance from those values. The table displays three decimals but sorts at source precision. -Homepage scenes (`assets/scene-cards.js`) adapt BuildingBench's shared WebGL renderer and per-view canvas engine. Existing public packed models are decoded with the same adapter as `cases.html`; geometry and the full case explorer remain unchanged. Visible scenes load automatically; repeated scenes share decoded assets. Drag or arrow keys orbit, wheel or +/- zoom, and the pause control stops rotation. Both Image-to-Scene cards switch between the saved repair, corrupted input and ground truth using the reference camera. +Homepage scenes (`assets/scene-cards.js`) adapt BuildingBench's shared WebGL renderer and per-view canvas engine. Existing public packed models are decoded with the same adapter as `cases.html`; geometry and the full case explorer remain unchanged. Visible scenes load automatically; repeated scenes share decoded assets. Drag or arrow keys orbit, wheel or +/- zoom, and the pause control stops rotation. ## Interaction and loading reliability -Task Format switches the entire construction/editing example, including instructions, inputs, saved output and evaluator. Bar marks, labels and Pareto points share pointer, keyboard and tap tooltips with source-precision scores and costs in `data/leaderboard-details.json`. The ranking supports filtering and source-precision sorting. +Task Format shows the construction example: instructions, inputs, saved output and evaluator. Bar marks, labels and Pareto points share pointer, keyboard and tap tooltips with source-precision scores and costs in `data/leaderboard-details.json`. The ranking supports filtering and source-precision sorting. Homepage model work uses a shared two-job download/decode queue. Hidden/offscreen views release their request; stale results cannot replace the selected state. Card textures are limited to 512px and render resolution is bounded, while original model files and the full case explorer stay intact. Idle decoded assets are evicted; the 128 MiB cache target is not a hard limit on currently visible geometry. Downloads show progress, abort after 20 seconds without data or 90 seconds total, retry once, then expose an explicit Retry button. Context loss pauses drawing and restoration rebuilds the environment; failures expose recovery instead of an indefinite loading overlay. -Queue tests: `node --test tests/scene-assets.test.mjs`. Browser QA includes public-model cold loads, quick scrolling, task/repair switching, desktop/mobile resize, forced HTTP failures, stalled downloads, retry and WebGL context loss. +Queue tests: `node --test tests/scene-assets.test.mjs`. Browser QA includes public-model cold loads, quick scrolling, desktop/mobile resize, forced HTTP failures, stalled downloads, retry and WebGL context loss. ## Geometry-first scene cards diff --git a/assets/buildingbench.css b/assets/buildingbench.css index b3c018df21be8b7e4b3b041b55419430c7ee98d7..d66d949dfa3029df984a09ac647ed5981b809005 100644 --- a/assets/buildingbench.css +++ b/assets/buildingbench.css @@ -14,7 +14,7 @@ html{background:var(--bg);scroll-padding-top:24px}body{color:var(--ink);backgrou section,section.alt,section.dark{padding:34px 0;background:transparent;color:var(--text-p)}.section-header,.section-header.centered{text-align:left;margin-bottom:22px;max-width:none}.section-label{display:none}.section-title,section.dark .section-title{font-size:clamp(30px,4.2vw,46px);line-height:1.04;letter-spacing:-1.9px;font-weight:700;color:#171816;margin:6px 0 20px}.section-desc,section.dark .section-desc{font-size:14px;line-height:1.65;max-width:850px;margin:0;color:var(--text-p)}.card{background:white;border:1px solid var(--border);border-radius:20px;box-shadow:none}.card:hover{box-shadow:none}.btn{font-size:12px;padding:10px 14px;border-radius:6px;box-shadow:none;font-weight:600}.btn:hover{transform:none;box-shadow:none}.btn-primary{background:var(--green-dark);color:white;border:1px solid var(--green-dark);box-shadow:none}.btn-primary:hover{background:var(--green);color:white;box-shadow:none}.btn-outline,.btn-dark,section.dark .btn-outline{background:#fff;border:1px solid var(--border);color:var(--green-dark)} .task-section{padding-top:0}.task-shell{padding:20px;border:1px solid #d7dbd5;border-radius:28px;background:white}.task-shell>h3{font-size:22px;letter-spacing:-.6px;line-height:1.35;color:var(--text-h);margin:0 0 5px}.task-shell>h3 span{font-weight:500}.task-subtitle{font-size:14px;margin:0 0 20px;color:#60655e}.task-columns{display:grid;grid-template-columns:1fr 1.55fr 1fr;gap:14px}.task-panel{min-width:0;background:#fbfcf9;border:1px solid #d7dbd5;border-radius:18px;padding:14px;display:flex;flex-direction:column}.panel-heading{display:flex;justify-content:space-between;gap:10px;align-items:baseline;margin-bottom:14px;font-size:13px;color:#171816}.panel-heading span{font-size:11px;color:#626960;text-align:right}.prompt-preview{border-radius:12px;background:#f0f3ed;padding:16px;flex:1}.prompt-preview p{font-size:14px;line-height:1.6;margin:9px 0}.prompt-preview .prompt-detail{font-size:12px;color:#747b71}.output-panel img{width:100%;height:253px;object-fit:cover;border:1px solid #e4e4e2;border-radius:12px}.task-foot{font-size:11px;line-height:1.6;color:#626960;margin:12px 0 0}.score-block{padding:20px 18px;border-radius:14px;background:#171816;color:#fff;flex:1;display:flex;flex-direction:column;justify-content:center}.score-block>span{font-size:11px;color:#bbbfba;letter-spacing:.06em}.score-block>strong{font-size:52px;line-height:1.2;letter-spacing:-2px}.score-block dl{margin-top:20px;display:grid;gap:12px}.score-block dl>div{display:flex;justify-content:space-between;gap:8px;align-items:center;font-size:11px}.score-block dd{font-size:15px;font-weight:500;font-variant-numeric:tabular-nums}.task-full{margin-top:18px;border:1px solid var(--border);border-radius:12px}.task-full summary{padding:13px 16px;display:flex;justify-content:space-between;gap:12px;font-size:12px;font-weight:500;cursor:pointer}.task-full summary span+span{font-size:10px;color:var(--text-muted)}.task-full>p{padding:0 18px 18px;font-size:13px;line-height:1.8}.task-settings .grid2{margin:18px 0 0!important;gap:14px}.task-settings .setting-card{padding:16px;background:#fafbf8;border-radius:14px}.setting-card h3{font-size:18px;margin-bottom:7px}.setting-card p{font-size:12px;line-height:1.65}.setting-card .kicker{font-size:10px;color:var(--muted)}.formula{font-size:11px;white-space:normal}.availability{border-bottom:1px solid var(--border);padding:18px 4px;display:flex;gap:10px 24px;flex-wrap:wrap;font-size:11px;line-height:1.7;color:var(--text-muted)}.availability b{color:var(--text-h);font-size:14px} .lb-tabs{justify-content:flex-start;margin-bottom:16px}.seg{background:#f0f3ef;border:1px solid var(--border);border-radius:7px;padding:3px;gap:3px}.seg button,.seg-lg button{font-size:12px;padding:8px 14px;border-radius:4px;color:#778178}.seg button.on{background:white;color:var(--ink);box-shadow:0 1px 4px #152a1915}.bar-card{padding:20px 18px 12px;margin-bottom:18px;overflow:hidden}.bar-heading{display:flex;justify-content:space-between;align-items:baseline;padding:0 12px;gap:20px}.bar-heading h3{font:400 31px 'Source Serif 4',Georgia,serif;color:#1a1a1a}.bar-heading span{font-size:12px;color:#8d8d8d}.bar-scroll{overflow:auto;scrollbar-width:thin}.kit-bars{display:block;width:100%;min-width:720px;height:auto}.bar-card .note{margin:0 12px;font-size:11px;color:#738078}.chart-card{padding:20px 24px;margin-bottom:18px}.sub-title{font-size:18px;letter-spacing:-.3px;color:var(--text-h);font-weight:700}.sub-desc{font-size:12px;color:var(--text-muted);line-height:1.6}.ch-legend{font-size:11px;gap:6px 16px;margin-top:14px}.note,.board-note{font-size:11px;color:var(--text-muted)}.board{font-size:13px}.board th{font-size:10px;font-weight:500;color:#7d877d;background:#f8faf6;letter-spacing:.03em}.board td{padding:12px 10px}.board tbody tr:hover{background:#f5f8f2}.board .tag{font-size:9px;background:#edf3ef;color:#4b715d}.board .cellbar i{opacity:.13}.board .cellbar b{color:#284e3f}.board-wrap{overflow:auto} -.case-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.case-grid .case-card{border:1px solid #d7ded5;border-radius:16px;box-shadow:none;background:white;overflow:hidden}.case-grid .case-card:hover{transform:none;border-color:var(--green);box-shadow:none}.case-card .th{aspect-ratio:16/10;background-color:#f1f1ee}.case-card .th i{font-size:10px;color:#36544b;background:#ffffffed;border:1px solid #e1e4de;border-radius:5px}.case-card .meta{padding:15px 16px}.case-card .meta h4{font-size:15px;color:var(--text-h)}.case-card .meta p{font-size:11px;color:var(--text-muted);margin-top:6px}.tk{padding:24px;border:1px solid var(--border);border-radius:22px;background:white;margin:18px 0}.tk .n{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:none;padding:0;border:0}.tk h3{font-size:24px;line-height:1.25;letter-spacing:-.7px;max-width:1000px}.tk p.s{font-size:14px;color:#62695e}.tk figure{background:#fbfcf9;border-color:var(--line);border-radius:14px}.tk figcaption{font-size:11px;color:var(--text-muted)} +.case-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.case-grid .case-card{border:1px solid #d7ded5;border-radius:16px;box-shadow:none;background:white;overflow:hidden}.case-grid .case-card:hover{transform:none;border-color:var(--green);box-shadow:none}.case-card .th{aspect-ratio:16/10;background-color:#f1f1ee}.case-card .th i{font-size:10px;color:#36544b;background:#ffffffed;border:1px solid #e1e4de;border-radius:5px}.case-card .meta{padding:15px 16px}.case-card .meta h4{font-size:15px;color:var(--text-h)}.case-card .meta p{font-size:11px;color:var(--text-muted);margin-top:6px}.tk{padding:24px;border:1px solid var(--border);border-radius:22px;background:white;margin:18px 0}.tk .n{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:none;padding:0;border:0}.tk h3{font-size:24px;line-height:1.25;letter-spacing:-.7px;max-width:1000px}.tk p.s{font-size:14px;color:#62695e}.tk figure{background:#fbfcf9;border-color:var(--line);border-radius:14px}.tk figcaption{font-size:11px;color:var(--text-muted)} .teaser-frame{border:1px solid var(--border);border-radius:20px;box-shadow:none;background:#171816;max-width:none}.teaser-frame video{width:100%;max-height:680px}.author-block{margin:22px 0}.hero-authors{font-size:13px;color:var(--ink);margin-bottom:8px}.hero-affiliations{font-size:11px;color:var(--muted);margin-bottom:0}.paper-abstract{border:1px solid var(--border);border-radius:16px;background:white}.paper-abstract summary{padding:18px 20px;display:flex;justify-content:space-between;gap:20px;cursor:pointer;font-size:15px;font-weight:600;color:var(--text-h)}.paper-abstract summary span{font-size:11px;font-weight:400;color:var(--muted)}.paper-abstract .abstract-card{border:0;box-shadow:none;padding:0 20px 20px;max-width:none;font-size:13px;line-height:1.8}.method-flow .flow{gap:12px;margin-top:24px}.flow .step{background:#fff;border:1px solid var(--border);border-radius:12px;padding:15px}.flow .step:after{display:none}.flow .step .n{font-size:10px;color:var(--green)}.flow .step b{font-size:13px}.flow .step span{font-size:11px}.cite-box{background:white;border:1px solid var(--border);border-radius:16px;max-width:none}.cite-box pre{color:#4d5a50;font-size:12px}.cite-copy-btn{background:#f4f7f0;color:var(--ink);border:1px solid var(--border);border-radius:5px}footer{max-width:1360px;margin:auto;background:transparent;border-top:1px solid var(--border);padding:24px 0;color:var(--muted);text-align:left;font-size:11px}footer a{color:var(--green)}footer p:last-child{color:var(--muted)!important} .case-page>section{max-width:1440px;padding-left:40px;padding-right:40px;margin:auto}.case-page .card{border-radius:22px}.case-page .viewer{background:#f1f1ee;border:1px solid #e4e4e2;border-radius:14px}.case-page .casebar button{background:#fff;font-family:Inter,sans-serif;border-radius:10px}.case-page .casebar button.on{background:#edf3f5;border-color:var(--green);color:var(--green-dark)}.case-page .casebar button.on small{color:#647a82}.case-page .panel{border-radius:14px}.case-page .section-title{font-size:38px}.case-page .agents{grid-template-columns:repeat(7,minmax(0,1fr))} @media(min-width:1500px){.intro{padding-top:39px;padding-bottom:35px}} diff --git a/assets/leaderboard-bars.js b/assets/leaderboard-bars.js index 2e2916c625e84a9553188a8ef8429c5396638254..d42536c70d3e6e124cc2430eb0638aaafce26fc9 100644 --- a/assets/leaderboard-bars.js +++ b/assets/leaderboard-bars.js @@ -3,7 +3,7 @@ (async function(){ const {bindChartTooltip}=await import("./chart-interactions.js?v=20261001c"); await Promise.all([document.fonts.load('400 13px Inter'),document.fonts.load('700 13px Inter'),document.fonts.load('500 15.5px "IBM Plex Mono"')]); -const ALL = {"overall": [{"name": "GPT-6 Astra (max)", "org": "OpenAI", "score": 0.6193352866666667, "colour": "#10A37F", "ink": "#ffffff", "label": "62", "new": false}, {"name": "Gemini 3.8 Flash (high)", "org": "Google", "score": 0.6189750266666667, "colour": "#7b1fa2", "ink": "#ffffff", "label": "62", "new": false}, {"name": "Claude Fable 5.1 (max)", "org": "Anthropic", "score": 0.60604898, "colour": "#D97757", "ink": "#ffffff", "label": "61", "new": false}, {"name": "Claude Opus 5 (max)", "org": "Anthropic", "score": 0.5931299933333334, "colour": "#D97757", "ink": "#ffffff", "label": "59", "new": false}, {"name": "GPT-5.6 Sol (high)", "org": "OpenAI", "score": 0.5499994666666667, "colour": "#10A37F", "ink": "#ffffff", "label": "55", "new": false}, {"name": "Muse Spark 1.3 (medium)", "org": "Meta", "score": 0.5022053666666666, "colour": "#42a5f5", "ink": "#111111", "label": "50", "new": false}, {"name": "GLM-5.3 Flash (max)", "org": "Z.ai", "score": 0.4147088666666666, "colour": "#96650b", "ink": "#ffffff", "label": "41", "new": false}, {"name": "Qwen 3.8 27B (thinking off)", "org": "Alibaba", "score": 0.37818169333333335, "colour": "#fe7016", "ink": "#111111", "label": "38", "new": false}, {"name": "Grok 4.6 (high)", "org": "xAI", "score": 0.37567506, "colour": "#111111", "ink": "#ffffff", "label": "38", "new": false}, {"name": "Qwen 3.8 27B (thinking on)", "org": "Alibaba", "score": 0.37094399333333333, "colour": "#fe7016", "ink": "#111111", "label": "37", "new": false}, {"name": "Inkling (high)", "org": "Thinking Machines", "score": 0.31150237333333336, "colour": "#686868", "ink": "#ffffff", "label": "31", "new": false}, {"name": "Gemma 4 31B (thinking on)", "org": "Google", "score": 0.29812257999999997, "colour": "#7b1fa2", "ink": "#ffffff", "label": "30", "new": false}, {"name": "Gemma 4 31B (thinking off)", "org": "Google", "score": 0.28498897333333334, "colour": "#7b1fa2", "ink": "#ffffff", "label": "28", "new": false}, {"name": "DeepSeek V4.1 Flash (high)", "org": "DeepSeek", "score": 0.22658958, "colour": "#3f51e0", "ink": "#ffffff", "label": "23", "new": false}], "t2s": [{"name": "Claude Fable 5.1 (max)", "org": "Anthropic", "score": 0.78775, "colour": "#D97757", "ink": "#ffffff", "label": "79", "new": false}, {"name": "GPT-6 Astra (max)", "org": "OpenAI", "score": 0.72382, "colour": "#10A37F", "ink": "#ffffff", "label": "72", "new": false}, {"name": "Claude Opus 5 (max)", "org": "Anthropic", "score": 0.7181599999999999, "colour": "#D97757", "ink": "#ffffff", "label": "72", "new": false}, {"name": "GPT-5.6 Sol (high)", "org": "OpenAI", "score": 0.70704, "colour": "#10A37F", "ink": "#ffffff", "label": "71", "new": false}, {"name": "Gemini 3.8 Flash (high)", "org": "Google", "score": 0.65689, "colour": "#7b1fa2", "ink": "#ffffff", "label": "66", "new": false}, {"name": "Muse Spark 1.3 (medium)", "org": "Meta", "score": 0.646195, "colour": "#42a5f5", "ink": "#111111", "label": "65", "new": false}, {"name": "Grok 4.6 (high)", "org": "xAI", "score": 0.56721, "colour": "#111111", "ink": "#ffffff", "label": "57", "new": false}, {"name": "Qwen 3.8 27B (thinking off)", "org": "Alibaba", "score": 0.55666, "colour": "#fe7016", "ink": "#111111", "label": "56", "new": false}, {"name": "Qwen 3.8 27B (thinking on)", "org": "Alibaba", "score": 0.51571, "colour": "#fe7016", "ink": "#111111", "label": "52", "new": false}, {"name": "GLM-5.3 Flash (max)", "org": "Z.ai", "score": 0.5094299999999999, "colour": "#96650b", "ink": "#ffffff", "label": "51", "new": false}, {"name": "Gemma 4 31B (thinking on)", "org": "Google", "score": 0.470705, "colour": "#7b1fa2", "ink": "#ffffff", "label": "47", "new": false}, {"name": "Gemma 4 31B (thinking off)", "org": "Google", "score": 0.45494, "colour": "#7b1fa2", "ink": "#ffffff", "label": "45", "new": false}, {"name": "Inkling (high)", "org": "Thinking Machines", "score": 0.42498500000000006, "colour": "#686868", "ink": "#ffffff", "label": "42", "new": false}, {"name": "DeepSeek V4.1 Flash (high)", "org": "DeepSeek", "score": 0.24269, "colour": "#3f51e0", "ink": "#ffffff", "label": "24", "new": false}], "i2s": [{"name": "Gemini 3.8 Flash (high)", "org": "Google", "score": 0.5810600533333334, "colour": "#7b1fa2", "ink": "#ffffff", "label": "58", "new": false}, {"name": "GPT-6 Astra (max)", "org": "OpenAI", "score": 0.5148505733333334, "colour": "#10A37F", "ink": "#ffffff", "label": "51", "new": false}, {"name": "Claude Opus 5 (max)", "org": "Anthropic", "score": 0.46809998666666675, "colour": "#D97757", "ink": "#ffffff", "label": "47", "new": false}, {"name": "Claude Fable 5.1 (max)", "org": "Anthropic", "score": 0.4243479600000001, "colour": "#D97757", "ink": "#ffffff", "label": "42", "new": false}, {"name": "GPT-5.6 Sol (high)", "org": "OpenAI", "score": 0.3929589333333333, "colour": "#10A37F", "ink": "#ffffff", "label": "39", "new": false}, {"name": "Muse Spark 1.3 (medium)", "org": "Meta", "score": 0.35821573333333334, "colour": "#42a5f5", "ink": "#111111", "label": "36", "new": false}, {"name": "GLM-5.3 Flash (max)", "org": "Z.ai", "score": 0.3199877333333333, "colour": "#96650b", "ink": "#ffffff", "label": "32", "new": false}, {"name": "Qwen 3.8 27B (thinking on)", "org": "Alibaba", "score": 0.2261779866666667, "colour": "#fe7016", "ink": "#111111", "label": "23", "new": false}, {"name": "DeepSeek V4.1 Flash (high)", "org": "DeepSeek", "score": 0.21048916, "colour": "#3f51e0", "ink": "#ffffff", "label": "21", "new": false}, {"name": "Qwen 3.8 27B (thinking off)", "org": "Alibaba", "score": 0.19970338666666668, "colour": "#fe7016", "ink": "#111111", "label": "20", "new": false}, {"name": "Inkling (high)", "org": "Thinking Machines", "score": 0.19801974666666666, "colour": "#686868", "ink": "#ffffff", "label": "20", "new": false}, {"name": "Grok 4.6 (high)", "org": "xAI", "score": 0.18414012, "colour": "#111111", "ink": "#ffffff", "label": "18", "new": false}, {"name": "Gemma 4 31B (thinking on)", "org": "Google", "score": 0.12554015999999998, "colour": "#7b1fa2", "ink": "#ffffff", "label": "13", "new": false}, {"name": "Gemma 4 31B (thinking off)", "org": "Google", "score": 0.11503794666666667, "colour": "#7b1fa2", "ink": "#ffffff", "label": "12", "new": false}]}; +const ALL = {"t2s": [{"name": "Claude Fable 5.1 (max)", "org": "Anthropic", "score": 0.78775, "colour": "#D97757", "ink": "#ffffff", "label": "79", "new": false}, {"name": "GPT-6 Astra (max)", "org": "OpenAI", "score": 0.72382, "colour": "#10A37F", "ink": "#ffffff", "label": "72", "new": false}, {"name": "Claude Opus 5 (max)", "org": "Anthropic", "score": 0.7181599999999999, "colour": "#D97757", "ink": "#ffffff", "label": "72", "new": false}, {"name": "GPT-5.6 Sol (high)", "org": "OpenAI", "score": 0.70704, "colour": "#10A37F", "ink": "#ffffff", "label": "71", "new": false}, {"name": "Gemini 3.8 Flash (high)", "org": "Google", "score": 0.65689, "colour": "#7b1fa2", "ink": "#ffffff", "label": "66", "new": false}, {"name": "Muse Spark 1.3 (medium)", "org": "Meta", "score": 0.646195, "colour": "#42a5f5", "ink": "#111111", "label": "65", "new": false}, {"name": "Grok 4.6 (high)", "org": "xAI", "score": 0.56721, "colour": "#111111", "ink": "#ffffff", "label": "57", "new": false}, {"name": "Qwen 3.8 27B (thinking off)", "org": "Alibaba", "score": 0.55666, "colour": "#fe7016", "ink": "#111111", "label": "56", "new": false}, {"name": "Qwen 3.8 27B (thinking on)", "org": "Alibaba", "score": 0.51571, "colour": "#fe7016", "ink": "#111111", "label": "52", "new": false}, {"name": "GLM-5.3 Flash (max)", "org": "Z.ai", "score": 0.5094299999999999, "colour": "#96650b", "ink": "#ffffff", "label": "51", "new": false}, {"name": "Gemma 4 31B (thinking on)", "org": "Google", "score": 0.470705, "colour": "#7b1fa2", "ink": "#ffffff", "label": "47", "new": false}, {"name": "Gemma 4 31B (thinking off)", "org": "Google", "score": 0.45494, "colour": "#7b1fa2", "ink": "#ffffff", "label": "45", "new": false}, {"name": "Inkling (high)", "org": "Thinking Machines", "score": 0.42498500000000006, "colour": "#686868", "ink": "#ffffff", "label": "42", "new": false}, {"name": "DeepSeek V4.1 Flash (high)", "org": "DeepSeek", "score": 0.24269, "colour": "#3f51e0", "ink": "#ffffff", "label": "24", "new": false}]}; const LOGOS = {"Anthropic": {"icon": "anthropic", "fill": "#141413", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "OpenAI": {"icon": "openai", "fill": "#141413", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "Meta": {"icon": "meta-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "Google": {"icon": "google-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "DeepSeek": {"icon": "deepseek-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "xAI": {"icon": "xai", "tile": "#111111", "shape": "square", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "Z.ai": {"icon": "zai", "tile": "#111111", "shape": "square", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "Moonshot": {"icon": "kimi", "tile": "#111111", "shape": "square", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "StepFun": {"icon": "stepfun", "tile": "#01d9cf", "shape": "circle", "viewBox": "0 0 24 24", "inner": "", "rule": "evenodd"}, "Undisclosed": {"icon": "unionalpha-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "Cognition": {"icon": "devin-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "Fireworks": {"icon": "fireworks-color", "viewBox": "0 0 24 24", "inner": "", "rule": null}, "Stealth": {"wordmark": ["STEALTH"]}, "Thinking Machines": {"wordmark": ["THINKING", "MACHINES"]}, "Alibaba": {"wordmark": ["QWEN"]}}; for(const [key,DATA] of Object.entries(ALL)){ const svg=document.getElementById('bars-'+key), W=1200, H=420; diff --git a/cases.html b/cases.html index d8a13b1eb627c534741bc3a21657fc3fac913db0..d0d921c05d5631b0d339861f09b13adfc8561d19 100644 --- a/cases.html +++ b/cases.html @@ -82,12 +82,12 @@ table.cs td,table.cs th{white-space:nowrap}.panel code{font-size:.82em;backgroun .in-open{border:1px solid var(--primary);background:#fff;color:var(--primary-dark);border-radius:8px;padding:.45rem .9rem;font:600 .85rem Inter,sans-serif;cursor:pointer} .in-open:hover{background:var(--primary);color:#fff} @media(max-width:900px){.in-i2s{grid-template-columns:1fr}} - +

Every scene in 3D, with its scores

Each agent's result is the engine-native scene it saved, exported from Unreal Engine so you can turn it in the browser. Beside it, how the -evaluator scored that scene. 6 cases, 41 scenes in 3D. Pick a case, then an agent.

+evaluator scored that scene. 4 cases, 29 scenes in 3D. Pick a case, then an agent.

·

@@ -99,7 +99,7 @@ evaluator scored that scene. 6 cases, 41 scenes in 3D. Pick a case, then an agen - -

Constructing and Editing
3D Scenes with Code

Benchmarking coding agents that turn text and reference images into engine-native 3D scenes. Measuring spatial reasoning, task fulfillment and precise control of scene state.

Task Format

Nordic Harbour · Text-to-Scene

An open-ended scene description, an asset catalog and the Unreal Engine editor.

Agent inputText + assets
Task instruction

Build me a compact, sunlit Copenhagen-style canal district with narrow cobblestone streets and rectangular waterways enclosing dense urban blocks.

Townhouses, canals, bridges and a waterfront promenade — with detailed requirements for materials, layout and street furniture.

Given: an empty level and the content pack’s asset catalog.

EvaluationEngine-native scene
CASE SCORE0.877
Detailed Alignment
0.757
Overview Alignment
0.909
Physical Safety
0.900

Task fulfillment, artifact integrity and static physical validity.

0.2 × Detailed + 0.6 × Overview + 0.2 × Physical

+ Full task instructionTEXT-TO-SCENE

Build me a compact, sunlit Copenhagen-style canal district with narrow cobblestone streets and rectangular waterways enclosing dense urban blocks. Arrange roughly thirty attached four- to six-storey townhouses in continuous street and canal-front rows, using slender façades, repetitive white-framed windows, arched doors and carriage entrances, modest cornices, and steep tiled roofs packed with dormers and brick chimneys. Include occasional exposed party walls between staggered building rows. Finish the façades in weathered muted red, mustard yellow, dusty blue, warm grey, beige, and exposed brick, with red, orange, and charcoal roof tiles. Run a principal waterfront street along a stone quay, crossed by smaller streets and linked across the canals by short, gently arched stone-and-metal bridges, including one opening onto a broad paved promenade with rounded landings. Form the canal edges from stepped pale stone, dark timber retaining walls, and iron railings around reflective rippling water. Add regularly spaced leafy trees, ornate black lamps, stone bollards, benches, European road signs, zebra crossings, puddles, grime, and sparse weeds.

320 full benchmark target · 160 construction + 160 editing, including private cases201 public cases · 129 construction + 72 editing (22 indoor, 50 outdoor)
+ +

Constructing
3D Scenes with Code

Benchmarking coding agents that turn open-ended scene descriptions into engine-native 3D scenes in Unreal Engine. Measuring spatial reasoning, task fulfillment and physical validity.

Task Format

Nordic Harbour · Text-to-Scene

An open-ended scene description, an asset catalog and the Unreal Engine editor.

Agent inputText + assets
Task instruction

Build me a compact, sunlit Copenhagen-style canal district with narrow cobblestone streets and rectangular waterways enclosing dense urban blocks.

Townhouses, canals, bridges and a waterfront promenade — with detailed requirements for materials, layout and street furniture.

Given: an empty level and the content pack’s asset catalog.

EvaluationEngine-native scene
CASE SCORE0.877
Detailed Alignment
0.757
Overview Alignment
0.909
Physical Safety
0.900

Task fulfillment, artifact integrity and static physical validity.

0.2 × Detailed + 0.6 × Overview + 0.2 × Physical

+ Full task instructionTEXT-TO-SCENE

Build me a compact, sunlit Copenhagen-style canal district with narrow cobblestone streets and rectangular waterways enclosing dense urban blocks. Arrange roughly thirty attached four- to six-storey townhouses in continuous street and canal-front rows, using slender façades, repetitive white-framed windows, arched doors and carriage entrances, modest cornices, and steep tiled roofs packed with dormers and brick chimneys. Include occasional exposed party walls between staggered building rows. Finish the façades in weathered muted red, mustard yellow, dusty blue, warm grey, beige, and exposed brick, with red, orange, and charcoal roof tiles. Run a principal waterfront street along a stone quay, crossed by smaller streets and linked across the canals by short, gently arched stone-and-metal bridges, including one opening onto a broad paved promenade with rounded landings. Form the canal edges from stepped pale stone, dark timber retaining walls, and iron railings around reflective rippling water. Add regularly spaced leafy trees, ornate black lamps, stone bollards, benches, European road signs, zebra crossings, puddles, grime, and sparse weeds.

160 construction cases in the full benchmark target, including private cases129 public construction cases

Leaderboard

-

14 coding-agent configurations · paper results on the original 95 public cases (20 construction + 75 editing). These results predate the 201-case public release.

-

Code4Scene

Paper evaluation · score out of 100

Swipe to view all 14 configurations →

Sorted by score. Bar labels round scores ×100; the table preserves three decimal places. One color per model provider.

-

Code4Scene Pareto Frontier

Quality against the cost of one case · original 95-case public evaluation

Swipe to explore all configurations →

Solid: the frontier — nothing cheaper scores higher. One point per configuration, at its evaluated reasoning effort. Cost is the mean USD per case; overall averages the two task means.

-
14 configurations
Ranking

Overall = ½ Text-to-Scene + ½ Image-to-Scene over the 95 public cases; its cost is weighted the same way.

#Agent configurationOverallText-to-SceneImage-to-SceneCost / case
1GPT-6 Astra (max)ParetoOpenAI
0.619
0.7240.515$12.90
2Gemini 3.8 Flash (high)ParetoGoogle
0.619
0.6570.581$1.92
3Claude Fable 5.1 (max)Anthropic
0.606
0.7880.424$10.62
4Claude Opus 5 (max)Anthropic
0.593
0.7180.468$19.48
5GPT-5.6 Sol (high)OpenAI
0.550
0.7070.393$2.97
6Muse Spark 1.3 (medium)ParetoMeta
0.502
0.6460.358$0.09
7GLM-5.3 Flash (max)open weightsZ.ai
0.415
0.5090.320$0.40
8Qwen 3.8 27B (thinking off)open weightsAlibaba
0.378
0.5570.200$0.38
9Grok 4.6 (high)xAI
0.376
0.5670.184$2.29
10Qwen 3.8 27B (thinking on)open weightsAlibaba
0.371
0.5160.226$0.30
11Inkling (high)Thinking Machines
0.312
0.4250.198$0.48
12Gemma 4 31B (thinking on)open weightsParetoGoogle
0.298
0.4710.126$0.03
13Gemma 4 31B (thinking off)open weightsParetoGoogle
0.285
0.4550.115$0.02
14DeepSeek V4.1 Flash (high)open weightsDeepSeek
0.227
0.2430.210$0.12

20 public cases. Case score = 0.2 × Detailed + 0.6 × Overview + 0.2 × Physical. Detailed and Overview are means of the per-case scores.

#Agent configurationScoreDetailedOverviewPhysicalCost / case
1Claude Fable 5.1 (max)ParetoAnthropic
0.788
0.7250.7720.898$18.16
2GPT-6 Astra (max)OpenAI
0.724
0.7070.7330.712$22.47
3Claude Opus 5 (max)Anthropic
0.718
0.6310.7160.811$34.50
4GPT-5.6 Sol (high)ParetoOpenAI
0.707
0.6320.7100.772$4.07
5Gemini 3.8 Flash (high)ParetoGoogle
0.657
0.6370.6640.655$2.49
6Muse Spark 1.3 (medium)ParetoMeta
0.646
0.5980.6610.651$0.10
7Grok 4.6 (high)xAI
0.567
0.5220.5760.585$4.33
8Qwen 3.8 27B (thinking off)open weightsAlibaba
0.557
0.5070.5300.688$0.49
9Qwen 3.8 27B (thinking on)open weightsAlibaba
0.516
0.5050.4600.694$0.33
10GLM-5.3 Flash (max)open weightsZ.ai
0.509
0.4030.5370.533$0.71
11Gemma 4 31B (thinking on)open weightsParetoGoogle
0.471
0.4120.4160.694$0.03
12Gemma 4 31B (thinking off)open weightsParetoGoogle
0.455
0.4380.3700.725$0.02
13Inkling (high)Thinking Machines
0.425
0.3930.3370.722$0.20
14DeepSeek V4.1 Flash (high)open weightsDeepSeek
0.243
0.2170.1610.513$0.19

75 public cases (25 indoor, 50 outdoor). Case score = 0.8 × Repair F1 + 0.2 × Physical. Repair F1 counts target actors restored to the withheld ground truth.

#Agent configurationScoreRepair F1PhysicalIndoorOutdoorCost / case
1Gemini 3.8 Flash (high)ParetoGoogle
0.581
0.5270.7960.7170.513$1.35
2GPT-6 Astra (max)OpenAI
0.515
0.4450.7960.7850.380$3.32
3Claude Opus 5 (max)Anthropic
0.468
0.3890.7860.6180.393$4.46
4Claude Fable 5.1 (max)Anthropic
0.424
0.3320.7950.5350.369$3.09
5GPT-5.6 Sol (high)OpenAI
0.393
0.3190.6890.4970.341$1.88
6Muse Spark 1.3 (medium)ParetoMeta
0.358
0.2460.8070.6330.221$0.07
7GLM-5.3 Flash (max)open weightsZ.ai
0.320
0.1880.8480.4650.247$0.09
8Qwen 3.8 27B (thinking on)open weightsAlibaba
0.226
0.1180.6600.2970.191$0.26
9DeepSeek V4.1 Flash (high)open weightsParetoDeepSeek
0.210
0.0660.7870.1890.221$0.05
10Qwen 3.8 27B (thinking off)open weightsAlibaba
0.200
0.0830.6670.2660.166$0.28
11Inkling (high)Thinking Machines
0.198
0.0950.6090.1690.213$0.75
12Grok 4.6 (high)xAI
0.184
0.0440.7440.1970.178$0.26
13Gemma 4 31B (thinking on)open weightsParetoGoogle
0.126
0.0030.6150.1270.125$0.03
14Gemma 4 31B (thinking off)open weightsParetoGoogle
0.115
0.0010.5720.1120.116$0.02
+

14 coding-agent configurations · paper results on the original 20 public construction cases.

+

Code4Scene

Paper evaluation · score out of 100

Swipe to view all 14 configurations →

Sorted by score. Bar labels round scores ×100; the table preserves three decimal places. One color per model provider.

+

Code4Scene Pareto Frontier

Quality against the cost of one case · original 20-case public evaluation

Swipe to explore all configurations →

Solid: the frontier — nothing cheaper scores higher. One point per configuration, at its evaluated reasoning effort. Cost is the mean USD per case.

+
14 configurations
Ranking

20 public cases. Case score = 0.2 × Detailed + 0.6 × Overview + 0.2 × Physical. Detailed and Overview are means of the per-case scores.

#Agent configurationScoreDetailedOverviewPhysicalCost / case
1Claude Fable 5.1 (max)ParetoAnthropic
0.788
0.7250.7720.898$18.16
2GPT-6 Astra (max)OpenAI
0.724
0.7070.7330.712$22.47
3Claude Opus 5 (max)Anthropic
0.718
0.6310.7160.811$34.50
4GPT-5.6 Sol (high)ParetoOpenAI
0.707
0.6320.7100.772$4.07
5Gemini 3.8 Flash (high)ParetoGoogle
0.657
0.6370.6640.655$2.49
6Muse Spark 1.3 (medium)ParetoMeta
0.646
0.5980.6610.651$0.10
7Grok 4.6 (high)xAI
0.567
0.5220.5760.585$4.33
8Qwen 3.8 27B (thinking off)open weightsAlibaba
0.557
0.5070.5300.688$0.49
9Qwen 3.8 27B (thinking on)open weightsAlibaba
0.516
0.5050.4600.694$0.33
10GLM-5.3 Flash (max)open weightsZ.ai
0.509
0.4030.5370.533$0.71
11Gemma 4 31B (thinking on)open weightsParetoGoogle
0.471
0.4120.4160.694$0.03
12Gemma 4 31B (thinking off)open weightsParetoGoogle
0.455
0.4380.3700.725$0.02
13Inkling (high)Thinking Machines
0.425
0.3930.3370.722$0.20
14DeepSeek V4.1 Flash (high)open weightsDeepSeek
0.243
0.2170.1610.513$0.19

Click a column to sort. Pareto: on the score-against-cost frontier.

Visualizing agent outputs

-

Drag any scene to inspect the saved 3D output. Compare repairs with their corrupted inputs and ground truth, or open a case to explore every agent.

-
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Nordic Harbour

GPT-6 Astra (max) · score 0.877

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Medieval Big Farm Town

Claude Fable 5.1 (max) · score 0.830

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Egyptian Temple

Claude Opus 5 (max) · score 0.777

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Bazaar

Claude Fable 5.1 (max) · score 0.930

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Image-to-Scene

Old Industrial Pallet Bay

GPT-6 Astra (max) · score 1.000

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Image-to-Scene

New York Mailbox Pair

Claude Fable 5.1 (max) · score 1.000

Compare all 14 agents ↗
- +

Drag any scene to inspect the saved 3D output, or open a case to explore every agent.

+
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Nordic Harbour

GPT-6 Astra (max) · score 0.877

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Medieval Big Farm Town

Claude Fable 5.1 (max) · score 0.830

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Egyptian Temple

Claude Opus 5 (max) · score 0.777

Compare all 14 agents ↗
Loading 3D scene…Drag to orbit · Scroll to zoom
Text-to-Scene

Bazaar

Claude Fable 5.1 (max) · score 0.930

Compare all 14 agents ↗
+
-

Takeaways

+

Takeaway

What the evaluation shows across the 14 agents. Every chart below is drawn from the paper's numbers; hover for values.

-
Takeaway 1

Construction and editing probe different capabilities: scene-level spatial reasoning and precise control of scene state.

Despite nearly identical overall scores, Astra is stronger at construction and Gemini at editing.

Text-to-Scene (construction)Image-to-Scene (editing)
← Text-to-SceneImage-to-Scene →0.7240.515GPT-6 Astra0.6570.581Gemini 3.8 Flash0.7880.424Claude Fable 5.10.7180.468Claude Opus 50.7070.393GPT-5.6 Sol0.6460.358Muse Spark 1.30.5090.320GLM-5.3 Flash0.5570.200Qwen 3.8 27B · off0.5670.184Grok 4.60.5160.226Qwen 3.8 27B · on0.4250.198Inkling0.4710.126Gemma 4 31B · on0.4550.115Gemma 4 31B · off0.2430.210DeepSeek V4.1 Flash
Text-to-Scene (left) and Image-to-Scene (right) score per agent, in overall order (paper Table 2). Astra and Gemini both round to 0.619 overall.
Takeaway 2

Spatial Composition remains the weakest requirement family for all 14 agents.

Errors persist even when the required objects are present: generating the right objects does not ensure that their relationships satisfy the specification.

Requirement-family score per agent
Identity & EnvironmentContent & QuantityAttributes & MaterialsSpatial Composition
0.20.40.60.81.0GPT-6 AstraGemini 3.8 FlashClaude Fable 5.1Claude Opus 5GPT-5.6 SolMuse Spark 1.3GLM-5.3 FlashQwen 3.8 27B · offGrok 4.6Qwen 3.8 27B · onInklingGemma 4 31B · onGemma 4 31B · offDeepSeek V4.1 FlashMean of 140.360.67
Each row is one agent's four family scores; the orange dot, Spatial Composition, is the lowest in every row (paper Figure 14b).
The objects are there; the relation is not
Loading 3D scene…Drag to orbit · Scroll to zoom
✓ slab roof 0.95✓ stone coping 0.82✗ slab roof enclosed by the coping 0.78
GPT-5.6 Sol’s saved Egyptian Temple scene. The judge finds the roof and stone coping, but flags their spatial relationship. View the judge’s evidence ↗
Mismatch rate when the required objects are present
Spatial relation32.0%Distribution19.1%Composition4.3%
Across the benchmark (paper Figure 6a).
Takeaway 3

Editing ability varies substantially across repair types.

Astra performs best on Transform repairs, while Gemini is stronger on Lifecycle and Layout operations.

GPT-6 AstraGemini 3.8 FlashClaude Fable 5.1Claude Opus 5Restore0.3240.3760.2440.388Lifecycle0.5770.7150.5540.593Layout0.5960.7030.4640.512Symmetry0.4660.5440.5550.359Transform0.6130.5320.3530.406
Mean Image-to-Scene score by repair type for four agents; the outlined cell is the best of the four in its row (paper Figure 6b).
Takeaway 4

Recovering the target does not guarantee precise editing.

Across all 14 configurations, 35.8% of complete recoveries still contain unintended changes to the surrounding scene.

1,050Image-to-Scene evaluations (14 agents × 75 cases)
212recovered every target completely
76 · 35.8%of those still changed the surrounding scene
unintended editsclean complete recoveryno complete recovery
One dot per Image-to-Scene evaluation (paper Figure 6c).
+
Takeaway

Spatial Composition remains the weakest requirement family for all 14 agents.

Errors persist even when the required objects are present: generating the right objects does not ensure that their relationships satisfy the specification.

Requirement-family score per agent
Identity & EnvironmentContent & QuantityAttributes & MaterialsSpatial Composition
0.20.40.60.81.0GPT-6 AstraGemini 3.8 FlashClaude Fable 5.1Claude Opus 5GPT-5.6 SolMuse Spark 1.3GLM-5.3 FlashQwen 3.8 27B · offGrok 4.6Qwen 3.8 27B · onInklingGemma 4 31B · onGemma 4 31B · offDeepSeek V4.1 FlashMean of 140.360.67
Each row is one agent's four family scores; the orange dot, Spatial Composition, is the lowest in every row (paper Figure 14b).
The objects are there; the relation is not
Loading 3D scene…Drag to orbit · Scroll to zoom
✓ slab roof 0.95✓ stone coping 0.82✗ slab roof enclosed by the coping 0.78
GPT-5.6 Sol’s saved Egyptian Temple scene. The judge finds the roof and stone coping, but flags their spatial relationship. View the judge’s evidence ↗
Mismatch rate when the required objects are present
Spatial relation32.0%Distribution19.1%Composition4.3%
Across the benchmark (paper Figure 6a).

Cite This Work

@misc{ye2026code4scene,
   title         = {Code4Scene: Benchmarking Coding Agents for Constructing and Editing 3D Scenes},
@@ -50,12 +48,12 @@ svg.ch .dim{opacity:.42}svg.ch g.row:hover{opacity:1}svg.ch .hot{fill:var(--c4s-
   url           = {https://arxiv.org/abs/2609.36777},
 }
- \ No newline at end of file + \ No newline at end of file diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra.jpg deleted file mode 100644 index 31b1670ffa9a52d2afa13bf7523a686567a72e10..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra_full.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra_full.jpg deleted file mode 100644 index 7d8d4ec6d3aa2710cf4543b8b754134e6155a54a..0000000000000000000000000000000000000000 --- a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/astra_full.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2428eabd4fc7e7ae35f49002191401f5d76e43bce2e9126a88eb31f089a78738 -size 258441 diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/deepseek.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/deepseek.jpg deleted file mode 100644 index f2567098ba4fac5fc558bd1ee4995709535a10b2..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/deepseek.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/fable.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/fable.jpg deleted file mode 100644 index 2b78ac2449e90c80cff7a5b3f1f8f50e4f91a164..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/fable.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemini.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemini.jpg deleted file mode 100644 index 02b0d2dccaedd04053a63663a315755553aaec4e..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemini.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-off.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-off.jpg deleted file mode 100644 index b3a401d5596de2cffa7209607a6df77ea6a23f4a..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-off.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-on.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-on.jpg deleted file mode 100644 index 84ba849313f7521a6b68c0bc04171eb2d2fd4bb4..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gemma-on.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/glm.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/glm.jpg deleted file mode 100644 index 308d5ec002f6e2a1a95f5d8384c37f25a39647ab..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/glm.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/grok.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/grok.jpg deleted file mode 100644 index c6a92ead328219a1a941d9a77ee02d8ba76459ac..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/grok.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gt.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gt.jpg deleted file mode 100644 index e5851e7ee8e4a07bc0e01cd0236cba3b5789943b..0000000000000000000000000000000000000000 --- a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/gt.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f12f8640243069fe0e322717baf3be59ca1f7cf48aa89db5b24ef506671cb58 -size 255782 diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling.jpg deleted file mode 100644 index e73cf79212a85f1c8d50e7b156aab79c41249d5a..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling_full.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling_full.jpg deleted file mode 100644 index ee27e5059bf205a15b41e8ea1fa561dd4171e418..0000000000000000000000000000000000000000 --- a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/inkling_full.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57dc6b976c35c6a0f3a47a28de6c9ccd202f37e3ca2a19a11469f4c18a5db986 -size 170357 diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/muse.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/muse.jpg deleted file mode 100644 index 51e096b657b90ba674569e21a8cc92689ade403b..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/muse.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/opus.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/opus.jpg deleted file mode 100644 index b154b9d07cfcbe99877919b7888b48e4a3c86914..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/opus.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-off.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-off.jpg deleted file mode 100644 index e8438500652a66f2b55aa8b7730caf7d073945ad..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-off.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-on.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-on.jpg deleted file mode 100644 index fbbc3b0f0da5d03ccbaf2eb3261629430ce9a490..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/qwen-on.jpg and /dev/null differ diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/ref-1.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/ref-1.jpg deleted file mode 100644 index 1b580f871707d8d449204d9ced8beb9cf43508fd..0000000000000000000000000000000000000000 --- a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/ref-1.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c8257406259a3fcc0e74b435099098bdca15e811eee01b2162be84a29e92cf9 -size 161932 diff --git a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/sol.jpg b/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/sol.jpg deleted file mode 100644 index 5a1efc82c10b92abac98f9e5210ef8b02bcbea32..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-31-old-industrial-pallet-bay-repair-v2/sol.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/astra.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/astra.jpg deleted file mode 100644 index 336517507bb29c2b0467030fa74271ab77d7e984..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/astra.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek.jpg deleted file mode 100644 index 0a75b1ca206b172280812a60c64b1c3882f7ac8f..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek_full.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek_full.jpg deleted file mode 100644 index 87cf60dffda00e2ebde35f7f7d4ee4b16bd70e26..0000000000000000000000000000000000000000 --- a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/deepseek_full.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:96f999b53f3e393ca2b9c52f370316194aed7cf343a9ea2261832d1fbd78be00 -size 203722 diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/fable.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/fable.jpg deleted file mode 100644 index 8f745ad544494faa4adea6d3fb859cc8d56c734b..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/fable.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemini.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemini.jpg deleted file mode 100644 index 5d6d7cc3caabda5eecc4a0b4b14e922a204d5ed3..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemini.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-off.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-off.jpg deleted file mode 100644 index c6d444364f9e92c51b68e438bebcbd43e85a0606..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-off.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-on.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-on.jpg deleted file mode 100644 index 3837f2b480936b576ccbe07384f3f593582957fe..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gemma-on.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/glm.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/glm.jpg deleted file mode 100644 index 3e5d228aef160073099c68b06b15118fb567181f..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/glm.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/grok.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/grok.jpg deleted file mode 100644 index 16e67d3d2a7c14aaff9b451de57f3cbec1a46f91..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/grok.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gt.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gt.jpg deleted file mode 100644 index 919029265f3c16a154b36ee15b9b3cf1174b96e1..0000000000000000000000000000000000000000 --- a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/gt.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aae7442f73199b06f9a81c06431bcb88eba33d05a24785a8f67349b8f8ca2248 -size 204033 diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/inkling.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/inkling.jpg deleted file mode 100644 index 23bf93b1bee684ee9dae2b463fb9671ed19972b7..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/inkling.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/muse.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/muse.jpg deleted file mode 100644 index f954139d17acd0966dc08787a77eb39307485d55..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/muse.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus.jpg deleted file mode 100644 index 4da10b16f610698ba1e2ff8f27bea804eff3b47a..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus_full.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus_full.jpg deleted file mode 100644 index cb9a379d9181983e822e652be9370ddaac9f5c10..0000000000000000000000000000000000000000 --- a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/opus_full.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5fc3a2bc6140e07ce07922e1a3b05664a7725738fb079a6e3615267767c4fbd7 -size 200996 diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-off.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-off.jpg deleted file mode 100644 index 94da006fbc3e5898ea9293d65b35046426f2f504..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-off.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-on.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-on.jpg deleted file mode 100644 index 2b3a54c9b4bfd5707e545ac1cdcec9817c6535ef..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/qwen-on.jpg and /dev/null differ diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/ref-1.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/ref-1.jpg deleted file mode 100644 index b2fa77ebaf5cbda5db275793429454c7aa9a7f69..0000000000000000000000000000000000000000 --- a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/ref-1.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a614b6ed99e735d7e726690039d8ffeda2137bce7ca806eadfdebb3c6dd7c9d8 -size 154708 diff --git a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/sol.jpg b/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/sol.jpg deleted file mode 100644 index c172ff3a1ced5d80d3bf022881821d08e085cd69..0000000000000000000000000000000000000000 Binary files a/media/i2s/comp-61-new-york-mailbox-pair-repair-v2/sol.jpg and /dev/null differ diff --git a/media/teaser-v31.mp4 b/media/teaser-v31.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..123b276d8a2fabfef2df3b211906569aa875ffc5 --- /dev/null +++ b/media/teaser-v31.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d10f2a06c1684339bdd83add7dea93ae2838c35c632aac084aeb93d5a7d4666f +size 21703270 diff --git a/media/teaser.mp4 b/media/teaser.mp4 deleted file mode 100644 index fddbd24830ddc5e724ce88f321dc6db275d46d8f..0000000000000000000000000000000000000000 --- a/media/teaser.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8040b36738ae4306fe7ff6dcccb80b5f80ffd163787dd03fe31ac3dc85a5271b -size 21601144 diff --git a/models/38071c69a86d174dc55f.bin b/models/38071c69a86d174dc55f.bin deleted file mode 100644 index 69cabb4321839aa2af38d81622f17dd88243b1b2..0000000000000000000000000000000000000000 --- a/models/38071c69a86d174dc55f.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:382ac2c033f39e59675262de43670afea3e7d0ae1f5ab7ea144766dd8d3f4b0d -size 7634384 diff --git a/models/46734878f740aae816d8.bin b/models/46734878f740aae816d8.bin deleted file mode 100644 index b776743a9600ff31673a15ad034b0895c00d6aa8..0000000000000000000000000000000000000000 --- a/models/46734878f740aae816d8.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a56c7af6257426b2648aaaa40771994d50f703737baefefbf9ce38954414cfa5 -size 8173240 diff --git a/models/486b4742affe835723a3.bin b/models/486b4742affe835723a3.bin deleted file mode 100644 index ac0c240552adea63285f2f1ea0aa2a9bdef52b66..0000000000000000000000000000000000000000 --- a/models/486b4742affe835723a3.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:337244b0898058cdc927ec17dc7c0fc08f29216e3ac02b2fbce7d1115aff925d -size 7634676 diff --git a/models/66da6868d20ebb100197.bin b/models/66da6868d20ebb100197.bin deleted file mode 100644 index 8ac349c6041f2b162cd4c3736155c04722e34e8e..0000000000000000000000000000000000000000 --- a/models/66da6868d20ebb100197.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9066c3ecac3cbb912f2ba8aba2bd2b00dab8af66ed7af9422c94f0bf74bfaf9d -size 7634592 diff --git a/models/6afbbaec6b7a4271b21f.bin b/models/6afbbaec6b7a4271b21f.bin deleted file mode 100644 index d311e60fd74958669084725d451974e3429b685d..0000000000000000000000000000000000000000 --- a/models/6afbbaec6b7a4271b21f.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6e7bf9288aba68d24da78b34023d1fd8ee266b29516cb39b9898b4944182a06 -size 7634280 diff --git a/models/7daf8107bb630cffdc18.bin b/models/7daf8107bb630cffdc18.bin deleted file mode 100644 index ed969fc5f04d4b05247c0c183e9845e5f1ef9fb5..0000000000000000000000000000000000000000 --- a/models/7daf8107bb630cffdc18.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:587f112df975584f5de081be644500286456e11e3a8f05fa76cf646c20f90565 -size 8175548 diff --git a/models/c79715b9e6967c4f6c90.bin b/models/c79715b9e6967c4f6c90.bin deleted file mode 100644 index 1e69bcad8cc765aed58eb6e2cbc3d148d4b44129..0000000000000000000000000000000000000000 --- a/models/c79715b9e6967c4f6c90.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e7b4618a3517a986e1e36ab8e0bdbe66047d3641e64298c1a23c5dc7775d791 -size 7634448 diff --git a/models/db5c0c5d2b78f9e47bb7.bin b/models/db5c0c5d2b78f9e47bb7.bin deleted file mode 100644 index 4553b89b6f5ab2ba3d9084e67292fabe403d59b0..0000000000000000000000000000000000000000 --- a/models/db5c0c5d2b78f9e47bb7.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba92effe3a190dca01d426fd2494911a06a6c3239f0ea1da72828a71369833e6 -size 8173352 diff --git a/models/e6a6333939ccfe57d584.bin b/models/e6a6333939ccfe57d584.bin deleted file mode 100644 index 91f23d26896f926d3041cac3902269b5a5ed95bd..0000000000000000000000000000000000000000 --- a/models/e6a6333939ccfe57d584.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6912d973ed45866ca45ed3ffae73681486fe318510d26e5e9888e3de21178985 -size 8173556 diff --git a/models/e9177d0cbf727df88100.bin b/models/e9177d0cbf727df88100.bin deleted file mode 100644 index 29a70a80ce7726d923c31da4073a0e8d5cbdb26f..0000000000000000000000000000000000000000 --- a/models/e9177d0cbf727df88100.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6b9135268824348cafad1d53c13d163d483a364cf3a4e979a54079eeb686254 -size 7634692 diff --git a/models/f2b2b285e27a26ee6780.bin b/models/f2b2b285e27a26ee6780.bin deleted file mode 100644 index ce279d4c4d71164618c67980cecf7df9830718ab..0000000000000000000000000000000000000000 --- a/models/f2b2b285e27a26ee6780.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b377aaa04976f50647e8fea3460d1e83f30808d2555a0260854b2072388859b6 -size 8173344 diff --git a/models/f3648a5ad9887ac0937d.bin b/models/f3648a5ad9887ac0937d.bin deleted file mode 100644 index a079504820c40edf78cddff961be0ad69cc649a4..0000000000000000000000000000000000000000 --- a/models/f3648a5ad9887ac0937d.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:458e50aaf44d700b2fbda8c0bcab6008053748963fb8237299e79139eaeeef4b -size 8173404 diff --git a/models/progressive-v1/geo-2cb0699fcdfbb0077b14a03a.bin b/models/progressive-v1/geo-2cb0699fcdfbb0077b14a03a.bin deleted file mode 100644 index b99174704c451633b6bc08a3eb72f78b11779780..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-2cb0699fcdfbb0077b14a03a.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bff1001b5a26f15eee108e1132b5111ba48471cfde831ca77a68aa05fdf58750 -size 5524504 diff --git a/models/progressive-v1/geo-ab194913839cc37985edc5c8.bin b/models/progressive-v1/geo-ab194913839cc37985edc5c8.bin deleted file mode 100644 index f1dad6a359b96a1dc7246387fda20e0572d6ff5f..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-ab194913839cc37985edc5c8.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:35c2562176df2b8910475416aeb6458cb2bff747c9b07d14f32c57a56b5e66ea -size 5524192 diff --git a/models/progressive-v1/geo-b0e37abcf8f8538d5c7c567d.bin b/models/progressive-v1/geo-b0e37abcf8f8538d5c7c567d.bin deleted file mode 100644 index 3e78eddde8351d5397c39ea32210ca99baeec31c..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-b0e37abcf8f8538d5c7c567d.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e80ec4defc3922ccefa5e71212d9d3fc21882c5db88285455615719315fa9bc8 -size 5524292 diff --git a/models/progressive-v1/geo-cfc8f9530bbdf82e9ad5803e.bin b/models/progressive-v1/geo-cfc8f9530bbdf82e9ad5803e.bin deleted file mode 100644 index 1499954db749cd8b573d232d65156aaa7b524e74..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-cfc8f9530bbdf82e9ad5803e.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c13dd111bc77897f60d64b4ffe1ce256d3e44f950381762f7e0046a046150a82 -size 6144796 diff --git a/models/progressive-v1/geo-f52df859622b51e5a8e79b7f.bin b/models/progressive-v1/geo-f52df859622b51e5a8e79b7f.bin deleted file mode 100644 index 7042ca482dde8eef6dd1416cdba66642f07faea4..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-f52df859622b51e5a8e79b7f.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c8b5581c2c5ce1999e1a3d3adae0f610a904820963ff4be84bb70e19bf072e3 -size 6145112 diff --git a/models/progressive-v1/geo-fbdfbee814c5ec5bbbd7b049.bin b/models/progressive-v1/geo-fbdfbee814c5ec5bbbd7b049.bin deleted file mode 100644 index 0844e13c38d43a98e78086b47eb927ccd5124989..0000000000000000000000000000000000000000 --- a/models/progressive-v1/geo-fbdfbee814c5ec5bbbd7b049.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ce75ed4b3087e84bf62c608cff771f1a7d100126374590f263f7b1516f78afb -size 6144908 diff --git a/models/progressive-v1/tex-012c8e3c3ec399a5e3814072.bin b/models/progressive-v1/tex-012c8e3c3ec399a5e3814072.bin deleted file mode 100644 index ee515a1ff53b19cc898f72afde8e131c3df4f6ba..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-012c8e3c3ec399a5e3814072.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7b600f787d580d23d63f19b506ef498d0f747d76f5cb9c69ba3a2ce13ce9ed6 -size 235174 diff --git a/models/progressive-v1/tex-1c281547b397376efd0199f4.bin b/models/progressive-v1/tex-1c281547b397376efd0199f4.bin deleted file mode 100644 index c3312ea5151b2a3b170d57481cafe3cfce35f228..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-1c281547b397376efd0199f4.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06e4053254de95a64ddefa098cee389a73fbc909419cca880cf7a2937ce33b41 -size 127330 diff --git a/models/progressive-v1/tex-1f1e882fba2f5973b698e4eb.bin b/models/progressive-v1/tex-1f1e882fba2f5973b698e4eb.bin deleted file mode 100644 index 975b1d6a98c2c60ee64a6b20226b96c580dca858..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-1f1e882fba2f5973b698e4eb.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fa34efaa8af420eae7667f6848fd5c5c7106c1044813cab468d6c6481bb49e2 -size 226390 diff --git a/models/progressive-v1/tex-2452f0e9439a921b6ddef41f.bin b/models/progressive-v1/tex-2452f0e9439a921b6ddef41f.bin deleted file mode 100644 index c46ab5033927c8d490a9ae8a33fc107cd3242bf6..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-2452f0e9439a921b6ddef41f.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:74c27a4385573ee86a08a37c4f9e9d7c79e873a2f23494d76916095f409d516d -size 261254 diff --git a/models/progressive-v1/tex-60a1d5975059cf1464d7e63d.bin b/models/progressive-v1/tex-60a1d5975059cf1464d7e63d.bin deleted file mode 100644 index d748c9fe4100469e1be5daeefb433d47a6fe6005..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-60a1d5975059cf1464d7e63d.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5acb7c239d9612f05250503aa1d9b96d34fc751b711b47013ccf90ce650829ca -size 180404 diff --git a/models/progressive-v1/tex-62e57d9806cfa50c8907036d.bin b/models/progressive-v1/tex-62e57d9806cfa50c8907036d.bin deleted file mode 100644 index fc46cfdd1b0fe970388b7db139370f93e0fef149..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-62e57d9806cfa50c8907036d.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c7f17e45f852be3c9d65bcfa3781592c6b26ee4de6484143e9ebf6b8860b979 -size 163086 diff --git a/models/progressive-v1/tex-787aa264f2ab67e4714dd87d.bin b/models/progressive-v1/tex-787aa264f2ab67e4714dd87d.bin deleted file mode 100644 index 0064c42c062b802ab2708d5fbe08a74d981bd4ad..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-787aa264f2ab67e4714dd87d.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5e5170b9116ce6a828b4fda401efdf96cd101ab60ddd1313cba4ccdc2352b5c -size 167396 diff --git a/models/progressive-v1/tex-80312b3d120467ae6a6d0c5c.bin b/models/progressive-v1/tex-80312b3d120467ae6a6d0c5c.bin deleted file mode 100644 index ffa0bbef97e465e6de728420e1460c9719dd6f06..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-80312b3d120467ae6a6d0c5c.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a624930bccb545fef20b993ab2e809d38cae476ff8712800347d7ff834f282b7 -size 275902 diff --git a/models/progressive-v1/tex-89b9c55ddabdd596bb39e1b0.bin b/models/progressive-v1/tex-89b9c55ddabdd596bb39e1b0.bin deleted file mode 100644 index 77615b7bc96c67f7b86a96c43df78d27bddc7fc5..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-89b9c55ddabdd596bb39e1b0.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d48186a4b603a37110ae537a7fd00262b7aaee4a1a216843c53d7204bdeebf4 -size 203236 diff --git a/models/progressive-v1/tex-8eb5e2b95996e3395d479ec7.bin b/models/progressive-v1/tex-8eb5e2b95996e3395d479ec7.bin deleted file mode 100644 index 0da6262e7810a74f549ddde5a32ea68850620ee5..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-8eb5e2b95996e3395d479ec7.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d2891460a4d34a397c6d7109da7e1c6c24f9925711a29182e1306304f1575a1 -size 225566 diff --git a/models/progressive-v1/tex-963facb3e164ec96503ed7ca.bin b/models/progressive-v1/tex-963facb3e164ec96503ed7ca.bin deleted file mode 100644 index bc62650cea2b328fa345ef1c8959597c756b9475..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-963facb3e164ec96503ed7ca.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a8bab1693b3f0f3d17278f4daf0192f64f452acedeca3c3d70263f9b8aa8bad -size 300832 diff --git a/models/progressive-v1/tex-9a41f5863878bed1ee54fb91.bin b/models/progressive-v1/tex-9a41f5863878bed1ee54fb91.bin deleted file mode 100644 index 9fba4e52014eae6e5bfadd354efe3643545ef528..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-9a41f5863878bed1ee54fb91.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:449c3e020c5697925cc52a26bccc3ef04bf2766be82f14d96355f1df1cecfb59 -size 566968 diff --git a/models/progressive-v1/tex-b50f6625c3e5be695c7d28ec.bin b/models/progressive-v1/tex-b50f6625c3e5be695c7d28ec.bin deleted file mode 100644 index 9656e175a24e808a0b042ddbb05cc684306e465c..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-b50f6625c3e5be695c7d28ec.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c7010abc09c878bf05dcb305302f794d13dca0ae0bbe734d1c7f10cdf62bd01 -size 326182 diff --git a/models/progressive-v1/tex-b5533e545d0dc348c6891056.bin b/models/progressive-v1/tex-b5533e545d0dc348c6891056.bin deleted file mode 100644 index ffc8f85ccd6ead32096afe2d802962728c10c521..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-b5533e545d0dc348c6891056.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e95ae9c8701fa268c508f2fab3083644077d1cfa19aaa9210cb1c0be84db3c2f -size 276668 diff --git a/models/progressive-v1/tex-c322bd73af19935404c3166c.bin b/models/progressive-v1/tex-c322bd73af19935404c3166c.bin deleted file mode 100644 index 982c52906739bc86ac22d2102e2f2f4f63d8ffd9..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-c322bd73af19935404c3166c.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d25d238d5d9111d06f30d66f08314e2bef359f79ae02635641683321424c1a43 -size 277766 diff --git a/models/progressive-v1/tex-dcec8d0a78a3535ce1ec0d50.bin b/models/progressive-v1/tex-dcec8d0a78a3535ce1ec0d50.bin deleted file mode 100644 index a83729d8276ba624eb493f03282711fafdbbb3e6..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-dcec8d0a78a3535ce1ec0d50.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5cc2b484204ddf73e2a9b0407c8e70598ecfbedda270a7c24a2e2de3487dea6f -size 217614 diff --git a/models/progressive-v1/tex-e953bcfc3967684c77da0c67.bin b/models/progressive-v1/tex-e953bcfc3967684c77da0c67.bin deleted file mode 100644 index 9496996be80234ee2abeedf69163429220d6a28b..0000000000000000000000000000000000000000 --- a/models/progressive-v1/tex-e953bcfc3967684c77da0c67.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:559ba0c1fe91762b01edb230001f0e53e01abc3dcdf5eb32c911354a3ab37320 -size 169914 diff --git a/scripts/t2s_only.py b/scripts/t2s_only.py new file mode 100644 index 0000000000000000000000000000000000000000..df15362753ae5800747e5a935c894cf23d680ef7 --- /dev/null +++ b/scripts/t2s_only.py @@ -0,0 +1,142 @@ +"""Make the page Text-to-Scene only (user, 2026-10-01: drop Image-to-Scene from the video, the site and the figures). + +Edits index.html, cases data and the bar script in place. Each step asserts it found what it edits, so a re-run on an +already-edited page, or on a page whose structure has moved, stops instead of silently doing half the job. + python3 scripts/t2s_only.py +""" +from __future__ import annotations +import json, re +from pathlib import Path +from bs4 import BeautifulSoup, NavigableString + +ROOT = Path(__file__).resolve().parent.parent +I2S_CASES = ("comp-31-old-industrial-pallet-bay-repair-v2", "comp-61-new-york-mailbox-pair-repair-v2") + + +def one(found, what): + assert found is not None, f"not found: {what}" + return found + + +def index(): + p = ROOT / "index.html" + soup = BeautifulSoup(p.read_text(), "html.parser") + # head + one(soup.title, "title").string = "Code4Scene: Benchmarking Coding Agents for Constructing 3D Scenes" + one(soup.find("meta", attrs={"name": "description"}), "meta description")["content"] = ( + "A benchmark that scores the engine-native 3D scenes coding agents build in Unreal Engine from open-ended descriptions.") + # intro + intro = one(soup.find(id="top"), "intro") + h1 = one(intro.find("h1"), "intro h1") + h1.clear(); h1.append("Constructing"); h1.append(soup.new_tag("br")); em = soup.new_tag("em"); em.string = "3D Scenes with Code"; h1.append(em) + one(intro.find(class_="intro-text"), "intro text").string = ( + "Benchmarking coding agents that turn open-ended scene descriptions into engine-native 3D scenes in Unreal Engine. " + "Measuring spatial reasoning, task fulfillment and physical validity.") + cap = one(intro.find(class_="featured-video-caption"), "video caption").find("span") + one(cap, "video caption span").string = "Construction and evaluation" + # the teaser is v31 (no editing subtitle on its end card), under a new name so cached copies of the old cut are not reused + for src in intro.find_all("source"): + src["src"] = "media/teaser-v31.mp4" + for a in intro.find_all("a", href="media/teaser.mp4"): + a["href"] = "media/teaser-v31.mp4" + # task format: the construction example alone, without a one-tab tab bar + tf = one(soup.find(id="task-format"), "task format") + one(tf.find(id="task-i2s"), "task-i2s").decompose() + one(tf.find(class_="task-tabs"), "task tabs").decompose() + # leaderboard: Text-to-Scene only (the overall score is half Image-to-Scene) + lb = one(soup.find(id="leaderboard"), "leaderboard") + one(lb.find(class_="lb-tabs"), "leaderboard tabs").decompose() + for el in lb.find_all(attrs={"data-view": True}): + if el.get("data-view") in ("overall", "i2s"): + el.decompose() + else: + st = (el.get("style") or "").replace("display:none", "").strip(" ;") + if st: el["style"] = st + else: del el["style"] + desc = one(lb.find(class_="section-desc"), "leaderboard desc") + desc.string = "14 coding-agent configurations · paper results on the original 20 public construction cases." + sub = one(lb.find(class_="figure-subtitle"), "pareto subtitle") + sub.string = "Quality against the cost of one case · original 20-case public evaluation" + for t in lb.find_all(class_="figure-caption"): + t.string = re.sub(r"\s*Cost is the mean USD per case; ov.*$", " Cost is the mean USD per case.", t.get_text()) + # cases: the four construction cases + cs = one(soup.find(id="cases"), "cases") + removed = 0 + for scene in cs.find_all(attrs={"data-case": True}): + if scene["data-case"] in I2S_CASES: + card = scene + while card.parent is not None and card.parent.name != "body" and card.parent.get("id") != "cases" and \ + not any(c for c in (card.parent.get("class") or []) if "grid" in c): + card = card.parent + card.decompose(); removed += 1 + assert removed == 2, removed + for p_ in cs.find_all("p"): + if "Compare repairs" in p_.get_text(): + p_.string = "Drag any scene to inspect the saved 3D output, or open a case to explore every agent." + # takeaways: Spatial Composition only + tk = one(soup.find(id="takeaways"), "takeaways") + kept = 0 + for card in tk.find_all(class_="tk"): + h = " ".join(one(card.find("h3"), "takeaway h3").get_text(" ").split()) + if h.startswith("Spatial Composition remains"): + kept += 1 + for n in card.find_all(class_="n"): + n.string = "Takeaway" + else: + card.decompose() + assert kept == 1, kept + for h in tk.find_all("h2"): + if h.get_text(strip=True) == "Takeaways": + h.string = "Takeaway" + # the case-count strip: construction counts only + av = one(soup.find(class_="availability"), "availability strip") + spans = av.find_all("span", recursive=False); assert len(spans) == 2 + spans[0].b.string = "160"; spans[0].b.next_sibling.replace_with(" construction cases in the full benchmark target, including private cases") + spans[1].b.string = "129"; spans[1].b.next_sibling.replace_with(" public construction cases") + # nav label + for a in soup.find_all("a"): + if a.get_text(strip=True) == "Takeaways": + a.string = "Takeaway" + p.write_text(str(soup)) + left = re.findall(r"(?i)image-to-scene|\bi2s\b|repair|corrupted", p.read_text()) + print("index.html: remaining editing mentions:", len(left)) + + +def bars(): + p = ROOT / "assets/leaderboard-bars.js" + s = p.read_text() + m = re.search(r"const ALL = (\{.*?\});\n", s, re.S) + data = json.loads(one(m, "const ALL").group(1)) + assert set(data) >= {"t2s"}, data.keys() + s = s[:m.start(1)] + json.dumps({"t2s": data["t2s"]}) + s[m.end(1):] + p.write_text(s) + print("leaderboard-bars.js: views", list(json.loads(re.search(r"const ALL = (\{.*?\});\n", s, re.S).group(1)))) + + +def site_data(): + p = ROOT / "data/site.js" + S = json.loads(p.read_text().split("=", 1)[1].rstrip().rstrip(";")) + before = len(S["cases"]) + S["cases"] = [c for c in S["cases"] if c["track"] == "t2s"] + p.write_text("window.SITE = " + json.dumps(S) + ";\n") + print("data/site.js: cases", before, "->", len(S["cases"])) + # the cases page states the counts in its header + n3d = sum(1 for c in S["cases"] for a in c["agents"] if a.get("glb")) + sum(1 for c in S["cases"] for k in ("gt_glb", "input_glb") if c.get(k)) + cp = ROOT / "cases.html"; cs = cp.read_text() + cs = re.sub(r"\d+ cases, \d+ scenes in 3D", f'{len(S["cases"])} cases, {n3d} scenes in 3D', cs); cp.write_text(cs) + + +# the packed model files of the two Image-to-Scene cases (repairs, ground truth, corrupted input), from data/site.js before this edit +I2S_MODELS = ["38071c69a86d174dc55f.bin", "46734878f740aae816d8.bin", "486b4742affe835723a3.bin", "66da6868d20ebb100197.bin", "6afbbaec6b7a4271b21f.bin", "7daf8107bb630cffdc18.bin", "c79715b9e6967c4f6c90.bin", "db5c0c5d2b78f9e47bb7.bin", "e6a6333939ccfe57d584.bin", "e9177d0cbf727df88100.bin", "f2b2b285e27a26ee6780.bin", "f3648a5ad9887ac0937d.bin"] + + +def progressive(): + p = ROOT / "data/progressive-scenes.json" + d = json.loads(p.read_text()); n0 = len(d) + d = {k: v for k, v in d.items() if k not in I2S_MODELS} + p.write_text(json.dumps(d, indent=2) + "\n") + print("data/progressive-scenes.json:", n0, "->", len(d)) + + +if __name__ == "__main__": + index(); bars(); site_data(); progressive()