Now I'm trying to figure out how to procedurally influence weights and have multiple mesh's share the same rig.
If anybody else is interested here's the python code.
def GenerateBones(): print("Creating Bones") ThisNode = hou.pwd() ContainerObject = hou.node("/obj").createNode("subnet", "%s_Generated_Bones" % (ThisNode.name())) Root = ContainerObject.createNode("null", "root") Geometry = ContainerObject.createNode("geo") hou.node(Geometry.path()+"/file1").destroy() Geometry.moveToGoodPosition() ObjMerge = Geometry.createNode("object_merge") ObjMerge.parm("objpath1").set(ThisNode.path()+"/IN") ObjMerge.parm("xformtype").set("local") # Setup Capture CaptureNode = None CaptureMethod = ThisNode.parm("capture_method").eval() #Biharmonic Capture if CaptureMethod == 0: CaptLines = Geometry.createNode("bonecapturelines") CaptLines.parm("rootpath").set(Root.path()) SolidEmbed = Geometry.createNode("solidembed::2.0") SolidEmbed.setInput(0, ObjMerge) SolidEmbed.setInput(1, CaptLines) CaptureNode = Geometry.createNode("bonecapturebiharmonic") CaptureNode.setInput(0, ObjMerge) CaptureNode.setInput(1, SolidEmbed) for node in [CaptLines, SolidEmbed, CaptureNode]: node.moveToGoodPosition() #Proximity Capture elif CaptureMethod == 1: CaptureNode = Geometry.createNode("captureproximity") CaptureNode.setNextInput(ObjMerge) CaptureNode.parm("rootpath").set(Root.path()) CaptureNode.parm("maxinfluences").set(ThisNode.parm("max_bone_influence").eval()) CaptureNode.parm("usecaptpose").set(1) CaptureNode.parm("forcecook").pressButton() CaptureNode.moveToGoodPosition() Deform = Geometry.createNode("deform") Deform.setNextInput(CaptureNode) Deform.parm("donormal").set(1) Deform.parm("fast").set(1) Deform.moveToGoodPosition() Deform.setDisplayFlag(True) Deform.setRenderFlag(True) CaptureRadius = ThisNode.parm("capture_radius").eval() # Make Bones for i, point in enumerate(hou.node(ThisNode.path()+"/POINTS_OUT").geometry().points()): bone = ContainerObject.createNode("bone", "bone_%i" % i) bone.parm("rOrd").set(0) CaptureLength = [0.1, 0.001] bone.parm("length").set(CaptureLength[CaptureMethod]) bone.parm("displaycapture").set(True) bone.parm("captposelen").set(0.1) Position = point.attribValue("P") for i, parm in enumerate(['tx', 'ty', 'tz']): bone.parm(parm).set(Position[i]) for parm in ['crtopcapx', 'crtopcapy', 'crtopcapz', 'crbotcapx', 'crbotcapy', 'crbotcapz']: bone.parm(parm).set(CaptureRadius) bone.setNextInput(Root) bone.moveToGoodPosition() hou.hscript("bonealigncapture -c %s/bone*" % str(ContainerObject.path())) ContainerObject.moveToGoodPosition() print "Bones Creation complete! Output at %s" % ContainerObject.path()