- 310 registry:skill items, 1528 files, 7 categories (hub tags) - registry.json generated by @kortix/registry buildRegistry - nested SKILL.md in sn-da-* renamed SUBSKILL.md (no phantom skills) - provenance + licenses: SOURCES.md
314 lines
8.4 KiB
Markdown
314 lines
8.4 KiB
Markdown
---
|
|
name: motion-graphics
|
|
version: "1.0.0"
|
|
description: |
|
|
Kinetic typography, logo animations, and stylized motion design skill.
|
|
|
|
**Triggers when:**
|
|
- User wants text animations or kinetic typography
|
|
- Request involves logo reveals or title sequences
|
|
- Content focuses on visual impact over education
|
|
- User mentions "title", "intro", "logo", "text animation", "kinetic"
|
|
|
|
**Capabilities:**
|
|
- Kinetic typography with dynamic text effects
|
|
- Logo reveals and brand animations
|
|
- Particle effects and visual flourishes
|
|
- Modern motion design patterns
|
|
- Attention-grabbing title sequences
|
|
author: manim-video-generator
|
|
license: MIT
|
|
---
|
|
|
|
# Motion Graphics Skill
|
|
|
|
The Motion Graphics skill creates visually striking animations focused on aesthetic impact, perfect for titles, intros, and attention-grabbing content.
|
|
|
|
## Design Principles
|
|
|
|
### The 4 S's of Motion Graphics
|
|
- **Style**: Consistent visual language throughout
|
|
- **Surprise**: Unexpected movements that delight
|
|
- **Smoothness**: Fluid transitions and easing
|
|
- **Simplicity**: Clean design, no visual clutter
|
|
|
|
### Motion Design Fundamentals
|
|
- **Anticipation**: Small movement before main action
|
|
- **Follow-through**: Elements continue after stopping
|
|
- **Overshoot**: Go past, then settle into place
|
|
- **Squash & Stretch**: Emphasize weight and impact
|
|
|
|
## Rules
|
|
|
|
### [rules/kinetic-typography.md](rules/kinetic-typography.md)
|
|
Creating impactful text animations that convey emotion.
|
|
|
|
### [rules/timing-and-easing.md](rules/timing-and-easing.md)
|
|
Professional easing curves and timing patterns.
|
|
|
|
### [rules/visual-hierarchy.md](rules/visual-hierarchy.md)
|
|
Directing attention through size, color, and motion.
|
|
|
|
### [rules/brand-consistency.md](rules/brand-consistency.md)
|
|
Maintaining consistent style across animations.
|
|
|
|
## Templates
|
|
|
|
### Kinetic Typography - Word by Word
|
|
```python
|
|
from manim import *
|
|
|
|
class KineticTypography(Scene):
|
|
def construct(self):
|
|
self.camera.background_color = "#1a1a2e"
|
|
|
|
words = ["The", "Future", "Is", "NOW"]
|
|
colors = [WHITE, BLUE, WHITE, YELLOW]
|
|
|
|
for word, color in zip(words, colors):
|
|
text = Text(word, font_size=96, color=color, weight=BOLD)
|
|
|
|
# Dramatic entrance
|
|
text.scale(0)
|
|
self.add(text)
|
|
self.play(
|
|
text.animate.scale(1),
|
|
rate_func=rate_functions.ease_out_back,
|
|
run_time=0.4
|
|
)
|
|
self.wait(0.3)
|
|
|
|
# Exit with style
|
|
self.play(
|
|
text.animate.shift(UP * 2).set_opacity(0),
|
|
rate_func=rate_functions.ease_in_cubic,
|
|
run_time=0.3
|
|
)
|
|
self.remove(text)
|
|
|
|
# Final combination
|
|
final = Text("THE FUTURE IS NOW", font_size=48, color=GOLD)
|
|
self.play(Write(final), run_time=1)
|
|
self.play(Indicate(final, scale_factor=1.1, color=WHITE))
|
|
```
|
|
|
|
### Logo Reveal - Particle Assemble
|
|
```python
|
|
from manim import *
|
|
import random
|
|
|
|
class LogoReveal(Scene):
|
|
def construct(self):
|
|
self.camera.background_color = "#0a0a0a"
|
|
|
|
# Create logo text
|
|
logo = Text("BRAND", font_size=120, color=WHITE, weight=BOLD)
|
|
|
|
# Create particles that will form the logo
|
|
particles = VGroup()
|
|
for _ in range(100):
|
|
dot = Dot(
|
|
point=[random.uniform(-7, 7), random.uniform(-4, 4), 0],
|
|
radius=0.05,
|
|
color=random_color()
|
|
)
|
|
particles.add(dot)
|
|
|
|
self.add(particles)
|
|
|
|
# Swirl particles
|
|
self.play(
|
|
*[Rotating(p, radians=PI * 2, about_point=ORIGIN)
|
|
for p in particles],
|
|
run_time=1.5,
|
|
rate_func=rate_functions.ease_in_out_sine
|
|
)
|
|
|
|
# Converge to logo position
|
|
self.play(
|
|
FadeOut(particles),
|
|
FadeIn(logo, scale=0.5),
|
|
run_time=0.8
|
|
)
|
|
|
|
# Glow effect
|
|
glow = logo.copy().set_color(BLUE).set_opacity(0.5)
|
|
self.play(
|
|
glow.animate.scale(1.2).set_opacity(0),
|
|
run_time=0.5
|
|
)
|
|
self.remove(glow)
|
|
|
|
self.wait()
|
|
```
|
|
|
|
### Title Sequence - Slide & Stack
|
|
```python
|
|
from manim import *
|
|
|
|
class TitleSequence(Scene):
|
|
def construct(self):
|
|
self.camera.background_color = "#16213e"
|
|
|
|
# Main title
|
|
title = Text("EPISODE ONE", font_size=72, color=WHITE)
|
|
subtitle = Text("The Beginning", font_size=36, color=BLUE_C)
|
|
|
|
# Slide in from sides
|
|
title.shift(LEFT * 10)
|
|
subtitle.shift(RIGHT * 10)
|
|
|
|
self.add(title, subtitle)
|
|
|
|
self.play(
|
|
title.animate.move_to(UP * 0.5),
|
|
subtitle.animate.move_to(DOWN * 0.5),
|
|
run_time=0.8,
|
|
rate_func=rate_functions.ease_out_cubic
|
|
)
|
|
|
|
# Add decorative lines
|
|
line_left = Line(LEFT * 3, LEFT * 0.5, color=GOLD, stroke_width=2)
|
|
line_right = Line(RIGHT * 0.5, RIGHT * 3, color=GOLD, stroke_width=2)
|
|
|
|
lines = VGroup(line_left, line_right).next_to(title, UP, buff=0.3)
|
|
|
|
self.play(
|
|
Create(line_left),
|
|
Create(line_right),
|
|
run_time=0.5
|
|
)
|
|
|
|
# Fade all together
|
|
self.wait(2)
|
|
self.play(
|
|
FadeOut(VGroup(title, subtitle, lines), shift=UP),
|
|
run_time=0.6
|
|
)
|
|
```
|
|
|
|
### Text Glitch Effect
|
|
```python
|
|
from manim import *
|
|
|
|
class GlitchText(Scene):
|
|
def construct(self):
|
|
self.camera.background_color = "#000000"
|
|
|
|
text = Text("GLITCH", font_size=96, color=WHITE, weight=BOLD)
|
|
|
|
# Create glitch copies
|
|
red_copy = text.copy().set_color(RED).shift(LEFT * 0.05 + UP * 0.02)
|
|
blue_copy = text.copy().set_color(BLUE).shift(RIGHT * 0.05 + DOWN * 0.02)
|
|
|
|
self.add(red_copy, blue_copy, text)
|
|
|
|
# Glitch animation
|
|
for _ in range(5):
|
|
# Random offset
|
|
self.play(
|
|
red_copy.animate.shift(RIGHT * 0.1),
|
|
blue_copy.animate.shift(LEFT * 0.1),
|
|
run_time=0.05
|
|
)
|
|
self.play(
|
|
red_copy.animate.shift(LEFT * 0.1),
|
|
blue_copy.animate.shift(RIGHT * 0.1),
|
|
run_time=0.05
|
|
)
|
|
|
|
# Settle
|
|
self.play(
|
|
red_copy.animate.move_to(text.get_center()),
|
|
blue_copy.animate.move_to(text.get_center()),
|
|
run_time=0.2
|
|
)
|
|
|
|
self.remove(red_copy, blue_copy)
|
|
self.wait()
|
|
```
|
|
|
|
### Counter Animation
|
|
```python
|
|
from manim import *
|
|
|
|
class CounterAnimation(Scene):
|
|
def construct(self):
|
|
self.camera.background_color = "#1a1a2e"
|
|
|
|
# Value tracker
|
|
counter = ValueTracker(0)
|
|
|
|
# Dynamic text
|
|
number = always_redraw(lambda: Text(
|
|
f"{int(counter.get_value()):,}",
|
|
font_size=120,
|
|
color=WHITE,
|
|
weight=BOLD
|
|
))
|
|
|
|
label = Text("SUBSCRIBERS", font_size=32, color=BLUE_C)
|
|
label.next_to(number, DOWN, buff=0.5)
|
|
|
|
self.add(number, label)
|
|
|
|
# Animate count
|
|
self.play(
|
|
counter.animate.set_value(1000000),
|
|
run_time=3,
|
|
rate_func=rate_functions.ease_out_cubic
|
|
)
|
|
|
|
# Celebration effect
|
|
self.play(
|
|
Indicate(number, scale_factor=1.2, color=GOLD),
|
|
run_time=0.5
|
|
)
|
|
```
|
|
|
|
## Easing Functions Reference
|
|
|
|
| Effect | Rate Function | Use Case |
|
|
|--------|--------------|----------|
|
|
| Smooth | `smooth` | General purpose |
|
|
| Dramatic entrance | `ease_out_back` | Pop-in effects |
|
|
| Gentle exit | `ease_in_cubic` | Fade outs |
|
|
| Bouncy | `ease_out_bounce` | Playful motion |
|
|
| Snappy | `ease_out_expo` | Quick, impactful |
|
|
| Natural | `ease_in_out_sine` | Organic movement |
|
|
| Linear | `linear` | Constant speed |
|
|
|
|
## Color Palettes
|
|
|
|
### Neon Cyberpunk
|
|
```python
|
|
NEON_PINK = "#ff00ff"
|
|
NEON_BLUE = "#00ffff"
|
|
NEON_GREEN = "#00ff00"
|
|
DARK_BG = "#0a0a0a"
|
|
```
|
|
|
|
### Corporate Professional
|
|
```python
|
|
CORP_BLUE = "#0066cc"
|
|
CORP_GRAY = "#333333"
|
|
CORP_WHITE = "#ffffff"
|
|
CORP_ACCENT = "#ff6600"
|
|
```
|
|
|
|
### Minimal Modern
|
|
```python
|
|
MIN_BLACK = "#1a1a1a"
|
|
MIN_WHITE = "#f5f5f5"
|
|
MIN_GRAY = "#888888"
|
|
MIN_ACCENT = "#3366ff"
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Less is more** - Restraint makes key moments impactful
|
|
2. **Timing is everything** - Wrong timing kills good animation
|
|
3. **Consistency builds trust** - Same style throughout
|
|
4. **Sound design matters** - Design with audio in mind
|
|
5. **Test on target platform** - Different devices, different experience
|