Imported from hkuds/cli-anything (
cli-hub-matrix/3d-cad/SKILL.md). Install upstream withnpx skills add hkuds/cli-anything --skill 3d-cad. Copyright stays with the author.
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, (optionalrender.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.parametricwhen the object has dimensions;model.meshwhen 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.slicefails silently on non-manifold meshes; usetrimesh.Trimesh.is_volumeor 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/.gcodein one project folder so the chain of transformations is reproducible.
