--- license: apache-2.0 library_name: step1x3d-geometry tags: - 3d-generation - shape-editing - lora base_model: stepfun-ai/Step1X-3D --- # ShapeUp Weights for **ShapeUp**, image-conditioned 3D shape editing built on [Step1X-3D](https://huggingface.co/stepfun-ai/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 ```python 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.