AI CAD benchmark: enclosures, mechanisms and parts from photos
The second batch is harder: two-part enclosures with standoffs and cutouts, a print-in-place hinge, a meshing gear pair, a C-clamp with a lead screw, and two models from reference photos (an Arduino Uno enclosure and a carabiner).
Same setup as the first batch: two Gemini Flash models answer once inside AgentModel, and Claude Opus 5.5 works as an agent with the SolidCraft CAD tool, checking and fixing its own work.
Key findings
- All three arms built all eight parts. Mean judge scores: Opus 5.5 agent 3.25, Gemini 3.7 Flash 3.13, Gemini 3.8 Flash 3.00. None of the arms is clearly better overall.
- Clear agent wins: the hinge and the cable clip, both 4 where single-shot output fused the knuckles or detached the clip from its base.
- Agent losses: the spur gears (ignored the two-colour request) and the Arduino enclosure from a photo (missed one port). Instruction details still slip through the self-check loop.
- No arm managed a good carabiner from a photo (best score 3). Organic, photo-matched curves are still a weak spot for code-driven CAD.
- Cost of the loop: a 264 s median session, against 17 s and 59 s for one Flash generation.
Scoreboard
| Contender | Mode | Built | Mean score | Median time | Cost / tokens |
|---|---|---|---|---|---|
| Gemini 3.7 Flash · OpenSCAD | Single shot | 8/8 | 3.13 | 17 s | $0.14 |
| Gemini 3.8 Flash · OpenSCAD | Single shot | 8/8 | 3.00 | 59 s | $0.46 |
| Opus 5.5 agent · SolidCraft | Agent (self-checking) | 8/8 | 3.25 | 4.4 min | 810k tokens |
- Gemini 3.7 Flash · OpenSCAD
- Gemini 3.8 Flash · OpenSCAD
- Opus 5.5 agent · SolidCraft
Score by part
| Part | Gemini 3.7 Flash OpenSCAD | Gemini 3.8 Flash OpenSCAD | Opus 5.5 agent SolidCraft |
|---|---|---|---|
| Print-in-place hinge | 3 | 3 | 4 |
| Adhesive cable clip | 3 | 2 | 4 |
| Meshing spur gear pair | 4 | 4 | 3 |
| C-clamp (text only) | 3 | 2 | 3 |
| Raspberry Pi Pico enclosure (text only) | 3 | 4 | 3 |
| Vented enclosure for a 100 × 60 mm PCB | 3 | 3 | 3 |
| Arduino Uno enclosure from a photo + dimensions | 4 | 3 | 3 |
| Carabiner from a photo | 2 | 3 | 3 |
Ringed scores are the best on that part. Click a part to jump to its renders.
Results
#Print-in-place hinge
A print-in-place hinge 60 mm long with 5 alternating knuckles, a 4 mm pin with 0.4 mm clearance, two 20 mm wide leaves 3 mm thick each with two Ø3.5 mm countersunk screw holes. Model it in the open (flat) position.
Gemini 3.7 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 48 × 60 × 8 mm
- Time
- 31 s · $0.0235 · 8k tokens
Leaves are at different heights. The orange leaf is flush with the bottom, while the blue leaf is centered. Knuckle geometry is inconsistent and likely fused.
Gemini 3.8 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 3
- Size
- 40 × 60 × 8 mm
- Time
- 3.1 min · $0.15 · 41k tokens
Visually correct with alternating knuckles and holes. However, the blue leaf features a continuous base intersecting the orange knuckles, fusing the joint and preventing rotation.
Opus 5.5 agent SolidCraft4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 60 × 40 × 8 mm
- Time
- 4.3 min · 101k tokens
Model captures the requested hinge design well, including alternating knuckles and countersunk holes. Printability appears solid with a flat base.
#Adhesive cable clip
A snap-in cable clip for a 6 mm cable: 20 × 12 mm flat adhesive base 2 mm thick, a C-shaped arm with a 5.5 mm opening that flexes to grab the cable, 1.6 mm wall, rounded everywhere. Make cable diameter the main parameter.
Gemini 3.7 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 2 · printability 4
- Size
- 20 × 12 × 7.7 mm
- Time
- 13 s · $0.0134 · 6k tokens
Base is flat, but clip geometry is incorrect. Features a U-shape with strange protrusions instead of a C-shaped arm. Not fully rounded.
Gemini 3.8 Flash OpenSCAD2
4 views ↗
- Judge
- fidelity 2 · printability 2
- Size
- 20 × 12 × 12.1 mm
- Time
- 1.9 min · $0.0925 · 27k tokens
Base and clip are completely disconnected with a visible gap. Unprintable and unusable as a single part.
Opus 5.5 agent SolidCraft4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 20 × 12 × 8.2 mm
- Time
- 4.4 min · 98k tokens
Model matches prompt well. Features flat base and C-shaped clip. Proportions look correct. Highly printable as oriented.
#Meshing spur gear pair
A meshing pair of involute spur gears, module 2, 20 and 40 teeth, 20° pressure angle, 8 mm face width, 6 mm bores with a 2 mm keyway, laid out in mesh at the correct center distance. Different colors for the two gears.
Gemini 3.7 Flash OpenSCAD4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 123.9 × 83.8 × 8 mm
- Time
- 17 s · $0.0182 · 7k tokens
Gears mesh correctly with proper bores and keyways. Colors are distinct. Highly printable.
Gemini 3.8 Flash OpenSCAD4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 123.9 × 83.8 × 8 mm
- Time
- 1.5 min · $0.0856 · 25k tokens
Gears mesh well with correct features, bores, keyways, and colors. Large gear has unprompted holes. Good overall.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 123.9 × 83.8 × 8 mm
- Time
- 4.1 min · 101k tokens
Gears mesh correctly with proper bores and keyways. Failed the different colors constraint. Highly printable.
#C-clamp (text only)
A 3D-printable C-clamp: 50 mm maximum opening, 40 mm throat depth, a frame 12 mm thick with a rounded I-beam-like profile, an M8 lead screw with a printed T-handle and a swivel pad. Separate colored parts, laid out for printing.
Gemini 3.7 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 2
- Size
- 107 × 86 × 89.5 mm
- Time
- 15 s · $0.0171 · 7k tokens
Includes all requested parts. However, the long lead screw is oriented vertically, which will likely fail during FDM printing.
Gemini 3.8 Flash OpenSCAD2
4 views ↗
- Judge
- fidelity 2 · printability 2
- Size
- 125 × 101 × 59 mm
- Time
- 14 s · $0.0184 · 7k tokens
Frame is broken into two separate pieces, making it non-functional. The lead screw is oriented horizontally, causing severe overhangs and floating islands.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 2
- Size
- 100 × 96 × 92.8 mm
- Time
- 17.2 min · 121k tokens
Parts are present but lack requested colors. Vertical orientation of the screw and handle rod makes them highly prone to failure during FDM printing.
#Raspberry Pi Pico enclosure (text only)
Design a two-piece enclosure for a Raspberry Pi Pico. Board: 51 × 21 × 1 mm with four Ø2.1 mm mounting holes 4.8 mm in from each long edge and 2 mm in from each short edge. Walls 2 mm, 1 mm clearance around the board, the board sits on four 3 mm posts that pass through the holes, micro-USB cutout 8 × 3.5 mm centered on one short end at board level, a lid with a 1 mm lip that friction-fits. Place base and lid side by side.
Gemini 3.7 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 129.5 × 27 × 11 mm
- Time
- 13 s · $0.0140 · 6k tokens
Base and lid have correct overall shape and cutout. Internal mounting is flawed; only one post is visible, others are malformed.
Gemini 3.8 Flash OpenSCAD4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 57 × 64 × 11 mm
- Time
- 32 s · $0.0285 · 10k tokens
Successfully generated the enclosure with requested features and included a mock board. Good printability.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 57 × 64 × 12 mm
- Time
- 1.8 min · 86k tokens
Enclosure and lid have correct general shape and cutout. Mounting posts are inconsistent.
#Vented enclosure for a 100 × 60 mm PCB
Enclosure for a 100 × 60 × 1.6 mm PCB with components up to 15 mm tall. 2.4 mm walls, 1.5 mm clearance, M3 heat-set standoffs at the four corners 4 mm in from each edge, 6 vent slots 2 × 20 mm on each long side, a USB-C cutout 10 × 4 mm centered on one short side 3 mm above the board, and a lid that screws down with 4 M3 countersunk screws. Show base and lid side by side.
Gemini 3.7 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 240.6 × 67.8 × 25.5 mm
- Time
- 16 s · $0.0200 · 7k tokens
Base and lid generated with standoffs and USB cutout. However, the requested vent slots on the long sides are completely missing.
Gemini 3.8 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 155.6 × 107.8 × 26.8 mm
- Time
- 12 s · $0.0165 · 6k tokens
Base and lid generated with standoffs and USB cutout. Missed the six vent slots, creating one long slot instead.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 107.8 × 145.6 × 26.5 mm
- Time
- 4.8 min · 102k tokens
Base has correct vents, cutout, and standoffs. Lid incorrectly features tall pillars instead of countersunk holes, interfering with assembly.
#Arduino Uno enclosure from a photo + dimensions
This is an Arduino Uno R3: board 68.6 × 53.3 mm, 1.6 mm thick, tallest component 12 mm. Design a two-part snap-fit enclosure for it with 2 mm walls and 1.5 mm clearance around the board, corner standoffs that hold the board 3 mm off the floor, and openings on the short side for the USB-B jack (12 × 11 mm) and the barrel jack (9 × 11 mm) where they are in the photo. Lay the base and lid side by side for printing.
Gemini 3.7 Flash OpenSCAD4
4 views ↗
- Judge
- fidelity 4 · printability 4
- Size
- 75.6 × 136.6 × 12.5 mm
- Time
- 21 s · $0.0199 · 8k tokens
Successfully generates a two-part enclosure with standoffs and port cutouts. Includes unprompted but useful cutouts for headers and reset button. Prints flat, though the snap-fit lip might have minor overhangs.
Gemini 3.8 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 2
- Size
- 166.2 × 60.3 × 13.8 mm
- Time
- 59 s · $0.0495 · 16k tokens
Base includes standoffs and port cutouts. Lid is either a solid block or oriented hollow-side-down, creating a massive unprintable overhang. Snap-fit tabs are present but basic.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 161.2 × 60.3 × 24.1 mm
- Time
- 2.7 min · 94k tokens
Enclosure includes base, lid, standoffs, and snap-fit features, but is missing one of the two required port openings on the short side.
#Carabiner from a photo
Turn the object in this photo into a parametric model I can print as a keychain-sized replica, 60 mm long. Match the overall shape and the gate; the gate can be a fixed part.
Gemini 3.7 Flash OpenSCAD2
4 views ↗
- Judge
- fidelity 2 · printability 2
- Size
- 37.5 × 53 × 30 mm
- Time
- 17 s · $0.0165 · 7k tokens
Recognizable carabiner shape but too rectangular. A large, unexplained cylinder intersects the gate, which is disconnected from the top hook. Unprintable flat due to the protruding cylinder.
Gemini 3.8 Flash OpenSCAD3
4 views ↗
- Judge
- fidelity 3 · printability 3
- Size
- 40 × 62.8 × 8.1 mm
- Time
- 25 s · $0.0247 · 9k tokens
Recognisable carabiner shape but constructed from crude, straight cylindrical segments instead of smooth curves. The gate mechanism is cleverly approximated. Cylindrical cross-section may cause bed adhesion issues without a brim.
Opus 5.5 agent SolidCraft3
4 views ↗
- Judge
- fidelity 3 · printability 4
- Size
- 60 × 36.7 × 6 mm
- Time
- 10.4 min · 106k tokens
Basic D-shape with fixed gate. Lacks the specific curves, varying thickness, and profile of the reference, but serves as a simple keychain replica. Prints flat easily.
How this was run
Single-shot arms are one generation in the AgentModel app (OpenSCAD output) with no retries; reference photos are attached to the request.
The agent arm is Claude Opus 5.5 with a shell, the SolidCraft CLI and a written brief (version 2, which added a time budget and a list of known tool pitfalls). Its time is the whole session.
Every result is exported to STL and rendered the same way (four OpenSCAD views, perspective camera). Gemini 3.1 Pro scores each render 1–5 for overall match, fidelity and printability.
Eight parts is a small sample: read the per-part results, not just the averages.
Every model file is linked under its render. Open a .scad file in OpenSCAD or a .step file in any CAD tool to inspect the geometry yourself.