Nodes/ComfyUI-Kimodo-Enhanced/Kimodo Export GLB (Mixamo)
ComfyUI Node

Kimodo Export GLB (Mixamo)

Your Text-to-Motion Output, Finally on a Character That Isn't a Stick Figure

By stevelittlefish·Created 5 days ago·Updated 2 days ago· 0
Kimodo Export GLB (Mixamo)
  • motion
  • rigged_glb
  • rigged_glb
filename_prefixkimodo_glb
sample_index0
yaw_offset0
scale0.00
map_fingersfalse
auto_fix_input_posefalse
fix_orientationfalse
animate_in_placefalse

Kimodo_ExportGLB is where the Kimodo text-to-motion pipeline stops being a skeleton demo and becomes an animated character you can actually ship. The pack (an enhanced fork of jtydhr88's ComfyUI-Kimodo, wrapping NVIDIA's Kimodo motion-diffusion model) turns a sentence like "a person walks forward, jumps, then waves" into 3D joint motion. This node is the last link: it retargets that generated motion onto your own rigged .glb character - a Mixamo download or something you rigged yourself - and writes out an animated glTF you can drag into Blender, three.js, or a viewer.

"Mixamo" in the name isn't a service call and needs no account. It means the retarget matches bones by Mixamo's naming scheme, so any character following those conventions (hips, spine, left_upLeg, left_arm, …) just works.

How it works

Text-to-motion in this pack is a modular chain: Kimodo Load Model → Kimodo Text Encode → Kimodo Sampler → this export node. The Sampler emits a KIMODO_MOTION object - frames of joint positions and rotations for a SOMA (or SMPLX/G1) skeleton. This node takes that motion plus a loaded character and does the retargeting math: it reads the target glTF's skeleton, matches bones across naming-prefix differences, and maps the source SOMA joints onto the Mixamo layout frame by frame.

The fork's actual selling points live in the details, all opt-in:

  • Root motion that actually travels. Mixamo rigs are authored in centimeters (Armature scale 0.01), which is why upstream exports "walked on the spot." Root displacement is converted through the parent's full world transform, rotation and scale, so a walk actually carries the character across the floor.
  • A-pose rigs don't flap. Real rigs are rarely T-posed. auto_fix_input_pose drives each bone by rest direction, correcting the over-rotation that makes A-pose arms flap like chicken wings.
  • Stale-clip cleanup. Pre-existing bind/rest animations (the frozen 2-keyframe placeholders Mixamo files ship with) are stripped so the generated clip plays instead.

Unlike the FBX sibling, GLB export needs no extra SDK - it reads and writes glTF directly via pygltflib, writing motion as glTF animation samplers and channels. The result lands in ComfyUI's output/ folder as a timestamped .glb.

The inputs that matter

Required:

  • motion - plug the KIMODO_MOTION from the Sampler straight in. Straightforward.
  • rigged_glb - a FILE_3D_GLB/FILE_3D_GLTF from a Load3D node (ComfyUI core) or from SkinTokensRig. The trap: image-to-3D meshes (Hunyuan3D, TRELLIS…) carry no skeleton - all surface, no bones - so this must genuinely be a rigged character, or you get "no skin."
  • filename_prefix - output name (default kimodo_glb).
  • sample_index - which of the Sampler's generated samples to export (0-indexed, capped at 15).

Optional toggles, all default OFF for a reason:

  • auto_fix_input_pose - ON for an A-pose character (e.g. SkinTokensRig). No-op on a T-pose rig.
  • fix_orientation - rescues rigs authored Z-up that animate face-down (a classic Mixamo armature problem). Snaps the character upright by a clean 90°, facing unchanged.
  • animate_in_place - kills horizontal travel but keeps vertical bob and jumps. Great for a looping idle or a game's locomotion slot.
  • map_fingers - leave OFF or SOMA's mismatched finger rest poses turn your character's hands into claws.
  • yaw_offset (degrees) and scale (0 = auto height-based) for fine-tuning placement.

Output: a single rigged_glb socket plus the file on disk.

Installing it

Install the whole pack via ComfyUI Manager (search ComfyUI-Kimodo-Enhanced), or:

cd ComfyUI/custom_nodes
git clone https://github.com/stevelittlefish/ComfyUI-Kimodo-Enhanced.git
cd ComfyUI-Kimodo-Enhanced
pip install -r requirements.txt

Restart ComfyUI; the nodes appear under Kimodo. Kimodo auto-installs on first launch, and models download from HuggingFace on first use - which is where the reality check lands. The text encoder is Llama 3 8B via LLM2Vec, and it's gated: request access on HuggingFace and run huggingface-cli login before anything downloads. Budget roughly 17GB of VRAM for the sampler, which the r/comfyui announcement thread called "a cruel joke" for 16GB cards. And you need a rigged character before you start - a Mixamo "Without Skin" T-pose download or a SkinTokensRig export.

Troubleshooting

  • "No skin" error - the loaded GLB isn't rigged. This node can't invent a skeleton; get a rigged character.
  • Character exports but nothing animates - check the console for a "no bone pairs matched" warning; your rig's bone names don't follow Mixamo conventions. Rename or swap in a Mixamo-standard character.
  • Arms flapping - A-pose rig with the toggle off. Turn on auto_fix_input_pose.
  • Walking on the spot - leave animate_in_place OFF; that toggle is exactly what pins travel.
  • Feet sliding through the floor - a generation-side artifact; it's handled upstream by the optional motion_correction foot-skate cleanup, not by this node.

Preview with the pack's 2D/3D skeleton nodes before you export - a five-second look beats a wasted full retarget.

CategoryKimodo

Inputs (10)

NameTypeDefaultDescription
motionKIMODO_MOTION
rigged_glbFILE_3D_GLB,FILE_3D_GLTF,FILE_3DRigged glb/gltf character (e.g. from a Load3D node or SkinTokensRig). Joints matched by Mixamo naming.
filename_prefixSTRINGkimodo_glb
sample_indexINT00–15Which sample to export (0-indexed)
yaw_offsetoptFLOAT0-180–180Rotate character around Y-axis (degrees).
scaleoptFLOAT0.000–10Force scale multiplier (0 = auto height-based scaling).
map_fingersoptBOOLEANfalseRetarget the finger bones. OFF by default: SOMA's finger rest orientations differ sharply from most rigs, so direction-matching bends the fingers into a claw. OFF leaves the hands in their natural rest pose while the body animates. Turn ON only if your rig's fingers align well.
auto_fix_input_poseoptBOOLEANfalseOFF by default. When ON, corrects each bone for the source-vs-target rest DIRECTION so an A-pose rig (e.g. SkinTokensRig) animates without the arms flapping. Turn ON only for an A-pose character; it is a no-op on a T-pose rig, so it never alters T-pose meshes.
fix_orientationoptBOOLEANfalseOFF by default. When ON, stands the character upright if the input rig was authored tipped over (e.g. a Z-up Mixamo armature that otherwise animates face-down). Detects the up axis from the spine and lower legs, snaps it to the nearest 90° axis, and tilts to Y-up WITHOUT changing which way it faces; a no-op on an upright rig.
animate_in_placeoptBOOLEANfalseOFF by default (the character travels, matching the source motion). When ON, removes horizontal travel so it walks/runs on the spot — but KEEPS vertical motion, so bobbing, coming off the ground and jumps still work.

Outputs (1)

NameTypeDescription
rigged_glbFILE_3D_GLB