<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Motion Canvas Blog</title>
        <link>https://motioncanvas.io/blog</link>
        <description>Motion Canvas Blog</description>
        <lastBuildDate>Tue, 13 Aug 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Motion Canvas v3.17.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.17.0</link>
            <guid>https://motioncanvas.io/blog/version-3.17.0</guid>
            <pubDate>Tue, 13 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[The Latex node now supports tweening]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="levirs565" href="https://github.com/levirs565" target="_blank"><img loading="lazy" src="https://github.com/levirs565.png" width="20" height="20" alt="levirs565's avatar"></a>The<!-- --> <a href="/docs/Latex"><code>Latex</code></a> <!-- -->node now supports tweening:<a class="pr_hMGy" title="Pull request #800" href="https://github.com/motion-canvas/motion-canvas/pull/800" target="_blank"><small>#<!-- -->800</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> tex </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Latex</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Latex</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">tex</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">tex</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">{{y=}}{{a}}{{x^2}}</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">white</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'{{y=}}{{a}}{{x^2}} + {{bx}}'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token string" style="color:var(--hl-string)">'{{y=}}{{\\left(}}{{a}}{{x^2}} + {{bx}}{{\\over 1}}{{\\right)}}'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">tex</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'{{y=}}{{a}}{{x^2}}'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="squigglesdev" href="https://github.com/squigglesdev" target="_blank"><img loading="lazy" src="https://github.com/squigglesdev.png" width="20" height="20" alt="squigglesdev's avatar"></a><code>?render</code> and <code>?present</code> url parameters can be used to immediately start rendering or presenting when opening the editor.<a class="pr_hMGy" title="Pull request #631" href="https://github.com/motion-canvas/motion-canvas/pull/631" target="_blank"><small>#<!-- -->631</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Txt"><code>Txt</code></a> <!-- -->nodes properly support tweening emojis.<a class="pr_hMGy" title="Pull request #1085" href="https://github.com/motion-canvas/motion-canvas/pull/1085" target="_blank"><small>#<!-- -->1085</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix stack overflow caused by restoring a<!-- --> <a href="/api/2d/components/Code"><code>Code</code></a> <!-- -->node<a class="pr_hMGy" title="Pull request #1084" href="https://github.com/motion-canvas/motion-canvas/pull/1084" target="_blank"><small>#<!-- -->1084</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Prevent invalid cache sizes.<a class="pr_hMGy" title="Pull request #1083" href="https://github.com/motion-canvas/motion-canvas/pull/1083" target="_blank"><small>#<!-- -->1083</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix line tweening.<a class="pr_hMGy" title="Pull request #1075" href="https://github.com/motion-canvas/motion-canvas/pull/1075" target="_blank"><small>#<!-- -->1075</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix text alignment.<a class="pr_hMGy" title="Pull request #1061" href="https://github.com/motion-canvas/motion-canvas/pull/1061" target="_blank"><small>#<!-- -->1061</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.16.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.16.0</link>
            <guid>https://motioncanvas.io/blog/version-3.16.0</guid>
            <pubDate>Thu, 16 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Lights, Camera, Effects!]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>A brand-new<!-- --> <a href="/docs/camera"><code>Camera</code></a> <!-- -->node with helper methods for zooming and focusing on elements:<a class="pr_hMGy" title="Pull request #1019" href="https://github.com/motion-canvas/motion-canvas/pull/1019" target="_blank"><small>#<!-- -->1019</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> camera </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Camera</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> rect </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Rect</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> circle </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Circle</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> scene </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Grid</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#fff1'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">1</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">100%</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">spacing</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">25</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Rect</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">rect</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#e6a700'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">25</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Circle</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">circle</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#e13238'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">25</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Grid</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Camera.Stage</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">scene</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">scene</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">x</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">300</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">height</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#242424'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">4</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Camera.Stage</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">cameraRef</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">camera</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">scene</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">scene</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">x</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">300</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">height</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#242424'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">4</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">camera</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">centerOn</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">rect</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">3</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">camera</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">rotation</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">180</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">3</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">camera</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">zoom</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1.8</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">3</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">camera</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">centerOn</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">circle</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">camera</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">reset</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New <a href="/docs/effects">effects</a> can be used to react to changes in signals:<a class="pr_hMGy" title="Pull request #1043" href="https://github.com/motion-canvas/motion-canvas/pull/1043" target="_blank"><small>#<!-- -->1043</small></a><div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/2d'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">createEffect</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> createSignal</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/core'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> signal </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">createSignal</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token function" style="color:var(--hl-function)">createEffect</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token builtin" style="color:var(--hl-keyword)">console</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token function" style="color:var(--hl-function)">log</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'Signal changed: '</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">signal</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">signal</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="mancopp" href="https://github.com/mancopp" target="_blank"><img loading="lazy" src="https://github.com/mancopp.png" width="20" height="20" alt="mancopp's avatar"></a>All vector operations can now be used with vector signals for a more concise code:<a class="pr_hMGy" title="Pull request #1030" href="https://github.com/motion-canvas/motion-canvas/pull/1030" target="_blank"><small>#<!-- -->1030</small></a><div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// Before</span><span class="token plain"></span><br></span><span class="token-line prettier-ignore" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">node</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token function" style="color:var(--hl-function)">position</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">node</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token function" style="color:var(--hl-function)">position</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token function" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">200</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">100</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// Now</span><span class="token plain"></span><br></span><span class="token-line prettier-ignore" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">node</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token plain">position</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token function" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">200</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">100</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Polygon#vertex"><code>Polygon.vertex()</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Polygon#vertexCompletion"><code>Polygon.vertexCompletion()</code></a> <!-- -->can be used to retrieve information about the vertices of a polygon.<a class="pr_hMGy" title="Pull request #1045" href="https://github.com/motion-canvas/motion-canvas/pull/1045" target="_blank"><small>#<!-- -->1045</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="mancopp" href="https://github.com/mancopp" target="_blank"><img loading="lazy" src="https://github.com/mancopp.png" width="20" height="20" alt="mancopp's avatar"></a>New example for the Code node.<a class="pr_hMGy" title="Pull request #1023" href="https://github.com/motion-canvas/motion-canvas/pull/1023" target="_blank"><small>#<!-- -->1023</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Handle invalid values for time events.<a class="pr_hMGy" title="Pull request #1044" href="https://github.com/motion-canvas/motion-canvas/pull/1044" target="_blank"><small>#<!-- -->1044</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix the destination uv in shaders.<a class="pr_hMGy" title="Pull request #1026" href="https://github.com/motion-canvas/motion-canvas/pull/1026" target="_blank"><small>#<!-- -->1026</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Josephine19001" href="https://github.com/Josephine19001" target="_blank"><img loading="lazy" src="https://github.com/Josephine19001.png" width="20" height="20" alt="Josephine19001's avatar"></a>Fix the type of the layout gap property.<a class="pr_hMGy" title="Pull request #1039" href="https://github.com/motion-canvas/motion-canvas/pull/1039" target="_blank"><small>#<!-- -->1039</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix Code size calculation.<a class="pr_hMGy" title="Pull request #1025" href="https://github.com/motion-canvas/motion-canvas/pull/1025" target="_blank"><small>#<!-- -->1025</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.15.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.15.0</link>
            <guid>https://motioncanvas.io/blog/version-3.15.0</guid>
            <pubDate>Thu, 21 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Code has never been more animated.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>A brand-new<!-- --> <a href="/docs/code"><code>Code</code></a> <!-- -->node with dedicated code signals, customizable syntax highlighting, and more expressive animation system (Including automatic diff-based transitions).<a class="pr_hMGy" title="Pull request #946" href="https://github.com/motion-canvas/motion-canvas/pull/946" target="_blank"><small>#<!-- -->946</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:4"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> code </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Code</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Code</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">code</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">fontSize</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">28</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">fontFamily</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'JetBrains Mono, monospace'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">offsetX</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">1</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">x</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">400</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">code</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'const number = 7;'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token property-access">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">replace</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">findFirstRange</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'number'</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'variable'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token property-access">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">prepend</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token template-string string" style="color:var(--hl-string)">function example() {\n  </span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token property-access">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">append</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token template-string string" style="color:var(--hl-string)">\n}</span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">selection</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">findFirstRange</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'variable'</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'const number = 7;'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">code</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">selection</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token constant" style="color:var(--hl-constant)">DEFAULT</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.6</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/utils#withDefaults"><code>withDefaults</code></a> <!-- -->helper function lets you quickly extend nodes with your own defaults.<a class="pr_hMGy" title="Pull request #982" href="https://github.com/motion-canvas/motion-canvas/pull/982" target="_blank"><small>#<!-- -->982</small></a><div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">Txt</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> withDefaults</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/2d'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> MyTxt </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">withDefaults</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">Txt</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  fill</span><span class="token operator" style="color:var(--hl-punctuation)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'rgba(255, 255, 255, 0.6)'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  fontFamily</span><span class="token operator" style="color:var(--hl-punctuation)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'JetBrains Mono'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  fontSize</span><span class="token operator" style="color:var(--hl-punctuation)">:</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">28</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>When using<!-- --> <a href="/api/core/flow#loop"><code>loop</code></a>, the iteration count can be omitted to create an infinite loop:<a class="pr_hMGy" title="Pull request #952" href="https://github.com/motion-canvas/motion-canvas/pull/952" target="_blank"><small>#<!-- -->952</small></a><div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// These two are equivalent:</span><span class="token plain"></span><br></span><span class="token-line prettier-ignore" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">loop</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"> </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">/* animation */</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line prettier-ignore" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">loop</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">Infinity</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"> </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">/* animation */</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/core/threading#spawn"><code>spawn</code></a> <!-- -->function lets you run animations in the background, from any place, without needing to <code>yield</code> them.<a class="pr_hMGy" title="Pull request #951" href="https://github.com/motion-canvas/motion-canvas/pull/951" target="_blank"><small>#<!-- -->951</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Polygon"><code>Polygon</code></a> <!-- -->now extends<a href="/api/2d/components/Curve"><code>Curve</code></a> <!-- -->giving it access to all curve-related properties like<!-- --> <a href="/api/2d/components/Polygon#startArrow"><code>startArrow</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Polygon#radius"><code>radius</code></a>.<a class="pr_hMGy" title="Pull request #961" href="https://github.com/motion-canvas/motion-canvas/pull/961" target="_blank"><small>#<!-- -->961</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="jmaen" href="https://github.com/jmaen" target="_blank"><img loading="lazy" src="https://github.com/jmaen.png" width="20" height="20" alt="jmaen's avatar"></a>Color fields in the editor now come with a visual color picker.<a class="pr_hMGy" title="Pull request #962" href="https://github.com/motion-canvas/motion-canvas/pull/962" target="_blank"><small>#<!-- -->962</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/core/types/Vector2"><code>Vector2</code></a> <!-- -->methods: <a class="pr_hMGy" title="Pull request #985" href="https://github.com/motion-canvas/motion-canvas/pull/985" target="_blank"><small>#<!-- -->985</small></a><ul><li><a href="/api/core/types/Vector2#rounded"><code>rounded</code></a></li><li><a href="/api/core/types/Vector2#ceiled"><code>ceiled</code></a></li><li><a href="/api/core/types/Vector2#map"><code>map</code></a></li><li><a href="/api/core/types/Vector2#toArray"><code>toArray</code></a></li></ul></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Layout#cardinalPoint"><code>cardinalPoint</code></a> <!-- -->method lets you map<a href="/api/core/types/Origin"><code>Origin</code></a>s and<!-- --> <a href="/api/core/types/Direction"><code>Direction</code></a>s to their corresponding cardinal points of the node.<a class="pr_hMGy" title="Pull request #988" href="https://github.com/motion-canvas/motion-canvas/pull/988" target="_blank"><small>#<!-- -->988</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/core/transitions#waitTransition"><code>waitTransition</code></a> <!-- -->lets you animate transitions using nodes.<a class="pr_hMGy" title="Pull request #983" href="https://github.com/motion-canvas/motion-canvas/pull/983" target="_blank"><small>#<!-- -->983</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a title="Experimental feature" href="/docs/experimental"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor" class="experimental"><path d="M19.8,18.4L14,10.67V6.5l1.35-1.69C15.61,4.48,15.38,4,14.96,4H9.04C8.62,4,8.39,4.48,8.65,4.81L10,6.5v4.17L4.2,18.4 C3.71,19.06,4.18,20,5,20h14C19.82,20,20.29,19.06,19.8,18.4z"></path></svg></a>When passed to OpenGL,<!-- --> <a href="/api/core/types/Matrix2D"><code>Matrix2D</code></a> <!-- -->is now converted to a 3x3 square matrix (as opposed to a 3x2 matrix)<a class="pr_hMGy" title="Pull request #984" href="https://github.com/motion-canvas/motion-canvas/pull/984" target="_blank"><small>#<!-- -->984</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The view's<!-- --> <a href="/api/2d/components/Node#cachePadding"><code>cachePadding</code></a> <!-- -->is now respected when calculating the cache size of individual nodes.<a class="pr_hMGy" title="Pull request #986" href="https://github.com/motion-canvas/motion-canvas/pull/986" target="_blank"><small>#<!-- -->986</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Niikelion" href="https://github.com/Niikelion" target="_blank"><img loading="lazy" src="https://github.com/Niikelion.png" width="20" height="20" alt="Niikelion's avatar"></a>Presentation Mode now supports PowerPoint shortcuts (Page Up, Page Down, etc.)<a class="pr_hMGy" title="Pull request #993" href="https://github.com/motion-canvas/motion-canvas/pull/993" target="_blank"><small>#<!-- -->993</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="nvborisenko" href="https://github.com/nvborisenko" target="_blank"><img loading="lazy" src="https://github.com/nvborisenko.png" width="20" height="20" alt="nvborisenko's avatar"></a>Parts of the motion-canvas-player shadow root are now exposed using<!-- --> <code>part</code> and can be customized with CSS.<a class="pr_hMGy" title="Pull request #956" href="https://github.com/motion-canvas/motion-canvas/pull/956" target="_blank"><small>#<!-- -->956</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fiddles on this website now play automatically when scrolled into view.<a class="pr_hMGy" title="Pull request #1001" href="https://github.com/motion-canvas/motion-canvas/pull/1001" target="_blank"><small>#<!-- -->1001</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="CactusPuppy" href="https://github.com/CactusPuppy" target="_blank"><img loading="lazy" src="https://github.com/CactusPuppy.png" width="20" height="20" alt="CactusPuppy's avatar"></a>Account for italic fonts in cache.<a class="pr_hMGy" title="Pull request #968" href="https://github.com/motion-canvas/motion-canvas/pull/968" target="_blank"><small>#<!-- -->968</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="rogerpinho" href="https://github.com/rogerpinho" target="_blank"><img loading="lazy" src="https://github.com/rogerpinho.png" width="20" height="20" alt="rogerpinho's avatar"></a>Fix typo in the Quickstart Guide.<a class="pr_hMGy" title="Pull request #974" href="https://github.com/motion-canvas/motion-canvas/pull/974" target="_blank"><small>#<!-- -->974</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Properly handle <code>offset</code> when retrieving the absolute position of a node.<a class="pr_hMGy" title="Pull request #987" href="https://github.com/motion-canvas/motion-canvas/pull/987" target="_blank"><small>#<!-- -->987</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix the spline warning for reactive points.<a class="pr_hMGy" title="Pull request #981" href="https://github.com/motion-canvas/motion-canvas/pull/981" target="_blank"><small>#<!-- -->981</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.14.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.14.0</link>
            <guid>https://motioncanvas.io/blog/version-3.14.0</guid>
            <pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Shaders let you create custom visual effects]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a title="Experimental feature" href="/docs/experimental"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor" class="experimental"><path d="M19.8,18.4L14,10.67V6.5l1.35-1.69C15.61,4.48,15.38,4,14.96,4H9.04C8.62,4,8.39,4.48,8.65,4.81L10,6.5v4.17L4.2,18.4 C3.71,19.06,4.18,20,5,20h14C19.82,20,20.29,19.06,19.8,18.4z"></path></svg></a><a href="/docs/shaders">Shaders</a> let you create custom visual effects using WebGL.<a class="pr_hMGy" title="Pull request #929" href="https://github.com/motion-canvas/motion-canvas/pull/929" target="_blank"><small>#<!-- -->929</small></a><a class="pr_hMGy" title="Pull request #920" href="https://github.com/motion-canvas/motion-canvas/pull/920" target="_blank"><small>#<!-- -->920</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// Original shader created by ufffd</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// https://www.shadertoy.com/view/lcfXD8</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Shader</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token template-string string" style="color:var(--hl-string)">\</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">#version 300 es</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">precision highp float;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">in vec2 screenUV;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">out vec4 outColor;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">uniform float time;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">uniform vec2 resolution;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">#define g(p) dot(sin(p),cos(p.zxy)) //</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">float m(vec3 p){</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  return (1.0 + 0.2 * sin(p.y * 6e2))</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    * g(0.8 * g(8.0 * p) + 10.0 * p)</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    * (1.0 + sin(time + length(p.xy) / 0.1))</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    + 0.3 * sin(time * 0.15 + p.z * 5.0 + p.y)</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    * (2.0 + g((sin(time * 0.2 + p.z * 3.0) * 350.0 + 250.0) * p));</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">}</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">void main() {</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  vec3 r = normalize(vec3((screenUV - 0.5) * resolution, resolution.y));</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  vec3 p;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  vec3 f;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  float e = 50.0;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  float d;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  float i;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  for (p.z = time / 4.0; i++ &lt; 90.0 &amp;&amp; e &gt; 0.05; e = m(p += r * d)) {</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    d += 0.02 * e;</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  }</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="display:inline-block;color:var(--hl-string)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  f.x = 0.06 + 0.06 * sin(p.z);</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">  outColor = vec4(2.0 * m(p) - m(p - f) - m(p - f.yxy))</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">    * smoothstep(0.75, 1.05, 1.0 / d);</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)">}</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token template-string string" style="color:var(--hl-string)"></span><span class="token template-string template-punctuation string" style="color:var(--hl-string)">`</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Rect</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">shaders</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:var(--hl-tag)">Shader</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">view</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">.</span><span class="token tag script language-javascript property-access" style="color:var(--hl-tag)">size</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">waitFor</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">10</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The node inspector can be toggled on and off.<a class="pr_hMGy" title="Pull request #921" href="https://github.com/motion-canvas/motion-canvas/pull/921" target="_blank"><small>#<!-- -->921</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="jmaen" href="https://github.com/jmaen" target="_blank"><img loading="lazy" src="https://github.com/jmaen.png" width="20" height="20" alt="jmaen's avatar"></a>Number inputs can be edited by dragging left and right.<a class="pr_hMGy" title="Pull request #917" href="https://github.com/motion-canvas/motion-canvas/pull/917" target="_blank"><small>#<!-- -->917</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.13.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.13.0</link>
            <guid>https://motioncanvas.io/blog/version-3.13.0</guid>
            <pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[See what's actually going on inside your scenes.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>A new scene graph tab lets you peek into the contents of the scene.<a class="pr_hMGy" title="Pull request #909" href="https://github.com/motion-canvas/motion-canvas/pull/909" target="_blank"><small>#<!-- -->909</small></a><a class="pr_hMGy" title="Pull request #914" href="https://github.com/motion-canvas/motion-canvas/pull/914" target="_blank"><small>#<!-- -->914</small></a><a target="_blank" href="/assets/images/2024-01-10-version-3.13.0-scene-graph-a6f8f0e629acca25c78060de328bca22.png"><img loading="lazy" src="/assets/images/2024-01-10-version-3.13.0-scene-graph-a217ce11359e8c4276c49708ef8a9623.webp" width="1280" height="720" alt="Scene Graph Tab" class="blog-img img__Ss2"></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="jmaen" href="https://github.com/jmaen" target="_blank"><img loading="lazy" src="https://github.com/jmaen.png" width="20" height="20" alt="jmaen's avatar"></a>Holding <kbd>Shift</kbd> + <kbd>Ctrl</kbd> lets you drag over the timeline to select the range. <kbd>B</kbd> and <kbd>N</kbd> can be used to snap the beginning and end of the range to the playhead.<a class="pr_hMGy" title="Pull request #907" href="https://github.com/motion-canvas/motion-canvas/pull/907" target="_blank"><small>#<!-- -->907</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a title="Experimental feature" href="/docs/experimental"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor" class="experimental"><path d="M19.8,18.4L14,10.67V6.5l1.35-1.69C15.61,4.48,15.38,4,14.96,4H9.04C8.62,4,8.39,4.48,8.65,4.81L10,6.5v4.17L4.2,18.4 C3.71,19.06,4.18,20,5,20h14C19.82,20,20.29,19.06,19.8,18.4z"></path></svg></a>Editor plugins can now register custom inspectors that display information on the right side of the editor.<a class="pr_hMGy" title="Pull request #913" href="https://github.com/motion-canvas/motion-canvas/pull/913" target="_blank"><small>#<!-- -->913</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The mouse is tracked correctly when dragging time events.<a class="pr_hMGy" title="Pull request #912" href="https://github.com/motion-canvas/motion-canvas/pull/912" target="_blank"><small>#<!-- -->912</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.12.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.12.0</link>
            <guid>https://motioncanvas.io/blog/version-3.12.0</guid>
            <pubDate>Sun, 31 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Bit of a hefty update.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The points of a<!-- --> <a href="/api/2d/components/Line"><code>Line</code></a> <!-- -->can now be tweened.<a class="pr_hMGy" title="Pull request #853" href="https://github.com/motion-canvas/motion-canvas/pull/853" target="_blank"><small>#<!-- -->853</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> line </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Line</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Line</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">line</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">points</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">        </span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">150</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">70</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">        </span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">150</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">70</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">        </span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">0</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">70</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">      </span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">8</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">radius</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">20</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">closed</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">line</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">points</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">      </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">        </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token operator" style="color:var(--hl-punctuation)">-</span><span class="token number" style="color:var(--hl-number)">150</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">        </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">100</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">        </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">150</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">        </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">150</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">-</span><span class="token number" style="color:var(--hl-number)">70</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">        </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token operator" style="color:var(--hl-punctuation)">-</span><span class="token number" style="color:var(--hl-number)">150</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token operator" style="color:var(--hl-punctuation)">-</span><span class="token number" style="color:var(--hl-number)">70</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">      </span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">      </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">back</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Txt"><code>Txt</code></a> <!-- -->nodes can now be nested inside each other.<a class="pr_hMGy" title="Pull request #861" href="https://github.com/motion-canvas/motion-canvas/pull/861" target="_blank"><small>#<!-- -->861</small></a><div class="root_icgl margin-top--sm margin-bottom--sm codeOnly_lee0"><div class="layoutControl_X__N"><button class="icon_brRG active_qxTr" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:var(--hl-punctuation)">{</span><span class="token imports maybe-class-name">Txt</span><span class="token imports punctuation" style="color:var(--hl-punctuation)">,</span><span class="token imports"> makeScene2D</span><span class="token imports punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/2d'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">fill</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'#141414'</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Txt</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'white'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fontSize</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">32</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">720</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">textWrap</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      Whereas recognition of the inherent dignity and of the</span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token string" style="color:var(--hl-string)">' '</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag" style="color:var(--hl-tag)">Txt.i</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text">equal</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag" style="color:var(--hl-tag)">Txt.i</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"> and inalienable rights of all members of</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      the human family is the foundation of </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag" style="color:var(--hl-tag)">Txt.b</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text">freedom</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag" style="color:var(--hl-tag)">Txt.b</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text">,</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      justice and </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Txt</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">#25C281</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text">peace</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Txt</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"> in the world.</span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Txt</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/docs/hierarchy#querying-the-hierarchy">querying helpers</a> <!-- -->let you find nodes in the scene.<a class="pr_hMGy" title="Pull request #852" href="https://github.com/motion-canvas/motion-canvas/pull/852" target="_blank"><small>#<!-- -->852</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="rmhartog" href="https://github.com/rmhartog" target="_blank"><img loading="lazy" src="https://github.com/rmhartog.png" width="20" height="20" alt="rmhartog's avatar"></a>Transitions can now control which scene<!-- --> <a href="/api/core/transitions/#useTransition-useTransition-previousOnTop">is drawn on top</a>.<a class="pr_hMGy" title="Pull request #832" href="https://github.com/motion-canvas/motion-canvas/pull/832" target="_blank"><small>#<!-- -->832</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="rmhartog" href="https://github.com/rmhartog" target="_blank"><img loading="lazy" src="https://github.com/rmhartog.png" width="20" height="20" alt="rmhartog's avatar"></a>A new<!-- --> <a href="/api/2d/components/Video#playbackRate"><code>Video.playbackRate</code></a> <!-- -->property lets you control the speed of a video.<a class="pr_hMGy" title="Pull request #831" href="https://github.com/motion-canvas/motion-canvas/pull/831" target="_blank"><small>#<!-- -->831</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>This version introduces the concept of experimental features. Marked with<!-- --> <a title="Experimental feature" href="/docs/experimental"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor" class="experimental"><path d="M19.8,18.4L14,10.67V6.5l1.35-1.69C15.61,4.48,15.38,4,14.96,4H9.04C8.62,4,8.39,4.48,8.65,4.81L10,6.5v4.17L4.2,18.4 C3.71,19.06,4.18,20,5,20h14C19.82,20,20.29,19.06,19.8,18.4z"></path></svg></a>, these features are meant mostly for testing and gathering feedback. Find out more about them<!-- --> <a href="/docs/experimental">in this dedicated section</a>.<a class="pr_hMGy" title="Pull request #876" href="https://github.com/motion-canvas/motion-canvas/pull/876" target="_blank"><small>#<!-- -->876</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a title="Experimental feature" href="/docs/experimental"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor" class="experimental"><path d="M19.8,18.4L14,10.67V6.5l1.35-1.69C15.61,4.48,15.38,4,14.96,4H9.04C8.62,4,8.39,4.48,8.65,4.81L10,6.5v4.17L4.2,18.4 C3.71,19.06,4.18,20,5,20h14C19.82,20,20.29,19.06,19.8,18.4z"></path></svg></a>New <a href="/docs/plugins/editor">Editor Plugins</a> allow you to extend the editor's interface. With them, you can define custom tabs in the sidebar and draw overlays on top of the animation preview or the presenter.<a class="pr_hMGy" title="Pull request #884" href="https://github.com/motion-canvas/motion-canvas/pull/884" target="_blank"><small>#<!-- -->884</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The timeline can now be scrubbed by holding down <kbd>LMB</kbd> and dragging left or right.<a class="pr_hMGy" title="Pull request #862" href="https://github.com/motion-canvas/motion-canvas/pull/862" target="_blank"><small>#<!-- -->862</small></a><br><small>For complex animation, dragging to the left may lag a bit since the entire generator must be re-run each time.</small></li><li class="element_spNy"><a class="contributor_Ndjr" title="jmaen" href="https://github.com/jmaen" target="_blank"><img loading="lazy" src="https://github.com/jmaen.png" width="20" height="20" alt="jmaen's avatar"></a>Hovering over the audio icon now reveals a volume slider that lets you adjust the volume.<a class="pr_hMGy" title="Pull request #872" href="https://github.com/motion-canvas/motion-canvas/pull/872" target="_blank"><small>#<!-- -->872</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Vija02" href="https://github.com/Vija02" target="_blank"><img loading="lazy" src="https://github.com/Vija02.png" width="20" height="20" alt="Vija02's avatar"></a>The <kbd>ArrowUp</kbd> and <kbd>ArrowDown</kbd> keys allow you to control the volume.<a class="pr_hMGy" title="Pull request #856" href="https://github.com/motion-canvas/motion-canvas/pull/856" target="_blank"><small>#<!-- -->856</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The animation range is no longer editable by default. Just like with the audio track, hold <kbd>SHIFT</kbd> before dragging to edit it.<a class="pr_hMGy" title="Pull request #862" href="https://github.com/motion-canvas/motion-canvas/pull/862" target="_blank"><small>#<!-- -->862</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Vaibhavi-Sita" href="https://github.com/Vaibhavi-Sita" target="_blank"><img loading="lazy" src="https://github.com/Vaibhavi-Sita.png" width="20" height="20" alt="Vaibhavi-Sita's avatar"></a>When looping is disabled, the editor will seek back to the start of the animation and stop there instead of pausing at the end.<a class="pr_hMGy" title="Pull request #823" href="https://github.com/motion-canvas/motion-canvas/pull/823" target="_blank"><small>#<!-- -->823</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="CactusPuppy" href="https://github.com/CactusPuppy" target="_blank"><img loading="lazy" src="https://github.com/CactusPuppy.png" width="20" height="20" alt="CactusPuppy's avatar"></a><a href="/api/core/types/Vector2#topLeft"><code>Vector2</code></a> <!-- -->now includes static properties representing each type of origin.<a class="pr_hMGy" title="Pull request #855" href="https://github.com/motion-canvas/motion-canvas/pull/855" target="_blank"><small>#<!-- -->855</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Node#applyState"><code>applyState</code></a> <!-- -->can now be used to tween to the new state and not just immediately apply it.<a class="pr_hMGy" title="Pull request #859" href="https://github.com/motion-canvas/motion-canvas/pull/859" target="_blank"><small>#<!-- -->859</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The spawner has been deprecated in favor of the children property.<a class="pr_hMGy" title="Pull request #858" href="https://github.com/motion-canvas/motion-canvas/pull/858" target="_blank"><small>#<!-- -->858</small></a><div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// before</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">spawner</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript arrow operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript function" style="color:var(--hl-function)">range</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript function" style="color:var(--hl-function)">count</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">.</span><span class="token tag script language-javascript method function property-access" style="color:var(--hl-function)">map</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript arrow operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag script language-javascript tag" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// after</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">range</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">count</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">map</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Node</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="rmhartog" href="https://github.com/rmhartog" target="_blank"><img loading="lazy" src="https://github.com/rmhartog.png" width="20" height="20" alt="rmhartog's avatar"></a>Project configuration now supports glob patterns<a class="pr_hMGy" title="Pull request #834" href="https://github.com/motion-canvas/motion-canvas/pull/834" target="_blank"><small>#<!-- -->834</small></a><div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> motionCanvas </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/vite-plugin'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">defineConfig</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'vite'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">defineConfig</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  plugins</span><span class="token operator" style="color:var(--hl-punctuation)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token function" style="color:var(--hl-function)">motionCanvas</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">      project</span><span class="token operator" style="color:var(--hl-punctuation)">:</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'./src/projects/*.ts'</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="rmhartog" href="https://github.com/rmhartog" target="_blank"><img loading="lazy" src="https://github.com/rmhartog.png" width="20" height="20" alt="rmhartog's avatar"></a>Opacity is clamped between <code>0</code> and <code>1</code>.<a class="pr_hMGy" title="Pull request #835" href="https://github.com/motion-canvas/motion-canvas/pull/835" target="_blank"><small>#<!-- -->835</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Errors that occur when loading an image are now properly reported in the editor.<a class="pr_hMGy" title="Pull request #847" href="https://github.com/motion-canvas/motion-canvas/pull/847" target="_blank"><small>#<!-- -->847</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Added a missing <code>middle</code> property to the <code>LayoutProps</code> <!-- -->interface.<a class="pr_hMGy" title="Pull request #891" href="https://github.com/motion-canvas/motion-canvas/pull/891" target="_blank"><small>#<!-- -->891</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Cardinal points now correctly account for the Node's offset.<a class="pr_hMGy" title="Pull request #883" href="https://github.com/motion-canvas/motion-canvas/pull/883" target="_blank"><small>#<!-- -->883</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>"Go to source" actions should work again.<a class="pr_hMGy" title="Pull request #895" href="https://github.com/motion-canvas/motion-canvas/pull/895" target="_blank"><small>#<!-- -->895</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="shaikan" href="https://github.com/shaikan" target="_blank"><img loading="lazy" src="https://github.com/shaikan.png" width="20" height="20" alt="shaikan's avatar"></a>Unusual characters in file names are now properly handled.<a class="pr_hMGy" title="Pull request #821" href="https://github.com/motion-canvas/motion-canvas/pull/821" target="_blank"><small>#<!-- -->821</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="SleeklyCoding" href="https://github.com/SleeklyCoding" target="_blank"><img loading="lazy" src="https://github.com/SleeklyCoding.png" width="20" height="20" alt="SleeklyCoding's avatar"></a>When opening the output directory, it will be automatically created if it doesn't exist.<a class="pr_hMGy" title="Pull request #787" href="https://github.com/motion-canvas/motion-canvas/pull/787" target="_blank"><small>#<!-- -->787</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fixed line jitter under certain conditions.<a class="pr_hMGy" title="Pull request #863" href="https://github.com/motion-canvas/motion-canvas/pull/863" target="_blank"><small>#<!-- -->863</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="rmhartog" href="https://github.com/rmhartog" target="_blank"><img loading="lazy" src="https://github.com/rmhartog.png" width="20" height="20" alt="rmhartog's avatar"></a>Correctly calculate bounding boxes of Txt nodes.<a class="pr_hMGy" title="Pull request #836" href="https://github.com/motion-canvas/motion-canvas/pull/836" target="_blank"><small>#<!-- -->836</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fixed tweening cardinal points.<a class="pr_hMGy" title="Pull request #829" href="https://github.com/motion-canvas/motion-canvas/pull/829" target="_blank"><small>#<!-- -->829</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.11.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.11.0</link>
            <guid>https://motioncanvas.io/blog/version-3.11.0</guid>
            <pubDate>Sat, 14 Oct 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Nodes can now be skewed.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Nodes can now be <a href="/api/2d/components/Node#skew">skewed</a>:<a class="pr_hMGy" title="Pull request #803" href="https://github.com/motion-canvas/motion-canvas/pull/803" target="_blank"><small>#<!-- -->803</small></a><div class="root_icgl margin-top--sm margin-bottom--sm"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG active_qxTr" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> ref </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Img</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token plain"> view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Img</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">ref</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">skew</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">24</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">12</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">src</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">https://images.unsplash.com/photo-1696931073577-5638a6891e1e</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">240</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">radius</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">20</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">skew</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">24</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">12</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> easeOutElastic</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">back</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="levirs565" href="https://github.com/levirs565" target="_blank"><img loading="lazy" src="https://github.com/levirs565.png" width="20" height="20" alt="levirs565's avatar"></a>New<!-- --> <a href="/api/2d/components/SVG"><code>SVG</code></a> <!-- -->node lets you display and tween SVG graphics.<a class="pr_hMGy" title="Pull request #763" href="https://github.com/motion-canvas/motion-canvas/pull/763" target="_blank"><small>#<!-- -->763</small></a><br><small>(The amount of supported SVG features is still limited, the node was designed mainly to support LaTeX tweening in the future update)</small></li><li class="element_spNy"><a class="contributor_Ndjr" title="SleeklyCoding" href="https://github.com/SleeklyCoding" target="_blank"><img loading="lazy" src="https://github.com/SleeklyCoding.png" width="20" height="20" alt="SleeklyCoding's avatar"></a>A new <code>lineCount</code> property lets you retrieve the number of lines in a code block.<a class="pr_hMGy" title="Pull request #802" href="https://github.com/motion-canvas/motion-canvas/pull/802" target="_blank"><small>#<!-- -->802</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/core/transitions#slideTransition"><code>slideTransition</code></a> <!-- -->now allows for diagonal movement defined using<!-- --> <a href="/api/core/types/Origin"><code>Origin</code></a>.<a class="pr_hMGy" title="Pull request #801" href="https://github.com/motion-canvas/motion-canvas/pull/801" target="_blank"><small>#<!-- -->801</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Any external changes made to the audio file are now picked up and automatically reflected in the editor.<a class="pr_hMGy" title="Pull request #793" href="https://github.com/motion-canvas/motion-canvas/pull/793" target="_blank"><small>#<!-- -->793</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>When rendering, an estimated remaining time is displayed in the bottom right.<a class="pr_hMGy" title="Pull request #795" href="https://github.com/motion-canvas/motion-canvas/pull/795" target="_blank"><small>#<!-- -->795</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="me-nkr" href="https://github.com/me-nkr" target="_blank"><img loading="lazy" src="https://github.com/me-nkr.png" width="20" height="20" alt="me-nkr's avatar"></a>New playback controls for seeking to the very beginning and end of the animation.<a class="pr_hMGy" title="Pull request #814" href="https://github.com/motion-canvas/motion-canvas/pull/814" target="_blank"><small>#<!-- -->814</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="alsongarbuja" href="https://github.com/alsongarbuja" target="_blank"><img loading="lazy" src="https://github.com/alsongarbuja.png" width="20" height="20" alt="alsongarbuja's avatar"></a>When dragging time events, a line indicator is displayed to help precisely align the event with the audio.<a class="pr_hMGy" title="Pull request #808" href="https://github.com/motion-canvas/motion-canvas/pull/808" target="_blank"><small>#<!-- -->808</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Holding <kbd title="Middle mouse button">MMB</kbd> allows you to drag the timeline left and right.<a class="pr_hMGy" title="Pull request #794" href="https://github.com/motion-canvas/motion-canvas/pull/794" target="_blank"><small>#<!-- -->794</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>A new error warns about a missing image source.<a class="pr_hMGy" title="Pull request #817" href="https://github.com/motion-canvas/motion-canvas/pull/817" target="_blank"><small>#<!-- -->817</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Specific event names, such as <code>constructor</code> no longer cause the editor to crash.<a class="pr_hMGy" title="Pull request #819" href="https://github.com/motion-canvas/motion-canvas/pull/819" target="_blank"><small>#<!-- -->819</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Added missing <code>Curve</code> properties to <code>Circle</code>.<a class="pr_hMGy" title="Pull request #805" href="https://github.com/motion-canvas/motion-canvas/pull/805" target="_blank"><small>#<!-- -->805</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Arrow heads now always point in the correct direction.<a class="pr_hMGy" title="Pull request #792" href="https://github.com/motion-canvas/motion-canvas/pull/792" target="_blank"><small>#<!-- -->792</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.10.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.10.0</link>
            <guid>https://motioncanvas.io/blog/version-3.10.0</guid>
            <pubDate>Sun, 23 Jul 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[The{' '}]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The<!-- --> <a href="/api/2d/components/Rect"><code>Rect</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Circle"><code>Circle</code></a> <!-- -->nodes now extend<!-- --> <a href="/api/2d/components/Curve"><code>Curve</code></a>giving them access to all its properties and methods:<a class="pr_hMGy" title="Pull request #771" href="https://github.com/motion-canvas/motion-canvas/pull/771" target="_blank"><small>#<!-- -->771</small></a><a class="pr_hMGy" title="Pull request #759" href="https://github.com/motion-canvas/motion-canvas/pull/759" target="_blank"><small>#<!-- -->759</small></a><div class="root_icgl margin-top--sm margin-bottom--sm"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG active_qxTr" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> ref </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Circle</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Circle</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">ref</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">160</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">8</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">endAngle</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">270</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">endArrow</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">start</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">rotation</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">180</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> easeInCubic</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">start</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">end</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">end</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">ref</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">rotation</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">360</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> easeOutCubic</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="levirs565" href="https://github.com/levirs565" target="_blank"><img loading="lazy" src="https://github.com/levirs565.png" width="20" height="20" alt="levirs565's avatar"></a>New SVG<!-- --> <a href="/api/2d/components/Path"><code>Path</code></a> <!-- -->component:<a class="pr_hMGy" title="Pull request #700" href="https://github.com/motion-canvas/motion-canvas/pull/700" target="_blank"><small>#<!-- -->700</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:3"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Path</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">scale</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">8</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">96</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">data</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">        </span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'M4 6.47L5.76 10H20v8H4V6.47M22 4h-4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4z'</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag script language-javascript" style="color:var(--hl-tag)">      </span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/api/2d/components/Grid#start"><code>start</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Grid#end"><code>end</code></a> <!-- -->signals for animating the<!-- --> <a href="/api/2d/components/Grid"><code>Grid</code></a> <!-- -->node.<a class="pr_hMGy" title="Pull request #761" href="https://github.com/motion-canvas/motion-canvas/pull/761" target="_blank"><small>#<!-- -->761</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New helper methods for managing references: <a class="pr_hMGy" title="Pull request #775" href="https://github.com/motion-canvas/motion-canvas/pull/775" target="_blank"><small>#<!-- -->775</small></a><ul><li><a href="/api/core/utils#createRefArray"><code>createRefArray</code></a></li><li><a href="/api/core/utils#createRefMap"><code>createRefMap</code></a></li></ul></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Img"><code>Img</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Video"><code>Video</code></a> <!-- -->nodes with radius are automatically clipped.<a class="pr_hMGy" title="Pull request #773" href="https://github.com/motion-canvas/motion-canvas/pull/773" target="_blank"><small>#<!-- -->773</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a><a href="/api/core/types/BBox"><code>BBox</code></a> <!-- -->transformation methods accept<!-- --> <a href="/api/core/types/Matrix2D#PossibleMatrix2D"><code>PossibleMatrix2D</code></a>.<a class="pr_hMGy" title="Pull request #770" href="https://github.com/motion-canvas/motion-canvas/pull/770" target="_blank"><small>#<!-- -->770</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Layout#middle"><code>middle</code></a> <a href="/docs/layouts#cardinal-directions">cardinal point</a>.<a class="pr_hMGy" title="Pull request #758" href="https://github.com/motion-canvas/motion-canvas/pull/758" target="_blank"><small>#<!-- -->758</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/api/core/types/Vector2#rotate"><code>rotate</code></a> <!-- -->and<!-- --> <a href="/api/core/types/Vector2#polarLerp"><code>polarLerp</code></a> <!-- -->methods for<!-- --> <a href="/api/core/types/Vector2"><code>Vector2</code></a>.<a class="pr_hMGy" title="Pull request #756" href="https://github.com/motion-canvas/motion-canvas/pull/756" target="_blank"><small>#<!-- -->756</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Logon27" href="https://github.com/Logon27" target="_blank"><img loading="lazy" src="https://github.com/Logon27.png" width="20" height="20" alt="Logon27's avatar"></a>The editor now lets you copy the mouse coordinates by pressing <kbd>P</kbd><a class="pr_hMGy" title="Pull request #737" href="https://github.com/motion-canvas/motion-canvas/pull/737" target="_blank"><small>#<!-- -->737</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Node#restore"><code>restore()</code></a> <!-- -->can be called without duration to restore the state immediately.<a class="pr_hMGy" title="Pull request #736" href="https://github.com/motion-canvas/motion-canvas/pull/736" target="_blank"><small>#<!-- -->736</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fixed the "Last updated by" information on documentation pages.<a class="pr_hMGy" title="Pull request #776" href="https://github.com/motion-canvas/motion-canvas/pull/776" target="_blank"><small>#<!-- -->776</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Caesarovich" href="https://github.com/Caesarovich" target="_blank"><img loading="lazy" src="https://github.com/Caesarovich.png" width="20" height="20" alt="Caesarovich's avatar"></a>Timeline correctly displays small time ranges.<a class="pr_hMGy" title="Pull request #739" href="https://github.com/motion-canvas/motion-canvas/pull/739" target="_blank"><small>#<!-- -->739</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>It's no longer possible to spawn multiple color pickers.<a class="pr_hMGy" title="Pull request #747" href="https://github.com/motion-canvas/motion-canvas/pull/747" target="_blank"><small>#<!-- -->747</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.9.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.9.0</link>
            <guid>https://motioncanvas.io/blog/version-3.9.0</guid>
            <pubDate>Mon, 29 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Big changes. Big plans.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>All entities are now imported from the main entry point of each package. The only exception is the <code>CodeBlock</code> node which still requires the full import path:<div class="margin-top--sm margin-bottom--sm language-ts codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-ts codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">all</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> createRef</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/core'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> Circle</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/2d'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// the only exception:</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain">CodeBlock</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> insert</span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">from</span><span class="token plain"> </span><span class="token string" style="color:var(--hl-string)">'@motion-canvas/2d/lib/components/CodeBlock'</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>Importing from subdirectories will continue to work until version 4.<a class="pr_hMGy" title="Pull request #721" href="https://github.com/motion-canvas/motion-canvas/pull/721" target="_blank"><small>#<!-- -->721</small></a><a class="pr_hMGy" title="Pull request #710" href="https://github.com/motion-canvas/motion-canvas/pull/710" target="_blank"><small>#<!-- -->710</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/core/plugin/Plugin#presenter"><code>presenter</code></a> <!-- -->and<!-- --> <a href="/api/core/plugin/Plugin#renderer"><code>renderer</code></a> <!-- -->plugin hooks.<br>You can learn how to create your own plugins in the new<!-- --> <a href="/docs/plugins">Authoring Plugins</a> guide.<a class="pr_hMGy" title="Pull request #723" href="https://github.com/motion-canvas/motion-canvas/pull/723" target="_blank"><small>#<!-- -->723</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ajs1998" href="https://github.com/ajs1998" target="_blank"><img loading="lazy" src="https://github.com/ajs1998.png" width="20" height="20" alt="ajs1998's avatar"></a>New<!-- --> <a href="/api/core/scenes/Random#gauss"><code>Random.gauss()</code></a> <!-- -->method lets you generate random numbers using a gaussian (normal) distribution.<a class="pr_hMGy" title="Pull request #709" href="https://github.com/motion-canvas/motion-canvas/pull/709" target="_blank"><small>#<!-- -->709</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Updated sidebar design lets you hide the timeline and collapse panels by dragging.<a class="pr_hMGy" title="Pull request #692" href="https://github.com/motion-canvas/motion-canvas/pull/692" target="_blank"><small>#<!-- -->692</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Application-wide settings let you configure the project defaults and change the editor appearance. You can edit them in the settings tab on the left.<a class="pr_hMGy" title="Pull request #697" href="https://github.com/motion-canvas/motion-canvas/pull/697" target="_blank"><small>#<!-- -->697</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>You can use a new eye dropper tool to pick colors from the canvas<br>(see<!-- --> <a href="https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API#browser_compatibility" target="_blank" rel="noopener noreferrer">browser compatibility</a>)<a class="pr_hMGy" title="Pull request #691" href="https://github.com/motion-canvas/motion-canvas/pull/691" target="_blank"><small>#<!-- -->691</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Error stack traces now include function names.<a class="pr_hMGy" title="Pull request #693" href="https://github.com/motion-canvas/motion-canvas/pull/693" target="_blank"><small>#<!-- -->693</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Overall improvements to the Fiddle editor.<a class="pr_hMGy" title="Pull request #706" href="https://github.com/motion-canvas/motion-canvas/pull/706" target="_blank"><small>#<!-- -->706</small></a><a class="pr_hMGy" title="Pull request #712" href="https://github.com/motion-canvas/motion-canvas/pull/712" target="_blank"><small>#<!-- -->712</small></a><a class="pr_hMGy" title="Pull request #713" href="https://github.com/motion-canvas/motion-canvas/pull/713" target="_blank"><small>#<!-- -->713</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix <code>package.json</code> entry.<a class="pr_hMGy" title="Pull request #720" href="https://github.com/motion-canvas/motion-canvas/pull/720" target="_blank"><small>#<!-- -->720</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix collapsable sections.<a class="pr_hMGy" title="Pull request #698" href="https://github.com/motion-canvas/motion-canvas/pull/698" target="_blank"><small>#<!-- -->698</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="rtkid-nt" href="https://github.com/rtkid-nt" target="_blank"><img loading="lazy" src="https://github.com/rtkid-nt.png" width="20" height="20" alt="rtkid-nt's avatar"></a>Use project variables when rendering/presenting.<a class="pr_hMGy" title="Pull request #690" href="https://github.com/motion-canvas/motion-canvas/pull/690" target="_blank"><small>#<!-- -->690</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.8.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.8.0</link>
            <guid>https://motioncanvas.io/blog/version-3.8.0</guid>
            <pubDate>Sat, 13 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[We don't talk about v3.7.0]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The brand new <a href="/docs/rendering/video">Video (FFmpeg)</a> <!-- -->exporter lets you render your animations directly to a video file. It's included by default (with the option to opt out) in all new projects created with <code>npm init @motion-canvas</code>. Check out the docs to learn<!-- --> <a href="/docs/rendering/video#existing-project">how to install it</a> <!-- -->in your existing projects.<a class="pr_hMGy" title="Pull request #673" href="https://github.com/motion-canvas/motion-canvas/pull/673" target="_blank"><small>#<!-- -->673</small></a><a class="pr_hMGy" title="Pull request #660" href="https://github.com/motion-canvas/motion-canvas/pull/660" target="_blank"><small>#<!-- -->660</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>An improved rendering button provides visual feedback about the rendering process.<a class="pr_hMGy" title="Pull request #662" href="https://github.com/motion-canvas/motion-canvas/pull/662" target="_blank"><small>#<!-- -->662</small></a><a class="pr_hMGy" title="Pull request #681" href="https://github.com/motion-canvas/motion-canvas/pull/681" target="_blank"><small>#<!-- -->681</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>A new <code>OUTPUT DIRECTORY</code> button lets you reveal the current output directory in your file explorer. You can find it directly below the<!-- --> <code>RENDER</code> button.<a class="pr_hMGy" title="Pull request #663" href="https://github.com/motion-canvas/motion-canvas/pull/663" target="_blank"><small>#<!-- -->663</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Collapsible panels are now animated.<a class="pr_hMGy" title="Pull request #671" href="https://github.com/motion-canvas/motion-canvas/pull/671" target="_blank"><small>#<!-- -->671</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Array values, such as points of a Line, are now displayed in the inspector.<a class="pr_hMGy" title="Pull request #670" href="https://github.com/motion-canvas/motion-canvas/pull/670" target="_blank"><small>#<!-- -->670</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The <code>create</code> package now supports command-line arguments for providing answers without having to go through the interactive prompt:<a class="pr_hMGy" title="Pull request #668" href="https://github.com/motion-canvas/motion-canvas/pull/668" target="_blank"><small>#<!-- -->668</small></a><div class="margin-top--sm margin-bottom--sm language-shell codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-shell codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token function" style="color:var(--hl-function)">npm</span><span class="token plain"> init @motion-canvas@latest -- --name Hello --path ./hello --language ts</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Meta fields can declare descriptions. When hovering over the field in the editor, the description will be displayed in a form of a tooltip.<a class="pr_hMGy" title="Pull request #664" href="https://github.com/motion-canvas/motion-canvas/pull/664" target="_blank"><small>#<!-- -->664</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New hooks let plugins extend the behavior of the player (The plugin documentation will be available soon).<a class="pr_hMGy" title="Pull request #679" href="https://github.com/motion-canvas/motion-canvas/pull/679" target="_blank"><small>#<!-- -->679</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Correctly support URLs to external images.<a class="pr_hMGy" title="Pull request #678" href="https://github.com/motion-canvas/motion-canvas/pull/678" target="_blank"><small>#<!-- -->678</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Remove the yellow dependency pre-bundling warning.<a class="pr_hMGy" title="Pull request #676" href="https://github.com/motion-canvas/motion-canvas/pull/676" target="_blank"><small>#<!-- -->676</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix editing the audio offset by dragging the waveform.<a class="pr_hMGy" title="Pull request #674" href="https://github.com/motion-canvas/motion-canvas/pull/674" target="_blank"><small>#<!-- -->674</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Ignore children with disabled layout.<a class="pr_hMGy" title="Pull request #669" href="https://github.com/motion-canvas/motion-canvas/pull/669" target="_blank"><small>#<!-- -->669</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Prevent Color tree shaking.<a class="pr_hMGy" title="Pull request #666" href="https://github.com/motion-canvas/motion-canvas/pull/666" target="_blank"><small>#<!-- -->666</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.6.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.6.0</link>
            <guid>https://motioncanvas.io/blog/version-3.6.0</guid>
            <pubDate>Mon, 08 May 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[The Cardinal Update]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/docs/layouts#cardinal-directions">Cardinal points</a> let you position nodes relative to their corners and edges<a class="pr_hMGy" title="Pull request #636" href="https://github.com/motion-canvas/motion-canvas/pull/636" target="_blank"><small>#<!-- -->636</small></a><div class="root_icgl margin-top--sm margin-bottom--sm previewOnly_FFUw"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG active_qxTr" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:4"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> rect </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">Rect</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Rect</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">rect</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">width</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">height</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">100</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">rotation</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">10</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#333333'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Rect</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#e6a700'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">rotation</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript function" style="color:var(--hl-function)">rect</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">.</span><span class="token tag script language-javascript property-access" style="color:var(--hl-tag)">rotation</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// Try changing "right" to "top"</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">right</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript function" style="color:var(--hl-function)">rect</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">.</span><span class="token tag script language-javascript property-access" style="color:var(--hl-tag)">left</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Rect</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">100</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'#e13238'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">rotation</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">10</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">        </span><span class="token tag attr-name" style="color:var(--hl-variable)">bottomLeft</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript function" style="color:var(--hl-function)">rect</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">.</span><span class="token tag script language-javascript property-access" style="color:var(--hl-tag)">bottomRight</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">rect</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">rotation</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">10</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">to</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token operator" style="color:var(--hl-punctuation)">-</span><span class="token number" style="color:var(--hl-number)">10</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Ray"><code>Ray</code></a> <!-- -->node lets you easily define simple lines between two points.<a class="pr_hMGy" title="Pull request #628" href="https://github.com/motion-canvas/motion-canvas/pull/628" target="_blank"><small>#<!-- -->628</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New methods for chaining animations together:<a class="pr_hMGy" title="Pull request #651" href="https://github.com/motion-canvas/motion-canvas/pull/651" target="_blank"><small>#<!-- -->651</small></a><div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">circle</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">scale</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.5</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// tween to another value</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">to</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// wait for one second</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">wait</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// tween back to the initial value</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">back</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0.2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// execute a callback</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">do</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:var(--hl-punctuation)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">circle</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">fill</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token string" style="color:var(--hl-string)">'red'</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token comment" style="color:var(--hl-comment);font-style:var(--hl-comment-style)">// run the given generator</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">run</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token function" style="color:var(--hl-function)">circle</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token property-access">position</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">y</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">100</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="squigglesdev" href="https://github.com/squigglesdev" target="_blank"><img loading="lazy" src="https://github.com/squigglesdev.png" width="20" height="20" alt="squigglesdev's avatar"></a>New<!-- --> <a href="/api/core/flow#loopFor"><code>loopFor</code></a> <!-- -->and<!-- --> <a href="/api/core/flow#loopUntil"><code>loopUntil</code></a> <!-- -->flow functions.<a class="pr_hMGy" title="Pull request #650" href="https://github.com/motion-canvas/motion-canvas/pull/650" target="_blank"><small>#<!-- -->650</small></a><a class="pr_hMGy" title="Pull request #624" href="https://github.com/motion-canvas/motion-canvas/pull/624" target="_blank"><small>#<!-- -->624</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>External changes to images are now automatically reflected in the preview.<a class="pr_hMGy" title="Pull request #641" href="https://github.com/motion-canvas/motion-canvas/pull/641" target="_blank"><small>#<!-- -->641</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/api/core/types/Vector2#static-fromDegrees"><code>fromDegrees</code></a>,<!-- --> <a href="/api/core/types/Vector2#static-createArcLerp"><code>createArcLerp</code></a> <!-- -->and<!-- --> <a href="/api/core/types/Vector2#mod"><code>mod</code></a> <code>Vector2</code> methods.<a class="pr_hMGy" title="Pull request #640" href="https://github.com/motion-canvas/motion-canvas/pull/640" target="_blank"><small>#<!-- -->640</small></a><a class="pr_hMGy" title="Pull request #622" href="https://github.com/motion-canvas/motion-canvas/pull/622" target="_blank"><small>#<!-- -->622</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Curve#completion"><code>completion</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Curve#arcLength"><code>arcLength</code></a>properties for curves.<a class="pr_hMGy" title="Pull request #627" href="https://github.com/motion-canvas/motion-canvas/pull/627" target="_blank"><small>#<!-- -->627</small></a><a class="pr_hMGy" title="Pull request #635" href="https://github.com/motion-canvas/motion-canvas/pull/635" target="_blank"><small>#<!-- -->635</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/core/utils#DEG2RAD"><code>DEG2RAD</code></a> <!-- -->and<!-- --> <a href="/api/core/utils#RAD2DEG"><code>RAD2DEG</code></a> <!-- -->constants for converting between degrees and radians.<a class="pr_hMGy" title="Pull request #630" href="https://github.com/motion-canvas/motion-canvas/pull/630" target="_blank"><small>#<!-- -->630</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>You can now toggle fiddles between the code<!-- --> <sub><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></sub>, editor<!-- --> <sub><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></sub> <!-- -->and preview<!-- --> <sub><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></sub> <!-- -->mode (You can try it out in the example above).<a class="pr_hMGy" title="Pull request #642" href="https://github.com/motion-canvas/motion-canvas/pull/642" target="_blank"><small>#<!-- -->642</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="someguythatcodes" href="https://github.com/someguythatcodes" target="_blank"><img loading="lazy" src="https://github.com/someguythatcodes.png" width="20" height="20" alt="someguythatcodes's avatar"></a>Clear DependencyContext promises once resolved.<a class="pr_hMGy" title="Pull request #617" href="https://github.com/motion-canvas/motion-canvas/pull/617" target="_blank"><small>#<!-- -->617</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix fiddle accessibility.<a class="pr_hMGy" title="Pull request #647" href="https://github.com/motion-canvas/motion-canvas/pull/647" target="_blank"><small>#<!-- -->647</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix cyclic dependency in cardinal points.<a class="pr_hMGy" title="Pull request #645" href="https://github.com/motion-canvas/motion-canvas/pull/645" target="_blank"><small>#<!-- -->645</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Correctly append Txt nodes to view.<a class="pr_hMGy" title="Pull request #644" href="https://github.com/motion-canvas/motion-canvas/pull/644" target="_blank"><small>#<!-- -->644</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix taking snapshots.<a class="pr_hMGy" title="Pull request #638" href="https://github.com/motion-canvas/motion-canvas/pull/638" target="_blank"><small>#<!-- -->638</small></a><a class="pr_hMGy" title="Pull request #643" href="https://github.com/motion-canvas/motion-canvas/pull/643" target="_blank"><small>#<!-- -->643</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="gmile" href="https://github.com/gmile" target="_blank"><img loading="lazy" src="https://github.com/gmile.png" width="20" height="20" alt="gmile's avatar"></a>Fix a typo in a viewport ID.<a class="pr_hMGy" title="Pull request #620" href="https://github.com/motion-canvas/motion-canvas/pull/620" target="_blank"><small>#<!-- -->620</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.5.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.5.0</link>
            <guid>https://motioncanvas.io/blog/version-3.5.0</guid>
            <pubDate>Thu, 06 Apr 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New{' '}]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/docs/bezier-curves"><code>Bézier</code></a> <!-- -->nodes let you easily create splines consisting of only one segment:<!-- --> <a class="pr_hMGy" title="Pull request #603" href="https://github.com/motion-canvas/motion-canvas/pull/603" target="_blank"><small>#<!-- -->603</small></a><div class="root_icgl margin-top--sm margin-bottom--sm"><div class="layoutControl_X__N"><button class="icon_brRG" title="Source code"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"></path></svg></button><button class="icon_brRG active_qxTr" title="Editor with preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 15h8v-2H3v2zm0 4h8v-2H3v2zm0-8h8V9H3v2zm0-6v2h8V5H3zm10 0h8v14h-8V5z"></path></svg></button><button class="icon_brRG" title="Preview"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"></path></svg></button></div><div class="preview_C9cZ" style="aspect-ratio:4"><div>Press play to preview the animation</div></div><div class="controls_R4ai"><div class="section_UscS"></div><div class="section_UscS"><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M8 5v14l11-7z"></path></svg></button><button class="icon_brRG"><svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"></path></svg></button></div><div class="section_UscS"><div class="dropdown dropdown--right picker_Whdf"><a class="navbar__link" href="#">Cubic Bezier</a><ul class="dropdown__menu"><li><a href="#" class="dropdown__link dropdown__link--active">Cubic Bezier</a></li><li><a href="#" class="dropdown__link">Quadratic Bezier</a></li></ul></div></div></div><div class="editor_xQGp"><div class="source_Dq6N language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token keyword" style="color:var(--hl-keyword)">import</span><span class="token plain"> </span><span class="token spread operator" style="color:var(--hl-punctuation)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token keyword" style="color:var(--hl-keyword)">export</span><span class="token plain"> </span><span class="token keyword" style="color:var(--hl-keyword)">default</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">makeScene2D</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token keyword" style="color:var(--hl-keyword)">function</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--hl-punctuation)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">const</span><span class="token plain"> bezier </span><span class="token operator" style="color:var(--hl-punctuation)">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:var(--hl-function)">createRef</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&lt;</span><span class="token generic-function generic class-name" style="color:var(--hl-class)">CubicBezier</span><span class="token generic-function generic class-name operator" style="color:var(--hl-punctuation)">&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  view</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">CubicBezier</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">ref</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--hl-tag)">bezier</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">6</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">p0</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">0</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">p1</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">p2</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">      </span><span class="token tag attr-name" style="color:var(--hl-variable)">p3</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">0</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">    </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">bezier</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">start</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain">  </span><span class="token keyword" style="color:var(--hl-keyword)">yield</span><span class="token operator" style="color:var(--hl-punctuation)">*</span><span class="token plain"> </span><span class="token function" style="color:var(--hl-function)">bezier</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">start</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">end</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">0</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">end</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">1</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain"></span><span class="token punctuation" style="color:var(--hl-punctuation)">}</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Video"><code>Video</code></a> <!-- -->properties: <a class="pr_hMGy" title="Pull request #601" href="https://github.com/motion-canvas/motion-canvas/pull/601" target="_blank"><small>#<!-- -->601</small></a><ul class="margin-top--sm margin-bottom--sm"><li><a href="/api/2d/components/VideoProps#play"><code>play</code></a> <!-- -->automatically plays the video</li><li><a href="/api/2d/components/Video#loop"><code>loop</code></a> <!-- -->restarts the video upon reaching the end</li></ul></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fiddles now support multiple examples. You can switch between them using the dropdown on the right side.</li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><code>UPDATE AVAILABLE</code> now links to the GitHub release page.<a class="pr_hMGy" title="Pull request #608" href="https://github.com/motion-canvas/motion-canvas/pull/608" target="_blank"><small>#<!-- -->608</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Videos play smoothly when in presentation mode.<a class="pr_hMGy" title="Pull request #600" href="https://github.com/motion-canvas/motion-canvas/pull/600" target="_blank"><small>#<!-- -->600</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Reused async resources are now correctly awaited.<a class="pr_hMGy" title="Pull request #599" href="https://github.com/motion-canvas/motion-canvas/pull/599" target="_blank"><small>#<!-- -->599</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>Arrow orientations for splines are correctly calculated.<a class="pr_hMGy" title="Pull request #597" href="https://github.com/motion-canvas/motion-canvas/pull/597" target="_blank"><small>#<!-- -->597</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The showcase editor has been fixed.<a class="pr_hMGy" title="Pull request #589" href="https://github.com/motion-canvas/motion-canvas/pull/589" target="_blank"><small>#<!-- -->589</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.4.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.4.0</link>
            <guid>https://motioncanvas.io/blog/version-3.4.0</guid>
            <pubDate>Tue, 28 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Please stop making fun of {' '}.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/docs/spline"><code>Spline</code></a> <!-- -->node lets you draw lines made up of Bezier curves:<a class="pr_hMGy" title="Pull request #514" href="https://github.com/motion-canvas/motion-canvas/pull/514" target="_blank"><small>#<!-- -->514</small></a><div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Spline</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">lineWidth</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">6</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">stroke</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Knot</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">100</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">30</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Knot</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">0</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">50</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">startHandle</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript operator" style="color:var(--hl-punctuation)">-</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">70</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">0</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Knot</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">position</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">[</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">100</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--hl-tag)"> </span><span class="token tag script language-javascript number" style="color:var(--hl-number)">30</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">]</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token plain-text"></span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;/</span><span class="token tag class-name" style="color:var(--hl-class)">Spline</span><span class="token tag punctuation" style="color:var(--hl-punctuation)">&gt;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a><a href="/api/core/types/Vector2"><code>Vector2</code></a> <!-- -->has been expanded with new methods:<!-- --> <a href="/api/core/types/Vector2#degrees"><code>degrees</code></a>,<!-- --> <a href="/api/core/types/Vector2#equals"><code>equals</code></a>,<!-- --> <a href="/api/core/types/Vector2#squaredMagnitude"><code>squaredMagnitude</code></a><a class="pr_hMGy" title="Pull request #579" href="https://github.com/motion-canvas/motion-canvas/pull/579" target="_blank"><small>#<!-- -->579</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="guifeliper" href="https://github.com/guifeliper" target="_blank"><img loading="lazy" src="https://github.com/guifeliper.png" width="20" height="20" alt="guifeliper's avatar"></a>Names displayed in the project selection view are now retrieved from the meta files.<a class="pr_hMGy" title="Pull request #552" href="https://github.com/motion-canvas/motion-canvas/pull/552" target="_blank"><small>#<!-- -->552</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Introduce initial API for plugins.<a class="pr_hMGy" title="Pull request #564" href="https://github.com/motion-canvas/motion-canvas/pull/564" target="_blank"><small>#<!-- -->564</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The fields in the editor are now autogenerated based on the structure of the meta file.<a class="pr_hMGy" title="Pull request #565" href="https://github.com/motion-canvas/motion-canvas/pull/565" target="_blank"><small>#<!-- -->565</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Support multiple fiddles on one page.<a class="pr_hMGy" title="Pull request #572" href="https://github.com/motion-canvas/motion-canvas/pull/572" target="_blank"><small>#<!-- -->572</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix CodeBlock types.<a class="pr_hMGy" title="Pull request #563" href="https://github.com/motion-canvas/motion-canvas/pull/563" target="_blank"><small>#<!-- -->563</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Size is now copied when cloning a node.<a class="pr_hMGy" title="Pull request #562" href="https://github.com/motion-canvas/motion-canvas/pull/562" target="_blank"><small>#<!-- -->562</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Zoom to fit works correctly for smaller canvases.<a class="pr_hMGy" title="Pull request #561" href="https://github.com/motion-canvas/motion-canvas/pull/561" target="_blank"><small>#<!-- -->561</small></a></li></ul><small>Check out <a href="/docs/updating">the Update Guide</a> for information on how to update your existing projects.</small>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.3.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.3.0</link>
            <guid>https://motioncanvas.io/blog/version-3.3.0</guid>
            <pubDate>Sat, 18 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New{' '}]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/docs/quickstart#programming-an-animation">Fiddle Editor</a> <!-- -->let's you play around with Motion Canvas directly in the browser.<a class="pr_hMGy" title="Pull request #542" href="https://github.com/motion-canvas/motion-canvas/pull/542" target="_blank"><small>#<!-- -->542</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Information about the current zoom level is now displayed in the top-left corner of the viewport. You can choose one of the predefined zoom levels or toggle "zoom to fit".<a class="pr_hMGy" title="Pull request #531" href="https://github.com/motion-canvas/motion-canvas/pull/531" target="_blank"><small>#<!-- -->531</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="misclicl" href="https://github.com/misclicl" target="_blank"><img loading="lazy" src="https://github.com/misclicl.png" width="20" height="20" alt="misclicl's avatar"></a>The <a href="/docs/rendering#group-by-scene">group by scene</a> <!-- -->rendering option lets you render scenes into separate image sequences.<a class="pr_hMGy" title="Pull request #477" href="https://github.com/motion-canvas/motion-canvas/pull/477" target="_blank"><small>#<!-- -->477</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Button titles now include their corresponding shortcuts.<a class="pr_hMGy" title="Pull request #532" href="https://github.com/motion-canvas/motion-canvas/pull/532" target="_blank"><small>#<!-- -->532</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="guifeliper" href="https://github.com/guifeliper" target="_blank"><img loading="lazy" src="https://github.com/guifeliper.png" width="20" height="20" alt="guifeliper's avatar"></a>Vite has been updated to v4.<a class="pr_hMGy" title="Pull request #495" href="https://github.com/motion-canvas/motion-canvas/pull/495" target="_blank"><small>#<!-- -->495</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Tree shaking now works correctly.<a class="pr_hMGy" title="Pull request #523" href="https://github.com/motion-canvas/motion-canvas/pull/523" target="_blank"><small>#<!-- -->523</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Custom fields added to meta files are now preserved.<a class="pr_hMGy" title="Pull request #534" href="https://github.com/motion-canvas/motion-canvas/pull/534" target="_blank"><small>#<!-- -->534</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Checkboxes use a custom style.<a class="pr_hMGy" title="Pull request #529" href="https://github.com/motion-canvas/motion-canvas/pull/529" target="_blank"><small>#<!-- -->529</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The size of cache canvases is limited to the size of the project.<a class="pr_hMGy" title="Pull request #544" href="https://github.com/motion-canvas/motion-canvas/pull/544" target="_blank"><small>#<!-- -->544</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="AshishBarvaliya" href="https://github.com/AshishBarvaliya" target="_blank"><img loading="lazy" src="https://github.com/AshishBarvaliya.png" width="20" height="20" alt="AshishBarvaliya's avatar"></a><a href="/api/2d/components/Layout#textWrap"><code>textWrap</code></a> <!-- -->now works in Firefox.<a class="pr_hMGy" title="Pull request #541" href="https://github.com/motion-canvas/motion-canvas/pull/541" target="_blank"><small>#<!-- -->541</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="AshishBarvaliya" href="https://github.com/AshishBarvaliya" target="_blank"><img loading="lazy" src="https://github.com/AshishBarvaliya.png" width="20" height="20" alt="AshishBarvaliya's avatar"></a>The port at which Motion Canvas is served can now be changed.<a class="pr_hMGy" title="Pull request #538" href="https://github.com/motion-canvas/motion-canvas/pull/538" target="_blank"><small>#<!-- -->538</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="AshishBarvaliya" href="https://github.com/AshishBarvaliya" target="_blank"><img loading="lazy" src="https://github.com/AshishBarvaliya.png" width="20" height="20" alt="AshishBarvaliya's avatar"></a>The editor correctly detects new versions.<a class="pr_hMGy" title="Pull request #520" href="https://github.com/motion-canvas/motion-canvas/pull/520" target="_blank"><small>#<!-- -->520</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="AshishBarvaliya" href="https://github.com/AshishBarvaliya" target="_blank"><img loading="lazy" src="https://github.com/AshishBarvaliya.png" width="20" height="20" alt="AshishBarvaliya's avatar"></a>Keyboard shortcuts are now ignored when inputting text.<a class="pr_hMGy" title="Pull request #521" href="https://github.com/motion-canvas/motion-canvas/pull/521" target="_blank"><small>#<!-- -->521</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Runtime errors no longer corrupt the editor's state.<a class="pr_hMGy" title="Pull request #524" href="https://github.com/motion-canvas/motion-canvas/pull/524" target="_blank"><small>#<!-- -->524</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.2.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.2.0</link>
            <guid>https://motioncanvas.io/blog/version-3.2.0</guid>
            <pubDate>Fri, 10 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New status bar lists the shortcuts available in the currently hovered panel.]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="oacs" href="https://github.com/oacs" target="_blank"><img loading="lazy" src="https://github.com/oacs.png" width="20" height="20" alt="oacs's avatar"></a>New status bar lists the shortcuts available in the currently hovered panel.<a class="pr_hMGy" title="Pull request #444" href="https://github.com/motion-canvas/motion-canvas/pull/444" target="_blank"><small>#<!-- -->444</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>The current version is now displayed on the status bar. Clicking it will copy the versions of all packages currently in use.<a class="pr_hMGy" title="Pull request #501" href="https://github.com/motion-canvas/motion-canvas/pull/501" target="_blank"><small>#<!-- -->501</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Cache is now stored using world space coordinates. Scaling up<!-- --> <a href="/api/2d/components/Node#cache"><code>cache</code></a>d nodes no longer results in quality loss.<a class="pr_hMGy" title="Pull request #498" href="https://github.com/motion-canvas/motion-canvas/pull/498" target="_blank"><small>#<!-- -->498</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="magx2" href="https://github.com/magx2" target="_blank"><img loading="lazy" src="https://github.com/magx2.png" width="20" height="20" alt="magx2's avatar"></a>All methods of<!-- --> <a href="/api/core/types/Vector2"><code>Vector2</code></a> <!-- -->now accept<a href="/api/core/types#PossibleVector2"><code>PossibleVector2</code></a> <!-- -->as arguments, making it possible to write code like this:<!-- --> <a class="pr_hMGy" title="Pull request #478" href="https://github.com/motion-canvas/motion-canvas/pull/478" target="_blank"><small>#<!-- -->478</small></a><div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token plain">vector</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">add</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token punctuation" style="color:var(--hl-punctuation)">[</span><span class="token number" style="color:var(--hl-number)">100</span><span class="token punctuation" style="color:var(--hl-punctuation)">,</span><span class="token plain"> </span><span class="token number" style="color:var(--hl-number)">200</span><span class="token punctuation" style="color:var(--hl-punctuation)">]</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">.</span><span class="token method function property-access" style="color:var(--hl-function)">mul</span><span class="token punctuation" style="color:var(--hl-punctuation)">(</span><span class="token number" style="color:var(--hl-number)">2</span><span class="token punctuation" style="color:var(--hl-punctuation)">)</span><span class="token punctuation" style="color:var(--hl-punctuation)">;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li class="element_spNy"><a class="contributor_Ndjr" title="andrie" href="https://github.com/andrie" target="_blank"><img loading="lazy" src="https://github.com/andrie.png" width="20" height="20" alt="andrie's avatar"></a>New<!-- --> <a href="/api/2d/components/Polygon"><code>Polygon</code></a> <!-- -->node lets you quickly create regular polygons:<div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Polygon</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">  </span><span class="token tag attr-name" style="color:var(--hl-variable)">sides</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">6</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">  </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">300</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)">  </span><span class="token tag attr-name" style="color:var(--hl-variable)">fill</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">'lightseagreen'</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"></span><br></span><span class="token-line" style="color:var(--hl-color)"><span class="token tag" style="color:var(--hl-tag)"></span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>The code above will generate a hexagon.<a class="pr_hMGy" title="Pull request #463" href="https://github.com/motion-canvas/motion-canvas/pull/463" target="_blank"><small>#<!-- -->463</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix line arc length.<a class="pr_hMGy" title="Pull request #503" href="https://github.com/motion-canvas/motion-canvas/pull/503" target="_blank"><small>#<!-- -->503</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="AshishBarvaliya" href="https://github.com/AshishBarvaliya" target="_blank"><img loading="lazy" src="https://github.com/AshishBarvaliya.png" width="20" height="20" alt="AshishBarvaliya's avatar"></a>Fix invalid source code link.<a class="pr_hMGy" title="Pull request #502" href="https://github.com/motion-canvas/motion-canvas/pull/502" target="_blank"><small>#<!-- -->502</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.1.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.1.0</link>
            <guid>https://motioncanvas.io/blog/version-3.1.0</guid>
            <pubDate>Tue, 07 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New Presentation Mode lets you present]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New <a href="/docs/presentation">Presentation Mode</a> lets you present your animations live.<a class="pr_hMGy" title="Pull request #486" href="https://github.com/motion-canvas/motion-canvas/pull/486" target="_blank"><small>#<!-- -->486</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Layout#textAlign"><code>textAlign</code></a> <!-- -->property.<a class="pr_hMGy" title="Pull request #451" href="https://github.com/motion-canvas/motion-canvas/pull/451" target="_blank"><small>#<!-- -->451</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/api/core/types/BBox#intersects"><code>intersects</code></a> <!-- -->method for the <code>BBox</code> type.<a class="pr_hMGy" title="Pull request #485" href="https://github.com/motion-canvas/motion-canvas/pull/485" target="_blank"><small>#<!-- -->485</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix playback state.<a class="pr_hMGy" title="Pull request #471" href="https://github.com/motion-canvas/motion-canvas/pull/471" target="_blank"><small>#<!-- -->471</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix cache bbox for lines.<a class="pr_hMGy" title="Pull request #467" href="https://github.com/motion-canvas/motion-canvas/pull/467" target="_blank"><small>#<!-- -->467</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix relative time.<a class="pr_hMGy" title="Pull request #461" href="https://github.com/motion-canvas/motion-canvas/pull/461" target="_blank"><small>#<!-- -->461</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Support multiple async players.<a class="pr_hMGy" title="Pull request #450" href="https://github.com/motion-canvas/motion-canvas/pull/450" target="_blank"><small>#<!-- -->450</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix <code>letterSpacing</code>.<a class="pr_hMGy" title="Pull request #448" href="https://github.com/motion-canvas/motion-canvas/pull/448" target="_blank"><small>#<!-- -->448</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v3.0.0]]></title>
            <link>https://motioncanvas.io/blog/version-3.0.0</link>
            <guid>https://motioncanvas.io/blog/version-3.0.0</guid>
            <pubDate>Mon, 27 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Check out the Migration Guide for instructions on]]></description>
            <content:encoded><![CDATA[<div class="theme-admonition theme-admonition-info alert alert--info admonition_qNG0"><div class="admonitionHeading_l909"><span class="admonitionIcon_UNbs"><svg viewBox="0 0 24 24" fill="currentColor" class="icon_Fw4I"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"></path></svg></span>info</div><div class="admonitionContent_oUmQ"><p>Check out the <a href="/docs/migrating-to-3.0.0">Migration Guide</a> for instructions on
how to update your project.</p></div></div><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New playback architecture:<ul class="margin-top--sm margin-bottom--sm"><li>Project settings are now stored in meta files.</li><li>Preview and rendering settings are configured separately.</li><li>The animation range is stored using seconds instead of frames.</li><li>You can adjust the audio offset by holding <code>SHIFT</code> and dragging the waveform left and right</li><li>The rendering is not locked to the framerate, making the process a bit faster.</li></ul>This change also opens the door to a lot of new features, including the<!-- --> <a href="https://github.com/motion-canvas/motion-canvas/issues/213" target="_blank" rel="noopener noreferrer">Presentation Mode</a>,<!-- --> <a href="https://github.com/motion-canvas/motion-canvas/issues/170" target="_blank" rel="noopener noreferrer">Editable Signals</a> <!-- -->and<!-- --> <a href="https://github.com/motion-canvas/motion-canvas/issues/364" target="_blank" rel="noopener noreferrer">Custom Exporters</a>.<a class="pr_hMGy" title="Pull request #402" href="https://github.com/motion-canvas/motion-canvas/pull/402" target="_blank"><small>#<!-- -->402</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ccaven" href="https://github.com/ccaven" target="_blank"><img loading="lazy" src="https://github.com/ccaven.png" width="20" height="20" alt="ccaven's avatar"></a>Rendering settings include a quarter resolution (x0.25).<a class="pr_hMGy" title="Pull request #421" href="https://github.com/motion-canvas/motion-canvas/pull/421" target="_blank"><small>#<!-- -->421</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="mohsinhijazee" href="https://github.com/mohsinhijazee" target="_blank"><img loading="lazy" src="https://github.com/mohsinhijazee.png" width="20" height="20" alt="mohsinhijazee's avatar"></a>New<!-- --> <a href="/api/2d/components/Layout#textDirection"><code>textDirection</code></a> <!-- -->property for RTL/LTR text.<a class="pr_hMGy" title="Pull request #404" href="https://github.com/motion-canvas/motion-canvas/pull/404" target="_blank"><small>#<!-- -->404</small></a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix <code>Vector2.exactlyEquals</code>.<a class="pr_hMGy" title="Pull request #437" href="https://github.com/motion-canvas/motion-canvas/pull/437" target="_blank"><small>#<!-- -->437</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Render only within the range.<a class="pr_hMGy" title="Pull request #436" href="https://github.com/motion-canvas/motion-canvas/pull/436" target="_blank"><small>#<!-- -->436</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix initial value of <code>endOffset</code>.<a class="pr_hMGy" title="Pull request #433" href="https://github.com/motion-canvas/motion-canvas/pull/433" target="_blank"><small>#<!-- -->433</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Correctly reset zoom.<a class="pr_hMGy" title="Pull request #432" href="https://github.com/motion-canvas/motion-canvas/pull/432" target="_blank"><small>#<!-- -->432</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix performance issue with audio track.<a class="pr_hMGy" title="Pull request #427" href="https://github.com/motion-canvas/motion-canvas/pull/427" target="_blank"><small>#<!-- -->427</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Clear semi-transparent backgrounds.<a class="pr_hMGy" title="Pull request #424" href="https://github.com/motion-canvas/motion-canvas/pull/424" target="_blank"><small>#<!-- -->424</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.6.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.6.0</link>
            <guid>https://motioncanvas.io/blog/version-2.6.0</guid>
            <pubDate>Fri, 24 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now{' '}]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>You can now<!-- --> <a href="/docs/tweening#saving-and-restoring-states">store the state of a node</a> <!-- -->and restore it at a later point.<a class="pr_hMGy" title="Pull request #406" href="https://github.com/motion-canvas/motion-canvas/pull/406" target="_blank"><small>#<!-- -->406</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="Ross-Esmond" href="https://github.com/Ross-Esmond" target="_blank"><img loading="lazy" src="https://github.com/Ross-Esmond.png" width="20" height="20" alt="Ross-Esmond's avatar"></a><del><a href="/docs/code-block"><code>CodeBlock</code></a> <!-- -->is now exported together with other nodes. An improved theme system with the new<!-- --> <a><code>stockTheme</code></a> <!-- -->property lets you use VS Code themes (powered by<!-- --> <a href="https://shiki.matsu.io/" target="_blank" rel="noopener noreferrer">Shiki</a>)</del><a class="pr_hMGy" title="Pull request #401" href="https://github.com/motion-canvas/motion-canvas/pull/401" target="_blank"><small>#<!-- -->401</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New<!-- --> <a href="/api/2d/components/Layout#alignContent"><code>alignContent</code></a> <!-- -->and<!-- --> <a href="/api/2d/components/Layout#alignItems"><code>alignItems</code></a>Flexbox properties.<a class="pr_hMGy" title="Pull request #405" href="https://github.com/motion-canvas/motion-canvas/pull/405" target="_blank"><small>#<!-- -->405</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>New<!-- --> <a href="/api/2d/components/Node#zIndex"><code>zIndex</code></a> <!-- -->property allows you to change the rendering order of child nodes, without rearranging the hierarchy.<a class="pr_hMGy" title="Pull request #398" href="https://github.com/motion-canvas/motion-canvas/pull/398" target="_blank"><small>#<!-- -->398</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="WaldemarLehner" href="https://github.com/WaldemarLehner" target="_blank"><img loading="lazy" src="https://github.com/WaldemarLehner.png" width="20" height="20" alt="WaldemarLehner's avatar"></a>New<!-- --> <a href="/api/2d/components/Icon"><code>Icon</code></a> <!-- -->node:<div class="margin-top--sm margin-bottom--sm language-tsx codeBlockContainer_ZGJx theme-code-block" style="--prism-color:var(--hl-color);--prism-background-color:var(--hl-background)"><div class="codeBlockContent_qZBB"><pre tabindex="0" class="prism-code language-tsx codeBlock_TAPP thin-scrollbar"><code class="codeBlockLines_AdAo"><span class="token-line" style="color:var(--hl-color)"><span class="token tag punctuation" style="color:var(--hl-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--hl-class)">Icon</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript string" style="color:var(--hl-string)">"mdi:typewriter"</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--hl-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--hl-number)">200</span><span class="token tag script language-javascript punctuation" style="color:var(--hl-punctuation)">}</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag attr-name" style="color:var(--hl-variable)">color</span><span class="token tag attr-value punctuation attr-equals" style="color:var(--hl-punctuation)">=</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag attr-value" style="color:var(--hl-string)">white</span><span class="token tag attr-value punctuation" style="color:var(--hl-punctuation)">"</span><span class="token tag" style="color:var(--hl-tag)"> </span><span class="token tag punctuation" style="color:var(--hl-punctuation)">/&gt;</span><br></span></code></pre><div class="buttonGroup_TNwR"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_MVhB" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_yxgH"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_QJLJ"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>Check out <a href="https://icones.js.org/collection/all" target="_blank" rel="noopener noreferrer">Icônes</a> for the list of all possible icons.<a class="pr_hMGy" title="Pull request #306" href="https://github.com/motion-canvas/motion-canvas/pull/306" target="_blank"><small>#<!-- -->306</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="WaldemarLehner" href="https://github.com/WaldemarLehner" target="_blank"><img loading="lazy" src="https://github.com/WaldemarLehner.png" width="20" height="20" alt="WaldemarLehner's avatar"></a>Images can now be loaded from the internet. For images with incompatible CORS headers, a new <a href="/docs/configuration#proxy">CORS Proxy</a> <!-- -->can be enabled.<a class="pr_hMGy" title="Pull request #357" href="https://github.com/motion-canvas/motion-canvas/pull/357" target="_blank"><small>#<!-- -->357</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>New look for the release blog.<a class="pr_hMGy" title="Pull request #410" href="https://github.com/motion-canvas/motion-canvas/pull/410" target="_blank"><small>#<!-- -->410</small></a></li></ul><hr><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Handle division by zero in lines<a class="pr_hMGy" title="Pull request #407" href="https://github.com/motion-canvas/motion-canvas/pull/407" target="_blank"><small>#<!-- -->407</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.5.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.5.0</link>
            <guid>https://motioncanvas.io/blog/version-2.5.0</guid>
            <pubDate>Mon, 20 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[New{' '}]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="new-features">New features 🎉<a href="#new-features" class="hash-link" aria-label="Direct link to New features 🎉" title="Direct link to New features 🎉">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="gustavneustadt" href="https://github.com/gustavneustadt" target="_blank"><img loading="lazy" src="https://github.com/gustavneustadt.png" width="20" height="20" alt="gustavneustadt's avatar"></a>New<!-- --> <a href="/docs/tweening#spring-function"><code>spring</code></a> <!-- -->interpolation.<a class="pr_hMGy" title="Pull request #356" href="https://github.com/motion-canvas/motion-canvas/pull/356" target="_blank"><small>#<!-- -->356</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a><a href="/api/2d/components/Circle#closed"><code>closed</code></a> <!-- -->property lets you make wedges using <code>Circle</code>s.<a class="pr_hMGy" title="Pull request #378" href="https://github.com/motion-canvas/motion-canvas/pull/378" target="_blank"><small>#<!-- -->378</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="DanielBreiner" href="https://github.com/DanielBreiner" target="_blank"><img loading="lazy" src="https://github.com/DanielBreiner.png" width="20" height="20" alt="DanielBreiner's avatar"></a>New<!-- --> <a href="/docs/transitions#fadetransition"><code>fadeTransition</code></a>.<a class="pr_hMGy" title="Pull request #384" href="https://github.com/motion-canvas/motion-canvas/pull/384" target="_blank"><small>#<!-- -->384</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="ksassnowski" href="https://github.com/ksassnowski" target="_blank"><img loading="lazy" src="https://github.com/ksassnowski.png" width="20" height="20" alt="ksassnowski's avatar"></a>The<!-- --> <a href="/api/core/utils#range"><code>range</code></a> <!-- -->function now accepts an additional <code>step</code> parameter.<a class="pr_hMGy" title="Pull request #373" href="https://github.com/motion-canvas/motion-canvas/pull/373" target="_blank"><small>#<!-- -->373</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="dariasc" href="https://github.com/dariasc" target="_blank"><img loading="lazy" src="https://github.com/dariasc.png" width="20" height="20" alt="dariasc's avatar"></a><code>View2D</code> now extends <code>Rect</code> allowing you to change the background color of a scene using the <code>fill</code> property.<a class="pr_hMGy" title="Pull request #379" href="https://github.com/motion-canvas/motion-canvas/pull/379" target="_blank"><small>#<!-- -->379</small></a></li></ul><hr><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="fixed-bugs">Fixed bugs 🐛<a href="#fixed-bugs" class="hash-link" aria-label="Direct link to Fixed bugs 🐛" title="Direct link to Fixed bugs 🐛">​</a></h3><ul class="group_CvIc"><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Support <code>Color</code> to <code>null</code> tweening.<a class="pr_hMGy" title="Pull request #387" href="https://github.com/motion-canvas/motion-canvas/pull/387" target="_blank"><small>#<!-- -->387</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Plug memory leaks.<a class="pr_hMGy" title="Pull request #385" href="https://github.com/motion-canvas/motion-canvas/pull/385" target="_blank"><small>#<!-- -->385</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Fix signal initialization.<a class="pr_hMGy" title="Pull request #382" href="https://github.com/motion-canvas/motion-canvas/pull/382" target="_blank"><small>#<!-- -->382</small></a></li><li class="element_spNy"><a class="contributor_Ndjr" title="aarthificial" href="https://github.com/aarthificial" target="_blank"><img loading="lazy" src="https://github.com/aarthificial.png" width="20" height="20" alt="aarthificial's avatar"></a>Handle floating point errors in acos.<a class="pr_hMGy" title="Pull request #381" href="https://github.com/motion-canvas/motion-canvas/pull/381" target="_blank"><small>#<!-- -->381</small></a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.4.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.4.0</link>
            <guid>https://motioncanvas.io/blog/version-2.4.0</guid>
            <pubDate>Sat, 18 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Features]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li><a href="/docs/signals#default-values"><code>DEFAULT</code></a> signal values. <code>lineHeight</code> now
supports percentages.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/259" target="_blank" rel="noopener noreferrer">#259</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/18f61a668420dec8afba52d52a6557e7a7919ba2" target="_blank" rel="noopener noreferrer">18f61a6</a>)</li><li>New <a href="/api/2d/components/Node#moveBelow"><code>moveBelow</code></a>,
<a href="/api/2d/components/Node#moveAbove"><code>moveAbove</code></a> and
<a href="/api/2d/components/Node#moveTo"><code>moveTo</code></a> methods for rearranging the nodes.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/365" target="_blank" rel="noopener noreferrer">#365</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/16752a3b8ae7461b33d6208a9675729f374e8324" target="_blank" rel="noopener noreferrer">16752a3</a>)</li><li>New <a href="/docs/code-block"><code>CodeBlock</code></a> documentation
(<a href="https://github.com/motion-canvas/motion-canvas/issues/302" target="_blank" rel="noopener noreferrer">#302</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/73f7221536e09d5cf77f75ca173d1a7637d5b98f" target="_blank" rel="noopener noreferrer">73f7221</a>)</li><li>The editor now warns about duplicated time events.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/341" target="_blank" rel="noopener noreferrer">#341</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/053b2a6c22c4e726e3962fdaf0a2e8d149889a9b" target="_blank" rel="noopener noreferrer">053b2a6</a>)</li><li>We now have a search bar on the documentation website.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/335" target="_blank" rel="noopener noreferrer">#335</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/48f74a60d54cc52c7f069a9ec39071c99163bd19" target="_blank" rel="noopener noreferrer">48f74a6</a>)</li><li>You can now open the documentation from within the editor.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/346" target="_blank" rel="noopener noreferrer">#346</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/fc4ee5d028312904ed9e11c5341ac00f36e7242b" target="_blank" rel="noopener noreferrer">fc4ee5d</a>)</li><li><code>SHIFT + -&gt;</code> moves to the last frame.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/354" target="_blank" rel="noopener noreferrer">#354</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/4b8170971400c5bf4fe690a58d3f44c3e1d00b94" target="_blank" rel="noopener noreferrer">4b81709</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/353" target="_blank" rel="noopener noreferrer">#353</a></li><li>Flexbox <code>gap</code> is now represented by a <code>Vector2</code> signal.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/355" target="_blank" rel="noopener noreferrer">#355</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/3cae97ea704d0533020fa87326dacadcc037d517" target="_blank" rel="noopener noreferrer">3cae97e</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/352" target="_blank" rel="noopener noreferrer">#352</a></li><li>New <a href="/api/core/types/Matrix2D"><code>Matrix2D</code></a> type.
(<a href="https://github.com/motion-canvas/motion-canvas/issues/340" target="_blank" rel="noopener noreferrer">#340</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/66b41e6beaca5c2ba4b6bd1a7e68ca16d183b0e9" target="_blank" rel="noopener noreferrer">66b41e6</a>)</li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="bug-fixes">Bug Fixes<a href="#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes">​</a></h3><ul><li><strong>2d:</strong> fix Gradient and Pattern signals
(<a href="https://github.com/motion-canvas/motion-canvas/issues/376" target="_blank" rel="noopener noreferrer">#376</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/6e0dc8af8d19f93fd6a42addca2b3a2958b4dd33" target="_blank" rel="noopener noreferrer">6e0dc8a</a>)</li><li><strong>2d:</strong> fix layout calculation for nodes not explicitly added to view
(<a href="https://github.com/motion-canvas/motion-canvas/issues/331" target="_blank" rel="noopener noreferrer">#331</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/528e2d5a0abec99819e022d2848b256ece9f869a" target="_blank" rel="noopener noreferrer">528e2d5</a>)</li><li><strong>2d:</strong> format whitespaces according to HTML
(<a href="https://github.com/motion-canvas/motion-canvas/issues/372" target="_blank" rel="noopener noreferrer">#372</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/83fb565742d98f060c0400c8cbaf9961b69f34d0" target="_blank" rel="noopener noreferrer">83fb565</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/370" target="_blank" rel="noopener noreferrer">#370</a></li><li><strong>core:</strong> playback speed is reset after saving with faulty code
(<a href="https://github.com/motion-canvas/motion-canvas/issues/204" target="_blank" rel="noopener noreferrer">#204</a>).
(<a href="https://github.com/motion-canvas/motion-canvas/issues/339" target="_blank" rel="noopener noreferrer">#339</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/6771e5e17edcdc4cce074d7da0962cf71ba6c228" target="_blank" rel="noopener noreferrer">6771e5e</a>)</li><li><strong>docs:</strong> fix search
(<a href="https://github.com/motion-canvas/motion-canvas/issues/336" target="_blank" rel="noopener noreferrer">#336</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/e44ec02539a67f099471a6aa84f673a236494687" target="_blank" rel="noopener noreferrer">e44ec02</a>)</li><li>typo on codeblock remove comments
(<a href="https://github.com/motion-canvas/motion-canvas/issues/368" target="_blank" rel="noopener noreferrer">#368</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/2025adc6e7aa11d81b6f5f6989e8eae18cf86cb7" target="_blank" rel="noopener noreferrer">2025adc</a>)</li><li><strong>ui:</strong> fix inspector tab
(<a href="https://github.com/motion-canvas/motion-canvas/issues/374" target="_blank" rel="noopener noreferrer">#374</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/c4cb378c2f9d972bb41542bbe3b3aa314fa1f3ad" target="_blank" rel="noopener noreferrer">c4cb378</a>)</li><li><strong>vite-plugin:</strong> fix js template
(<a href="https://github.com/motion-canvas/motion-canvas/issues/337" target="_blank" rel="noopener noreferrer">#337</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/3b33d73416541d491b633bada29f085f5489f6c2" target="_blank" rel="noopener noreferrer">3b33d73</a>)</li><li><strong>vite-plugin:</strong> ignore query param in devserver
(<a href="https://github.com/motion-canvas/motion-canvas/issues/351" target="_blank" rel="noopener noreferrer">#351</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/5644d72d36adcdc817f0856aaff0be5507338cb8" target="_blank" rel="noopener noreferrer">5644d72</a>)</li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.3.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.3.0</link>
            <guid>https://motioncanvas.io/blog/version-2.3.0</guid>
            <pubDate>Sat, 11 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Features]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li>A new <a href="/docs/latex"><code>LaTeX</code></a> node!
(<a href="https://github.com/motion-canvas/motion-canvas/issues/228" target="_blank" rel="noopener noreferrer">#228</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/4c26d2aaf0c697486639aa917cd5c585d3d0ea74" target="_blank" rel="noopener noreferrer">4c26d2a</a>)</li><li>CodeBlock themes (documentation coming soon)
(<a href="https://github.com/motion-canvas/motion-canvas/issues/279" target="_blank" rel="noopener noreferrer">#279</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/fe34fa8ebfe66cd356fb1c3d85adedef11e03b45" target="_blank" rel="noopener noreferrer">fe34fa8</a>)</li><li>An <a href="/api/2d/components/Shape#antialiased">antialiased</a> property for Shapes
(<a href="https://github.com/motion-canvas/motion-canvas/issues/282" target="_blank" rel="noopener noreferrer">#282</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/7c6905d72c6c2f49e10f0a80704c0afe3504d01b" target="_blank" rel="noopener noreferrer">7c6905d</a>)</li><li><a href="/api/2d/components/Rect#smoothCorners">Smooth corners</a> and
<a href="/api/2d/components/Rect#cornerSharpness">sharpness control</a> for Rects
(<a href="https://github.com/motion-canvas/motion-canvas/issues/310" target="_blank" rel="noopener noreferrer">#310</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/f7fbefd27f7f6972cfb5a45a68e5d0aed9593ae4" target="_blank" rel="noopener noreferrer">f7fbefd</a>)</li><li>A simpler <a href="/api/core/utils#debug"><code>debug</code></a> function
(<a href="https://github.com/motion-canvas/motion-canvas/issues/293" target="_blank" rel="noopener noreferrer">#293</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/b8708732af0fc08d9ff9eeecbbb77d65f1b36eb8" target="_blank" rel="noopener noreferrer">b870873</a>)</li><li>Multiple new <a href="/api/core/tweening#createEaseInBack">easing functions</a>
(<a href="https://github.com/motion-canvas/motion-canvas/issues/274" target="_blank" rel="noopener noreferrer">#274</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/f81ce43019fe253e99f4ab6311c2251b40e2eae3" target="_blank" rel="noopener noreferrer">f81ce43</a>)</li><li>Tweening to/from undefined values now warns the user
(<a href="https://github.com/motion-canvas/motion-canvas/issues/257" target="_blank" rel="noopener noreferrer">#257</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/d4bb79145300b52c4b4d101df2afaff5ea11a9e9" target="_blank" rel="noopener noreferrer">d4bb791</a>)</li><li>API documentation is always re-build when in <code>build</code> mode
(<a href="https://github.com/motion-canvas/motion-canvas/issues/298" target="_blank" rel="noopener noreferrer">#298</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/27a4d96593d8e925385252b0d6f62646cd9fa6d5" target="_blank" rel="noopener noreferrer">27a4d96</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/294" target="_blank" rel="noopener noreferrer">#294</a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="bug-fixes">Bug Fixes<a href="#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes">​</a></h3><ul><li><code>textWrap={'pre'}</code> now works in Firefox
(<a href="https://github.com/motion-canvas/motion-canvas/issues/287" target="_blank" rel="noopener noreferrer">#287</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/cb07f4bdf07edc8a086b934ca5ab769682b9a010" target="_blank" rel="noopener noreferrer">cb07f4b</a>)</li><li>Using space to play/pause the animation when focused on the play button now
works properly
(<a href="https://github.com/motion-canvas/motion-canvas/issues/299" target="_blank" rel="noopener noreferrer">#299</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/191f54a0a5a9de2fd2dc27bffc6d21d692ce6f72" target="_blank" rel="noopener noreferrer">191f54a</a>)</li><li>The glossy effect on the select element has been removed in Safari
(<a href="https://github.com/motion-canvas/motion-canvas/issues/292" target="_blank" rel="noopener noreferrer">#292</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/9c062b26e48fbdb1905daae25a3fb34df82307d3" target="_blank" rel="noopener noreferrer">9c062b2</a>)</li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.2.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.2.0</link>
            <guid>https://motioncanvas.io/blog/version-2.2.0</guid>
            <pubDate>Thu, 09 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Features]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li>New <a href="/docs/project-variables">project variables</a> let you create customizable
animations (<a href="https://github.com/motion-canvas/motion-canvas/issues/255" target="_blank" rel="noopener noreferrer">#255</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/488329525939928af52b4a4d8488f1e1cd4cf6f7" target="_blank" rel="noopener noreferrer">4883295</a>)</li><li>The <a href="/api/2d/components/Video"><code>Video</code></a> component has new getters for the
<a href="/api/2d/components/Video#getDuration">duration</a>,
<a href="/api/2d/components/Video#getCurrentTime">current time</a>, and
<a href="/api/2d/components/Video#isPlaying">state</a> of the video
(<a href="https://github.com/motion-canvas/motion-canvas/issues/240" target="_blank" rel="noopener noreferrer">#240</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/59de5ab2c089589773a2f9ad7588eda7d72693a7" target="_blank" rel="noopener noreferrer">59de5ab</a>)</li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="bug-fixes">Bug Fixes<a href="#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes">​</a></h3><ul><li>Text is now visible in Firefox without the need of a custom flag
(<a href="https://github.com/motion-canvas/motion-canvas/pull/249" target="_blank" rel="noopener noreferrer">#249</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/20a4d65bbfa0c568e571274d9b6a16fb4327a5fa" target="_blank" rel="noopener noreferrer">20a4d65</a>)</li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas v2.1.0]]></title>
            <link>https://motioncanvas.io/blog/version-2.1.0</link>
            <guid>https://motioncanvas.io/blog/version-2.1.0</guid>
            <pubDate>Wed, 08 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Features]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_fF9Z" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li>add <a href="/docs/time-events#controlling-animation-duration"><code>useDuration</code></a> helper
(<a href="https://github.com/motion-canvas/motion-canvas/issues/226" target="_blank" rel="noopener noreferrer">#226</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/fa97d6c7f076f287c9b86d2f8852341bd368ef1c" target="_blank" rel="noopener noreferrer">fa97d6c</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/171" target="_blank" rel="noopener noreferrer">#171</a></li></ul><h3 class="anchor anchorWithStickyNavbar_fF9Z" id="bug-fixes">Bug Fixes<a href="#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes">​</a></h3><ul><li><strong>2d:</strong> fix font ligatures in CodeBlock
(<a href="https://github.com/motion-canvas/motion-canvas/issues/231" target="_blank" rel="noopener noreferrer">#231</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/11ee3fef5ad878313cf19833df6881333ced4dac" target="_blank" rel="noopener noreferrer">11ee3fe</a>)</li><li><strong>2d:</strong> fix Line cache
(<a href="https://github.com/motion-canvas/motion-canvas/issues/232" target="_blank" rel="noopener noreferrer">#232</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/a953b64540c020657845efc84d4179142a7a0974" target="_blank" rel="noopener noreferrer">a953b64</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/205" target="_blank" rel="noopener noreferrer">#205</a></li><li><strong>2d:</strong> handle lines with no points
(<a href="https://github.com/motion-canvas/motion-canvas/issues/233" target="_blank" rel="noopener noreferrer">#233</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/81084743dfad7b6419760796fda825047909d4d4" target="_blank" rel="noopener noreferrer">8108474</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/212" target="_blank" rel="noopener noreferrer">#212</a></li><li><strong>2d:</strong> improve Rect radius
(<a href="https://github.com/motion-canvas/motion-canvas/issues/221" target="_blank" rel="noopener noreferrer">#221</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/3437e42713a3f4a8d44d246ee01e2eb23b61e06a" target="_blank" rel="noopener noreferrer">3437e42</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/207" target="_blank" rel="noopener noreferrer">#207</a></li><li><strong>2d:</strong> stop code highlighting from jumping
(<a href="https://github.com/motion-canvas/motion-canvas/issues/230" target="_blank" rel="noopener noreferrer">#230</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/67ef1c497056dd1f8f9e20d1d7fc1af03ec3849e" target="_blank" rel="noopener noreferrer">67ef1c4</a>)</li><li><strong>core:</strong> fix looping
(<a href="https://github.com/motion-canvas/motion-canvas/issues/217" target="_blank" rel="noopener noreferrer">#217</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/a38e1a7c8fc21384cc17f3f982802071b8cd0cbf" target="_blank" rel="noopener noreferrer">a38e1a7</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/178" target="_blank" rel="noopener noreferrer">#178</a></li><li>fix compound property setter
(<a href="https://github.com/motion-canvas/motion-canvas/issues/218" target="_blank" rel="noopener noreferrer">#218</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/6cd1b952df950554eb637c9f8e82947c415d00c5" target="_blank" rel="noopener noreferrer">6cd1b95</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/208" target="_blank" rel="noopener noreferrer">#208</a><a href="https://github.com/motion-canvas/motion-canvas/issues/210" target="_blank" rel="noopener noreferrer">#210</a></li><li><strong>vite-plugin:</strong> add missing headers to html
(<a href="https://github.com/motion-canvas/motion-canvas/issues/219" target="_blank" rel="noopener noreferrer">#219</a>)
(<a href="https://github.com/motion-canvas/motion-canvas/commit/2552bcfbe2e90f3d4b86810d39f8cee24349e405" target="_blank" rel="noopener noreferrer">2552bcf</a>),
closes <a href="https://github.com/motion-canvas/motion-canvas/issues/201" target="_blank" rel="noopener noreferrer">#201</a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Motion Canvas is now Open Source!]]></title>
            <link>https://motioncanvas.io/blog/public-release</link>
            <guid>https://motioncanvas.io/blog/public-release</guid>
            <pubDate>Sat, 04 Feb 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[After months of work, I'm happy to announce that Motion Canvas is ready for the]]></description>
            <content:encoded><![CDATA[<p>After months of work, I'm happy to announce that Motion Canvas is ready for the
public release!</p><iframe class="root__2So" width="560" height="315" src="https://www.youtube.com/embed/H5GETOP7ivs" loading="lazy" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe><p>Don't get me wrong - the road ahead is still long. Plenty of features left to
implement and tons of bugs to find and fix. But the foundations are here. Motion
Canvas helped me make most of my videos last year, and I'm positive some of you
will find it helpful as well.</p><p>Head to the <a href="/docs/quickstart">quickstart</a> guide and give it a try.</p>]]></content:encoded>
        </item>
    </channel>
</rss>