lighthouse-storm
rendered
the brief, redacted

Draw a lighthouse on a rocky outcrop during a storm, as a single self-contained SVG. Tests composition, layering, and whether a model can suggest weather without raster effects.

338 chars · 53 words · fingerprint 0b46c0c31095

raw output — byte exact

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 600" role="img" aria-label="Lighthouse on a rocky outcrop during a storm">
  <!-- Sky -->
  <rect x="0" y="0" width="900" height="600" fill="#0B1B2A"/>
  <path d="M0,0 L900,0 L900,330 Q600,260 450,285 Q250,320 0,270 Z" fill="#0E2A44" opacity="0.9"/>

  <!-- Rain -->
  <g stroke="#7FC7FF" stroke-width="2" stroke-linecap="round" opacity="0.9">
    <path d="M95 40 L70 110" />
    <path d="M130 55 L105 125" />
    <path d="M165 38 L140 108" />
    <path d="M205 58 L180 128" />
    <path d="M245 45 L220 115" />
    <path d="M285 60 L260 130" />
    <path d="M325 42 L300 112" />
    <path d="M365 62 L340 132" />
    <path d="M405 48 L380 118" />
    <path d="M445 65 L420 135" />
    <path d="M485 44 L460 114" />
    <path d="M525 68 L500 138" />
    <path d="M565 50 L540 120" />
    <path d="M605 70 L580 140" />
    <path d="M645 52 L620 122" />
    <path d="M685 72 L660 142" />
    <path d="M725 55 L700 125" />
    <path d="M765 75 L740 145" />
    <path d="M805 58 L780 128" />
    <path d="M845 78 L820 148" />
  </g>

  <!-- Dark wind streaks -->
  <g fill="none" stroke="#0A0F16" stroke-width="3" opacity="0.55" stroke-linecap="round">
    <path d="M80 150 C140 130, 210 130, 275 145" />
    <path d="M560 120 C640 100, 730 105, 815 135" />
    <path d="M120 220 C190 205, 260 205, 330 225" />
    <path d="M520 205 C595 185, 690 190, 800 225" />
  </g>

  <!-- Clouds / storm front -->
  <g fill="#0A2236" opacity="0.95">
    <path d="M-10 170 C80 120, 170 165, 250 130 C330 95, 410 150, 490 130 C580 105, 650 145, 740 120 C820 95, 900 130, 920 145 L920 260 L-10 260 Z"/>
  </g>
  <g fill="#071625" opacity="0.75">
    <path d="M-20 240 C60 210, 160 245, 240 215 C320 185, 410 240, 500 215 C600 185, 680 235, 760 205 C840 175, 915 210, 930 220 L930 300 L-20 300 Z"/>
  </g>

  <!-- Sea -->
  <path d="M0 320 Q140 290 260 320 T520 320 T900 320 V600 H0 Z" fill="#082033"/>
  <path d="M0 360 Q140 335 260 360 T520 360 T900 360 L900 600 L0 600 Z" fill="#071A2A" opacity="0.85"/>
  <!-- Sea foam lines -->
  <g stroke="#9CE2FF" stroke-width="2" opacity="0.35" fill="none">
    <path d="M60 420 C140 395, 220 445, 300 420" />
    <path d="M340 435 C420 410, 500 460, 580 435" />
    <path d="M610 415 C690 390, 770 440, 850 415" />
    <path d="M120 470 C210 450, 290 500, 380 480" />
    <path d="M430 470 C520 450, 600 510, 690 480" />
  </g>

  <!-- Rocky outcrop -->
  <g>
    <!-- Base rock -->
    <path d="M240 390
             C285 340, 360 330, 420 340
             C460 280, 560 275, 610 320
             C690 300, 765 330, 800 385
             C830 430, 805 500, 735 510
             C680 518, 610 520, 520 525
             C430 530, 350 525, 300 510
             C235 490, 210 440, 240 390 Z"
          fill="#2A2E3A"/>
    <!-- Rock highlights -->
    <path d="M310 405
             C345 360, 420 355, 465 370
             C505 340, 565 330, 615 350
             C680 370, 720 420, 700 460
             C660 535, 535 500, 445 505
             C360 510, 295 470, 310 405 Z"
          fill="#3A4252" opacity="0.85"/>
    <!-- Jagged edges -->
    <path d="M260 410 L285 395 L315 410 L295 430 Z" fill="#1E232E"/>
    <path d="M720 400 L760 385 L790 410 L745 435 Z" fill="#1E232E"/>
  </g>

  <!-- Lighthouse -->
  <g>
    <!-- Tower shadow -->
    <path d="M430 215
             C430 190, 458 170, 485 170
             C515 170, 545 195, 545 220
             L545 430
             C545 455, 520 470, 495 470
             C470 470, 430 452, 430 430 Z"
          fill="#0A0F16" opacity="0.35"/>
    <!-- Tower body -->
    <path d="M450 190
             C450 165, 475 145, 500 145
             C528 145, 555 170, 555 195
             L555 440
             C555 468, 528 488, 500 488
             C472 488, 450 470, 450 440 Z"
          fill="#F3F7FF"/>
    <!-- Stripes -->
    <g opacity="0.95">
      <rect x="463" y="200" width="28" height="255" fill="#D94141"/>
      <rect x="508" y="200" width="28" height="255" fill="#D94141"/>
      <rect x="463" y="200" width="73" height="60" fill="none" stroke="#B72F2F" stroke-width="6" opacity="0.45"/>
    </g>

    <!-- Base platform -->
    <path d="M408 430
             C430 405, 470 395, 500 395
             C535 395, 570 405, 590 430
             C610 455, 605 485, 580 500
             C545 520, 465 520, 430 505
             C405 495, 390 465, 408 430 Z"
          fill="#7A7F8D" opacity="0.9"/>
    <path d="M425 440
             C445 420, 478 412, 500 412
             C525 412, 555 420, 570 440
             C590 465, 565 495, 500 495
             C440 495, 410 465, 425 440 Z"
          fill="#9096A6"/>

    <!-- Roof -->
    <path d="M465 150
             C475 120, 510 105, 545 120
             C560 127, 575 143, 578 155
             L578 190
             C552 180, 518 180, 470 190
             L465 190 Z"
          fill="#1C2330"/>
    <!-- Lantern room -->
    <path d="M485 175
             C485 160, 505 150, 520 150
             C545 150, 565 165, 565 180
             L565 210
             C545 200, 510 200, 485 210 Z"
          fill="#F3F7FF"/>
    <!-- Glass -->
    <path d="M495 182
             C498 172, 512 168, 522 168
             C538 168, 552 176, 555 186
             L555 206
             C538 198, 512 198, 495 206 Z"
          fill="#66B8FF" opacity="0.8"/>
    <!-- Balcony -->
    <path d="M478 213
             C495 203, 540 203, 572 214
             C575 222, 565 230, 555 235
             C540 242, 505 242, 490 235
             C480 230, 472 222, 478 213 Z"
          fill="#101722"/>
    <!-- Door / slit -->
    <path d="M510 258 L505 370" stroke="#1C2330" stroke-width="8" opacity="0.9" stroke-linecap="round"/>
    <path d="M510 258 L515 370" stroke="#F3F7FF" stroke-width="3" opacity="0.35" stroke-linecap="round"/>
  </g>

  <!-- Light beam -->
  <g>
    <!-- Beam cone -->
    <path d="M565 245
             L900 110
             L900 165
             L615 305
             Z"
          fill="#BEE8FF" opacity="0.55"/>
    <path d="M565 250
             L900 120
             L900 150
             L605 320
             Z"
          fill="#8EDCFF" opacity="0.35"/>
    <!-- Beam core -->
    <path d="M565 252
             L900 128
             L900 142
             L600 320
             Z"
          fill="#DFF7FF" opacity="0.7"/>

    <!-- Beam arcs (suggest divergence) -->
    <g stroke="#DFF7FF" stroke-width="3" opacity="0.75" fill="none">
      <path d="M585 245 C690 215, 790 180, 900 150" />
      <path d="M575 260 C680 235, 780 205, 900 175" />
    </g>

    <!-- Lantern glow -->
    <circle cx="532" cy="215" r="18" fill="#DFF7FF" opacity="0.95"/>
    <circle cx="532" cy="215" r="30" fill="#8EDCFF" opacity="0.35"/>
  </g>

  <!-- Foreground spray (rain angled stronger near rock) -->
  <g stroke="#7FC7FF" stroke-width="2" stroke-linecap="round" opacity="0.7">
    <path d="M210 390 L180 460" />
    <path d="M260 380 L235 450" />
    <path d="M310 385 L285 455" />
    <path d="M360 385 L335 455" />
    <path d="M410 388 L385 458" />
    <path d="M460 390 L435 460" />
    <path d="M510 392 L485 462" />
    <path d="M560 392 L535 462" />
    <path d="M610 392 L585 462" />
    <path d="M660 392 L635 462" />
    <path d="M710 390 L685 460" />
    <path d="M760 388 L735 458" />
  </g>

  <!-- Subtle storm vignette -->
  <rect x="0" y="0" width="900" height="600" fill="none" stroke="#000000" stroke-opacity="0.25" stroke-width="6"/>
</svg>

request envelope — prompt redacted

{
  "model": "openai/gpt-5.4-nano",
  "system": "Respond with a single complete <svg> element and nothing else. No markdown fences, no explanation. Include an explicit viewBox. Do not reference external fonts, images, or stylesheets — the SVG must be fully self-contained.",
  "messages": [
    {
      "role": "user",
      "content": "«REDACTED — 58 words, 338 chars»"
    }
  ],
  "maxOutputTokens": 16000,
  "gatewayStringId": "68b9ca2e-24f6-4b26-96f8-029a2a0acdf1"
}