How to use from the
Use from the
Diffusers library
pip install -U diffusers transformers accelerate
import torch
from diffusers import DiffusionPipeline

# switch to "mps" for apple devices
pipe = DiffusionPipeline.from_pretrained("Cloth-splatters/dexgarmentlab-folding-lifting-dynamics-gns", dtype=torch.bfloat16, device_map="cuda")

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt).images[0]

dexgarmentlab-folding-lifting-dynamics-gns

GNSDynamicsModel β€” Graph Network Simulator for variable-vertex cloth meshes. Given a 5-frame velocity history and a 3D gripper action, predicts per-node acceleration, which is integrated with explicit Euler (v += a*dt, pos += v*dt, dt=0.1) to advance the mesh one frame. Each cloth uses its own rest state and topology (no global template).

  • Task data: DexGarmentLab mixed-garment fold + lift-place demos (dexgarmentlab_folding_lifting_meshes.h5, Cloth-splatters/dexgarmentlab-folding-lifting-meshes)
  • Formulation: direct acceleration regression (not diffusion), 15 message-passing steps, hidden size 128
  • Velocity history (input_sequence_length): 5
  • Training noise (velocity_noise_std): 0.1
  • Best validation loss: 0.17032881488402685 (checkpoint in model/ is checkpoint-best)
  • Training run: dexgarment_dyn_gns_k5_vn0p1_2026-08-04_20-30-52_466943 (full config in config.yml)

Why this configuration

This checkpoint is the winner of an 11-cell grid over velocity-history length K ∈ {1, 3, 5} and training noise Οƒ ∈ {0, 0.01, 0.03, 0.1}, scored by autoregressive rollout on 239 held-out trajectories. Rollout MSE, averaged over the trajectories long enough to reach each depth:

depth this model (k5, Οƒ=0.1) best cell at that depth worst cell (k1, Οƒ=0.01)
frame 6 (n=239) 1.39e-3 1.23e-3 (k5, Οƒ=0.03) 2.54e-3
frame 10 (n=224) 3.38e-3 3.24e-3 (k5, Οƒ=0.03) 8.98e-3
frame 15 (n=204) 6.36e-3 β€” 2.07e-2
frame 20 (n=185) 1.03e-2 β€” 3.95e-2
frame 30 (n=125) 1.60e-2 β€” 5.53e-2

Two findings drove the choice:

  • Longer history and training noise both help, and they compound. K=5 beats K=3 beats K=1 at every depth; within each K, more noise wins as the horizon grows. The optimal Οƒ increases with horizon β€” Οƒ=0.03 leads through frame 10, Οƒ=0.1 from frame 15 on. For short-horizon use (MPC), prefer the Οƒ=0.03 variant; for long rollouts, this one.
  • One-shot error does not predict rollout quality. Single-step MSE spans only 1.4Γ— across the whole grid (this model: 3.42e-5, mid-pack) while rollout MSE spans 3.5Γ—. Selecting checkpoints on validation loss alone is unreliable here.

Caveats

  • Training was stopped at 206k steps out of a planned 900k, so this is a deliberately truncated run rather than a converged one.
  • The Οƒ=0 cells in the grid stopped at 200k steps versus 206–208k for the noise cells (~3% fewer). The margins above are far larger than that gap, but the asymmetry exists.
  • Validation loss is MSE in normalized acceleration units, and the normalizer's scale depends on velocity_noise_std β€” so the 0.170 figure above is not comparable to a checkpoint trained with a different Οƒ.

Usage

from src.hub import resolve_checkpoint
from src.models.gns.dynamics import GNSDynamicsModel

path = resolve_checkpoint("dexgarmentlab-folding-lifting-dynamics-gns")
model = GNSDynamicsModel.from_pretrained(path, subfolder="model")
Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support