Nodes/Melite Poser Nodes/🦾 Creature Rig Bridge (TRELLIS mesh -> anyCreature anims)
ComfyUI Node

🦾 Creature Rig Bridge (TRELLIS mesh -> anyCreature anims)

Give a rigless TRELLIS monster a skeleton (and free animations)

By JayDataEngineer·Created 2 months ago·Updated 5 days ago· 1
🦾 Creature Rig Bridge (TRELLIS mesh -> anyCreature anims)
    • glb_path
    ◄creature_glb—►
    ◄mesh_glb—►
    â—„height_ratio1.00â–º
    â—„max_influences3â–º
    â—„strip_bodytrueâ–º

    The KB's 3D generation doc is blunt about the ceiling here, and the corpus quote behind it is even blunter: generated meshes are "entirely unusable for interactive applications" because they have no rig at all. Humanoids get solved by template rigs and retargeting. Creatures generally don't - nothing wants to guess where a hound's shoulder is.

    Creature Rig Bridge takes a different route. Instead of inventing a skeleton, it borrows one: take an existing creature GLB that already has an armature with baked idle/move animations, bind your static generated mesh onto it, and you inherit those animations for free. The pack's own note calls this the R&D path and says it's the only one on this stack that produces textured and animated creatures, because the humanoid tooling - SOMAX, Kimodo - is humanoid-only by policy.

    How it works

    Blender runs headless as a subprocess, same discipline as the rest of the pack's Blender work - no bpy imported into ComfyUI's process.

    1. Import the creature GLB (armature, skinned meshes, actions) and the mesh GLB (static, textured).
    2. Find the armature, sanity-check that it has skinned body meshes, and find a materialised target mesh that isn't bound to it.
    3. Normalise the mesh onto the creature: uniform scale to height_ratio, XZ-centred on the creature's bounds, base-aligned to minimum Z. That's the "it stands on the ground and isn't sideways" step.
    4. Skin. For every mesh vertex, compute the distance to every deformable bone segment in world space (head to tail, not just the head point), take the top-K bones by inverse distance, normalise them into weights, and write them as vertex groups plus an armature modifier - standard linear blend skinning.
    5. Optionally delete the creature's own body meshes and export a GLB with skins and animations.

    Two details stand out as sensible rather than clever, which is the right kind of sensible. Bone segments rather than joint points means a vertex on a forearm binds to the forearm instead of the elbow. And the bounding-box checks fail loudly - "no armature in creature GLB", "no skinned body mesh on creature armature", "no materialized target mesh found", "bbox failure" - instead of exporting something subtly wrong.

    Inputs and outputs

    • creature_glb - the anyCreature GLB with armature and animations: a filename in input/ or output/, or an absolute path.
    • mesh_glb - your static textured mesh (a TRELLIS asset). Same resolution rules.
    • height_ratio (default 1.0, 0.05–10) - mesh height as a fraction of the creature's bind-pose height. This is your scale dial: 0.5 for a cub-sized version of the same mesh, 1.5 for something imposing.
    • max_influences (default 3, 1–8) - max bones per vertex, nearest segments winning. 3 is a sane default; push to 4 for smoother deformation on complex creatures, higher if you see hard creases at joints.
    • strip_body (default true) - delete the creature's own body meshes so only your bound mesh exports. Turn it off if you want the original body too.

    One output: glb_path, written to ComfyUI's output/.

    Install

    cd /path/to/ComfyUI/custom_nodes
    git clone https://github.com/JayDataEngineer/melite-poser-nodes.git
    

    Restart, or install melite-poser-nodes via ComfyUI Manager. Pack deps are py-soma-x[anny], trimesh and xatlas; this node uses none of them directly. It shares Blender resolution with RayRenderGLBViews: BLENDER_BIN, else blender on PATH, else the portable fallback, else a loud FileNotFoundError. Runs CPU-only, which is fine - it's geometry maths, not rendering.

    Where people get burned

    Nearest-segment skinning has no idea what your model is. A vertex on a tail that happens to sit close to a hind leg will bind to the leg. So will anything thin and ambiguous - antennae, fins, ear flaps, a spiked ridge. The fix is usually max_influences and a better height_ratio, but for genuinely awkward silhouettes, this is where you go back to Blender.

    Scale first, or the bind is wrong. height_ratio sets a uniform scale fit before skinning. Get the proportions off and a hound mesh comes out as a chihuahua-perched-on-a-stallion. Check one render before you batch.

    strip_body is destructive and defaults to on. With it enabled, the creature's original body isn't in the output. If you wanted the original skin showing through as an underlayer, turn it off.

    The creature GLB has to be a real animated rig. Armature plus skinned meshes plus actions. A static creature mesh with a bone-less "rig" produces the "no skinned body mesh on creature armature" error, which is at least a clear one.

    You inherit the creature's rig proportions, not your mesh's. The animations were authored for whatever the source creature's limb lengths were. A mesh with very different proportions will look like it's moving someone else's body. There's no retargeting here - that's the trade for skipping the retargeting problem entirely.

    Categorymelite/creature

    Inputs (5)

    NameTypeDefaultDescription
    creature_glbSTRINGanyCreature GLB (armature + idle/move): filename in input/ or output/, or absolute path.
    mesh_glbSTRINGStatic textured mesh GLB (e.g. TRELLIS asset) to bind onto the skeleton.
    height_ratioFLOAT1.000.05–10Mesh height as a fraction of the creature bind-pose height.
    max_influencesINT31–8Max bone influences per vertex (nearest segments win).
    strip_bodyBOOLEANtrueDelete the creature body meshes; export only the bound mesh.

    Outputs (1)

    NameTypeDescription
    glb_pathSTRING—