{"id":8817,"date":"2024-05-10T15:33:16","date_gmt":"2024-05-10T14:33:16","guid":{"rendered":"https:\/\/www.katsbits.com\/codex\/?p=8817"},"modified":"2025-01-14T09:38:40","modified_gmt":"2025-01-14T09:38:40","slug":"macos-blender-toolkit-animated-furniture","status":"publish","type":"post","link":"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/","title":{"rendered":"MacOS, Blender 4 &#038; IMVU Toolkit &#8211; Animated Furniture"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69f54187ef686\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69f54187ef686\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#description\" >Description<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#multiple-objects\" >Multiple Objects<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#vertex-groups\" >Vertex Groups<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#custom-seat-names\" >Custom Seat Names<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#action-triggers\" >Action Triggers<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#timestamps\" >Timestamps<\/a><\/li><\/ul><\/nav><\/div>\n<div style=\"background-color: black; position: relative; padding-bottom: 56.25%; padding-top: 25px; height: 0; overflow: hidden; max-width: 100%;\"><center><iframe style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" src=\"https:\/\/www.youtube.com\/embed\/aj8SF8fKxQw?rel=0\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/center><\/div>\n<h3><span class=\"ez-toc-section\" id=\"description\"><\/span>Description<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In this exercise we take a look at using the <strong>IMVU Toolkit<\/strong> for Blender to make an animated furniture item using Animation Tool. Using a simple &#8216;swing-set&#8217; as an example item to animated, it is first prepped by making sure objects and Origins are positioned where they need to be. Once readied, a skeleton can is built using <strong>Nodes<\/strong> rather than an Armature. Here, a <em>skeletal hierarchy<\/em> must be created from Nodes (Empty&#8217;s) and meshes that are linked together, the former being used to articulate the latter. Once everything is prepped, while remaining in the Furniture Tool, the project is animated in the <strong>Action Editor<\/strong> before export to FBX and assembly in IMVU Studio. <\/p>\n<p><b>Duration<\/b>: total c. 1 hr (01:00:00).<br \/>\n<b>Info<\/b>: 1080p.<br \/>\n<b>Suitability<\/b>: Beginner+.<br \/>\n<b>Source<\/b>: <a href=\"https:\/\/www.katsbits.com\/files\/imvu\/katsbits - mac swing animated.zip\">KatsBits \u2013 Toolkit Cloth Sim<\/a> (c. 500 KB, *.blend, *.fbx, *.png).<br \/>\n<b>Product ID<\/b>: <a href=\"https:\/\/www.imvu.com\/shop\/product.php?products_id=67553100\" rel=\"noopener\" target=\"_blank\">Example Swing<\/a> &#8211; PID: 67553100.<\/p>\n<blockquote><p><strong>Design note<\/strong>: working with Nodes, instead of an Armature and bones, to animate furniture for IMVU requires a different approach, so keep the following in mind;<\/p>\n<h4><span class=\"ez-toc-section\" id=\"multiple-objects\"><\/span>Multiple Objects<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>While Nodes can be used to create functional &#8216;skeletons&#8217; for IMVU, as they have limited functionality when used as proxies for bones, the resulting structure is not quite the same as an Armature. To ensure correct skeletal set-up and maintain proper animation control, each part of a product that animates will need to be, or remain, an independently selectable object &#8211; meshes should not be joined [1] (<strong>Join<\/strong> &#8211; <span class=\"shortcutkey\">Alt<\/span> + <span class=\"shortcutkey\">J<\/span> | <span class=\"shortcutkey\">Command<\/span> + <span class=\"shortcutkey\">J<\/span>) together, otherwise forming a single unified mesh as might ordinarily be done when using an Armature, because Nodes need direct influence over any objects they control.<\/p>\n<div style=\"background-color: #fc0; color: #000; width:98.5%; padding: 1.0em;\"><strong>Important<\/strong>: Nodes are Objects in the same way <a href=\"https:\/\/www.katsbits.com\/codex\/armature-bone\/\">Armatures are Objects<\/a>. When parented with a mesh an Object-level only relationship is formed, i.e. that <em>X<\/em> Node\/Armature controls <em>Y<\/em> mesh (<em>this<\/em> Node\/Armature controls <em>that<\/em> mesh). The component that actually influences or articulates linked meshes is <strong>Vertex Groups<\/strong> (see &#8220;<a href=\"https:\/\/www.katsbits.com\/codex\/macos-blender-toolkit-animated-furniture\/#vertex-groups\">Vertex Groups<\/a>&#8221; below), which are a sub-element of the Armature. As these don&#8217;t work on Nodes, the only way to properly animate using them is for meshes to remain independent from other parts so they can be specifically targeted or parented by\/to a Node.<\/div>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-joined-meshes.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-joined-meshes.jpg\" alt=\"Keep Objects separated\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Using Nodes, if meshes are joined together to form a single unit and that then parented to an animation control, that Node will manipulate the entire mesh [1] rather than just the part it&#8217;s supposed to move &#8211; the whole swing set moves instead of just one swing. Meshes should be kept separate.<\/i><\/p>\n<h4><span class=\"ez-toc-section\" id=\"vertex-groups\"><\/span>Vertex Groups<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>In using Nodes to build a skeletal structure for animation, <strong>Vertex Groups<\/strong> won&#8217;t work the same way they might when using an Armature. In other words, in this context, mesh control, the <strong>Parent \u00bb Child<\/strong> relationship creates the link between <em>control<\/em> (Node) and <em>controlled<\/em> (Mesh) objects, not necessarily any Vertex Group assignments that might be applied. Where Vertex Groups are being assigned, preference should be to assign one group per mesh object [2] because Nodes (Empty entity objects), cannot be targeted by Vertex Groups &#8211; Empty objects are simple coordinate reference objects, there is nothing &#8216;real&#8217; in the scene that can otherwise be linked through Vertex Group assignments as would be done for an Armature.<\/p>\n<div style=\"background-color: #eee; color: #000; width:98.5%; padding: 1.0em;\"><strong>Aside<\/strong>: assigning Vertex Groups in this context ensures the export\/import process between Blender and IMVU assigns the correct Vertex Group label to the correct mesh object, which should happen automatically as a consequence of converting\/interpreting the <strong>Parent \u00bb Child<\/strong> relationship &#8211; the <em>Child mesh object<\/em> will be assigned a group named after the <em>Parent control Node<\/em>.<\/div>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-vertex-groups.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-vertex-groups.jpg\" alt=\"Optional Vertex Groups\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Using Nodes, Vertex Groups are somewhat optional but can still be assigned [2] to ensure the export\/import process sets up the correct relationships between mesh and control Nodes.<\/i><\/p>\n<h4><span class=\"ez-toc-section\" id=\"custom-seat-names\"><\/span>Custom Seat Names<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>The Toolkit provides one-click button options to add <strong>Idle<\/strong>, <strong>Standing<\/strong>, <strong>Sitting<\/strong> and <strong>Custom<\/strong> seat node sets that are correctly organised and ready for use <em>as is<\/em>. Each set includes <em>four preconfigured nodes<\/em>;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 Seat<br \/>\n\u2022 Catcher<br \/>\n\u2022 Pitcher<br \/>\n\u2022 Handle<\/div>\n<p>Each <em>node set<\/em> is identified with a incremental numerical append (&#8220;<em>[n]<\/em>&#8220;) <em>per set<\/em>;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 Seat<strong><em>01<\/em><\/strong><br \/>\n\u2022 Catcher<strong><em>01<\/em><\/strong><br \/>\n\u2022 Pitcher<strong><em>01<\/em><\/strong><br \/>\n\u2022 Handle<strong><em>01<\/em><\/strong><\/div>\n<p>Each <em>individual node<\/em> within a the set identifies and triggers a <em>type<\/em> of avatar action; <\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 Seat = <em>avatars default location<\/em>.<br \/>\n\u2022 Catcher = <em>co-op position for the User<\/em>.<br \/>\n\u2022 Pitcher = <em>co-op position for a friend<\/em>.<br \/>\n\u2022 Handle = <em>interaction visual aid<\/em>.<\/div>\n<p>The type of avatar animation that&#8217;s triggered is further identified by the label appended to the node;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 *.Idle<br \/>\n\u2022 *.Sitting<br \/>\n\u2022 *.Standing<br \/>\n\u2022 *.Custom<\/div>\n<p>This means;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 *.Idle = auto-plays\/overrides seat type.<br \/>\n\u2022 *.Sitting = seated or sitting avatar animations.<br \/>\n\u2022 *.Standing = standing avatar animations.<br \/>\n\u2022 *.Custom = defaults to standing avatar animations.<\/div>\n<p>To add seating, click the appropriate button in the Toolkit and position the set relative to how the avatar should appear, noting that the Seat node should be aligned with the avatars feet on the ground plain. For custom seat spots, clicking the <strong>Custom<\/strong> button [3], a set of nodes with appear that are appended whatever is typed into the &#8216;Custom&#8217; input field, for example if &#8220;<em>Custompose_a<\/em>&#8221; is used, a set of nodes will appear appended &#8220;<strong>*.<em>Custompose_a<\/em><\/strong>&#8220;, e.g.;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 Seat[n].<em>Custompose_a<\/em><br \/>\n\u2022 Catcher[n].<em>Custompose_a<\/em><br \/>\n\u2022 Pitcher[n].<em>Custompose_a<\/em><br \/>\n\u2022 Handle[n]<\/div>\n<p>Or fully as;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">\u2022 Seat01.<em>Custompose_a<\/em><br \/>\n\u2022 Catcher01.<em>Custompose_a<\/em><br \/>\n\u2022 Pitcher01.<em>Custompose_a<\/em><br \/>\n\u2022 Handle01<\/div>\n<p>If at a later point the names, labels or appends need to be changed, this can be done in the <strong>Outliner<\/strong> [4] click-typing each entry, or in <strong>Object Properties<\/strong> with each object selected in turn.<\/p>\n<div style=\"background-color: #fc0; color: #000; width:98.5%; padding: 1.0em;\"><strong>Important<\/strong>: to avoid issues importing and assembling a furniture item from an FBX file ensure;<\/p>\n<ul>\n<li>the append that identifies a set of custom seat nodes does not contain the word &#8220;<strong><em>seat<\/em><\/strong>&#8220;, e.g. <strong>Seat[n].<em>Seatspot<\/em><\/strong> is invalid, &#8220;<strong>Seat[n].<em>Posespot<\/em><\/strong>&#8221; is valid. <\/li>\n<li>avoid using numbers in the <em>append<\/em>, use letters instead, i.e. &#8220;<strong>Seat[n].<em>Posespot1<\/em><\/strong>&#8221; might cause issues whereas &#8220;<strong>Seat[n].<em>Posespot_a<\/em><\/strong>&#8221; won&#8217;t (underscore &#8220;_&#8221; or hyphen &#8220;-&#8221; can be used for clarity\/to distinguish iterations).<\/li>\n<li>ensure <strong>Handle<\/strong> nodes only have a numerical append that corresponds to the Seat node, i.e. <em>Handle01<\/em> and not <em>Handle01.Custompose<\/em> or similar.<\/li>\n<\/ul>\n<p>In both instances where seat nodes are incorrectly labelled, when imported into Studio they will be automatically, but incorrectly, converted into a seat nodes &#8211; the importer picks up on the presence of &#8220;<em>seat<\/em>&#8221; or &#8220;<em>[number]<\/em>&#8221; in the name &#8211; which in turn breaks functionality for all nodes in the skeleton.<\/p>\n<p>Additionally, <strong>node names are CaSE SenSiTiVE<\/strong>; &#8220;<strong><em>s<\/em>eat[n].<em>p<\/em>osespot_a<\/strong>&#8221; is not the same as &#8220;<strong><em>S<\/em>eat[n].<em>P<\/em>osespot_a<\/strong>&#8220;.\n<\/div>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-node-names.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-node-names.jpg\" alt=\"Custom Node names\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Clicking the <strong>Custom<\/strong> button [3] in the Toolkit to add a set of seat nodes that can be used to accommodate custom furniture animations and custom seat poses. If labels need to be changed later this can be done in the <strong>Outliner<\/strong> [4].<\/i><\/p>\n<h4><span class=\"ez-toc-section\" id=\"action-triggers\"><\/span>Action Triggers<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>As furniture doesn&#8217;t have a mode of behaviour, animations will only play when triggered. There are basically two ways this can be done; 1) using a generic auto-trigger, or 2) using a seat-specific trigger. The first, <em>auto-trigger<\/em>, essentially automatically activates and plays an Action as soon as a furniture item loads into a room. The second, <em>seat-specific trigger<\/em>, only plays an Action when the User clicks on a seat node or corresponding Handle to use that spot. In practice, create a new Action [5], then if a furniture item should play a sequence as soon as it loads, set the <strong>Name<\/strong>\/<strong>Trigger<\/strong> for the Action in Studio to;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">stance.Idle<\/div>\n<p>This overrides any seat specific triggers or seat types and forcibly activates associated Actions and Ensembles based on how they are set up. Alternatively, to activate a furniture animation when the User clicks a seat-spot or Handle [6], similarly create a new Action then use;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">stance.<em>[Append]<\/em>-seat<em>[n]<\/em><\/div>\n<p>Continuing the theme from above this would be;<\/p>\n<div style=\"background-color: #E7FAEA; color: #000; font-family:courier; width:98.5%; padding: 1.0em;\">stance.<em>Posespot_a<\/em>&#8211;<em>seat01<\/em><\/div>\n<div style=\"background-color: #fc0; color: #000; width:98.5%; padding: 1.0em; margin-top:1em;\"><strong>Important<\/strong>: the separator between the append label and seat identifier MUST be a hyphen, &#8220;-&#8220;, not a period &#8220;.&#8221;. Further more, using hyphens as general separators between words, letters etc., may cause additional issues.<\/div>\n<p>This would then trigger any linked Action\/s specific to the activated seat node, playing associated furniture animations and\/or any custom seat poses or an animated avatar seat poses based on the Actions setting.<\/p>\n<div style=\"background-color: #eee; color: #000; width:98.5%; padding: 1.0em;\"><strong>Aside<\/strong>: because seat nodes are identified numerically in sequence, it is possible to attribute the same append, i.e. &#8220;*.Posespot&#8221;, to several spots, relying instead on the sequential identifiers to make each seat set unique, e.g. seat05.Posespot, seat65.Posespot, seat81.Posespot and so on &#8211; Catch, Pitcher and Handle nodes also maintain this sequential numbering.<\/div>\n<p><a href=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-studio-trigger-name.jpg\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" style=\"width: 98.5%; height: auto;\" src=\"https:\/\/www.katsbits.com\/images\/tutorials\/imvu-mac\/furniture-studio-trigger-name.jpg\" alt=\"Action Trigger label\" width=\"900px\" height=\"500px\" border=\"0\" \/><\/a><br \/>\n<i>Depending on how the furniture animation is to be activated, In Studio, Actions will need to use a <strong>Trigger<\/strong> of <strong>stance.Idle<\/strong> [5] to auto-play, or <strong>stance.[Append]-seat[n]<\/strong> [6] to start when the User clicks a seat node or Handle.<\/i>\n<\/p><\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"timestamps\"><\/span>Timestamps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Times are approximate;<br \/>\n &#8211; 00:00 : Mesh Prep<br \/>\n &#8211; 07:30 : Rigging<br \/>\n &#8211; 29:30 : Animation<br \/>\n &#8211; 42:00 : Export &#038; Assembly<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":9365,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34,37,1045,230],"tags":[217,622,473,195,906,194,1086,835,1049,334,536,761,766],"class_list":["post-8817","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blender","category-imvu","category-macos","category-tutorials","tag-action-editor","tag-animation","tag-append","tag-furniture","tag-furniture-tool","tag-imvu","tag-imvu-files","tag-imvu-studio-toolkit","tag-imvu-toolkit","tag-nodes","tag-origin","tag-rigging","tag-skeletal-animation"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/8817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/comments?post=8817"}],"version-history":[{"count":53,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/8817\/revisions"}],"predecessor-version":[{"id":9605,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/posts\/8817\/revisions\/9605"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media\/9365"}],"wp:attachment":[{"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/media?parent=8817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/categories?post=8817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.katsbits.com\/codex\/wp-json\/wp\/v2\/tags?post=8817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}