As part of our broader research, we built a browser-based Text-to-CAD app (https://news.ycombinator.com/item?id=44182206) and are now open sourcing it. This is a React SPA with a Supabase backend.
What it does:
* Generates parametric 3D models from natural language descriptions, with support for both text prompts and image references
* Outputs OpenSCAD code with automatically extracted parameters that surface as interactive sliders for instant dimension tweaking
* Exports as .STL or .SCAD
Under the hood:
* Separate agents for conversation and code generation; simple parameter tweaks bypass AI entirely using deterministic regex-based updates
* Runs fully in-browser by compiling OpenSCAD to WebAssembly and integrating Three.js with React Three Fiber for 3D rendering
* Supports BOSL, BOSL2, MCAD libraries and custom font support (Geist) for text in models
We’ve seen many developers trying to replicate this kind of functionality, so we’re releasing this to give the community a solid foundation to build on.
Future improvements:
* Expand geometry support - Move beyond CSG primitives to support curved surfaces, fillets, lofts, and constraint-driven modeling through CadQuery/Build123D
* Better spatial context - UI for face/edge selection and viewport image integration to give LLMs spatial understanding
* Enhanced capabilities - RAG on documentation and integration with more OpenSCAD libraries for features like proper threading
You can clone the repo and run it locally! Contributions are welcome, and we’ll keep merging PRs as they come in.
I'd wager that for most of the CAD I work on, I would not be able to accurately describe what I want in natural language. If you've been able to, please share examples!
[0] - https://www.nasa.gov/history/afj/ap13fj/15day4-mailbox.html
Create a 200x100mm rectangle with depth of 12.7mm, 6mm filleted corners, a 25mm center hole, 6.35mm holes in each corner offset 12.7mm each edge, with 1mm chamfer on top of center hole and 0.5mm chamfers on corner holes.
Now, just give me a picture to parametric model prompt generator...and then we can get into assemblies! ;)The first feature I wanted to add was a "Quote from xometry" panel; I cloned/GPT'd for a couple minutes and found that actually adding this would mean pulling tricks with selenium that don't scale.
Have you reached out to xometry/hubs.com/other Print-aaS companies for a partnership?
https://github.com/CadQuery/cadquery is much more capable in that regards. It's based on more capable Open CASCADE Technology and Freecad also uses it.
As for use cases, the only viable use case I see is to ask it to make a model based on a picture. Or ask it to fix the topological error. In other cases it's much faster to model than to describe it to agent
FYI you can send base64 encoded PNGs, no need to mess about with ngrok.
The model was really simple - a threaded "back nut" - basically a hollow thin walled cylinder with a base with a hole in it. The cylinder is threaded on the inside. Its a plumbing part for a long out of production system that still works fine but its leaking and I broke the current nut trying to tighten it. Once I dissembled the joint it turns out it does not need to be tight just stable. It only serves to hold a tube with two O rings in place inside the water inlet to the device and a standard plumbing nut and olive job on the other end of the short tube. A perfect job for 3D printing. It took me six iterations to get the thread right. At one point I miss-read my calipers sigh
I'd love to see what RAG will do for this with a well focused model. There is a lot of decent documentation for OpenSCAD and a lot of literature for this form of modelling.
However, I don’t know if it can work for objects that require more complex and precise constructions. But hey, why not give it a try!
you can also check out the hosted version to see what to expect
I first tried "a work table with a roof" which gave me a reasonable model but with a flat roof, then I tried "a work table with a pitched roof" which gave me a very unlikely and unworkable model with the halves of the roof disconnected and not contacting the vertical supports. Then I tried the "Adam Pro" option and it came out looking more like an Adirondack chair than a table, but not one you could sit in! =)
I would like to know what to write instead to get a more useful model. Very cool project though!