Svg Mascot Animator logo

Svg Mascot Animator

Community
imMamdouhaboammar
svg-mascot-animator

Turn any static SVG mascot, logo, icon, or character into physics-driven animation, using Anime.js v4 as the default engine for interactive contexts and baked CSS keyframes for README and docs assets. Use this skill EVERY TIME the user wants to animate an SVG, add motion to a mascot or logo, build animated README or docs assets, create an animated badge or banner, mentions Anime.js or animejs, asks for "SVG animation", "حرك الـ mascot دي", "اعملي أنيميشن للـ SVG", "animate this logo", "motion for my icon", "README animation", or shares an SVG file and asks for movement, life, or a collection of poses. Also use when the user asks for believable motion physics on the web such as bounce, jump, swing, fall, squash and stretch, spring, motion path, line drawing, morph, stagger, walk cycle, floating, or inertia. Even for a single small request like "خليها تنط" or "make it bounce", use this skill.

Overview

PublisherimMamdouhaboammar
Repositoryvibe-svgs
Skill namesvg-mascot-animator
Stars
6
Forks
0
Bundled files
16
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 16 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by imMamdouhaboammar on GitHub. Read the source before you install it.

Installation

Install the Svg Mascot Animator AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/imMamdouhaboammar/vibe-svgs/tree/main/svg-mascot-animator
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/imMamdouhaboammar/vibe-svgs.git /tmp/vibe-svgs
mkdir -p .claude/skills
cp -r /tmp/vibe-svgs/svg-mascot-animator .claude/skills/svg-mascot-animator
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Svg Mascot Animator in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Svg Mascot Animator on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Svg Mascot Animator is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

SVG Mascot Animator

Static SVG in, animation out, with the timing coming from equations and solvers rather than from nudged keyframes. Anime.js v4 is the default engine. Where JavaScript cannot run, the same Anime.js solvers are sampled ahead of time and baked into CSS keyframes, so both versions of an asset share one motion identity.

What separates convincing motion from generic motion is not more keyframes. It is that the timing comes from somewhere real: a parabola carried by a motion path, a pendulum whose period follows from its length, a spring whose settling duration is computed by a solver rather than picked by feel.

Setup

Install the engine first, before writing any animation code:

bash
bash scripts/setup.sh          # npm install animejs, verifies the version and exports

In a browser without a build step, import pinned so a future release cannot change the motion under the user:

js
import { animate, createTimeline, spring, svg, utils } from 'https://esm.sh/animejs@4.5.0';

The API moved substantially at v4 and keeps growing, so confirm the installed surface rather than trusting a remembered snippet. setup.sh prints it, and node scripts/bake.mjs list prints the easing names.

Pick the track first

Runtime track — Anime.js drives the page. Docs sites, landing pages, product UI, artifacts, demos, anything reacting to scroll, hover, pointer, or state. Timelines, springs, motion paths, drawables, morphs, stagger, draggables. Start from assets/runtime-scene.html.

Static track — baked CSS inside a self-contained SVG. README images, badges, anything loaded through <img>, where scripting never executes. Anime.js still designs the motion; scripts/bake.mjs samples its easings and spring solver in Node and emits the keyframes.

Ask which one the asset is for. When the answer is both, design the timeline once on the runtime track, then bake it, since going the other direction loses the interactivity that made the runtime version worth building.

Workflow

1. Read the source and find the rig

bash
python3 scripts/inspect_svg.py <path-to-svg>

Reports the viewBox, the bounding box, how many separately addressable shapes exist, and the pivot translations to use when normalizing.

A single path cannot articulate. If the mascot is one path, limbs and eyes cannot move independently and every idea has to live at body level: squash, stretch, arcs, rotation, and secondary elements drawn outside the path. Say this early rather than promising a walk cycle you cannot deliver, and offer the split as an option, since separating the parts unlocks gait and reactions.

2. Pick stories, one physical domain each

A collection reads as a collection when the pieces do not repeat the same trick.

DomainFeels likeStory hooksAnime.js
Projectile + restitutioncommitted, weightyshipping, deploying, jumping a gapsvg.createMotionPath then spring() on landing
Pendulumrhythmic, hypnoticswinging between branches, hangingease:'inOutSine', alternate:true
Damped springcomic, reactiveload, pressure, overflowspring({stiffness, damping, mass})
Free fall + stackingescalatingqueue building, backlog, tokens pilingease:'inQuad' + stagger()
Hop cycle + treadmillpatient, loopinglong build, endless progresslooping timeline, ground offset matched to stride
Orbit + driftcalm, ambientidle, thinking, waitingcreateTimer or a sine-eased loop
Inertia dragmechanicalbeing pushed, dragging weightcreateDraggable with releaseEase: spring()
Reveal / constructiondeliberatebuilding, compiling, assemblingsvg.createDrawable with draw:['0 0','0 1']
Transformationsurprisingswitching modes, evolvingsvg.morphTo

Propose three with one-line stories and let the user pick or redirect. Serious brands may want the calm end of that table rather than the comic end.

Read references/animejs.md for the API and references/physics.md for the equations, easing map, and timing values before writing anything.

3. Rig the transform stack

Normalize the artwork once in <defs> so the origin sits at the natural pivot, then nest one transform per concern, outermost first: horizontal position, vertical position, rotation, scale. Mixing two concerns in one group forces hand-tuning, because CSS transform and Anime.js both replace the whole value rather than composing it.

The rig is identical on both tracks. That is deliberate: it is what lets one motion design ship twice.

references/rigging.md covers transform-box, the origin traps that silently break scaling, splitting a path for articulation, and reduced-motion poses.

4. Build the timeline

On the runtime track, createTimeline with explicit positions. The positions carry the performance: '<' to start with the previous beat, '<+=120' for a lag, stagger() as a position for a cascade. Let springs set their own durations.

On the static track, generate the SVG from a script that imports scripts/bake.mjs for spring and easing samples, or scripts/physics.py when the scene is pure ballistics and Node is unavailable. Print the computed constants and check them before writing the file. Reporting "apex 95 units over 0.85s implies g = 1052 units/s²" is how you catch a floaty arc before rendering it.

Two rules carry most of the quality:

  • Sample curves, interpolate linearly. A parabola becomes eight or nine samples with linear between them. An ease-in-out between two points always reads as floating. On the runtime track a motion path does this for you, which is why createMotionPath plus ease:'linear' beats easing a straight translate.
  • Use easing only where the real motion is genuinely eased. A pendulum is the clean case: inOutSine is sinusoidal velocity, which is exactly correct, so two keyframes suffice.

5. Layer the secondary motion

The primary motion is the least interesting half of the work:

  • Contact shadow driven by the subject's own height, read from the same samples or, at runtime, from the live transform in onUpdate. A shadow on its own curve drifts out of phase and quietly destroys the sense of depth.
  • Squash and stretch tied to velocity: stretch at launch and before impact, neutral at the apex where vertical velocity is zero, squash on contact.
  • Short contact frames. A landing squash beyond roughly 0.08s reads as soft.
  • Follow-through and lag: trailing parts on the same period, offset 6 to 10 percent, at roughly 20 percent of the amplitude.
  • Anticipation before any committed move, slow in and fast out.
  • Overshoot on arrival, which is what spring() gives for free.

6. Apply the asset contract

Both tracks satisfy all of this. references/contract.md explains why each item matters:

  • role="img" with <title> and <desc> wired through aria-labelledby
  • every id and every keyframe name prefixed with the filename stem, so several assets can be inlined on one page without collisions
  • a reduced-motion path: @media (prefers-reduced-motion:reduce) on the static track, a matchMedia guard that seeks the timeline to its payoff on the runtime track
  • a dark variant for neutral colours, with brand colours left alone
  • static track only: zero JavaScript, zero external references, zero web fonts

7. Verify before delivering

bash
python3 scripts/check_asset.py <output.svg>              # static track
python3 scripts/check_asset.py --runtime <scene.html>    # runtime track

Fix everything it reports, then deliver and explain the physics behind each piece: the constants, why that easing, what the secondary motion is doing. The explanation is part of the deliverable, since it is what lets the user judge and adjust the result.

Output conventions

Name files <subject>-<verb>, lowercase and hyphenated: claudecode-ship-it.svg. Loops run 3 to 6 seconds; shorter becomes irritating on a page someone is reading, longer means most viewers never see the payoff. When a scene cannot loop positionally, fade the actor across the last few percent and reset its position while it is invisible.

Keep each scene in a viewBox sized to its content, typically 320 to 480 units wide.

Reference files

  • references/animejs.md — v4 API surface, install, physics-to-feature mapping, springs, SVG helpers, baking, and the version traps. Read this before writing engine code.
  • references/physics.md — equations, easing map, timing tables, secondary motion.
  • references/rigging.md — transform stack, transform-box, origin traps, articulation.
  • references/contract.md — accessibility, namespacing, <img> limits, QA checklist.
  • scripts/setup.sh — installs Anime.js and prints the installed export surface.
  • scripts/bake.mjs — samples Anime.js easings and springs into CSS keyframes.
  • scripts/physics.py — closed-form generators for ballistics and oscillation without Node.
  • scripts/inspect_svg.py — geometry and riggability report for a source file.
  • scripts/check_asset.py — contract validator for both tracks.
  • assets/runtime-scene.html — working starting point for the runtime track.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Svg Mascot Animator AI skill do?

Turn any static SVG mascot, logo, icon, or character into physics-driven animation, using Anime.js v4 as the default engine for interactive contexts and baked CSS keyframes for README and docs assets. Use this skill EVERY TIME the user wants to animate an SVG, add motion to a mascot or logo, build animated README or docs assets, create an animated badge or banner, mentions Anime.js or animejs, asks for "SVG animation", "حرك الـ mascot دي", "اعملي أنيميشن للـ SVG", "animate this logo", "motion for my icon", "README animation", or shares an SVG file and asks for movement, life, or a collectio...

Why use Svg Mascot Animator on TypingMind?

Because you install it once and use it with any model. Svg Mascot Animator is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Svg Mascot Animator in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/imMamdouhaboammar/vibe-svgs/tree/main/svg-mascot-animator. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Svg Mascot Animator?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Svg Mascot Animator?

As many as you like. As long as a model supports skills, you can use Svg Mascot Animator with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Svg Mascot Animator AI skill free?

Yes. It is published on GitHub by imMamdouhaboammar under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇