sand3d: AI Agents Can Now Build 3D Objects in Under 200 Tokens French AI startup Sandflow released sand3d on November 5, a Python library that represents 3D objects as short programs on Blender's bpy engine, and the project reached 1,130+ GitHub stars within three days. Sandflow tested 30 CAD parts and found sand3d uses a median of 4x fewer tokens than Blender Python or CadQuery for the same geometry, up to 6x on complex parts, with the full API reference fitting in 3,643 tokens and a sample bracket program at roughly 121 tokens versus about 460 in Blender Python. Sandflow also published 106,094 3D objects as sand3d programs on Hugging Face under CC BY 4.0, including 10,456 articulated objects with 36,000+ validated joints, which export as URDF for PyBullet, Gazebo, MuJoCo or Isaac Sim. Asking an AI agent to generate a 3D model has been a reliable way to get broken geometry. LLMs either hallucinate vertex coordinates, write Blender Python that silently fails in editor mode, or produce code so verbose it consumes half a context window. Sandflow, a French AI startup, dropped sand3d on November 5 — a Python library that rethinks how language models write 3D from the ground up. Three days later it was trending on GitHub with 1,130+ stars. Programs, Not Meshes sand3d represents 3D objects as short Python programs built on Blender’s bpy engine. Instead of manipulating vertices or calling Blender’s editor-mode operators, you describe shapes through profiles, solids, edits, and assemblies — the way you’d think about building something, not the way a renderer stores it. The bracket below is 10 lines. Every dimension is a parameter. It exports to GLB, URDF, USD, OBJ, or STL with one call: python import sand3d as s3d def bracket w=80, d=40, t=6, hole d=6.6, pitch=50 : plate = s3d.extrude "plate", s3d.rect w, d, r=4 , t s3d.hole plate, hole d, on=s3d.grid 2, 1, pitch, 0 s3d.fillet plate, 1, edges="top" return plate s3d.export bracket , "bracket.glb" That bracket program is approximately 121 tokens. The equivalent in Blender Python is roughly 460. That gap is the whole story. Token Efficiency Is the Real Product Sandflow tested 30 CAD parts across sand3d, Blender Python, and CadQuery. sand3d uses a median of 4x fewer tokens for the same geometry — up to 6x on complex parts. More importantly, the entire sand3d API reference fits in 3,643 tokens. You can drop it into any system prompt and still have room for actual work. At scale, this compounds. A production agent loop running hundreds of 3D generation requests spends tokens on context, history, and tool calls. Every reduction in object verbosity extends what fits in context and what a model can hold in working memory. sand3d does not just make individual outputs smaller — it makes long agentic sessions viable for 3D work. - Blender Python was built for editor workflows — selecting objects, switching modes, running ops on whatever is active. Verbose, inconsistent structure, mode-dependent API. Models generate it badly. - CadQuery wraps OpenCASCADE with a fluent B-rep API. Powerful, but hundreds of chainable methods with strict type expectations. LLMs fail on first-attempt generation roughly half the time. - sand3d exposes 70 functions through a flat s3d.verb surface. Same verbs for a fastener and a cable machine. Flat, memorable, predictable. Articulated Objects and the Robotics Angle This is the part most coverage is missing. sand3d supports joint declarations for mechanical assemblies — revolute, prismatic, and continuous joints with movement ranges declared inline. A washing machine with four joints door hinge, drum, control knob, detergent drawer takes 38 lines. When you export that assembly as URDF, it is ready to drop into PyBullet, Gazebo, MuJoCo, or Isaac Sim. Training reinforcement learning policies on household objects has historically been gated by the cost and expertise required to produce clean robot simulation assets. sand3d is a credible path to generating those assets from agent loops — which makes it relevant well beyond game development or product visualization. 106,000 Objects as Training Infrastructure Alongside the library, Sandflow released 106,094 3D objects as sand3d programs on Hugging Face under CC BY 4.0 https://huggingface.co/blog/Sandflow/sand3d-106094-3d-objects-in-one-code-substrate-for . 10,456 of these are articulated, with 36,000+ total joints validated against originals. | Dataset | Objects | Source | |---|---|---| | sand3d-objaverse | 66,887 | Objaverse | | sand3d-cad | 24,495 | Zero-To-CAD, CADFS | | sand3d-articraft | 9,209 | Articraft | | sand3d-simready | 2,334 | NVIDIA SimReady | This is not a demo — it is training data for 3D foundation models. Sandflow is positioning sand3d as the substrate for the next generation of generative 3D, not just a utility library. Getting Started Install requires Python 3.11 or 3.13 and Blender 4.5 LTS or 5.2 LTS: pip install sand3d The official documentation https://sand3d.sandflow.ai/ includes the full API reference, assembly guidelines, and eight rules for structuring multi-part models that significantly improve LLM generation quality. The GitHub repository https://github.com/Sandflow-ai/sand3d includes a Hugging Face explorer for browsing the 106K dataset. Who Should Pay Attention If you are building coding agents that touch 3D — game asset pipelines, robotics simulation, product visualization, CAD automation — sand3d is worth evaluating this week. The token efficiency numbers are real, the URDF export path to robotics simulators is a genuine workflow unlock, and the 106K dataset turns it from a useful library into a component of something larger. sand3d is currently limited to hard-surface objects: furniture, tools, machines, mechanical parts. Characters, organic shapes, and terrain are out of scope for now — Sandflow has flagged these as roadmap items requiring metaballs, subdivision surfaces, and skinning. For mechanical assemblies and industrial objects, it covers the terrain well.