PluginBench
Skill
Pass
Audit score 90

logo-animation

iart-ai/motion-design-skills

Animate logos for web, video, and apps with one clear technique—draw, build, morph, or loop.

What is logo-animation?

Brings brand marks to life with SVG stroke draw-on, mask reveals, build-on stagger, morphing, or idle loops. Use this when a user requests logo animations, intro stingers, app splash screens, loaders, or brand reveals. Covers web (SVG/Lottie), video, and app-splash delivery with static fallbacks and sound-logo sync.

  • Animate SVG logos with stroke draw-on, mask wipes, or build-on stagger techniques
  • Morph icons into wordmarks or shape-to-logo transitions using GSAP or path interpolation
  • Create idle loops for loaders and ambient splash animations
  • Sync logo settle frames to sound-logo audio peaks for premium brand moments
  • Export to Lottie for designer-made animations or Remotion for video intros/outros
  • Respect brand geometry, clearspace, and prefers-reduced-motion accessibility

How to install logo-animation

npx skills add https://github.com/iart-ai/motion-design-skills --skill logo-animation
Prerequisites
  • SVG markup of the logo (or Lottie JSON exported from After Effects)
  • GSAP library (for build-on and morph techniques) or CSS-only (for stroke draw-on)
  • Lottie player library (@lottiefiles/dotlottie-web) if delivering as Lottie format
  • Audio file and timecode of the sonic peak (if syncing to a sound-logo)
Claude Code
Cursor
Windsurf
Cline

How to use logo-animation

  1. 1.Choose one technique: stroke draw-on (line marks), mask wipe (filled shapes), build-on stagger (multi-piece), morph (icon↔wordmark), or idle loop (loaders)
  2. 2.Set reveal duration between 0.8–2.5s and ensure brand geometry is never distorted (scale/fade safe, skew/squash risky)
  3. 3.Implement the animation using CSS @keyframes, GSAP timeline, or Lottie player depending on your delivery target
  4. 4.Add a prefers-reduced-motion fallback that shows the final static mark without motion
  5. 5.If audio is present, time the logo settle to land exactly on the sound-logo peak for premium impact
  6. 6.Test the animation frozen at start, mid, and end frames using the ?t=N harness to verify fidelity and clearspace

Use cases

Good for
  • Build a 0.8–2.5s intro stinger or sign-off animation for a landing page hero
  • Create an app splash screen that draws or builds the logo on launch
  • Animate a loader with a seamless cyclic logo rotation or pulse
  • Reveal a brand mark piece-by-piece with staggered opacity and scale
  • Sync a logo animation to a sound-logo beat, settling on the audio peak
Who it's for
  • Product designers and brand teams building interactive brand experiences
  • Frontend developers implementing logo animations for web and app
  • Video producers creating intro/outro sequences with animated logos
  • Motion designers exporting Lottie animations from After Effects

logo-animation FAQ

Should I use stroke draw-on, build-on, or morph?

Pick ONE technique per logo. Stroke draw-on works best for line marks and signatures; mask wipe/build-on for filled shapes and multi-piece logos; morph for icon-to-wordmark transitions. Never combine techniques—it dilutes the brand moment.

What's the ideal reveal duration?

Reveals should run 0.8–2.5s. Shorter (0.8–1.2s) feels snappy for app splash and loaders; longer (1.5–2.5s) works for hero reveals and video intros. If syncing to audio, the settle must land on the sound-logo peak.

How do I deliver the animation—SVG, Lottie, or video?

For web/interactive: inline SVG + CSS or GSAP (smallest payload, crisp at any size). For designer-made: Lottie JSON exported from After Effects. For video: Remotion (React) or After Effects render to ProRes/H.264 at 2x resolution.

What's the prefers-reduced-motion requirement?

Always provide a static fallback that shows the final mark with no animation for users who prefer reduced motion. Use CSS @media (prefers-reduced-motion: reduce) or check matchMedia in JavaScript before playing Lottie.

How do I verify the animation is correct?

Use the ?t=N freeze harness to screenshot the animation at start (?t=0), mid (?t=duration/2), and end (?t=duration) frames. Check that brand geometry is intact, clearspace is respected, no half-drawn strokes remain, and the final frame is the clean logo.

Full instructions (SKILL.md)

Source of truth, from iart-ai/motion-design-skills.


name: logo-animation description: This skill should be used when the user asks to "animate our logo", "make a logo intro/stinger", "build a brand reveal", "create an app splash animation", "loop a loader logo", "draw on our SVG mark", "morph an icon into the wordmark", or "sync the logo to a sound-logo". Covers web (SVG/Lottie), video, and app-splash delivery. version: 0.1.0

Logo Animation

Bring a brand mark to life with one clear idea, on-brand geometry, and a crisp settle. Animate for web (SVG/Lottie), video intros/outros, or app splash screens, and always ship a static end-frame fallback.

When to use

  • Build an intro stinger, sign-off, app splash, or loader idle loop.
  • Reveal a brand mark on a landing hero or sizzle reel.
  • Draw on an SVG mark, wipe/build it in piece by piece, or morph an icon into a wordmark.
  • Sync the final settle of the mark to a sound-logo beat.

Core principle

Pick ONE technique per logo — draw OR build OR morph — not all at once. Reveals run 0.8–2.5s. Never distort brand geometry; scale and fade are safe, skew and squash usually are not. Respect clearspace (keep the mark's minimum margin clear of motion debris). Always provide a prefers-reduced-motion path that shows the final mark with no motion.

Technique map

TechniqueBest forMechanism
Stroke draw-onLine marks, monograms, signaturesstroke-dashoffset 1→0
Mask wipe / revealFilled shapes, gradientsanimate a <clipPath> / <mask> rect
Build-on (stagger)Multi-piece marks, gridsper-group opacity+transform, staggered
MorphIcon ↔ wordmark, shape→logoGSAP MorphSVG or matched path interpolation
Idle loopLoaders, ambient splashseamless cyclic transform (rotate/pulse)
WordmarkLogotypesper-letter mask/translate stagger

Quick start: SVG stroke draw-on

The fastest on-brand web reveal. Each path draws itself, then fills settle in.

<svg viewBox="0 0 200 80" id="logo">
  <path class="ink" d="M10 60 L40 20 L70 60" fill="none"
        stroke="#111" stroke-width="6" stroke-linecap="round"
        pathLength="1" stroke-dasharray="1" stroke-dashoffset="1"/>
</svg>
<style>
  @keyframes draw { to { stroke-dashoffset: 0; } }
  #logo .ink { animation: draw 1.1s cubic-bezier(.65,0,.35,1) forwards; }
  @media (prefers-reduced-motion: reduce) {
    #logo .ink { animation: none; stroke-dashoffset: 0; }
  }
</style>

pathLength="1" normalizes every path to length 1, so one stroke-dasharray/offset value works regardless of geometry. Stagger multiple strokes with animation-delay.

Quick start: build-on with stagger (GSAP)

import gsap from "gsap";
// each <g class="piece"> is one mark component
gsap.from(".piece", {
  opacity: 0, scale: 0.85, transformOrigin: "50% 50%",
  duration: 0.5, ease: "back.out(1.6)", stagger: 0.08,
  onComplete: () => gsap.to("#mark", { scale: 1, duration: 0.2, ease: "power2.out" })
});

Group order matters: reveal the base/container first, then accents, then the wordmark last so the eye lands on the name.

Sound-logo sync

When audio exists, the brand's final settle frame must land exactly on the sonic accent (the "ding"/whoosh peak). Decide the audio first, find the peak timecode, then time the reveal so the mark snaps to full opacity/scale on that frame. A 1.0s reveal landing a 1.2s mnemonic feels premium; a settle that floats free of the sound feels cheap. Add a tiny overshoot-and-settle (scale 1.04→1.00 over ~0.15s) on the beat for impact.

Delivery targets

  • Web, interactive / hero: inline SVG + CSS or GSAP. Smallest payload, crisp at any size, scriptable.
  • Product / app, designer-made: Lottie (.json exported from After Effects via Bodymovin). Use lottie-web or @lottiefiles/dotlottie-web; set loop, autoplay, and a poster fallback frame.
  • Video intro/outro: Remotion (React) or After Effects render to ProRes/H.264. Pre-render at 2x for crispness.
// Lottie delivery with reduced-motion guard
import { DotLottie } from "@lottiefiles/dotlottie-web";
const reduce = matchMedia("(prefers-reduced-motion: reduce)").matches;
const dl = new DotLottie({
  canvas: document.querySelector("#logo-canvas"),
  src: "/logo.lottie", autoplay: !reduce, loop: false,
});
if (reduce) dl.addEventListener("load", () => dl.setFrame(dl.totalFrames - 1));

Output checklist

  • Animated mark in the target format (SVG/Lottie/video).
  • Static final-frame fallback (SVG or PNG) for reduced-motion and posters.
  • One clear technique, reveal ≤2.5s, brand geometry intact, clearspace respected.
  • Sound-logo settle aligned to the audio peak (if audio present).

Deliver & verify (standalone HTML)

Packaged helper (scripts/): scripts/seek-shot.sh anim.html 0 1.5 3 freezes the ?t=N harness and screenshots each moment; scripts/contact-sheet.sh sheet.png frame-*.png tiles them for one-glance review. See scripts/README.md.

Logo animation spans web/SVG/Lottie, video, and app splash. For web/SVG/Lottie delivery use this standalone-HTML loop; for a video logo sting, render via the remotion-video verify loop instead.

For web/SVG/Lottie, ship one .html file that opens directly in a browser — inline SVG markup plus the reveal (CSS or one CDN GSAP <script>), self-contained. One file is the right tier.

Output contract:

  • One .html file: the inline SVG (or Lottie canvas) + the reveal in inline <style>/<script>.
  • One animation driver — the CSS @keyframes draw/build, or a single GSAP timeline; not both.
  • Include the freeze harness below, matched to the technique, so any moment can be screenshotted deterministically.

Freeze harness — pin a frame for screenshots. Match the mechanism to the technique:

<script>
  const t = new URLSearchParams(location.search).get("t");
  if (t !== null) {
    const T = parseFloat(t);
    // CSS stroke-draw / build-on:
    document.querySelectorAll("#logo *").forEach(el => {
      el.style.animationDelay = (-T) + "s";
      el.style.animationPlayState = "paused";
    });
    // GSAP timeline instead? → tl.pause(); tl.seek(T);
    // SMIL <animate>?       → const s = document.querySelector("svg"); s.pauseAnimations(); s.setCurrentTime(T);
    // Lottie?               → dl.setFrame(Math.round(T * fps));
  }
  window.__ready = true;                                          // ready signal for headless wait
</script>

Verify loop — render → freeze → screenshot → check:

  1. Open the file frozen at start / mid / end of the reveal (≤2.5s): …/logo.html?t=0, ?t=<dur/2>, ?t=<dur>.
  2. Screenshot each frozen frame.
  3. Check fidelity (matches the mark, one clear technique) and artifacts — brand geometry undistorted, clearspace clear of motion debris, no half-drawn strokes left at the end frame, the static final frame is the true logo.
  4. Iterate: if any check fails (e.g. a half-drawn stroke at ?t=<dur> or distorted geometry mid-reveal), fix the stroke-dashoffset/duration/easing, re-render the same ?t=N, and re-screenshot to confirm the fix — loop until every frame is clean.
npx playwright screenshot --wait-for-timeout=500 "file://$PWD/logo.html?t=1.1" frame-mid.png

Before you finish:

  1. Opens standalone in a browser — no console errors, no missing CDN.
  2. One technique/driver; ?t=N freezes the exact frame correctly.
  3. Screenshotted at start / mid / end — geometry intact, clearspace respected, final frame is the clean mark.
  4. prefers-reduced-motion honored (final static mark shown, no motion) + static end-frame fallback shipped.
  5. Reveal ≤2.5s; if audio present, the settle lands on the sound-logo peak.

Reference files

  • references/logo-patterns.md — runnable code for every technique: stroke draw-on, mask wipe build-on, GSAP MorphSVG morph, seamless idle loop, Lottie delivery, plus timing tables (0.8–2.5s), brand clearspace rules, and reduced-motion fallbacks.