Manimgl video
Writes math explainer animation code with ManimGL — 3Blue1Brown's own Manim (`pip install manimgl`, `from manimlib import *`). Use when the user wants animated equations, function graphs and coordinate systems, geometric constructions, or ValueTracker-driven continuous change, and when the project targets manimgl / manimlib / 3b1b's engine. Do NOT use for Manim Community Edition (`pip install manim`, `from manim import *`) — the two libraries share class names with different meanings; use a Manim CE skill or the CE docs instead.From its SKILL.md
npx -y skills add do-gongil/manimgl-skill --skill manimgl-videoAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 22 days oldThe repository was created 22 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.5 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
ManimGL Video
ManimGL is 3Blue1Brown's personal rendering engine. It is not Manim Community
Edition. Both are called "Manim", both define a class named Tex, and the two
mean opposite things. Confirm which engine the project uses before writing a line.
Detect the engine from the project:
from manimlib import */manimglCLI /custom_config.yml→ ManimGL, this skillfrom manim import */manim -qlCLI /manim.cfg→ Manim CE, stop — this skill does not apply
Do not confuse with Manim CE
Every row below was verified against manimlib source. The Tex row is the
dangerous one: the name exists in both engines, so the wrong choice raises no
error — it silently renders text as math or math as text.
| ManimGL (this skill) | Manim CE (different tool) | |
|---|---|---|
| install | pip install manimgl | pip install manim |
| import | from manimlib import * | from manim import * |
| CLI | manimgl file.py Scene -w -l | manim -ql file.py Scene |
| math mode | Tex("x^2") | MathTex("x^2") |
| text mode (LaTeX) | TexText("hello") | Tex("hello") |
| draw a shape | ShowCreation(mob) | Create(mob) |
| default background | #333333 | #000000 |
These CE names do not exist in manimlib — using them is an immediate
NameError: Create, MathTex, Unwrite, AddTextLetterByLetter, Angle,
RightAngle, Star, Axes3D.
Minimal scene
from manimlib import *
class Demo(Scene):
def construct(self):
title = Text("Pythagoras", font_size=48)
eq = Tex(R"a^2 + b^2 = c^2", font_size=60)
eq.next_to(title, DOWN, buff=LARGE_BUFF)
self.play(Write(title))
self.play(FadeIn(eq, shift=UP))
self.wait()
manimgl file.py Demo # interactive window, no file written
manimgl file.py Demo -w -l # write low-quality mp4
Every scene subclasses Scene, InteractiveScene, or ThreeDScene and defines
construct(self). 3b1b's own video code overwhelmingly uses InteractiveScene
(it adds mouse selection and editing in the preview window); plain Scene is
correct for headless rendering and is the safer default when writing code for
someone else to render.
Workflow
- Write the scene outline in prose first — one thing proved per scene. Do not open an editor until the beats are decided.
- Run
manimgl file.py Scenewith no-w. The interactive window is the fast feedback loop; writing a file on every iteration wastes minutes. - Add
self.embed()at the point of interest to drop into an IPython shell with the scene live. Inspect and nudge mobjects there instead of re-rendering. - Once composition is settled,
-w -lfor a low-quality file to judge timing. - Fixing a late beat?
-n <index>starts at animation N instead of replaying everything from the top. - Only after timing is final, render
--hdor--uhd.
Tighten typography, color, and spacing after motion works — not before.
On-screen text
Default to English. Labels, titles and annotations are English unless the user asks for another language, or the surrounding project is already in one. Conversing in another language is not by itself such a request — ask if unsure. Non-Latin scripts additionally need the font and animation care described in references/api-core.md.
The animation carries the argument. A sentence that narrates what the viewer is already watching competes with the visual for attention and duplicates whatever a narrator would say over it.
The test: if a narrator could speak the line, it does not belong on screen.
Cut — prose that restates the motion:
- "Unroll it into one row in reading order" over a grid that is visibly unrolling
- "Without this, shuffling the patches changes nothing"
- "After 12 blocks it has gathered information from every patch"
Keep — anything the picture cannot state on its own:
- labels and names: axis titles,
LayerNorm,Q,K,V - counts, units, and specs:
4×4 = 16 patches,224×224 → 196 patches of 16×16 - formulas:
Attn = softmax(QK^T/√d)V - emphasis: color coding, a highlighted element,
Indicate,FlashAround
Emphasis is not narration — keep every bit of it. Marking one patch red and tracking it across scenes explains more than a caption would.
Prefer noun phrases to sentences, including for section titles: 1. Patch split
over 1. The image is cut into patches. Where a scene seems to need a sentence,
the usual fix is a clearer visual, not a longer caption.
Reference files
Open only what the current task needs; do not preload all four.
| File | Open when |
|---|---|
| references/api-core.md | Tex/Text, geometry shapes, VGroup, positioning, colors |
| references/api-graphs.md | Axes, NumberPlane, function graphs, ValueTracker, updaters |
| references/animations.md | Which animation class to use, timing, lag_ratio, rate functions |
| references/cli-config.md | CLI flags, custom_config.yml, reproducing the 3b1b look |
Runnable starting points, verified against manimlib source:
- assets/smoke_test.py — geometry and
Textonly, no LaTeX required. Use this first to prove the install works. - assets/equation_graph.py —
Tex+Axes+ValueTracker. Requires a working LaTeX install.
Footguns
Tex takes multiple strings. Tex("a", "+", "b") splits into indexable
submobjects. To reliably address a substring, pass isolate=[...] and retrieve
with get_part_by_tex / get_parts_by_tex, or color via t2c={...}. Indexing a
Tex by raw integer position breaks the moment the LaTeX changes.
LaTeX is required for Tex, TexText, and Brace. Text and Code render
through Pango and need no LaTeX. When LaTeX is unavailable, a scene can still be
built entirely from Text plus geometry — say so rather than letting the render
fail.
ShowCreation, not Create. The most common CE reflex, and it fails loudly.
Never Write CJK text. Write traces glyph outlines, and a Hangul or Han
syllable is several independent contours, so every in-progress glyph renders as
disconnected strokes — illegible for the whole animation. Changing the font does
not help: regular and thin weights mangle identically. Use FadeIn, or
AddTextWordByWord when progressive reveal is wanted. Keep Write for Latin
text and Tex.
Updaters must be removed. A mobject with add_updater keeps mutating for the
rest of the scene. Call clear_updaters() when the effect is over, or the object
will drift during later beats.
always_redraw(func) rebuilds the mobject every frame. It is the correct tool
for something whose shape depends on a tracker, and the wrong tool for something
that merely moves — use add_updater or f_always for that. Rebuilding complex
mobjects each frame is the usual cause of a slow preview.
self.play() needs an animation, not a mobject. To animate a method call use
the .animate syntax: self.play(square.animate.shift(RIGHT)).
Background is #333333 by default, noticeably lighter than CE's black. 3b1b's
production config overrides it to #000000; see references/cli-config.md.
Attribution and licensing
3b1b/manim(the engine) is MIT. Deriving code frommanimlibandexample_scenes.pyis unrestricted.3b1b/videos(the per-video scene code) is CC BY-NC-SA 4.0 — non-commercial and share-alike. Do not copy scenes from it into user projects without telling the user about the license. It also depends onmanim_imports_ext.pyand the repo'scustom/package (pi creatures, backdrops), so it does not run standalone.
Write fresh code modeled on the API. Do not paste from 3b1b/videos.
What ships with it: 6 files
36.7 KB alongside SKILL.md, 2 of them executable
assets/
- equation_graph.pyruns3.1 KB
- smoke_test.pyruns2.1 KB
references/
- animations.md7.1 KB
- api-core.md8.1 KB
- api-graphs.md6.7 KB
- cli-config.md9.7 KB