portafilter.svg · 139 lines
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="1080" viewBox="0 0 1200 1080">
<defs>
<linearGradient id="steel" x1="0" x2="1"><stop stop-color="#657980"/><stop offset=".16" stop-color="#c5d1d3"/><stop offset=".36" stop-color="#f7faf7"/><stop offset=".54" stop-color="#a9b9bd"/><stop offset=".76" stop-color="#e4ecea"/><stop offset="1" stop-color="#63777f"/></linearGradient>
<linearGradient id="rim" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#f9fcf8"/><stop offset=".6" stop-color="#c2d0d0"/><stop offset="1" stop-color="#71868c"/></linearGradient>
<linearGradient id="well" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#253e49"/><stop offset=".48" stop-color="#61777d"/><stop offset="1" stop-color="#bac9c9"/></linearGradient>
<linearGradient id="grip" x1="0" y1="0" x2="0" y2="1"><stop stop-color="#4d585a"/><stop offset=".24" stop-color="#323d40"/><stop offset=".6" stop-color="#172b32"/><stop offset="1" stop-color="#0a1b22"/></linearGradient>
<pattern id="holes" width="10" height="8" patternUnits="userSpaceOnUse"><circle cx="3" cy="3" r="1.15" fill="#344f59"/><circle cx="3" cy="4" r=".45" fill="#d6e0dc"/></pattern>
<clipPath id="mouth"><ellipse cx="525" cy="261" rx="113" ry="39"/></clipPath>
<marker id="arrow" markerWidth="7" markerHeight="7" refX="3.5" refY="3.5" orient="auto-start-reverse"><path d="M6 1 L1 3.5 L6 6" fill="none" stroke="#9b5d3d" stroke-width="1"/></marker>
<style>
.outline{stroke:#29434e;stroke-width:1.7;stroke-linejoin:round;stroke-linecap:round}
.detail{fill:none;stroke:#688187;stroke-width:1.1;stroke-linecap:round}
.leader{fill:none;stroke:#87989b;stroke-width:1.2;stroke-linejoin:round}
.axis{fill:none;stroke:#b77a59;stroke-width:1.3;stroke-dasharray:5 6}
.label{font-family:Arial,Helvetica,sans-serif;fill:#223c47}
.small{font-size:14px;fill:#64797f}
.name{font-size:19px;font-weight:600}
.number{font-size:13px;fill:#a45e3d;font-weight:700;letter-spacing:1px}
</style>
</defs>
<rect width="1200" height="1080" fill="#f7f5ef"/>
<g class="label">
<text x="64" y="61" font-size="13" letter-spacing="3" fill="#a45e3d">COMPONENT STUDY / 01</text>
<text x="64" y="113" font-size="43" font-weight="600" letter-spacing="-1.3">The espresso portafilter</text>
<text x="66" y="147" font-size="17" fill="#64797f">Exploded assembly · removable basket · double-spout configuration</text>
<text x="1136" y="67" text-anchor="end" font-size="12" letter-spacing="2" fill="#64797f">BARISTA HARDWARE</text>
</g>
<path d="M64 172H1136" stroke="#d0d7d3"/>
<!-- Shared assembly axis; exposed only between separated components. -->
<path class="axis" d="M525 201V233 M525 384V430 M525 465V516 M525 723V754 M525 889V926"/>
<!-- Removable stainless basket -->
<g transform="translate(0 -18)">
<path d="M399 260 C400 304 412 345 425 366 C460 407 590 407 625 366 C638 345 650 304 651 260Z" fill="url(#steel)" class="outline"/>
<path d="M413 279C418 311 423 341 436 360" fill="none" stroke="#f2f5ef" stroke-width="5" opacity=".65"/>
<path d="M634 279C631 310 624 341 615 358" class="detail"/>
<path d="M425 365C464 393 585 393 625 365" class="detail"/>
<ellipse cx="525" cy="260" rx="131" ry="49" fill="url(#rim)" class="outline"/>
<ellipse cx="525" cy="261" rx="113" ry="39" fill="url(#well)" class="outline"/>
<g clip-path="url(#mouth)">
<ellipse cx="525" cy="281" rx="88" ry="26" fill="#b9c9c9" stroke="#82999d" stroke-width="1.2"/>
<ellipse cx="525" cy="281" rx="80" ry="22" fill="url(#holes)"/>
<path d="M412 261C425 300 625 300 638 261" fill="none" stroke="#d8e3de" stroke-width="2"/>
</g>
<path d="M408 247C450 210 592 208 641 247" fill="none" stroke="#ffffff" stroke-width="2" opacity=".8"/>
<path d="M404 276C451 318 600 318 647 276" fill="none" stroke="#7f959a" stroke-width="1"/>
</g>
<!-- Spring wire, intentionally open at the right -->
<path d="M639 441 C636 420 587 402 527 402 C457 402 399 420 399 442 C399 465 456 482 526 482 C579 482 621 472 635 457" fill="none" stroke="#29434e" stroke-width="5.5" stroke-linecap="round"/>
<path d="M639 440 C636 419 587 401 527 401 C457 401 399 419 399 441 C399 464 456 481 526 481 C579 481 621 471 635 456" fill="none" stroke="#d4dedb" stroke-width="2.7" stroke-linecap="round"/>
<!-- Portafilter body, ears, and side handle socket -->
<g>
<path d="M397 548L367 542L341 554L342 572L386 586L412 571Z" fill="url(#steel)" class="outline"/>
<path d="M342 554L385 567L407 557 M385 567V585" class="detail"/>
<path d="M647 548L676 539L707 550L705 568L668 583L642 570Z" fill="url(#steel)" class="outline"/>
<path d="M676 539L677 559L705 550 M677 559L653 568" class="detail"/>
<path d="M374 566C379 612 398 650 427 674C468 709 582 709 623 674C652 650 671 612 676 566Z" fill="url(#steel)" class="outline"/>
<path d="M391 589C395 614 411 646 432 661" fill="none" stroke="#f4f8f3" stroke-width="6" opacity=".65"/>
<path d="M637 605C632 635 617 658 596 674" class="detail"/>
<path d="M427 673C470 695 580 695 623 673" class="detail"/>
<ellipse cx="525" cy="565" rx="152" ry="56" fill="url(#rim)" class="outline"/>
<ellipse cx="525" cy="565" rx="132" ry="43" fill="url(#well)" class="outline"/>
<path d="M397 575C439 607 611 607 654 575" fill="none" stroke="#c5d4d0" stroke-width="2"/>
<ellipse cx="525" cy="583" rx="76" ry="18" fill="#8b9fa2" stroke="#5c777f" stroke-width="1"/>
<ellipse cx="525" cy="588" rx="19" ry="7" fill="#233f4a"/>
<path d="M387 552C437 509 609 509 663 552" fill="none" stroke="#fbfcf8" stroke-width="2"/>
<!-- Threaded outlet boss at closed base -->
<path d="M504 698V716C505 728 546 728 547 716V698" fill="url(#steel)" class="outline"/>
<ellipse cx="525.5" cy="716" rx="21.5" ry="8" fill="#5b747b" class="outline"/>
<ellipse cx="525.5" cy="716" rx="13.5" ry="4.5" fill="#223e48"/>
<path d="M508 710C517 714 535 714 543 710" class="detail"/>
<!-- Handle mount: socket points along the detached handle axis -->
<path d="M651 609L690 626L704 612L668 593C655 589 643 602 651 609Z" fill="url(#steel)" class="outline"/>
<ellipse cx="696" cy="619" rx="9" ry="13" transform="rotate(32 696 619)" fill="#4b656e" class="outline"/>
<ellipse cx="696" cy="619" rx="4.8" ry="8" transform="rotate(32 696 619)" fill="#1d3540"/>
</g>
<!-- Detached handle along its own radial axis -->
<path class="axis" d="M707 624L752 646"/>
<g transform="translate(757 648) rotate(26)">
<path d="M0 -9H39V9H0Z" fill="url(#steel)" class="outline"/>
<ellipse cx="0" cy="0" rx="3.7" ry="9" fill="#bccbcb" class="outline"/>
<path d="M7 -9V9 M13 -9V9 M19 -9V9 M25 -9V9" stroke="#506c75" stroke-width="1.3"/>
<path d="M33 -15H57V15H33Z" fill="url(#rim)" class="outline"/>
<ellipse cx="33" cy="0" rx="5" ry="15" fill="url(#steel)" class="outline"/>
<path d="M49 -17C83 -20 151 -29 205 -24C234 -22 243 -12 243 0C243 12 234 22 205 24C151 29 83 20 49 17C42 14 42 -14 49 -17Z" fill="url(#grip)" class="outline"/>
<path d="M59 -12C103 -13 170 -22 205 -17C217 -16 224 -13 229 -8" fill="none" stroke="#829092" stroke-width="2.5" opacity=".65"/>
<path d="M56 12C117 15 176 24 214 17" fill="none" stroke="#071920" stroke-width="2"/>
<path d="M224 -20C211 -10 211 10 224 20" fill="none" stroke="#4c5b60" stroke-width="1"/>
</g>
<!-- Two-channel threaded spout -->
<g>
<path d="M503 763L548 763V800C549 813 576 818 598 827C623 837 641 850 641 864L606 878C601 861 578 855 554 850C542 847 532 845 525 843C518 845 508 847 496 850C472 855 449 861 444 878L409 864C409 850 427 837 452 827C474 818 501 813 503 800Z" fill="url(#steel)" class="outline"/>
<ellipse cx="525.5" cy="762" rx="22.5" ry="8.5" fill="url(#rim)" class="outline"/>
<ellipse cx="525.5" cy="762" rx="13" ry="4.8" fill="#37545f"/>
<path d="M504 771C515 777 536 777 547 771 M504 778C515 784 536 784 547 778 M504 785C515 791 536 791 547 785" class="detail"/>
<path d="M516 799C510 827 452 826 426 856 M535 799C541 827 599 826 625 856" fill="none" stroke="#f5faf4" stroke-width="4" opacity=".8"/>
<path d="M525 817V835 M496 842C467 847 451 851 441 860 M555 842C584 847 600 851 610 860" class="detail"/>
<ellipse cx="427" cy="869" rx="20" ry="11" transform="rotate(20 427 869)" fill="url(#rim)" class="outline"/>
<ellipse cx="427" cy="869" rx="13" ry="6.5" transform="rotate(20 427 869)" fill="#213c47"/>
<ellipse cx="623" cy="869" rx="20" ry="11" transform="rotate(-20 623 869)" fill="url(#rim)" class="outline"/>
<ellipse cx="623" cy="869" rx="13" ry="6.5" transform="rotate(-20 623 869)" fill="#213c47"/>
</g>
<!-- Callouts -->
<g class="leader">
<path d="M649 247H743L775 239H817"/><circle cx="649" cy="247" r="3" fill="#87989b"/>
<path d="M403 445H330L305 415H104"/><circle cx="403" cy="445" r="3" fill="#87989b"/>
<path d="M399 627H327L298 604H104"/><circle cx="399" cy="627" r="3" fill="#87989b"/>
<path d="M430 838H326L299 802H104"/><circle cx="430" cy="838" r="3" fill="#87989b"/>
<path d="M948 734L996 806H1095"/><circle cx="948" cy="734" r="3" fill="#87989b"/>
</g>
<g class="label">
<text x="819" y="228" class="number">01</text>
<text x="819" y="259" class="name">Filter basket</text>
<text x="819" y="283" class="small">Removable stainless-steel insert</text>
<text x="819" y="304" class="small">Perforated floor retains the coffee bed.</text>
<text x="104" y="369" class="number">02</text>
<text x="104" y="397" class="name">Retaining spring</text>
<text x="104" y="440" class="small">Split wire ring seats in the</text>
<text x="104" y="461" class="small">body groove and grips the basket.</text>
<text x="104" y="559" class="number">03</text>
<text x="104" y="587" class="name">Portafilter body</text>
<text x="104" y="645" class="small">Locking ears engage the group head.</text>
<text x="104" y="666" class="small">Closed bowl feeds the outlet below.</text>
<text x="104" y="757" class="number">04</text>
<text x="104" y="785" class="name">Double spout</text>
<text x="104" y="863" class="small">Threaded fitting splits the espresso</text>
<text x="104" y="884" class="small">into two separate outlets.</text>
<text x="868" y="840" class="number">05</text>
<text x="868" y="868" class="name">Handle & threaded stud</text>
<text x="868" y="892" class="small">Insulated grip screws into the body.</text>
</g>
<path d="M64 956H1136" stroke="#d0d7d3"/>
<g class="label">
<text x="64" y="989" font-size="12" letter-spacing="2" fill="#a45e3d">ASSEMBLY NOTES</text>
<text x="64" y="1017" font-size="15">Seat the spring in the body groove, then press in the basket. Attach the spout and handle.</text>
<path d="M64 1043H113" class="axis"/>
<text x="126" y="1048" font-size="12" fill="#64797f">Assembly axis</text>
<text x="1136" y="1048" text-anchor="end" font-size="12" fill="#64797f">SCHEMATIC · NOT TO SCALE</text>
</g>
</svg>round 1 of 3

Exploded portafilter: GPT-6.1 Sol
modelopenai/gpt-6.1-soltaskexploded-portafilter@v1, checks c1, harness h1date2026-10-07rounds3 of 8 allowed, 12 minutes on the clockcost$0.0930thinkingmediumtokens76,976 in, 5,912 out, of which 763 reasoningtime2 min 8 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 1 · 1r · $0.0641
run 3 · 2r · $0.0817same 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.