icon-set-weather
rendered
the brief, redacted

Produce a six-icon weather set on a shared grid, in one SVG. Tests visual consistency across repeated elements — the place where most models drift.

386 chars · 64 words · fingerprint cea26cacf025

raw output — byte exact

<svg viewBox="0 0 900 220" xmlns="http://www.w3.org/2000/svg" fill="none" stroke="#111" stroke-linecap="round" stroke-linejoin="round">
  <!-- Global icon specs -->
  <!-- Stroke weight and "corner radius" (via consistent rounded geometry) -->
  <defs>
    <!-- No external resources -->
  </defs>

  <!-- Layout: 6 icons evenly spaced, each 150x180 with 10px margins -->
  <!-- Icon cell width = 150, height = 200-ish; baseline align at y ~ 160 -->

  <!-- 1) SUN -->
  <g transform="translate(0,0)">
    <!-- Sun center at (75,90) -->
    <circle cx="75" cy="90" r="22" stroke-width="4"/>
    <!-- Rays -->
    <g stroke-width="4">
      <path d="M75 50 C75 40 75 35 75 30"/>
      <path d="M75 150 C75 160 75 165 75 170"/>
      <path d="M35 90 C25 90 20 90 15 90"/>
      <path d="M115 90 C125 90 130 90 135 90"/>
      <path d="M47 62 C40 55 35 50 30 45"/>
      <path d="M103 118 C110 125 115 130 120 135"/>
      <path d="M47 118 C40 125 35 130 30 135"/>
      <path d="M103 62 C110 55 115 50 120 45"/>
    </g>
  </g>

  <!-- 2) CLOUD -->
  <g transform="translate(150,0)">
    <!-- Cloud outline using rounded arcs -->
    <path stroke-width="4" d="
      M55 118
      C40 118 28 107 28 93
      C28 79 40 68 55 68
      C62 51 79 40 98 40
      C118 40 135 52 141 70
      C156 70 168 82 168 97
      C168 112 156 124 141 124
      L55 124
      C52 124 50 122 50 120
      C50 119 51 118 55 118
      Z"/>
    <!-- Slight inner puff line (consistent hand-made look) -->
    <path stroke-width="3" d="M64 98 C75 88 88 85 101 86 C114 87 126 92 132 102" opacity="0.95"/>
  </g>

  <!-- 3) RAIN -->
  <g transform="translate(300,0)">
    <!-- Cloud -->
    <path stroke-width="4" d="
      M45 88
      C34 88 25 80 25 70
      C25 59 34 51 45 51
      C51 38 65 29 81 29
      C98 29 112 39 117 53
      C129 53 139 63 139 75
      C139 88 129 98 117 98
      L45 98
      C41 98 38 95 38 92
      C38 90 40 88 45 88
      Z"/>
    <!-- Raindrops -->
    <g stroke-width="4">
      <path d="M70 98 C70 115 70 122 70 135"/>
      <path d="M96 102 C96 118 96 125 96 140"/>
      <path d="M122 98 C122 115 122 122 122 136"/>
    </g>
  </g>

  <!-- 4) SNOW -->
  <g transform="translate(450,0)">
    <!-- Cloud -->
    <path stroke-width="4" d="
      M45 88
      C34 88 25 80 25 70
      C25 59 34 51 45 51
      C51 38 65 29 81 29
      C98 29 112 39 117 53
      C129 53 139 63 139 75
      C139 88 129 98 117 98
      L45 98
      C41 98 38 95 38 92
      C38 90 40 88 45 88
      Z"/>
    <!-- Snow: 3 snowflakes -->
    <g stroke-width="4">
      <!-- Left -->
      <g transform="translate(62,103)">
        <path d="M0 0 L0 28"/>
        <path d="M-14 14 L14 14"/>
        <path d="M-10 4 L10 24"/>
        <path d="M-10 24 L10 4"/>
        <circle cx="0" cy="14" r="2.8" fill="#111" stroke="none" opacity="0.95"/>
      </g>
      <!-- Middle -->
      <g transform="translate(92,108)">
        <path d="M0 0 L0 28"/>
        <path d="M-14 14 L14 14"/>
        <path d="M-10 4 L10 24"/>
        <path d="M-10 24 L10 4"/>
        <circle cx="0" cy="14" r="2.8" fill="#111" stroke="none" opacity="0.95"/>
      </g>
      <!-- Right -->
      <g transform="translate(122,103)">
        <path d="M0 0 L0 28"/>
        <path d="M-14 14 L14 14"/>
        <path d="M-10 4 L10 24"/>
        <path d="M-10 24 L10 4"/>
        <circle cx="0" cy="14" r="2.8" fill="#111" stroke="none" opacity="0.95"/>
      </g>
    </g>
  </g>

  <!-- 5) FOG -->
  <g transform="translate(600,0)">
    <!-- Cloud base waves for fog -->
    <g stroke-width="4">
      <path d="M30 112 C42 102 58 102 70 112 C82 102 98 102 110 112 C122 102 138 102 150 112"/>
      <path d="M28 92 C40 82 56 82 68 92 C80 82 96 82 108 92 C120 82 136 82 148 92"/>
      <path d="M30 132 C42 122 58 122 70 132 C82 122 98 122 110 132 C122 122 138 122 150 132"/>
    </g>
    <!-- Soft vertical haze strokes -->
    <g stroke-width="4" opacity="0.95">
      <path d="M48 68 C48 60 48 54 48 50"/>
      <path d="M78 68 C78 60 78 54 78 50"/>
      <path d="M108 68 C108 60 108 54 108 50"/>
    </g>
    <!-- Small muted sun behind (outline-only) to hint fog, without filling -->
    <g transform="translate(0,0)" opacity="0.55" stroke-width="4">
      <circle cx="78" cy="46" r="10"/>
      <path d="M78 30 C78 26 78 24 78 20"/>
      <path d="M78 62 C78 66 78 68 78 72"/>
      <path d="M62 46 C58 46 56 46 52 46"/>
      <path d="M94 46 C98 46 100 46 104 46"/>
    </g>
  </g>

  <!-- 6) THUNDERSTORM -->
  <g transform="translate(750,0)">
    <!-- Cloud -->
    <path stroke-width="4" d="
      M38 90
      C27 90 18 82 18 72
      C18 61 27 53 38 53
      C44 40 58 31 74 31
      C91 31 105 41 110 55
      C122 55 132 65 132 77
      C132 90 122 100 110 100
      L38 100
      C34 100 31 97 31 94
      C31 92 33 90 38 90
      Z"/>
    <!-- Lightning bolt -->
    <g stroke-width="4">
      <path d="M78 85 L62 112 L78 112 L68 138 L92 104 L78 104 Z"/>
    </g>
    <!-- Rain lines (a couple) -->
    <g stroke-width="4">
      <path d="M58 102 C58 118 58 124 58 138"/>
      <path d="M92 102 C92 118 92 124 92 140"/>
    </g>
  </g>
</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 — 68 words, 386 chars»"
    }
  ],
  "maxOutputTokens": 16000,
  "gatewayStringId": "68b9ca2e-24f6-4b26-96f8-029a2a0acdf1"
}