manim-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +104 -0
- package/dist/demo.mp4 +0 -0
- package/dist/index.js +65 -0
- package/dist/mcp-app.html +142 -0
- package/dist/server.js +1492 -0
- package/package.json +67 -0
- package/references/composer/SKILL.md +154 -0
- package/references/composer/references/3b1b-series-patterns.md +217 -0
- package/references/composer/references/domain-planning-guides/calculus-planning.md +188 -0
- package/references/composer/references/domain-planning-guides/linear-algebra-planning.md +169 -0
- package/references/composer/references/domain-planning-guides/ml-planning.md +286 -0
- package/references/composer/references/domain-planning-guides/number-theory-planning.md +187 -0
- package/references/composer/references/domain-planning-guides/physics-planning.md +249 -0
- package/references/composer/references/domain-planning-guides/probability-planning.md +200 -0
- package/references/composer/references/mathematical-storytelling.md +359 -0
- package/references/composer/references/narrative-patterns.md +221 -0
- package/references/composer/references/opening-patterns.md +284 -0
- package/references/composer/references/pacing-guide.md +289 -0
- package/references/composer/references/scene-archetypes.md +534 -0
- package/references/composer/references/scene-examples.md +379 -0
- package/references/composer/references/visual-techniques.md +480 -0
- package/references/composer/templates/scenes-template.md +147 -0
- package/references/manimce/SKILL.md +166 -0
- package/references/manimce/examples/3d_visualization.py +373 -0
- package/references/manimce/examples/basic_animations.py +212 -0
- package/references/manimce/examples/graph_plotting.py +401 -0
- package/references/manimce/examples/lorenz_attractor.py +172 -0
- package/references/manimce/examples/math_visualization.py +315 -0
- package/references/manimce/examples/updater_patterns.py +369 -0
- package/references/manimce/rules/3b1b-translation.md +594 -0
- package/references/manimce/rules/3d.md +254 -0
- package/references/manimce/rules/advanced-animations.md +594 -0
- package/references/manimce/rules/animation-groups.md +212 -0
- package/references/manimce/rules/animations.md +128 -0
- package/references/manimce/rules/api-pitfalls.md +89 -0
- package/references/manimce/rules/axes.md +214 -0
- package/references/manimce/rules/camera.md +208 -0
- package/references/manimce/rules/cli.md +232 -0
- package/references/manimce/rules/color-conventions.md +444 -0
- package/references/manimce/rules/colors.md +199 -0
- package/references/manimce/rules/config.md +264 -0
- package/references/manimce/rules/creation-animations.md +158 -0
- package/references/manimce/rules/graphing.md +233 -0
- package/references/manimce/rules/grouping.md +220 -0
- package/references/manimce/rules/latex.md +202 -0
- package/references/manimce/rules/lines.md +241 -0
- package/references/manimce/rules/long-form-video.md +552 -0
- package/references/manimce/rules/mathematical-domains.md +689 -0
- package/references/manimce/rules/mobjects.md +116 -0
- package/references/manimce/rules/multi-scene-composition.md +112 -0
- package/references/manimce/rules/pedagogy.md +532 -0
- package/references/manimce/rules/physics-simulations.md +610 -0
- package/references/manimce/rules/positioning.md +211 -0
- package/references/manimce/rules/scenes.md +121 -0
- package/references/manimce/rules/shapes.md +300 -0
- package/references/manimce/rules/styling.md +177 -0
- package/references/manimce/rules/text-animations.md +222 -0
- package/references/manimce/rules/text.md +189 -0
- package/references/manimce/rules/timing.md +227 -0
- package/references/manimce/rules/transform-animations.md +157 -0
- package/references/manimce/rules/updaters.md +226 -0
- package/references/manimce/templates/basic_scene.py +64 -0
- package/references/manimce/templates/camera_scene.py +100 -0
- package/references/manimce/templates/threed_scene.py +138 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Moving Camera Scene Template for Manim Community
|
|
3
|
+
|
|
4
|
+
Use this for scenes that require zooming, panning, or following objects.
|
|
5
|
+
|
|
6
|
+
Render: manim -pql your_file.py YourCameraScene
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from manim import *
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class YourCameraScene(MovingCameraScene):
|
|
13
|
+
"""
|
|
14
|
+
Template for scenes with camera movement.
|
|
15
|
+
|
|
16
|
+
Inherits from MovingCameraScene which provides:
|
|
17
|
+
- self.camera.frame: The camera frame mobject
|
|
18
|
+
- Ability to zoom, pan, and follow objects
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def construct(self):
|
|
22
|
+
# ============================================================
|
|
23
|
+
# SETUP: Create objects to showcase camera movement
|
|
24
|
+
# ============================================================
|
|
25
|
+
|
|
26
|
+
# Create a grid of shapes to demonstrate camera movement
|
|
27
|
+
shapes = VGroup(*[
|
|
28
|
+
Circle(radius=0.3, color=color, fill_opacity=0.5)
|
|
29
|
+
for color in [RED, BLUE, GREEN, YELLOW, PURPLE]
|
|
30
|
+
]).arrange(RIGHT, buff=1)
|
|
31
|
+
|
|
32
|
+
# Add labels
|
|
33
|
+
labels = VGroup(*[
|
|
34
|
+
Text(str(i + 1), font_size=24).move_to(shape)
|
|
35
|
+
for i, shape in enumerate(shapes)
|
|
36
|
+
])
|
|
37
|
+
|
|
38
|
+
# Title
|
|
39
|
+
title = Text("Camera Movement Demo", font_size=36).to_edge(UP)
|
|
40
|
+
|
|
41
|
+
self.add(shapes, labels)
|
|
42
|
+
self.play(Write(title))
|
|
43
|
+
self.wait()
|
|
44
|
+
|
|
45
|
+
# ============================================================
|
|
46
|
+
# CAMERA OPERATIONS: Zoom, pan, follow
|
|
47
|
+
# ============================================================
|
|
48
|
+
|
|
49
|
+
# --- ZOOM IN ---
|
|
50
|
+
# Save original camera state
|
|
51
|
+
self.camera.frame.save_state()
|
|
52
|
+
|
|
53
|
+
# Zoom into first shape
|
|
54
|
+
self.play(
|
|
55
|
+
self.camera.frame.animate.set(width=4).move_to(shapes[0])
|
|
56
|
+
)
|
|
57
|
+
self.wait()
|
|
58
|
+
|
|
59
|
+
# --- PAN ---
|
|
60
|
+
# Move camera to another shape
|
|
61
|
+
self.play(
|
|
62
|
+
self.camera.frame.animate.move_to(shapes[2])
|
|
63
|
+
)
|
|
64
|
+
self.wait()
|
|
65
|
+
|
|
66
|
+
# --- ZOOM OUT ---
|
|
67
|
+
# Restore original camera
|
|
68
|
+
self.play(Restore(self.camera.frame))
|
|
69
|
+
self.wait()
|
|
70
|
+
|
|
71
|
+
# --- FOLLOW OBJECT ---
|
|
72
|
+
# Create moving dot
|
|
73
|
+
dot = Dot(color=RED, radius=0.15).move_to(LEFT * 5)
|
|
74
|
+
self.add(dot)
|
|
75
|
+
|
|
76
|
+
# Set camera to follow the dot
|
|
77
|
+
self.camera.frame.add_updater(
|
|
78
|
+
lambda m: m.move_to(dot.get_center())
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Move the dot (camera follows automatically)
|
|
82
|
+
self.play(dot.animate.move_to(RIGHT * 5), run_time=3)
|
|
83
|
+
self.wait()
|
|
84
|
+
|
|
85
|
+
# Stop following
|
|
86
|
+
self.camera.frame.clear_updaters()
|
|
87
|
+
|
|
88
|
+
# ============================================================
|
|
89
|
+
# CLEANUP: Reset and fade out
|
|
90
|
+
# ============================================================
|
|
91
|
+
|
|
92
|
+
self.play(
|
|
93
|
+
self.camera.frame.animate.move_to(ORIGIN).set(width=14)
|
|
94
|
+
)
|
|
95
|
+
self.play(FadeOut(shapes, labels, title, dot))
|
|
96
|
+
self.wait()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
# Run this specific scene:
|
|
100
|
+
# manim -pql camera_scene.py YourCameraScene
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""
|
|
2
|
+
3D Scene Template for Manim Community
|
|
3
|
+
|
|
4
|
+
Use this for 3D visualizations with camera rotation and surfaces.
|
|
5
|
+
|
|
6
|
+
Render: manim -pql your_file.py Your3DScene
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from manim import *
|
|
10
|
+
import numpy as np
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Your3DScene(ThreeDScene):
|
|
14
|
+
"""
|
|
15
|
+
Template for 3D scenes.
|
|
16
|
+
|
|
17
|
+
Inherits from ThreeDScene which provides:
|
|
18
|
+
- set_camera_orientation(phi, theta, gamma)
|
|
19
|
+
- move_camera()
|
|
20
|
+
- begin_ambient_camera_rotation() / stop_ambient_camera_rotation()
|
|
21
|
+
- add_fixed_in_frame_mobjects() for 2D overlays
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def construct(self):
|
|
25
|
+
# ============================================================
|
|
26
|
+
# CAMERA SETUP
|
|
27
|
+
# ============================================================
|
|
28
|
+
|
|
29
|
+
# Set initial camera orientation
|
|
30
|
+
# phi: angle from z-axis (0 = top-down, 90 = side view)
|
|
31
|
+
# theta: rotation around z-axis
|
|
32
|
+
self.set_camera_orientation(
|
|
33
|
+
phi=70 * DEGREES,
|
|
34
|
+
theta=-45 * DEGREES
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# ============================================================
|
|
38
|
+
# 3D AXES
|
|
39
|
+
# ============================================================
|
|
40
|
+
|
|
41
|
+
axes = ThreeDAxes(
|
|
42
|
+
x_range=[-3, 3, 1],
|
|
43
|
+
y_range=[-3, 3, 1],
|
|
44
|
+
z_range=[-2, 2, 1],
|
|
45
|
+
x_length=6,
|
|
46
|
+
y_length=6,
|
|
47
|
+
z_length=4,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# Axis labels (stay fixed to camera orientation)
|
|
51
|
+
axis_labels = axes.get_axis_labels(
|
|
52
|
+
x_label="x",
|
|
53
|
+
y_label="y",
|
|
54
|
+
z_label="z"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
self.play(Create(axes))
|
|
58
|
+
self.add(axis_labels)
|
|
59
|
+
self.wait()
|
|
60
|
+
|
|
61
|
+
# ============================================================
|
|
62
|
+
# 3D OBJECTS
|
|
63
|
+
# ============================================================
|
|
64
|
+
|
|
65
|
+
# --- Basic 3D shapes ---
|
|
66
|
+
sphere = Sphere(radius=0.5, color=BLUE).shift(LEFT * 2)
|
|
67
|
+
cube = Cube(side_length=0.8, color=RED, fill_opacity=0.8)
|
|
68
|
+
|
|
69
|
+
self.play(Create(sphere), Create(cube))
|
|
70
|
+
self.wait()
|
|
71
|
+
|
|
72
|
+
# --- 3D Surface ---
|
|
73
|
+
# z = sin(sqrt(x^2 + y^2))
|
|
74
|
+
surface = Surface(
|
|
75
|
+
lambda u, v: axes.c2p(
|
|
76
|
+
u, v,
|
|
77
|
+
np.sin(np.sqrt(u ** 2 + v ** 2))
|
|
78
|
+
),
|
|
79
|
+
u_range=[-2.5, 2.5],
|
|
80
|
+
v_range=[-2.5, 2.5],
|
|
81
|
+
resolution=(20, 20),
|
|
82
|
+
fill_opacity=0.6,
|
|
83
|
+
)
|
|
84
|
+
surface.set_color_by_gradient(BLUE, TEAL, GREEN)
|
|
85
|
+
|
|
86
|
+
self.play(
|
|
87
|
+
FadeOut(sphere),
|
|
88
|
+
FadeOut(cube),
|
|
89
|
+
Create(surface),
|
|
90
|
+
run_time=2
|
|
91
|
+
)
|
|
92
|
+
self.wait()
|
|
93
|
+
|
|
94
|
+
# ============================================================
|
|
95
|
+
# 2D OVERLAY (Fixed to screen)
|
|
96
|
+
# ============================================================
|
|
97
|
+
|
|
98
|
+
# Title that stays fixed to screen (doesn't rotate with 3D scene)
|
|
99
|
+
title = Text("3D Surface Visualization", font_size=36)
|
|
100
|
+
title.to_corner(UL)
|
|
101
|
+
self.add_fixed_in_frame_mobjects(title)
|
|
102
|
+
self.play(Write(title))
|
|
103
|
+
|
|
104
|
+
# Math equation overlay
|
|
105
|
+
equation = MathTex(r"z = \sin\sqrt{x^2 + y^2}")
|
|
106
|
+
equation.to_corner(UR)
|
|
107
|
+
self.add_fixed_in_frame_mobjects(equation)
|
|
108
|
+
self.play(Write(equation))
|
|
109
|
+
|
|
110
|
+
# ============================================================
|
|
111
|
+
# CAMERA MOVEMENT
|
|
112
|
+
# ============================================================
|
|
113
|
+
|
|
114
|
+
# --- Manual camera movement ---
|
|
115
|
+
self.move_camera(phi=45 * DEGREES, theta=30 * DEGREES, run_time=2)
|
|
116
|
+
self.wait()
|
|
117
|
+
|
|
118
|
+
# --- Continuous rotation ---
|
|
119
|
+
self.begin_ambient_camera_rotation(rate=0.2) # radians per second
|
|
120
|
+
self.wait(5)
|
|
121
|
+
self.stop_ambient_camera_rotation()
|
|
122
|
+
|
|
123
|
+
# ============================================================
|
|
124
|
+
# CLEANUP
|
|
125
|
+
# ============================================================
|
|
126
|
+
|
|
127
|
+
self.play(
|
|
128
|
+
FadeOut(surface),
|
|
129
|
+
FadeOut(axes),
|
|
130
|
+
FadeOut(axis_labels),
|
|
131
|
+
FadeOut(title),
|
|
132
|
+
FadeOut(equation),
|
|
133
|
+
)
|
|
134
|
+
self.wait()
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
# Run this specific scene:
|
|
138
|
+
# manim -pql threed_scene.py Your3DScene
|