ShapeUp
Weights for ShapeUp, image-conditioned 3D shape editing built on Step1X-3D.
Given a source shape and an edit image, ShapeUp generates the edited mesh with a rectified-flow DiT conditioned on (a) the DINOv2+CLIP embedding of the edit image and (b) the VAE latents of the source shape.
Repository layout
geometry/
βββ adapter-1024-550k/ # geometry adapter (this release)
βββ adapter_config.json
βββ adapter_model.safetensors
texture/ # texture weights (coming soon)
geometry/adapter-1024-550k
Only the trained adapter is stored here β everything else loads from
stepfun-ai/Step1X-3D. The adapter is the complete set of trainable parameters:
| LoRA on the DiT (rank 128, alpha 128) | 288 tensors |
proj_shape_condtion (source-shape projection) |
3 tensors |
| total | 291 tensors / 75.6M params |
Trained with n_part_latents=1024, 550k steps.
adapter_config.json carries a manifest (num_tensors, num_elements) so the loader
can confirm it received the whole adapter.
Usage
from step1x3d_geometry.models.pipelines.pipeline import ShapeUpGeometryPipeline
pipe = ShapeUpGeometryPipeline.from_config(
"configs/train-geometry-diffusion/"
"step1x-3d-geometry-shapeup-lr1e-parts-reconstruction-train-new-data-multistep-inference.yaml",
adapter_path="Inbar2344/ShapeUP", # or a local directory
adapter_subfolder="geometry/adapter-1024-550k", # this is the default
device="cuda",
)
out = pipe(
{"surface": surface, "sharp_surface": sharp_surface, "image": [edit_image]},
seed=0,
num_inference_steps=30,
octree_resolution=256,
cfg_type="separate_visual",
guidance_scale_visual=2.5,
guidance_scale_shape=3.5,
output_type="trimesh",
)
out.mesh[0].export("edited.glb")
The base Step1X-3D weights (VAE, DiT, DINOv2+CLIP encoder) are downloaded automatically from the Hub on first use.
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support
Model tree for Inbar2344/ShapeUP
Base model
stepfun-ai/Step1X-3D