assetyardby Binary Helix

HOW IT WORKS

A mesh is not
a character.

Generating a model is the easy part. Making it move takes a skeleton, skin weights, motion, and a transfer between two bodies that were never built to match. Here is the whole path, including the parts that go wrong.

The four stages

StageWhat it producesWhat it cannot see
1. ReferenceA clean full-body image of the characterWhether a limb is hidden behind a cloak
2. MeshA textured, game-ready surfaceThat the surface is a person
3. RigA skeleton inside the mesh, and skin weightsWhich bone is a thigh and which is an arm
4. MotionNamed clips driving that skeletonThat the body it came from was shaped differently

Why the rig is the hard part

A skeleton is a tree of joints placed inside the mesh, plus a weight for every vertex saying which joints move it. Get the weights wrong and an elbow tears. Get a joint's position wrong and the limb bends in the wrong place.

The subtle failure is naming. A rig predictor returns anonymous joints. Something has to decide which one is the pelvis, which pair are the legs, and which way is up. That decision is geometric, and it is easy to get backwards: arms hanging at rest point downward exactly like legs do.

Why motion transfer is harder still

Motion is recorded or generated on one body and has to play on another. The performer and your character have different limb lengths, different proportions, and different resting poses. You cannot copy joint positions, or a tall character's feet sink into the floor. You have to copy rotations, corrected for how each skeleton rests.

There is a trap inside that. A natural approach is to point each bone where the source pointed it. That reproduces direction perfectly, and silently discards rotation about the bone's own axis, because spinning a bone does not change where it points.

That lost component is not a detail. It is:

We found all three in our own output, and fixed the transfer to carry twist as well as direction. The service now measures every clip before it ships.

What gets checked

Two automatic checks run on a character, and neither needs a renderer:

You can run the same checks on any GLB you have, ours or not:

python tools/check_rigged_character.py YOUR_MODEL.glb

One command

All four stages run from a single request. The animation pack decides which clips you get.

assetyard generate model \
  --prompt "A marsh ranger in a neutral A-pose, full body head to feet, \
arms away from the torso, forearms and open hands visible, \
legs apart, both feet flat and fully visible" \
  --geometry-profile character \
  --animation-pack humanoid_standard \
  --out assets/ranger.glb

The prompt names every limb on purpose. The rig stage can only place a joint it can see, so a pose that hides a forearm produces a skeleton missing that bone. This is the single biggest thing you control.

The packs

PackClipsWhat it covers
humanoid_core 5 The smallest set that makes a humanoid usable in a game: standing, walking and running.
humanoid_standard 15 The default set for a generated humanoid. It adds jumping, gestures and reactions to the core locomotion clips.
humanoid_combat 7 Melee reactions for an action game. Pair it with a locomotion pack.
humanoid_traversal 8 Moving through a world rather than across a flat floor: crouching, climbing, swimming and landing.
humanoid_sword 10 Armed melee for an action game: swings, a shield, and the reactions that sell a hit landing.

The result is one GLB with a named humanoid skeleton, skin weights, and named clips inside it. It loads in Three.js, Godot, Unity, or anything else that reads glTF, and your players never talk to us.

Combine packs

A combat, sword or traversal pack is a set of reactions, not a character: none of them carries a walk cycle. Repeat --animation-pack to pair one with locomotion, and the clips arrive in one file.

assetyard generate model   --prompt "A shieldmaiden in a neutral A-pose, full body head to feet"   --geometry-profile character   --animation-pack humanoid_core   --animation-pack humanoid_sword   --out assets/vale.glb

Packs overlap, and a glTF file cannot carry two clips with the same name. Where they overlap, the pack you name first keeps the clip. Name at most three packs in one request: every clip is generated, so the request grows with the count.

The player character in the 3D demo is built this way, and the page prints the clip names it finds in the file.

What this does not do yet

We would rather say so than have you find out after a generation.