Exporting animations
Export your work from the Character tool: portable clip JSON, a GLB with the rig, mesh, and clips (or a bare animation rig for retargeting), an optional .rig.json report, a batch ZIP of GLBs, and the .animproj.json project file.
On this page (9)
The Character tool has five ways out: clip JSON (a serialized THREE.AnimationClip), GLB (a binary glTF with the rig and clips baked in), an optional .rig.json report written beside the GLB, the .animproj.json project file for work in progress, and — for a character you built — its editable source bundle as a .zip. Exported GLBs play through THREE.GLTFLoader; clip and project JSON are reopened through their matching Studio import commands. This article covers each path; it assumes you've authored some clips.
Export clip JSON#
Export Clip JSON downloads the current clip as a serialized THREE.AnimationClip — the exact output of THREE.AnimationClip.toJSON(clip). It's the most portable option: a small text file with the animation's quaternion (and Hips position) tracks, named against the real mixamorig: bones. Import Clip JSON reads the same format back in as a new clip, so clip JSON is also how you move a single animation between projects.
Any non-linear easing you shaped in the curve editor is preserved as an optional, ignorable field — consumers that don't read it still get correct linear/slerp playback of the same keys.
Export a GLB#
The toolbar GLB button (or the export command in the palette) opens the export dialog. It has four control groups:
- Character — a radio list of what to export. Animation rig only is the bare 65-bone Mixamo skeleton plus clips, with no body mesh — useful when you plan to retarget it onto your own model. Imported:
<name>exports the model you brought in, at its original scale in the rest pose. Each character you built adds a Created:<name>row, and a cast of more than one adds All characters (N) — one ZIP, one file per character. Once you own a character you generated, the Imported radio is not rendered at all: a generated character in the viewport isn't an import, and its row already exports it through the pipeline that bakes its face, swaps its materials, and patches its bone names. - Generated-character options — shown only when a created character is selected: Include the ink outline shell (a stylised contour; most engines want it off), Rig report (.rig.json) (on by default), and Expression to bake.
- Clips to embed — a checkbox list of every clip, all selected by default, with All / None shortcuts.
- The action row — Cancel, Batch ZIP, and Export .glb.
Click Export .glb to write a self-contained binary glTF. The animation channels target the mixamorig bone nodes, so the file plays in a stock THREE.GLTFLoader and can be imported as a character again. Non-linear easing is baked to sampled keys at the clip's FPS first, so the exported file plays identically everywhere without any special handling.
Downloaded GLBs are byte-patched on the way out so node and skin names keep the real colon form — mixamorig:Hips, not mixamorigHips. That single detail is what makes a round-tripped GLB retarget cleanly in Blender, Unity, and Unreal, all of which key their humanoid mapping off the exact Mixamo names. The patch is idempotent: a file whose names already carry colons comes back unchanged.
The rig report sidecar#
Leave Rig report (.rig.json) checked and the export writes a small JSON file beside the model — Hero 2 exports as Hero_2.rig.json — describing the bones, units, height, and embedded clips. It's a sidecar for your own pipeline; nothing needs it to load the GLB.
The face exports as one baked still#
A generated character's face is painted live in the Studio. Export bakes it into a single still texture: expressions, visemes, blinking, and lip-sync do not survive export. Use Expression to bake to choose which face gets frozen before you click — the dialog says the same thing above the button.
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
import * as THREE from "three";
new GLTFLoader().load("character_rig.glb", (gltf) => {
scene.add(gltf.scene);
const mixer = new THREE.AnimationMixer(gltf.scene);
// every embedded clip is a standard THREE.AnimationClip
mixer.clipAction(gltf.animations[0]).play();
});Batch export a ZIP#
The dialog's Batch ZIP button exports the selected clips as one ZIP of GLB files — handy when you want each clip as its own file rather than embedded together. Batch export is available when the signed-in account owns a qualifying pack or lifetime license. A license key by itself can unlock entitled assets, but it does not load account perks. See account & customer perks.
Owning the character you export#
Building, configuring, previewing, animating, and saving presets on a character is free for anyone signed in. Two things are entitled, and only those two: the exported .glb and the editable source bundle (a .zip you download from the Export & source section of the Char tab). Both require owning that character's product.
That is a second lock, separate from the batch-export perk above. Owning a pack — or the All-Access Lifetime License — turns on customer perks, but it does not automatically cover a character product: if the site says you don't own that character, the export stays locked whatever badge you carry. The Studio never decides this itself. It reads the answer the site sends, and a locked control explains itself in the dialog before you click rather than failing at the end of a long export.
If a cast export mixes characters you own with ones you don't, the dialog names the ones it will skip and exports the rest normally.
Save and open projects#
To save work in progress rather than a finished deliverable, use Save project, which downloads an .animproj.json file containing every clip, the selected clip, playback settings, your sequences and additive layers, and — when the project has one — the cast of characters you built. The cast lives inside the project file alongside the clips; there is no separate file to keep track of. Open Project loads it all back. The editor also autosaves your active project locally in the browser as you work, so .animproj.json is for explicit backups and moving a project between machines. Open project files with Open Project and clip files with Import Clip JSON; these JSON formats are not models and do not load through GLTFLoader.
Which format to use#
- Sharing one animation or moving a clip between projects → clip JSON.
- Shipping a playable character or rig to a three.js / R3F app or another engine → GLB (imported character for a ready-to-play model, animation-rig-only to retarget onto your own mesh).
- Many clips as separate files → batch ZIP (customer perk).
- Handing a rig to another pipeline → GLB plus its
.rig.jsonreport. - Saving your editing session →
.animproj.jsonproject file (clips, sequences, layers, and the cast). - Editing a character beyond what the Studio exposes → the editable source bundle (
.zip, comes with the character product).
Where to go next#
- The Character Creator — build the character you're exporting, and what owning its product includes.
- Importing your own character — bring a Mixamo GLB in before exporting it back out with your clips.
- Asset format specification — how threejsassets GLBs are built for the web.
Ask us directly — we answer support mail ourselves.