Free PoseLibrary Plugin with C++ source code


Hi gang,

I’m rather excited about a plugin I’ve created. Because it’s not like anything I’ve seen anyone do before in C4D plugins.
It uses what I call a “Smart Dialog System with Local Storage”.
The user can stay right in the dialog and use the Tree GUI. Or select items in the scene view. And the Dialog is smart enough to change it’s GUI. Depending on what object is selected. And if it has a special storage tag on it.
Plus all of the data is stored locally in the scene file, in tags.
No messy external files and folders to deal with. I absolutely love this way of working.

I developed it in C++ mainly because the Tree GUI is not available for Python users yet. So the plugin is only PC compatible. Sorry mac people.
But as always. I’ve included the C++ source code with it. That’s really the most important thing I wanted to share with you guys.
That way you guys can learn from the code. And change it as you like.Or make your own plugin based on the plugin framework I’ve setup for you.

The plugin can be downloaded from my plugins page:

Here’s a quick video using it:




not sure if others feel the same way, but i could actually need an explanation what
it does, as i have currently no clue, even after watching the video. i guess it is some
kind of morph state tag ?

happy rendering, littledevil


It creates and stores poses (Position & Rotation UserData).
There’s also a help menu in the plugin you can look at.



scott, thanx for this plugin. i can’t figure it our after spending time with it. I can’t get it to add more then one pose.

edit, i got it to do a simple cube with object move, rotate, but when i go back to my character scene, it does not seem to work with rotating the jaw bone, head bone, etc . looking at the top part in the hierarchy i see they are not in the list.

Edit, i can’t figure out how how to remove since my rig seems to be not working. everything snaps back to zero t pose. i don’t see any tags in the object manager for it and i tried the right click remove an remove all and nothing happens.


sure are demanding for a free tool. He offered a video and there’s a bit of help built in, should be more than enough for something you got for free. Thorough documentation is time consuming and so is support, those are usually what lead a plugin to cost money more than the development of the plugin itself. You guys should be a little more appreciative when someone offers such tools for free, especially with source code to modify and change or learn from.


Sorry about the problem with the joints. That’s a bug.
I didn’t really test it with plain joints. Just objects and joints that use a control object to move them.
I’ll look into fixing that.

The tag is hidden on purpose so the user can’t see it. And accidentally mess around with it.
The tag is automatically created when the first pose is attempted on an object. And automatically deleted when all the poses are deleted from an object.
But I just noticed the tag icon is showing up in the list of tag options. And that can probably be confusing. So I’ll look into removing from the list of tags.

To use the plugin:
-You select an object (in the Tree GUI, or in the Scene view, or in the OM).
-Then press the Add Pose button to save a pose
-If the object has never been posed before it won’t have a hidden PL tag on it. The Add Pose button will automatically create the hidden PL tag and a little pose man icon will show up in the Tree GUI. Letting you see which objects have a PL tag on them. That’s where you’ll see the tag icon.
Not in the OM.

-If you delete the last pose on an object (so that there are no poses at all). The hidden PL tag automatically gets deleted from the object. And the little icon in the TreeGUI will disappear.

I had no idea it would be so confusing to use. To me it’s rather obvious. But that’s probably because I created it. :slight_smile:
This is a slightly different way of working than what you normally get from C4D plugins.
This plugin is designed for the user to stay in the dialog most of the time and not need to venture into the OM and select things as much as other plugins.
The dialog is smart enough (or supposed to be when the bugs are fixed) so you only need to go into the OM if want to delete the object itself.

I’ll take a look at the joints bug tomorrow. After I get some sleep.



I am only trying to help Scott like I always have done in the past.



thanks for getting back tonight and also your hard work making it free to the community. I am very interested in something like this.


Yes really, its great that you know Scott so well, perhaps you should address him with these sort of suggestions directly then. Your not the only poster and the other poster had similar issue complaining about documentation. It’s great if scott doesn’t mind either, that’s might kind of him. Having been a person whose shared many free things in the past, and with all the problems we’ve seen recently with professional plugin developers getting no one to support or pay, and other people offering free things and getting the why no documentation or why hasn’t this been updated for version x type responses I think we should encourage people to show some appreciation.

Scott may not mind, but the next developer to share something free, who you or someone whose seen posts like this to, may not appreciate it and stop sharing their stuff for free.


anything is possible


thank you Scott for sharing :slight_smile:
I’ll try it !


Hi Scott.

Have you seen



Yes. I’ve seen nitropose. But what I’m doing is something a bit different.
He stores his images using cameras. And what I’m doing is using the built-in plugin structure of the tag plugins to save the data locally in the scene file using hidden tags.
I only chose to store poses(UserData) because that was the most obvious way to use it. But it can be used for other things.
I’m using a tag as a database like storage container that the dialog plugins can use to control what happens in them on a per object basis. Something I haven’t seen anyone exploit yet.

No worries.
My primary focus is sharing code to help other struggling developers. But I do want the examples I post to work properly. I want to know if something isn’t working (you did find a bug). Or doesn’t make sense.



Thank you for creating and sharing this Scott! :thumbsup:


Version 1.1 is now up.
I think I’ve fixed the joints bug. Try it out and let me know.
*Reminder: The pose images are created by rendering the scene. And joints do not render unless the polygon, or box option, is enabled for them.

I’ve also changed the way it works when the Add Pose button is used on an object for the very first time.
There seemed to be some confusion about clicking the button once to add the tag. Then clicking again to create poses. So I changed the code so that first click to create a tag is no longer necessary.
Hopefully that will be a bit less confusing.

NOTE: This plugin is not production tested. And I have no beta testers.
It’s really just a proof of concept. And a code sharing exercise.
So please use this with caution as if it were beta version software guys.



I agree with Kai.

Beyond that, thanks Scott for sharing the code and bettering the community with your contribution. One of these days I’ll have to learn C++ probably and this will be one of the examples I use. So thanks.


Hi Scott, i got the new v1.1 and it now does poses with joint rotations. but, maybe i am doing something wrong, it appears to only store poses for just one joint at a time. i am trying to pose the left and right wings on a cartoon bird character. is there way to do this so it does a master pose of the bird where both wings are closed and then they are open?


Unfortunately. It’s not currently set up to handle multiple objects like that.
You can record the pose of each joint individually. But that’s probably not what you’re wanting.
I never animate multiple joints on an individual basis like that. I always have some kind of control object that moves a bunch of joints connected through IK. That’s the kind of posing I typically use.
So that’s the way I set up the plugin to work.

Most of my time spent on this has been in getting the basic framework to work. This is a brand new technique that I’m sort of inventing by the seat of my pants. And I’m still trying to get all the kinks worked out of it.
So I haven’t really thought that much about the options yet.


Years ago I invented a trick for posing things using the weight tag. That might be an option worth looking into.
You simply:

  • Create a null and put an empty weight tag on it.
  • Put the null at the top of the OM (this is important)
  • Pose your joints how you like them then drag and drop the joints into the joints list of the weight tag
  • Click the “Set Bind Pose” button on the weight tag (this saves the joints positions and rotations)

Any time you want the joints to assume that pose. Just click the “Reset Bind Pose” button in the weight tag.
You can create as many weight tags (poses) as you like.
I’ve used that little trick for years.


Small update: version 1.2.
Found and fixed some memory leaks.

The plugin framework should be pretty solid now.



I’m happy to announce that I have been able to port this plugin to python called “PyPoseLibrary”.
Although it does not have the tree gui like the C++ version. Because python doesn’t support it yet.
So you will use it a little bit differently. By adding the tag yourself and seeing it on the objects in the OM.

Please be sure to read the help that’s included in the plugin. It explains why this plugin is so unique. And I why I think it’s a pretty big deal in C4D plugin development.
Average users might not understand why this plugin is so special. But developers should get it when they see what the thing does. And read the code.

Link to the plugin:

The C++ version does work. But still has some memory related bugs in it that I’m still trying to fix.
There’s an awful lot of image creation, swapping, and destruction going on in these plugins. And all of that memory has to be handled and freed manually in C++. Which is proving to be very difficult for me to get working correctly.