SVG: exploded portafilter, by deepseek-v4.1-flash
deepseek-v4.1-flash · round 2 of 2 · seed 3$0.08SVGPNGportafilter.svg
portafilter.svg · 255 lines
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 1000" width="900" height="1000">
  <defs>
    <!-- polished steel cylinder -->
    <linearGradient id="steel" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0"    stop-color="#7d848c"/>
      <stop offset="0.13" stop-color="#c6ccd3"/>
      <stop offset="0.32" stop-color="#f5f7f9"/>
      <stop offset="0.50" stop-color="#dfe3e8"/>
      <stop offset="0.72" stop-color="#aab1b9"/>
      <stop offset="0.88" stop-color="#c9cfd6"/>
      <stop offset="1"    stop-color="#767d85"/>
    </linearGradient>

    <!-- flat machined metal face -->
    <linearGradient id="flat" x1="0" y1="0" x2="0.6" y2="1">
      <stop offset="0"   stop-color="#f0f3f6"/>
      <stop offset="0.5" stop-color="#c3c9d0"/>
      <stop offset="1"   stop-color="#9aa1a9"/>
    </linearGradient>

    <!-- dark interior cavity -->
    <linearGradient id="cavity" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0"    stop-color="#1d2126"/>
      <stop offset="0.42" stop-color="#3d444c"/>
      <stop offset="0.62" stop-color="#282d33"/>
      <stop offset="1"    stop-color="#14171b"/>
    </linearGradient>

    <!-- filter basket wall -->
    <linearGradient id="basketWall" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0"    stop-color="#8b9299"/>
      <stop offset="0.16" stop-color="#d3d9df"/>
      <stop offset="0.36" stop-color="#f6f8fa"/>
      <stop offset="0.62" stop-color="#c2c8cf"/>
      <stop offset="0.84" stop-color="#a6adb5"/>
      <stop offset="1"    stop-color="#7e858d"/>
    </linearGradient>

    <!-- walnut handle -->
    <linearGradient id="wood" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0"    stop-color="#a06a3c"/>
      <stop offset="0.28" stop-color="#8a5730"/>
      <stop offset="0.66" stop-color="#5f3a20"/>
      <stop offset="1"    stop-color="#341f0f"/>
    </linearGradient>

    <!-- spout tubing -->
    <linearGradient id="tube" gradientUnits="userSpaceOnUse" x1="230" y1="700" x2="410" y2="800">
      <stop offset="0"   stop-color="#8f969e"/>
      <stop offset="0.35" stop-color="#eef1f4"/>
      <stop offset="0.65" stop-color="#b9c0c8"/>
      <stop offset="1"   stop-color="#767d85"/>
    </linearGradient>
  </defs>

  <!-- frame / background -->
  <rect x="0" y="0" width="900" height="1000" fill="#ffffff"/>
  <rect x="12" y="12" width="876" height="976" rx="18" fill="#fcfdfe" stroke="#e6eaee" stroke-width="1.5"/>

  <!-- title -->
  <text x="450" y="52" text-anchor="middle" font-family="Helvetica, Arial, sans-serif" font-size="29" font-weight="700" fill="#2b2f33">Espresso Portafilter — Exploded Assembly</text>
  <text x="450" y="79" text-anchor="middle" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#6b727a">Double-spout head with removable filter basket</text>

  <!-- ===== central exploded axis ===== -->
  <line x1="320" y1="140" x2="320" y2="846" stroke="#b8bec6" stroke-width="1.6" stroke-dasharray="9 8" opacity="0.9"/>

  <!-- ================================================================= -->
  <!-- 1. FILTER BASKET                                                    -->
  <!-- ================================================================= -->
  <g id="basket">
    <!-- outer tapered wall -->
    <path d="M198,185 L216,285 A104,24 0 0 0 424,285 L442,185 Z" fill="url(#basketWall)" stroke="#6f767e" stroke-width="1.2"/>
    <!-- outer wall highlight -->
    <path d="M232,187 L246,283" stroke="#ffffff" stroke-width="3" opacity="0.55" fill="none"/>

    <!-- inner cavity -->
    <path d="M208,185 L232,270 A88,20 0 0 0 408,270 L432,185 Z" fill="url(#cavity)"/>
    <!-- cavity floor with perforations -->
    <ellipse cx="320" cy="270" rx="88" ry="20" fill="#2c3238"/>
    <g fill="#101316">
      <circle cx="262" cy="265" r="3.1"/><circle cx="282" cy="265" r="3.1"/><circle cx="302" cy="265" r="3.1"/><circle cx="322" cy="265" r="3.1"/><circle cx="342" cy="265" r="3.1"/><circle cx="362" cy="265" r="3.1"/><circle cx="382" cy="265" r="3.1"/>
      <circle cx="252" cy="274" r="3.1"/><circle cx="272" cy="274" r="3.1"/><circle cx="292" cy="274" r="3.1"/><circle cx="312" cy="274" r="3.1"/><circle cx="332" cy="274" r="3.1"/><circle cx="352" cy="274" r="3.1"/><circle cx="372" cy="274" r="3.1"/><circle cx="392" cy="274" r="3.1"/>
      <circle cx="262" cy="283" r="3.1"/><circle cx="282" cy="283" r="3.1"/><circle cx="302" cy="283" r="3.1"/><circle cx="322" cy="283" r="3.1"/><circle cx="342" cy="283" r="3.1"/><circle cx="362" cy="283" r="3.1"/><circle cx="382" cy="283" r="3.1"/>
      <circle cx="292" cy="291" r="2.6"/><circle cx="320" cy="292" r="2.6"/><circle cx="348" cy="291" r="2.6"/>
    </g>

    <!-- top rim flange (the lip the basket hangs from) -->
    <ellipse cx="320" cy="185" rx="132" ry="30" fill="url(#flat)" stroke="#6f767e" stroke-width="1.2"/>
    <ellipse cx="320" cy="185" rx="112" ry="25" fill="url(#cavity)"/>
    <!-- rim highlight -->
    <path d="M198,190 A132,30 0 0 0 442,190" fill="none" stroke="#ffffff" stroke-width="2.4" opacity="0.75"/>
    <!-- inner lip -->
    <path d="M208,185 A112,25 0 0 0 432,185" fill="none" stroke="#8b929a" stroke-width="2" opacity="0.8"/>
  </g>

  <!-- ================================================================= -->
  <!-- 2. RETAINING SPRING                                                 -->
  <!-- ================================================================= -->
  <g id="spring">
    <ellipse cx="320" cy="372" rx="110" ry="24" fill="none" stroke="#9aa1a9" stroke-width="9"/>
    <ellipse cx="320" cy="372" rx="110" ry="24" fill="none" stroke="#e6eaee" stroke-width="3"/>
    <ellipse cx="320" cy="372" rx="101" ry="19.5" fill="none" stroke="#6f767e" stroke-width="2" opacity="0.8"/>
    <!-- coil ticks (front of the wire clip) -->
    <g stroke="#6f767e" stroke-width="2" opacity="0.55">
      <line x1="250" y1="384" x2="244" y2="394"/>
      <line x1="286" y1="390" x2="284" y2="400"/>
      <line x1="320" y1="392" x2="320" y2="402"/>
      <line x1="354" y1="390" x2="356" y2="400"/>
      <line x1="390" y1="384" x2="396" y2="394"/>
    </g>
    <!-- spring ends -->
    <circle cx="218" cy="367" r="4.5" fill="#dfe3e8" stroke="#6f767e" stroke-width="1.2"/>
    <circle cx="218" cy="377" r="4.5" fill="#dfe3e8" stroke="#6f767e" stroke-width="1.2"/>
  </g>

  <!-- ================================================================= -->
  <!-- 3. PORTAFILTER BODY                                                 -->
  <!-- ================================================================= -->
  <g id="body">
    <!-- outer silhouette -->
    <path d="M178,440 L194,575 A126,29 0 0 0 446,575 L462,440 Z" fill="url(#steel)" stroke="#6f767e" stroke-width="1.3"/>
    <!-- vertical reflection on wall -->
    <path d="M232,442 L246,572" stroke="#ffffff" stroke-width="4" opacity="0.45" fill="none"/>
    <path d="M214,442 L228,570" stroke="#ffffff" stroke-width="1.6" opacity="0.35" fill="none"/>
    <!-- subtle base shading -->
    <path d="M232,575 A126,29 0 0 0 408,575" fill="none" stroke="#5f666e" stroke-width="2" opacity="0.5"/>

    <!-- bayonet lugs -->
    <g>
      <rect x="150" y="450" width="40" height="27" rx="6" fill="url(#steel)" stroke="#6f767e" stroke-width="1.4"/>
      <rect x="156" y="455" width="28" height="4" rx="2" fill="#ffffff" opacity="0.5"/>
      <rect x="450" y="450" width="40" height="27" rx="6" fill="url(#steel)" stroke="#6f767e" stroke-width="1.4"/>
      <rect x="456" y="455" width="28" height="4" rx="2" fill="#ffffff" opacity="0.5"/>
    </g>

    <!-- top face / rim -->
    <ellipse cx="320" cy="440" rx="142" ry="33" fill="url(#flat)" stroke="#6f767e" stroke-width="1.3"/>
    <ellipse cx="320" cy="440" rx="124" ry="29" fill="url(#cavity)"/>

    <!-- inner cavity wall down to basket seat and floor -->
    <path d="M196,440 L214,556 A106,24 0 0 0 426,556 L444,440 Z" fill="url(#cavity)"/>
    <ellipse cx="320" cy="556" rx="106" ry="24" fill="#2b3137"/>
    <!-- central spout hole -->
    <ellipse cx="320" cy="556" rx="20" ry="7" fill="#0e1113"/>
    <ellipse cx="320" cy="554" rx="20" ry="7" fill="#1b1f24"/>

    <!-- rim highlights -->
    <path d="M178,446 A142,33 0 0 0 462,446" fill="none" stroke="#ffffff" stroke-width="2.6" opacity="0.8"/>
    <path d="M196,440 A124,29 0 0 0 444,440" fill="none" stroke="#8b929a" stroke-width="2" opacity="0.85"/>
    <!-- basket seat ledge -->
    <ellipse cx="320" cy="470" rx="116" ry="27" fill="none" stroke="#565d65" stroke-width="2.4" opacity="0.8"/>
  </g>

  <!-- neck + handle (attached to the body) -->
  <g id="handle">
    <!-- neck -->
    <path d="M446,494 C482,500 508,509 530,516 L530,558 C508,563 482,570 448,576 Z" fill="url(#steel)" stroke="#6f767e" stroke-width="1.3"/>
    <path d="M460,503 C490,509 512,516 526,521" fill="none" stroke="#ffffff" stroke-width="3" opacity="0.5"/>
    <!-- ferrule/collar -->
    <rect x="524" y="510" width="30" height="55" rx="7" fill="url(#steel)" stroke="#6f767e" stroke-width="1.3"/>
    <rect x="529" y="516" width="5" height="43" rx="2.5" fill="#ffffff" opacity="0.55"/>
    <!-- wooden grip -->
    <path d="M552,514 L772,524 Q796,526 797,540 Q796,554 772,557 L552,560 Z" fill="url(#wood)" stroke="#3a2210" stroke-width="1.2"/>
    <path d="M560,520 L770,529" stroke="#d8a06a" stroke-width="3" opacity="0.45" fill="none"/>
    <path d="M560,553 L770,549" stroke="#20130a" stroke-width="4" opacity="0.4" fill="none"/>
    <!-- end cap -->
    <path d="M772,524 Q796,526 797,540 Q796,554 772,557" fill="none" stroke="#2a180c" stroke-width="1.6" opacity="0.8"/>
  </g>

  <!-- ================================================================= -->
  <!-- 4. SPOUT SCREW                                                      -->
  <!-- ================================================================= -->
  <g id="screw">
    <!-- head -->
    <path d="M300,598 L300,612 A20,7 0 0 0 340,612 L340,598 Z" fill="url(#steel)" stroke="#6f767e" stroke-width="1.1"/>
    <ellipse cx="320" cy="598" rx="20" ry="7" fill="url(#flat)" stroke="#6f767e" stroke-width="1.1"/>
    <path d="M306,595 L334,595" stroke="#5f666e" stroke-width="2.4" stroke-linecap="round" opacity="0.8"/>
    <!-- threaded shaft -->
    <rect x="312" y="612" width="16" height="52" fill="url(#steel)" stroke="#6f767e" stroke-width="1"/>
    <g stroke="#5f666e" stroke-width="1.4" opacity="0.85">
      <line x1="312" y1="620" x2="328" y2="620"/>
      <line x1="312" y1="628" x2="328" y2="628"/>
      <line x1="312" y1="636" x2="328" y2="636"/>
      <line x1="312" y1="644" x2="328" y2="644"/>
      <line x1="312" y1="652" x2="328" y2="652"/>
    </g>
    <ellipse cx="320" cy="664" rx="8" ry="4" fill="#7d848c" stroke="#5f666e" stroke-width="1"/>
  </g>

  <!-- ================================================================= -->
  <!-- 5. DOUBLE SPOUT                                                     -->
  <!-- ================================================================= -->
  <g id="spout">
    <!-- mounting boss -->
    <path d="M268,696 L268,726 A52,14 0 0 0 372,726 L372,696 Z" fill="url(#steel)" stroke="#6f767e" stroke-width="1.3"/>
    <ellipse cx="320" cy="696" rx="52" ry="14" fill="url(#flat)" stroke="#6f767e" stroke-width="1.3"/>
    <ellipse cx="320" cy="696" rx="17" ry="6" fill="#2b3137"/>
    <ellipse cx="320" cy="726" rx="52" ry="14" fill="#7d848c" stroke="#5f666e" stroke-width="1"/>
    <path d="M276,700 A52,14 0 0 0 364,700" fill="none" stroke="#ffffff" stroke-width="1.8" opacity="0.5"/>

    <!-- two outlet tubes -->
    <path d="M296,720 Q266,744 250,790" fill="none" stroke="url(#tube)" stroke-width="25" stroke-linecap="round"/>
    <path d="M344,720 Q374,744 390,790" fill="none" stroke="url(#tube)" stroke-width="25" stroke-linecap="round"/>
    <!-- tube highlights -->
    <path d="M292,722 Q266,744 253,784" fill="none" stroke="#ffffff" stroke-width="2.4" opacity="0.5"/>
    <path d="M348,722 Q374,744 387,784" fill="none" stroke="#ffffff" stroke-width="2.4" opacity="0.5"/>

    <!-- outlet openings -->
    <ellipse cx="249" cy="793" rx="16" ry="10" fill="#4a5057" stroke="#6f767e" stroke-width="1.4"/>
    <ellipse cx="249" cy="793" rx="9" ry="5.5" fill="#101316"/>
    <ellipse cx="391" cy="793" rx="16" ry="10" fill="#4a5057" stroke="#6f767e" stroke-width="1.4"/>
    <ellipse cx="391" cy="793" rx="9" ry="5.5" fill="#101316"/>
  </g>

  <!-- ===== assembly motion arrows ===== -->
  <g stroke="#8a9099" stroke-width="2" fill="#8a9099">
    <!-- basket/spring seat downward -->
    <line x1="398" y1="316" x2="398" y2="410"/>
    <polygon points="391,404 405,404 398,418" stroke="none"/>
    <!-- spout attaches upward -->
    <line x1="418" y1="660" x2="418" y2="586"/>
    <polygon points="411,592 425,592 418,578" stroke="none"/>
  </g>

  <!-- ===== labels / leader lines ===== -->
  <g font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#3c4147">
    <g stroke="#9aa2ab" stroke-width="1.1" fill="none">
      <line x1="150" y1="215" x2="196" y2="212"/>
      <line x1="150" y1="372" x2="208" y2="372"/>
      <line x1="150" y1="505" x2="190" y2="505"/>
      <line x1="150" y1="628" x2="302" y2="624"/>
      <line x1="150" y1="760" x2="250" y2="780"/>
      <line x1="792" y1="462" x2="492" y2="462"/>
      <line x1="720" y1="500" x2="720" y2="519"/>
    </g>
    <circle cx="196" cy="212" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="208" cy="372" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="190" cy="505" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="302" cy="624" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="250" cy="780" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="492" cy="462" r="2.6" fill="#8a9099" stroke="none"/>
    <circle cx="720" cy="519" r="2.6" fill="#8a9099" stroke="none"/>

    <text x="24" y="210">Filter basket</text>
    <text x="24" y="228" font-size="12.5" fill="#6b727a">(removable)</text>
    <text x="24" y="377">Retaining spring</text>
    <text x="24" y="510">Portafilter body</text>
    <text x="24" y="633">Spout screw</text>
    <text x="24" y="771">Double spout</text>

    <text x="876" y="468" text-anchor="end">Bayonet lugs</text>
    <text x="720" y="495" text-anchor="middle">Handle</text>
  </g>
</svg>
round 1 of 2
Exploded portafilter, by DeepSeek 4.1 Flash, the render after round 1
12What the model saw after each round. The picture above is the round that was scored, round 2.
gallery/Exploded portafilter/DeepSeek 4.1 Flash, run 3

Exploded portafilter: DeepSeek 4.1 Flash

modeldeepseek/deepseek-v4.1-flashtaskexploded-portafilter@v1, checks c1, harness h1date2026-10-21rounds2 of 8 allowed, 12 minutes on the clockcost$0.0823thinkingmediumtokens170,454 in, 22,807 out, of which 16,028 reasoningtime1 min 29 s
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.pass
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.