Scene composition and orchestration skill for creating complex multi-part animations. **Triggers when:** - User wants to compose multi-element scenes - Request involves combining multiple visual elements - Scene requires act-based structure or transitions - User mentions "scene", "compose", "combine", "orchestrate" **Capabilities:** - Scene graph construction with acts and transitions - Multi-object coordination and timing - Camera movements and focus control - Layered animation sequences
The Animation Composer orchestrates complex multi-part animations by breaking them into logical acts, coordinating timing, and managing transitions between scenes.
SceneGraph
├── GlobalStyle (colors, fonts, camera)
├── Acts[]
│ ├── Mobjects[] (visual elements)
│ ├── Animations[] (transformations)
│ └── Transitions (fade, slide, zoom)
└── Timeline (duration, pacing)
Each animation is composed of one or more Acts:
Guidelines for structuring scenes with clear beginnings, middles, and ends.
Best practices for coordinating multiple animations and avoiding visual clutter.
Smooth transitions between acts using fades, slides, and morphs.
Camera movements, zooms, and focus to guide viewer attention.
from manim import *
class ComposedScene(Scene):
def construct(self):
# Act 1: Introduction
title = Text("Introduction").scale(1.5)
self.play(Write(title))
self.wait(1)
self.play(FadeOut(title))
# Act 2: Main Content
content = self.create_main_content()
self.play(Create(content))
self.animate_content(content)
# Act 3: Conclusion
self.play(FadeOut(content))
conclusion = Text("Key Takeaway").scale(1.2)
self.play(FadeIn(conclusion))
from manim import *
class CameraComposedScene(MovingCameraScene):
def construct(self):
# Create elements at different positions
left_group = self.create_left_section().shift(LEFT * 4)
right_group = self.create_right_section().shift(RIGHT * 4)
# Act 1: Overview
self.camera.frame.scale(2)
self.add(left_group, right_group)
self.wait()
# Act 2: Focus on left
self.play(self.camera.frame.animate.scale(0.5).move_to(left_group))
self.animate_left(left_group)
# Act 3: Focus on right
self.play(self.camera.frame.animate.move_to(right_group))
self.animate_right(right_group)
# Act 4: Zoom out for conclusion
self.play(self.camera.frame.animate.scale(2).move_to(ORIGIN))
Elements appear one after another in a logical sequence.
self.play(Create(element1))
self.play(Create(element2))
self.play(Create(element3))
Multiple elements animate simultaneously for visual impact.
self.play(
Create(element1),
Create(element2),
Create(element3)
)
Elements appear with slight delays for a cascading effect.
self.play(LaggedStart(
*[Create(e) for e in elements],
lag_ratio=0.2
))
Parent-child relationships for grouped animations.
group = VGroup(child1, child2, child3)
self.play(Create(group)) # All children animate together