portafilter.svg · 110 lines
<svg xmlns="http://www.w3.org/2000/svg" width="700" height="1000" viewBox="0 0 700 1000">
<defs>
<linearGradient id="steel" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#8f979e"/>
<stop offset="0.3" stop-color="#e8ecef"/>
<stop offset="0.55" stop-color="#b9c1c7"/>
<stop offset="0.8" stop-color="#dfe4e8"/>
<stop offset="1" stop-color="#7d858c"/>
</linearGradient>
<linearGradient id="dark" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#2b2f33"/>
<stop offset="0.35" stop-color="#565d63"/>
<stop offset="0.6" stop-color="#3a4045"/>
<stop offset="1" stop-color="#22262a"/>
</linearGradient>
<radialGradient id="bore" cx="0.5" cy="0.45" r="0.7">
<stop offset="0" stop-color="#4a4f54"/>
<stop offset="0.7" stop-color="#2e3236"/>
<stop offset="1" stop-color="#1c1f22"/>
</radialGradient>
<radialGradient id="basketIn" cx="0.5" cy="0.4" r="0.75">
<stop offset="0" stop-color="#b7bec4"/>
<stop offset="0.75" stop-color="#8c9399"/>
<stop offset="1" stop-color="#6c7378"/>
</radialGradient>
</defs>
<rect width="700" height="1000" fill="#f5f3ee"/>
<text x="350" y="46" text-anchor="middle" font-family="Georgia, serif" font-size="24" fill="#33383d">Exploded Assembly — Double-Spout Portafilter</text>
<!-- center axis -->
<line x1="350" y1="70" x2="350" y2="960" stroke="#b0433a" stroke-width="1.5" stroke-dasharray="10 6 2 6"/>
<!-- ===== 1. Screw (thumbscrew) ===== -->
<g>
<rect x="332" y="78" width="36" height="14" rx="4" fill="url(#steel)" stroke="#6a7178"/>
<rect x="341" y="92" width="18" height="26" fill="url(#steel)" stroke="#6a7178"/>
<ellipse cx="350" cy="92" rx="9" ry="3.5" fill="#d7dce0" stroke="#6a7178"/>
<text x="420" y="100" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">1 · Retaining screw</text>
</g>
<!-- ===== 2. Handle (bakelite) ===== -->
<g>
<!-- handle shaft connecting to head -->
<rect x="330" y="196" width="40" height="60" fill="url(#steel)" stroke="#6a7178"/>
<!-- black tapered handle -->
<path d="M 340 200 C 322 252 296 302 268 338 C 244 366 214 384 190 384 C 166 384 150 368 150 344 C 150 322 166 306 190 296 C 224 284 262 246 296 200 L 340 200 Z"
fill="url(#dark)" stroke="#14171a" stroke-width="2"/>
<path d="M 176 316 C 200 300 226 274 252 244" stroke="#6d757c" stroke-width="4" fill="none" opacity="0.55" stroke-linecap="round"/>
<ellipse cx="350" cy="196" rx="20" ry="7" fill="#cfd5d9" stroke="#6a7178"/>
<text x="120" y="300" text-anchor="end" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">2 · Handle</text>
</g>
<!-- ===== 3. Head / body ===== -->
<g>
<!-- top flange -->
<ellipse cx="350" cy="452" rx="110" ry="30" fill="url(#steel)" stroke="#6a7178"/>
<rect x="240" y="452" width="220" height="60" fill="url(#steel)" stroke="#6a7178"/>
<path d="M 240 512 A 110 30 0 0 0 460 512" fill="#9aa2a9" stroke="#6a7178"/>
<!-- top opening -->
<ellipse cx="350" cy="452" rx="86" ry="22" fill="url(#bore)" stroke="#5a6167"/>
<!-- lower spout block -->
<rect x="290" y="510" width="120" height="58" rx="8" fill="url(#steel)" stroke="#6a7178"/>
<path d="M 290 560 A 120 26 0 0 0 410 560" fill="#9aa2a9" stroke="#6a7178"/>
<!-- two spout stubs -->
<path d="M 300 566 L 292 600 L 322 600 L 322 566 Z" fill="url(#steel)" stroke="#6a7178"/>
<path d="M 378 566 L 378 600 L 408 600 L 400 566 Z" fill="url(#steel)" stroke="#6a7178"/>
<text x="520" y="490" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">3 · Head (body) with</text>
<text x="520" y="510" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">double spouts</text>
</g>
<!-- ===== 4. Removable basket ===== -->
<g>
<!-- side walls tapering -->
<path d="M 262 660 L 278 742 L 422 742 L 438 660 Z" fill="url(#steel)" stroke="#6a7178"/>
<!-- rim -->
<ellipse cx="350" cy="660" rx="88" ry="20" fill="#c6ccd1" stroke="#6a7178"/>
<ellipse cx="350" cy="660" rx="72" ry="15.5" fill="url(#basketIn)" stroke="#7c838a"/>
<!-- perforations on inside bottom -->
<g fill="#5f666c">
<circle cx="332" cy="722" r="2.4"/><circle cx="352" cy="724" r="2.4"/><circle cx="372" cy="722" r="2.4"/>
<circle cx="322" cy="729" r="2.4"/><circle cx="342" cy="732" r="2.4"/><circle cx="362" cy="732" r="2.4"/><circle cx="382" cy="729" r="2.4"/>
<circle cx="332" cy="736" r="2.4"/><circle cx="352" cy="738" r="2.4"/><circle cx="372" cy="736" r="2.4"/>
</g>
<!-- spout notches in rim -->
<rect x="277" y="652" width="14" height="8" rx="3" fill="#8b9298" stroke="#6a7178"/>
<rect x="409" y="652" width="14" height="8" rx="3" fill="#8b9298" stroke="#6a7178"/>
<text x="540" y="705" text-anchor="end" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">4 · Removable</text>
<text x="540" y="725" text-anchor="end" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">filter basket</text>
</g>
<!-- ===== 5. Spout tips / outlet piece ===== -->
<g>
<path d="M 300 810 L 288 856 L 322 856 L 322 810 Z" fill="url(#steel)" stroke="#6a7178"/>
<path d="M 378 810 L 378 856 L 412 856 L 400 810 Z" fill="url(#steel)" stroke="#6a7178"/>
<ellipse cx="305" cy="856" rx="17" ry="6" fill="#3a3f44" stroke="#5a6167"/>
<ellipse cx="395" cy="856" rx="17" ry="6" fill="#3a3f44" stroke="#5a6167"/>
<text x="470" y="840" font-family="Helvetica, Arial, sans-serif" font-size="15" fill="#41464b">5 · Spout outlets</text>
</g>
<!-- leader lines for callouts -->
<g stroke="#9aa0a6" stroke-width="1">
<line x1="392" y1="92" x2="414" y2="95"/>
<line x1="128" y1="300" x2="180" y2="326"/>
<line x1="462" y1="480" x2="516" y2="490"/>
<line x1="442" y1="672" x2="500" y2="690"/>
<line x1="416" y1="836" x2="466" y2="836"/>
</g>
</svg>round 1 of 3

Exploded portafilter: GLM 5.3 FlashX
modelz-ai/glm-5.3-flashxtaskexploded-portafilter@v1, checks c1, harness h1date2026-10-21rounds3 of 8 allowed, 12 minutes on the clockcost$0.0197thinkingmediumtokens55,145 in, 3,698 out, of which 250 reasoningtime1 min 6 sfailedParts fit: false, geometry distorted, major · Two assembly axes: unreadable, geometry inconsistent, minor
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.fail
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 1 · 1r · $0.0155
run 3 · 3r · $0.0279same 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.