Skill v1.0.1
currentLLM-judged scan98/1009 files
version: "1.0.1" name: manimgl-best-practices description: | Trigger when: (1) User mentions "manimgl" or "ManimGL" or "3b1b manim", (2) Code contains from manimlib import *, (3) User runs manimgl CLI commands, (4) Working with InteractiveScene, self.frame, self.embed(), ShowCreation(), or ManimGL-specific patterns.
Best practices for ManimGL (Grant Sanderson's 3Blue1Brown version) - OpenGL-based animation engine with interactive development. Covers InteractiveScene, Tex with t2c, camera frame control, interactive mode (-se flag), 3D rendering, and checkpoint_paste() workflow.
NOT for Manim Community Edition (which uses manim imports and manim CLI).
How to use
Read individual rule files for detailed explanations and code examples:
Core Concepts
- rules/scenes.md - InteractiveScene, Scene types, and construct method
- rules/mobjects.md - Mobject types, VMobject, Groups, and positioning
- rules/animations.md - Animation classes, playing animations, and timing
Creation & Transformation
- rules/creation-animations.md - ShowCreation, Write, FadeIn, DrawBorderThenFill
- rules/transform-animations.md - Transform, ReplacementTransform, TransformMatchingTex
- rules/animation-groups.md - LaggedStart, Succession, AnimationGroup
Text & Math
- rules/tex.md - Tex class, raw strings R"...", and LaTeX rendering
- rules/text.md - Text mobjects, fonts, and styling
- rules/t2c.md - tex_to_color_map (t2c) for coloring math expressions
Styling & Appearance
- rules/colors.md - Color constants, gradients, RGB, hex, GLSL coloring
- rules/styling.md - Fill, stroke, opacity, backstroke, gloss, shadow
3D & Camera
- rules/3d.md - 3D objects, surfaces, Sphere, Torus, parametric surfaces, lighting
- rules/camera.md - frame.reorient(), Euler angles, fix_in_frame(), camera animations
Interactive Development
- rules/interactive.md - Interactive mode with
-seflag, checkpoint_paste() - rules/frame.md - self.frame, camera control, reorient, and zooming
- rules/embedding.md - self.embed() for IPython debugging, touch() mode
Configuration & CLI
- rules/cli.md - manimgl command, flags (-w, -o, -se, -l, -h), rendering options
- rules/config.md - custom_config.yml, directories, camera settings, quality presets
Working Examples
Complete, tested example files demonstrating common patterns:
- examples/basic_animations.py - Basic shapes, text, and animations
- examples/math_visualization.py - LaTeX equations and mathematical content
- examples/graph_plotting.py - Axes, functions, and graphing
- examples/3d_visualization.py - 3D scenes with camera control and surfaces
- examples/updater_patterns.py - Dynamic animations with updaters
Scene Templates
Copy and modify these templates to start new projects:
- templates/basic_scene.py - Standard 2D scene template
- templates/interactive_scene.py - InteractiveScene with self.embed()
- templates/3d_scene.py - 3D scene with frame.reorient()
- templates/math_scene.py - Mathematical derivations and equations
Quick Reference
Basic Scene Structure
from manimlib import *class MyScene(InteractiveScene):def construct(self):# Create mobjectscircle = Circle()# Add to scene (static)self.add(circle)# Or animateself.play(ShowCreation(circle)) # Note: ShowCreation, not Create# Waitself.wait(1)
Render Command
# Render and previewmanimgl scene.py MyScene# Interactive mode - drop into shell at line 15manimgl scene.py MyScene -se 15# Write to filemanimgl scene.py MyScene -w# Low quality for testingmanimgl scene.py MyScene -l
Key Differences from ManimCE
| Feature | ManimGL (3b1b) | Manim Community | |
|---|---|---|---|
| Import | from manimlib import * | from manim import * | |
| CLI | manimgl | manim | |
| Math text | Tex(R"\pi") | MathTex(r"\pi") | |
| Scene | InteractiveScene | Scene | |
| Create anim | ShowCreation | Create | |
| Camera | self.frame | self.camera.frame | |
| Fix in frame | mob.fix_in_frame() | self.add_fixed_in_frame_mobjects(mob) | |
| Package | manimgl (PyPI) | manim (PyPI) |
Interactive Development Workflow
ManimGL's killer feature is interactive development:
# Start at line 20 with state preservedmanimgl scene.py MyScene -se 20
In interactive mode:
# Copy code to clipboard, then run:checkpoint_paste() # Run with animationscheckpoint_paste(skip=True) # Run instantly (no animations)checkpoint_paste(record=True) # Record while running
Camera Control (self.frame)
# Get the camera frameframe = self.frame# Reorient in 3D (phi, theta, gamma, center, height)frame.reorient(45, -30, 0, ORIGIN, 8)# Animate camera movementself.play(frame.animate.reorient(60, -45, 0))# Fix mobjects to stay in screen space during 3D movementtitle.fix_in_frame()
LaTeX with Tex class
# Use raw strings with capital Rformula = Tex(R"\int_0^1 x^2 \, dx = \frac{1}{3}")# Color mapping with t2cequation = Tex(R"E = mc^2",t2c={"E": BLUE, "m": GREEN, "c": YELLOW})# Isolate substrings for animationformula = Tex(R"\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}")formula.set_color_by_tex("n", BLUE)
Common Patterns
Embedding for debugging
def construct(self):circle = Circle()self.play(ShowCreation(circle))self.embed() # Drops into IPython shell here
Set floor plane for 3D
self.set_floor_plane("xz") # Makes xy the viewing plane
Backstroke for text readability
text = Text("Label")text.set_backstroke(BLACK, 5) # Black outline behind text
Installation
# Install ManimGLpip install manimgl# Check installationmanimgl --version
Common Pitfalls to Avoid
- Version confusion - Ensure you're using
manimgl, notmanim(community version) - ShowCreation vs Create - ManimGL uses
ShowCreation, notCreate - Tex vs MathTex - ManimGL uses
Texwith capital R raw strings - self.frame vs self.camera.frame - ManimGL uses
self.framedirectly - fix_in_frame() - Call on the mobject, not the scene
- Interactive mode - Use
-seflag for interactive development
License & Attribution
This skill contains example code adapted from 3Blue1Brown's video repository by Grant Sanderson.
License: CC BY-NC-SA 4.0
- Attribution required - Credit both 3Blue1Brown and the adapter
- NonCommercial - Not for commercial use
- ShareAlike - Derivatives must use the same license
See LICENSE.txt for full details.