Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when implementing Disney's 12 animation principles with Lottie animations exported from After Effects
.claude/skills/video-production-buddy-lottie-bodymovin/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 18% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 82% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 37% | 0% |
Implement all 12 Disney animation principles using Lottie (Bodymovin) for vector animations.
In After Effects before export:
s = transform.scale[1]; [100 + (100-s), s]javascript// Control at runtime lottie.setSpeed(1.5); // affect squash timing
Structure your AE composition:
javascript// Play anticipation segment anim.playSegments([0, 10], true); setTimeout(() => anim.playSegments([10, 50], true), 200);
javascript// Layer multiple Lotties <div className="scene"> <Lottie animationData={background} style={{ opacity: 0.6 }} /> <Lottie animationData={hero} style={{ zIndex: 10 }} /> </div>
Pose to pose in AE:
javascript// Jump to specific poses anim.goToAndStop(25, true); // frame 25
In After Effects:
thisComp.layer("Parent").transform.position.valueAtTime(time - 0.05)AE Keyframe settings:
javascript// Adjust playback speed dynamically anim.setSpeed(0.5); // slower anim.setSpeed(2); // faster
In After Effects:
javascript// Trigger secondary animation mainAnim.addEventListener('complete', () => { secondaryAnim.play(); }); // Or sync with frame mainAnim.addEventListener('enterFrame', (e) => { if (e.currentTime > 15) particleAnim.play(); });
javascriptanim.setSpeed(0.5); // half speed - dramatic anim.setSpeed(1); // normal anim.setSpeed(2); // double speed - snappy // Or control frame rate in AE export // 24fps = cinematic, 30fps = smooth, 60fps = fluid
In After Effects:
amp = 15; freq = 3; decay = 5; n = 0; time_start = key(1).time; if (time > time_start) { n = (time - time_start) / thisComp.frameDuration; amp * Math.sin(freq*n) / Math.exp(decay*n/100); } else { 0; }In After Effects:
Design principles in AE:
javascript// React Lottie with hover <Lottie animationData={data} onMouseEnter={() => anim.setDirection(1)} onMouseLeave={() => anim.setDirection(-1)} />
javascriptimport Lottie from 'lottie-react'; import animationData from './animation.json'; <Lottie animationData={animationData} loop={true} autoplay={true} style={{ width: 200, height: 200 }} />
playSegments([start, end]) - Play frame rangesetSpeed(n) - Control timingsetDirection(1/-1) - Forward/reversegoToAndStop(frame) - Pose controladdEventListener - Frame eventslottie-interactivityOther measured skills in the registry, with their headline benchmark lift.