I tried modifying the provided CadQuery skill to work with build123d with an agent (surprisingly gemini pretty good at this) and it produced very good results (possibly better than the reported CadQuery/OpenSCAD results after taking a little care to avoid leaking the benchmark pass/fail criteria). Worth a try if you are interested in this space.
I like build123d simply because it can export proper STEP (like CadQuery) but has a nicely python friendly design.
Oh, on this topic, I've actually built a geometric CAD kernel with GPT that I think is pretty promising and in my biased opinion, a bit more advanced than OpenSCAD or CadQuery's OCCT backend, anybody here want to clone the repo to give it a try with their Claude/GPT to see they do better on my thing?
It's still kinda buggy but they are actively getting fixed, but Claude and GPTs seemed to work better with my current design than other CAD stacks. Still haven't added threads yet, so can't speak for T3, but generally speaking the generated parts are pretty good quality, and I also got fillets/chamfers working so that's a plus.
None of the "findings" here really needed an AI experiment to do it:
- "CadQuery fails loudly and early... OpenSCAD fails silently and late"
This should be obvious, from the documentation, from the way geometry construction works. OpenSCAD has no sense of failure where one shape means another won't work; you're just drawing the equivalent of 3D pixels in space. It will always potentially-meaninglessly succeed if the syntax is OK.
- Renders caught nothing that mattered
Objects with hollows are not going to show their major problems this way.
- CadQuery can be interrogated, OpenSCAD cannot
Isn't this explicit from the documentation of both? One works by iteratively building on top of a previous result that can be stored in a variable; the other doesn't.
- OpenSCAD renders have no concept of a part edge
Again — this should be explicit from the documentation, which describes no methods for operating on edges (and largely from the fact that it is declarative).
- Speed favours OpenSCAD, and it barely matters
Yes, being faster is no good if things are wrong.
- "What decides it is verifiability rather than expressiveness, and CadQuery leads there by a wider margin than the syntax difference suggests."
Yes, because the difference is semantic. Which you can get from the documentation. Building iteratively on the basis of existing geometry is inherently more verifiable, because stuff that can't work won't work.
Honestly do people not try learning CAD before they try to build an AI tool to generate CAD models? This feels like yet another situation where people who have not done the foundational conceptual work seem to think that they can avoid it and just work around it with AI.
I mean, people didn't write the text, but people did decide it was what they wanted it to say?
I don't really get it. But then I think text-to-CAD is probably the strongest example of cart-before-horse thinking in the AI world as regards technical work compared to creative work.
Comparing OpenSCAD to CadQuery is super apples-to-oranges in the first place. CQ works directly with NURBS curves via the Cascade engine, and OS functions by performing CSG operations. Both certainly have their place, but for engineering applications NURBS are decidedly more powerful.
Has anyone have good success using AI generated CAD parts? I’ve been trying but it’s always 95% there, but with all hardware, you need 100% right. It’s often quicker and cheaper for me to do it by hand (but I was a mechanical design engineer for about a decade prior)
Just this morning I used OpenSCAD for the first time. I got Gemini (just the chatbot, no harness or MCP) to help me design a water-bowl holder for our senior dog (she kept knocking it over).
It was probably an easy model to get right, since the only "critical" dimension was the radius of the interior. But I was able to tweak the numbers on the support length & some other details relatively easily, and I had a working solution 2 hours of print time later.
(I had a CAD class in highschool, but haven't used it since).
I suspect this may be another case of "LLMs are mainly good at things you're bad at."
I’ve been playing in this space as a moderately experienced hobbyist - mainly for 3D printing functional parts.
I’m using a single repo for all my models and Claude with build123d (plus a VS Code viz extension). Over time, I’ve built up a little folder of useful skills and I’m generally getting satisfactory results.
That said, I have had my eye on CadQuery and am looking for an excuse to try it. For those in the know: how does it compare to build123d?
The fundamental difference is that CadQuery uses that jQuery-inspired fluent syntax, with a sort of metalanguage for some aspects, and Build123D is more pythonic with two different more procedural syntaxes.
The other difference (which I have only read abut) is in the way their assembly constraints work; again Build123D takes the more procedural approach (declaring "joints" etc.)
CadQuery came first; Build123D is sort of a more pythonic, robust restatement of it.
Exactly. But then text-to-CAD projects almost all have this over-reliance on the declarative nature of OpenSCAD.
Cynically it always feels to me like they are written by people who not only think end users shouldn't have to learn CAD principles, they themselves shouldn't have to either.
not interesting as the writeup as very AI sloppish :(. i'm sad about that as I would really like to have an intuitive sense for how good the current frontier models are at coming up with interesting 3d printable parts.
I've been just getting started on this with Astra. Astra is one-shotting good 3D models from photographs for me. I was unable to get Sol to do this, even after multiple rounds.
It's not a small change, it's from "not useful" to "pretty good"
Right but there is no meaningful specification failure mode in creative CAD, is there? I mean, yes, image to CAD for a little miniature, I can buy that it is OK. Fun, even, especially when your use is sort of transitory.
But this article is talking about functional parts. A functional part exists because of its spec, usually fails because of some combination of its material, manufacture, and spec. And the spec is chosen with that in mind.
Even working from a text description of a part is error prone because language is imprecise and interpretable. I just don't understand why AI people want to race past actual proper sensible solutions to a problem just to automate generating from text.
People don't have time (or even mental capability / even more time) to learn CAD but they have a task at hand which they want done. If AI can generate a part which is "good enough" for the user at a cost that the user considers reasonable (I.e. zero) then AI gets used. If a part fails thats rarely a concern because these parts are just 3d printed and likely cost single digit cents in filament. User can always print a new one.
Right, but the thing that I think sort of militates against this scenario is this:
If a non-CAD person imagines a part that they need, the chances are very high indeed that either it isn't what they need, can't be made robustly or sensibly, or if it is, it already exists in some meaningful way that can be adapted, because one of tens of millions of other people already wanted it.
This scenario — needing something very specific that can be described only in words and nobody else has ever needed before — is almost imaginary. Most stuff just isn't like that.
Now… if someone were to design an AI CAD package that could remix objects that exist and combine them, perhaps with a GUI tool that allowed a user to identify attachment points, maybe that would be interesting. But a lot of that has been solved in non-AI GUIs already.
Text-to-CAD just isn't as good an idea as it seems. You are not going to be able to magic up some novel invention from a text description without a significant amount of domain knowledge of the words needed to describe a part, and that domain knowledge usually comes from learning CAD!
(Bit like getting a coding agent to write really good code)
And simple parts, sorry, just don't need much CAD skill. Get a CAD package on a free plan, learn enough to make your thing. You will get so much more out of that and it will be easier to make changes. It'll probably have standard tools for adding threads, even.
Even image-to-CAD for a functional part requires a significant amount of understanding of what to photograph and from which angles, etc.
For OpenSCAD, AI models from about GPT4.5 onwards have been able to build and combine shape primitives pretty well, but that was never immensely useful.
Just last week I had Gemini 3.8 Flash and Antigravity take an existing STL of a part and swap out a piece of it with another design (fan shrouds on a computer case front plate). In the process it created exploded parts diagrams from the STL, created 2D renders from each axis (for its own visual re-ingestion, presumably, since I neither asked for or needed them), projected measurements, and then it implemented my design swap request. Which it didn't do with SCAD, it wrote a Python program and directly manipulated the STL geometries. It went perfectly. A week before that I had GLM 5.3 and Hermes take one model that was intended to fit into a part from another designer's part and change it; I didn't really like the interior part's design so I gave both STL files to Hermes and asked for a new interior part design that could be printed with vase mode to speed it up. It did and the new part is better than the human-designed part I grabbed off the internet.
I had another task mid week where I needed a case for something but didn't have the dimensions, so I just had Gemini do deep research lookup for dimensions and to then spit out a case STL for me. It was boring but functional and a good enough starting point for me to work with.
Right now my wife is enamored with a 3D printed purse design for halloween but the separately printed hinges are a weak design (a circular mortise and tenon rotating hinge). Working with Antigravity again, it's been able to take measurements, rotate parts in space on its own and create me a new object design that's better suited to be printed in TPU. It's held dimensional accuracy and even inferred some dimensions and spacing I didn't have out of the primary purse's shape. It's gone great. Next up will be having it combine all the parts into a single STL so I can do a multimaterial print in one shot, printing the purse in PETG but the living hinge in TPU without assembly needed.
I think "it's here, now" for home and hobbyist CAD needs for functional prints. It's not displacing a mechanical engineer's job yet, but this recent iteration is markedly better than the previous generation of models at spatial reasoning and 3D design because it's suddenly capable of it at all when even 4 months ago it was not.
In your other comment you mentioned "just learn CAD", and I have already, I could have cobbled together all of this myself in Fusion 360, but that would have taken far more time than a few minutes of prompting and walking away. I know enough domain lingo to describe the task well, and if it falls flat I will do it myself, but it's coming along faster than you seem willing to accept.
> I know enough domain lingo to describe the task well, and if it falls flat I will do it myself, but it's coming along faster than you seem willing to accept.
Could you do meaningful things without domain language you learned the long way?
I don't doubt it is coming along. But as with all of these things, this one is painted into a corner from the very start by using OpenSCAD.
And a mechanical engineer's job isn't just fiddling away in CAD, is it? If it was I would be on the way to being one by now, and I am not.
What it means is that a good CAD model is not just sticking stuff together in 3D space. Parametric flow means that a small number of measurements ripple through the design, and sketches and solids adapt. To do this right, it's easier to just understand the purpose and intent of the model, how it was manufactured, and draw from there.
One of the things you get from studying CAD diagrams — like the Solidworks exercises everyone works through — is that real world parts often have surprisingly few dimensioned constraints. A lot more emerges from geometry.
So you can look at a diagram and initially think "where the heck does it define this radius!?" and find that it never needs to, because that radius emerges from tangency, parallelism, perpendicularity etc., combined with fewer measurement constraints.
Specifying it as a measurement would therefore be overconstraint; it might lead to solids that are difficult/impossible to manufacture or erroneous when another measurement is changed.
The diagram will specify the actual driving measurements that come from the part's purpose, with the intent to adapt to different real-world requirements.
Any CAD tool that works from images is going to have to approximate, which will create over-complex models with to many measurements that are more fragile with respect to changes, whereas a design that has geometrical constraints in place that are logical will be simpler and more adaptable.
With functional parts, roughly, form follows function first, and manufacturability second. But you have to understand why, to be able to make a good part. Even (perhaps especially) with 3D printing. But not uniquely. For example, would this tool be able to understand why the draft angles on a plastic part were important, what determines the bend radius of a part that was made from pressed metal, etc.?
I must stress that I am an amateur. But my amateur skills have come from reading and learning about CAD and learning what makes a viable design.
(Sorry… this was a stupidly long answer but I am hungry and I figured I should try to blurt it out before I have to get up from my desk and cook. I've edited it a lot and cut out a bit that I will probably put in another comment later)
There was a blog post from a couple of days ago that had been initially flagged, it seemed to me to have a good overview of AI for CAD, will try to find the link.
I've been making Rapidcam.app. The file schema is open source and json format designed for AI to be able to write directly. The format is also designed for version control. The focus is 2.5D parametric mostly for 3 or 4 axis CNC.
Should try different models and harnesses, CC and opus5 aren’t the best combo. Also, I expect soon to have models that verify the mesh and even render it not just generating the code. So we got this for mechanical engineering, cupperhead and similar for electronics, usual agents for software, what is next?
I like build123d simply because it can export proper STEP (like CadQuery) but has a nicely python friendly design.
https://github.com/yuechen-li-dev/Aetheris/
It's still kinda buggy but they are actively getting fixed, but Claude and GPTs seemed to work better with my current design than other CAD stacks. Still haven't added threads yet, so can't speak for T3, but generally speaking the generated parts are pretty good quality, and I also got fillets/chamfers working so that's a plus.
- "CadQuery fails loudly and early... OpenSCAD fails silently and late"
This should be obvious, from the documentation, from the way geometry construction works. OpenSCAD has no sense of failure where one shape means another won't work; you're just drawing the equivalent of 3D pixels in space. It will always potentially-meaninglessly succeed if the syntax is OK.
- Renders caught nothing that mattered
Objects with hollows are not going to show their major problems this way.
- CadQuery can be interrogated, OpenSCAD cannot
Isn't this explicit from the documentation of both? One works by iteratively building on top of a previous result that can be stored in a variable; the other doesn't.
- OpenSCAD renders have no concept of a part edge
Again — this should be explicit from the documentation, which describes no methods for operating on edges (and largely from the fact that it is declarative).
- Speed favours OpenSCAD, and it barely matters
Yes, being faster is no good if things are wrong.
- "What decides it is verifiability rather than expressiveness, and CadQuery leads there by a wider margin than the syntax difference suggests."
Yes, because the difference is semantic. Which you can get from the documentation. Building iteratively on the basis of existing geometry is inherently more verifiable, because stuff that can't work won't work.
Honestly do people not try learning CAD before they try to build an AI tool to generate CAD models? This feels like yet another situation where people who have not done the foundational conceptual work seem to think that they can avoid it and just work around it with AI.
I don't really get it. But then I think text-to-CAD is probably the strongest example of cart-before-horse thinking in the AI world as regards technical work compared to creative work.
(Am I naïve? … Oh god, I'm naïve)
Claude Code: Oops, I am sorry but I was wrong.
As you say it is quicker to do it by hand. Now.
I certainly wouldn’t entrust this job to a general-purpose (universal) tool that gets it 99.9 percent right.
But a domain-specific harness? Maybe it could work.
Hardware and engineering dont tolerate hallucinations, trust-me-bro numbers, deviations.
It was probably an easy model to get right, since the only "critical" dimension was the radius of the interior. But I was able to tweak the numbers on the support length & some other details relatively easily, and I had a working solution 2 hours of print time later.
(I had a CAD class in highschool, but haven't used it since).
I suspect this may be another case of "LLMs are mainly good at things you're bad at."
I’m using a single repo for all my models and Claude with build123d (plus a VS Code viz extension). Over time, I’ve built up a little folder of useful skills and I’m generally getting satisfactory results.
That said, I have had my eye on CadQuery and am looking for an excuse to try it. For those in the know: how does it compare to build123d?
The other difference (which I have only read abut) is in the way their assembly constraints work; again Build123D takes the more procedural approach (declaring "joints" etc.)
CadQuery came first; Build123D is sort of a more pythonic, robust restatement of it.
after making SEVERAL observations that cadquery is pretty much better overall, they say "ehhh we're going to stay with openscad".
Cynically it always feels to me like they are written by people who not only think end users shouldn't have to learn CAD principles, they themselves shouldn't have to either.
It's not a small change, it's from "not useful" to "pretty good"
Right, but, so what? There is very little utility here. Parts that need to be useful need to be designed to spec.
But this article is talking about functional parts. A functional part exists because of its spec, usually fails because of some combination of its material, manufacture, and spec. And the spec is chosen with that in mind.
Even working from a text description of a part is error prone because language is imprecise and interpretable. I just don't understand why AI people want to race past actual proper sensible solutions to a problem just to automate generating from text.
If a non-CAD person imagines a part that they need, the chances are very high indeed that either it isn't what they need, can't be made robustly or sensibly, or if it is, it already exists in some meaningful way that can be adapted, because one of tens of millions of other people already wanted it.
This scenario — needing something very specific that can be described only in words and nobody else has ever needed before — is almost imaginary. Most stuff just isn't like that.
Now… if someone were to design an AI CAD package that could remix objects that exist and combine them, perhaps with a GUI tool that allowed a user to identify attachment points, maybe that would be interesting. But a lot of that has been solved in non-AI GUIs already.
Text-to-CAD just isn't as good an idea as it seems. You are not going to be able to magic up some novel invention from a text description without a significant amount of domain knowledge of the words needed to describe a part, and that domain knowledge usually comes from learning CAD!
(Bit like getting a coding agent to write really good code)
And simple parts, sorry, just don't need much CAD skill. Get a CAD package on a free plan, learn enough to make your thing. You will get so much more out of that and it will be easier to make changes. It'll probably have standard tools for adding threads, even.
Even image-to-CAD for a functional part requires a significant amount of understanding of what to photograph and from which angles, etc.
Just last week I had Gemini 3.8 Flash and Antigravity take an existing STL of a part and swap out a piece of it with another design (fan shrouds on a computer case front plate). In the process it created exploded parts diagrams from the STL, created 2D renders from each axis (for its own visual re-ingestion, presumably, since I neither asked for or needed them), projected measurements, and then it implemented my design swap request. Which it didn't do with SCAD, it wrote a Python program and directly manipulated the STL geometries. It went perfectly. A week before that I had GLM 5.3 and Hermes take one model that was intended to fit into a part from another designer's part and change it; I didn't really like the interior part's design so I gave both STL files to Hermes and asked for a new interior part design that could be printed with vase mode to speed it up. It did and the new part is better than the human-designed part I grabbed off the internet.
I had another task mid week where I needed a case for something but didn't have the dimensions, so I just had Gemini do deep research lookup for dimensions and to then spit out a case STL for me. It was boring but functional and a good enough starting point for me to work with.
Right now my wife is enamored with a 3D printed purse design for halloween but the separately printed hinges are a weak design (a circular mortise and tenon rotating hinge). Working with Antigravity again, it's been able to take measurements, rotate parts in space on its own and create me a new object design that's better suited to be printed in TPU. It's held dimensional accuracy and even inferred some dimensions and spacing I didn't have out of the primary purse's shape. It's gone great. Next up will be having it combine all the parts into a single STL so I can do a multimaterial print in one shot, printing the purse in PETG but the living hinge in TPU without assembly needed.
I think "it's here, now" for home and hobbyist CAD needs for functional prints. It's not displacing a mechanical engineer's job yet, but this recent iteration is markedly better than the previous generation of models at spatial reasoning and 3D design because it's suddenly capable of it at all when even 4 months ago it was not.
In your other comment you mentioned "just learn CAD", and I have already, I could have cobbled together all of this myself in Fusion 360, but that would have taken far more time than a few minutes of prompting and walking away. I know enough domain lingo to describe the task well, and if it falls flat I will do it myself, but it's coming along faster than you seem willing to accept.
Could you do meaningful things without domain language you learned the long way?
I don't doubt it is coming along. But as with all of these things, this one is painted into a corner from the very start by using OpenSCAD.
And a mechanical engineer's job isn't just fiddling away in CAD, is it? If it was I would be on the way to being one by now, and I am not.
One of the things you get from studying CAD diagrams — like the Solidworks exercises everyone works through — is that real world parts often have surprisingly few dimensioned constraints. A lot more emerges from geometry.
So you can look at a diagram and initially think "where the heck does it define this radius!?" and find that it never needs to, because that radius emerges from tangency, parallelism, perpendicularity etc., combined with fewer measurement constraints.
Specifying it as a measurement would therefore be overconstraint; it might lead to solids that are difficult/impossible to manufacture or erroneous when another measurement is changed.
The diagram will specify the actual driving measurements that come from the part's purpose, with the intent to adapt to different real-world requirements.
Any CAD tool that works from images is going to have to approximate, which will create over-complex models with to many measurements that are more fragile with respect to changes, whereas a design that has geometrical constraints in place that are logical will be simpler and more adaptable.
With functional parts, roughly, form follows function first, and manufacturability second. But you have to understand why, to be able to make a good part. Even (perhaps especially) with 3D printing. But not uniquely. For example, would this tool be able to understand why the draft angles on a plastic part were important, what determines the bend radius of a part that was made from pressed metal, etc.?
I must stress that I am an amateur. But my amateur skills have come from reading and learning about CAD and learning what makes a viable design.
(Sorry… this was a stupidly long answer but I am hungry and I figured I should try to blurt it out before I have to get up from my desk and cook. I've edited it a lot and cut out a bit that I will probably put in another comment later)
At a glance, not sure how you're approaching constraints, and what luck you've had with getting language models to be able to juggle them?