English | 한국어
Plan, render and revise 3Blue1Brown-style videos with Claude Code, on the CodingVillainKor/manimgl fork
A Claude Code plugin for the CodingVillainKor/manimgl fork only: 3b1b/manim with defaults adjusted for a Korean environment. Its rules come from the fork source at commit 455a4201 (2026-10-11), the usage patterns in manimgl-imcommit and real renders, with evidence cited as file:line. It is not for PyPI manimgl or ManimCE (manim).
/plugin marketplace add getCurrentThread/manimgl-skill
/plugin install manimgl-skill@manimgl-skill
- From a shell:
claude plugin marketplace add getCurrentThread/manimgl-skill, thenclaude plugin install manimgl-skill@manimgl-skill. - From a local clone:
git clone https://github.com/getCurrentThread/manimgl-skill.git, then/plugin marketplace add <path to the clone>. A relative path such as./manimgl-skillis resolved against the folder Claude Code was started in and registered as a fixed directory, so it breaks if the clone is moved or deleted (Marketplace file not found at ...\.claude-plugin\marketplace.json). If that happens:/plugin marketplace remove manimgl-skill, then add it again. - Plugin commands are namespaced, so the command is
/manimgl-skill:scene. - The marketplace and the plugin are both named
manimgl-skill;owner/authorin.claude-plugin/*.jsonare placeholders (manimgl-skill maintainers), to be replaced on publishing.
Videos live under src/<video>/ in a uv project with the fork pinned to 455a4201 (set up once per project). /manimgl-skill:scene runs the setup script itself when the project has no fork. To prepare a project by hand:
bash path/to/manimgl-skill/scripts/setup.sh [PROJECT_DIR] [--with-raenimgl] [--smoke]- Requires
uv,ffmpegandgit. Also wanted:ffprobe(the viewer needs it), an OpenGL context, and the Noto Sans KR font (the fork's defaultTextfont). LaTeX withdvisvgmand cm-super is optional and only needed forTex,TexTextand other LaTeX-based classes. - PROJECT_DIR defaults to the current folder. Without a
pyproject.tomlthere, a Python 3.10 uv project is created. The script adds the fork plustrimeshandpywavefront(the fork imports them but does not declare them), then checks thatmanimlibreally is the fork. A fork already at another commit is left unchanged, with a warning.--smokerenders a test scene;--with-raenimglalso adds raenimgl. - If the project already depends on PyPI
manimgl, it prints the fix command and exits 2 without changing anything. - Verified on Windows 11 (Git Bash) with MiKTeX only. Every branch, warning and MiKTeX note: docs/details.md.
In an empty folder, run /manimgl-skill:scene <topic>, for example /manimgl-skill:scene 이진 탐색을 설명하는 30초 영상.
-
Plan - Claude reads the source you point to (paper, docs, code). If the audience, length or depth is unclear, it asks at most 3 questions in one message. It then writes
src/<video>/scenes.md: audience, core idea, hook, aha moment, misconception, color roles, and 1-8 scenes of 15-30 s each. No code is written until you approve the plan. -
Code & Render - One class per scene in
src/<video>/main.py. Each scene is checked on its last frame (-sw), then rendered as a 480p draft (-w -l) and read as 0.5 s frame sheets, because the last frame hides mid-animation overlaps. The read-onlyscene-revieweragent can give a second look. The final render is-w(1920x1080, 30 fps) per scene. -
Iterate - Claude joins the scenes into
full.mp4and starts a local viewer (Python standard library and ffprobe) with one chapter per scene and a Code tab that showsmain.py.Pause where something is wrong and press t or click Capture. The time and scene name go into Notes as
[M:SS] <Scene>:; finish the line, for example[0:07] Quantize: the label overlaps the axis. Click Copy and paste the notes into Claude Code.For each line, Claude extracts that second of
full.mp4, fixes only the named scene, re-renders it, rebuildsfull.mp4and restarts the viewer on the same port. It compares the frames from before and after the fix, then reports back. Refresh the tab to watch the new version.
Team mode (opt-in). If you ask for subagents, the main session leads and sub-agents write and render one act file each, with reviewers and phase gates. It costs many tokens. See references/team-production.md.
skills/manimgl-best-practices applies to any from manimlib import * code, inside or outside /manimgl-skill:scene. It covers ManimCE and upstream habits that fail or misbehave on the fork (Create, MathTex, -ql/-p, Succession, ...), constructor color= that many classes silently ignore, color names the fork lacks, module-level seeds that Scene.__init__ overrides, Korean in Text and Tex, camera orbits, and the CLI.
references/: 9 evidence documents withF:/U:/R:/I:file:linecitations (fork, upstream, raenimgl, imcommit).examples/: 10 render-verified scene files.gallery/: 9 ported ML and math scene files (17 scenes), CC BY-NC-SA 4.0.- The skill documents (
SKILL.md,references/, templates) are written in English. Korean sample strings in them are intentional.
Full file map: docs/details.md.
Videos are silent unless you ask for narration (Narration: voiceover in scenes.md).
tools/tts.pyturnsnarration.txtinto one clip per line plusnarration/timestamps.json, cached by hash. The default engine is Windows SAPI with the local Korean voice Microsoft Heami Desktop.--engine edgeuses edge-tts, which sends every line to Microsoft's online service. Claude uses it only if you choose it.--engine geminiuses Google's Gemini TTS (needsgoogle-genaiand a key in the env var named by--key-env, defaultGEMINI_API_KEY). It sends every new line to Google, so Claude uses it only if you choose it.--batch K(gemini only) groups K uncached lines per request;--say FROM=TO(any engine) fixes a pronunciation without changing the subtitles.tools/voiceover.pyadds aNarratedmixin:with self.voice(k):plays line k, and each-wrender gets an audio track and a per-scene.srtthat the viewer joins into subtitles.- Local engine:
sapi, Windows only. Network engines:edge,gemini; they do not need Windows but were not run on macOS or Linux. Details: references/voiceover.md.
While the plugin is enabled, a PostToolUse hook runs scripts/lint_manimgl.py after every Write/Edit/MultiEdit. It acts only on .py files that import manimlib or raenimgl (or manim inside a project whose pyproject names manimgl), never blocks, and hands its findings to Claude as context. It needs python3 or python on PATH.
The same lint runs by hand, without the fork or a GPU: python scripts/lint_manimgl.py <file>. scripts/check_docs.py, check_citations.py, check_inventory.py and check_examples.sh test the docs' code, the API inventory and every example render against the fork, and the file:line citations against the pinned reference repos. Commands, requirements and exit codes: docs/details.md.
Everything is written inside your uv project:
<uv project>/
pyproject.toml # fork pinned by setup.sh
src/<video>/ # every command runs from here
scenes.md # the approved plan
main.py # one class per scene
videos/<Scene>.png # last frame (-sw)
videos/<Scene>.mp4 # scene render (-w -l draft, then -w)
concat.txt # scene order for ffmpeg and the viewer
full.mp4 # joined video
narration.txt, narration/, voiceover.py, videos/<Scene>.srt, full.srt # only with narration
manimgl writes its output under videos/ of the current folder, which is why Claude works from src/<video>.
There is no top-level LICENSE yet; one will be added once the copyright holder is decided. Until then, the third-party parts keep their own licenses:
| Part | Source | License |
|---|---|---|
Viewer (skills/manimgl-workflow/tools/video_viewer.py, ui.html) and parts of tts.py (cache key, ffprobe durations, timestamps.json) |
Yusuke710/manim-skill | MIT, tools/LICENSE-manim-skill |
Planning references (skills/manimgl-workflow/references/narrative-patterns.md, visual-techniques.md, templates/scenes-example.md) |
adithya-s-k/manim_skill skills/manim-composer/ |
MIT, references/LICENSE-manim_skill |
skills/manimgl-best-practices/gallery/ and renders of its scenes (docs/demo.gif, docs/viewer.png) |
adithya-s-k/manim_skill, example code originally by Grant Sanderson / 3Blue1Brown | CC BY-NC-SA 4.0, gallery/LICENSE.txt |
gallery/ is NonCommercial and ShareAlike. Whatever license the rest of the plugin gets will not cover it. A copy that includes gallery/ or those two images cannot be used commercially, and modified gallery files must stay under CC BY-NC-SA 4.0.
The fork, 3b1b/manim, manimgl-imcommit, raenimgl and 3b1b/videos were read and compared; manimgl-imcommit and raenimgl have no LICENSE file, so no code was copied from them. Full table with pinned commits: docs/details.md.

