animated-explainer
Skill0 starsChanged 25 days agoMITView on GitHub
Animated explainer videos - turns one prompt into a finished 2-4 minute narrated MP4 (Manim animation, polished flat motion-design style, ElevenLabs voice, .srt captions). Use whenever someone asks for an explainer, training, or educational video on any topic - "make a video explaining X", "3b1b/Kurzgesagt-style explainer on Y", "turn this doc into a training video", "animate how Z works" - even if they don't say "animated" or "Manim". For Pesty Marketing branded or marketing videos, use pesty-explainer instead.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- rliang/skillstheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- rliang/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository22 other files it gives its agents.
- ai-writing-tellsSkill
- ann-handleySkill
- buyer-personasSkill
- desktop-mockupSkill
- linkedin-guest-kitSkill
- mobile-mockupSkill
- pesty-asana-tasksSkill
- pesty-designSkill
- pesty-explainerSkill
- pesty-frontendSkill
- presentation-structureSkill
- problem-solving-processSkill
- pyramid-principleSkill
- scrSkill
- storybrandSkill
- storytellingSkill
- transcript-cleanupSkill
- ui-designSkill
- untangleSkill
- website-launch-impact-reportSkill
- youtube-thumbnailsSkill
- yt-structureSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 4 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
Run $SKILL_DIR/scripts/setup.sh.
- Distinctive: line 35
Before scripting, write down in one sentence each:
- Very specific: line 45
Write storyboard.json in this shape:
- Distinctive: line 62
Follow the 80/20 structure.
- Distinctive: line 69
Kill the nice-to-knows: If a detail doesn't directly serve the core solution, delete it.
- Distinctive: line 71
Write for the ear: short sentences, concrete nouns, "you", contractions, numbers spoken as words where natural.
- Very specific: line 95
Write scenes.py with one ExplainerScene subclass per act (class names = scene fields), importing the house library:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Animated explainer
Produce a finished, watchable video from a single request, with no check-ins: the user expects to get an MP4 back, not a draft or a question. Honor an explicit request for a script, storyboard, or shorter clip. Missing credentials or material source gaps need a focused clarification; never invent them. Two things make it good, and both matter equally. First, a script that teaches one idea through a character the viewer follows. Second, design polished enough to look like a motion studio made it: consistent layout, clear hierarchy, illustrations built for the concept. A strong script with amateur visuals still fails, because clumsy design distracts from the lesson.
Current edition: internal training. The tone is a smart colleague explaining something useful, warm and concrete, not a lecture or an ad.
For a script or storyboard request, complete the topic and storyboard steps and deliver those artifacts; skip runtime setup, credentials, narration, and rendering.
Pipeline at a glance
storyboard.json --tts.py--> audio/*.mp3 + timings.json --scenes.py (Manim + kurz.py)--> rendered acts
--frames.py--> visual QA stills --assemble.py--> explainer.mp4 + captions.srtThis packaged setup supports macOS with Homebrew. It needs FFmpeg, uv, and an ElevenLabs account/key; narration consumes ElevenLabs credits. Set SKILL_DIR to the absolute directory containing this loaded SKILL.md, resolving any installation symlink. It may be under .agents/skills, .codex/skills, or .claude/skills. Keep the whole folder together. The supplied training-video style uses Avenir Next, available on macOS.
Paths: PY=~/.local/share/animated-explainer/venv/bin/python, MANIM=~/.local/share/animated-explainer/venv/bin/manim. Always run the scripts with $PY; the system Python does not have Manim installed.
1. Set up
Run $SKILL_DIR/scripts/setup.sh. It installs the Cairo/Pango and Python rendering dependencies and checks FFmpeg, uv, the font, and ElevenLabs credentials. Install any missing prerequisite using the command it reports. Create the project at ~/Movies/Explainers/<slug>/ (slug = short kebab-case topic) and do all work there.
Done when setup prints ready.
2. Understand the topic
If the user supplied sources (files, URLs, notes), they are the ground truth: read them fully and build from them. Research with the available web search or page retrieval tools only for claims you aren't confident are correct and current, such as named people's actual statements, numbers, or recent tools. A training video that teaches something false is worse than no video. Write sources.md listing what you used, with any further reading you cut from the video for the "learn more" pointer.
Before scripting, write down in one sentence each:
- Audience pain: the moment a viewer feels the problem.
- The big-picture rule: the concept as a single principle.
- The 20% engine: the one mechanism or workflow that delivers most of the value. Only one.
- The takeaway: the sentence you want them repeating tomorrow.
Done when those four lines exist and every factual claim you plan to make is backed by your sources or by knowledge you're confident in.
3. Script the storyboard
Write storyboard.json in this shape:
{
"title": "Signal over Noise", "slug": "signal-over-noise",
"acts": [
{"id": "hook", "scene": "Hook", "beats": [
{"id": "hook-1", "narration": "It's 9am and Maya already has 47 unread messages.",
"visual": "Maya (Person, worried) in left third; message cards stack up in a panel on the right while a counter ticks to 47"}
]},
{"id": "concept", "scene": "Concept", "beats": [...]},
{"id": "engine", "scene": "Engine", "beats": [...]},
{"id": "takeaway","scene": "Takeaway", "beats": [...]}
]
}Follow the 80/20 structure. Each act has one job, and the engine gets the most time (rough shares: hook 10–20%, concept 20–33%, engine 38–55%, takeaway 8–18%):
- Hook (~first 30 s). Establish the relatable problem. Show a character experiencing the exact pain point the audience feels. Open on the character and their situation, not a definition or "Today we'll learn".
- Core concept. Introduce the concept as a useful approach, with its material limitations. Explain the big-picture rule, not the minor details.
- The 20% engine. Focus entirely on the single highest-yield mechanism. For a complex system, show the one workflow that solves the problem, not a tour.
- Takeaway / CTA (last ~30 s). A concrete next step or one memorable summary sentence. Point to the cut nuance here ("for the details, see …").
Micro-rules, which are what separate a good script from a lecture:
- Kill the nice-to-knows. If a detail doesn't directly serve the core solution, delete it. Move needed nuance to the resources pointer at the end.
- One line, one visual change. Each beat is one sentence, or two very short ones, and its
visualnames a specific transformation: something appears, moves, morphs, changes colour or expression. "Show the concept" is not a visual. If you can't name the change, the line is probably abstract filler, so rewrite or cut it. - Write for the ear: short sentences, concrete nouns, "you", contractions, numbers spoken as words where natural. Give the character a name and keep them through the video so the story has continuity.
- Default length: 400–520 words (narration runs ~2.3–2.9 words/second, so under ~400 words misses the 2-minute floor). Length comes from depth in the engine, not padding: if the draft is short, walk the mechanism through a concrete worked example (the character applying it step by step), or show it working on a second case. Never lengthen by adding nice-to-knows or a longer hook.
- Edit beats with
$PY $SKILL_DIR/scripts/sb.py <project> insert|set|delete|list(by beat id), rather than by list index, so you never overwrite a line.
For a requested shorter or longer clip, size the script to that duration rather than enforcing the default word count.
Save a readable script.md (narration grouped by act) alongside.
Done when every beat has an id, narration and concrete visual; the four acts are present; and you've re-read the script once, cutting anything that fails the micro-rules.
4. Voice it
Default narration is 130–230 seconds and the finished video is 120–240 seconds. For an explicitly requested shorter or longer video, evaluate timing against that request instead; default-runtime warnings alone do not reject it. At assembly, use --any-length only for that authorized length override or a smoke test, then verify the requested duration separately.
$PY $SKILL_DIR/scripts/tts.py <project>. It voices each beat with ElevenLabs, caches unchanged lines, and prints per-act timings. --dry-run shows the character count first, and --max-chars N refuses to bill more than N. ElevenLabs credit costs money, so dry-run before the first full voicing and avoid re-voicing beats needlessly. The report shows each act's share of the runtime and flags acts outside the 80/20 shape. If the total is outside the window or the engine is under-weighted, edit the script and re-run; only changed beats are billed.
Done when timings.json exists, the printed total matches the requested duration (130–230 s by default), and relevant warnings are resolved. Inspect the act-share report too: address unexplained outside-range markers even when they are not labeled WARNING.
5. Animate
Design first, then code. Read references/visual-style.md and open assets/reference.png, which shows the design system rendered and sets the level of finish to match. Read references/manim-patterns.md for code structure, timing and gotchas.
Before writing code, add a layout note to each beat in your head or in the storyboard: which header, which zone holds what, which container, and what moves. Pick the video's 2–3 accent colours and what each means. Plan the engine act as one bespoke diagram that builds up beat by beat; that diagram is the centrepiece of the video.
Write scenes.py with one ExplainerScene subclass per act (class names = scene fields), importing the house library:
import os, sys; sys.path.insert(0, os.environ["EXPLAINER_ASSETS"])
from kurz import *Each beat is a with self.beat("<id>") as b: block. Sound starts at the block's start and the block pads to the narration's length. Size animations with run_time=b.t(fraction) and keep a beat's fractions summing to ≤ 0.85, so the finished picture holds on screen while the sentence lands. Render all acts:
EXPLAINER_ASSETS="$SKILL_DIR/assets" EXPLAINER_DIR=<project> $MANIM -qh --disable_caching scenes.py Hook Concept Engine Takeaway (run from the project dir).
Done when every act renders without errors.
6. Check what you made
$PY $SKILL_DIR/scripts/frames.py <project> writes a contact sheet per act (the last frame of every beat) and prints layout warnings from the render: text overlaps, objects off-frame, animations overrunning narration. Open each sheet and look, because automated checks miss most visual problems. For every beat, ask:
- Is anything clipped, overlapping, unreadable, or tiny?
- Does the frame show what the narration says at that moment?
- Would a viewer with the sound off still follow the progression?
Then hold every frame to the composition checklist at the end of visual-style.md (grid alignment, one focal point, containers, type hierarchy, colour meaning, no unintended overlaps). Judge it the way a picky motion designer would: does this look intentionally designed, or assembled? Individual frames are full-size in build/frames/<Scene>/ when you need to check small text.
Fix problems in scenes.py and re-render only the affected acts (frames.py --scene <Name> re-checks one).
Done when every warning is resolved or deliberately accepted, and every frame passes both the three questions and the checklist.
7. Assemble and deliver
$PY $SKILL_DIR/scripts/assemble.py <project> joins the acts, writes captions.srt (timed from the real render), and verifies 1920×1080, audio present, 120–240 s, and caption coverage. It exits non-zero on failure; fix the cause rather than skipping checks.
Deliver: send explainer.mp4 to the user using the available file-delivery mechanism and reply in a few lines with the path to the project folder, the video length, the takeaway sentence, and anything you simplified or left out.
Done when assemble reports all checks ok and the user has the file.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

