Agent skill

Manim Animation Creator

by Yusuke710 in Yusuke710/manim-skill

Builds math and concept animations with Manim Community Edition, with optional local text-to-speech voiceover and synced subtitles, delivering script.py and video.mp4.

MITAuto-check passedMedia & Creative

Install Manim Animation Creator

skills CLI
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Yusuke710/manim-skill manim-skill --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/manim-skill .claude/skills/manim-skill && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
manim-skill
GitHub stars
166
Token cost
~1.8k tokens
SKILL.md length
733 words
Files
7
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Builds math and concept animations with Manim Community Edition, with optional local text-to-speech voiceover and synced subtitles, delivering script.py and video.mp4.

  • Works in 6 steps: Narration → TTS → Code → …
  • Animating an equation, proof or algorithm as a short explainer video
  • SKILL.md covers Contract, Session Storage and Workflow: Narration → TTS →…
  • Runs Python scripts from its folder; calls python, ffmpeg and python3

What it does

For any animation request the agent keeps working until a video.mp4 exists, or reports the exact blocker, and delivers script.py with the video. It does not write a separate scene plan unless asked. Every project gets its own session folder under a manim-skill home directory, named after a short topic slug, so nothing is written into your working directory; only inputs such as your code are read from where they live.

Voiceover is on by default and the workflow runs narration, TTS, code, render, mux and view. Spoken lines go in narration.txt, a bundled script generates clips with the local Kokoro voice af_heart or another voice you name, and unchanged lines come from a cache. Kokoro speaks about 2.5 words per second, so line length is set from the target video length. A subtitle lint script and a small video viewer ship in the tools folder.

Voiceover, subtitles and muxing are skipped when you ask for a silent video or when the local kokoro package is missing; in that case the agent says voiceover was skipped and suggests installing kokoro and soundfile with uv.

When your agent uses it

  • Animating an equation, proof or algorithm as a short explainer video
  • Producing a narrated math visualization with synced subtitles
  • Turning a concept into a 3Blue1Brown-style video

Example prompts

  • “Animate how binary search narrows down a sorted list, with voiceover.”
  • “Make a silent Manim video that visualizes the Pythagorean theorem.”
  • “Create a short explainer on gradient descent with subtitles.”

Requirements

  • Manim Community Edition
  • Python
  • The kokoro and soundfile packages for voiceover

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Narration
  2. TTS
  3. Code
  4. Render
  5. Mux
  6. View & Feedback

What it can do on your machine

Read from SKILL.md and the folder at commit a0048d9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • ffmpeg
    • python3
    • uv

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Manim Animation Creator loads about 1.8k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 733 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~94
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Yusuke710/manim-skill at commit a0048d9, republished under its MIT licence (© Yusuke710). 733 words, ~1,827 tokens.

Download SKILL.mdSave it as .claude/skills/manim-skill/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
manim-skill
description
Create mathematical animations with Manim Community Edition(manimce), with optional TTS voiceover and synced subtitles. Generates distinctive, production-grade animations that avoid generic "AI slop" aesthetics. Use when user wants to animate concepts, equations, illustrate proofs, visualize algorithms, create math explainers, or produce 3Blue1Brown-style videos.

You are a Manim animation expert. Create production-grade animations with Manim Community Edition (manimce).

Contract

  • For animation requests, continue until video.mp4 exists; if blocked, return the exact blocker plainly.
  • Deliver script.py and video.mp4. Do not create plan.md or a separate written scene plan unless the user explicitly requests one. Choose the visual design and scene structure directly in the animation code.

Session Storage

NEVER write artifacts into the user's working directory. Every video is a flat session folder:

SESSION_DIR = ${MANIM_SKILL_HOME:-~/.manim-skill}/<project-slug>/
├── narration.txt    # spoken lines only (when narrated)
├── voiceover.mp3    # concatenated TTS audio
├── timestamps.json  # per-subtitle timing
├── script.py        # Manim code
├── concat.txt       # ffmpeg scene list
├── video.mp4        # final deliverable
└── media/           # manim output

<project-slug> is a short kebab-case topic name (append -2, -3, ... on collision). TOOLS_DIR is the tools/ directory next to this SKILL.md. When the video is about the user's code or files, read those from their original location — only outputs go in SESSION_DIR.

Setup — run once at the very start, then stay in SESSION_DIR for every phase so outputs land there; substitute <TOOLS_DIR> in the commands below with its absolute path (the tools are invoked in place, never copied):

bash
SESSION_DIR="${MANIM_SKILL_HOME:-$HOME/.manim-skill}/<project-slug>"
mkdir -p "$SESSION_DIR"
cd "$SESSION_DIR"

Voiceover is on by default. Skip narration, TTS, subtitle linting, muxing, and add_subcaption() only if the user asks for no TTS/narration/voiceover/captions, or the local kokoro package is not installed (then tell the user voiceover was skipped and that uv add "kokoro>=0.9.4" soundfile enables it).

Workflow: Narration → TTS → Code → Render → Mux → View

Phase 1: Narration

When voiceover is enabled, write only the spoken lines in narration.txt, using the exact format below. Each entry becomes one TTS clip. Kokoro speaks ≈2.5 words/second — size the lines to the target video length. For silent videos, start with Code.

subtitles:
- First voiceover line.
- Second voiceover line.
- Each entry becomes one TTS clip.
Phase 2: TTS
python "<TOOLS_DIR>/tts-generate.py" --narration narration.txt

Local Kokoro voice af_heart by default; --voice <name> (e.g. am_adam, bf_emma) for another. Unchanged lines are served from .tts-cache/.

Produces voiceover.mp3 and timestamps.json. The run prints how many clips it found — confirm it matches your narration line count (a mismatch means the block didn't parse; fix the format in narration.txt). Read timestamps.json before writing code — each duration_s is the exact time budget for that subtitle's segment.

Phase 3: Code

Write script.py:

  1. One class per scene, named descriptively (Scene1_Introduction, Scene2_DerivePDE) — this is what enables selective re-render during feedback and chapter navigation in the viewer.
  2. Render config lives in script.py — set config.pixel_width, config.pixel_height, config.frame_width, config.frame_height, config.frame_rate there (it determines output paths). Iteration defaults unless the user asks otherwise:
    • 16:9 → 854×480, frame 16×9, 15 fps
    • 9:16 → 480×854, frame 9×16, 15 fps
    • 1:1 → 480×480, frame 8×8, 15 fps Keep the pixel and frame aspect ratios matched.
  3. Each narration line becomes exactly one self.add_subcaption(text, duration=duration_s) call — same text, same order (a scene may hold several consecutive segments). Never burn subtitles in as text mobjects: add_subcaption() emits the per-scene .srt files the viewer uses; the linter simulates the calls in script.py. Inline each duration_s from timestamps.json as a literal, set explicit run_time= on every play(), keep total scheduled time (including wait() and move_camera()) within the budget, and end each segment with self.wait(max(0, dur - used)).
  4. MathTex(...) for formulas; prefer Tex(...) over Text(...) for prose (Pango can produce odd letter spacing).
python
from manim import *

class Scene1_Introduction(Scene):
    def construct(self):
        title = Tex("My Topic", font_size=48, color=BLUE)

        dur = 2.8        # duration_s from timestamps.json
        anim_rt = 1.5
        self.add_subcaption("Introduction to My Topic", duration=dur)
        self.play(Write(title), run_time=anim_rt)
        self.wait(max(0, dur - anim_rt))
Show full SKILL.md (243 more words)Show less
Phase 4: Render

For narrated videos, lint first — render only when it passes. Exit code 1 means timing issues; 2 means the simulation was incomplete or invalid. Fix the cause before rendering. Skip this check for silent videos:

python "<TOOLS_DIR>/lint-subtitles.py" script.py
manim script.py Scene1_Introduction Scene2_Main ...

Scenes land in media/videos/script/<pixel_height>p<frame_rate:g>/SceneName.mp4. Write concat.txt listing them in order (the viewer needs it for chapters):

file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_Main.mp4'
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy -movflags +faststart video_silent.mp4

Without voiceover, write video.mp4 here instead and skip Phase 5.

Phase 5: Mux
ffmpeg -y -i video_silent.mp4 -i voiceover.mp3 \
  -map 0:v:0 -map 1:a:0 \
  -c:v copy -c:a aac \
  -movflags +faststart video.mp4

Verify video.mp4 with ffprobe, inspect representative frames for readability and layout, and check rendered audio/video sync when narrated. The linter is a simulation, not a substitute for these checks.

Phase 6: View & Feedback

Launch the viewer from SESSION_DIR, in the background:

python3 <TOOLS_DIR>/video_viewer.py video.mp4 --order concat.txt --script script.py

It prints VIDEO_READY http://localhost:<port> and opens the browser. Tell the user the URL and the SESSION_DIR path.

The viewer's Capture button (T) drops timestamped lines into the feedback panel, e.g. [0:07] Scene3_Identity: the c² label overlaps the triangle. When feedback references a moment like that, extract that exact frame (ffmpeg -y -ss 7 -i video.mp4 -vframes 1 f.png) and Read it before touching code — seeing what the user saw beats guessing.

Then iterate:

  1. If voiceover lines changed: edit narration.txt, re-run Phase 2 (unchanged lines are cache hits; python "<TOOLS_DIR>/tts-generate.py" --bust <index or text fragment> force-regenerates one clip), and update script.py to the new timestamps.json.
  2. Fix the named scenes, lint when narrated, re-render only the affected scenes, re-mux.
  3. The viewer serves the new video.mp4 on reload; restart it only if it was stopped.

© Yusuke710, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files in skills/manim-skill of Yusuke710/manim-skill.

  • SKILL.md
  • tools/README.md
  • tools/lint-subtitles.py
  • tools/tts-generate.py
  • tools/ui.html
  • tools/video_viewer.png
  • tools/video_viewer.py

Open the folder on GitHubat commit a0048d9

Compare with similar skills

Manim Animation Creator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Manim Animation Creator compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Manim Animation Creator this skillYusuke710/manim-skill166—~1.8kAutomated safety check: PassMIT
Manim Video Productionbrowser-use/video-use28k6 repos~3kAutomated safety check: PassMIT
Remotionzhuzhaoyun/Molio432—~4kAutomated safety check: PassCustom licence
Manim Explainer VideosPrismer-AI/PrismerCloud1.6k2 repos~3.1kAutomated safety check: PassMIT
JianYing Editor Automationluoluoluo22/jianying-editor-skill3.8k—~2.2kAutomated safety check: PassApache-2.0
Qiaomu Cutjoeseesun/qiaomu-cut-skill369—~6.8kAutomated safety check: NotesMIT

Similar skills

  • Manim Video Production

    browser-use/video-use

    Produces math and technical explainer videos with Manim Community Edition: concept animations, equation derivations, algorithm walkthroughs and data stories.

    28k GitHub starsUsed in 6 repos~3k tokens
    Media & CreativeAuto-check passed
  • Remotion

    zhuzhaoyun/Molio

    Molio's builtin skill for MAKING a video from any source — wiki notes, articles, scripts, product info, or a brief — and rendering it to MP4.

    432 GitHub stars~4k tokensUpdated today
    Media & CreativeAuto-check passed
  • Manim Explainer Videos

    Prismer-AI/PrismerCloud

    Produces 3Blue1Brown-style explainer animations with Manim Community Edition for math, algorithms, equations and architecture diagrams, with planning and rendering references.

    1.6k GitHub starsUsed in 2 repos~3.1k tokens
    Media & CreativeAuto-check passed
  • JianYing Editor Automation

    luoluoluo22/jianying-editor-skill

    Automates JianYing Pro video editing through a Python wrapper, JyWrapper, covering drafts, media import, subtitles, screen recording, voiceover and export.

    3.8k GitHub stars~2.2k tokensUpdated 27 days ago
    Media & CreativeAuto-check passed
  • Qiaomu Cut

    joeseesun/qiaomu-cut-skill

    把一句话需求转成可复现、可验收视频工程的乔木智能剪辑导演。Use when the user asks to create, plan, edit, remix, explain, narrate, subtitle, animate, composite, or render a video—including one-line requests such as “制作一个科普视频:介绍…

    369 GitHub stars~6.8k tokensUpdated 10 days ago
    Media & CreativeAuto-check: notes
  • Showtime

    FavioVazquez/showtime

    A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…

    178 GitHub stars~3k tokensUpdated today
    Media & CreativeAuto-check passed

Works with

Questions about Manim Animation Creator

What does Manim Animation Creator do?

Builds math and concept animations with Manim Community Edition, with optional local text-to-speech voiceover and synced subtitles, delivering script.py and video.mp4. py with the video. It does not write a separate scene plan unless asked.

When should I use Manim Animation Creator?

Manim Animation Creator fits situations like: animating an equation, proof or algorithm as a short explainer video; producing a narrated math visualization with synced subtitles; turning a concept into a 3Blue1Brown-style video.

How do I install Manim Animation Creator in Claude Code?

Run `npx skills add Yusuke710/manim-skill --skill manim-skill -a claude-code`. Or copy the skill folder (skills/manim-skill in Yusuke710/manim-skill) into .claude/skills/manim-skill in your project. Claude Code loads it when a task matches its description.

How do I install Manim Animation Creator in Codex?

Run `npx skills add Yusuke710/manim-skill --skill manim-skill -a codex`. Or copy the skill folder (skills/manim-skill in Yusuke710/manim-skill) into .agents/skills/manim-skill in your project. Codex loads it when a task matches its description.

Can I use Manim Animation Creator in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Yusuke710/manim-skill --skill manim-skill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/manim-skill, .gemini/skills/manim-skill, .github/skills/manim-skill and .opencode/skills/manim-skill in your project.

What does Manim Animation Creator need to run?

Going by SKILL.md and its folder, Manim Animation Creator needs Python for the scripts in its folder and the command-line tools its instructions call (python, ffmpeg, python3 and uv). Our summary lists: Manim Community Edition; Python; The kokoro and soundfile packages for voiceover.

Does Manim Animation Creator access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Manim Animation Creator safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Manim Animation Creator use?

Manim Animation Creator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Manim Animation Creator use?

About 1.8k tokens (SKILL.md is roughly 7.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Manim Animation Creator?

Skills that share tags, products or a category with Manim Animation Creator: Manim Video Production (browser-use/video-use, 28k stars), Remotion (zhuzhaoyun/Molio, 432 stars), Manim Explainer Videos (Prismer-AI/PrismerCloud, 1.6k stars) and JianYing Editor Automation (luoluoluo22/jianying-editor-skill, 3.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Manim Animation Creator?

Yusuke710 (a GitHub user) maintains it in Yusuke710/manim-skill, which has 166 GitHub stars. The repository was last updated on October 7, 2026.

Source: Yusuke710/manim-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.