ManimGL is a mature, well-architected Python library for programmatic mathematical animation, using OpenGL (via ModernGL) for GPU-accelerated rendering. Originally created by Grant Sanderson (3Blue1Brown), it is the upstream predecessor to the community edition. The codebase is structured as a library with a CLI entry point (`manimgl`), and it cleanly separates concerns into animation logic, scene management, camera/frame transforms, mobject (math object) types, shader pipelines, and utility modules. The architecture centers on a scene-graph model: `Scene` objects orchestrate `Animation` instances that interpolate between `Mobject` states, while a `Camera` with a `CameraFrame` handles view/projection and feeds into a shader-based rendering pipeline. The system supports real-time interactive preview via an embedded IPython shell, video export via FFmpeg piping, and LaTeX-to-SVG conversion for text. The GLSL shader system is notably sophisticated, with custom `#INSERT` preprocessing to share code between vertex/fragment/geometry shaders for quadratic Bézier rendering, fractals, and lit surfaces. Key reusable components include: a robust event-driven interactive system (event dispatcher + listeners), a disk-caching decorator for expensive computations, a deeply capable Bézier/geometry math library, a flexible color system with colormaps, and a module-reload system that enables live coding. The codebase demonstrates high craftsmanship in its shader architecture, the `CameraFrame` as a fully animatable mobject, and the `TransformMatchingParts` algorithm for morphing between shapes.
Manim is a comprehensive Python library for creating programmatic mathematical animations, primarily used for explanatory math videos. It provides a declarative scene API where users define objects (mobjects), animations, and camera movements in code, then renders them to video or image sequences via two backends: a CPU-based Cairo renderer and a GPU-accelerated OpenGL renderer. The library handles everything from Bézier curve rendering and LaTeX/Typst typesetting to 3D surface shading and vector field visualization. Its architecture is centered on the `Scene`, `Mobject`, and `Animation` classes, with extensive support for coordinate systems, graphs, text, and custom shaders. The dual renderer design introduces some code duplication, but the codebase is actively maintained with a rich test suite, CI/CD, and plugin system. While primarily an application library, it also incorporates elements of data research in its color science and mathematical utilities.