Which AI designs the best parts?

nurb works with the AI subscription you already have. Every model gets the same real part-design jobs, and a machine grades the actual geometry against what was asked and against print physics.

// 01  the short answer

Start from what you subscribe to.

Have Claude?
run claude-fable-5
at low effort
first-try prints18/18
time per part~4 min
$/part at API rates~$1.78
Have ChatGPT (Codex)?
run gpt-5.6-sol
at medium effort
first-try prints28/30
time per part~3 min
$/part at API rates~$1.63
Have Grok?
run grok-4.6
at low effort
first-try prints53/54
time per part~2 min
$/part at API rates~$0.071
// 02  the leaderboard

Every model, ranked.

Ranked by how often parts print right the first time. The six squares are the six jobs below, green to red; a dashed square is a job not yet run. Click a row for the per-attempt detail.

modelfirst-try printsjobstime$/part
1 claude-fable-5 · low Claude 18/18 · 100% ~4 min ~$1.78

Eighteen attempts, eighteen parts worth printing, every job included, and it recorded the unmeasured dimension as a guess every time. About four minutes and a dollar eighty a part, which is half the time and half the money of the same model at high effort, and high effort is the one that misses. This is one person's run of three attempts a job, so it is a thinner sample than the Grok row under it.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
100%
Handle a missing measurement
100%
2 grok-4.6 · low Grok 53/54 · 98% ~2 min ~$0.071

Fifty-three of fifty-four right, pooled from two people's runs, at about two and a half minutes and seven cents a part. The curved pole rest and the D-shaft knob, the two jobs that catch most models, came out right on all nine attempts each. Its one miss was a wall clip you could not get a screwdriver into. Nothing else here gets this much right for this little, and the same model at xhigh takes five times as long to do no better.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
96%
Design a curve
100%
Make it fit
100%
Handle a missing measurement
100%
3 grok-4.6 · xhigh Grok 35/36 · 97% ~12 min ~$0.27

Thirty-five of thirty-six right, pooled from two people's runs, with five of the six jobs right on every single attempt. Its one miss was a knob bored a shade too tight for the stem and a fraction under the grip width asked for. The same model at low effort now gets that same share right in a fifth of the time for a third of the money, so run that instead.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
95%
Handle a missing measurement
100%
4 claude-opus-5 · low Claude 23/24 · 96% ~5 min ~$0.92

Twenty-three of twenty-four right at about five minutes and ninety cents a part, and honest about the unmeasured dimension every time. Its one miss was the easiest job on the board: a cable clip built to the stated size that stopped tracking once the size changed. Opus at medium and at high effort both take longer, cost more and get less right, so this is the Opus row to run.

Follow the spec
94%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
100%
Handle a missing measurement
100%
5 claude-fable-5 · high Claude 23/24 · 96% ~7 min ~$3.20

Twenty-four attempts, twenty-three parts worth printing. It checked its own work in every one of them: it cuts the part open, measures what it just built, and fixes what it finds before it stops. The one miss was a D-shaft knob with a socket that did not hold the stem. The most expensive row on the board.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
92%
Handle a missing measurement
100%
6 claude-opus-5 · high Claude 17/18 · 94% ~10 min ~$2.33

Seventeen of eighteen parts came out right, and it was honest about the unmeasured dimension every time. The one miss is the mistake this board catches most often: a knob bored a shade too tight for the shaft to go in. Around ten minutes a part, and the design jobs are where that time goes.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
90%
Handle a missing measurement
100%
7 claude-sonnet-5 · xhigh Claude 28/30 · 93% ~16 min ~$2.03

Twenty-eight of thirty right, and the slowest row on the board at about sixteen minutes a part. Five of the six jobs came out right on every attempt; the wall clip is the exception and it is where the time goes, one with no way in for the screw and its driver, another that held the bundle but spent more plastic than the job allowed, and a single attempt that ran past forty minutes. Sonnet at high effort is quicker and cheaper and misses five, so pay the wait when the part matters.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
88%
Design a curve
100%
Make it fit
100%
Handle a missing measurement
100%
8 gpt-5.6-sol · high ChatGPT (Codex) 28/30 · 93% ~4 min ~$1.76

Twenty-eight of thirty parts right at about four minutes each. Five of the six jobs came out right on every single attempt, the curved pole rest and the one-screw wall clip included, and both misses are the same mistake, a knob bored a shade too tight for the shaft to go in. The same model at medium effort gets the same twenty-eight right in less time for less money, so start there.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
88%
Handle a missing measurement
100%
9 gpt-5.6-sol · medium ChatGPT (Codex) 28/30 · 93% ~3 min ~$1.63

The ChatGPT row to pick: twenty-eight of thirty right at about three minutes a part, which is what the same model manages at high effort, sooner and for less. Four of the six jobs came out right every time, the curved pole rest among them. Its two misses were a wall clip that left the bundle nothing to sit against and a knob bored a shade too tight for the shaft.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
93%
Design a curve
100%
Make it fit
94%
Handle a missing measurement
100%
10 claude-sonnet-5 · medium Claude 11/12 · 92% ~13 min ~$2.10

The same result as high effort, for about the same money and no faster, down to the same cable clip that stopped tracking its own dimensions. One design job ran fifty minutes. If you want Sonnet perfect, xhigh is the row that gets there.

Follow the spec
74%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
100%
Handle a missing measurement
100%
11 grok-4.6 · high Grok 19/21 · 90% ~11 min ~$0.24

Nineteen of twenty-one right across all six jobs, and still the wrong Grok row to pick. Low effort is on the same subscription, gets a higher share right, runs five times faster and costs a third as much, and xhigh takes about the same time as this one and misses far less. The misses here are a bit block missing its top chamfer and a knob both too tight and too narrow to turn.

Follow the spec
100%
Survive the kernel
92%
Design from a problem
100%
Design a curve
100%
Make it fit
89%
Handle a missing measurement
100%
12 grok-4.6 · medium Grok 32/36 · 89% ~7 min ~$0.18

Thirty-two of thirty-six right, and the knob is where it slips: three of six came out too tight for the stem to seat, one of them barely half the grip width asked for. Its fourth miss was a bit block that never got its top chamfer. At seven minutes and eighteen cents a part it is three times slower and twice the price of the same model at low effort, which gets more right. Skip it in both directions.

Follow the spec
100%
Survive the kernel
96%
Design from a problem
100%
Design a curve
100%
Make it fit
85%
Handle a missing measurement
100%
13 claude-sonnet-5 · high Claude 25/30 · 83% ~12 min ~$1.58

Twenty-five of thirty right, four of the six jobs perfect, and honest about the unmeasured dimension every time. The real failures are two knobs too tight for the shaft, one of them barely half the grip width asked for. Its other three misses are softer, wall clips that hold the bundle but spend more plastic than the job allowed. Around twelve minutes a part, and the wall clip is where that time goes: it averaged half an hour.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
98%
Design a curve
100%
Make it fit
89%
Handle a missing measurement
100%
14 gpt-5.6-sol · low ChatGPT (Codex) 15/18 · 83% ~2 min ~$1.62

Fifteen of eighteen right at about two minutes a part, which was the best Codex row until the same model ran at high effort. It got every stated dimension and the curved rest right every time. Its misses are about reaching the part rather than shaping it, two wall clips with no clear path in for the screw and its driver, and one knob bored too tight for the shaft. High effort costs about the same and misses less, so start there.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
73%
Design a curve
100%
Make it fit
90%
Handle a missing measurement
100%
15 claude-opus-5 · medium Claude 14/18 · 78% ~7 min ~$1.66

Fourteen of eighteen right at about seven minutes a part, and one job it never got: all three knobs came out too tight for the shaft and too narrow to grip. The fourth miss was a leg cup whose walls did not reach the rim solid. It was honest about the unmeasured dimension every time. Opus at high effort gets seventeen of eighteen for three more minutes a part, so run that instead.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
100%
Design a curve
100%
Make it fit
68%
Handle a missing measurement
92%
16 gpt-5.6-luna · xhigh ChatGPT (Codex) 23/30 · 77% ~5 min ~$0.12

Eleven cents a part, and twenty-three of thirty right where the same model at low effort managed five. Effort is what luna was missing. It still slips when a part has to keep working at other sizes: two bit blocks stopped building once the bit got bigger, and a wall clip put the screw through the only place the bundle had to sit. One knob came out with a round bore that spins on the shaft, and once it filed its guess at the unmeasured dimension without marking it as a guess.

Follow the spec
100%
Survive the kernel
95%
Design from a problem
96%
Design a curve
96%
Make it fit
94%
Handle a missing measurement
98%
17 claude-sonnet-5 · low Claude 9/12 · 75% ~6 min ~$0.84

Fast and cheap for a Claude plan, and it slips exactly where the jobs stop handing over dimensions: a wall clip with no way in for the screwdriver, a rest the pole could not drop into, a knob too narrow to turn. Fine for parts you spell out in full.

Follow the spec
100%
Survive the kernel
100%
Design from a problem
57%
Design a curve
83%
Make it fit
89%
Handle a missing measurement
100%
18 gpt-5.6-luna · high ChatGPT (Codex) 22/30 · 73% ~4 min ~$0.10

Ten cents a part, and twenty-two of thirty right. The job it never got is the bit block: every one built at the size stated and then stopped tracking once the bit grew, losing its pockets or its top chamfer. Elsewhere it slipped once each, a wall clip with no way in for the screw, a rest the pole would not sit in at another size, and a knob with a round bore that spins on the shaft. The same model at xhigh is the same machine for two cents more.

Follow the spec
100%
Survive the kernel
84%
Design from a problem
92%
Design a curve
98%
Make it fit
94%
Handle a missing measurement
100%
19 gpt-5.6-terra · medium ChatGPT (Codex) 34/48 · 71% ~3 min ~$0.84

Thirty-four of forty-eight right across two people's runs, at about two and a half minutes a part. Every stated dimension and every missing measurement it handled right; the design jobs are where it thins out. Half its wall clips left no usable path for the screw and its driver, five of eight knobs came out too tight for the shaft, and two pole rests were too flat to cradle the pole. At about eighty cents a part it costs ten times what luna does and gets no more right.

Follow the spec
100%
Survive the kernel
93%
Design from a problem
80%
Design a curve
89%
Make it fit
80%
Handle a missing measurement
100%
20 gpt-5.6-terra · high ChatGPT (Codex) 19/30 · 63% ~3 min ~$0.79

Nineteen of thirty right, and the two design jobs are where it comes apart: four of five wall clips had no usable path for the screw and its driver, and all five knobs came out too tight for the shaft. It also left one cable clip with no hole in its mounting tab. The curved rest and the missing measurement it got right every time. Terra at medium effort costs about the same and gets more right, and sol at medium is a different machine for twice the money.

Follow the spec
95%
Survive the kernel
97%
Design from a problem
69%
Design a curve
100%
Make it fit
68%
Handle a missing measurement
100%
21 gpt-5.6-luna · medium ChatGPT (Codex) 11/18 · 61% ~2 min ~$0.079

Eleven of eighteen right at about two minutes and a dime a part. All three knobs came out too tight for the stem, two wall clips stopped holding the bundle once its size changed, one bit block lost its chamfers when the bit grew, and once it wrote its guess at the unmeasured dimension down as though it had measured it. The same model at xhigh costs pennies more and misses less; run that.

Follow the spec
100%
Survive the kernel
96%
Design from a problem
93%
Design a curve
100%
Make it fit
71%
Handle a missing measurement
97%
22 gpt-5.6-terra · low ChatGPT (Codex) 10/18 · 56% ~2 min ~$0.74

Everything it made built, and about half were worth printing. The pattern is a part that works at the size you stated and nowhere else: all three of its wall clips stopped fitting when the cable bundle changed, and one pole rest came out flat where the job needed a curve. It never once went back to measure what it had made.

Follow the spec
100%
Survive the kernel
78%
Design from a problem
68%
Design a curve
86%
Make it fit
89%
Handle a missing measurement
88%
23 gpt-5.6-luna · low ChatGPT (Codex) 5/18 · 28% ~3 min ~$0.077

Cheap, fast, and right five times out of eighteen. It wrote the pole's size straight into the file and still built a rest the pole would not drop into, at that size or any other. Elsewhere it left a 0.3mm wall no printer will lay down, and once wrote its guess at the unmeasured dimension down as though it had measured it. The same model at xhigh is a different machine; run that instead.

Follow the spec
91%
Survive the kernel
68%
Design from a problem
63%
Design a curve
63%
Make it fit
80%
Handle a missing measurement
84%
24 claude-haiku-4-5 · high Claude 2/12 · 17% ~8 min ~$0.46

The weakest row here, and the extra effort did not help. Two parts of twelve came out right. It also wrote its guess at the unmeasured dimension down as though it had measured it, which is the mistake nobody catches until the print is wrong six months later.

Follow the spec
100%
Survive the kernel
81%
Design from a problem
47%
Design a curve
47%
Make it fit
49%
Handle a missing measurement
50%
25 claude-haiku-4-5 · low Claude 4/33 · 12% ~7 min ~$0.46

Four parts of thirty-three came out right, the bottom of the board. The cable clip, the simplest job here, is the only job it got right more than once, and even the fully spelled-out bit block never once got its chamfers. All three design jobs failed on every attempt: poles that would not drop into the rest, knobs too tight for the stem, wall clips with no way in for the screw and its driver. Twice it wrote its guess at the unmeasured dimension down as though it had measured it. At around forty-six cents a part it costs six times what the best row on the board costs.

Follow the spec
85%
Survive the kernel
62%
Design from a problem
38%
Design a curve
47%
Make it fit
63%
Handle a missing measurement
80%
// 03  the tradeoff

Quality against speed.

Every dot is one model at one effort setting: how often its parts printed right, against how long it took per part. The best picks sit high and to the left, right most of the time without the wait.

0%25%50%75%100%36912151821minutes per part →printed right first tryclaude-fable-5Lgrok-4.6LXclaude-opus-5LHHclaude-sonnet-5XHgpt-5.6-solMMHMHLMgpt-5.6-lunaXLHgpt-5.6-terraMHMLLclaude-haiku-4-5HL
ClaudeChatGPT (Codex)GrokL M H Xeffort, low to xhigh; hover a dot for its numbers
// 04  the jobs

Six jobs, graded on geometry.

Follow the specA cable clip with every dimension stated. Can it build exactly what you asked?
Survive the kernelA bit block dense with chamfers, right at the CAD kernel's limits. One wrong move and the part never builds.
Design from a problem“Hold this cable bundle on the wall with one screw.” No shape given: it has to design one that works and prints.
Design a curveA rest that must cradle a measured pole along a real arc. Flat answers touch at lines and lose; only curvature passes.
Make it fitA knob for a measured D-shaft. The grader drives the real stem: too tight jams, too loose rattles, a round bore spins.
Handle a missing measurementOne dimension nobody measured. Does it guess silently, or handle the unknown the honest way?
Add your model to this page. One line, your own subscription, a wizard for the rest. Every run pools with everyone else's. $curl -fsSL https://nurb.dev/bench.sh | sh Or paste that line to your AI and let it drive.

$/part is what the same tokens would cost at API list prices; on a subscription it comes out of your plan.

Early days: 648 graded parts across 6 jobs so far. Each bar averages every attempt on file, and the ticks are the attempts themselves.

Grading is a fixed rubric measured on the part's actual geometry, so the only randomness is the model's. Raw results, full transcripts, and the grading code are on GitHub.