portafilter.svg · 114 lines
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1300" viewBox="0 0 1000 1300">
<defs>
<linearGradient id="steel"><stop stop-color="#737f85"/><stop offset=".18" stop-color="#e9eff0"/><stop offset=".4" stop-color="#b9c5c9"/><stop offset=".65" stop-color="#7b8b93"/><stop offset=".85" stop-color="#d4dfe2"/><stop offset="1" stop-color="#99a7ad"/></linearGradient>
<linearGradient id="top" x2="0" y2="1"><stop stop-color="#f8fbfc"/><stop offset="1" stop-color="#acbcc3"/></linearGradient>
<linearGradient id="inside" x2="0" y2="1"><stop stop-color="#293b45"/><stop offset="1" stop-color="#94a8b1"/></linearGradient>
<linearGradient id="wood" x2="0" y2="1"><stop stop-color="#ac784a"/><stop offset=".32" stop-color="#81532f"/><stop offset=".8" stop-color="#52341e"/><stop offset="1" stop-color="#38281c"/></linearGradient>
<pattern id="holes" width="11" height="8" patternUnits="userSpaceOnUse"><ellipse cx="4" cy="4" rx="1.6" ry="1.1" fill="#344a55"/></pattern>
<marker id="arrow" markerWidth="8" markerHeight="8" refX="6" refY="4" orient="auto"><path d="M1 1 6 4 1 7" fill="none" stroke="#aa663c" stroke-width="1.2"/></marker>
</defs>
<rect width="1000" height="1300" fill="#f6f3ec"/>
<g font-family="Arial, Helvetica, sans-serif" fill="#263c46">
<text x="60" y="63" font-size="12" letter-spacing="3" fill="#a4663f">COMPONENT STUDY / 01</text>
<text x="60" y="110" font-size="35" font-weight="700" letter-spacing="1">The espresso portafilter</text>
<text x="61" y="140" font-size="15" fill="#61727a">Exploded assembly · removable basket · double-spout outlet</text>
<path d="M60 166H940" stroke="#c9cec9"/>
<text x="940" y="64" text-anchor="end" font-size="11" letter-spacing="2">SCHEMATIC • NOT TO SCALE</text>
</g>
<!-- The vertical axis belongs only to basket, spring, head and outlet. -->
<path d="M550 205V1100" fill="none" stroke="#b4bcb9" stroke-width="1.3" stroke-dasharray="12 6 3 6"/>
<!-- removable basket: rolled lip, tapered wall and perforated floor -->
<g stroke="#607781" stroke-width="1.4" stroke-linejoin="round">
<path d="M397 282 L423 385 Q550 441 677 385 L703 282Z" fill="url(#steel)"/>
<path d="M423 375 Q550 427 677 375" fill="none" stroke="#71848c"/>
<ellipse cx="550" cy="282" rx="153" ry="51" fill="url(#top)"/>
<ellipse cx="550" cy="282" rx="139" ry="43" fill="url(#inside)"/>
<ellipse cx="550" cy="295" rx="114" ry="28" fill="#aebdc2" stroke="#708791"/>
<ellipse cx="550" cy="295" rx="112" ry="27" fill="url(#holes)" stroke="none"/>
<path d="M397 282 C397 310 466 333 550 333 S703 310 703 282" fill="none" stroke="#f4f8f9" stroke-width="3"/>
<path d="M414 321 L431 376" fill="none" stroke="#f0f5f6" stroke-width="2"/>
</g>
<!-- split wire spring, removed from the head's internal groove -->
<path d="M523 526 C465 524 411 511 411 492 C411 470 473 453 550 453 S689 470 689 492 C689 509 637 524 577 526" fill="none" stroke="#4e626c" stroke-width="7" stroke-linecap="round"/>
<path d="M523 524 C465 522 411 509 411 490 C411 468 473 451 550 451 S689 468 689 490 C689 507 637 522 577 524" fill="none" stroke="#d8e1e4" stroke-width="3" stroke-linecap="round"/>
<!-- head: side lugs, enclosed sump, central threaded outlet -->
<g stroke="#607781" stroke-width="1.4" stroke-linejoin="round">
<path d="M391 645 L354 650 L354 669 L406 680 L424 660Z" fill="url(#steel)"/>
<path d="M391 635 L354 650 L405 661 L430 645Z" fill="url(#top)"/>
<path d="M697 626 L741 637 L746 656 L704 670 L685 649Z" fill="url(#steel)"/>
<path d="M697 618 L741 637 L706 650 L677 634Z" fill="url(#top)"/>
<path d="M375 654 L394 774 C414 817 686 817 706 774 L725 654Z" fill="url(#steel)"/>
<ellipse cx="550" cy="654" rx="175" ry="59" fill="url(#top)"/>
<ellipse cx="550" cy="654" rx="150" ry="45" fill="url(#inside)"/>
<!-- shallow elliptical groove and closed collection floor -->
<ellipse cx="550" cy="653" rx="145" ry="39" fill="none" stroke="#c2cdd0"/>
<ellipse cx="550" cy="674" rx="103" ry="22" fill="#7c929c"/>
<ellipse cx="550" cy="681" rx="17" ry="6" fill="#263c46"/>
<path d="M397 703 L410 765" fill="none" stroke="#f6f9f9" stroke-width="3"/>
<path d="M522 803 V839 Q550 852 578 839 V803" fill="url(#steel)"/>
<path d="M523 813 Q550 825 577 813 M523 822 Q550 834 577 822 M523 831 Q550 843 577 831" fill="none" stroke="#586e78"/>
<!-- radial side boss: handle screws here, not into the underside -->
<path d="M402 721 L365 736 L379 777 L420 760 Q429 743 402 721Z" fill="url(#steel)"/>
<ellipse cx="370" cy="757" rx="13" ry="23" transform="rotate(-20 370 757)" fill="url(#top)"/>
<ellipse cx="370" cy="757" rx="6" ry="13" transform="rotate(-20 370 757)" fill="#314750"/>
</g>
<!-- handle explosion follows a radial, side-mounted axis -->
<path d="M175 828 L370 757" stroke="#aa663c" stroke-width="1.3" stroke-dasharray="6 5"/>
<path d="M323 774 L346 766" stroke="#aa663c" stroke-width="1.7" marker-end="url(#arrow)"/>
<g transform="translate(305 781) rotate(-20)" stroke="#5c4937" stroke-width="1.4">
<path d="M-216 -28 C-190 -30 -99 -22 -48 -18 L-48 18 C-99 22 -190 30 -216 28 C-248 26 -248 -26 -216 -28Z" fill="url(#wood)"/>
<path d="M-219 -19 Q-153 -18 -63 -12 M-221 -11 Q-147 -9 -65 -6" fill="none" stroke="#c09466" opacity=".6"/>
<path d="M-222 13 Q-151 16 -65 11" fill="none" stroke="#30251b" opacity=".4"/>
<path d="M-48 -19 H-22 V19 H-48Z" fill="url(#steel)" stroke="#607781"/>
<ellipse cx="-22" cy="0" rx="5" ry="19" fill="url(#top)" stroke="#607781"/>
<path d="M-22 -8 H8 V8 H-22" fill="url(#steel)" stroke="#607781"/>
<path d="M-17 -8 L-14 8 M-10 -8 L-7 8 M-3 -8 L0 8 M4 -8 L7 8" fill="none" stroke="#607781"/>
</g>
<!-- detached double-spout fitting, with a shared threaded inlet -->
<path d="M550 911 V870" stroke="#aa663c" stroke-width="1.7" marker-end="url(#arrow)"/>
<g stroke="#607781" stroke-width="1.4" stroke-linejoin="round">
<path d="M514 936 V959 C502 974 458 975 443 993 C434 1005 433 1021 433 1032 Q454 1044 475 1032 V1016 C475 1009 523 1005 550 986 C577 1005 625 1009 625 1016 V1032 Q646 1044 667 1032 C667 1015 666 1005 657 993 C642 975 598 974 586 959 V936Z" fill="url(#steel)"/>
<ellipse cx="550" cy="936" rx="36" ry="14" fill="url(#top)"/>
<ellipse cx="550" cy="936" rx="24" ry="9" fill="#344b56"/>
<path d="M530 937 Q550 945 570 937" fill="none" stroke="#90a5ae"/>
<path d="M520 959 C515 980 457 981 448 999" fill="none" stroke="#f5f8f9" stroke-width="3"/>
<ellipse cx="454" cy="1032" rx="21" ry="8" fill="url(#top)"/>
<ellipse cx="454" cy="1032" rx="14" ry="4.5" fill="#263c46" stroke="none"/>
<ellipse cx="646" cy="1032" rx="21" ry="8" fill="url(#top)"/>
<ellipse cx="646" cy="1032" rx="14" ry="4.5" fill="#263c46" stroke="none"/>
</g>
<!-- insertion direction -->
<path d="M550 423 V442 M550 542 V580" fill="none" stroke="#aa663c" stroke-width="1.7" marker-end="url(#arrow)"/>
<!-- leaders -->
<g fill="none" stroke="#7b8b91" stroke-width="1.2">
<path d="M700 287 H749"/><path d="M690 490 H749"/><path d="M716 739 H749"/>
<path d="M185 847 L185 917 H116"/><path d="M667 996 H749"/>
<path d="M341 606 L364 636"/>
</g>
<g font-family="Arial, Helvetica, sans-serif">
<g fill="#263c46">
<circle cx="768" cy="287" r="14"/><circle cx="768" cy="490" r="14"/><circle cx="768" cy="739" r="14"/><circle cx="98" cy="917" r="14"/><circle cx="768" cy="996" r="14"/>
</g>
<g fill="white" font-size="12" font-weight="700" text-anchor="middle">
<text x="768" y="291">1</text><text x="768" y="494">2</text><text x="768" y="743">3</text><text x="98" y="921">4</text><text x="768" y="1000">5</text>
</g>
<g fill="#263c46" font-size="14" font-weight="700">
<text x="793" y="281">FILTER BASKET</text><text x="793" y="484">RETAINING SPRING</text><text x="793" y="733">PORTAFILTER BODY</text><text x="80" y="952">HANDLE + FERRULE</text><text x="793" y="990">DOUBLE SPOUT</text>
</g>
<g fill="#61727a" font-size="12.5">
<text x="793" y="303">Removable stainless steel</text><text x="793" y="322">Perforated filter floor</text>
<text x="793" y="506">Split wire basket clip</text><text x="793" y="525">Seats in internal groove</text>
<text x="793" y="755">Chrome-plated brass</text><text x="793" y="774">Closed collection sump</text>
<text x="80" y="974">Walnut grip · threaded side mount</text>
<text x="793" y="1012">Screw-on outlet fitting</text><text x="793" y="1031">Two separate discharge lips</text>
<text x="259" y="594">Group-locking lug</text>
</g>
</g>
<path d="M60 1134 H940" stroke="#c9cec9"/>
<g font-family="Arial, Helvetica, sans-serif">
<text x="60" y="1170" font-size="12" font-weight="700" letter-spacing="2" fill="#a4663f">ASSEMBLY NOTES</text>
<text x="60" y="1199" font-size="14" fill="#526770">The spring seats inside the head; the basket presses past it and rests on the upper rim.</text>
<text x="60" y="1223" font-size="14" fill="#526770">The handle threads into the side boss. The double-spout fitting threads onto the bottom outlet.</text>
<text x="60" y="1268" font-size="11" fill="#82908f" letter-spacing="1">ILLUSTRATIVE GEOMETRY · EXPLODED SPACING · NO BOTTOMLESS OPENING</text>
</g>
</svg>round 1 of 5

Exploded portafilter: Pareto 26.10 Preview
modelunbiased/pareto-26.10-previewtaskexploded-portafilter@v1, checks c1, harness h1date2026-10-07rounds5 of 8 allowed, 12 minutes on the clockcost$0.2351thinkingmediumtokens231,494 in, 58,264 out, of which 0 reasoningtime6 min 49 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 · 2r · $0.1517
run 3 · 3r · $0.1385same 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.