mcpField
M
motion-graphics

motion-graphics

github.com/rohitg00クリエイティブ・メディア30971 回インストール39 週間前に更新
リポジトリ

motion-graphics について

タイトルやイントロなどのアニメーション制作に使うモーショングラフィックススキルです。デザイン原則、タイミングとイージングの資料、カラーパレット、Manim のテンプレートを提供します。

主な機能

  1. 01モーションデザインの原則と基礎
  2. 02キネティックタイポグラフィとタイミングのルール
  3. 03再利用可能な Manim アニメーションテンプレート
  4. 04イージング関数のリファレンス
  5. 05カラーパレットの例

活用シーン

  1. 01タイトルシーケンスやイントロの制作
  2. 02単語ごとのテキストアニメーション
  3. 03ロゴのリビールやグリッチ効果の作成
  4. 04イージングを使ったカウンターのデザイン

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rohitg00/manim-video-generator --skill motion-graphics

インストール後、Claude Code で/motion-graphicsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

presets/
animation-presets.py
color-palettes.py
thumbnail-presets.py
rules/
audio-sync.md
brand-consistency.md
community-edition-patterns.md
kinetic-typography.md
opengl-renderer-patterns.md
timing-and-easing.md
visual-hierarchy.md
web-export.md

詳細

モーショングラフィックススキル

モーショングラフィックススキルは、美しさを重視した視覚的に印象的なアニメーションを作成します。タイトル、イントロ、注目を集めるコンテンツに最適です。

デザインの原則

モーショングラフィックスの4つのS
  • スタイル:全体を通じて一貫したビジュアル表現
  • サプライズ:見る人を楽しませる意外な動き
  • 滑らかさ:流れるようなトランジションとイージング
  • シンプルさ:すっきりとしたデザインで、視覚的な煩雑さを避ける
モーションデザインの基本
  • 予備動作:主要な動きの前に加える小さな動き
  • フォロースルー:停止した後も要素が動き続けること
  • オーバーシュート:目標を通り過ぎてから、所定の位置に収まる動き
  • スクワッシュ&ストレッチ:重さや衝撃を強調すること

ルール

rules/kinetic-typography.md

感情を伝える、印象的なテキストアニメーションの作成方法です。

rules/timing-and-easing.md

プロ品質のイージングカーブとタイミングパターンです。

rules/visual-hierarchy.md

サイズ、色、動きを通じて注意を誘導します。

rules/brand-consistency.md

アニメーション全体で一貫したスタイルを保ちます。

テンプレート

キネティックタイポグラフィ - 単語ごと
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))
ロゴのリビール - パーティクルの組み立て
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()
タイトルシーケンス - スライド&スタック
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
        )
テキストグリッチ効果
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()
カウンターアニメーション
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
        )

イージング関数リファレンス

効果レート関数使用例
滑らかsmooth汎用
ドラマチックな登場ease_out_backポップイン効果
穏やかな退出ease_in_cubicフェードアウト
バウンスease_out_bounce遊び心のある動き
キビキビした動きease_out_expo素早く、印象的な動き
自然ease_in_out_sine有機的な動き
リニアlinear一定の速度

カラーパレット

ネオン・サイバーパンク
NEON_PINK = "#ff00ff"
NEON_BLUE = "#00ffff"
NEON_GREEN = "#00ff00"
DARK_BG = "#0a0a0a"
コーポレート・プロフェッショナル
CORP_BLUE = "#0066cc"
CORP_GRAY = "#333333"
CORP_WHITE = "#ffffff"
CORP_ACCENT = "#ff6600"
ミニマル・モダン
MIN_BLACK = "#1a1a1a"
MIN_WHITE = "#f5f5f5"
MIN_GRAY = "#888888"
MIN_ACCENT = "#3366ff"

ベストプラクティス

  1. 控えめが効果的です - 抑制することで、重要な瞬間が際立ちます
  2. タイミングがすべてです - タイミングを誤ると、良いアニメーションも台無しになります
  3. 一貫性が信頼を築きます - 全体を通じて同じスタイルを保ちます
  4. サウンドデザインも重要です - 音声を考慮してデザインします
  5. 対象プラットフォームでテストします - デバイスによって体験は異なります

コメント