<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Automated Animations &#8211; Foundry Hub</title>
	<atom:link href="https://www.foundryvtt-hub.com/tag/automated-animations/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.foundryvtt-hub.com</link>
	<description></description>
	<lastBuildDate>Sun, 27 Oct 2024 22:27:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.4</generator>

<image>
	<url>https://www.foundryvtt-hub.com/wp-content/uploads/2021/02/cropped-fhub_logo3-32x32.webp</url>
	<title>Automated Animations &#8211; Foundry Hub</title>
	<link>https://www.foundryvtt-hub.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Truly Automated Animations</title>
		<link>https://www.foundryvtt-hub.com/guide/truly-automated-animations/</link>
					<comments>https://www.foundryvtt-hub.com/guide/truly-automated-animations/#comments</comments>
		
		<dc:creator><![CDATA[Paulcheeba]]></dc:creator>
		<pubDate>Thu, 30 Dec 2021 21:13:51 +0000</pubDate>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Active Aura&#039;s]]></category>
		<category><![CDATA[Aura]]></category>
		<category><![CDATA[Automated]]></category>
		<category><![CDATA[Automated Animations]]></category>
		<category><![CDATA[Concentration]]></category>
		<category><![CDATA[DAE]]></category>
		<category><![CDATA[Sequencer]]></category>
		<guid isPermaLink="false">https://www.foundryvtt-hub.com/?p=100008580</guid>

					<description><![CDATA[Learn how to create automated spell effects in this guide by Paulcheeba. 

"With the following macros, I will automatically place an animated WebM video (or static webp image) asset on the scene and attach it to a token so it moves with the token. I will also set a rotating, growing intro and outro animation to the WebM video."]]></description>
										<content:encoded><![CDATA[
<p><em>By Paulcheeba</em></p>



<p>When using the <a href="https://www.foundryvtt-hub.com/package/autoanimations/" target="_blank" rel="noreferrer noopener">Automated Animation</a> (AA) module I noticed there were no hooks to bind the duration of the animations. I also noticed <a href="https://www.foundryvtt-hub.com/package/autoanimations/">AA</a> uses Sequencer to do the heavy lifting. So I went through the Sequencer Wiki on its Github and learned (pieced together) how to make a few macros for it. It is a versatile module and usable for many different applications. The main feature I am interested in is its ability to add the hook I need to link it to concentration, duration, and DAE so the hook can be automatically removed, removing the animation and effects as well.</p>



<p>With the following macros, I will automatically place an animated WebM video (or static webp image) asset on the scene and attach it to a token so it moves with the token. I will also set a rotating, growing intro and outro animation to the WebM video.</p>



<p>Originally, I animated a phasing and rotating spell effect in blender and output the video as webm so I would have this neat, animated aura effect on my token. I later learned that I can use Sequencer to, not only place and attach a video, but I can also place and attach an image instead and use Sequencer to animate it for me, adding rotation and a phasing effect IN FOUNDRY via a simple code addition to the macro. This saved me a lot of time but may have a slight impact on processing power.</p>


<h2 class="wp-block-heading" id="lets-get-to-it-already">Let&#8217;s get to it already!</h2>


<p>For either method, you will create the spell item (or modify an existing one) in Foundry, give it a name and graphic, and edit the description and details tabs. Copy the SRD description from the original spell to this version, you want those sweet rollable dice buttons in the spell&#8217;s chat card details for later. The SRD versions typically apply damage on use and we don’t want that. What we want is to change the details to target self, not place a template, we don’t want saving throws and we want to use it as a utility with a duration (see notes below).</p>



<p>For this tutorial I assume you have the following modules installed:</p>



<ul class="wp-block-list"><li><a href="https://github.com/fantasycalendar/FoundryVTT-Sequencer" target="_blank" rel="noreferrer noopener">Sequencer</a></li><li><a href="https://www.foundryvtt-hub.com/package/dae/" target="_blank" rel="noreferrer noopener">Dynamic Active Effects</a></li><li><a href="https://www.foundryvtt-hub.com/package/activeauras/" target="_blank" rel="noreferrer noopener">Active Aura’s</a></li><li><a href="https://www.foundryvtt-hub.com/package/midi-qol/" target="_blank" rel="noreferrer noopener">Midi-qol</a></li><li><a href="https://www.foundryvtt-hub.com/package/tokenmagic/" target="_blank" rel="noreferrer noopener">TokenMagic FX</a></li><li><a href="https://www.foundryvtt-hub.com/package/times-up/" target="_blank" rel="noreferrer noopener">Times up</a></li><li><a href="https://www.foundryvtt-hub.com/package/jb2a_dnd5e/" target="_blank" rel="noreferrer noopener">JB2A Animated Spells</a> &#8211; free version at least for their amazing Spirit Guardians animations</li></ul>



<p>Optional:</p>



<ul class="wp-block-list"><li><a href="https://www.foundryvtt-hub.com/package/combat-utility-belt/" target="_blank" rel="noreferrer noopener">Combat Utility Belt</a> &#8211; If you wish to add status effects to tokens in your aura range with Active Aura’s</li></ul>


<h3 class="wp-block-heading" id="example-spirit-guardians-spell-item-settings">Example Spirit Guardians Spell item settings</h3>


<figure class="wp-block-gallery columns-2 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img fetchpriority="high" decoding="async" width="560" height="471" src="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-0.png" alt="" data-id="100008718" data-full-url="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-0.png" data-link="https://www.foundryvtt-hub.com/guide/truly-automated-animations/attachment/pasted-image-0/" class="wp-image-100008718" srcset="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-0.png 560w, https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-0-300x252.png 300w" sizes="(max-width: 560px) 100vw, 560px" /></figure></li><li class="blocks-gallery-item"><figure><img decoding="async" width="511" height="939" src="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-1.png" alt="" data-id="100008717" data-full-url="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-1.png" data-link="https://www.foundryvtt-hub.com/guide/truly-automated-animations/attachment/pasted-image-1/" class="wp-image-100008717" srcset="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-1.png 511w, https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/pasted-image-1-163x300.png 163w" sizes="(max-width: 511px) 100vw, 511px" /></figure></li></ul></figure>


<h3 class="wp-block-heading" id="dynamic-active-effects-dae-set-up">Dynamic Active Effects (DAE) set up</h3>


<p>Once the spell is set up, we want to create a Dynamic Active Effect on it that will use macroExecute to run our macro that does all the coding magic. If you have Kandashi’s Active Auras installed we can even apply Active Effects to tokens that are within the aura’s range!</p>



<p>In the spell&#8217;s title bar click the DAE button <img decoding="async" src="https://lh6.googleusercontent.com/QzjV-93tkU3L47I2JDDO3phmIbd7xjoYxvhWToOJYo_E9KYwrj8cNBTejOV9MUOcOBDU3MIWNuyZDlE9F0q2gBydYSp50yEJtv36tYXsfMm98690RWQfioqdjYgkUbbxiVaJ7h4R" width="28" height="26"></p>



<p>In the DAE WIndow click the “+” button <img loading="lazy" decoding="async" src="https://lh4.googleusercontent.com/pkDe8Hr6qpwjs0RyrIqLMheRBOcaXF_BlXnLch3qVpr_iSZNKKVijlMmXk1TbWo4JjDLujYuCfH-U66LXJKh0S6NXT7opL2M-NqCEZ1jb-uQkUKCKbROOA9Jy8hBnHuy7kZOY8Wi" width="20" height="19"></p>



<p>In this example, we have two effects: an Aura (this applies an Active Aura Effect, requiring the Active Auras Module), and an Effect (this runs the sequencer macro).</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/eXiXbphkODe3B4hFMFVLXO8cPyw7Txmv-e-NimLTbKxs9dwrb8fW7Gii738-Z6-xTGFnFKuZDiOLiOgiFuj0Lbqx14weCJoQN3O3PE7_6wG1CEsx2pKL20WSIXrxcIDz7CsxIpQG" alt=""/></figure>


<h4 class="wp-block-heading" id="the-aura-settings-per-tab">The Aura settings per tab:</h4>


<ul class="wp-block-list"><li>Details &#8211; Effect not suspended</li><li>Details &#8211; Effect does not apply on equip</li><li>Duration tab is left untouched</li><li>Effects &#8211; Applies token magic effect to tokens within Aura range</li><li>Auras &#8211; Specifies the Aura’s range and settings.</li></ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="730" height="900" src="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa1-fixed.jpg" alt="" class="wp-image-100008739" srcset="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa1-fixed.jpg 730w, https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa1-fixed-243x300.jpg 243w" sizes="(max-width: 730px) 100vw, 730px" /></figure>


<h4 class="wp-block-heading" id="the-effect-settings-per-tab">The Effect settings per tab:</h4>


<ul class="wp-block-list"><li>Details &#8211; Effect not suspended</li><li>Details &#8211; Effect does not apply on equip</li><li>Duration &#8211; Tab is left untouched</li><li>Effects &#8211; Applies token magic effect to tokens within Aura range</li><li>Auras &#8211; Tab is left blank.</li></ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="903" height="636" src="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa2-fixed.jpg" alt="" class="wp-image-100008740" srcset="https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa2-fixed.jpg 903w, https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa2-fixed-300x211.jpg 300w, https://www.foundryvtt-hub.com/wp-content/uploads/2021/12/taa2-fixed-768x541.jpg 768w" sizes="(max-width: 903px) 100vw, 903px" /></figure>


<h3 class="wp-block-heading" id="video-method-using-jb2as-spirit-guardians-animation">Video method, using JB2A’s Spirit Guardians animation:</h3>


<p>In our case we want Sequencer to load the animation and apply intro and outro effects to it.</p>



<ol class="wp-block-list"><li>Create a “script” macro called “Spirit-Guardians-VFX” and leave “execute as gm” unchecked.</li><li>In the code field, paste the below code. There&#8217;s a breakdown of this code further down.</li></ol>



<p><strong>Sequencer Macro Code</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript shcb-wrap-lines"><span class="hljs-keyword">let</span> tokenD = canvas.tokens.get(args&#91;<span class="hljs-number">1</span>].tokenId);
<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"on"</span>) {
    <span class="hljs-comment">// If the dynamic active effect started</span>
    <span class="hljs-keyword">new</span> Sequence()
        .effect()
        .file(<span class="hljs-string">"modules/jb2a_patreon/Library/3rd_Level/Spirit_Guardians/SpiritGuardians_01_Dark_Blue_600x600.webm"</span>)
        .attachTo(tokenD)
        .scale(<span class="hljs-number">1.2</span>)
        .persist()
        .name(<span class="hljs-string">`Spirit-Guardians-<span class="hljs-subst">${tokenD.id}</span>`</span>)
        .fadeIn(<span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeOutCubic"</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">500</span> })
        .fadeOut(<span class="hljs-number">1500</span>)
        .rotateIn(<span class="hljs-number">90</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> })
        .rotateOut(<span class="hljs-number">350</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> })
        .scaleIn(<span class="hljs-number">1</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> })
        .scaleOut(<span class="hljs-number">0</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> })
        .opacity(<span class="hljs-number">0.7</span>)
        .belowTokens(<span class="hljs-literal">true</span>)
        .play()
}
<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"off"</span>) {
    <span class="hljs-comment">// If the dynamic active effect ended</span>
    Sequencer.EffectManager.endEffects({ <span class="hljs-attr">name</span>: <span class="hljs-string">`Spirit-Guardians-<span class="hljs-subst">${tokenD.id}</span>`</span>, <span class="hljs-attr">object</span>: tokenD });
}</code></span></pre>


<p><strong>Breakdown</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript shcb-wrap-lines"><span class="hljs-keyword">let</span> tokenD = canvas.tokens.get(args&#91;<span class="hljs-number">1</span>].tokenId); <span class="hljs-comment">//tells sequencer to make note of the token that is casting the spell</span>
<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"on"</span>) { <span class="hljs-comment">// looks to see if the DAE is applied to the token and if so tells sequencer to do something</span>
    <span class="hljs-keyword">new</span> Sequence() <span class="hljs-comment">//Creates a new sequence</span>
        .effect() <span class="hljs-comment">//contains the below effects</span>
        .file(<span class="hljs-string">"modules/jb2a_patreon/Library/3rd_Level/Spirit_Guardians/SpiritGuardians_01_Dark_Blue_600x600.webm"</span>) <span class="hljs-comment">//Our video file</span>
        .attachTo(tokenD) <span class="hljs-comment">//attaches it to the token sequencer made note of</span>
        .scale(<span class="hljs-number">1.2</span>) <span class="hljs-comment">//changes the scale of the repeating animation (good for if a spell effect has empty space around it)</span>
        .persist() <span class="hljs-comment">//makes the video persistent until further notice</span>
        .name(<span class="hljs-string">`Spirit-Guardians-<span class="hljs-subst">${tokenD.id}</span>`</span>) <span class="hljs-comment">//gives the effect a name</span>
        .fadeIn(<span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeOutCubic"</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">500</span> }) <span class="hljs-comment">//intro fade in animation (duration in milliseconds, {ease: “type of easing”, add a delay: duration in ms})</span>
        .fadeOut(<span class="hljs-number">1500</span>) <span class="hljs-comment">//outro fade effect (duration in ms) we call on this later</span>
        .rotateIn(<span class="hljs-number">90</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> }) <span class="hljs-comment">//intro rotate in (degrees, duration, {style})</span>
        .rotateOut(<span class="hljs-number">350</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> }) <span class="hljs-comment">//outro rotate out (degrees, duration, {style}) we call on this later</span>
        .scaleIn(<span class="hljs-number">1</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> }) <span class="hljs-comment">//intro scale in (size multiplier, duration, {style})</span>
        .scaleOut(<span class="hljs-number">0</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> }) <span class="hljs-comment">//outro scale out (size multiplier, duration, {style}) we call on this later</span>
        .opacity(<span class="hljs-number">0.7</span>) <span class="hljs-comment">//overall opacity of effect</span>
        .belowTokens(<span class="hljs-literal">true</span>) <span class="hljs-comment">//sets the animation below the token instead of above</span>
        .play() <span class="hljs-comment">//applies the above conditions and plays the effect</span>
}

<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"off"</span>) { <span class="hljs-comment">//watches for the DAE to end the tells sequencer to do something</span>
    Sequencer.EffectManager.endEffects({ <span class="hljs-attr">name</span>: <span class="hljs-string">`Spirit-Guardians-<span class="hljs-subst">${tokenD.id}</span>`</span>, <span class="hljs-attr">object</span>: tokenD }); <span class="hljs-comment">//ends animation, starts outro animation, completely removes Spirit Guardian Aura after outro.</span>
}</code></span></pre>

<h4 class="wp-block-heading" id="here-is-an-example-of-the-end-result">Here is an example of the end result<br><img loading="lazy" decoding="async" src="https://lh4.googleusercontent.com/iuKRTmYRzYvmnrTBnVrrHhmjTcIq-qu6bFmKkAGyNnVZYT1Z8KmGnTrC37J1_5R4BykHCLpF25C1KxAssDhm-rOyVW1GEyJl66zQwE4E_istU97ccWu0pGPBzok8FrhW2dkiPxrX" width="540" height="539"></h4>

<h3 class="wp-block-heading" id="static-image-method-using-aura-of-purity">Static image method, using Aura of Purity:</h3>


<p>In our case we want Sequencer to load an image and apply an intro effect, animation effect, and outro effect to it. </p>



<ol class="wp-block-list"><li>Create a “script” macro called “Aura-of-Purity-VFX” and leave “execute as gm” unchecked.</li><li>In the code field paste the below code. Then I will break it down for you.</li></ol>



<p><strong>Sequencer Macro Code</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript shcb-wrap-lines"><span class="hljs-keyword">let</span> tokenD = canvas.tokens.get(args&#91;<span class="hljs-number">1</span>].tokenId);

<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"on"</span>) {
    <span class="hljs-comment">// If the dynamic active effect started</span>
    <span class="hljs-keyword">new</span> Sequence()
        .effect()
        .file(<span class="hljs-string">"Player%20Files/Annihilation/Animated%20Spells%20Etc/Aura-of-Purity.webp"</span>)
        .attachTo(tokenD)
        .scale(<span class="hljs-number">1.125</span>)
        .persist()
        .name(<span class="hljs-string">`Aura-of-Purity-<span class="hljs-subst">${tokenD.id}</span>`</span>)
        .fadeIn(<span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeOutCubic"</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">500</span> })
        .fadeOut(<span class="hljs-number">1500</span>)
        .rotateIn(<span class="hljs-number">90</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> })
        .rotateOut(<span class="hljs-number">350</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> })
        .scaleIn(<span class="hljs-number">1</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> })
        .scaleOut(<span class="hljs-number">0</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> })
        .opacity(<span class="hljs-number">0.3</span>)
        .belowTokens(<span class="hljs-literal">true</span>)
        .loopProperty(<span class="hljs-string">"sprite"</span>, <span class="hljs-string">"rotation"</span>, { <span class="hljs-attr">from</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">to</span>: <span class="hljs-number">-360</span>, <span class="hljs-attr">duration</span>: <span class="hljs-number">20000</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">1500</span> })
        .filter(<span class="hljs-string">"Glow"</span>, { <span class="hljs-attr">color</span>: <span class="hljs-number">0x30e4ee</span>, <span class="hljs-attr">outerStrength</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">innerStrength</span>: <span class="hljs-number">0</span> })
        .play()
}

<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"off"</span>) {
    <span class="hljs-comment">// If the dynamic active effect ended</span>
    Sequencer.EffectManager.endEffects({ <span class="hljs-attr">name</span>: <span class="hljs-string">`Aura-of-Purity-<span class="hljs-subst">${tokenD.id}</span>`</span>, <span class="hljs-attr">object</span>: tokenD });
}</code></span></pre>


<p><strong>Breakdown</strong></p>


<pre class="wp-block-code"><span><code class="hljs language-javascript shcb-wrap-lines"><span class="hljs-keyword">let</span> tokenD = canvas.tokens.get(args&#91;<span class="hljs-number">1</span>].tokenId); <span class="hljs-comment">//tells sequencer to make note of the token that is casting the spell</span>

<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"on"</span>) { <span class="hljs-comment">// looks to see if the DAE is applied to the token and if so tells sequencer to do something</span>
    <span class="hljs-keyword">new</span> Sequence() <span class="hljs-comment">//Creates a new sequence</span>
        .effect() <span class="hljs-comment">//contains the below effects</span>
        .file(<span class="hljs-string">"Player%20Files/Annihilation/Animated%20Spells%20Etc/Aura-of-Purity.webp"</span>) <span class="hljs-comment">//Our static image file</span>
        .attachTo(tokenD) <span class="hljs-comment">//attaches it to the token sequencer made note of</span>
        .scale(<span class="hljs-number">1.125</span>) <span class="hljs-comment">//changes the scale of the repeating animation (good for if a spell effect has empty space around it)</span>
        .persist() <span class="hljs-comment">//makes the static image persistent until further notice</span>
        .name(Aura - <span class="hljs-keyword">of</span> - Purity - ${ tokenD.id }) <span class="hljs-comment">//gives the effect a name</span>
        .fadeIn(<span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeOutCubic"</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">500</span> }) <span class="hljs-comment">//intro fade in animation (duration in milliseconds, {ease: “type of easing”, add a delay: duration in ms})</span>
        .fadeOut(<span class="hljs-number">1500</span>) <span class="hljs-comment">//outro fade effect (duration in ms) we call on this later</span>
        .rotateIn(<span class="hljs-number">90</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> }) <span class="hljs-comment">//intro rotate in (degrees, duration, {style})</span>
        .rotateOut(<span class="hljs-number">350</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> }) <span class="hljs-comment">//outro rotate out (degrees, duration, {style}) we call on this later</span>
        .scaleIn(<span class="hljs-number">1</span>, <span class="hljs-number">2500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInOutCubic"</span> }) <span class="hljs-comment">//intro scale in (size multiplier, duration, {style})</span>
        .scaleOut(<span class="hljs-number">0</span>, <span class="hljs-number">1500</span>, { <span class="hljs-attr">ease</span>: <span class="hljs-string">"easeInCubic"</span> }) <span class="hljs-comment">//outro scale out (size multiplier, duration, {style}) we call on this later</span>
        .opacity(<span class="hljs-number">0.3</span>) <span class="hljs-comment">//overall opacity of effect</span>
        .belowTokens(<span class="hljs-literal">true</span>) <span class="hljs-comment">//sets the animation below the token instead of above</span>
        .loopProperty(<span class="hljs-string">"sprite"</span>, <span class="hljs-string">"rotation"</span>, { <span class="hljs-attr">from</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">to</span>: <span class="hljs-number">-360</span>, <span class="hljs-attr">duration</span>: <span class="hljs-number">20000</span>, <span class="hljs-attr">delay</span>: <span class="hljs-number">1500</span> }) <span class="hljs-comment">//slowly rotates the static image 1 full turn over 20000 ms and repeats the rotation until the effect ends</span>
        .filter(<span class="hljs-string">"Glow"</span>, { <span class="hljs-attr">color</span>: <span class="hljs-number">0x30e4ee</span>, <span class="hljs-attr">outerStrength</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">innerStrength</span>: <span class="hljs-number">0</span> }) <span class="hljs-comment">//applies a glow effect filter to make the static image a little fancier (“filter name”,{colour:red/hex code/markup code, outer effect distance, inner effect distance})</span>
        .play() <span class="hljs-comment">//applies the above conditions and plays the effect</span>
}

<span class="hljs-keyword">if</span> (args&#91;<span class="hljs-number">0</span>] === <span class="hljs-string">"off"</span>) { <span class="hljs-comment">//watches for the DAE to end the tells sequencer to do something</span>
    Sequencer.EffectManager.endEffects({ <span class="hljs-attr">name</span>: <span class="hljs-string">`Aura - of - Purity - <span class="hljs-subst">${tokenD.id}</span>`</span>, <span class="hljs-attr">object</span>: tokenD }); <span class="hljs-comment">//ends animation, starts outro animation, completely removes Aura of Purity Aura after outro.</span>
}</code></span></pre>

<h4 class="wp-block-heading" id="here-is-an-example-of-the-end-result-note-the-immunities-and-resistances-on-the-allied-token">Here is an example of the end result, note the immunities and resistances on the allied token</h4>


<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/8bm28_cp2nPCazoNB0mhSfPlxR7U_0YwG5ccw6EzZymKZawPoDgVwQFDV-PL_ma-317pkX9_F9X3OoXXyLvCQC3FmmW832bp1p4F4QL4T5W7OECNT8KcHqfgnQWFurGZYVE1Catx" alt=""/></figure>


<h3 class="wp-block-heading" id="notes">Notes</h3>


<p>The sequence of events here is as follows:</p>



<ol class="wp-block-list"><li>Cast spell on self</li><li>Spell applies DAE on self and executes macroExecute and runs our -VFX macro and Active Aura and places a Status Marker on self</li><li>Macro pulls image from folder, animates an intro</li><li>Macro applies animation effect to static image or plays video on repeat</li><li>Insert Gameplay, Roleplaying and Active Aura magic here</li><li>Concentration or Duration ends removing DAE, Active Aura, Status Marker</li><li>Tells the macro to animate the outro</li><li>All traces of the spell effect are removed from the scene</li></ol>



<p>All the above happens with <strong>one click</strong> of the spell.</p>



<p>If the spell has no <strong>Concentration </strong>or <strong>Duration</strong>, you need to remove the animation yourself by deleting the DAE that is applied to your caster.</p>



<p>If the spell has <strong>Duration </strong>only, you will need to wait for the duration to end or remove the animation yourself by deleting the DAE that is applied to your caster.</p>



<p>Of course, my file structure is different than yours, use your own file path to your video or image file.</p>



<p>Here is a link to the Sequencer Github Wiki for more sequencer settings and effects you can apply to your animations:<br><a href="https://github.com/fantasycalendar/FoundryVTT-Sequencer/wiki" target="_blank" rel="noreferrer noopener">https://github.com/fantasycalendar/FoundryVTT-Sequencer/wiki</a></p>


<h4 class="wp-block-heading" id="thanks-to">Thanks to</h4>


<p><img loading="lazy" decoding="async" alt="@Haxxer" src="https://lh4.googleusercontent.com/QxJmy2q9YCTA6ED-MhZUa9DLNLUZIEKWY8UrBI7uY17SxEjRF6AGR19sUkeSIZHs8uFwrZMtkDIHHfYWhivHc2CLfND5xyVSUGHTcZHcwJQw6Utw-u1H4_rcIpqShayJZPMe4n4J" width="32" height="32"> <a href="https://github.com/Haxxer" target="_blank" rel="noopener">Haxxer Adam Oresten</a></p>



<p><img loading="lazy" decoding="async" alt="@laquasicinque" src="https://lh3.googleusercontent.com/BHdHepF29P0trv8QPQgnt76nj9NHbwXoKsL-shVpyAn-NAq4DQrB_eU6D8Ffmcku_e9-414KBEsuazRrRv1DzMn6fqtpD9EkkXImmB65xU22M9MajSlVegwXZfW1768KuCluO3gp" width="32" height="32"> <a href="https://github.com/laquasicinque" target="_blank" rel="noopener">laquasicinque Adam D</a></p>



<p><img loading="lazy" decoding="async" alt="@V13Axel" src="https://lh4.googleusercontent.com/UKAQBhmg5rfUrrYxQ0ial96--96te7JcDCfhiIX-vCaJHZD9Bmrv3LECid4EVMu0f3XPd7PuLfCYkNMytSbFLFKnBwIrgLyCywus3dtItcbHcwIh213w8qt6WQ4i7hyd87-y5hcO" width="32" height="32"> <a href="https://github.com/V13Axel" target="_blank" rel="noopener">V13Axel Alex Dills</a></p>



<p><img loading="lazy" decoding="async" alt="@ghost91-" src="https://lh6.googleusercontent.com/dy_f76nI4a-6XyZqzN7QXCOLtJpGgVh2M2dhKb7J97QF-PYv5fX7gvAIrswhEmUBcHU40HW5LsgXnZBLNGafBaD3462sqPePWHsffeZDLWsepjheEaL-oGCbpAFKxo9nJcNPwcFj" width="32" height="32"> <a href="https://github.com/ghost91-" target="_blank" rel="noopener">ghost91- Johannes Loher</a></p>



<p>For creating such a killer module!</p>



<p>Additional thanks to the creators of the other modules used in this tutorial.</p>



<p>I hope this helps you learn how to use Sequencer to apply those awesome aura spells that you love as much as I do.</p>



<p>Cheers!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.foundryvtt-hub.com/guide/truly-automated-animations/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 79/838 objects using Memcached
Page Caching using Disk: Enhanced 
Minified using Disk
Database Caching 1/45 queries in 0.033 seconds using Memcached (Request-wide modification query)

Served from: www.foundryvtt-hub.com @ 2026-04-15 22:07:08 by W3 Total Cache
-->