Updating driven channels efficiently?

Working with my “Katrice” rig for Kata, which started way back in 2.44 and so is a bit lacking in modern conveniences ;), I have a number of driven bones in my armature that use a pydrivers.py script to get their marching orders. I’ve solved the problem of using bones in the same armature to drive these special bones (separate armature!), but one aspect of using the pydrivers approach has me annoyed and baffled.

If I need to edit the pydrivers.py script to modifiy its operations (and that’s still an ongoing process to some degree), I can find no other way to have all the drive bones update to the new script than selecting each channel in each driven bone, then placing the cursor in the expression field and hitting Enter. My understanding of the documentation is that doing this for one bone should update all driven bones to the new script, but apparently that isn’t the case.

Is there some way I haven’t uncovered yet that allows all pydriver channels to be updated at once? I have about 20 helper bones with anywhere from 1 to 6 channels for each bone, and updating them one-by-one is a mind-numbing experience, plus there’s always the chance that I’ll miss one bone in the updating process.

Thanks for any info.

If you are using the pydriver.py file, perhaps you could link in a function call to a frame change event that simply calls your update functions in the pydriver.py? Then the bones would update on a frame change?

Just brainstorming here, I have not dealt with pyriver yet except in that little light experiment.

I guess I missed the point, after re-reading your post. You are looking to do a one time update? If you are going to take the time update each bone once, why not make them all call some master function in the pydriver.py with an ID, like self being passed in. Then if future updates are required, you only need to edit your pydrivers.py?

pydriver.py is called once per frame afaik, and the list of driven channels that reference it is polled and any functions executed and their values return to the driven channel. I don’t know of any way to set up and call the “update function” you describe – not even sure it can be done given the nature of the pydrivers functionality. It isn’t called in the same manner Scriptlinks scripts are, nor other scripts like those available in the Scripts menus.

It seems that though the pydrivers.py script has to be resident in the Text Editor for the whole thing to work, for some reason edits to the script are not reflected in the operation of the driven channels on the next playback of the animation – I have to update each channel’s call to the script (the code that goes in the driven channel field) in the way I described in order for the edits to be recognized. It’s as if that process establishes a “resident but hidden” version of the script, that is in effect until the channels are again updated – manually, one by one, it seems. I don’t mind having to do an update, but channel-by-channel is a royal pain.