AgentModel

AI CAD benchmark: enclosures, mechanisms and parts from photos

Run · 8 parts · 3 contenders

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.

  • OpenSCAD
  • SolidCraft
  • Opus 5.5
  • Gemini 3.8 Flash
  • enclosures
  • photo to CAD

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

ContenderModeBuiltMean scoreMedian timeCost / 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
012345Gemini 3.7 Flash OpenSCAD 3.13Gemini 3.8 Flash OpenSCAD 3.00Opus 5.5 agent SolidCraft 3.25
Mean judge score, 1–5, over the parts each contender built.
10 s30 s60 s3.0 min10.0 min12345 time per part (log scale) → judge score Gemini 3.7 Flash · OpenSCAD: 3 in 31 sGemini 3.8 Flash · OpenSCAD: 3 in 3.1 minOpus 5.5 agent · SolidCraft: 4 in 4.3 minGemini 3.7 Flash · OpenSCAD: 3 in 13 sGemini 3.8 Flash · OpenSCAD: 2 in 1.9 minOpus 5.5 agent · SolidCraft: 4 in 4.4 minGemini 3.7 Flash · OpenSCAD: 4 in 17 sGemini 3.8 Flash · OpenSCAD: 4 in 1.5 minOpus 5.5 agent · SolidCraft: 3 in 4.1 minGemini 3.7 Flash · OpenSCAD: 3 in 15 sGemini 3.8 Flash · OpenSCAD: 2 in 14 sOpus 5.5 agent · SolidCraft: 3 in 17.2 minGemini 3.7 Flash · OpenSCAD: 3 in 13 sGemini 3.8 Flash · OpenSCAD: 4 in 32 sOpus 5.5 agent · SolidCraft: 3 in 1.8 minGemini 3.7 Flash · OpenSCAD: 3 in 16 sGemini 3.8 Flash · OpenSCAD: 3 in 12 sOpus 5.5 agent · SolidCraft: 3 in 4.8 minGemini 3.7 Flash · OpenSCAD: 4 in 21 sGemini 3.8 Flash · OpenSCAD: 3 in 59 sOpus 5.5 agent · SolidCraft: 3 in 2.7 minGemini 3.7 Flash · OpenSCAD: 2 in 17 sGemini 3.8 Flash · OpenSCAD: 3 in 25 sOpus 5.5 agent · SolidCraft: 3 in 10.4 minGemini 3.7 Flash · OpenSCAD: mean 3.13, median 17 sGemini 3.8 Flash · OpenSCAD: mean 3.00, median 59 sOpus 5.5 agent · SolidCraft: mean 3.25, median 4.4 min
Each small dot is one part. Large ringed dots mark each contender's median time and mean score. Up and to the left is better.
  • Gemini 3.7 Flash · OpenSCAD
  • Gemini 3.8 Flash · OpenSCAD
  • Opus 5.5 agent · SolidCraft

Score by part

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

Gemini 3.7 Flash (OpenSCAD) result for Print-in-place hinge, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD3

Gemini 3.8 Flash (OpenSCAD) result for Print-in-place hinge, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft4

Opus 5.5 agent (SolidCraft) result for Print-in-place hinge, isometric render4 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.

script.jsonmodel.stepmodel.stl

#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

Gemini 3.7 Flash (OpenSCAD) result for Adhesive cable clip, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD2

Gemini 3.8 Flash (OpenSCAD) result for Adhesive cable clip, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft4

Opus 5.5 agent (SolidCraft) result for Adhesive cable clip, isometric render4 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.

script.jsonmodel.stepmodel.stl

#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

Gemini 3.7 Flash (OpenSCAD) result for Meshing spur gear pair, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD4

Gemini 3.8 Flash (OpenSCAD) result for Meshing spur gear pair, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for Meshing spur gear pair, isometric render4 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.

script.jsonmodel.stepmodel.stl

#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

Gemini 3.7 Flash (OpenSCAD) result for C-clamp (text only), isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD2

Gemini 3.8 Flash (OpenSCAD) result for C-clamp (text only), isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for C-clamp (text only), isometric render4 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.

script.json

#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

Gemini 3.7 Flash (OpenSCAD) result for Raspberry Pi Pico enclosure (text only), isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD4

Gemini 3.8 Flash (OpenSCAD) result for Raspberry Pi Pico enclosure (text only), isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for Raspberry Pi Pico enclosure (text only), isometric render4 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.

script.jsonmodel.stepmodel.stl

#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

Gemini 3.7 Flash (OpenSCAD) result for Vented enclosure for a 100 × 60 mm PCB, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD3

Gemini 3.8 Flash (OpenSCAD) result for Vented enclosure for a 100 × 60 mm PCB, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for Vented enclosure for a 100 × 60 mm PCB, isometric render4 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.

script.jsonmodel.stepmodel.stl

#Arduino Uno enclosure from a photo + dimensions

Reference photo of the board for Arduino Uno enclosure from a photo + dimensions
Reference photo of the board · JrawX, CC0

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

Gemini 3.7 Flash (OpenSCAD) result for Arduino Uno enclosure from a photo + dimensions, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD3

Gemini 3.8 Flash (OpenSCAD) result for Arduino Uno enclosure from a photo + dimensions, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for Arduino Uno enclosure from a photo + dimensions, isometric render4 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.

script.jsonmodel.stepmodel.stl

#Carabiner from a photo

Reference photo for Carabiner from a photo
Reference photo · Stefan Bellini, CC0

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

Gemini 3.7 Flash (OpenSCAD) result for Carabiner from a photo, isometric render4 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.

model.scadmodel.stl

Gemini 3.8 Flash OpenSCAD3

Gemini 3.8 Flash (OpenSCAD) result for Carabiner from a photo, isometric render4 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.

model.scadmodel.stl

Opus 5.5 agent SolidCraft3

Opus 5.5 agent (SolidCraft) result for Carabiner from a photo, isometric render4 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.

script.jsonmodel.stepmodel.stl

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.