HairDeck: Open Apache-2.0 Model Turns One Character Image Into Game-Ready Hair Cards With Spring Bones

Introduction
HairDeck, a new open model from Tsinghua University with CMU and CUHK, takes a single character image and generates stylized hair cards plus the spring-bone chains that make them move. The code is on GitHub and the checkpoints are on Hugging Face, both under Apache-2.0, with a free hosted demo running on ZeroGPU. The paper landed on October 29.
That matters because hair cards are how anime-style and stylized game characters actually ship. They're artist-placed ribbons of geometry, rigged to spring bones so they bounce when the head turns. Most image-to-3D tools hand you one fused blob of a mesh instead, which you then have to rebuild by hand before it can move.
What shipped
- Model: HairDeck
- Vendor: Yuze He, Yixiang Wei and colleagues at Tsinghua University, Carnegie Mellon University and The Chinese University of Hong Kong
- Modality: image to 3D hair cards, plus generated spring-bone chains
- Open vs API: open code and weights, Apache-2.0 (the gated SAM 3 and DINOv3 dependencies keep their own licences)
- Where to run it today: the Hugging Face Space, or locally on Linux with one NVIDIA CUDA GPU
- Concrete fact: output is a GLB with per-card UVs, or a full VRM avatar with the hair skinned to spring bones
How it works
The trick is treating a hairstyle as a set of cards rather than a long sequence. A card VAE squeezes each card's geometry, root position and orientation into one token, and a set diffusion transformer denoises all the cards together, conditioned on either an image or a point cloud. A second chain diffusion model then generates the bones that drive the cards, and the pipeline handles skinning and VRM export through Blender 4.2 with the VRM Add-on.
The authors compare it against CHARM, the previous stylized hair-card generator, which builds a hairstyle one control point at a time. On CHARM's own test set, they report HairDeck cuts Chamfer distance by 44%, more than halves card-orientation error, and runs 33 times faster. Those are the paper's own numbers, so check the project page results grid and judge the cards yourself.
Why game devs should care
If you make VTuber avatars, anime-style RPG characters or VRChat models, hair is usually the slowest part of the asset to get right and the first thing that looks broken in motion. HairDeck gives you individual cards you can still edit, UVs so you can paint them, and bones that already know how to swing. You get up to four variations per image, so you can pick the silhouette that reads best before touching it in Blender, Unity or Unreal.
It's a starting point, not a finished groom. Hair colour in the demos is sampled from the input image, and the training recipe for the released image model used a restyled-render pool that isn't part of this release.
Try it
The quickest test is the hosted demo: upload a front-facing character drawing, generate, and export the VRM. To run it locally (Python 3.12, tested with PyTorch 2.8 and CUDA 12.8), first accept the licences for SAM 3 and DINOv3 on Hugging Face, then:
git clone https://github.com/hyz317/HairDeck.git
cd HairDeck
python -m pip install -r requirements.txt
python -m pip install --no-deps pyrender==0.1.45
hf auth login
export HAIRDECK_ROOT=/path/to/workspace
python scripts/setup/download_weights.pyThen generate four variations and export the first one as a VRM avatar:
python scripts/image_to_hair.py character.png --out results/my_character --n 4
python -m hairdeck.vrm.export results/my_character/character 0You'll find hair_seed0.glb, chains_seed0.json and avatar_seed0.vrm in the output folder. Add --no-chains if you only want the cards, or run python demo/app.py --port 7860 for the local Gradio demo.
—Titus
