Official repository for the ECCV 2026 paper "Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints".
See the codeLijun Guo*1, Haoyu Zhao*2,3, Xingyue Zhao4, Rong Fu5, Linghao Zhuang1 Siteng Huang6 Zhongyu Li2,3 and Hua Zou✉1
1School of Computer Science, Wuhan University 2Hong Kong Embodied AI Lab 3The Chinese University of Hong Kong 4Peking Union Medical College 5University of Macau 6Zhejiang University
arXiv | Project Page | Code | Data
* Equal contribution ✉ Corresponding author
This is the official repository of ECCV 2026 paper: Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints. For more information, please visit our project page.
conda create -n articulat3d python=3.10
conda activate articulat3d
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 "xformers>=0.0.27" --index-url https://download.pytorch.org/whl/cu124
pip install torch-scatter -f https://data.pyg.org/whl/torch-2.4.1+cu124.html
pip install -r TAPIP3D/requirements.txt
pip install -r requirements.txt
cd TAPIP3D/third_party/pointops2
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../..
cd TAPIP3D/third_party/pointnet_lib
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../..
cd TAPIP3D/third_party/megasam/base
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../../..
Download our TAPIP3D model checkpoint here to TAPIP3D/checkpoints/tapip3d_final.pth
If you want to run TAPIP3D on monocular videos, you need to prepare the following checkpoints manually to run MegaSAM:
Download the DepthAnything V1 checkpoint from here and put it to TAPIP3D/third_party/megasam/Depth-Anything/checkpoints/depth_anything_vitl14.pth
Download the RAFT checkpoint from here and put it to TAPIP3D/third_party/megasam/cvd_opt/raft-things.pth
Additionally, the checkpoints of MoGe and UniDepth will be downloaded automatically when running the demo. Please make sure your network connection is available.
Put each scene under a dataset root directory. The default training scripts use data/Articulat3DSimECCV as the dataset root and StorageFurniture_45194 as the example scene.
data/
`-- Articulat3DSimECCV/
`-- StorageFurniture_45194/
|-- images/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- depth/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- masks/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- camera_pose.json
|-- intrinsics.json
`-- gt/
`-- mobility_v2.json
The expected file formats are:
images/*.png: RGB or RGBA images.depth/*.png: depth maps. The scripts convert them to metric depth with depth / depth_scale; the default depth_scale is 6553.5.masks/*.png: foreground masks aligned with images/ and depth/.camera_pose.json: a dictionary keyed by frame id, such as "000000", where each value is a 4x4 camera pose matrix.intrinsics.json: one 3x3 camera intrinsic matrix.gt/mobility_v2.json: mobility annotation used by get_obj_prior.py to generate the joint prior.After preprocessing, the same scene directory will also contain:
data/Articulat3DSimECCV/StorageFurniture_45194/
|-- joint_priori.json
|-- joint_details.json
|-- trajectory_tapip3d.npz
`-- trajectory_tapip3d_visualization.npz
Run preprocessing before training. The first step prepares the object and joint prior files for a scene, and the second step runs TAPIP3D to extract 3D trajectories.
Set the scene path variables from the project root:
DATA_DIR=data/Articulat3DSimECCV
SCENE_NAME=StorageFurniture_45194
SCENE_PATH=${DATA_DIR}/${SCENE_NAME}
python preprocess/get_obj_prior.py \
--scene_path "$SCENE_PATH"
This step writes joint_priori.json under the scene directory. It also validates the static and dynamic frame ranges used by the scene.
python preprocess/extract_tapip3d_track.py \
--data_dir "$DATA_DIR" \
--scene_name "$SCENE_NAME" \
--tapip3d_dir TAPIP3D/
This step first runs TAPIP3D to produce the raw scene track file, then builds the motion prior outputs used by training:
joint_details.json, trajectory_tapip3d.npz, and trajectory_tapip3d_visualization.npz.
Run the two training stages in order from the project root.
python scripts/run_train_articulat3d.py
This stage initializes the Gaussian scene and free motion bases from trajectory_tapip3d_visualization.npz, then saves the Stage 1 checkpoint under the configured work_dir.
python scripts/run_train_articulat3d_stage2.py
This stage loads the Stage 1 checkpoint, initializes the articulated motion model, and continues optimization with joint-aware motion bases.
This code used resources from PARIS, Shape of Motion, TAPIP3D and VideoArtGS. We thank the authors for open-sourcing their awesome projects.
@article{guo2026articulat3d,
title={Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints},
author={Guo, Lijun and Zhao, Haoyu and Zhao, Xingyue and Fu, Rong and Zhuang, Linghao and Huang, Siteng and Li, Zhongyu and Zou, Hua},
journal={arXiv preprint arXiv:2603.11606},
year={2026}
}
3 commits
1 commits
Python
95.1%
HTML
4.9%
Official repository for the ECCV 2026 paper "Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints".
See the codeLijun Guo*1, Haoyu Zhao*2,3, Xingyue Zhao4, Rong Fu5, Linghao Zhuang1 Siteng Huang6 Zhongyu Li2,3 and Hua Zou✉1
1School of Computer Science, Wuhan University 2Hong Kong Embodied AI Lab 3The Chinese University of Hong Kong 4Peking Union Medical College 5University of Macau 6Zhejiang University
arXiv | Project Page | Code | Data
* Equal contribution ✉ Corresponding author
This is the official repository of ECCV 2026 paper: Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints. For more information, please visit our project page.
conda create -n articulat3d python=3.10
conda activate articulat3d
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 "xformers>=0.0.27" --index-url https://download.pytorch.org/whl/cu124
pip install torch-scatter -f https://data.pyg.org/whl/torch-2.4.1+cu124.html
pip install -r TAPIP3D/requirements.txt
pip install -r requirements.txt
cd TAPIP3D/third_party/pointops2
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../..
cd TAPIP3D/third_party/pointnet_lib
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../..
cd TAPIP3D/third_party/megasam/base
LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH python setup.py install
cd ../../../..
Download our TAPIP3D model checkpoint here to TAPIP3D/checkpoints/tapip3d_final.pth
If you want to run TAPIP3D on monocular videos, you need to prepare the following checkpoints manually to run MegaSAM:
Download the DepthAnything V1 checkpoint from here and put it to TAPIP3D/third_party/megasam/Depth-Anything/checkpoints/depth_anything_vitl14.pth
Download the RAFT checkpoint from here and put it to TAPIP3D/third_party/megasam/cvd_opt/raft-things.pth
Additionally, the checkpoints of MoGe and UniDepth will be downloaded automatically when running the demo. Please make sure your network connection is available.
Put each scene under a dataset root directory. The default training scripts use data/Articulat3DSimECCV as the dataset root and StorageFurniture_45194 as the example scene.
data/
`-- Articulat3DSimECCV/
`-- StorageFurniture_45194/
|-- images/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- depth/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- masks/
| |-- 000000.png
| |-- 000001.png
| |-- ...
| `-- 000749.png
|-- camera_pose.json
|-- intrinsics.json
`-- gt/
`-- mobility_v2.json
The expected file formats are:
images/*.png: RGB or RGBA images.depth/*.png: depth maps. The scripts convert them to metric depth with depth / depth_scale; the default depth_scale is 6553.5.masks/*.png: foreground masks aligned with images/ and depth/.camera_pose.json: a dictionary keyed by frame id, such as "000000", where each value is a 4x4 camera pose matrix.intrinsics.json: one 3x3 camera intrinsic matrix.gt/mobility_v2.json: mobility annotation used by get_obj_prior.py to generate the joint prior.After preprocessing, the same scene directory will also contain:
data/Articulat3DSimECCV/StorageFurniture_45194/
|-- joint_priori.json
|-- joint_details.json
|-- trajectory_tapip3d.npz
`-- trajectory_tapip3d_visualization.npz
Run preprocessing before training. The first step prepares the object and joint prior files for a scene, and the second step runs TAPIP3D to extract 3D trajectories.
Set the scene path variables from the project root:
DATA_DIR=data/Articulat3DSimECCV
SCENE_NAME=StorageFurniture_45194
SCENE_PATH=${DATA_DIR}/${SCENE_NAME}
python preprocess/get_obj_prior.py \
--scene_path "$SCENE_PATH"
This step writes joint_priori.json under the scene directory. It also validates the static and dynamic frame ranges used by the scene.
python preprocess/extract_tapip3d_track.py \
--data_dir "$DATA_DIR" \
--scene_name "$SCENE_NAME" \
--tapip3d_dir TAPIP3D/
This step first runs TAPIP3D to produce the raw scene track file, then builds the motion prior outputs used by training:
joint_details.json, trajectory_tapip3d.npz, and trajectory_tapip3d_visualization.npz.
Run the two training stages in order from the project root.
python scripts/run_train_articulat3d.py
This stage initializes the Gaussian scene and free motion bases from trajectory_tapip3d_visualization.npz, then saves the Stage 1 checkpoint under the configured work_dir.
python scripts/run_train_articulat3d_stage2.py
This stage loads the Stage 1 checkpoint, initializes the articulated motion model, and continues optimization with joint-aware motion bases.
This code used resources from PARIS, Shape of Motion, TAPIP3D and VideoArtGS. We thank the authors for open-sourcing their awesome projects.
@article{guo2026articulat3d,
title={Articulat3D: Reconstructing Articulated Digital Twins From Monocular Videos with Geometric and Motion Constraints},
author={Guo, Lijun and Zhao, Haoyu and Zhao, Xingyue and Fu, Rong and Zhuang, Linghao and Huang, Siteng and Li, Zhongyu and Zou, Hua},
journal={arXiv preprint arXiv:2603.11606},
year={2026}
}
3 commits
1 commits
Python
95.1%
HTML
4.9%