Jan 7

—>. VIDEO LINK. <—

Below is a direct link to download if you have issues viewing on your browser

File size (218 mb) Rt click -> save as…


  • A 45 min comprehensive tutorial on how to setup an ik/fk arm
  • How to avoid some pit falls with building an ik fk setup
  • Building simple animation controls
  • Simple blending without constraints and using the power of utility nodes
  • How to build a seamless switching script that is BUILT IN THE RIG
  • Script will work with referencing and make it so the arm will NEVER pop or float between modes

Why did I do this? Well, I see questions regrading this type of setup all over forums and I wanted to pay back the community for all the help I received when I was starting out. I hope this helps some new comers to rigging or just interested people.


I am including the final file (Should work with Maya 7.0, let me know if it does not) and the code used for making the ik fk switch.

Maya File

Mel Code for Switch

Note: You must have zooToolBox installed and the scripts installed in the correct directory. This process is explained in the video.

64 Responses

  1. TJ Phan Says:

    Hi Sean,

    Thanks for the awesome tutorial! A mutual friend of ours, Jeff Cooperman, introduced me to your work a while back. I wanted to say thanks for sharing with everyone all of these. I’ve used ControlMaker.mel and snWorldSpace.mel extensively. Keep up the innovations!

  2. Sean Nolan Says:

    Thanks and glad you like =)!

  3. Ryan Hagen Says:

    Nice work Sean, thanks for the info. As always.

  4. Matt LeFevre Says:

    Hi Sean,

    I really appreciate you taking the time to produce this tutorial, but for some reason my PC runs out of memory before I can finish watching it, and I’m running on a pretty powerful machine.

    Tried so many things to fix, as I’m really hoping to watch the whole thing, but nothing seems to work.

    Is there any other way to view your tutorial?



    Managed to sort it, by downloading the tutorial directly.

    Once again, thanks for sharing.

  5. admin Says:

    Cool, glad you got.

  6. Justin Wong Says:

    Hi Sean,

    Your tutorial is really nice and complete. I have been trying out with your tutorial carefully, but I got stuck at the part where I need to type the MEL script to add the extra attributes. I receive ’syntax error’ whenever I try to execute the codes.

    These are the codes which you have provided in the tutorial:

    addAttr –ln armCON –at message LarmCON;
    addAttr –ln shoulderCON –at message LarmCON;
    addAttr –ln elbowCON –at message LarmCON;
    addAttr –ln wristCON –at message LarmCON;
    addAttr –ln poleCON –at message LarmCON;
    addAttr –ln PV_LOC –at message LarmCON;
    addAttr –ln shoulderJoint –at message LarmCON;
    addAttr –ln elbowJoint –at message LarmCON;
    addAttr –ln wristJoint –at message LarmCON;

    It will be great if you can help. By the way, I am using MAYA 7.0.

    Thanks in advance.

  7. admin Says:

    Hmm…works fine for me.
    You do have a control called “LarmCON”, correct?
    If not, it will complain since this is trying to add attributes to an object that does not exist.
    Make sure this is not the case. If you do have an object in the scene called “LarmCON” and stil getting the error can you post what the error is?

  8. Justin Wong Says:

    Hi Sean,

    Yeah, I have the LarmCON.
    It was the ‘Syntax Error’ message.
    By the way, I have found out what the problem is. It’s because I have pasted the code that I typed from Microsoft Word, where it has an automated function to replace all my normal dash (-) to some formatted dash which are slightly longer. Therefore Maya can’t read.

    Alright man, I’ll continue with the rigging. Thanks for the reply, Sean! :)


  9. admin Says:

    Well first, you shouldn’t be doing text editing in Micosoft Word. There are really good free text editors for using mel such as pspad or jedit.Word does some funky things to the text that Maya’s script editor complains about.

    I posted the final maya scene and the mel code used in the tutorial back on the main post.

    Hope that helps.

  10. Justin Wong Says:


    Thanks for your addition of the MEL scripts. I finally get it work! :)


  11. Sean Says:

    Hey Sean,
    Thanks for the video. I really like the utility-node based setup. I never thought about doing it that way. Constraints always seem…awkward to me, or unpredictable somehow. I feel like this setup gives me more control, and is less likely to break. Thanks again!

  12. Matt LeFevre Says:

    Hi Sean,

    You’re controlMaker script is great, I love it, but I’ve been trying to follow your tutorial without the need for controlMaker, so I can fully understand the process.
    But every time I do it, all’s good until I snap the IK to match the FK using your ik 2 fk script, and the IK arm control flips out and shoots off into space.

    I’ve repeated your steps several times, using different options to parent, group or constrain the FK and IK arm controls, but I can only get it to work if I use your controlMaker script to make the controls.

    Any help appreciated.



  13. admin Says:

    To see what the script is doing and for you do discover what is does is I would do is just create 3 joints.

    Select the middle joint and create a control with the orient constraint option.

    What you will find is 2 group nodes above the nurbs curve. The top one is point and orient constrainted to the the parent joint so when you rotate the joint the control will follow. The next group inherits the transforms from the joint so the control curve has zeroed out values.

    If you are still stuck I can try and walk through the process more for ya.

    Glad you like the tutorial and script.

  14. Matt LeFevre Says:

    Thanks for the reply Sean.

    Finally sorted it out with your help.



  15. Dusan Says:

    I have problem with adding atrribute’s to LarmCON, I have control with that name and did’t use word and I get this message :
    addAttr –ln wristJoint –at message LarmCON;
    // Error: addAttr –ln wristJoint –at message LarmCON; //
    // Error: Syntax error //

    I’m confuse :( can you help me???
    Tutorial is SUPER~!!!THANKS

  16. admin Says:

    Hi Dusan,
    Sorry for any confusion. Um, if you are simply copying and pasting then you may run into some ANSI/UNICODE issues. Try typing it in the script editor manually. I tried to copy and paste from here into Linux and it added characters that it shouldn’t have. Hope that helps!

    Glad you are finding the tutorial helpful.

  17. Sean Says:

    Hey Sean,
    A lot of your rigging solutions seem so simple, but powerful…this tut and the seanConstraint included. I was wondering if you’d be able to give some kind of a tutorial or description of your process for tackling rigging problems. Is there any particular method? Thanks for sharing all your insight and knowledge. Its really inspiring.

  18. admin Says:

    Thanks Sean!
    Hehe, I’ve always considered myself a “lazy” rigger in that I hate over complicating something just for the sack of making it look complicated. I guess I approach all my problems the same way. I sit down with pencil and paper and write out the problem first so I know what I’m up against. There I can flesh out ideas before every touching the computer. Then once I’ve come up with a good solution I’ll break it up into steps. I may try a few steps in Maya manually and if it’s a process that can be scripted I already have an outline of how to address the problem. Critical thinking is key to rigging since there are so many approaches to the same problem.

    Thanks for asking :)!

  19. Rupesh Says:

    Hi Sean, This tutorial is very very useful for me. Thanks a lot.

  20. admin Says:

    Great to hear and your welcome. =)

  21. zhuo Says:

    Hi Sean,
    Thanks for the comprehensive video tutorial on setting up seamless IkFk switch.
    Using the blendColor Utility node is much easier than using SDK!
    Keep up the good work!~


  22. Dusan Says:

    hello, I was wonder how with your setup to make stretch arm I need to make that, I had try everything I know. Can you help me?>

  23. admin Says:

    Sorry Dusan, I am unable to provide support for a stretchy setup with the one I have provided.

  24. Giap Vo Says:

    Hello Sean.

    Do you know how to set up a bending rig like this?


    that noodle-like rig is amazing and I wonder if we can rig something like that in Maya :(

  25. admin Says:

    I’ll have to look at the link later but XSI and Maya have very similiar tools for rigging so I don’t see why not. Give it a go and see if you can challenge yourself ;)

  26. Ryan Says:

    Hi, this site and what you learned and have done is really impressive!
    I had a problem after I went through this video,
    im fairly new to mel.
    how do i fix this error?

    // Error: No object matches name: LarmCON.ik

    what is LarmCON.ik?
    (LarmCON is the sphere CON, but why is .ik there?)
    (i get this error when i try to switch from fk2ik and ik2fk, at the very last step of the video.)

    thanks in advance, and good job!

  27. admin Says:

    LarmCON.ik is a control object in the scene called “LarmCON” with an attribute called “ik”. If you skipped parts of the video you will run into errors with the matching script.

  28. Marc Alis. Says:

    Hello Sean.

    every time I watch the video. It always crashes my web browsers after 10 or 15 minutes watching. Would you mind sending me the link where I can download directly your video and watch it offline? I cannot skip the video till the part that I left.

    Thank you.

  29. Adam Says:

    Thanks for the great Tutorial. I was walking through the steps and everything is working great for the left arm (the same one you did in your video), but when I go to do the right arm using the same method, the right arm does some weird rotation during the blending. I dont know what the issue is. I have recreated the joints and controls and still the same issue. The problem is only when the IK attribute is inbetween 0 and 1 (the transition). Once it is fully IK or fully FK, the joints are correct. Please let me know what I can do to fix this. Thanks a lot and keep up he great and helpful work.

  30. admin Says:

    Hi Adam,
    Well first off I should ask is how did you mirror your joints? Did you mirror joints using the orientation or behavior function? If you used orientation then this could be the problem.

    As far as the blending goes, it really doesn’t matter what the joints are doing during the transition. What really matters is that the two systems match up correctly when doing the matching between modes. I can’t see a reason why you would want to transition between the 2 modes over a range of frames. You would want to match on just one frame. Being in transition over multiple could look weird.

    Actually I don’t even think the ik attribute should be a float. If you were to change the IK attribute to an enum (on, off) you wouldn’t even see the transition. However you may have to reconnect the modified attribute to the blendColor nodes.

    Hope that makes sense.

  31. Adam Says:

    Thank you so much for your quick response. I have done as you said and changed the ik attribute from and floating attribute to an enum and the transition is now correct.

    Now I am having problems with setting up the mel command that matches the two rigs together. I am not very familiar with scripting but I was able to, to the best of my ability, to dissect the names of your joints and controllers within the script so I can match them to the names of the joints and controllers that are in my scene. I was wondering if you would be able to retype the script with labels on to where to place the names of my joints and controllers within your script?

    I have also created a controller that carries the IK “on off” switch attribute and the added attributes that you showed in your video. In other words, the attributes you added to LarmCON are instead on a control off the rig that looks like “ik/fk”. Would this mess things up. If you are confused would I be able to send you my rig so you could have a look at it? If not, just the script with the dumbed down fill in the blanks would be great. Sorry for all the questions but if you could please add in the script where I would put the information for the forearm joint, that would be great. Thank you so much for your time and hope to hear from you soon.

  32. Matt Says:

    Thanks a ton for the info Sean! It has helped out immensely since the Arron Holly DVD’s didn’t cover this quite like I hoped. Can’t wait for more cool stuff!

  33. Angie Says:

    Hi Sean,

    First of all thank you so much for this tutorial. It has been very helpful to actually see a video on this.
    I am actually trying to do it all with Mel scripting and without the use of any other scripts (controlMaker or zoo) so am changing the setup slightly.
    I want to use a button instead of the commands..so there is two buttons “IK to FK” and “FK to IK”…however i am now having problems when I want to switch back and forth more than once. I can switch from ik to fk and back to ik. However then after that it seems that the the fk arm always jums to the IK arm no matter which button i press. I am puzzled why this happens….does it have something to do with me using buttons rather than commands??Maybe somethign similar to using mel vs expressions? I would appreciate any help anyone could offer.

  34. admin Says:

    Hi Angie,
    Odd problem there. If you’re doing a slightly different setup than what I show it may be hard to tell right off the bat what is going on with either your scene or script. Are you using the script I provided or did you write your own? Plus, how are you setting up the arm? Controls? 3 arm setup?

  35. Angie Says:

    Thank you for the fast reply.Sorry that was a slight misunderstanding…I did follow your tutorial (3 arm setup, same controls (which are grouped with point Constraints etc) and I am also using a utility node and connecting them as you described. The only thing that is different is, that I am using 2 buttons rather than using the command option that the zoo script offers. I did not think that this would cause a problem as I am still using the same script that is used in the tutorial, just that I am using it in a procedure that is run when the button is pressed. It is a very odd problem indeed. I am a bit puzzled.
    I am hoping it does not have anything to do with the FK controls but it shouldn’t as it works fine for the first two times. Thank you for your help, I really appreciate it.

  36. Michael Tuttle Says:

    Hi Sean, thanks for the tutorial. So far everything was going great (in maya 2011)…The only changes I made to the process and the scripts were my naming conventions, and I put the switch and custom attributes and DAG menu items onto a extra hand controller instead of the IK controller. I got up to executing the script from the DAG menu and then it tells me that every string is an “undeclared variable.” Is it not understanding the names or the connections to the custom attributes, or does it not know where to find the attributes? If so, then what can I do to fix the problem with the setup I currently have?

  37. Michael Tuttle Says:

    Never mind; it was just a matter of adding the stings to the top of the script and making sure the names and nice names of the attributes matched…However I still can’t get the IK to match the FK perfectly, there’s some extreme elbow popping going on, what could be causing that?

  38. Michael Tuttle Says:

    Aha! It was that bothersome “Inherits Transform” option causing the problems! Does this setup need that on for anything, be it controls, joints, or other nodes?

  39. john chen Says:

    Sean, this is such a great tutorial. I’ve gone through gnomon’s and DT’s rigging DVDs and both did not offer such an elegant solution as this.

    So a big thank you, even tho this video is 2 years old now.

    Cheers! :)

  40. admin Says:

    Thanks John,
    I should at some point convert the video to a more accessible format for downloading. I think one of these days I should revamp this setup to include a bendy setup as well. Now I’ll have to remember how to rig in Maya again since I haven’t rigged in Maya for like 3 years now.

  41. john chen Says:

    What do you do now Sean?

  42. john chen Says:

    Hi Sean, sorry to bug you again but after following your instructions and re-watching the video at least 5 times, I still can’t get the IK 2 FK elbow / pole to line up…

    so I tested it with your scene file and it seems your rig also has problems switching seamlessly from FK to IK.

    for example using FK to animate arm scratching head, than switching to IK, the poles do not line up, causing elbow pop…

    Do you have any suggestions? I am looking at this FK/IK setup http://seithcg.com/wordpress/?page_id=30

    But would really like to nail down your rig, as I have spent like 6 hours trying to get it to work…

    Thank you for your assistance.

  43. admin Says:

    Hi John, I’ve tested my setup a few times with no problems. I’d check to make sure the dummy pole object is parented to the shoulder joint. Also check to make sure your joints are properly aligned.

    If you’re having issues with the sample scene then the zooTools hasn’t been setup properly.

    If you’re still having issues then send me a message through my contact page and I’ll have you send me your setup to see where the trouble is.

  44. David Says:

    Hi Sean,

    Love you video Tut. I’ve been having issue with the sample scene as well. I duplicated John’s head scratch with FK and tried to match ik 2 fk, and it wouldn’t line up. Leading to elbow pops when adjusting the ikfk attribute. I’m pretty sure my zooTools is setup properly. I can run zooToolBox, zooTriggered, and zooCST from the mel cmd line. Any help would be wonderful.

  45. admin Says:

    Hi David,
    I looked at the scene file from John and the problem was that the elbow control should only be rotated in the z axis. My fault for not locking x and y channels out. If you rotate those channels than it’s impossible for the IK arm to line up since it’s using the rotate planar solver. By rotating x or y you break this plane essentially breaking the line up of the IK arm. Hope that makes sense.

  46. David Says:

    Whew ok. I have a big question for you. Maybe you can just point me in the right direction at least. I’ve adapted your example to a more complex mechanical foot rig. Great so far.

    The trouble is that when i do an FK to IK match (haven’t built the IK to FK yet) the FK chain goes funky on its rotations.

    I know the issue lies with the fact that my FK controls are parented under each other. And when via the FK to IK script i have to take in account rotation offsets, and the rotation values of the parent FK control. I simply can’t enter the IK joints rotation value into the FK controls

    Basically I am struggling to find how maya calculates joint rotations so that i can change the values from the IK joints into values for the FK controls. So in the end the FK control values create the proper FK joint rotation values that will match the existing IK joint values.



  47. admin Says:

    Hi David,
    I’d try changing your setup to have FK controls that aren’t parented to each other. My controlMaker script is a good tool for creating these type of controls. I think you’d get better results if the FK controls were not parented to each other.

    Also, I’ve never really had to create a matching system for legs since it’s rarely used and can get tricky when it comes to foot rockers and toe pivots. Do-able but tricky.

  48. David Says:

    Thanks for the reply! It’s been tricky. I’ve gotten the FK to IK match to get very close, but still a few degrees of on each axis of rotation. I’m going to see if un-parenting the FK controls fix this. I’m thinking that this causes some extra rotation info to get passes down. Or maybe if that doesn’t work to sample the controls object space….

  49. David Says:

    Skimmed through your controlMaker Mel code, and dissected the setup in the hypershade. Very very sneaky and clever! I’m using it right now to try to get the FK to IK match to work…

  50. David Says:

    Not trying to spam this comments thread, but I got the FK to IK match to work. The trick really is using your controlMaker script. It strips out all the issues related to the orientation constraints offset values. Thanks sean!

  51. admin Says:

    Cool, glad you got it to work!

  52. David Says:

    Hey, just to share. This master class may be of interest to you.


    and discussed here


    I used a combination of your tut and the master class to get a really nice arm IKFK and FKIK working

  53. admin Says:

    Got a chance to watch it. Pretty cool stuff. Thanks David.

  54. IK/FK Arm Setup Tutorial Says:

    […] Go to the Tutorial>> Did you like this? Share it:Tweet […]

  55. Look it up Says:

    […] it was this tutorial by Sean Nolan using […]

  56. Dance my pretty! Dance! Says:

    […] a bit of figuring, but I finally got a skeleton rigged that I like.  I applied the workflow of Sean Nolan to the skeleton setup of Sylvain Côté, with additionally MEL scripting from […]

  57. David Says:

    Quick question about your CTRL Maker script. Is there a way of selecting custom curves and using them with your script. I.E. Select a custom made curve and using your script to attach it to a rig?

  58. admin Says:

    Sorry, that is not a feature of the script. Although, it’s something that seems like a no brainer to have built in.

  59. renatopolimeno Says:

    Hi Sean,
    really nice tutorial =)

    I´m currently moving from 3dsmax to Maya right now and I would like to ask you about some different IkFk match workflows.

    You describes three hierarchies (Fk, Ik, bind), some hacking into standard .mel commands and external scripts that needs to be attached..

    Jason Baskin´s free rig Blake describes the system through script job..

    Chad Morgan´s switchable IkFk is one chain with some MEL scripting.

    Right now I have my own simple MEL to do a IkFk switch match, but I´m trying to think in a way to avoid load/source/place external codes (shelf button, scriptjobs, .mel, so forth).. I wanna try to implement some sort of local scope system inside Maya but I have no idea how to start that (ie. maybe a foo expression in my character main ctrl ??)

    Any hints would be highly appreciated.

    Thanks very much and keep up the good work !!

  60. admin Says:

    Thanks for compliments. Much appreciated.

    I’ve been contemplating on redoing my tutorial for quite some time so it doesn’t rely on any external scripts and so forth. Sure, you can do an expression but that still falls under the scriptJob category. The expression would be evaluating every frame which isn’t terribly efficient.

    Just off the top of my head I’ve been thinking of going with a python plugin to handle ik/fk matching. My thought was that once the plugin is loaded you could create a ikfk node that you could connect a series of objects into and the plugin would handle all the logic for you. This would also take care of any namespace issues that come up when having to use an external script or even expressions/script jobs since you’re having to query objects in the scene.

    Until I can get off my butt and work out this idea I think your stuck with having to use all for-mentioned
    approaches when it comes to executing commands in a scene.

  61. renatopolimeno Says:

    hey Sean,
    nice to see your quick reply!
    Much appreciated your thoughts,
    I´ll definitely research about that python node-based idea (maybe a messageattr + transform holders) to try something.

    Thanks very much !

  62. Guido Says:

    Hi, thankyou for the great tutorial, great job and very well explained. I wanted to tried it and idownloaded the zootool. Which it has been upgraded by Macaronikazo. So I got lost.. It seems I don’t have to change the dagmenuscript anymore.. but if I clic with my rmb it doesn’t appear the add comand that does appear in your video.. Am i missing something? thanks Guido .. also I think the ability to use a rmb clic is great, but let say that the animator prefer to have a button on the shelf instead ..would you like to consider a tutorial for that as well?.. that will be fantastic.. thanks again

  63. admin Says:

    Hey Guido,
    Sorry you’re having issues. Yea, the whole rmb thing is fubar now so at this point I’d just put the commands up in the self.(the colde is below the video link above). I have no plans on redoing this tutorial in the near futore.

  64. asif raza Says:

    hi bro thanks for the tutorials..actually i was searching for kind of tutorials and you did.. im very very excited and thankful to you .. love you brother..

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.