manim-video
Skill9 starsChanged 6 months agoApache-2.0View on GitHub
Generate Manim animations from ideas, research papers, or math topics. Use when user asks to "make a video about X", "animate X", "explain X with Manim", or invokes /manim-video. Orchestrates a 4-role pipeline (researcher + planner + implementer + main) to produce out/<run-id>/video.mp4 with chrome (header bar + captions) and cross-fade transitions, plus storyboard, scenes, narration script, and captions.srt.
29 other projects use a version of this.
Adopted by
Most recently taken up by
- Rojios/everything-claude-codetheir own version, first seen Nov 8, 2026
- delorenj/skillstheir own version, first seen Nov 7, 2026
- pankaj-mahaur/Agent-Daemontheir own version, first seen Nov 6, 2026
- yaohuangguan/remote-arctheir own version, first seen Nov 1, 2026
- Remote-Arc/remote-arctheir own version, first seen Nov 1, 2026
- jiawenlv/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use songwriting-and-ai-music, p5js and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Tommy-ywSkillsongwriting-and-ai-music
Songwriting craft, AI music generation prompts (Suno focus), parody/adaptation techniques, phonetic tricks, and lessons learned. These are tools and ideas, not rules. Break any of them when the art calls for it.
Also in 5 projects that use this
mae616Skillp5js
p5.js(クリエイティブコーディング)のProcessing由来「コードでスケッチ」思想を軸に、setup/drawループ・座標系・インタラクション・パフォーマンス最適化を整理する。p5.js、Processing、クリエイティブコーディング、ジェネラティブアート、インタラクティブ表現、ビジュアルプログラミング、Canvas描画、パーティクル、フラクタル、ノイズ表現に関する相談で必ず使うこと。ユーザーが「コードでアート」「動くビジュアル」「インタラクティブな描画」と言った場合にも適用する。
Also in 5 projects that use this
math-incSkillascii-video
Production pipeline for ASCII art video — any format. Converts video/audio/images/generative input into colored ASCII character video output (MP4, GIF, image sequence). Covers: video-to-ASCII conversion, audio-reactive music visualizers, generative ASCII art animations, hybrid video+audio reactive, text/lyrics overlays, real-time terminal rendering. Use when users request: ASCII video, text art video, terminal-style video, character art animation, retro text visualization, audio visualizer in ASCII, converting video to ASCII art, matrix-style effects, or any animated ASCII output.
Also in 5 projects that use this
math-incSkillfindmy
Track Apple devices and AirTags via FindMy.app on macOS using AppleScript and screen capture.
Also in 5 projects that use this
john-data-chenSkillteams-meeting-pipeline
Operate the Teams meeting summary pipeline via Hermes CLI — summarize meetings, inspect pipeline status, replay jobs, manage Microsoft Graph subscriptions.
Also in 4 projects that use this
Tommy-ywSkillmaps
Location intelligence — geocode a place, reverse-geocode coordinates, find nearby places (46 POI categories), driving/walking/cycling distance + time, turn-by-turn directions, timezone lookup, bounding box + area for a named place, and POI search within a rectangle. Uses OpenStreetMap + Overpass + OSRM. Free, no API key.
Also in 5 projects that use this
- +1 more from math-inc
- +1 more from Tommy-yw
Other versions29 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 29
- NousResearch/hermes-agent★ 262ksame name
- browser-use/video-use★ 29ksame name
- Tommy-yw/RunbookHermes★ 546same name
- aivrar/portable-hermes-agent★ 239same name
- dracohu2025-cloud/draco-skills-collection★ 227same name
- HybridAIOne/hybridclaw★ 159same name
- Fmarzochi/EGC★ 61same name
- wundercorp/loki★ 28same name
- delorenj/skills★ 17same name
- ApliroAI/manim-video-lab★ 16same name
19 more not listed
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 repositoryOne other file it gives its agents.
- CLAUDE.mdCLAUDE.md
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 3 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 29 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Do not activate for:
- Very specific: line 45
Run-id format: <YYMMDD-HHMM>-<slug> (slug derived from topic, ≤40 chars).
- Very specific: line 77
Ingest (only if
--paper): Run: - Very specific: line 85
Read agents/manim-researcher.md and agents/manim-planner.md.
- Very specific: line 91
T1 — final storyboard: After T0 returns, spawn the planner in mode: final with outline_path, draft_path, and on retry, validation_errors.
- Very specific: line 95
If exit non-zero: re-spawn the planner once with validation_errors.
- Very specific: line 97
--storyboard-onlyshort-circuit: If flag set, jump to step 7. - Very specific: line 115
T3 — summary: Write <out_dir>/summary.md with:
- Distinctive: line 116
Run id, command-line args, total duration
- Distinctive: line 173
Before T0, verify the venv is ready:
- Very specific: line 177
If exit non-zero: instruct user to run pwsh scripts/install.ps1 (Windows) or bash scripts/install.sh (Linux/macOS), then retry.
“Common” is measured: kept by at least 6 in 10 of the 29 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
manim-video
Turn ideas, papers, and math topics into rendered Manim animations with on-screen chrome (header bar + scene title cards), bottom-of-frame captions, gtts voiceover (default), and cross-fade transitions between scenes.
When to use
Activate this skill whenever the user wants:
- A short explanatory video for a concept ("explain Fourier transforms", "animate Pythagoras")
- A research paper visualized ("turn this arXiv paper into a 5-min video")
- A math derivation animated step by step
- Any invocation of
/manim-video --idea | --paper | --math
Do not activate for:
- Static images or single-frame plots — use matplotlib /
/ck:ai-multimodalinstead - Slideshow presentations — use
manim-slidesor/ck:remotion - Generic web animation — use
/ck:remotionor shaders
Inputs
| Flag | Required | Default | Notes |
--idea "<topic>" | one of these three | — | Pure topic; pipeline invents scope. |
--paper <id|url|path> | one of these three | — | arXiv id, PDF (local/URL), or HTML page. |
--math "<topic>" | one of these three | — | Math specialization; prefers MathTex when LaTeX available. |
--voice gtts|openai|elevenlabs | optional | gtts | Default flipped from null to gtts in 0.2.0. Keyless for gtts. |
--no-voice | optional | off | Opt out; captions still render. Mutually exclusive with --voice. |
--no-chrome | optional | off | Disable header + title cards. Captions still render. |
--transition-s <float> | optional | 0.7 | Cross-fade duration; range 0.3–1.5. |
--quality low|medium|high|4k | optional | high | 1080p60 default. |
--storyboard-only | optional | off | Stop after T1; skip rendering. |
--out <dir> | optional | out/<run-id>/ | Override output directory. |
Run-id format: <YYMMDD-HHMM>-<slug> (slug derived from topic, ≤40 chars).
Pipeline
T0 main → spawn manim-researcher (reads source.md if --paper) → outline.md
|| spawn manim-planner skeleton → storyboard.draft.yaml
T1 main → spawn manim-planner final (reads outline + draft) → storyboard.yaml (schema 0.2.0)
T2 main → spawn manim-implementer
→ emits scenes/_shared.py (chrome module, palette substituted)
→ emits scenes/scene_NN.py per scene (header + title card + caption track)
→ renders per-scene mp4 via scripts/render.py (retry budget = 5)
→ calls scripts/concat-xfade.py with meta.transition_s
→ calls scripts/emit-captions-srt.py to write captions.srt
T3 main → write summary.md (+ paths to captions.srt, _shared.py)Step-by-step
- Parse flags. Validate exactly one of
--idea/--paper/--math. Deriverun_idandout_dir. Resolve voice:
Resolve chrome:if --no-voice: voice = null elif --voice <p>: voice = <p> else: voice = "gtts" # default since 0.2.0
Validateshow_progress = not --no-chrome show_title_card = not --no-chrome (per-scene; planner override possible)--transition-sin [0.3, 1.5]; clamp on out-of-range. - Ingest (only if
--paper). Run:
Producespython scripts/ingest-router.py "<source>" --out <out_dir><out_dir>/source.md+<out_dir>/source.meta.json. If exit non-zero: stop, write summary.md with error. T0 — spawn two agents in parallel.
Read
agents/manim-researcher.mdandagents/manim-planner.md. Spawn both via theTasktool in a single message so they run concurrently:- Task A: subagent_type=
general-purpose, prompt =<contents of agents/manim-researcher.md>+ run-specific args (run_id, out_dir, source/topic, source_md_path if --paper). - Task B: subagent_type=
general-purpose, prompt =<contents of agents/manim-planner.md>+ skeleton-mode args (mode: skeleton, run_id, out_dir, topic, voice, quality, no_chrome, transition_s).
- Task A: subagent_type=
- T1 — final storyboard. After T0 returns, spawn the planner in
mode: finalwithoutline_path,draft_path, and on retry,validation_errors. Then validate:
If exit non-zero: re-spawn the planner once withpython scripts/validate-storyboard.py <out_dir>/storyboard.yamlvalidation_errors. After two failures, escalate to summary.md. --storyboard-onlyshort-circuit. If flag set, jump to step 7.T2 — implementer. Spawn:
- subagent_type=
general-purpose, prompt =<contents of agents/manim-implementer.md>+ args:RUN ARGS: run_id: <run_id> out_dir: <out_dir> storyboard_path: <out_dir>/storyboard.yaml quality: <quality> voice: <gtts|openai|elevenlabs|null> no_chrome: <true|false> retry_budget: 5 OUTPUT: scenes/_shared.py + scenes/scene_NN.py + manim_media/ + render.log + video.mp4 + captions.srt
Implementer writes
<out_dir>/render.logwith per-scene render JSON (now includingchrome_emitted,voice_path,scene_duration_sfields).- subagent_type=
- T3 — summary. Write
<out_dir>/summary.mdwith:- Run id, command-line args, total duration
- Paths: source.md, outline.md, storyboard.yaml, scenes/_shared.py, scenes/, video.mp4, captions.srt
- Render outcomes (per scene: ok / error_class / render_time_s)
- Voice path summary (gtts | fallback_caption_only | none); link error.md if voice fallback occurred
- Next steps if errors occurred
Outputs
out/<run-id>/
├── source.md # only if --paper (frontmatter + extracted markdown)
├── source.meta.json # only if --paper
├── outline.md # researcher: tldr + key concepts + visual metaphors + narrative arc
├── storyboard.draft.yaml # planner skeleton (schema 0.2.0)
├── storyboard.yaml # planner final (validated, schema 0.2.0)
├── scenes/
│ ├── _shared.py # chrome module emitted ONCE per run
│ └── scene_NN.py # implementer-emitted Manim scenes
├── manim_media/ # raw Manim render artifacts
├── video.mp4 # final concatenated render with cross-fades
├── captions.srt # SRT captions (cumulative offsets across all scenes)
├── render.log # per-scene render JSON (with chrome_emitted, voice_path, scene_duration_s)
├── error.md # only if any scene failed or voice fallback triggered
└── summary.mdError handling
- Ingest fails → stop after step 2; summary.md notes the URL/PDF that failed.
- Storyboard invalid twice → escalate to user; do not start rendering.
- Render fails after retry budget exhausted → implementer keeps successful scenes; concat-xfade builds video from successful subset; summary.md flags incomplete render.
- LaTeX missing + --math used → main pre-checks
xelatex --version. If absent: warn user, downgrade MathTex hints to Text in the storyboard via planner second-pass. - Voice fallback → after second voice-related failure on any scene, all remaining scenes downgrade to voice-free. Logged in error.md; final video is captioned only.
- xfade unavailable → concat-xfade falls back to plain ffmpeg concat (hard cuts). Logged in summary.md.
References
Lazy-load these only when needed:
references/manim-api-cheatsheet.md— Mobject + animation reference + chrome helpersreferences/storyboard-schema.md— Storyboard YAML format (v0.2.0)references/voiceover-text-style.md— Style guide forvoiceover_textfieldreferences/shared-chrome-template.py— Template the implementer copies into _shared.pyreferences/flag-reference.md— Long-form flag semanticsreferences/render-runner-contract.md—scripts/render.pyJSON contractreferences/xfade-concat-contract.md—scripts/concat-xfade.pyJSON contractreferences/voiceover-setup.md— TTS provider env vars + fallback policy../../docs/storyboard-migration-0.2.0.md— 0.1.x → 0.2.0 migration guide
Agent prompts live in agents/:
agents/manim-researcher.mdagents/manim-planner.mdagents/manim-implementer.md
Pre-flight
Before T0, verify the venv is ready:
python scripts/check-env.pyIf exit non-zero: instruct user to run pwsh scripts/install.ps1 (Windows) or bash scripts/install.sh (Linux/macOS), then retry.
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.

