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 800 600">
  <defs>
    <pattern id="rain" width="56" height="72" patternUnits="userSpaceOnUse" patternTransform="rotate(17)">
      <line x1="12" y1="-8" x2="12" y2="38" stroke="#8fa6b5" stroke-width="2.2" stroke-linecap="round" opacity="0.45"/>
      <line x1="40" y1="26" x2="40" y2="64" stroke="#8fa6b5" stroke-width="1.5" stroke-linecap="round" opacity="0.3"/>
    </pattern>
  </defs>

  <!-- sky -->
  <rect width="800" height="600" fill="#182430"/>

  <!-- storm clouds -->
  <g fill="#101a22" opacity="0.85">
    <ellipse cx="120" cy="38" rx="165" ry="38"/>
    <ellipse cx="330" cy="72" rx="150" ry="30"/>
    <ellipse cx="645" cy="42" rx="175" ry="36"/>
    <ellipse cx="775" cy="88" rx="115" ry="26"/>
    <ellipse cx="70" cy="140" rx="95" ry="22" opacity="0.7"/>
    <ellipse cx="430" cy="130" rx="110" ry="20" opacity="0.6"/>
  </g>

  <!-- light beam -->
  <g fill="#f2e6a4">
    <polygon points="525,176 20,20 20,340" opacity="0.16"/>
    <polygon points="525,176 20,95 20,265" opacity="0.25"/>
    <polygon points="525,176 20,140 20,215" opacity="0.38"/>
    <polygon points="525,176 800,105 800,255" opacity="0.14"/>
    <polygon points="525,176 800,140 800,215" opacity="0.22"/>
  </g>

  <!-- lamp halo -->
  <circle cx="525" cy="176" r="30" fill="#f2e6a4" opacity="0.18"/>
  <circle cx="525" cy="176" r="18" fill="#f2e6a4" opacity="0.3"/>

  <!-- sea -->
  <rect x="0" y="440" width="800" height="160" fill="#2a3f52"/>
  <rect x="0" y="436" width="800" height="3" fill="#8fa6b5" opacity="0.18"/>
  <g fill="none" stroke="#8fa6b5" stroke-linecap="round">
    <path d="M -20 502 q 25 -13 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0" stroke-width="3" opacity="0.4"/>
    <path d="M -45 545 q 25 -11 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0" stroke-width="2.5" opacity="0.3"/>
    <path d="M -10 588 q 25 -12 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0 t 50 0" stroke-width="3" opacity="0.35"/>
  </g>

  <!-- wind streaks -->
  <g fill="none" stroke="#8fa6b5" stroke-width="3" stroke-linecap="round" opacity="0.4">
    <path d="M 30 150 C 150 128, 260 160, 400 138"/>
    <path d="M 60 235 C 180 215, 300 250, 450 228"/>
    <path d="M 470 105 C 570 88, 680 112, 800 95"/>
    <path d="M 560 300 C 650 288, 730 306, 810 292"/>
    <path d="M 40 470 C 140 458, 230 476, 330 464" opacity="0.75"/>
    <path d="M 660 370 C 720 360, 770 376, 820 366" opacity="0.75"/>
  </g>

  <!-- rocks -->
  <path d="M 400 600 L 415 540 L 455 505 L 500 512 L 535 494 L 575 520 L 620 500 L 665 522 L 700 512 L 720 600 Z" fill="#101a22"/>
  <path d="M 60 600 L 90 545 L 130 528 L 170 548 L 200 540 L 220 600 Z" fill="#101a22"/>
  <g fill="none" stroke="#8fa6b5" stroke-width="3" stroke-linecap="round" opacity="0.5">
    <path d="M 455 507 L 500 514 L 535 496"/>
    <path d="M 620 502 L 665 524"/>
    <path d="M 92 547 L 130 530 L 168 549"/>
  </g>

  <!-- crashing spray -->
  <g fill="none" stroke="#8fa6b5" stroke-linecap="round">
    <path d="M 380 562 Q 400 505 448 522" stroke-width="4" opacity="0.8"/>
    <path d="M 690 524 q 16 -26 38 -20" stroke-width="3.5" opacity="0.7"/>
    <path d="M 66 578 Q 108 514 168 550" stroke-width="4" opacity="0.8"/>
    <path d="M 400 592 q 30 -12 60 0 t 60 0 t 60 0 t 60 0 t 60 0" stroke-width="3.5" opacity="0.5"/>
    <path d="M 40 596 q 30 -12 60 0 t 60 0 t 60 0" stroke-width="3.5" opacity="0.5"/>
  </g>
  <g fill="#8fa6b5" opacity="0.85">
    <circle cx="398" cy="512" r="3"/><circle cx="412" cy="499" r="2.4"/><circle cx="426" cy="508" r="2"/><circle cx="440" cy="514" r="2.5"/>
    <circle cx="702" cy="498" r="3"/><circle cx="716" cy="490" r="2.3"/><circle cx="728" cy="502" r="2"/>
    <circle cx="95" cy="545" r="2.6"/><circle cx="120" cy="528" r="3"/><circle cx="148" cy="540" r="2.4"/>
  </g>

  <!-- lighthouse -->
  <polygon points="490,470 502,205 548,205 560,470" fill="#ece7d8"/>
  <polygon points="492,417 558,417 555,364 495,364" fill="#101a22"/>
  <polygon points="497,311 553,311 550,258 500,258" fill="#101a22"/>
  <polygon points="483,495 567,495 560,470 490,470" fill="#101a22"/>
  <path d="M 516 470 L 516 449 A 9 9 0 0 1 534 449 L 534 470 Z" fill="#101a22"/>
  <rect x="521" y="434" width="9" height="15" fill="#f2e6a4" stroke="#101a22" stroke-width="2"/>
  <rect x="521" y="330" width="9" height="13" fill="#f2e6a4" stroke="#101a22" stroke-width="2"/>
  <rect x="490" y="193" width="70" height="12" rx="2" fill="#101a22"/>
  <rect x="507" y="160" width="36" height="33" fill="#f2e6a4"/>
  <g stroke="#101a22" stroke-width="2.5">
    <line x1="518" y1="160" x2="518" y2="193"/>
    <line x1="532" y1="160" x2="532" y2="193"/>
    <line x1="507" y1="176" x2="543" y2="176"/>
  </g>
  <polygon points="501,160 549,160 525,130" fill="#101a22"/>
  <line x1="525" y1="130" x2="525" y2="118" stroke="#101a22" stroke-width="3" stroke-linecap="round"/>
  <circle cx="525" cy="115" r="3" fill="#101a22"/>
  <circle cx="525" cy="176" r="7" fill="#f2e6a4"/>

  <!-- rain over the whole scene -->
  <rect width="800" height="600" fill="url(#rain)"/>

  <!-- foreground gusts -->
  <g stroke="#8fa6b5" stroke-linecap="round" opacity="0.55">
    <line x1="130" y1="40" x2="104" y2="140" stroke-width="3"/>
    <line x1="700" y1="200" x2="676" y2="292" stroke-width="3"/>
    <line x1="350" y1="320" x2="328" y2="404" stroke-width="2.5"/>
    <line x1="610" y1="420" x2="590" y2="496" stroke-width="2.5"/>
  </g>
</svg>

request envelope — prompt redacted

{
  "model": "moonshotai/kimi-k3",
  "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": 32000,
  "gatewayStringId": "1bfbb92f-8faa-4d8c-820a-3bc9a9aa46b6"
}