{"id":596,"date":"2018-07-17T13:18:08","date_gmt":"2018-07-17T17:18:08","guid":{"rendered":"http:\/\/www.vicdebaie.com\/blog\/?p=596"},"modified":"2018-07-17T13:18:08","modified_gmt":"2018-07-17T17:18:08","slug":"motionbuilder-python-my-fav-story-functions","status":"publish","type":"post","link":"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-my-fav-story-functions\/","title":{"rendered":"MotionBuilder Python My Fav Story Functions"},"content":{"rendered":"<p><img data-attachment-id=\"597\" data-permalink=\"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-my-fav-story-functions\/storycheatsheet\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?fit=782%2C474\" data-orig-size=\"782,474\" 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=\"\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?fit=300%2C182\" data-large-file=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?fit=678%2C411\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-medium wp-image-597\" src=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?resize=300%2C182\" alt=\"\" width=\"300\" height=\"182\" srcset=\"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?resize=300%2C182 300w, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?resize=768%2C466 768w, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?w=782 782w\" sizes=\"(max-width: 300px) 100vw, 300px\" data-recalc-dims=\"1\" \/><\/p>\n<p>After posting &#8220;<a href=\"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-library-aka-my-fav-functions\/\">MotionBuilder Python Library aka. My Fav Functions<\/a>&#8221; I thought I would follow up with some breakdown on manipulating Story Tracks, Clips and Folders with MotionBuilder&#8217;s Python modules. I briefly covered this a while ago <a href=\"http:\/\/www.vicdebaie.com\/blog\/using-python-to-import-motionbuilder-characters-into-story\/\">here<\/a> but that was really just an example of how to put characters into the Story under a folder &#8211; which comes in handy, but no real break down on what it is. Here are some of my favorite functions and some examples on how to manipulate Story using Python.<\/p>\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\r\nimport pyfbsdk as fb\r\nimport pyfbsdk_additions as fba\r\n\r\n'''\r\nAcessing Story Tracks And Clips\r\nBelow Are 3 Funcitons That Will Help Expose Any Story Track Or Story Clip That You Have Selected Within Your Stroy Window\r\n'''\r\n##Show Selected Tracks Modules\r\ndef ShowSelTrackAtt():\r\n    for track in fb.FBStory().RootFolder.Tracks:\r\n        if track.Selected == True:\r\n            print track.Type, track.Name, &quot;\\n&quot;\r\n            print dir(track)\r\n\r\n##Show Selected Clips Modules\r\ndef ShowSelClipAtt():\r\n    for track in fb.FBStory().RootFolder.Tracks:\r\n        for clip in track.Clips:\r\n            if clip.Selected == True:\r\n                print track.Name, clip.Name, &quot;Att: &quot; + &quot;\\n&quot;\r\n                print dir(clip)\r\n\r\n##Show Selected Clips Properties\r\ndef ShowSelClipProperties():\r\n    for track in fb.FBStory().RootFolder.Tracks:\r\n        for clip in track.Clips:\r\n            if clip.Selected == True:\r\n                print track.Name, clip.Name, &quot;Properties: &quot; + &quot;\\n&quot;\r\n                for i in dir(clip.PropertyList.FBFindPropertiesByName): print i\r\n\r\n\r\n'''\r\nThese Two Function GetSelModels() And GetSelCameras() Will Be Used To Help Demonstrate The Creation Of Animation Tracks And Camera Tracks\r\n'''\r\n##Returns A List Of All Selected Models\r\ndef GetSelModels():\r\n    lSelModels = &#x5B;]\r\n    modelList = fb.FBModelList()\r\n    fb.FBGetSelectedModels (modelList, None, True)\r\n    for model in modelList:\r\n        if model.Selected == True:\r\n            lSelModels.extend(&#x5B;model])\r\n        else:\r\n            pass\r\n    return lSelModels\r\n\r\n##Returns A List Of All Selected Cameras\r\ndef GetSelCameras():\r\n    for camera in fb.FBSystem().Scene.Cameras:\r\n        if camera.Selected == True:\r\n            return camera\r\n        else:\r\n            pass\r\n\r\n\r\n'''\r\nDealing With All The Different Types Of Story Tracks  \r\n'''\r\n##List All The Different Types Of Story Clips\r\ndef ListStoryClipTypes():\r\n    for i in dir(fb.FBStoryTrackType): \r\n        if &quot;kFBStoryTrack&quot; in i: \r\n            print i\r\n        else:\r\n            pass\r\n                        \r\n'''\r\nHow to Create A Track For Each Different Story Track Type\r\n'''\r\n##How To Create Animation Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAnimation)\r\n##How To Create Audio Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAudio)\r\n##How To Create Camera Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCamera)\r\n##How To Create Character Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCharacter)\r\n##How To Create Command Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCommand)\r\n##How To Create Constraint Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackConstraint)\r\n##How To Create Shot Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackShot)\r\n##How To Create Video Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackVideo)\r\n\r\n'''\r\nTo Name A Story Track You Can Do It At Creation With The Label Attribute\r\n'''\r\n##How To Create And Name An Animation Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAnimation).Label = &quot;My Aniamtion Track&quot;\r\n##How To Create And Name An Audio Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAudio).Label = &quot;My Audio Track&quot;\r\n##How To Create And Name An Camera Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCamera).Label = &quot;My Camera Track&quot;\r\n##How To Create And Name An Character Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCharacter).Label = &quot;My Character Track&quot;\r\n##How To Create And Name An Command Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCommand).Label = &quot;My Command Track&quot;\r\n##How To Create And Name An Constraint Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackConstraint).Label = &quot;My Constraint Track&quot;\r\n##How To Create And Name An Shot Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackShot).Label = &quot;My Shot Track&quot;\r\n##How To Create And Name An Video Track\r\nfb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackVideo).Label = &quot;My Video Track&quot;\r\n\r\n'''\r\nTo Create A Track And Assign A Source We Need To Use The .Detail.append() Attribute\r\n'''\r\n##Create A Character Animation Track Within The Root Folder Of Story\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCharacter, fb.FBStory().RootFolder)\r\nlTrack.Details.append(fb.FBApplication().CurrentCharacter)\r\n\r\n##Create An Animation Track And Assign An Object\r\nselObj = GetSelModels()\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAnimation, fb.FBStory().RootFolder)\r\nfor i in selObj:\r\n    lTrack.Details.append(i)\r\n\r\n##Create A Camera Track Adn Assign A Camera\r\nselCams = GetSelCameras()\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCamera, fb.FBStory().RootFolder)\r\nlTrack.Details.append(selCams)\r\n\r\n\r\n'''\r\nCreating A Track With An Assigned Source And Data Copied To It We Will Be Using .CopyTakeIntoTrack( fb.FBSystem().CurrentTake.LocalTimeSpan, fb.FBSystem().CurrentTake )\r\n'''\r\n##Create A Character Animatin Track Within The Root Folder Of Story\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCharacter, fb.FBStory().RootFolder)\r\n##Assign Our Currently Selected Character To Be Our Track's Character\r\nlTrack.Details.append(fb.FBApplication().CurrentCharacter)\r\n##Our Data Will Be The Currnet Take\r\nlTrack.CopyTakeIntoTrack( fb.FBSystem().CurrentTake.LocalTimeSpan, fb.FBSystem().CurrentTake )\r\n\r\n##Create An Animation Track And Assign An Object\r\nselObj = GetSelModels()\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackAnimation, fb.FBStory().RootFolder)\r\nfor i in selObj:\r\n    lTrack.Details.append(i)\r\n##Our Data Will Be The Currnet Take\r\nlTrack.CopyTakeIntoTrack( fb.FBSystem().CurrentTake.LocalTimeSpan, fb.FBSystem().CurrentTake )\r\n\r\n\r\n##Create A Camera Track Adn Assign A Camera\r\nselCams = GetSelCameras()\r\nlTrack = fb.FBStoryTrack(fb.FBStoryTrackType.kFBStoryTrackCamera, fb.FBStory().RootFolder)\r\nlTrack.Details.append(selCams)\r\n##Our Data Will Be The Currnet Take\r\nlTrack.CopyTakeIntoTrack( fb.FBSystem().CurrentTake.LocalTimeSpan, fb.FBSystem().CurrentTake )\r\n\r\n\r\n'''\r\nMove Clips Along The Time Line Using .Start = fb.FBTime()\r\n'''\r\n##This Will Move All Selected Clips To Start At Frame 150\r\nfor track in fb.FBStory().RootFolder.Tracks:\r\n    for clip in track.Clips:\r\n        if clip.Selected == True:\r\n            clip.Start = fb.FBTime(0,0,0,150)\r\n\r\n'''\r\nSpeeding Up The Clip\r\n'''\r\n##This Will Speed Up All Selected Clips To Be 2x The Original Speed\r\nfor track in fb.FBStory().RootFolder.Tracks:\r\n    for clip in track.Clips:\r\n        if clip.Selected == True:\r\n            clip.Speed = 2\r\n            \r\n'''\r\nWorking With Tracks And Folders Within Story\r\n'''\r\n##Creating A Story Folder ie. CreatStoryFolder(&quot;My Story Folder&quot;) Will Create A Folder Within The Story Called &quot;My Story Folder&quot;\r\ndef CreatStoryFolder(foldername):\r\n    lFolder = fb.FBStoryFolder()\r\n    lFolder.Label = foldername\r\n\r\n'''\r\nPutting It All Together:\r\n'''\r\n##Create A Folder Labled As The Take Name And Create A Character Track With The Lable Of The Character\r\ndef SendToStory():\r\n    ##Folder Set Up\r\n    lfoldername = fb.FBSystem().CurrentTake.Name\r\n    lFolder = fb.FBStoryFolder()\r\n    lFolder.Label = lfoldername\r\n    ##Character Track\r\n    lCharTrack = fb.FBStoryTrack(FBStoryTrackType.kFBStoryTrackCharacter, lFolder)\r\n    # assign our CurrentCharacter to the track\r\n    lCharTrack.Details.append(FBApplication().CurrentCharacter)\r\n    lCharTrack.Label = FBApplication().CurrentCharacter.LongName\r\n    # Insert current take in the newly created track\r\n    lCharTrack.CopyTakeIntoTrack( fb.FBSystem().CurrentTake.LocalTimeSpan, fb.FBSystem().CurrentTake )\r\n\r\n<\/pre>\n<p>So now that we have some of my favorite functions exposed, let&#8217;s head over <a href=\"http:\/\/www.vicdebaie.com\/blog\/scaling-and-moving-story-clips-with-motionbulider-python\/\">here<\/a> to see them all working together. \ud83d\ude42<\/p>\n<p>As always I hope this helps.<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>After posting &#8220;MotionBuilder Python Library aka. My Fav Functions&#8221; I thought I would follow up with some breakdown on manipulating Story Tracks, Clips and Folders with MotionBuilder&#8217;s Python modules. I briefly covered this a while ago here but that was really just an example of how to put characters into the Story under a folder [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":597,"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":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[4],"tags":[5,6,7],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2018\/07\/Storycheatsheet.jpg?fit=782%2C474","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8pltq-9C","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":686,"url":"http:\/\/www.vicdebaie.com\/blog\/save-all-story-clips-to-new-takes-with-motionbuilder-python-script\/","url_meta":{"origin":596,"position":0},"title":"Save All Story Clips To New Takes with MotionBuilder Python Script","author":"admin","date":"May 2, 2019","format":false,"excerpt":"UPDATED: A quick update that will now allow the script to maintain all of the original tracks within the story. The story will look exactly as it was pre-processing. Thanks Simon Kay Below is a script that I wrote, It goes through all you Story tracks and clips and then\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\/2019\/05\/StoryTrackClips.png?fit=851%2C304&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2019\/05\/StoryTrackClips.png?fit=851%2C304&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2019\/05\/StoryTrackClips.png?fit=851%2C304&resize=700%2C400 2x"},"classes":[]},{"id":336,"url":"http:\/\/www.vicdebaie.com\/blog\/how-to-use-functions-with-motionbuilder-python\/","url_meta":{"origin":596,"position":1},"title":"How to use functions with MotionBuilder Python","author":"admin","date":"April 25, 2017","format":false,"excerpt":"Using functions will save you from re-writing and maintaining many of the same lines of code over and over. What is a Python Function? \"A function is a block of organized, reusable code that is used to perform a single, related action. Functions provide better modularity for your application and\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\/04\/c2c827b3a6ea16d024b6875b5610651c-e1493127532666.gif?fit=251%2C300&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":747,"url":"http:\/\/www.vicdebaie.com\/blog\/motionbuilder-python-mirror-character-animation-through-story-mode\/","url_meta":{"origin":596,"position":2},"title":"MotionBuilder Python &#8211; Mirror Character Animation Through Story Mode","author":"admin","date":"November 21, 2019","format":false,"excerpt":"A quick script that will mirror animations via Story Mode.","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\/2019\/11\/Mirror-Cap.jpg?fit=960%2C640&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2019\/11\/Mirror-Cap.jpg?fit=960%2C640&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2019\/11\/Mirror-Cap.jpg?fit=960%2C640&resize=700%2C400 2x"},"classes":[]},{"id":63,"url":"http:\/\/www.vicdebaie.com\/blog\/hello-world-a-k-a-let-us-begin\/","url_meta":{"origin":596,"position":3},"title":"Hello World! &#8211; A.k.a &#8220;Let us begin&#8221;","author":"admin","date":"February 6, 2017","format":false,"excerpt":"Here is my first posting for this experiment - \"the blog\". For the last two weeks I have been mucking around with Python scripting within MotionBuilder. It has been an uphill battle. With the limited resources out there all I can really do is hack away at bits and pieces\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_3934.jpg?fit=526%2C492&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":253,"url":"http:\/\/www.vicdebaie.com\/blog\/move-a-character-in-motionbuilder-to-the-worlds-center-with-python\/","url_meta":{"origin":596,"position":4},"title":"Move a Character in MotionBuilder to the World&#8217;s Center with Python","author":"admin","date":"March 7, 2018","format":false,"excerpt":"\u200eWith a dozen takes in my Motionbuilder scene and my Character placed at different locations on each take, I decided Python would help me move my Character to the World's Center. With raw Mocap data your Character's Wold Position is all based on the Actors position within the volume during\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_4056.jpg?fit=800%2C600&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/IMG_4056.jpg?fit=800%2C600&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/02\/IMG_4056.jpg?fit=800%2C600&resize=700%2C400 2x"},"classes":[]},{"id":274,"url":"http:\/\/www.vicdebaie.com\/blog\/using-python-to-import-motionbuilder-characters-into-story\/","url_meta":{"origin":596,"position":5},"title":"Using Python to import MotionBuilder Characters into story.\u00a0","author":"admin","date":"April 6, 2017","format":false,"excerpt":"\u00a0 MotionBuilder comes with a great script that will place your selected character into a Character Track within the Story, I wanted to write one that would put all of the scene's Characters into the story. Once again I will use the \"Mia_Rigged.fbx\" file to test my script. I created\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\/04\/MobuPython_StoryScript.jpg?fit=1011%2C224&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/04\/MobuPython_StoryScript.jpg?fit=1011%2C224&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.vicdebaie.com\/blog\/wp-content\/uploads\/2017\/04\/MobuPython_StoryScript.jpg?fit=1011%2C224&resize=700%2C400 2x"},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/596"}],"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=596"}],"version-history":[{"count":4,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/596\/revisions"}],"predecessor-version":[{"id":605,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/posts\/596\/revisions\/605"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/media\/597"}],"wp:attachment":[{"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/media?parent=596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/categories?post=596"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.vicdebaie.com\/blog\/wp-json\/wp\/v2\/tags?post=596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}