manim-explainer-video

Generate animated technical explainer videos with Manim, Vietnamese narration, and timecoded subtitles.

Updated Feb 6, 2026
One-click install
npx skills add https://github.com/maycuatroi1/agent-skills --skill manim-explainer-video-maycuatroi1
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: manim-explainer-video
Source: https://github.com/maycuatroi1/agent-skills/tree/main/skills/manim-explainer-video
Command: npx skills add https://github.com/maycuatroi1/agent-skills --skill manim-explainer-video-maycuatroi1

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires manim, numpy, and includes scripts (resource) and references (resource) and assets (resource) components.

What problem does it solve? Building a Manim explainer video from scratch involves fighting macOS toolchain traps (wrong LaTeX, broken dvisvgm, missing fonts), keeping narration timecodes in sync with animations, and avoiding rendering errors like Vietnamese text in LaTeX. This Skill provides a working scaffold and validation scripts so the pipeline renders correctly from the start. ## Core Features & Use Cases - Ready-to-render scaffold: Ships theme.py, build_final.py, render.sh, and manifest.py implementing a light-theme design system, a cue-based SRT generation pipeline, and a real-number data workflow where only data.py and scenes.py need writing. - Cue-synced subtitles and dubbing: self.cue() timestamps come from self.renderer.time, so SRT, narration TSV, and the timecoded script stay aligned with the video automatically; check-audio.sh verifies TTS output against cue marks before muxing. - Guardrails and macOS fixes: check.sh catches the three fatal rules (em-dash, Vietnamese in LaTeX, multi-argument MathTex) via AST parsing, and setup.sh resolves the four known macOS traps (standalone.cls, dvisvgm, Inter font, ffmpeg/libass). - Use Case: Produce a 1080p60 math explainer video with Vietnamese voiceover: run new-video.sh, write real computations in data.py, build scenes with ValueTracker animations, iterate at 480p15, then render the final with auto-muxed narration. ## Quick Start Ask the agent to create a new Manim explainer video project in a target folder and render a test scene with Vietnamese text and LaTeX to verify the pipeline works.

Frequently Asked Questions about manim-explainer-video

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a Manim explainer video with Vietnamese narration?

Run new-video.sh with a target directory to copy the scaffold and set up the environment, then write your numbers in data.py and scenes in scenes.py. Place self.cue() calls before each animation, render with render.sh, and drop a timecode-aligned narration.mp3 in the folder for automatic muxing.

How do I keep Manim subtitles in sync with animations?

Use the CueScene class and call self.cue() right before the matching self.play() call. Timestamps come from self.renderer.time, and build_final.py adds real mp4 durations as offsets, so subtitles stay aligned automatically when animation timing changes.

Why does MathTex fail with multiple string arguments in Manim?

The pdflatex plus mutool pipeline produces SVGs without group ids, so Manim cannot split MathTex into submobjects per string and indexing raises IndexError. Use a single string per MathTex and combine multiple MathTex objects with VGroup and arrange() instead.

Why does Manim fail on macOS with standalone.cls not found?

The minimal TeX at /usr/local/bin lacks standalone.cls which Manim requires. Put /opt/homebrew/bin first in PATH before importing manim so the full Homebrew texlive is used, and verify with kpsewhich standalone.cls.

Can I use Vietnamese text inside MathTex or LaTeX in Manim?

No, LaTeX must contain ASCII only or compilation fails with Unicode errors. Render Vietnamese through Text() with Pango and the Inter font, then combine it with formulas using VGroup and arrange().

How do I verify TTS narration matches the video timecode?

Run check-audio.sh with the narration file after rendering; it detects speech onsets with ffmpeg silencedetect and compares them against cue marks in narration.tsv. Median offset near 0.2s with no line over 0.8s means the audio is aligned.