{"id":398,"date":"2017-10-15T18:48:45","date_gmt":"2017-10-15T22:48:45","guid":{"rendered":"http:\/\/www.vicdebaie.com\/blog\/?p=398"},"modified":"2018-03-14T21:15:58","modified_gmt":"2018-03-15T01:15:58","slug":"using-motionbulider-and-python-to-create-a-take-renaming-tool","status":"publish","type":"post","link":"http:\/\/www.vicdebaie.com\/blog\/using-motionbulider-and-python-to-create-a-take-renaming-tool\/","title":{"rendered":"Using MotionBulider and Python to create a Take Renaming Tool"},"content":{"rendered":"<p><img data-attachment-id=\"403\" data-permalink=\"http:\/\/www.vicdebaie.com\/blog\/using-motionbulider-and-python-to-create-a-take-renaming-tool\/takerenamerv1\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?fit=594%2C212\" data-orig-size=\"594,212\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"TakeRenamerV1\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?fit=300%2C107\" data-large-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?fit=594%2C212\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-403 size-full\" src=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?resize=594%2C212\" alt=\"\" width=\"594\" height=\"212\" srcset=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?w=594 594w, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?resize=300%2C107 300w\" sizes=\"(max-width: 594px) 100vw, 594px\" data-recalc-dims=\"1\" \/><\/p>\n<p>I&#8217;ve used Take Renaming tools in the past and I&#8217;ve always found them to be an amazing time saver, so when I sat down to think about what I would like to learn next in my Motionbuilder Python Scripting adventure I knew that writing my own Take Naming Tool would be a lot of fun.<\/p>\n<p>This experiment lead me to do a lot of google searching, thankfully I was able to sift through a ton of links and forums to find what I needed and along the way learned a lot through trial and error.<\/p>\n<p style=\"text-align: center;\">Here is a quick demo of the TakeReName_v1.0 tool.<\/p>\n<div class=\"jetpack-video-wrapper\"><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"678\" height=\"382\" src=\"https:\/\/www.youtube.com\/embed\/2V-R4fi6x3A?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation\"><\/iframe><\/span><\/div>\n<p>Below I will spot light what was new to me, going quickly over searching for a string and dealing with letter case as well as replacing strings.<\/p>\n<p>The entire Take Renaming (TakeReName_v1.0) script will be posted at the very end, or if you would just like to skip all that and down load the script than you can find it <a href=\"https:\/\/drive.google.com\/open?id=1YcMNHQnWciJvINR_UeyCwnH4ugAsi1vt\">here.<\/a> \ud83d\ude42<\/p>\n<p>I used the Regular expression operations to do the brunt of the work and you can read more about the re module <a href=\"https:\/\/docs.python.org\/2\/howto\/regex.html\" target=\"_blank\" rel=\"noopener\">here.<\/a>\u00a0For this post we will simply import the re module and move onto the functions &#8220;findall&#8221;, &#8220;IGNORECASE&#8221; and how we will swap words\/characters within strings.<\/p>\n<p>Importing the re module is easy enough:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nfrom re import *\r\n<\/pre>\n<p>Below we have two example of\u00a0 the &#8220;findall&#8221; function that only have 1 small difference &#8211; &#8220;IGNORECASE&#8221;. You can find more information on &#8220;findall&#8221; <a href=\"https:\/\/docs.python.org\/2\/library\/re.html#finding-all-adverbs\">here<\/a>.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n##this line is used only for this example\r\neFind.Text = &quot;Take 001&quot;\r\n\r\n## Findall Example that is case sensitive\r\n## On every Take in our scene\r\nfor take in FBSystem().Scene.Takes:\r\n    ## search the take name for our desired string and if found make have that take become selected\r\n    if findall(eFind.Text,take.Name):\r\n        ## Select the take\r\n        take.Selected=True \r\n    else:\r\n        ## have the take become deselected if the desired string is not found make within the take's name \r\n        take.Selected=False\r\n\r\n## Findall regardless of letter case using IGNORECASE\r\n## On every Take in our scene\r\nfor take in FBSystem().Scene.Takes:\r\n    ## search the take name for our desired string and if found make have that take become selected\r\n    if findall(eFind.Text,take.Name, IGNORECASE): ##IGNORECASE \r\n        ## Select the take\r\n        take.Selected=True\r\n    else:\r\n        ## have the take become deselected if the desired string is not found make within the take's name  \r\n        take.Selected=False\r\n<\/pre>\n<p>Below here is an example of replacing the original text with our newly desired text. I tried a number of methods (<a href=\"http:\/\/pythoncentral.io\/pythons-string-replace-method-replacing-python-strings\/\" target=\"_blank\" rel=\"noopener\">starting with this one<\/a>), but they would fall short when it came time to test with using my TakeReNamer tool&#8217;s &#8220;Ignore Case&#8221; option. After many searches and reading many forums I stumbled upon this <a href=\"https:\/\/stackoverflow.com\/questions\/919056\/case-insensitive-replace\">link<\/a>.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\n## If selected rename that takes to the desired string within the &quot;Replace&quot; field\r\nfor take in FBSystem().Scene.Takes:\r\n    if take.Selected == True:\r\n        ## Deal with the &quot;Find&quot; field so that the string is not case sensitive\r\n        lProcessFields = compile(escape(eFind.Text), IGNORECASE)\r\n        ## Witihin our Current Takes Name - Substitute our &quot;Find&quot; field string with our &quot;Replace&quot; Field string\r\n        lReName = lProcessFields.sub(eReplace.Text, take.Name)\r\n        ## Rename the take to the new Take name\r\n        take.Name = lReName\r\n        del lReName\r\n<\/pre>\n<p>Here is the full script:<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nfrom pyfbsdk import *\r\nfrom pyfbsdk_additions import *\r\nfrom re import *\r\n\r\n\r\n##labels\r\nlFind = FBLabel()\r\nlReplace = FBLabel()\r\n\r\n##editable fields\r\neFind = FBEdit()\r\neReplace = FBEdit()\r\n\r\n##buttons\r\nbKeepOrg = FBButton()\r\nbAsPrefix = FBButton()\r\nbAsSuffix = FBButton()\r\nbIgnoreCase = FBButton()\r\nbAffectSelTakesOnly = FBButton()\r\nbSelTakes = FBButton()\r\nbRename = FBButton()\r\n\r\n##Determine if &quot;Ignore Case&quot; is selected and then search all takes for the desired input string\r\ndef SearchAndSelctTakes():\r\n    ##Make Sure no takes are already selected\r\n    for take in FBSystem().Scene.Takes:\r\n        if take.Selected == True:\r\n            take.Selected=False\r\n        else:\r\n            pass\r\n    ##Ignore Case        \r\n    if bIgnoreCase.State == 1:\r\n    ##Find all takes that match the text inputed in to the &quot;Find&quot; field of our tool window        \r\n        for take in FBSystem().Scene.Takes:\r\n            if findall(eFind.Text,take.Name, IGNORECASE):\r\n                take.Selected=True\r\n            else: \r\n                False\r\n    ##Case Sensitive\r\n    else:\r\n    ##Find all takes that match the text inputed in to the &quot;Find&quot; field of our tool window        \r\n        for take in FBSystem().Scene.Takes:\r\n            if findall(eFind.Text,take.Name):\r\n                take.Selected=True\r\n            else: \r\n                False\r\n\r\n## Select Takes Button - Search All Takes for the desired string and if found select those takes\r\ndef BtnCallbSelTakes(control, event):\r\n    ## fail safe if the &quot;FIND:&quot; field is left blank - without this you run the risk of causing every character within the takes name to be replaced by the word\/phrase that is in the &quot;Replace:&quot; field\r\n    if eFind.Text == &quot;&quot;:\r\n        pass\r\n    else:\r\n        SearchAndSelctTakes()\r\n            \r\ndef BtnCallbRename(control, event):\r\n    ## Perform the Rename on only the Take the User has selected\r\n    if bAffectSelTakesOnly.State == 1:\r\n        pass\r\n    ## Perform ReName on all Valid Takes\r\n    else:\r\n        ## Perform the search on our takes and select the correct ones\r\n        SearchAndSelctTakes()\r\n    ## fail safe if the &quot;FIND:&quot; field is left blank - without this you run the risk of causing every character within the takes name to be replaced by the word\/phrase that is in the &quot;Replace:&quot; field\r\n    if eFind.Text == &quot;&quot;:\r\n        pass\r\n    ## If selected rename that takes to the desired string within the &quot;Replace&quot; field\r\n    else:\r\n        for take in FBSystem().Scene.Takes:\r\n            if take.Selected == True:\r\n                ## Deal with the &quot;Find&quot; field so that its desired string is not case sensitive\r\n                lProcessFields = compile(escape(eFind.Text), IGNORECASE)\r\n                ## Witihin our Current Takes Name - Substitute our &quot;Find&quot; field string with our &quot;Replace&quot; Field string\r\n                lReName = lProcessFields.sub(eReplace.Text, take.Name)\r\n                if bKeepOrg.State == 0:\r\n                    ## Rename our Current Take to Match our New Name\r\n                    take.Name = lReName\r\n                    del lReName\r\n                ## Deal with the Options of maintaining the Original Takes name as a Prefix or a Suffix\r\n                if bKeepOrg.State == 1:\r\n                    ## Keep Original Takes name as a Prefix (ie. &quot;Original Take Name_What Is Typed In The Replaced Field&quot;)\r\n                    if bAsPrefix.State == 1:\r\n                        lNewName = take.Name + &quot;_&quot; + eReplace.Text\r\n                        take.Name = lNewName\r\n                        del lNewName\r\n                    ## Keep Original Takes name as a Suffix (ie. &quot;What Is Typed In The Replaced Field_Original Take Name&quot;)\r\n                    if bAsSuffix.State == 1:\r\n                        lNewName = eReplace.Text + &quot;_&quot; + take.Name\r\n                        take.Name = lNewName\r\n                        del lNewName\r\n                    ##If neither the &quot;As Prefix&quot; or &quot;As Suffix&quot; option is sleected\r\n                    else:\r\n                        pass \r\n            ## If no Takes are selected                 \r\n            else:\r\n                pass\r\n        \r\n##Fail safe for the check box &quot;Keep Origianl Take Name&quot;\r\ndef BtnCallbKeepOrg(control, event):\r\n    if bKeepOrg.State == 1:\r\n        bAsPrefix.Enabled = bAsSuffix.Enabled = True\r\n    else:\r\n        bAsPrefix.Enabled = bAsSuffix.Enabled = False\r\n        bAsPrefix.State = bAsSuffix.State = 0\r\n##Fail safe for &quot;As Prefix&quot; Check Box\r\ndef BtnCallbAsPrefix(control, event):\r\n    if bAsPrefix.State == 1:\r\n        bAsSuffix.State = 0\r\n    else:\r\n        bAsPrefix.State = bAsSuffix.State = 0\r\n##Fail safe for &quot;As Suffix&quot; Check box\r\ndef BtnCallbAsSuffix(control, event):\r\n    if bAsSuffix.State == 1:\r\n        bAsPrefix.State = 0\r\n    else:\r\n        bAsPrefix.State = bAsSuffix.State = 0  \r\n\r\n## UI Layout\r\ndef PopulateTool(t):\r\n    #populate regions here\r\n    x = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(35,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(50,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;lFind&quot;,&quot;lFind&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;lFind&quot;, lFind)\r\n    lFind.Visible = True\r\n    lFind.ReadOnly = False\r\n    lFind.Enabled = True\r\n    lFind.Hint = &quot;&quot;\r\n    lFind.Caption = &quot;Find:&quot;\r\n    lFind.Style = FBTextStyle.kFBTextStyleNone\r\n    lFind.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    lFind.WordWrap = True\r\n    \r\n    x = FBAddRegionParam(80,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(30,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(500,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;eFind&quot;,&quot;eFind&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;eFind&quot;, eFind)\r\n    eFind.Visible = True\r\n    eFind.ReadOnly = False\r\n    eFind.Enabled = True\r\n    eFind.Hint = &quot;&quot;\r\n    eFind.Text = &quot;&quot;\r\n    eFind.PasswordMode = False\r\n    \r\n    x = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(75,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(50,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;lReplace&quot;,&quot;lReplace&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;lReplace&quot;, lReplace)\r\n    lReplace.Visible = True\r\n    lReplace.ReadOnly = False\r\n    lReplace.Enabled = True\r\n    lReplace.Hint = &quot;&quot;\r\n    lReplace.Caption = &quot;Replace:&quot;\r\n    lReplace.Style = FBTextStyle.kFBTextStyleNone\r\n    lReplace.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    lReplace.WordWrap = True\r\n    \r\n    x = FBAddRegionParam(80,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(70,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(500,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;eReplace&quot;,&quot;eReplace&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;eReplace&quot;, eReplace)\r\n    eReplace.Visible = True\r\n    eReplace.ReadOnly = False\r\n    eReplace.Enabled = True\r\n    eReplace.Hint = &quot;&quot;\r\n    eReplace.Text = &quot;&quot;\r\n    eReplace.PasswordMode = False\r\n    \r\n    x = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(110,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(150,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bKeepOrg&quot;,&quot;bKeepOrg&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bKeepOrg&quot;, bKeepOrg)\r\n    bKeepOrg.Visible = True\r\n    bKeepOrg.ReadOnly = False\r\n    bKeepOrg.Enabled = True\r\n    bKeepOrg.Hint = &quot;&quot;\r\n    bKeepOrg.Caption = &quot;Keep Original Take Name&quot;\r\n    bKeepOrg.State = 0\r\n    bKeepOrg.Style = FBButtonStyle.kFBCheckbox\r\n    bKeepOrg.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    bKeepOrg.Look = FBButtonLook.kFBLookNormal\r\n    bKeepOrg.OnClick.Add(BtnCallbKeepOrg)\r\n    \r\n    x = FBAddRegionParam(175,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(110,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(75,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bAsPrefix&quot;,&quot;bAsPrefix&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bAsPrefix&quot;, bAsPrefix)\r\n    bAsPrefix.Visible = True\r\n    bAsPrefix.ReadOnly = False\r\n    bAsPrefix.Enabled = False\r\n    bAsPrefix.Hint = &quot;&quot;\r\n    bAsPrefix.Caption = &quot;As Prefix&quot;\r\n    bAsPrefix.State = 0\r\n    bAsPrefix.Style = FBButtonStyle.kFBCheckbox\r\n    bAsPrefix.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    bAsPrefix.Look = FBButtonLook.kFBLookNormal\r\n    bAsPrefix.OnClick.Add(BtnCallbAsPrefix)\r\n    \r\n    x = FBAddRegionParam(255,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(110,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(90,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bAsSuffix&quot;,&quot;bAsSuffix&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bAsSuffix&quot;, bAsSuffix)\r\n    bAsSuffix.Visible = True\r\n    bAsSuffix.ReadOnly = False\r\n    bAsSuffix.Enabled = False\r\n    bAsSuffix.Hint = &quot;&quot;\r\n    bAsSuffix.Caption = &quot;As Suffix&quot;\r\n    bAsSuffix.State = 0\r\n    bAsSuffix.Style = FBButtonStyle.kFBCheckbox\r\n    bAsSuffix.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    bAsSuffix.Look = FBButtonLook.kFBLookNormal\r\n    bAsSuffix.OnClick.Add(BtnCallbAsSuffix)\r\n    \r\n    x = FBAddRegionParam(20,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(130,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(100,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(30,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bIgnoreCase&quot;,&quot;bIgnoreCase&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bIgnoreCase&quot;, bIgnoreCase)\r\n    bIgnoreCase.Visible = True\r\n    bIgnoreCase.ReadOnly = False\r\n    bIgnoreCase.Enabled = True\r\n    bIgnoreCase.Hint = &quot;&quot;\r\n    bIgnoreCase.Caption = &quot;Ignore Case&quot;\r\n    bIgnoreCase.State = 0\r\n    bIgnoreCase.Style = FBButtonStyle.kFBCheckbox\r\n    bIgnoreCase.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    bIgnoreCase.Look = FBButtonLook.kFBLookNormal\r\n    \r\n    x = FBAddRegionParam(160,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(130,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(170,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(30,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bAffectSelTakesOnly&quot;,&quot;bAffectSelTakesOnly&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bAffectSelTakesOnly&quot;, bAffectSelTakesOnly)\r\n    bAffectSelTakesOnly.Visible = True\r\n    bAffectSelTakesOnly.ReadOnly = False\r\n    bAffectSelTakesOnly.Enabled = True\r\n    bAffectSelTakesOnly.Hint = &quot;&quot;\r\n    bAffectSelTakesOnly.Caption = &quot;Rename Only Selected Takes&quot;\r\n    bAffectSelTakesOnly.State = 0\r\n    bAffectSelTakesOnly.Style = FBButtonStyle.kFBCheckbox\r\n    bAffectSelTakesOnly.Justify = FBTextJustify.kFBTextJustifyLeft\r\n    bAffectSelTakesOnly.Look = FBButtonLook.kFBLookNormal\r\n    \r\n    x = FBAddRegionParam(355,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(110,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(100,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(50,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bSelTakes&quot;,&quot;bSelTakes&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bSelTakes&quot;, bSelTakes)\r\n    bSelTakes.Visible = True\r\n    bSelTakes.ReadOnly = False\r\n    bSelTakes.Enabled = True\r\n    bSelTakes.Hint = &quot;&quot;\r\n    bSelTakes.Caption = &quot;Select Takes&quot;\r\n    bSelTakes.State = 0\r\n    bSelTakes.Style = FBButtonStyle.kFBPushButton\r\n    bSelTakes.Justify = FBTextJustify.kFBTextJustifyCenter\r\n    bSelTakes.Look = FBButtonLook.kFBLookNormal\r\n    bSelTakes.OnClick.Add(BtnCallbSelTakes)\r\n    \r\n    x = FBAddRegionParam(470,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    y = FBAddRegionParam(110,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    w = FBAddRegionParam(100,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    h = FBAddRegionParam(50,FBAttachType.kFBAttachNone,&quot;&quot;)\r\n    t.AddRegion(&quot;bRename&quot;,&quot;bRename&quot;, x, y, w, h)\r\n\r\n    t.SetControl(&quot;bRename&quot;, bRename)\r\n    bRename.Visible = True\r\n    bRename.ReadOnly = False\r\n    bRename.Enabled = True\r\n    bRename.Hint = &quot;&quot;\r\n    bRename.Caption = &quot;Rename&quot;\r\n    bRename.State = 0\r\n    bRename.Style = FBButtonStyle.kFBPushButton\r\n    bRename.Justify = FBTextJustify.kFBTextJustifyCenter\r\n    bRename.Look = FBButtonLook.kFBLookNormal\r\n    bRename.OnClick.Add(BtnCallbRename)\r\n\r\n## Tool Window    \r\ndef CreateTool():\r\n    t = FBCreateUniqueTool(&quot;TakeReNamer_v1.0&quot;)\r\n    t.StartSizeX = 610\r\n    t.StartSizeY = 220\r\n    PopulateTool(t)\r\n    ShowTool(t)\r\nCreateTool()\r\n\r\n\r\n<\/pre>\n<p>Overall the tool was a lot of fun to write. I wish the input fields were a little more forgiving to use, sometimes I would have to hit the ReName button twice &#8211; first time deselected the field I was last typing in and the second click would actually run the renaming script it self. this is more of a MotionBuilder python UI thing.<\/p>\n<p><\/p><noscript class=\"ninja-forms-noscript-message\">\n\tNotice: JavaScript is required for this content.<\/noscript>\n<div id=\"nf-form-1-cont\" class=\"nf-form-cont\" aria-live=\"polite\" aria-labelledby=\"nf-form-title-1\" aria-describedby=\"nf-form-errors-1\" role=\"form\">\n\n    <div class=\"nf-loading-spinner\"><\/div>\n\n<\/div>\n        <!-- That data is being printed as a workaround to page builders reordering the order of the scripts loaded-->\n        <script>var formDisplay=1;var nfForms=nfForms||[];var form=[];form.id='1';form.settings={\"objectType\":\"Form Setting\",\"editActive\":\"\",\"title\":\"Contact Me\",\"key\":\"\",\"created_at\":\"2016-08-24 16:39:20\",\"default_label_pos\":\"above\",\"conditions\":[],\"show_title\":\"1\",\"clear_complete\":\"1\",\"hide_complete\":\"1\",\"wrapper_class\":\"\",\"element_class\":\"\",\"add_submit\":\"1\",\"logged_in\":\"\",\"not_logged_in_msg\":\"\",\"sub_limit_number\":\"\",\"sub_limit_msg\":\"\",\"calculations\":[],\"formContentData\":[\"name\",\"message\",\"submit\"],\"container_styles_background-color\":\"\",\"container_styles_border\":\"\",\"container_styles_border-style\":\"\",\"container_styles_border-color\":\"\",\"container_styles_color\":\"\",\"container_styles_height\":\"\",\"container_styles_width\":\"\",\"container_styles_font-size\":\"\",\"container_styles_margin\":\"\",\"container_styles_padding\":\"\",\"container_styles_display\":\"\",\"container_styles_float\":\"\",\"container_styles_show_advanced_css\":\"0\",\"container_styles_advanced\":\"\",\"title_styles_background-color\":\"\",\"title_styles_border\":\"\",\"title_styles_border-style\":\"\",\"title_styles_border-color\":\"\",\"title_styles_color\":\"\",\"title_styles_height\":\"\",\"title_styles_width\":\"\",\"title_styles_font-size\":\"\",\"title_styles_margin\":\"\",\"title_styles_padding\":\"\",\"title_styles_display\":\"\",\"title_styles_float\":\"\",\"title_styles_show_advanced_css\":\"0\",\"title_styles_advanced\":\"\",\"row_styles_background-color\":\"\",\"row_styles_border\":\"\",\"row_styles_border-style\":\"\",\"row_styles_border-color\":\"\",\"row_styles_color\":\"\",\"row_styles_height\":\"\",\"row_styles_width\":\"\",\"row_styles_font-size\":\"\",\"row_styles_margin\":\"\",\"row_styles_padding\":\"\",\"row_styles_display\":\"\",\"row_styles_show_advanced_css\":\"0\",\"row_styles_advanced\":\"\",\"row-odd_styles_background-color\":\"\",\"row-odd_styles_border\":\"\",\"row-odd_styles_border-style\":\"\",\"row-odd_styles_border-color\":\"\",\"row-odd_styles_color\":\"\",\"row-odd_styles_height\":\"\",\"row-odd_styles_width\":\"\",\"row-odd_styles_font-size\":\"\",\"row-odd_styles_margin\":\"\",\"row-odd_styles_padding\":\"\",\"row-odd_styles_display\":\"\",\"row-odd_styles_show_advanced_css\":\"0\",\"row-odd_styles_advanced\":\"\",\"success-msg_styles_background-color\":\"\",\"success-msg_styles_border\":\"\",\"success-msg_styles_border-style\":\"\",\"success-msg_styles_border-color\":\"\",\"success-msg_styles_color\":\"\",\"success-msg_styles_height\":\"\",\"success-msg_styles_width\":\"\",\"success-msg_styles_font-size\":\"\",\"success-msg_styles_margin\":\"\",\"success-msg_styles_padding\":\"\",\"success-msg_styles_display\":\"\",\"success-msg_styles_show_advanced_css\":\"0\",\"success-msg_styles_advanced\":\"\",\"error_msg_styles_background-color\":\"\",\"error_msg_styles_border\":\"\",\"error_msg_styles_border-style\":\"\",\"error_msg_styles_border-color\":\"\",\"error_msg_styles_color\":\"\",\"error_msg_styles_height\":\"\",\"error_msg_styles_width\":\"\",\"error_msg_styles_font-size\":\"\",\"error_msg_styles_margin\":\"\",\"error_msg_styles_padding\":\"\",\"error_msg_styles_display\":\"\",\"error_msg_styles_show_advanced_css\":\"0\",\"error_msg_styles_advanced\":\"\",\"currency\":\"\",\"unique_field_error\":\"A form with this value has already been submitted.\",\"ninjaForms\":\"Ninja Forms\",\"changeEmailErrorMsg\":\"Please enter a valid email address!\",\"changeDateErrorMsg\":\"Please enter a valid date!\",\"confirmFieldErrorMsg\":\"These fields must match!\",\"fieldNumberNumMinError\":\"Number Min Error\",\"fieldNumberNumMaxError\":\"Number Max Error\",\"fieldNumberIncrementBy\":\"Please increment by \",\"fieldTextareaRTEInsertLink\":\"Insert Link\",\"fieldTextareaRTEInsertMedia\":\"Insert Media\",\"fieldTextareaRTESelectAFile\":\"Select a file\",\"formErrorsCorrectErrors\":\"Please correct errors before submitting this form.\",\"formHoneypot\":\"If you are a human seeing this field, please leave it empty.\",\"validateRequiredField\":\"This is a required field.\",\"honeypotHoneypotError\":\"Honeypot Error\",\"fileUploadOldCodeFileUploadInProgress\":\"File Upload in Progress.\",\"fileUploadOldCodeFileUpload\":\"FILE UPLOAD\",\"currencySymbol\":\"$\",\"fieldsMarkedRequired\":\"Fields marked with an <span class=\\\"ninja-forms-req-symbol\\\">*<\\\/span> are required\",\"thousands_sep\":\",\",\"decimal_point\":\".\",\"siteLocale\":\"en\",\"dateFormat\":\"d\\\/m\\\/Y\",\"startOfWeek\":\"0\",\"of\":\"of\",\"previousMonth\":\"Previous Month\",\"nextMonth\":\"Next Month\",\"months\":[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"monthsShort\":[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"weekdays\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"weekdaysShort\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"weekdaysMin\":[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],\"recaptchaConsentMissing\":\"reCaptcha validation couldn&#039;t load.\",\"recaptchaMissingCookie\":\"reCaptcha v3 validation couldn&#039;t load the cookie needed to submit the form.\",\"recaptchaConsentEvent\":\"Accept reCaptcha cookies before sending the form.\",\"embed_form\":\"\",\"currency_symbol\":\"\",\"beforeForm\":\"\",\"beforeFields\":\"\",\"afterFields\":\"\",\"afterForm\":\"\"};form.fields=[{\"objectType\":\"Field\",\"objectDomain\":\"fields\",\"editActive\":\"\",\"order\":1,\"label\":\"Name\",\"key\":\"name\",\"type\":\"textbox\",\"created_at\":\"2016-08-24 16:39:20\",\"label_pos\":\"above\",\"required\":1,\"placeholder\":\"\",\"default\":\"\",\"wrapper_class\":\"\",\"element_class\":\"\",\"container_class\":\"\",\"input_limit\":\"\",\"input_limit_type\":\"characters\",\"input_limit_msg\":\"Character(s) left\",\"manual_key\":\"\",\"disable_input\":\"\",\"admin_label\":\"\",\"help_text\":\"\",\"desc_text\":\"\",\"disable_browser_autocomplete\":\"\",\"mask\":\"\",\"custom_mask\":\"\",\"wrap_styles_background-color\":\"\",\"wrap_styles_border\":\"\",\"wrap_styles_border-style\":\"\",\"wrap_styles_border-color\":\"\",\"wrap_styles_color\":\"\",\"wrap_styles_height\":\"\",\"wrap_styles_width\":\"\",\"wrap_styles_font-size\":\"\",\"wrap_styles_margin\":\"\",\"wrap_styles_padding\":\"\",\"wrap_styles_display\":\"\",\"wrap_styles_float\":\"\",\"wrap_styles_show_advanced_css\":0,\"wrap_styles_advanced\":\"\",\"label_styles_background-color\":\"\",\"label_styles_border\":\"\",\"label_styles_border-style\":\"\",\"label_styles_border-color\":\"\",\"label_styles_color\":\"\",\"label_styles_height\":\"\",\"label_styles_width\":\"\",\"label_styles_font-size\":\"\",\"label_styles_margin\":\"\",\"label_styles_padding\":\"\",\"label_styles_display\":\"\",\"label_styles_float\":\"\",\"label_styles_show_advanced_css\":0,\"label_styles_advanced\":\"\",\"element_styles_background-color\":\"\",\"element_styles_border\":\"\",\"element_styles_border-style\":\"\",\"element_styles_border-color\":\"\",\"element_styles_color\":\"\",\"element_styles_height\":\"\",\"element_styles_width\":\"\",\"element_styles_font-size\":\"\",\"element_styles_margin\":\"\",\"element_styles_padding\":\"\",\"element_styles_display\":\"\",\"element_styles_float\":\"\",\"element_styles_show_advanced_css\":0,\"element_styles_advanced\":\"\",\"cellcid\":\"c3277\",\"id\":1,\"beforeField\":\"\",\"afterField\":\"\",\"value\":\"\",\"parentType\":\"textbox\",\"element_templates\":[\"textbox\",\"input\"],\"old_classname\":\"\",\"wrap_template\":\"wrap\"},{\"objectType\":\"Field\",\"objectDomain\":\"fields\",\"editActive\":\"\",\"order\":3,\"label\":\"Message\",\"key\":\"message\",\"type\":\"textarea\",\"created_at\":\"2016-08-24 16:39:20\",\"label_pos\":\"above\",\"required\":1,\"placeholder\":\"\",\"default\":\"\",\"wrapper_class\":\"\",\"element_class\":\"\",\"container_class\":\"\",\"input_limit\":\"\",\"input_limit_type\":\"characters\",\"input_limit_msg\":\"Character(s) left\",\"manual_key\":\"\",\"disable_input\":\"\",\"admin_label\":\"\",\"help_text\":\"\",\"desc_text\":\"\",\"disable_browser_autocomplete\":\"\",\"textarea_rte\":\"\",\"disable_rte_mobile\":\"\",\"textarea_media\":\"\",\"wrap_styles_background-color\":\"\",\"wrap_styles_border\":\"\",\"wrap_styles_border-style\":\"\",\"wrap_styles_border-color\":\"\",\"wrap_styles_color\":\"\",\"wrap_styles_height\":\"\",\"wrap_styles_width\":\"\",\"wrap_styles_font-size\":\"\",\"wrap_styles_margin\":\"\",\"wrap_styles_padding\":\"\",\"wrap_styles_display\":\"\",\"wrap_styles_float\":\"\",\"wrap_styles_show_advanced_css\":0,\"wrap_styles_advanced\":\"\",\"label_styles_background-color\":\"\",\"label_styles_border\":\"\",\"label_styles_border-style\":\"\",\"label_styles_border-color\":\"\",\"label_styles_color\":\"\",\"label_styles_height\":\"\",\"label_styles_width\":\"\",\"label_styles_font-size\":\"\",\"label_styles_margin\":\"\",\"label_styles_padding\":\"\",\"label_styles_display\":\"\",\"label_styles_float\":\"\",\"label_styles_show_advanced_css\":0,\"label_styles_advanced\":\"\",\"element_styles_background-color\":\"\",\"element_styles_border\":\"\",\"element_styles_border-style\":\"\",\"element_styles_border-color\":\"\",\"element_styles_color\":\"\",\"element_styles_height\":\"\",\"element_styles_width\":\"\",\"element_styles_font-size\":\"\",\"element_styles_margin\":\"\",\"element_styles_padding\":\"\",\"element_styles_display\":\"\",\"element_styles_float\":\"\",\"element_styles_show_advanced_css\":0,\"element_styles_advanced\":\"\",\"cellcid\":\"c3284\",\"id\":3,\"beforeField\":\"\",\"afterField\":\"\",\"value\":\"\",\"parentType\":\"textarea\",\"element_templates\":[\"textarea\",\"input\"],\"old_classname\":\"\",\"wrap_template\":\"wrap\"},{\"objectType\":\"Field\",\"objectDomain\":\"fields\",\"editActive\":\"\",\"order\":5,\"label\":\"Submit\",\"key\":\"submit\",\"type\":\"submit\",\"created_at\":\"2016-08-24 16:39:20\",\"processing_label\":\"Processing\",\"container_class\":\"\",\"element_class\":\"\",\"wrap_styles_background-color\":\"\",\"wrap_styles_border\":\"\",\"wrap_styles_border-style\":\"\",\"wrap_styles_border-color\":\"\",\"wrap_styles_color\":\"\",\"wrap_styles_height\":\"\",\"wrap_styles_width\":\"\",\"wrap_styles_font-size\":\"\",\"wrap_styles_margin\":\"\",\"wrap_styles_padding\":\"\",\"wrap_styles_display\":\"\",\"wrap_styles_float\":\"\",\"wrap_styles_show_advanced_css\":0,\"wrap_styles_advanced\":\"\",\"label_styles_background-color\":\"\",\"label_styles_border\":\"\",\"label_styles_border-style\":\"\",\"label_styles_border-color\":\"\",\"label_styles_color\":\"\",\"label_styles_height\":\"\",\"label_styles_width\":\"\",\"label_styles_font-size\":\"\",\"label_styles_margin\":\"\",\"label_styles_padding\":\"\",\"label_styles_display\":\"\",\"label_styles_float\":\"\",\"label_styles_show_advanced_css\":0,\"label_styles_advanced\":\"\",\"element_styles_background-color\":\"\",\"element_styles_border\":\"\",\"element_styles_border-style\":\"\",\"element_styles_border-color\":\"\",\"element_styles_color\":\"\",\"element_styles_height\":\"\",\"element_styles_width\":\"\",\"element_styles_font-size\":\"\",\"element_styles_margin\":\"\",\"element_styles_padding\":\"\",\"element_styles_display\":\"\",\"element_styles_float\":\"\",\"element_styles_show_advanced_css\":0,\"element_styles_advanced\":\"\",\"submit_element_hover_styles_background-color\":\"\",\"submit_element_hover_styles_border\":\"\",\"submit_element_hover_styles_border-style\":\"\",\"submit_element_hover_styles_border-color\":\"\",\"submit_element_hover_styles_color\":\"\",\"submit_element_hover_styles_height\":\"\",\"submit_element_hover_styles_width\":\"\",\"submit_element_hover_styles_font-size\":\"\",\"submit_element_hover_styles_margin\":\"\",\"submit_element_hover_styles_padding\":\"\",\"submit_element_hover_styles_display\":\"\",\"submit_element_hover_styles_float\":\"\",\"submit_element_hover_styles_show_advanced_css\":0,\"submit_element_hover_styles_advanced\":\"\",\"cellcid\":\"c3287\",\"id\":4,\"beforeField\":\"\",\"afterField\":\"\",\"value\":\"\",\"label_pos\":\"above\",\"parentType\":\"textbox\",\"element_templates\":[\"submit\",\"button\",\"input\"],\"old_classname\":\"\",\"wrap_template\":\"wrap-no-label\"}];nfForms.push(form);<\/script>\n        ","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve used Take Renaming tools in the past and I&#8217;ve always found them to be an amazing time saver, so when I sat down to think about what I would like to learn next in my Motionbuilder Python Scripting adventure I knew that writing my own Take Naming Tool would be a lot of fun. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":403,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[4],"tags":[5,7,8],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/10\/TakeRenamerV1.jpg?fit=594%2C212","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8pltq-6q","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":569,"url":"http:\/\/www.vicdebaie.com\/blog\/pick-favorite-object-with-motionbuilder-python\/","url_meta":{"origin":398,"position":0},"title":"Pick Favorite Object With MotionBuilder Python","author":"admin","date":"June 19, 2018","format":false,"excerpt":"Here is a Tool that I quickly built while working with a lot of controllers, nulls and objects that were either on top of one and other or very close. I could of used groups and what not but I had more fun taking a few minutes to write this\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/06\/a-few-of-my-favorite-things-jan-7-2011.jpg?fit=587%2C315&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":627,"url":"http:\/\/www.vicdebaie.com\/blog\/pivot-tool-v1-motionbuilder-python\/","url_meta":{"origin":398,"position":1},"title":"Pivot Tool v1 &#8211; MotionBuilder Python","author":"admin","date":"October 19, 2018","format":false,"excerpt":"\u00a0 Updated: Pivot Tool\u00a0 now supports MotionBuilder 2018! :) and in the post below under \"Versions\". 2018 version can be found here and in the post below under \"Versions\". Versions: PivotTool v1.0 for MotionBuilder 2018 PivotTool v1.0 for MotionBuilder 2015 Here is a tool that will help you quickly create\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/10\/pivot.gif?fit=498%2C284&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":566,"url":"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-parent-constraint-tool\/","url_meta":{"origin":398,"position":2},"title":"MotionBuilder Python Parent Constraint Tool","author":"admin","date":"June 18, 2018","format":false,"excerpt":"Here is a quick post to share a tool I created a little while back. It is designed to help to quickly create Parent Constraints between two objects as well as easily allow the user to bake that constraint down. The script can be found HERE and there are a\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/img_3937.jpg?fit=443%2C364&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":190,"url":"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-tool-saveit\/","url_meta":{"origin":398,"position":3},"title":"MotionBuilder Python Tool &#8220;SaveIt&#8221;","author":"admin","date":"February 12, 2017","format":false,"excerpt":"Here is a script\/tool I created for MotionBuilder using Python. \u00a0This tool will\u00a0do an incremental save of your scene. Why? Incremental saves are amazingly useful, I thought a tool that automates the process down to one click would be fun. A big thanks goes out to my college Raphael Lappiere\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/SaveIt_tool.jpg?fit=600%2C220&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":77,"url":"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-where-to-start\/","url_meta":{"origin":398,"position":4},"title":"MotionBuilder Python &#8211; Where to start","author":"admin","date":"February 6, 2017","format":false,"excerpt":"Finding information for Python scripting in MotionBuilder can be an uphill battle. Here is a list of some of the resources that I have been able to find (thanks google). A lot of the listed links have valuable scripts in which one can hack through and decipher what each line\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/16697171583_7c33584c4b.jpg?fit=500%2C333&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":188,"url":"http:\/\/www.vicdebaie.com\/blog\/shelveit-tool\/","url_meta":{"origin":398,"position":5},"title":"ShelveIt tool","author":"admin","date":"February 21, 2017","format":false,"excerpt":"Here is a tool that I whipped up:\u00a0Shelve It. It's a simple Python script that will duplicate your current MotionBuilder take, name it using the original take's name but add the suffix \"_Shelved\". It can come in hand when you want to explore some more changes on a take you\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"http:\/\/www.vicdebaie.com\/blog\/category\/python\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/Screen-Shot-2017-02-21-at-10.29.02-PM.png?fit=962%2C524&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/Screen-Shot-2017-02-21-at-10.29.02-PM.png?fit=962%2C524&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/Screen-Shot-2017-02-21-at-10.29.02-PM.png?fit=962%2C524&resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/398"}],"collection":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/comments?post=398"}],"version-history":[{"count":18,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/398\/revisions"}],"predecessor-version":[{"id":503,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/398\/revisions\/503"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/media\/403"}],"wp:attachment":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/media?parent=398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/categories?post=398"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/tags?post=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}