math-animate
Render mathematical, geometric, and scientific animations into MP4, GIF, WebM, or PNG using Manim Community Edition. Supports LaTeX formulas, 2D/3D shapes, calculus graphing, 14 prebuilt math template
Files25
View on GitHubSKILL.mdskills/storage/my_skills/math-animate/SKILL.md
GitHubMathematical & Scientific Animation (Manim)
When to Use
Activate this skill when the user asks to:
- Create mathematical animations, geometry transformations, or formula morphs.
- Build clean educational math lessons using
SafeSceneand prebuilttemplates. - Visualize calculus, coordinate systems, linear algebra, or physics phenomena.
- Generate educational math videos (MP4), WebM overlays, or animated GIF demonstrations.
- Render transparent animations for video compositing or slide presentations.
- Export single-frame mathematical figures or diagrams to PNG.
The math_animate Tool
This skill uses the math_animate tool to compile and render Python Manim scenes into high-quality media files.
📝 PARAMETERS:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
example |
string |
No | — | Curated quality examples inspector. Pass "list" to view all curated scene_names in command.json, or pass "<scene_name>" to view its full code and parameters. |
scene_code |
string |
Yes* | — | Python code defining a Manim Scene (Scene, ThreeDScene, or SafeScene). *Not required if example is provided. |
scene_name |
string |
No | auto-detected | Name of the Scene class to render (e.g. "EquationLesson"). |
output_path |
string |
No | data/math_animate/<Scene>_<timestamp>.<fmt> |
Target filepath for output. Always placed in data/ directory. |
aspect_ratio |
string |
No | "16:9" |
Aspect ratio: "16:9" (landscape) or "9:16" (vertical mobile / Shorts / Reels). |
quality |
string |
No | "medium" |
Preset: "preview" (draft), "low" (480p), "medium" (720p), "high" (1080p), "4k" (2160p). |
format |
string |
No | "mp4" |
Output format: "mp4", "gif", "png", "webm". (Default: "gif" if quality="preview" without explicit format). |
transparent |
string |
No | "false" |
Render with an alpha/transparent background ("true" / "false"). |
background_color |
string |
No | default black | Hex color code for canvas background (e.g. "#1a1a2e"). |
allow_unsafe_code |
string |
No | "false" |
Bypass AST security denylist check ("true" / "false"). |
🎬 QUALITY & ASPECT RATIO PRESETS:
| Quality Preset | 16:9 Resolution | 9:16 Resolution | Frame Rate | Intended Use |
|---|---|---|---|---|
"preview" |
854x480 | 480x854 | 15 fps | Quick draft test (MP4 or GIF) |
"low" |
854x480 | 480x854 | 15 fps | Fast development draft |
"medium" |
1280x720 | 720x1280 | 30 fps | Standard balance of speed and clarity (Default) |
"high" |
1920x1080 | 1080x1920 | 60 fps | Full HD crisp video |
"4k" |
3840x2160 | 2160x3840 | 60 fps | Ultra-high definition presentation / master output |
📋 HOW TO CALL THIS TOOL:
The agent executes human-skills with the JSON payload passed directly as a string argument:
human-skills '{"tool_name": "math_animate", "tool_args": {"scene_code": "class CircleToSquare(Scene):\n def construct(self):\n circle = Circle(color=BLUE)\n square = Square(color=RED)\n self.play(Create(circle))\n self.play(Transform(circle, square))\n self.wait(1)", "scene_name": "CircleToSquare", "quality": "medium", "aspect_ratio": "16:9", "format": "mp4", "output_path": "data/circle_to_square.mp4"}}'
⚠️ RUNTIME INJECTIONS & SYSTEM GUARANTEES:
- Automatic Imports: Both
from manim import *andfrom templates import *are automatically injected intoscene_code. - Prebuilt Visual Kit:
SafeScene,Layout, and all 14 specialized templates are immediately available without manual imports. - Scene Detection: If
scene_nameis omitted, the tool automatically detects the single definedSceneclass. - AST Security: Unsafe imports (
os,sys,subprocess,socket,open, etc.) are blocked by default.
🎨 Visual Kit & SafeScene Architecture
For educational math animations, inherit from SafeScene rather than standard Scene. SafeScene automatically manages screen boundaries, responsive scaling, and eliminates overlap bugs.
flowchart TD
subgraph ScreenFrame["SafeScene Frame"]
TOP["Title Region: self.show_title('...')"]
MAIN["Main Content Region: self.show_main(content, layout=...)"]
BOT["Bottom Caption Region: self.set_bottom_text('...')"]
end
TOP --> MAIN --> BOT
Core API Methods:
| Method | Purpose |
|---|---|
self.show_title(text, color=WHITE) |
Writes title at top; replaces previous title cleanly if called again. |
self.show_main(content, layout=Layout.CENTER, caption=None) |
Clears previous main content and fades in new content. |
self.transform_main(content, layout=Layout.CENTER, caption=None) |
Smoothly morphs current main content into new content. |
self.set_bottom_text(text_or_none, color=WHITE) |
Displays explanatory subtitle at bottom. Pass None to fade out. |
self.play_action(animation) |
Executes template-owned animation (e.g. self.play_action(template.action(...))). |
self.clear_content() |
Fades out both main content and bottom text. |
self.fade_out_all() |
Fades out entire screen (title, main, bottom) at lesson end. |
Layout Control:
layout=Layout.CENTER: Automatically scales and centers a single template.layout=Layout.SPLIT: Displays two templates side-by-side:VGroup(left_template, right_template).- For detailed frame mathematics and composition rules, see visual-kit-api.md and layout-composition.md.
📦 Complete API Catalog of Prebuilt Math Templates
All 14 templates inherit VisualTemplate, enforce explicit state values, and are exposed globally via from templates import *.
1. EquationTemplate
Mathematical formulas, derivations, multi-step history, and expression morphing.
- Valid States:
"display": Single formula. Requiresexpression="str". (Does NOT acceptexpressions)."derivation": 1-3 step derivation history. Requiresexpressions=["step1", "step2", ...]."statements": Up to 3 equivalent statements. Requiresexpressions=["stmt1", "stmt2"].
- Constructor Parameters:
state: str(REQUIRED)expression: str | None = Noneexpressions: list[str] | None = None
- Action Methods:
set_expression(expression: str) -> Animation: Morphs current equation into a new expression (displaystate).advance_step(expression: str) -> Animation: Advances derivation history with next step (derivationstate).highlight_formula(index: int | None = None) -> Animation: Pulses yellow highlight around formula.
- Example:
eq = EquationTemplate(state="display", expression="E = mc^2") # Or derivation: eq = EquationTemplate(state="derivation", expressions=["2x + 4 = 10", "2x = 6", "x = 3"]) self.play_action(eq.advance_step("x = 3"))
2. FunctionGraphTemplate
Function curves, tangents, secants, definite integrals, marked points, and comparative graphs.
- Valid States:
"curve","marked_points","secant","tangent","area","signed_areas","comparison". - Constructor Parameters:
state: str(REQUIRED)function_type: str = "quadratic"("quadratic","cubic","sine","cosine","exponential","linear","rational")function_parameters: dict | None = None(e.g.{"a": 1, "b": 0, "c": 0})function_label: str = "f(x)"tangent_x: float = 1.0(active tangent point for"tangent"state)secant_xs: tuple[float, float] = (-1, 2)(secant line points for"secant"state)area_interval: tuple[float, float] = (0.5, 2)(integral shading interval for"area"state)marked_xs: list[float] = ()(critical x-coordinates for"marked_points"state)comparison_function_type: str | None = None(second function for"comparison"state)comparison_label: str = "g(x)"x_range: tuple[float, float, float] = (-5, 6, 1)y_range: tuple[float, float, float] = (-4, 7, 1)graph_x_range: tuple[float, float] = (-4.5, 4.5)
- Action Methods:
reveal_tangent() -> Animation: Draws tangent line attangent_x.move_secant_point(target_x: float) -> Animation: Moves secant point towards limit.shade_interval(start: float, end: float) -> Animation: Dynamically shades area under curve.highlight_intercept() -> Animation: Highlights axis intercept markers.
- Example:
graph = FunctionGraphTemplate(state="tangent", function_type="quadratic", tangent_x=1.0) self.play_action(graph.reveal_tangent())
3. VectorTemplate
2D Vectors, coordinate components, vector addition (triangle law), subtraction, projection, and scalar multiplication.
- Valid States:
"single","components","addition","subtraction","scalar_multiple","projection". - Constructor Parameters:
state: str(REQUIRED)vector_a: tuple[float, float](REQUIRED, e.g.(3, 2))vector_b: tuple[float, float] | None = None(second vector for addition/subtraction/projection)scalar: float = 2.0(multiplier for"scalar_multiple"state)vector_a_label: str = "a",vector_b_label: str = "b",result_label: str = "r"show_grid: bool = True,show_coordinate_labels: bool = Truex_range: tuple[float, float, float] = (-5, 6, 1),y_range: tuple[float, float, float] = (-5, 6, 1)
- Action Methods:
reveal_components() -> Animation: Draws dashed orthogonal $x$ and $y$ component vectors.reveal_resultant() -> Animation: Animates resultant vector $\vec{a} + \vec{b}$.set_scalar(target_scalar: float) -> Animation: Scales vector dynamically.highlight_vector(role: str) -> Animation: Pulses vector arrow (role="a","b", or"r").highlight_projection() -> Animation: Projects vector $\vec{a}$ onto $\vec{b}$.
- Example:
vec = VectorTemplate(state="components", vector_a=(3, 2)) self.play_action(vec.reveal_components())
4. MatrixTemplate
Matrix representations, cell highlights, row/column operations, and matrix-matrix multiplication steps.
- Valid States:
"display","product_setup","product_progress","product_complete". - Constructor Parameters:
state: str(REQUIRED)matrix: list[list[float]] | None = None(data matrix for"display"state, e.g.[[1, 2], [3, 4]])left_matrix: list[list[float]] | None = None(multiplier matrix $A$ for"product_*"states)right_matrix: list[list[float]] | None = None(multiplicand matrix $B$ for"product_*"states)left_label: str = "A",right_label: str = "B",result_label: str = "C"active_row: int = 0,active_column: int = 0
- Action Methods:
reveal_product_cell() -> Animation: Computes dot product foractive_rowandactive_column.select_product_cell(row: int, column: int) -> Animation: Moves active focus to specified cell.highlight_row(row: int) -> Animation: Outlines target row in yellow.highlight_column(column: int) -> Animation: Outlines target column in yellow.highlight_cell(row: int, column: int) -> Animation: Pulses target entry.
- Example:
mat = MatrixTemplate(state="product_setup", left_matrix=[[1, 2], [3, 4]], right_matrix=[[2, 0], [1, 2]]) self.play_action(mat.reveal_product_cell())
5. NumberLineTemplate
Configurable real number line with point markers, single/multiple intervals, arithmetic movements, and distance.
- Valid States:
"points","interval","intervals","operation","distance". - Constructor Parameters:
state: str(REQUIRED)x_range: tuple[float, float, float] = (-5, 6, 1)points: list[float] = ()(labeled points for"points"state)point_labels: list[str] | None = Nonestart: float = -2,end: float = 2(interval range for"interval"state)left_closed: bool = True,right_closed: bool = True(bracket/parenthesis styling)intervals: list[tuple[float, float, bool, bool]] = ()(for"intervals"state)center: float | None = None,radius: float | None = None(for absolute value"distance")value: float = 0,value_label: str | None = None(for"operation")
- Action Methods:
move_point(target_value: float) -> Animation: Slides marker along number line.set_interval(start: float, end: float, left_closed: bool, right_closed: bool) -> Animation: Updates interval bounds.highlight_distance() -> Animation: Highlights segment between center and radius.
- Example:
numline = NumberLineTemplate(state="interval", start=-1, end=3, left_closed=True, right_closed=False) self.play_action(numline.move_point(2.0))
6. UnitCircleTemplate
Trigonometric unit circle, arbitrary angle arcs, coordinate readouts $(x, y) = (\cos\theta, \sin\theta)$, and reference triangles.
- Valid States:
"base","angle","coordinates","reference_triangle". - Constructor Parameters:
state: str(REQUIRED)angle_degrees: float = 30(angle $\theta$ in degrees)angle_label: str | None = Nonecoordinate_label: str | None = Nonecosine_label: str = r"\cos\theta",sine_label: str = r"\sin\theta",radius_label: str = "1"show_axes_labels: bool = True
- Action Methods:
rotate_to_angle(target_degrees: float, angle_label=None, coordinate_label=None) -> Animation: Rotates radius ray to new angle.reveal_coordinates() -> Animation: Displays $(\cos\theta, \sin\theta)$ coordinates.reveal_reference_triangle() -> Animation: Draws right reference triangle inside circle.highlight_projection(axis: str) -> Animation: Pulses projection onto"x"or"y"axis.
- Example:
circle = UnitCircleTemplate(state="coordinates", angle_degrees=45) self.play_action(circle.rotate_to_angle(60))
7. LinearTransformationTemplate
Visualizes 2D linear matrix transformations $T(\vec{x}) = A\vec{x}$ warping coordinate grid lines and basis vectors $\hat{i}, \hat{j}$.
- Valid States:
"setup","comparison". - Constructor Parameters:
state: str(REQUIRED)matrix: list[list[float]](REQUIRED, $2\times 2$ matrix, e.g.[[2, 1], [0, 1.5]])vectors: list[tuple[float, float]](REQUIRED, vectors transformed by matrix, e.g.[(1, 0), (0, 1)])vector_labels: list[str] | None = Noneactive_index: int = 0show_span: bool = False,show_matrix_label: bool = Truex_range: tuple[float, float, float] = (-5, 6, 1),y_range: tuple[float, float, float] = (-5, 6, 1)
- Action Methods:
apply_transformation() -> Animation: Transforms grid and basis vectors using matrix $A$.highlight_vector(index: int) -> Animation: Pulses target vector.highlight_span(index: int) -> Animation: Visualizes span subspace.
- Example:
lin_trans = LinearTransformationTemplate(state="setup", matrix=[[1, 1], [0, 1]], vectors=[(1, 0), (0, 1)]) self.play_action(lin_trans.apply_transformation())
8. TriangleTemplate
Right triangles, scalene/isosceles/equilateral triangles, hypotenuse emphasis, altitudes, and angle bisectors.
- Valid States:
"right_base","right_labeled","right_hypotenuse_highlighted","right_squares","general_base","general_labeled","altitude","median","angle_bisector","non_right_labeled". - Constructor Parameters:
state: str(REQUIRED)triangle_type: str = "scalene"("right","scalene","equilateral","isosceles")leg_a: float | None = None,leg_b: float | None = None(for right triangles)width: float = 3.2,height: float = 2.2,apex_offset: float = 0.15vertex_labels: tuple[str, str, str] = ('A', 'B', 'C')side_labels: tuple[str, str, str] = ('a', 'b', 'c')active_vertex: str = 'A'
- Action Methods:
highlight_side(side: str) -> Animation: Outlines side (side="a","b", or"c").highlight_angle(vertex: str) -> Animation: Highlights angle arc at vertex (vertex="A","B", or"C").highlight_construction() -> Animation: Emphasizes altitude, median, or bisector.
- Example:
tri = TriangleTemplate(state="right_labeled", leg_a=2.0, leg_b=3.0) self.play_action(tri.highlight_side("c"))
9. PythagoreanAreaTemplate
Geometric proof of $a^2 + b^2 = c^2$ with squares attached to right triangle sides.
- Valid States:
"c_square","ab_squares". - Constructor Parameters:
state: str(REQUIRED)leg_a: float = 1.35leg_b: float = 2.15include_side_labels: bool = True
- Example:
pyth = PythagoreanAreaTemplate(state="ab_squares", leg_a=1.5, leg_b=2.0)
10. LineGeometryTemplate
2D Coordinate geometry, slopes, rise-over-run triangles, midpoints, segment distances, and line intersections.
- Valid States:
"point_plot","slope_rise_run","midpoint","distance","line_equation","intercepts","intersection". - Constructor Parameters:
state: str(REQUIRED)point_a: tuple[float, float](REQUIRED, e.g.(0, 0))point_b: tuple[float, float] | None = None(second point, e.g.(3, 2))slope: float | None = None,y_intercept: float | None = Noneline2_slope: float | None = None,line2_y_intercept: float | None = None(for"intersection")x_range: tuple = (-6, 6, 1),y_range: tuple = (-4, 4, 1)labels: bool = True
- Action Methods:
show_slope_triangle() -> Animation: Draws rise-over-run right triangle.show_midpoint() -> Animation: Displays midpoint dot and coordinate label.show_distance() -> Animation: Highlights segment distance with length label.show_intercepts() -> Animation: Points to $x$- and $y$-intercepts.show_intersection() -> Animation: Identifies solution point where two lines cross.
- Example:
line = LineGeometryTemplate(state="slope_rise_run", point_a=(1, 1), point_b=(4, 3)) self.play_action(line.show_slope_triangle())
11. CircleTheoremsTemplate
Circle geometry theorems: tangent-radius perpendicularity, chord bisectors, secants, central angles, and inscribed angles.
- Valid States:
"radius_tangent","chord","secant","arc_central","inscribed_angle". - Constructor Parameters:
state: str(REQUIRED)radius: float = 2.0,center: tuple[float, float] = (0, 0)chord_angle: float = 60secant_point: tuple[float, float] = (4, 0)arc_start_angle: float = 30,arc_end_angle: float = 150inscribed_vertex_angle: float = 200labels: bool = True
- Action Methods:
show_radius_tangent() -> Animation: Marks $90^\circ$ right angle between radius and tangent line.show_perpendicular_bisector() -> Animation: Draws chord bisector through center.show_arc_angle() -> Animation: Highlights central angle and subtended arc.show_inscribed_relationship() -> Animation: Demonstrates inscribed angle is half of central angle.
- Example:
circle_thm = CircleTheoremsTemplate(state="radius_tangent") self.play_action(circle_thm.show_radius_tangent())
12. PolygonTransformationTemplate
2D Rigid transformations of arbitrary polygons: translations, reflections over axes, rotations about a center, and dilations.
- Valid States:
"original","translated","reflected","rotated","dilated". - Constructor Parameters:
state: str(REQUIRED)vertices: list[tuple[float, float]](REQUIRED, e.g.[(0, 0), (2, 0), (1, 2)])translation_vector: tuple[float, float] = (2, 1)(for"translated"state)reflection_axis: str = "x"("x"or"y"for"reflected"state)rotation_angle: float = 90,rotation_center: tuple[float, float] = (0, 0)(for"rotated"state)dilation_factor: float = 2.0,dilation_center: tuple[float, float] = (0, 0)(for"dilated"state)x_range: tuple = (-6, 6, 1),y_range: tuple = (-4, 4, 1)labels: bool = True
- Action Methods:
translate() -> Animation: Moves polygon alongtranslation_vector.reflect() -> Animation: Flips polygon acrossreflection_axis.dilate() -> Animation: Scales polygon bydilation_factor.
- Example:
poly = PolygonTransformationTemplate(state="translated", vertices=[(0, 0), (2, 0), (1, 2)], translation_vector=(2, 1)) self.play_action(poly.translate())
13. FunctionTranslationTemplate
Visualizes function shifts $f(x - h) + k$ and horizontal scaling $f(ax)$ against parent curves.
- Valid States:
"parent","comparison". - Constructor Parameters:
state: str(REQUIRED)parent_function = lambda x: x**2h: float = 0(horizontal shift)k: float = 0(vertical shift)a: float | None = None(horizontal compression/expansion factor)anchor_point: tuple[float, float] | None = (0, 0)parent_label: str = "f(x)",transformed_label: str | None = Nonex_range: tuple[float, float, float] = (-4, 5, 1),y_range: tuple[float, float, float] = (-3, 7, 1)
- Action Methods:
shift_horizontal(target_h: float) -> Animation: Animates horizontal translation.shift_vertical(target_k: float) -> Animation: Animates vertical translation.scale_horizontal(target_a: float) -> Animation: Scales curve horizontally.
- Example:
f_trans = FunctionTranslationTemplate(state="comparison", h=2, k=1) self.play_action(f_trans.shift_horizontal(2))
14. FractionModelTemplate
Proportional fraction visual models: horizontal fraction bars, circular pie models, and partition grids.
- Valid States:
"bar","grid","circle". - Constructor Parameters:
state: str(REQUIRED)numerator: int = 1denominator: int = 2show_label: bool = Truelabel: str | None = Nonegrid_shape: tuple[int, int] | None = None(e.g.(2, 5)for $2\times 5$ grid of 10)show_part_numbers: bool = False
- Action Methods:
set_fraction(numerator: int, denominator: int) -> Animation: Updates filled portions.highlight_filled_parts() -> Animation: Pulses active numerator fractions.highlight_wholes() -> Animation: Highlights complete unit wholes.show_equivalent_fraction(multiplier: int) -> Animation: Subdivides parts to show equivalence (e.g. $1/2 = 2/4$).
- Example:
frac = FractionModelTemplate(state="circle", numerator=3, denominator=4) self.play_action(frac.show_equivalent_fraction(multiplier=2))
Scenario-Based Instructions
📐 Scenario 1: Step-by-Step Derivation with SafeScene & EquationTemplate
When: Explaining algebraic proofs, step-by-step problem solving, or formula derivations.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class QuadraticDerivation(SafeScene):\n def construct(self):\n self.show_title(\"Solving Quadratic Equation\")\n eq = EquationTemplate(state=\"derivation\", expressions=[\"ax^2 + bx + c = 0\", \"ax^2 + bx = -c\", \"x^2 + \\\\frac{b}{a}x = -\\\\frac{c}{a}\"])\n self.show_main(eq, layout=Layout.CENTER)\n self.set_bottom_text(\"Step 1: Isolate the variable terms and normalize\")\n self.wait(1.5)\n self.play_action(eq.advance_step(\"x = \\\\frac{-b \\\\pm \\\\sqrt{b^2 - 4ac}}{2a}\"))\n self.set_bottom_text(\"Final solution found by completing the square\")\n self.wait(2)\n self.fade_out_all()",
"scene_name": "QuadraticDerivation",
"aspect_ratio": "16:9",
"quality": "medium",
"format": "mp4",
"output_path": "data/quadratic_derivation.mp4"
}
}'
📈 Scenario 2: Calculus Tangent & Graph with FunctionGraphTemplate
When: Demonstrating derivatives, tangent lines, or curve behavior.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class TangentLesson(SafeScene):\n def construct(self):\n self.show_title(\"Derivative as Slope of Tangent\")\n graph = FunctionGraphTemplate(state=\"tangent\", function_type=\"quadratic\", tangent_x=1.0)\n self.show_main(graph, layout=Layout.CENTER)\n self.set_bottom_text(\"Initial tangent line at x = 1.0\")\n self.wait(1)\n self.play_action(graph.reveal_tangent())\n self.set_bottom_text(\"Slope of tangent line equals the derivative f'(1)\")\n self.wait(2)\n self.fade_out_all()",
"scene_name": "TangentLesson",
"aspect_ratio": "16:9",
"quality": "medium",
"format": "mp4",
"output_path": "data/tangent_lesson.mp4"
}
}'
⚖️ Scenario 3: Side-by-Side Comparison with Layout.SPLIT
When: Comparing two mathematical representations or before/after states.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class VectorComparison(SafeScene):\n def construct(self):\n self.show_title(\"Vector Components vs Resultant\")\n v_comp = VectorTemplate(state=\"components\", vector_a=(3, 2))\n v_single = VectorTemplate(state=\"single\", vector_a=(3, 2))\n self.show_main(VGroup(v_comp, v_single), layout=Layout.SPLIT)\n self.set_bottom_text(\"Left: Orthogonal components; Right: Resultant vector\")\n self.wait(1.5)\n self.play_action(v_comp.reveal_components())\n self.wait(2)\n self.fade_out_all()",
"scene_name": "VectorComparison",
"aspect_ratio": "16:9",
"quality": "medium",
"format": "mp4",
"output_path": "data/vector_comparison.mp4"
}
}'
🧊 Scenario 4: 3D Surface & Camera Motion
When: Demonstrating 3D vector fields, surfaces, or rotating perspective geometries using ThreeDScene.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class ThreeDSphere(ThreeDScene):\n def construct(self):\n axes = ThreeDAxes()\n sphere = Surface(lambda u, v: np.array([1.5 * np.cos(u) * np.cos(v), 1.5 * np.cos(u) * np.sin(v), 1.5 * np.sin(u)]), u_range=[-np.pi/2, np.pi/2], v_range=[0, 2*np.pi], resolution=(16, 32), fill_color=BLUE_D, fill_opacity=0.7)\n self.set_camera_orientation(phi=75 * DEGREES, theta=-45 * DEGREES)\n self.add(axes)\n self.play(Create(sphere))\n self.begin_ambient_camera_rotation(rate=0.2)\n self.wait(2)\n self.stop_ambient_camera_rotation()",
"scene_name": "ThreeDSphere",
"aspect_ratio": "16:9",
"quality": "medium",
"format": "mp4",
"output_path": "data/threed_sphere.mp4"
}
}'
🎭 Scenario 5: Transparent Overlay for Video Editing (WebM / Alpha)
When: Rendering motion graphics with a transparent background to composite over live footage or slide decks.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class LowerThird(Scene):\n def construct(self):\n banner = Rectangle(width=6.0, height=1.0, color=GOLD, fill_opacity=0.3)\n text = Text(\"Mathematical Proof\", font_size=32, color=WHITE)\n group = VGroup(banner, text).to_corner(DL, buff=0.8)\n self.play(FadeIn(group, shift=RIGHT))\n self.wait(2)\n self.play(FadeOut(group, shift=LEFT))",
"scene_name": "LowerThird",
"aspect_ratio": "16:9",
"quality": "medium",
"format": "webm",
"transparent": "true",
"output_path": "data/lower_third_overlay.webm"
}
}'
📱 Scenario 6: Mobile-Friendly Vertical Video (9:16 Shorts / Reels / TikTok)
When: Rendering vertical animations for mobile feeds, YouTube Shorts, Instagram Reels, or TikTok.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class VerticalDerivative(Scene):\n def construct(self):\n title = Text(\"Calculus Shorts\", font_size=40, color=YELLOW)\n title.to_edge(UP, buff=1.0)\n func = MathTex(r\"f(x) = x^2\", font_size=50)\n deriv = MathTex(r\"f'\''(x) = 2x\", font_size=50, color=BLUE)\n deriv.next_to(func, DOWN, buff=0.8)\n self.play(Write(title))\n self.play(Write(func))\n self.wait(0.5)\n self.play(TransformFromCopy(func, deriv))\n self.wait(1.5)",
"scene_name": "VerticalDerivative",
"aspect_ratio": "9:16",
"quality": "medium",
"format": "mp4",
"output_path": "data/vertical_derivative.mp4"
}
}'
🖼️ Scenario 7: Fast Animated GIF Preview for Documentation / Web
When: Creating a quick, lightweight GIF animation for a README, web page, or tutorial.
human-skills '{
"tool_name": "math_animate",
"tool_args": {
"scene_code": "class PulseDot(Scene):\n def construct(self):\n dot = Dot(color=PURPLE, radius=0.3)\n self.add(dot)\n self.play(dot.animate.scale(2).set_color(TEAL), rate_func=there_and_back, run_time=1.5)\n self.wait(0.5)",
"scene_name": "PulseDot",
"quality": "preview",
"format": "gif",
"output_path": "data/pulse_dot.gif"
}
}'
📚 Deep Reference Documents
For comprehensive mathematical contracts, complete constructor signatures, and visual design rules, refer to the on-demand reference documents in references/:
| Reference Document | Scope & Contents |
|---|---|
| templates_api_reference.md | Exhaustive API signatures, parameters, constraints, and action methods for all 14 templates. |
| visual-kit-api.md | Complete SafeScene lifecycle, region geometry, layout bounds, and transition contracts. |
| layout-composition.md | Frame safety rules, avoiding offscreen overflow, and group-first layout composition. |
| animation-patterns.md | Semantic snapshot transitions, show vs transform continuity, and hold times. |
| math-visual-clarity.md | Standardized math colors, LaTeX typography, cognitive load reduction, and visual hierarchy. |
| educational-storyboarding.md | Pacing, pedagogical scene breakdown, and instructional storyboarding principles. |