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 viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg">
<defs>
 <linearGradient id="sky" x1="0" y1="0" x2="0" y2="1">
   <stop offset="0" stop-color="#10151f"/>
   <stop offset="1" stop-color="#2b3648"/>
 </linearGradient>
 <linearGradient id="beam" x1="0" y1="0" x2="1" y2="0">
   <stop offset="0" stop-color="#ffe9a8" stop-opacity="0.85"/>
   <stop offset="1" stop-color="#ffe9a8" stop-opacity="0"/>
 </linearGradient>
 <pattern id="rain" width="60" height="60" patternUnits="userSpaceOnUse" patternTransform="rotate(20)">
   <line x1="0" y1="0" x2="0" y2="60" stroke="#e8e2d0" stroke-width="1.5" opacity="0.35"/>
   <line x1="30" y1="0" x2="30" y2="60" stroke="#e8e2d0" stroke-width="1" opacity="0.22"/>
 </pattern>
</defs>

<!-- sky -->
<rect x="0" y="0" width="800" height="420" fill="url(#sky)"/>

<!-- storm clouds -->
<g fill="#2b3648" opacity="0.55">
 <path d="M0,60 Q100,20 200,55 T400,50 T600,70 T800,40 L800,0 L0,0 Z"/>
 <path d="M0,140 Q150,100 300,130 T600,120 T800,150 L800,110 Q600,90 300,100 T0,90 Z" opacity="0.45"/>
</g>

<!-- sea -->
<rect x="0" y="420" width="800" height="180" fill="#2b3648"/>

<!-- wave lines -->
<g stroke="#e8e2d0" stroke-width="2" fill="none" opacity="0.3">
 <path d="M0,450 Q50,440 100,450 T200,450 T300,450 T400,450 T500,450 T600,450 T700,450 T800,450"/>
 <path d="M0,490 Q60,478 120,490 T240,490 T360,490 T480,490 T600,490 T720,490 T800,490"/>
 <path d="M0,530 Q70,518 140,530 T280,530 T420,530 T560,530 T700,530 T800,530"/>
</g>

<!-- rocky outcrop -->
<polygon points="280,600 320,480 380,440 430,460 470,430 520,460 560,440 620,480 660,600" fill="#3b3a35"/>
<polygon points="330,600 360,510 400,490 440,500 480,480 520,500 560,600" fill="#3b3a35" opacity="0.7"/>

<!-- lighthouse beam -->
<g>
 <polygon points="450,180 800,60 800,140 450,205" fill="url(#beam)"/>
 <polygon points="450,180 800,220 800,300 450,205" fill="url(#beam)" opacity="0.5"/>
</g>

<!-- lighthouse tower -->
<polygon points="430,440 470,440 462,190 438,190" fill="#e8e2d0"/>
<!-- stripes -->
<polygon points="434,260 466,260 464,290 436,290" fill="#b23a3a"/>
<polygon points="437,340 463,340 462,370 438,370" fill="#b23a3a"/>

<!-- gallery deck -->
<rect x="425" y="185" width="50" height="10" fill="#3b3a35"/>

<!-- lantern room -->
<rect x="435" y="150" width="30" height="35" fill="#10151f" stroke="#e8e2d0" stroke-width="2"/>
<polygon points="432,150 468,150 450,120" fill="#b23a3a"/>

<!-- rain overlay -->
<rect x="0" y="0" width="800" height="600" fill="url(#rain)"/>

<!-- wind streaks -->
<g stroke="#e8e2d0" stroke-width="1.5" fill="none" opacity="0.4" stroke-linecap="round">
 <path d="M50,100 Q90,90 130,100"/>
 <path d="M600,50 Q650,40 700,55"/>
 <path d="M100,250 Q150,240 190,255"/>
 <path d="M650,200 Q700,190 740,205"/>
 <path d="M20,320 Q60,310 100,322"/>
 <path d="M550,330 Q600,320 640,334"/>
</g>

</svg>

request envelope — prompt redacted

{
  "model": "anthropic/claude-sonnet-5",
  "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": "913c6230-cffd-4220-a05f-aa5c3bf66c4d"
}