portafilter.svg · 139 lines
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 900" width="1000" height="900" font-family="Helvetica, Arial, sans-serif">
<defs>
<linearGradient id="steel" x1="0" x2="1"><stop offset="0" stop-color="#8a9097"/><stop offset=".35" stop-color="#eef1f4"/><stop offset=".7" stop-color="#b4bac1"/><stop offset="1" stop-color="#6d737a"/></linearGradient>
<linearGradient id="steelV" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#eef1f4"/><stop offset=".5" stop-color="#b4bac1"/><stop offset="1" stop-color="#7a8087"/></linearGradient>
<linearGradient id="wood" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#b07a4a"/><stop offset=".4" stop-color="#7a4a26"/><stop offset="1" stop-color="#3e2412"/></linearGradient>
<marker id="dot" viewBox="0 0 6 6" refX="3" refY="3" markerWidth="6" markerHeight="6"><circle cx="3" cy="3" r="2.5" fill="#222"/></marker>
</defs>
<rect width="1000" height="900" fill="#fbfaf7"/>
<text x="500" y="40" text-anchor="middle" font-size="24" font-weight="bold" fill="#222">Double-Spout Portafilter — Exploded Assembly</text>
<text x="500" y="64" text-anchor="middle" font-size="14" fill="#555">58 mm commercial type, removable double-shot basket</text>
<!-- assembly axes -->
<g stroke="#4a7bb7" stroke-width="1.3" stroke-dasharray="10 4 2 4" fill="none">
<line x1="400" y1="95" x2="400" y2="830"/>
<line x1="520" y1="432" x2="640" y2="432"/>
</g>
<!-- 1 FILTER BASKET -->
<g stroke="#333" stroke-width="1.5">
<path d="M308 140 L326 228 A74 16 0 0 0 474 228 L492 140 Z" fill="url(#steel)"/>
<ellipse cx="400" cy="140" rx="100" ry="20" fill="url(#steelV)"/>
<ellipse cx="400" cy="141" rx="88" ry="16" fill="#5d636a"/>
<path d="M312 141 A88 16 0 0 1 488 141" fill="none" stroke="#222"/>
<!-- spring groove -->
<path d="M316 172 A84 15 0 0 0 484 172" fill="none" stroke="#555" stroke-width="2"/>
<path d="M318 176 A82 15 0 0 0 482 176" fill="none" stroke="#fff" stroke-width="1" opacity=".7"/>
<ellipse cx="400" cy="145" rx="74" ry="11" fill="#c7ccd1" stroke="none" opacity=".25"/>
</g>
<!-- basket floor holes seen through? show small holes on bottom edge -->
<g fill="#333">
<circle cx="370" cy="241" r="1.5"/><circle cx="385" cy="243" r="1.5"/><circle cx="400" cy="244" r="1.5"/><circle cx="415" cy="243" r="1.5"/><circle cx="430" cy="241" r="1.5"/>
</g>
<!-- 2 RETAINING SPRING -->
<g fill="none">
<path d="M318 300 A84 17 0 1 0 482 300 A84 17 0 0 0 422 284" stroke="#333" stroke-width="5"/>
<path d="M318 300 A84 17 0 1 0 482 300 A84 17 0 0 0 422 284" stroke="#d9dde1" stroke-width="2.5"/>
<path d="M378 284 A84 17 0 0 0 318 300" stroke="#333" stroke-width="5"/>
<path d="M378 284 A84 17 0 0 0 318 300" stroke="#d9dde1" stroke-width="2.5"/>
</g>
<!-- 3 PORTAFILTER BODY -->
<g stroke="#333" stroke-width="1.5">
<!-- bayonet lugs -->
<path d="M282 392 L262 396 L262 412 L292 410 Z" fill="url(#steelV)"/>
<path d="M518 392 L538 396 L538 412 L508 410 Z" fill="url(#steelV)"/>
<!-- handle arm (stem) -->
<path d="M488 418 L560 422 L560 444 L484 450 Z" fill="url(#steelV)"/>
<ellipse cx="560" cy="433" rx="5" ry="11" fill="#9aa0a6"/>
<!-- threaded stud on arm -->
<rect x="562" y="427" width="34" height="12" fill="#c8cdd2"/>
<g stroke="#666" stroke-width="1"><line x1="567" y1="427" x2="567" y2="439"/><line x1="572" y1="427" x2="572" y2="439"/><line x1="577" y1="427" x2="577" y2="439"/><line x1="582" y1="427" x2="582" y2="439"/><line x1="587" y1="427" x2="587" y2="439"/><line x1="592" y1="427" x2="592" y2="439"/></g>
<!-- cup -->
<path d="M290 392 L300 470 Q320 500 380 506 L380 522 L420 522 L420 506 Q480 500 500 470 L510 392 Z" fill="url(#steel)"/>
<ellipse cx="400" cy="392" rx="110" ry="22" fill="url(#steelV)"/>
<ellipse cx="400" cy="393" rx="94" ry="17" fill="#4e545a"/>
<ellipse cx="400" cy="522" rx="20" ry="5" fill="#666"/>
<ellipse cx="400" cy="522" rx="9" ry="2.5" fill="#222"/>
</g>
<!-- 4 HANDLE -->
<g stroke="#333" stroke-width="1.5">
<path d="M640 420 L660 418 Q760 410 880 414 Q912 416 914 432 Q912 450 880 452 Q760 456 660 448 L640 446 Z" fill="url(#wood)"/>
<rect x="632" y="418" width="16" height="30" rx="3" fill="url(#steelV)"/>
<g stroke="#2a180b" stroke-width="1" fill="none" opacity=".6">
<path d="M680 425 Q760 420 860 424"/><path d="M690 440 Q780 444 870 440"/>
</g>
<ellipse cx="900" cy="433" rx="5" ry="4" fill="#222" stroke="none"/>
</g>
<!-- 5 SPOUT -->
<g stroke="#333" stroke-width="1.5">
<!-- threaded stud -->
<rect x="389" y="602" width="22" height="30" fill="#c8cdd2"/>
<g stroke="#666" stroke-width="1"><line x1="389" y1="607" x2="411" y2="609"/><line x1="389" y1="612" x2="411" y2="614"/><line x1="389" y1="617" x2="411" y2="619"/><line x1="389" y1="622" x2="411" y2="624"/><line x1="389" y1="627" x2="411" y2="629"/></g>
<!-- hex collar -->
<path d="M376 632 L424 632 L424 648 L376 648 Z" fill="url(#steel)"/>
<line x1="392" y1="632" x2="392" y2="648"/><line x1="408" y1="632" x2="408" y2="648"/>
<!-- spout body -->
<path d="M372 648 L428 648 L440 668 L360 668 Z" fill="url(#steel)"/>
<!-- two outlets -->
<path d="M360 668 L392 668 L356 716 L332 708 Z" fill="url(#steel)"/>
<path d="M440 668 L408 668 L444 716 L468 708 Z" fill="url(#steel)"/>
<ellipse cx="344" cy="712" rx="13" ry="5" transform="rotate(18 344 712)" fill="#333"/>
<ellipse cx="456" cy="712" rx="13" ry="5" transform="rotate(-18 456 712)" fill="#333"/>
</g>
<!-- coffee streams hint -->
<g stroke="#6b3f1d" stroke-width="3" stroke-linecap="round" opacity=".5"><line x1="344" y1="722" x2="344" y2="760"/><line x1="456" y1="722" x2="456" y2="760"/></g>
<!-- leader lines + balloons -->
<g stroke="#222" stroke-width="1" fill="none">
<polyline points="308,150 230,150 200,150"/>
<polyline points="318,304 230,304 200,304"/>
<polyline points="262,404 200,404"/>
<polyline points="300,460 230,460 200,460"/>
<polyline points="780,452 780,500"/>
<polyline points="590,427 620,370 660,370"/>
<polyline points="376,640 230,640 200,640"/>
<polyline points="332,708 230,708 200,708"/>
</g>
<g font-size="14" fill="#222">
<g text-anchor="end">
<circle cx="186" cy="150" r="13" fill="#fff" stroke="#222"/><text x="186" y="155" text-anchor="middle" font-weight="bold">1</text>
<text x="166" y="146">Filter basket</text><text x="166" y="163" font-size="12" fill="#555">(double, 14–18 g)</text>
<circle cx="186" cy="304" r="13" fill="#fff" stroke="#222"/><text x="186" y="309" text-anchor="middle" font-weight="bold">2</text>
<text x="166" y="300">Basket retaining</text><text x="166" y="317">spring clip</text>
<circle cx="186" cy="404" r="13" fill="#fff" stroke="#222"/><text x="186" y="409" text-anchor="middle" font-weight="bold">3</text>
<text x="166" y="409">Bayonet lugs (ears)</text>
<circle cx="186" cy="460" r="13" fill="#fff" stroke="#222"/><text x="186" y="465" text-anchor="middle" font-weight="bold">4</text>
<text x="166" y="456">Portafilter body</text><text x="166" y="473" font-size="12" fill="#555">(chrome-plated brass)</text>
<circle cx="186" cy="640" r="13" fill="#fff" stroke="#222"/><text x="186" y="645" text-anchor="middle" font-weight="bold">7</text>
<text x="166" y="636">Spout threaded</text><text x="166" y="653">stud & hex collar</text>
<circle cx="186" cy="708" r="13" fill="#fff" stroke="#222"/><text x="186" y="713" text-anchor="middle" font-weight="bold">8</text>
<text x="166" y="713">Double spout</text>
</g>
<circle cx="674" cy="370" r="13" fill="#fff" stroke="#222"/><text x="674" y="375" text-anchor="middle" font-weight="bold">5</text>
<text x="694" y="375">Handle arm with threaded stud</text>
<circle cx="780" cy="514" r="13" fill="#fff" stroke="#222"/><text x="780" y="519" text-anchor="middle" font-weight="bold">6</text>
<text x="800" y="519">Wooden handle</text>
</g>
<!-- parts list -->
<g font-size="12" fill="#222">
<rect x="620" y="600" width="330" height="200" fill="#fff" stroke="#222"/>
<rect x="620" y="600" width="330" height="24" fill="#e6e9ee" stroke="#222"/>
<text x="632" y="617" font-weight="bold">No.</text><text x="670" y="617" font-weight="bold">Part</text><text x="860" y="617" font-weight="bold">Qty</text>
<text x="635" y="642">1</text><text x="670" y="642">Filter basket, double</text><text x="866" y="642">1</text>
<text x="635" y="664">2</text><text x="670" y="664">Retaining spring clip</text><text x="866" y="664">1</text>
<text x="635" y="686">3</text><text x="670" y="686">Bayonet lug (on body)</text><text x="866" y="686">2</text>
<text x="635" y="708">4</text><text x="670" y="708">Portafilter body</text><text x="866" y="708">1</text>
<text x="635" y="730">5</text><text x="670" y="730">Handle arm / threaded stud</text><text x="866" y="730">1</text>
<text x="635" y="752">6</text><text x="670" y="752">Wooden handle</text><text x="866" y="752">1</text>
<text x="635" y="774">7</text><text x="670" y="774">Spout stud & hex collar</text><text x="866" y="774">1</text>
<text x="635" y="796">8</text><text x="670" y="796">Double spout outlets</text><text x="866" y="796">1</text>
<line x1="660" y1="600" x2="660" y2="800" stroke="#222"/><line x1="850" y1="600" x2="850" y2="800" stroke="#222"/>
</g>
<text x="500" y="870" text-anchor="middle" font-size="12" fill="#666">Dash-dot lines show assembly axes: basket and spring drop into the body; spout threads into the base; handle threads onto the arm stud.</text>
</svg>Exploded portafilter: Opus 5.5
modelanthropic/claude-opus-5.5taskexploded-portafilter@v1, checks c1, harness h1date2026-10-21rounds1 of 8 allowed, 12 minutes on the clockcost$0.0193thinkingmediumtokens19,044 in, 6,353 out, of which 856 reasoningtime1 min 4 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.
run 2 · 1r · $0.0151
run 3 · 2r · $0.0235same prompt, other modelsall 22 runs on Exploded portafilter →
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.
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.