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- 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)
How to use logo-animation
- 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.Set reveal duration between 0.8–2.5s and ensure brand geometry is never distorted (scale/fade safe, skew/squash risky)
- 3.Implement the animation using CSS @keyframes, GSAP timeline, or Lottie player depending on your delivery target
- 4.Add a prefers-reduced-motion fallback that shows the final static mark without motion
- 5.If audio is present, time the logo settle to land exactly on the sound-logo peak for premium impact
- 6.Test the animation frozen at start, mid, and end frames using the ?t=N harness to verify fidelity and clearspace
Use cases
- 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
- 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
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.
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.
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.
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.
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
| Technique | Best for | Mechanism |
|---|---|---|
| Stroke draw-on | Line marks, monograms, signatures | stroke-dashoffset 1→0 |
| Mask wipe / reveal | Filled shapes, gradients | animate a <clipPath> / <mask> rect |
| Build-on (stagger) | Multi-piece marks, grids | per-group opacity+transform, staggered |
| Morph | Icon ↔ wordmark, shape→logo | GSAP MorphSVG or matched path interpolation |
| Idle loop | Loaders, ambient splash | seamless cyclic transform (rotate/pulse) |
| Wordmark | Logotypes | per-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 (
.jsonexported from After Effects via Bodymovin). Uselottie-webor@lottiefiles/dotlottie-web; setloop,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 3freezes the?t=Nharness and screenshots each moment;scripts/contact-sheet.sh sheet.png frame-*.pngtiles them for one-glance review. Seescripts/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
.htmlfile: the inline SVG (or Lottie canvas) + the reveal in inline<style>/<script>. - One animation driver — the CSS
@keyframesdraw/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:
- Open the file frozen at start / mid / end of the reveal (≤2.5s):
…/logo.html?t=0,?t=<dur/2>,?t=<dur>. - Screenshot each frozen frame.
- 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.
- 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:
- Opens standalone in a browser — no console errors, no missing CDN.
- One technique/driver;
?t=Nfreezes the exact frame correctly. - Screenshotted at start / mid / end — geometry intact, clearspace respected, final frame is the clean mark.
prefers-reduced-motionhonored (final static mark shown, no motion) + static end-frame fallback shipped.- 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.
Related skills
More from iart-ai/motion-design-skills and the wider catalog.

motion-art-direction
Define motion rules before animating—lock easing, timing, and hierarchy so every shot feels intentional.

shot-composition
Plan frame layouts, focal points, camera moves, and multi-aspect safe areas for motion design.

animation-principles
Tech-agnostic motion design foundation: timing, easing, spacing, and rhythm for natural-feeling animation.

60fps-animation
Fix janky animations by animating only transform and opacity, skipping expensive layout and paint work.

accessible-animation
Respect prefers-reduced-motion with tiered degradation, not all-or-nothing disabling.

gsap-web
Code-driven web animations: scroll storytelling, timelines, text reveals, and layout transitions with GSAP.