# GPT-6 Astra, one Blender prompt, three reasoning efforts One prompt ([PROMPT.txt](PROMPT.txt)) asking for a furnished living room in Blender, run through GPT-6 Astra in the Codex CLI at `low`, `medium` and `high` reasoning effort. One run per level, same machine, same day (4 September 2026), Codex Plus account. Every transcript, script, log, render and `.blend` file the model produced is in this repo, unedited, plus an inspection script that counts what is actually in each file. | | low | medium | high | |---|---|---|---| | wall clock | 3m45s | 7m09s | 10m08s | | Blender invocations | 1 | 2 | 5 | | times it looked at its own render | 1 | 2 | 3 | | fix passes after looking | 0 | 1 | 2 | | self-check | none | inline asserts | separate validator script on the evaluated mesh | | script lines | 177 | 325 | 380 | | walls built (prompt said "walls") | 2 | 4 | 4 | | objects | 616 | 737 | 707 | | unique geometries | 227 | 238 | 233 | | untouched primitives | 406 | 407 | 420 | | objects that are shape-copies | 71.9% | 72.5% | 71.4% | | modifiers | 894 | 936 | 932 | | rendered triangles | 123,352 | 123,264 | 174,272 | | non-manifold edges | 852 | 256 | 456 | | unrequested extras | none | lounge chair, side table, receiver, lamp cable | the same, plus a window and parented book rigs | Quota, read from the Codex plan panel after all three runs with no other Codex use that week: 5% of the weekly limit and 32% of a 5-hour window, for the three runs combined. ## What changed with effort The unique-geometry count and the untouched-primitive count are flat across a 2.7x range in wall clock. What scaled was verification: - **low** built the scene in one script, ran Blender once, viewed the render once, and reported done. It built two of the four walls. - **medium** viewed its render, then edited the script (smooth shading, hardened normals, piping re-aligned to the cushion tilt, welded leaf tips, a bmesh pass asserting no degenerate polygons and no default names), rebuilt, viewed again, done. - **high** viewed its render, fixed a wall-art overlap and the window trim, then wrote a second script, [`runs/high/verify_room.py`](runs/high/verify_room.py), that reopens the saved file and walks the evaluated mesh counting zero-area faces, loose edges, non-manifold edges and generic names. That found 48 zero-area faces on the coffee surface and 16 on the TV standby LED, caused by bevels wider than the parts. It clamped the bevel width, rebuilt, re-validated to a clean report, viewed the final render, done. The fixes that came from looking at a render were cosmetic. The fixes that came from the model's own validator were real geometry problems the render could not show. None of the runs searched for reference images. ## Layout ``` PROMPT.txt the prompt, verbatim RUN-LOG.md per-run notes: timings, what it did, what it built runs// PROMPT.txt copy the model saw in its working directory codex-session-*.md full Codex transcript export, unedited build_room.py the script the model wrote (final version) verify_room.py high only: the validator the model wrote build*.log, room_validation.* the model's own logs room-.blend the file it saved (medium also has its first-pass backup) room*preview.png the model's own render autopsy-report.json output of tools/inspect_blend.py on that .blend autopsy-beauty.png re-render from the file's own camera, EEVEE autopsy-wire.png same camera, wireframe tools/ inspect_blend.py counts objects, unique geometries, primitives, modifiers, tris render_pair.py beauty + wireframe from the same camera ``` ## Reproduce Each run was started from inside its own `runs//` folder so the model's working directory did not contain the previous run's script. The transcripts show what it listed and read. ```powershell cd runs\medium codex -c model_reasoning_effort="medium" -m gpt-6-astra # paste PROMPT.txt ``` Inspect any `.blend`: ```powershell blender -b runs\high\room-high.blend -P tools\inspect_blend.py -- --json report.json blender -b runs\high\room-high.blend -P tools\render_pair.py -- --out .\out --res 1600 900 ``` Blender 5.1.1 was used throughout. ## Definitions - **unique geometries**: meshes hashed by their local-space vertex positions. Two objects that are the same cube at different positions or scales count as one geometry. This is stricter than counting mesh datablocks, which misses scripts that create a fresh datablock per copy. - **untouched primitives**: meshes whose vertex/edge/face counts exactly match a default Blender primitive. A cube under a Bevel modifier still counts, because the base mesh is still 8 vertices on disk. The evaluated (post-modifier) triangle count is reported separately. - **times it looked at its own render**: `image:` steps in the Codex transcript, where the model requested to view a file. ## Caveats One run per effort level, one prompt, one machine. Read the numbers as a shape, not a benchmark. Reasoning effort was set per invocation with `-c model_reasoning_effort=...`; the account default and any `config.toml` setting were overridden. Timings are wall clock from prompt to the model's final message.