Abstract3D
Abstract3D (abstract3d) adds a scene3d capability to AbstractCore: image-to-3D and text-to-3D generation, with a validated local TripoSR backend and GLB as the primary output. Installed next to AbstractCore, it registers itself as llm.scene3d and as the scene3d output of generate(). Status: alpha, one centered object per image. It is part of the framework install (abstractframework 0.6.2 pins Abstract3D 0.3.1) and of AbstractCore’s light install; the local TripoSR backend installs with pip install "abstract3d[triposr]".
pip install "abstract3d[triposr]" # validated local image-to-3D
abstract3d i23d ./object.png --output-dir ./out/object --device mps --format glb
From a photo or a prompt to a mesh
Image-to-3D (i23d) reconstructs one object from one photo. Text-to-3D (t23d) is composed: AbstractVision generates the image, then the 3D backend reconstructs it. Every run writes a bundle with the mesh, the input, a preview and its metadata.
Validated default
abstract3d:triposr (stabilityai/TripoSR): 20 to 60 seconds per object on Apple Silicon, permissive license, a baked 2048 base-color texture by default.
Experimental backends
Step1X-3D (geometry only), Hunyuan3D-2.1 and Hunyuan3D-2mv (license-gated: the Tencent license excludes the EU, UK and South Korea) and TRELLIS.2 (needs gated DINOv3 access you request yourself).
Where it runs
Validated on macOS with Apple Silicon (mps). NVIDIA and AMD hosts are implemented (abstract3d[gpu], --device cuda) but not validated; CPU-only generation is impractically slow.
What you get
Scene3DManager
One manager API with i23d() and t23d(), a backend id per call, and a public catalog of validated, experimental and blocked model families (abstract3d catalog).
Bundles
scene.glb, scene.obj, input.png, preview.png, contact_sheet.png and metadata.json; textured TripoSR bundles add texture.png and a UV preview.
Projection texture bake
Color is exact where a photo observed the surface and reconstructed elsewhere, with mirror completion for symmetric subjects and optional extra reference views, real or generated.
Deterministic mesh operations
abstract3d.mesh_ops analyzes, transforms, composes, converts, repairs and renders previews of any supported mesh file, with no model runtime (abstract3d[mesh]).
Eight AI tools
abstract3d.tools: generate, analyze, transform, compose, convert, repair, preview and catalog, as AbstractCore tool definitions an agent can call.
AbstractCore capability
Registered through the abstractcore.capabilities_plugins entry point: llm.scene3d.i23d(...), or generate(..., output={"modality": "scene3d", ...}).
Install and generate
pip install abstract3d # base: remote image composition only
pip install "abstract3d[triposr]" # validated local TripoSR
pip install "abstract3d[apple]" # Apple Silicon: TripoSR, Step1X and local image composition
pip install "abstract3d[gpu]" # NVIDIA / AMD hosts
abstract3d catalog --validated-only --json
# image to 3D
abstract3d i23d ./object.png --output-dir ./out/object --device mps --format glb
# text to 3D (image composed through AbstractVision first)
abstract3d t23d "a ceramic teapot with a curved spout and matte glaze" \
--output-dir ./out/teapot --backend triposr --device mps \
--image-provider mlx-gen --image-model AbstractFramework/flux.2-klein-4b-8bit
from abstract3d import Scene3DManager
scene3d = Scene3DManager(backend_id="triposr")
image_result = scene3d.i23d("./object.png", output_dir="./out/object-triposr", format="glb", device="mps")
text_result = scene3d.t23d("a mid-century lounge chair with walnut legs", output_dir="./out/chair", device="mps")
Checked against Abstract3D 0.3.1 (src/abstract3d/scene3d_manager.py, lines 13-70); needs the TripoSR weights and an Apple Silicon Mac for device="mps"; not executed for this page.
resp = llm.generate(
"A glossy red cube.",
output={"modality": "scene3d", "provider": "triposr", "format": "glb"},
)
Checked against AbstractCore 2.19.0 (abstractcore/core/output_specs.py, the scene3d output) and Abstract3D 0.3.1; needs abstract3d[triposr], its weights and an llm from create_llm; not executed for this page.