sand3D: 3D Assets You Can Read and Edit as Code
sand3D empowers language models to create editable 3D assets using a compact Python vocabulary, leveraging Blender’s bpy for parametric modeling.

Highlights and Results
sand3D gives language models a compact vocabulary for building 3D objects in Python. Developed by Thibault Neveu and Andréa Loy at Sandflow, it turns programs into named parts, materials and articulated assemblies through Blender’s bpy. Changing a dimension and rerunning the program rebuilds the asset. The public release combines a modeling library with datasets; it does not supply a standalone trained text-to-3D model. Official repository.
The five dataset cards list 66,887 Objaverse objects, 24,495 CAD objects, 9,209 Articraft objects, 2,334 SimReady objects and 3,169 AutoMate records: 106,094 altogether, including 10,456 articulated objects. AutoMate’s count includes 2,297 individual parts and 872 assemblies. Each record pairs executable code with a render and exported OpenUSD asset. This is a collection of reconstructed source assets, not 100,000 newly designed mechanisms. Official datasets.
The repository’s token comparison uses o200k_base and excludes comments and docstrings. Median baseline/sand3D ratios are 4.0× for LLM-written Blender Python on 30 CAD parts, 2.3× for 17 CadQuery programs, 6.0× for 13 FeatureScript programs and 2.0× for 12 Articraft programs. These are small, differently sourced comparisons against curated sand3D programs; only 9/30 Blender baselines build the right part, and Articraft also represents dynamics. They support a compactness claim, not a universal generation-quality improvement. Evaluation details.
How It Works
For authoring, the workflow is: provide the API to an LLM or write Python directly; describe the assembly and its parameters; build and place individual parts; declare joints and materials; execute the program in bpy; inspect, revise and export. The roughly 3,600-token API fits in a prompt. The recommended program layout states the assembly plan first, then implements each part separately, keeping dimensions and placement relationships readable. The editable representation is executable geometry code and a scene hierarchy; the library does not implement latent encoding or diffusion denoising. Writing guidelines; API.
The geometry vocabulary proceeds from 2D profiles to solids: rect and circle define sections; extrude, revolve, sweep and loft build volumes; cut, pocket, shell and fillet edit them. Frame objects describe position and orientation, so a component can be placed on a named face or local anchor instead of a long list of world coordinates. group preserves separate meshes and materials under one parent; join performs a fusion; assembly adds named anchors to a grouped root. These distinctions preserve which pieces belong together and which remain separately editable. Assembly implementation.
The washing-machine example makes the mechanics concrete: a cabinet supports a drum, a door containing its ring, glass and handle, a drawer and a dial. After placing these parts at rest, joint records the parent, pivot, axis, type and permitted range. The door rotates through 0–143°, the drawer slides 0–200 mm, and drum and dial rotate continuously. pose validates the requested value and propagates transforms through forward kinematics; it does not regenerate the geometry. seat removes the volume occupied by an inserted part at rest, rather than computing its entire motion envelope. Example; Joint implementation.
Dataset production adds an agentic reconstruction loop: write code, execute it, compare the resulting surface with an existing source asset, and revise. The authors have not yet published that pipeline’s full method. Dataset F-scores use a tolerance of 1% of the bounding-box diagonal. Acceptance floors are 0.70 for Objaverse and static SimReady, 0.90 for CAD and rigid Articraft, and 0.90 per moving part plus correct joints for articulated assets. These are pipeline-reported quality filters, not independently measured test results. Failed execution or static checks exclude a program. Dataset methodology.
Applications, Availability, and Future Directions
The representation suits editable asset variants, interactive mechanisms and research on LLM-based 3D authoring. GLB exports the current pose, materials and joint metadata in node extras; generic viewers need additional logic to operate those joints. URDF and USDA preserve the mechanism at rest, with USDA using UsdGeom and UsdPhysics. OBJ/STL carry meshes alone. Export scales lengths to metres. Mass, friction and actuation parameters remain outside the library’s dynamics description, so simulation integration still requires work. Export implementation.
The library is Apache-2.0; dataset releases use CC BY 4.0 while retaining source licensing and attribution. Current coverage centres on hard-surface objects, and reconstruction can omit small details. The authors identify organic shapes as future work, with candidate additions including implicit blending, control-cage subdivision, variable-section sweeps and lofts, skeletons with skinning, and procedural displacement. They also promise more domains and a forthcoming preprint; these remain plans. This review examined official documentation and source at commit 0d589a5, version 1.6.2, on November 6, 2026; it did not independently run the benchmarks. Official release and limitations.
FAQ
Does installing sand3D give me a text-to-3D model?
It installs a Python modeling library. An LLM or a person must write programs using its API; bpy executes them to build the assets. The datasets provide code examples, not a standalone trained generator. Source.
How would I create a different-sized asset?
Edit the dimensions exposed by its program and rerun it. Placement relationships and named parts make such changes inspectable. Only relationships actually encoded in the program update automatically, so check the rebuilt result. Source.
Are exported mechanisms immediately ready for physics simulation?
URDF and USDA carry joint structure, but simulation still needs dynamics parameters such as mass, friction and actuation. GLB stores joint metadata in extras; an application must interpret it to animate the mechanism. Source.




