OpenAI GPT-5.4 Mini (Codex CLI)

2026-05-19T12-52-01Z_openai-gpt-5.4-mini-codex-cli

reference run: not executed on the Mac mini local LM Studio setup, included as a comparison target rather than a local-model result.

pass Visual sample result
3/3 Automated checks
1/1 SVG artifact

Verdict

visual sample
pass

1 artifact · 3/3 checks · pass

no failure labels
Prompt set v1_city_plan_svg.json
Run type reference
Temperature 0
Top P 1
Missed tasks 0/1

SVG Artifacts

1 artifact · 3/3 checks · pass
city_plan_3d_buildings_svg 3/3 · v1_city_plan_svg.json open SVG
city_plan_3d_buildings_svg SVG output

Task Results

Compact view; open a row for prompt and raw answer
Task Category Score Failed Checks Failure Types Prompt / Answer
city_plan_3d_buildings_svg svg 3/3 none none
Open

Prompt

Generate a valid standalone SVG of a city plan with a 3D-style representation of buildings.

Rules:
- SVG only
- no Markdown
- no external images
- no JavaScript
- include roads or city blocks
- include multiple buildings
- make at least some buildings appear 3D or isometric
- use simple vector shapes

Model answer

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800" role="img" aria-label="City plan with roads, blocks, and 3D-style buildings">
  <defs>
    <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#eef2f4"/>
      <stop offset="100%" stop-color="#dde4e8"/>
    </linearGradient>
    <linearGradient id="road" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0%" stop-color="#5d666d"/>
      <stop offset="100%" stop-color="#4b5359"/>
    </linearGradient>
    <linearGradient id="sideA" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#d9a66d"/>
      <stop offset="100%" stop-color="#b97a43"/>
    </linearGradient>
    <linearGradient id="sideB" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#b87d4a"/>
      <stop offset="100%" stop-color="#8f5b31"/>
    </linearGradient>
    <linearGradient id="roof1" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#f4d08d"/>
      <stop offset="100%" stop-color="#d6a95d"/>
    </linearGradient>
    <linearGradient id="roof2" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#9fc3e8"/>
      <stop offset="100%" stop-color="#6f9bc7"/>
    </linearGradient>
    <linearGradient id="roof3" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#b8d9b2"/>
      <stop offset="100%" stop-color="#7cab75"/>
    </linearGradient>
    <linearGradient id="roof4" x1="0" y1="0" x2="1" y2="1">
      <stop offset="0%" stop-color="#e4b2b2"/>
      <stop offset="100%" stop-color="#c77d7d"/>
    </linearGradient>
    <filter id="shadow" x="-20%" y="-20%" width="160%" height="160%">
      <feDropShadow dx="3" dy="4" stdDeviation="3" flood-color="#000000" flood-opacity="0.22"/>
    </filter>
  </defs>

  <rect width="1200" height="800" fill="url(#bg)"/>

  <rect x="0" y="110" width="1200" height="40" fill="url(#road)"/>
  <rect x="0" y="280" width="1200" height="44" fill="url(#road)"/>
  <rect x="0" y="455" width="1200" height="44" fill="url(#road)"/>
  <rect x="0" y="635" width="1200" height="44" fill="url(#road)"/>

  <rect x="140" y="0" width="42" height="800" fill="url(#road)"/>
  <rect x="330" y="0" width="42" height="800" fill="url(#road)"/>
  <rect x="530" y="0" width="42" height="800" fill="url(#road)"/>
  <rect x="740" y="0" width="42" height="800" fill="url(#road)"/>
  <rect x="930" y="0" width="42" height="800" fill="url(#road)"/>

  <g opacity="0.28">
    <rect x="28" y="28" width="92" height="72" rx="8" fill="#a8b6bf"/>
    <rect x="196" y="28" width="104" height="72" rx="8" fill="#a8b6bf"/>
    <rect x="388" y="28" width="122" height="72" rx="8" fill="#a8b6bf"/>
    <rect x="582" y="28" width="132" height="72" rx="8" fill="#a8b6bf"/>
    <rect x="782" y="28" width="118" height="72" rx="8" fill="#a8b6bf"/>
    <rect x="972" y="28" width="150" height="72" rx="8" fill="#a8b6bf"/>

    <rect x="28" y="174" width="92" height="86" rx="8" fill="#a8b6bf"/>
    <rect x="196" y="174" width="104" height="86" rx="8" fill="#a8b6bf"/>
    <rect x="388" y="174" width="122" height="86" rx="8" fill="#a8b6bf"/>
    <rect x="582" y="174" width="132" height="86" rx="8" fill="#a8b6bf"/>
    <rect x="782" y="174" width="118" height="86" rx="8" fill="#a8b6bf"/>
    <rect x="972" y="174" width="150" height="86" rx="8" fill="#a8b6bf"/>

    <rect x="28" y="360" width="92" height="78" rx="8" fill="#a8b6bf"/>
    <rect x="196" y="360" width="104" height="78" rx="8" fill="#a8b6bf"/>
    <rect x="388" y="360" width="122" height="78" rx="8" fill="#a8b6bf"/>
    <rect x="582" y="360" width="132" height="78" rx="8" fill="#a8b6bf"/>
    <rect x="782" y="360" width="118" height="78" rx="8" fill="#a8b6bf"/>
    <rect x="972" y="360" width="150" height="78" rx="8" fill="#a8b6bf"/>

    <rect x="28" y="538" width="92" height="79" rx="8" fill="#a8b6bf"/>
    <rect x="196" y="538" width="104" height="79" rx="8" fill="#a8b6bf"/>
    <rect x="388" y="538" width="122" height="79" rx="8" fill="#a8b6bf"/>
    <rect x="582" y="538" width="132" height="79" rx="8" fill="#a8b6bf"/>
    <rect x="782" y="538" width="118" height="79" rx="8" fill="#a8b6bf"/>
    <rect x="972" y="538" width="150" height="79" rx="8" fill="#a8b6bf"/>

    <rect x="28" y="710" width="92" height="60" rx="8" fill="#a8b6bf"/>
    <rect x="196" y="710" width="104" height="60" rx="8" fill="#a8b6bf"/>
    <rect x="388" y="710" width="122" height="60" rx="8" fill="#a8b6bf"/>
    <rect x="582" y="710" width="132" height="60" rx="8" fill="#a8b6bf"/>
    <rect x="782" y="710" width="118" height="60" rx="8" fill="#a8b6bf"/>
    <rect x="972" y="710" width="150" height="60" rx="8" fill="#a8b6bf"/>
  </g>

  <g fill="#f4f7f5" opacity="0.9">
    <rect x="66" y="126" width="10" height="8"/>
    <rect x="92" y="126" width="10" height="8"/>
    <rect x="118" y="126" width="10" height="8"/>
    <rect x="210" y="126" width="10" height="8"/>
    <rect x="236" y="126" width="10" height="8"/>
    <rect x="262" y="126" width="10" height="8"/>
    <rect x="354" y="126" width="10" height="8"/>
    <rect x="380" y="126" width="10" height="8"/>
    <rect x="406" y="126" width="10" height="8"/>
    <rect x="498" y="126" width="10" height="8"/>
    <rect x="524" y="126" width="10" height="8"/>
    <rect x="550" y="126" width="10" height="8"/>
    <rect x="642" y="126" width="10" height="8"/>
    <rect x="668" y="126" width="10" height="8"/>
    <rect x="694" y="126" width="10" height="8"/>
    <rect x="786" y="126" width="10" height="8"/>
    <rect x="812" y="126" width="10" height="8"/>
    <rect x="838" y="126" width="10" height="8"/>
    <rect x="930" y="126" width="10" height="8"/>
    <rect x="956" y="126" width="10" height="8"/>
    <rect x="982" y="126" width="10" height="8"/>
    <rect x="1074" y="126" width="10" height="8"/>
    <rect x="1100" y="126" width="10" height="8"/>
    <rect x="1126" y="126" width="10" height="8"/>
  </g>

  <g filter="url(#shadow)">
    <g transform="translate(215 185)">
      <polygon points="0,26 38,6 84,28 46,48" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 46,48 46,104 0,82" fill="#5f86ad" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="46,48 84,28 84,84 46,104" fill="#84a6cc" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 46,48 84,28 38,6" fill="#c3d6eb" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(385 205)">
      <polygon points="0,28 42,8 94,30 52,50" fill="url(#roof1)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,28 52,50 52,122 0,100" fill="url(#sideA)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="52,50 94,30 94,102 52,122" fill="url(#sideB)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,28 52,50 94,30 42,8" fill="#f7deb0" stroke="#8d5e2f" stroke-width="2"/>
    </g>

    <g transform="translate(585 175)">
      <polygon points="0,30 36,10 76,28 40,48" fill="url(#roof3)" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,30 40,48 40,104 0,86" fill="#86b67f" stroke="#5f855a" stroke-width="2"/>
      <polygon points="40,48 76,28 76,84 40,104" fill="#b2d3ad" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,30 40,48 76,28 36,10" fill="#d9ecd6" stroke="#5f855a" stroke-width="2"/>
    </g>

    <g transform="translate(792 190)">
      <polygon points="0,24 44,4 98,28 54,48" fill="url(#roof4)" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,24 54,48 54,116 0,92" fill="#d48d8d" stroke="#955d5d" stroke-width="2"/>
      <polygon points="54,48 98,28 98,96 54,116" fill="#b96d6d" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,24 54,48 98,28 44,4" fill="#f1c0c0" stroke="#955d5d" stroke-width="2"/>
    </g>

    <g transform="translate(980 185)">
      <polygon points="0,30 36,10 80,30 44,50" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,30 44,50 44,134 0,114" fill="#6e9dc4" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="44,50 80,30 80,114 44,134" fill="#91b8db" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,30 44,50 80,30 36,10" fill="#c8dff1" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(210 372)">
      <polygon points="0,24 28,8 58,24 30,40" fill="url(#roof1)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,24 30,40 30,92 0,76" fill="#c88951" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="30,40 58,24 58,76 30,92" fill="#a86537" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,24 30,40 58,24 28,8" fill="#f1c98c" stroke="#8d5e2f" stroke-width="2"/>
    </g>

    <g transform="translate(390 360)">
      <polygon points="0,28 42,8 90,28 48,48" fill="url(#roof3)" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,28 48,48 48,110 0,90" fill="#87b57e" stroke="#5f855a" stroke-width="2"/>
      <polygon points="48,48 90,28 90,90 48,110" fill="#67965e" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,28 48,48 90,28 42,8" fill="#d5ead1" stroke="#5f855a" stroke-width="2"/>
    </g>

    <g transform="translate(590 362)">
      <polygon points="0,26 34,6 72,24 38,44" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 38,44 38,108 0,90" fill="#648db4" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="38,44 72,24 72,88 38,108" fill="#82a7cd" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 38,44 72,24 34,6" fill="#c4d7eb" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(790 366)">
      <polygon points="0,24 40,6 84,24 44,42" fill="url(#roof4)" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,24 44,42 44,98 0,80" fill="#c87676" stroke="#955d5d" stroke-width="2"/>
      <polygon points="44,42 84,24 84,80 44,98" fill="#a95f5f" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,24 44,42 84,24 40,6" fill="#efbcbc" stroke="#955d5d" stroke-width="2"/>
    </g>

    <g transform="translate(980 360)">
      <polygon points="0,26 32,8 72,26 40,44" fill="url(#roof1)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,26 40,44 40,120 0,102" fill="#d69a60" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="40,44 72,26 72,102 40,120" fill="#b77a45" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,26 40,44 72,26 32,8" fill="#f2cf93" stroke="#8d5e2f" stroke-width="2"/>
    </g>

    <g transform="translate(220 548)">
      <polygon points="0,26 42,6 86,26 44,46" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 44,46 44,108 0,88" fill="#6f98bf" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="44,46 86,26 86,88 44,108" fill="#89b0d5" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 44,46 86,26 42,6" fill="#cadaed" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(392 540)">
      <polygon points="0,30 36,10 80,28 44,48" fill="url(#roof1)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,30 44,48 44,124 0,106" fill="#cc8750" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="44,48 80,28 80,104 44,124" fill="#a86636" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,30 44,48 80,28 36,10" fill="#f0c990" stroke="#8d5e2f" stroke-width="2"/>
    </g>

    <g transform="translate(590 540)">
      <polygon points="0,28 34,8 76,26 42,46" fill="url(#roof3)" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,28 42,46 42,118 0,100" fill="#84b07b" stroke="#5f855a" stroke-width="2"/>
      <polygon points="42,46 76,26 76,98 42,118" fill="#6d9b63" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,28 42,46 76,26 34,8" fill="#d6ead2" stroke="#5f855a" stroke-width="2"/>
    </g>

    <g transform="translate(790 542)">
      <polygon points="0,26 42,6 92,24 50,44" fill="url(#roof4)" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,26 50,44 50,112 0,94" fill="#d58a8a" stroke="#955d5d" stroke-width="2"/>
      <polygon points="50,44 92,24 92,92 50,112" fill="#b86d6d" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,26 50,44 92,24 42,6" fill="#efbcbc" stroke="#955d5d" stroke-width="2"/>
    </g>

    <g transform="translate(980 548)">
      <polygon points="0,26 30,8 66,24 36,42" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 36,42 36,98 0,82" fill="#6d95bb" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="36,42 66,24 66,80 36,98" fill="#8db2d7" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,26 36,42 66,24 30,8" fill="#cadcf0" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(215 724)">
      <polygon points="0,22 30,6 62,22 32,38" fill="url(#roof3)" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,22 32,38 32,76 0,60" fill="#7da974" stroke="#5f855a" stroke-width="2"/>
      <polygon points="32,38 62,22 62,60 32,76" fill="#65945c" stroke="#5f855a" stroke-width="2"/>
      <polygon points="0,22 32,38 62,22 30,6" fill="#d9ebd5" stroke="#5f855a" stroke-width="2"/>
    </g>

    <g transform="translate(390 714)">
      <polygon points="0,24 34,8 72,24 38,40" fill="url(#roof1)" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,24 38,40 38,84 0,68" fill="#cb8752" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="38,40 72,24 72,68 38,84" fill="#a76536" stroke="#8d5e2f" stroke-width="2"/>
      <polygon points="0,24 38,40 72,24 34,8" fill="#f1cb90" stroke="#8d5e2f" stroke-width="2"/>
    </g>

    <g transform="translate(592 718)">
      <polygon points="0,22 28,6 60,22 32,38" fill="url(#roof2)" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,22 32,38 32,84 0,68" fill="#678eb5" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="32,38 60,22 60,68 32,84" fill="#86a8cd" stroke="#4e6b86" stroke-width="2"/>
      <polygon points="0,22 32,38 60,22 28,6" fill="#c6d8ec" stroke="#4e6b86" stroke-width="2"/>
    </g>

    <g transform="translate(790 716)">
      <polygon points="0,22 30,6 64,22 34,38" fill="url(#roof4)" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,22 34,38 34,80 0,64" fill="#ca7e7e" stroke="#955d5d" stroke-width="2"/>
      <polygon points="34,38 64,22 64,64 34,80" fill="#a85f5f" stroke="#955d5d" stroke-width="2"/>
      <polygon points="0,22 34,38 64,22 30,6" fill="#efbcbc" stroke="#955d5d" stroke-width="2"/>
    </g>
  </g>

  <g fill="#f7f8f9" opacity="0.95">
    <rect x="192" y="320" width="24" height="4" rx="2"/>
    <rect x="232" y="320" width="24" height="4" rx="2"/>
    <rect x="272" y="320" width="24" height="4" rx="2"/>
    <rect x="602" y="500" width="24" height="4" rx="2"/>
    <rect x="642" y="500" width="24" height="4" rx="2"/>
    <rect x="682" y="500" width="24" height="4" rx="2"/>
    <rect x="972" y="680" width="24" height="4" rx="2"/>
    <rect x="1012" y="680" width="24" height="4" rx="2"/>
    <rect x="1052" y="680" width="24" height="4" rx="2"/>
  </g>

  <g opacity="0.35">
    <path d="M0 152 H1200" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M0 324 H1200" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M0 499 H1200" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M0 679 H1200" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M181 0 V800" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M371 0 V800" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M571 0 V800" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M781 0 V800" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
    <path d="M971 0 V800" stroke="#ffffff" stroke-width="2" stroke-dasharray="14 18"/>
  </g>

  <g opacity="0.55">
    <circle cx="120" cy="710" r="18" fill="#7ba86a"/>
    <circle cx="1084" cy="76" r="18" fill="#7ba86a"/>
    <circle cx="1098" cy="760" r="18" fill="#7ba86a"/>
    <circle cx="86" cy="82" r="18" fill="#7ba86a"/>
  </g>
</svg>