SVG: exploded portafilter, by deepseek-v4.1-flash
deepseek-v4.1-flash · round 3 of 3 · seed 2$0.09SVGPNGportafilter.svg
portafilter.svg · 206 lines
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 900" width="1200" height="900" font-family="DejaVu Sans, Helvetica, Arial, sans-serif">
  <defs>
    <!-- Stainless steel, vertical light -->
    <linearGradient id="metalV" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0%" stop-color="#fbfcfe"/>
      <stop offset="18%" stop-color="#e8ecf2"/>
      <stop offset="45%" stop-color="#c3cad5"/>
      <stop offset="72%" stop-color="#99a2b1"/>
      <stop offset="100%" stop-color="#7d8798"/>
    </linearGradient>
    <!-- Stainless steel, horizontal light (for the handle axis) -->
    <linearGradient id="metalH" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0%" stop-color="#f4f7fb"/>
      <stop offset="30%" stop-color="#dce2ea"/>
      <stop offset="55%" stop-color="#b6bec9"/>
      <stop offset="100%" stop-color="#828c9c"/>
    </linearGradient>
    <linearGradient id="metalBody" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0%" stop-color="#8f99a8"/>
      <stop offset="22%" stop-color="#dfe4ec"/>
      <stop offset="45%" stop-color="#c2c9d4"/>
      <stop offset="68%" stop-color="#9aa3b2"/>
      <stop offset="100%" stop-color="#737d8d"/>
    </linearGradient>
    <linearGradient id="metalDk" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0%" stop-color="#a9b2c0"/>
      <stop offset="100%" stop-color="#5f6876"/>
    </linearGradient>
    <!-- Dark interior -->
    <radialGradient id="cavity" cx="50%" cy="25%" r="80%">
      <stop offset="0%" stop-color="#6d7684"/>
      <stop offset="60%" stop-color="#464e5b"/>
      <stop offset="100%" stop-color="#2b313b"/>
    </radialGradient>
    <radialGradient id="basketFloor" cx="50%" cy="35%" r="80%">
      <stop offset="0%" stop-color="#8d97a6"/>
      <stop offset="100%" stop-color="#3c434e"/>
    </radialGradient>
    <!-- Wood handle -->
    <linearGradient id="wood" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0%" stop-color="#c98a4b"/>
      <stop offset="20%" stop-color="#a9662f"/>
      <stop offset="55%" stop-color="#8a4d20"/>
      <stop offset="82%" stop-color="#6b3813"/>
      <stop offset="100%" stop-color="#4d260c"/>
    </linearGradient>
    <linearGradient id="woodEnd" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0%" stop-color="#7a4419"/>
      <stop offset="100%" stop-color="#4a240b"/>
    </linearGradient>
    <marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
      <path d="M0,0 L10,5 L0,10 z" fill="#5b6675"/>
    </marker>
  </defs>

  <!-- background -->
  <rect x="0" y="0" width="1200" height="900" fill="#fbfbf8"/>
  <rect x="14" y="14" width="1172" height="872" fill="none" stroke="#c9ccd2" stroke-width="2"/>

  <!-- title -->
  <text x="600" y="52" text-anchor="middle" font-size="30" font-weight="700" fill="#232a34" letter-spacing="1">ESPRESSO MACHINE PORTAFILTER</text>
  <text x="600" y="80" text-anchor="middle" font-size="16" fill="#6a7280" letter-spacing="3">EXPLODED ASSEMBLY  ·  DOUBLE SPOUT  ·  REMOVABLE FILTER BASKET</text>
  <line x1="120" y1="98" x2="1080" y2="98" stroke="#c9ccd2" stroke-width="1.5"/>

  <!-- ===== assembly axis / centre lines ===== -->
  <g stroke="#8b93a1" stroke-width="1.2" fill="none">
    <line x1="380" y1="112" x2="380" y2="708" stroke-dasharray="22 6 4 6" opacity="0.6"/>
    <line x1="268" y1="345" x2="1030" y2="345" stroke-dasharray="22 6 4 6" opacity="0.6"/>
  </g>

  <!-- explosion connector dashed lines with arrows (drawn behind parts) -->
  <g stroke="#5b6675" stroke-width="2.2" stroke-dasharray="8 7" fill="none">
    <line x1="380" y1="226" x2="380" y2="312" marker-end="url(#arrow)"/>
    <line x1="380" y1="522" x2="380" y2="586" marker-end="url(#arrow)"/>
    <line x1="512" y1="345" x2="552" y2="345" marker-end="url(#arrow)"/>
  </g>

  <!-- ================= FILTER BASKET ================= -->
  <g>
    <!-- outer cup -->
    <path d="M 294,135 L 304,196 Q 318,214 380,214 Q 442,214 456,196 L 466,135 Z"
          fill="url(#metalBody)" stroke="#68717f" stroke-width="1.4"/>
    <!-- inner cavity wall -->
    <path d="M 302,135 C 308,168 322,190 380,190 C 438,190 452,168 458,135 Z" fill="url(#cavity)"/>
    <!-- floor with perforations -->
    <ellipse cx="380" cy="188" rx="58" ry="16" fill="url(#basketFloor)"/>
    <g fill="#232936" opacity="0.85">
      <circle cx="360" cy="176" r="2.2"/><circle cx="380" cy="175" r="2.2"/><circle cx="400" cy="176" r="2.2"/>
      <circle cx="348" cy="183" r="2.2"/><circle cx="368" cy="182" r="2.2"/><circle cx="388" cy="182" r="2.2"/><circle cx="408" cy="183" r="2.2"/>
      <circle cx="340" cy="190" r="2.2"/><circle cx="360" cy="189" r="2.2"/><circle cx="380" cy="189" r="2.2"/><circle cx="400" cy="189" r="2.2"/><circle cx="420" cy="190" r="2.2"/>
      <circle cx="350" cy="196" r="2.2"/><circle cx="370" cy="196" r="2.2"/><circle cx="390" cy="196" r="2.2"/><circle cx="410" cy="196" r="2.2"/>
    </g>
    <!-- rim: outer ring + opening -->
    <ellipse cx="380" cy="135" rx="86" ry="27" fill="url(#metalV)" stroke="#68717f" stroke-width="1.4"/>
    <ellipse cx="380" cy="135" rx="78" ry="23" fill="#3b424e"/>
    <ellipse cx="380" cy="135" rx="78" ry="23" fill="none" stroke="#8f99a8" stroke-width="2"/>
  </g>

  <!-- ================= RETAINING SPRING ================= -->
  <g>
    <path d="M 426,302 A 90 29 0 1 0 334,302" fill="none" stroke="#77808f" stroke-width="9" stroke-linecap="round"/>
    <path d="M 426,302 A 90 29 0 1 0 334,302" fill="none" stroke="#cdd4de" stroke-width="4" stroke-linecap="round"/>
    <circle cx="426" cy="302" r="5" fill="#aab3c0" stroke="#6b7482" stroke-width="1.2"/>
    <circle cx="334" cy="302" r="5" fill="#aab3c0" stroke="#6b7482" stroke-width="1.2"/>
  </g>

  <!-- ================= PORTAFILTER BODY ================= -->
  <g>
    <!-- bowl body -->
    <path d="M 280,330 L 280,398 C 280,448 325,470 380,470 C 435,470 480,448 480,398 L 480,330 Z"
          fill="url(#metalBody)" stroke="#5d6674" stroke-width="1.6"/>
    <!-- inner cavity -->
    <path d="M 294,330 C 300,382 318,432 380,432 C 442,432 460,382 466,330 Z" fill="url(#cavity)"/>
    <ellipse cx="380" cy="430" rx="62" ry="20" fill="#3b424e"/>
    <!-- top rim ring -->
    <ellipse cx="380" cy="330" rx="100" ry="32" fill="url(#metalV)" stroke="#5d6674" stroke-width="1.6"/>
    <ellipse cx="380" cy="330" rx="86" ry="27" fill="#2d333d"/>
    <ellipse cx="380" cy="330" rx="86" ry="27" fill="none" stroke="#98a2b1" stroke-width="3"/>
    <!-- bottom threaded boss -->
    <path d="M 356,464 L 353,502 Q 353,514 380,514 Q 407,514 407,502 L 404,464 Z"
          fill="url(#metalDk)" stroke="#5d6674" stroke-width="1.4"/>
    <ellipse cx="380" cy="514" rx="27" ry="9" fill="#6a7382" stroke="#5d6674" stroke-width="1.2"/>
    <!-- handle socket on the side -->
    <path d="M 478,326 L 496,326 Q 506,326 506,345 Q 506,364 496,364 L 478,364 Z"
          fill="url(#metalH)" stroke="#5d6674" stroke-width="1.4"/>
    <ellipse cx="499" cy="345" rx="8" ry="19" fill="#2f3540" stroke="#8f99a8" stroke-width="2"/>
  </g>

  <!-- ================= DOUBLE SPOUT ================= -->
  <g>
    <!-- two nozzles, the far one shaded darker to read as a pair -->
    <path d="M 398,620 C 422,642 434,662 432,690" fill="none" stroke="#7c8593" stroke-width="18" stroke-linecap="round"/>
    <path d="M 362,620 C 338,642 326,662 328,690" fill="none" stroke="#b9c1cd" stroke-width="18" stroke-linecap="round"/>
    <path d="M 362,620 C 338,642 326,662 328,690" fill="none" stroke="#eef1f6" stroke-width="6" stroke-linecap="round" opacity="0.7"/>
    <!-- nozzle openings -->
    <ellipse cx="432" cy="690" rx="7" ry="8" fill="#2c323c" stroke="#7c8593" stroke-width="1.5"/>
    <ellipse cx="328" cy="690" rx="7" ry="8" fill="#2c323c" stroke="#aab3c0" stroke-width="1.5"/>
    <!-- forked splitter that feeds the two channels -->
    <path d="M 356,606 L 404,606 L 408,624 Q 380,634 352,624 Z" fill="url(#metalDk)" stroke="#5d6674" stroke-width="1.4"/>
    <!-- base flange screwed onto the boss -->
    <path d="M 342,588 L 342,602 Q 342,614 380,614 Q 418,614 418,602 L 418,588 Z"
          fill="url(#metalV)" stroke="#5d6674" stroke-width="1.5"/>
    <ellipse cx="380" cy="588" rx="38" ry="12" fill="url(#metalV)" stroke="#5d6674" stroke-width="1.5"/>
    <ellipse cx="380" cy="588" rx="22" ry="7" fill="#414852" stroke="#98a2b1" stroke-width="1.5"/>
    <ellipse cx="380" cy="602" rx="38" ry="12" fill="url(#metalDk)" stroke="#5d6674" stroke-width="1.2"/>
  </g>

  <!-- ================= HANDLE ================= -->
  <g>
    <!-- threaded stud -->
    <rect x="556" y="337" width="54" height="16" rx="3" fill="url(#metalH)" stroke="#5d6674" stroke-width="1.3"/>
    <g stroke="#7d8798" stroke-width="1.6">
      <line x1="564" y1="337" x2="564" y2="353"/>
      <line x1="573" y1="337" x2="573" y2="353"/>
      <line x1="582" y1="337" x2="582" y2="353"/>
      <line x1="591" y1="337" x2="591" y2="353"/>
      <line x1="600" y1="337" x2="600" y2="353"/>
    </g>
    <!-- metal ferrule -->
    <path d="M 606,320 L 666,320 Q 678,320 678,345 Q 678,370 666,370 L 606,370 Z"
          fill="url(#metalH)" stroke="#5d6674" stroke-width="1.5"/>
    <ellipse cx="607" cy="345" rx="8" ry="25" fill="#9aa3b2" stroke="#5d6674" stroke-width="1.3"/>
    <!-- wood grip -->
    <path d="M 676,320 C 770,312 872,316 946,328 Q 964,334 964,345 Q 964,356 946,362 C 872,374 770,378 676,370 Z"
          fill="url(#wood)" stroke="#5a3312" stroke-width="1.4"/>
    <ellipse cx="961" cy="345" rx="7" ry="15" fill="url(#woodEnd)" stroke="#5a3312" stroke-width="1.2"/>
    <!-- subtle grain -->
    <g stroke="#6b3813" stroke-width="1" opacity="0.45" fill="none">
      <path d="M 690,332 C 780,326 870,330 946,338"/>
      <path d="M 690,358 C 780,364 870,360 944,352"/>
    </g>
  </g>

  <!-- ================= LABELS ================= -->
  <g stroke="#5b6675" stroke-width="1.4" fill="none">
    <line x1="494" y1="122" x2="468" y2="141"/>
    <line x1="176" y1="404" x2="276" y2="404"/>
    <line x1="170" y1="660" x2="316" y2="664"/>
    <line x1="622" y1="252" x2="470" y2="264"/>
    <line x1="990" y1="345" x2="968" y2="345"/>
    <line x1="628" y1="432" x2="584" y2="356"/>
  </g>
  <g fill="#3d4652">
    <circle cx="468" cy="141" r="3.5"/>
    <circle cx="276" cy="404" r="3.5"/>
    <circle cx="316" cy="664" r="3.5"/>
    <circle cx="470" cy="264" r="3.5"/>
    <circle cx="968" cy="345" r="3.5"/>
    <circle cx="584" cy="356" r="3.5"/>
  </g>
  <g fill="#232a34" font-size="18" font-weight="600">
    <text x="502" y="117">1 &#160;Removable filter basket</text>
    <text x="40" y="399">3 &#160;Portafilter body</text>
    <text x="40" y="655">4 &#160;Double spout</text>
    <text x="630" y="247">2 &#160;Retaining spring</text>
    <text x="998" y="350">5 &#160;Handle</text>
    <text x="636" y="437">6 &#160;Threaded stud</text>
  </g>

  <!-- assembly note -->
  <g fill="#6a7280" font-size="14">
    <text x="600" y="838" text-anchor="middle">Assembly: the basket (1) seats in the body (3) past the retaining spring (2); the double spout (4) screws onto the base; the stud (6) secures the handle (5).</text>
    <text x="600" y="862" text-anchor="middle" font-style="italic">Dashed arrows indicate the assembly direction of each component.</text>
  </g>
</svg>
round 1 of 3
Exploded portafilter, by DeepSeek 4.1 Flash, the render after round 1
123What the model saw after each round. The picture above is the round that was scored, round 3.
gallery/Exploded portafilter/DeepSeek 4.1 Flash, run 2

Exploded portafilter: DeepSeek 4.1 Flash

modeldeepseek/deepseek-v4.1-flashtaskexploded-portafilter@v1, checks c1, harness h1date2026-10-21rounds3 of 8 allowed, 12 minutes on the clockcost$0.0877thinkingmediumtokens258,705 in, 20,971 out, of which 14,087 reasoningtime1 min 28 sfailedParts fit: false, geometry distorted, major
All five partsdecided by looking · Pass if every listed part is drawn as a separate shape and each has a label naming it. A part only named in a label or a comment, with nothing drawn, fails it. The label must say what the part is, in any words: a name that only says where it sits ("top plate") or what it is made of, or a mention in another part's caption, does not count.pass
Stack orderdecided by a number, from the filepass
Parts fitdecided by looking · Pass if each listed pair of mating parts looks as if it would go together as stated: the right angle, nested inside, or sitting on top. One pair that plainly could not fails it.fail
Two assembly axesdecided by looking · Pass if one line runs through the middle of every part on each listed axis, and every leader line leaves from the same side. One part pushed off its axis fails it.pass
Labels matchdecided by looking · Pass if following each leader line from its label ends on the part that label names. One label pointing at the wrong part, or at nothing, fails it.pass

There is no post about this one, since only some results need one, so the picture, the source and the scoring are here instead.

its other runs
the prompt it was given
Draw an exploded assembly diagram of an espresso machine portafilter, as an SVG. Use a double-spout portafilter with a removable basket rather than a bottomless one.
Frozen at v1. This model got this and nothing else.
ground truth

On a vertical axis, top to bottom: filter basket, retaining spring, portafilter body, double spout. The handle is on a horizontal axis off the body, so this is the one member with two axes. Checked against parts sellers, since no maker's exploded diagram could be fetched: Espresso Parts and Zirkus Coffee on the spring that clips into a groove inside the body and grips the basket rim, Espresso Parts on the spout that screws onto the bottom of the body, and Nepo Coffee on handles that screw onto a stud on its side. How it is scored, and this run's files on GitHub.