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.
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.
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Yusuke710/manim-skill manim-skill --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .claude/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skillType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Yusuke710/manim-skill manim-skill --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/manim-skill .agents/skills/manim-skill && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .agents/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Yusuke710/manim-skill manim-skill --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/manim-skill .cursor/skills/manim-skill && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .cursor/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Yusuke710/manim-skill.git --path skills/manim-skill--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Yusuke710/manim-skill manim-skill --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/manim-skill .gemini/skills/manim-skill && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .gemini/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Yusuke710/manim-skill manim-skillInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/manim-skill .github/skills/manim-skill && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .github/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yusuke710/manim-skill --skill manim-skill -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Yusuke710/manim-skill manim-skill --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yusuke710/manim-skill.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/manim-skill .opencode/skills/manim-skill && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "manim-skill" agent skill from https://github.com/Yusuke710/manim-skill/tree/main/skills/manim-skill into .opencode/skills/manim-skill/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "manim-skill", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
manim-skillBuilds math and concept animations with Manim Community Edition, with optional local text-to-speech voiceover and synced subtitles, delivering script.py and video.mp4.
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.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit a0048d9. It shows what the files ask for, not the result of running them.
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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonffmpegpython3uvFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from Yusuke710/manim-skill at commit a0048d9, republished under its MIT licence (© Yusuke710). 733 words, ~1,827 tokens.
.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.You are a Manim animation expert. Create production-grade animations with Manim Community Edition (manimce).
video.mp4 exists; if blocked, return the exact blocker plainly.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.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):
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).
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.python "<TOOLS_DIR>/tts-generate.py" --narration narration.txtLocal 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.
Write script.py:
Scene1_Introduction, Scene2_DerivePDE) — this is what enables selective re-render during feedback and chapter navigation in the viewer.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 fps9:16 → 480×854, frame 9×16, 15 fps1:1 → 480×480, frame 8×8, 15 fps
Keep the pixel and frame aspect ratios matched.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)).MathTex(...) for formulas; prefer Tex(...) over Text(...) for prose (Pango can produce odd letter spacing).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))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.pymanim 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.mp4Without voiceover, write video.mp4 here instead and skip Phase 5.
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.mp4Verify 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.
Launch the viewer from SESSION_DIR, in the background:
python3 <TOOLS_DIR>/video_viewer.py video.mp4 --order concat.txt --script script.pyIt 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:
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.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
SKILL.md and 6 other files in skills/manim-skill of Yusuke710/manim-skill.
Open the folder on GitHubat commit a0048d9
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Manim Animation Creator this skillYusuke710/manim-skill | 166 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Manim Video Productionbrowser-use/video-use | 28k | 6 repos | ~3k | Automated safety check: Pass | MIT | |
| Remotionzhuzhaoyun/Molio | 432 | — | ~4k | Automated safety check: Pass | Custom licence | |
| Manim Explainer VideosPrismer-AI/PrismerCloud | 1.6k | 2 repos | ~3.1k | Automated safety check: Pass | MIT | |
| JianYing Editor Automationluoluoluo22/jianying-editor-skill | 3.8k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Qiaomu Cutjoeseesun/qiaomu-cut-skill | 369 | — | ~6.8k | Automated safety check: Notes | MIT |
browser-use/video-use
Produces math and technical explainer videos with Manim Community Edition: concept animations, equation derivations, algorithm walkthroughs and data stories.
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.
Prismer-AI/PrismerCloud
Produces 3Blue1Brown-style explainer animations with Manim Community Edition for math, algorithms, equations and architecture diagrams, with planning and rendering references.
luoluoluo22/jianying-editor-skill
Automates JianYing Pro video editing through a Python wrapper, JyWrapper, covering drafts, media import, subtitles, screen recording, voiceover and export.
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 “制作一个科普视频:介绍…
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…
Categories
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.