name: cli-hub-matrix-3d-cad
description: >-
Capability-based multi-tool matrix for 3D modeling, CAD, point clouds, rendering,
GPU debugging, and fabrication. Covers mesh/parametric/photogrammetry and the
path from idea to printed part or game-ready asset.
3D & CAD Matrix (S3 — v2 capability-based)
Scenario S3. Strongest technical scenario in the matrix by depth — Blender + FreeCAD + CloudCompare + RenderDoc is rare coverage. Structural gaps: texturing and fabrication slicing.
Schema: docs/cli-matrix/matrix_registry.schema.md. Matrix plan: docs/cli-matrix/cli-matrix-plan.md.
Install
cli-hub matrix install 3d-cad
cli-hub matrix info 3d-cad
cli-hub matrix preflight 3d-cad --json
Provider selection constraints
- Use preflight as an availability report, not as a provider selector.
- Treat provider order as documentation order only.
- Choose from user requirements, output quality bar, offline needs, credential state, install cost, and provider notes.
- Escalate to paid or metered APIs only when credentials are already present or the user explicitly consents.
Offline context? Most of this matrix is offline-first; rendering and photogrammetry are the exceptions.
Preflight
Run cli-hub matrix preflight 3d-cad --json first. Use the manual block below for extra probes or older cli-hub versions.
cli-hub list --json
python - <<'PY'
import importlib.util
for m in ("trimesh","pymeshlab","open3d","cadquery","build123d","solid",
"pygltflib","laspy","pyvista","bpy","rawpy","pycam"):
print(m, importlib.util.find_spec(m) is not None)
PY
for b in blender freecad meshroom colmap openmvg openmvs prusaslicer slic3r \
cura CuraEngine apitrace vulkaninfo renderdoc OpenSCAD; do
command -v "$b" >/dev/null && echo "$b: yes" || echo "$b: no"
done
for e in POLYCAM_API_KEY LUMA_API_KEY ONSHAPE_ACCESS_KEY FUSION360_TOKEN \
OCTANE_TOKEN; do
[ -n "${!e}" ] && echo "$e: set" || echo "$e: unset"
done
Suggest-to-user template
To enable <capability> via <provider>, please set <ENV_VAR>.
Cost: <cost notes>
Quality: <quality tier>
Reply 'skip' to fall back to <next provider>.
Example: To enable cloud photogrammetry via Luma AI, please set LUMA_API_KEY. Cost: metered per-scan. Quality: sota. Reply 'skip' to fall back to local Meshroom (slower, free).
Capabilities
model.mesh — mesh modeling / editing
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-blender |
harness-cli |
Blender installed |
free |
sota |
yes |
trimesh |
python |
pkg |
free |
high |
yes |
pymeshlab |
python |
pkg |
free |
high |
yes |
open3d |
python |
pkg |
free |
high |
yes |
pygalmesh |
python |
pkg + CGAL |
free |
high |
yes |
model.parametric — parametric CAD
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-freecad |
harness-cli |
FreeCAD installed |
free |
sota |
yes |
cadquery |
python |
pkg |
free |
high |
yes |
build123d |
python |
pkg |
free |
high |
yes |
OpenSCAD |
native |
binary |
free |
high |
yes |
SolidPython |
python |
pkg + OpenSCAD |
free |
good |
yes |
| Onshape API |
api |
ONSHAPE_ACCESS_KEY |
paid |
sota |
no |
| Fusion 360 API |
api |
FUSION360_TOKEN |
paid |
sota |
no |
model.sculpt — digital sculpting
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-blender (sculpt mode, scripted) |
harness-cli |
Blender |
free |
good |
yes |
| ZBrush / Nomad |
— |
— |
— |
— |
— |
Known gap — agent-driven sculpting is impractical beyond Blender scripts.
pointcloud.process — point cloud ingest / clean / register
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-cloudcompare |
harness-cli |
CloudCompare |
free |
sota |
yes |
cli-anything-cloudanalyzer |
harness-cli |
harness installed |
free |
high |
yes |
open3d |
python |
pkg |
free |
high |
yes |
laspy |
python |
pkg |
free |
high |
yes |
pdal |
native |
binary |
free |
sota |
yes |
pyvista |
python |
pkg |
free |
high |
yes |
photogrammetry.reconstruct — images → 3D mesh
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
Meshroom |
native |
binary |
free |
high |
yes |
colmap |
native |
binary |
free |
high |
yes |
OpenMVG + OpenMVS |
native |
binaries |
free |
high |
yes |
| RealityCapture |
native |
commercial license |
paid |
sota |
yes |
| Polycam API |
api |
POLYCAM_API_KEY |
metered |
sota |
no |
| Luma AI |
api |
LUMA_API_KEY |
metered |
sota |
no |
material.texture — PBR texturing
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-blender (shader nodes, scripted) |
harness-cli |
Blender |
free |
good |
yes |
bpy PBR synthesis |
python |
pkg |
free |
good |
yes |
Pillow procedural maps |
python |
pkg |
free |
basic |
yes |
| Substance 3D / Polycam Materials / Adobe Sampler |
— |
— |
— |
— |
— |
Known gap — no agent-native path approaches Substance quality.
render.preview — fast viewport renders
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-blender (Eevee) |
harness-cli |
Blender |
free |
high |
yes |
cli-anything-godot (viewport screenshot) |
harness-cli |
Godot |
free |
good |
yes |
render.offline — path-traced / final renders
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-blender (Cycles) |
harness-cli |
Blender + GPU |
free |
sota |
yes |
bpy + Cycles |
python |
pkg + GPU |
free |
sota |
yes |
| Octane Cloud |
api |
OCTANE_TOKEN |
paid |
sota |
no |
| RenderMan on offline farm |
— |
license + farm |
paid |
sota |
depends |
gpu.debug — capture / inspect GPU frames
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-renderdoc |
harness-cli |
RenderDoc installed |
free |
sota |
yes |
apitrace |
native |
binary |
free |
high |
yes |
vulkan-tools |
native |
binary |
free |
good |
yes |
fabricate.slice — 3D print slicer (mesh → gcode)
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
PrusaSlicer CLI |
native |
binary |
free |
sota |
yes |
CuraEngine |
native |
binary |
free |
high |
yes |
slic3r |
native |
binary |
free |
good |
yes |
| Bambu Studio / OrcaSlicer (API-driven) |
— |
— |
— |
— |
— |
Known gap — no agent-native harness, though the natives are scriptable.
fabricate.cam — CAM / CNC toolpaths
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-freecad (Path workbench, scripted) |
harness-cli |
FreeCAD |
free |
good |
yes |
pycam |
python |
pkg |
free |
good |
yes |
kiri:moto |
native |
binary |
free |
good |
yes |
| Fusion 360 CAM / Onshape CAM |
api |
tokens |
paid |
sota |
no |
export.engine — handoff to game / viz engine
| Provider |
Kind |
Requires |
Cost |
Quality |
Offline |
cli-anything-godot |
harness-cli |
Godot |
free |
high |
yes |
cli-anything-blender (glTF/FBX export) |
harness-cli |
Blender |
free |
sota |
yes |
pygltflib |
python |
pkg |
free |
high |
yes |
trimesh glTF writer |
python |
pkg |
free |
good |
yes |
| Unity Asset Pipeline / Unreal Datasmith |
— |
— |
— |
— |
— |
Recipes
printable-part — parametric CAD → mesh → slice → gcode.
Uses: model.parametric, model.mesh, fabricate.slice.
game-asset — model → texture → export to engine.
Uses: model.mesh, material.texture, export.engine, (optional render.preview).
reality-scan — photos → photogrammetry → clean mesh → export.
Uses: photogrammetry.reconstruct, pointcloud.process, model.mesh, export.engine.
cnc-part — parametric part → CAM toolpath → gcode.
Uses: model.parametric, fabricate.cam.
product-viz-still — CAD → import → scene → offline render.
Uses: model.parametric, model.mesh, material.texture, render.offline.
gpu-bug-repro — capture frame → analyze → patch shader.
Uses: gpu.debug, render.preview.
Known gaps
material.texture — no open equivalent to Substance; Blender shader nodes are the current ceiling.
fabricate.slice — PrusaSlicer/Cura natives work but want a harness-level wrapper.
model.sculpt — impractical for agents today.
- Unity / Unreal export — only Godot covered on the harness side.
Agent guidance
- Parametric first, mesh later. Start in
model.parametric when the object has dimensions; model.mesh when it's organic.
- Always bake before export. When handing off to
export.engine, apply modifiers and bake materials — runtime engines don't read Blender shader graphs.
- Check manifold before slicing.
fabricate.slice fails silently on non-manifold meshes; use trimesh.Trimesh.is_volume or pymeshlab's manifold check first.
- Offline-capable baseline. This matrix is highly offline-capable — API escalation is rarely needed except for photogrammetry-at-scale.
- Workspace discipline. Keep
.FCStd / .blend / .ply / .stl / .gcode in one project folder so the chain of transformations is reproducible.