vrm-rigify icon indicating copy to clipboard operation
vrm-rigify copied to clipboard

Cannot create rigify rig from vrm rig

Open Qwack-exe opened this issue 3 months ago • 5 comments

I get an error when I use the Menu Search and click Generate Rigify armature for VRM model: Image

Qwack-exe avatar Aug 30 '25 18:08 Qwack-exe

Same error from me. Using latest version of vrm-rigify with Blender 4.5.2. Using 3.13 of VRM import addon. Also tested with Avatar Toolkit importer, no luck.

rblz avatar Sep 06 '25 16:09 rblz

Fix:


metarig_bone = getattr(metarig_human_bones, bone_type).node
vrm_bone = getattr(vrm_human_bones, bone_type).node

replace with:


metarig_bone_attr = getattr(metarig_human_bones, bone_type, None)
vrm_bone_attr = getattr(vrm_human_bones, bone_type, None)
if (
    hasattr(metarig_bone_attr, "node") and
    hasattr(vrm_bone_attr, "node")
):
    metarig_bone = metarig_bone_attr.node
    vrm_bone = vrm_bone_attr.node
    if hasattr(vrm_bone, "bone_name") and vrm_bone.bone_name:
        bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name))

Tested Blender 4.5.2 latest version of plugin.

rblz avatar Sep 06 '25 20:09 rblz

Fix:


metarig_bone = getattr(metarig_human_bones, bone_type).node
vrm_bone = getattr(vrm_human_bones, bone_type).node

replace with:


metarig_bone_attr = getattr(metarig_human_bones, bone_type, None)
vrm_bone_attr = getattr(vrm_human_bones, bone_type, None)
if (
    hasattr(metarig_bone_attr, "node") and
    hasattr(vrm_bone_attr, "node")
):
    metarig_bone = metarig_bone_attr.node
    vrm_bone = vrm_bone_attr.node
    if hasattr(vrm_bone, "bone_name") and vrm_bone.bone_name:
        bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name))

Tested Blender 4.5.2 latest version of plugin.

This seems to aleviate the error that I was having, but now another one arises:

Python: Traceback (most recent call last):
  File "/home/USER/.config/blender/4.5/scripts/addons/vrm_rigify/__init__.py", line 225, in rename_rig_bones_to_match_vrm_model_vertex_groups
    rig_bone = armature_rig.edit_bones[f"DEF-{metarig_bone_name}"]
               ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'bpy_prop_collection[key]: key "DEF-spine" not found'

Naitrate avatar Sep 14 '25 18:09 Naitrate

@rblz 正常動作しました。ありがとう。 It worked properly. Thank you.

@KingKrouch 少し注意点があるようですね。その次のif文も含めて置き換えましょう。 There seems to be a slight caveat. Let's try replacing it, including the next if statement.

    # Compute a bone mapping between the metarig
    # and VRM model based on VRM bone types.
    bone_mapping = []
    for bone_type in metarig_human_bones.keys():
        if bone_type in ["last_bone_names", "initial_automatic_bone_assignment"]:
            continue

        # metarig_bone = getattr(metarig_human_bones, bone_type).node # ⭐️
        # vrm_bone = getattr(vrm_human_bones, bone_type).node # ⭐️
        # if vrm_bone.bone_name: # ⭐️
        #     bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name)) # ⭐️

        #  =============== replace start👌
        metarig_bone_attr = getattr(metarig_human_bones, bone_type, None)
        vrm_bone_attr = getattr(vrm_human_bones, bone_type, None)
        if (
            hasattr(metarig_bone_attr, "node") and
            hasattr(vrm_bone_attr, "node")
        ):
            metarig_bone = metarig_bone_attr.node
            vrm_bone = vrm_bone_attr.node
            if hasattr(vrm_bone, "bone_name") and vrm_bone.bone_name:
                bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name))
        #  =============== replace end👌
                
    return bone_mapping

nonchang-net avatar Sep 28 '25 11:09 nonchang-net

@rblz 正常動作しました。ありがとう。 It worked properly. Thank you.

@KingKrouch 少し注意点があるようですね。その次のif文も含めて置き換えましょう。 There seems to be a slight caveat. Let's try replacing it, including the next if statement.

    # Compute a bone mapping between the metarig
    # and VRM model based on VRM bone types.
    bone_mapping = []
    for bone_type in metarig_human_bones.keys():
        if bone_type in ["last_bone_names", "initial_automatic_bone_assignment"]:
            continue

        # metarig_bone = getattr(metarig_human_bones, bone_type).node # ⭐️
        # vrm_bone = getattr(vrm_human_bones, bone_type).node # ⭐️
        # if vrm_bone.bone_name: # ⭐️
        #     bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name)) # ⭐️

        #  =============== replace start👌
        metarig_bone_attr = getattr(metarig_human_bones, bone_type, None)
        vrm_bone_attr = getattr(vrm_human_bones, bone_type, None)
        if (
            hasattr(metarig_bone_attr, "node") and
            hasattr(vrm_bone_attr, "node")
        ):
            metarig_bone = metarig_bone_attr.node
            vrm_bone = vrm_bone_attr.node
            if hasattr(vrm_bone, "bone_name") and vrm_bone.bone_name:
                bone_mapping.append((metarig_bone.bone_name, vrm_bone.bone_name))
        #  =============== replace end👌
                
    return bone_mapping

This alongside rblz's tweaks to the code fixes the plugin for me. Now it works, I'd suggest finding a way of opening up a pull request if possible.

Naitrate avatar Sep 28 '25 18:09 Naitrate