Short introduction to Manim
Introduction
Manim or manimgl.
Virtual engine
python -m venv .
source bin/activate
For faster rendering use smaller resolution resolution=(15,15) and smaller fps rate
manim -pql --fps 10 ma_animatedplanewave.py PlaneWave3D
Some short manim scrips to generate easy visualizations.
manim -pql bez2.py manim -pqh bez2.py BezierSplineExample --format=png f: open the directory/ folder i: generate gif file p: play qm, qh, qk: quality (low, high, 4k) qh: high quality s: save last frame t: transparent background
config.background_color = WHITE
Add a background image
bg_image = ImageMobject("bg_P5.png")
self.add( bg_image )
Add the background plane
plane = NumberPlane( background_line_style={
"stroke_color": BLACK,
"stroke_width": 4,
"stroke_opacity": 1
},
x_range=[-10, 10, 1],
y_range=[-10, 10, 1],
)
self.add( plane )
Install Manim on Arch Linux
Pip is not working on a virtual environment. However use uv to install it. That works (on Sep 2024):
uv pip install manim
It is now installed on virtual environment, but the global system is not affected (not working outside virtual environment).
BG plane
number_plane = NumberPlane(
background_line_style={
"stroke_color": TEAL,
"stroke_width": 1,
"stroke_opacity": 0.2
}
)
self.add(number_plane)
Bezier curve
Animated bezier curve with two points:

https://github.com/markkuleino/manim/blob/main/FLL_CC0_bezier.py
See tutorial on Bezier Curves https://pomax.github.io/bezierinfo/ and the interactive tutorial https://www.jasondavies.com/animated-bezier/
Heat engine
-
Carnot cycle. Remove bg.
-
Otto cycle. Remove bg.
-
Diesel cycle. Remove bg.
Paths
https://github.com/Elteoremadebeethoven/AnimationsWithManim/blob/master/English/extra/faqs/paths.md
- Show Points
- Path as corners
- Path smoothly
- Bezier points of a path
- Change path style
Lines
https://github.com/markkuleino/manim/blob/main/FLL_CC2_m13b.py
Camera
surface = always_redraw(
lambda: Surface(
lambda u, v: np.array([ u, v, np.sin(u - phase.get_value()) ]),
u_range=[-50, 50],
v_range=[-5, 5],
resolution=(15, 15),
fill_opacity=0.8,
#checkerboard_colors=[ BLUE_D, BLUE_E, ],
).set_fill_by_value(
axes=axes,
colors=[ (BLUE_E, -1), (BLUE, 0), (YELLOW, 1), ]
)
)
phi, theta, focal_distance, gamma, zoom = self.camera.get_value_trackers()
#1. Zoom away
self.play(
zoom.animate.set_value(0.5),
phase.animate.set_value(8 * np.pi),
run_time=10,
rate_func=linear,
)
phi Vertical angle (elevation) theta Horizontal angle (azimuth/orbit angle) focal_distance Perspective strength gamma Roll (rotation around viewing axis) zoom Zoom factor