mirror of
https://github.com/hanzoai/video.git
synced 2026-11-03 04:21:39 +00:00
11 production pipelines, 47 tools, 124 agent skills. Supports cloud APIs (fal.ai, OpenAI, ElevenLabs, Suno, HeyGen, Runway) and free local providers (diffusers, Piper TTS, WAN 2.1, Hunyuan, CogVideo). Co-authored-by: Hanzo Dev <[email protected]>
213 lines
5.7 KiB
Python
213 lines
5.7 KiB
Python
"""
|
|
Basic Animation Patterns for Manim Community
|
|
|
|
This file demonstrates fundamental animation techniques adapted from 3b1b patterns.
|
|
Run with: manim -pql basic_animations.py SceneName
|
|
"""
|
|
|
|
from manim import *
|
|
|
|
|
|
class ShapeCreation(Scene):
|
|
"""Demonstrates various ways to create and animate shapes."""
|
|
|
|
def construct(self):
|
|
# Create shapes
|
|
circle = Circle(radius=1, color=BLUE, fill_opacity=0.5)
|
|
square = Square(side_length=2, color=RED)
|
|
triangle = Triangle(color=GREEN, fill_opacity=0.8)
|
|
|
|
# Arrange shapes
|
|
shapes = VGroup(circle, square, triangle).arrange(RIGHT, buff=1)
|
|
|
|
# Different creation animations
|
|
self.play(Create(circle)) # Draw outline progressively
|
|
self.play(DrawBorderThenFill(square)) # Border first, then fill
|
|
self.play(GrowFromCenter(triangle)) # Grow from center point
|
|
|
|
self.wait()
|
|
|
|
# Transform between shapes
|
|
self.play(Transform(circle, square.copy().shift(UP * 2)))
|
|
|
|
self.wait()
|
|
|
|
|
|
class TextAnimations(Scene):
|
|
"""Demonstrates text and LaTeX animations."""
|
|
|
|
def construct(self):
|
|
# Plain text
|
|
title = Text("Manim Community", font_size=72, color=BLUE)
|
|
self.play(Write(title))
|
|
self.wait()
|
|
|
|
# Move title up
|
|
self.play(title.animate.to_edge(UP))
|
|
|
|
# LaTeX math
|
|
equation = MathTex(r"e^{i\pi} + 1 = 0", font_size=64)
|
|
self.play(Write(equation))
|
|
self.wait()
|
|
|
|
# Transform equation
|
|
expanded = MathTex(r"e^{i\pi} = -1", font_size=64)
|
|
self.play(TransformMatchingTex(equation, expanded))
|
|
|
|
self.wait()
|
|
|
|
|
|
class LaggedAnimations(Scene):
|
|
"""Demonstrates staggered animations using LaggedStart patterns."""
|
|
|
|
def construct(self):
|
|
# Create a grid of dots
|
|
dots = VGroup(*[
|
|
Dot(radius=0.15, color=interpolate_color(BLUE, RED, i / 24))
|
|
for i in range(25)
|
|
]).arrange_in_grid(rows=5, cols=5, buff=0.5)
|
|
|
|
# Staggered fade in
|
|
self.play(
|
|
LaggedStart(*[FadeIn(dot, scale=0.5) for dot in dots], lag_ratio=0.1)
|
|
)
|
|
self.wait()
|
|
|
|
# Staggered transformation using LaggedStart with animate
|
|
self.play(
|
|
LaggedStart(
|
|
*[dot.animate.scale(1.5).set_color(YELLOW) for dot in dots],
|
|
lag_ratio=0.05
|
|
)
|
|
)
|
|
self.wait()
|
|
|
|
# Wave effect using AnimationGroup with rate_func
|
|
self.play(
|
|
LaggedStart(
|
|
*[dot.animate(rate_func=there_and_back).shift(UP * 0.5) for dot in dots],
|
|
lag_ratio=0.02,
|
|
run_time=2
|
|
)
|
|
)
|
|
|
|
|
|
class AnimationComposition(Scene):
|
|
"""Demonstrates combining multiple animations."""
|
|
|
|
def construct(self):
|
|
# Create objects
|
|
circle = Circle(color=BLUE, fill_opacity=0.5)
|
|
label = Text("Circle", font_size=36).next_to(circle, DOWN)
|
|
|
|
# Group them
|
|
group = VGroup(circle, label)
|
|
|
|
# Animate together
|
|
self.play(
|
|
Create(circle),
|
|
Write(label),
|
|
run_time=2
|
|
)
|
|
self.wait()
|
|
|
|
# Sequential animations with Succession
|
|
square = Square(color=RED, fill_opacity=0.5).shift(RIGHT * 3)
|
|
square_label = Text("Square", font_size=36).next_to(square, DOWN)
|
|
|
|
self.play(
|
|
Succession(
|
|
group.animate.shift(LEFT * 2),
|
|
Create(square),
|
|
Write(square_label),
|
|
lag_ratio=0.5
|
|
)
|
|
)
|
|
self.wait()
|
|
|
|
|
|
class PathAnimations(Scene):
|
|
"""Demonstrates movement along paths."""
|
|
|
|
def construct(self):
|
|
# Create a path
|
|
path = VMobject()
|
|
path.set_points_smoothly([
|
|
LEFT * 3,
|
|
LEFT * 2 + UP * 2,
|
|
ORIGIN + UP,
|
|
RIGHT * 2 + UP * 2,
|
|
RIGHT * 3,
|
|
])
|
|
path.set_color(GREY)
|
|
|
|
# Create moving object
|
|
dot = Dot(color=RED, radius=0.2)
|
|
dot.move_to(path.get_start())
|
|
|
|
self.add(path)
|
|
self.play(Create(path))
|
|
|
|
# Move along path
|
|
self.play(MoveAlongPath(dot, path), run_time=3, rate_func=smooth)
|
|
|
|
self.wait()
|
|
|
|
|
|
class ColorTransitions(Scene):
|
|
"""Demonstrates color manipulation and gradients."""
|
|
|
|
def construct(self):
|
|
# Color gradient on shapes
|
|
squares = VGroup(*[
|
|
Square(side_length=0.8, fill_opacity=0.8)
|
|
for _ in range(7)
|
|
]).arrange(RIGHT, buff=0.2)
|
|
|
|
# Apply gradient colors
|
|
colors = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE, PINK]
|
|
for square, color in zip(squares, colors):
|
|
square.set_fill(color)
|
|
square.set_stroke(WHITE, width=2)
|
|
|
|
self.play(LaggedStartMap(GrowFromCenter, squares, lag_ratio=0.1))
|
|
self.wait()
|
|
|
|
# Animate color change
|
|
self.play(
|
|
*[square.animate.set_fill(interpolate_color(BLUE, RED, i / 6))
|
|
for i, square in enumerate(squares)],
|
|
run_time=2
|
|
)
|
|
self.wait()
|
|
|
|
|
|
class GroupOperations(Scene):
|
|
"""Demonstrates VGroup operations and arrangements."""
|
|
|
|
def construct(self):
|
|
# Create VGroup
|
|
shapes = VGroup(
|
|
Circle(color=RED),
|
|
Square(color=GREEN),
|
|
Triangle(color=BLUE),
|
|
)
|
|
|
|
# Arrange horizontally
|
|
shapes.arrange(RIGHT, buff=1)
|
|
self.play(Create(shapes))
|
|
self.wait()
|
|
|
|
# Scale entire group
|
|
self.play(shapes.animate.scale(0.5))
|
|
self.wait()
|
|
|
|
# Arrange vertically
|
|
self.play(shapes.animate.arrange(DOWN, buff=0.5))
|
|
self.wait()
|
|
|
|
# Apply operation to all
|
|
self.play(shapes.animate.set_fill(YELLOW, opacity=0.5))
|
|
|
|
self.wait()
|