Communitygithub.com

アニメーションスタイル

Remotionでコードのみで描画される39種類のアニメーションスタイルで短い無音アニメーション動画(MP4)を作成します。画像モデルや動画モデルは不要です。ホワイトボード、黒板、ノートの落書き、青写真、鉛筆スケッチ、水彩、クレヨン、ワンライン、セルアニメ、フラットベクター、棒人間、切り抜きコラージュ、ペーパーカット、ペーパーポップアップ、影絵、木版画、エングレービング、シルクスクリーン、浮世絵、アールデコ、ステンドグラス、メンフィス、ステッカー解説、数式図、ローポリ、ブロック玩具、ガラス製品、クレイメーション、LiDAR、サイレント映画、ニュース映画、ピクセルアート、顕微鏡、ホログラムHUD、回路基板、リキッドモーション、ジェネレーティブアブストラクトなど。

アニメーションスタイル とは?

このスキルは、Claude CodeなどのAIエージェントが、39種類の異なるアニメーションスタイルで短い動画(MP4)を生成するための完全なコードベースとワークフローを提供します。すべての動画は、SVGまたはCanvasを使用してフレームごとにコードで描画されるため、画像生成AIモデルや動画モデル、ストック映像は一切不要です。ユーザーは「make a 5-second video of [アイデア] in [スタイル] style」のような自然言語の指示を与えるだけで、AIエージェントが自動的にプロジェクトのセットアップ、ストーリーボードの計画、形状のコード化、スタイルの適用、レンダリング、最終的なMP4ファイルの提供までを行います。主なワークフローとして、ユーザーのアイデアを6つのビート(登場、準備、アクション、結果、退場、余韻)にマッピングし、選択されたスタイルのコンポーネントと組み合わせることで、一貫性と品質を確保します。また、「now make it pixel art」のようなフォローアップ指示で、簡単に同じストーリーを別のスタイルで再レンダリングできます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/deenukhan/animation-styles/tree/HEAD

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

アニメーションスタイル は何をしますか?

39種類の手作りアニメーションスタイルを備えたRemotionプロジェクト。各スタイルは固定された1つのストーリーを再描画するため、並べて比較したり、テンプレートとして再利用できます。やかんが入ってきて、傾き、チャイをクルハド(陶器のカップ)に注ぎ、カップが満たされ、やかんが去り、湯気が立ち上る。 150フレーム、30fps、1080×1350(4:5)、無音。--scale=2でレンダリングすると2160×2700になります。

すべてコードで描画されます:SVGとフィルター、または各フレームを描画する<canvas>。画像モデル、動画モデル、ストック映像は一切使用されていないため、出力はオリジナルで再現可能です。

プロジェクトはこのスキルのフォルダ(このファイルを保持するフォルダ。以下<skill>と呼びます)にあります。コマンドはそこで実行してください。

0. セッションでの初回

  1. cd <skill> して node_modules/ が存在するか確認します。存在しない場合は npm install を実行します(約1分、Node 18+が必要です)。
  2. npm run list で39のスタイルすべてを番号、スラッグ、1行の外観とともに表示します。
  3. 最初のレンダリングではヘッドレスChromeを一度ダウンロードします(約100 MB)。インターネット接続が必要です。

よくあるリクエスト:「<アイデア> の5秒動画を <スタイル> スタイルで作って」

これがメインの仕事です(そしてこのスキルを紹介する投稿のプロンプトです)。アイデアが不明瞭でない限り、質問せずに最後まで実行してください:

  1. 作業フォルダ: ユーザーの現在の作業フォルダ内にある animation-films/ を使用します。存在しない場合は、そのフォルダから node <skill>/scripts/new-project.mjs animation-films で作成し、cd animation-films && npm install を実行します(初回以降は高速です)。存在する場合(フォローアップの場合)、そのまま再利用します。
  2. スタイルを選択 リクエストから(セクション1)。スタイル名がない場合は、アイデアに合う3つを提案して尋ねます。
  3. ストーリーを計画 6つのビート(セクション3)に沿って短い表にまとめます。1つのメッセージで表示し、そのまま続行します。曖昧でない限り待機しません。
  4. まず形状: ユーザーのオブジェクト(動作主体、容器、流れるもの、上昇するもの)を src/films/<idea>-shapes.ts に、story.ts 内の P と同じ座標系のSVGパスとして配置します。先頭にビート表をコメントとして追加します。このアイデアのすべてのスタイルバージョンはこの1つのファイルからインポートします。
  5. ビルド src/films/<idea>-<style>.tsx をスタイルのコンポーネント(セクション3)から作成し、shapesファイルを使用して、src/films/index.ts に <idea>-<style> というIDで登録します。
  6. 確認: npm run render -- <idea>-<style> --frames を実行し、6つのフレームすべてを確認します(セクション5)。修正して繰り返します。
  7. 納品: npm run render -- <idea>-<style> --final を実行し、out/<idea>-<style>.mp4 の完全なパスをユーザーに伝えます。別のスタイルをリクエストできることを伝えます(「今度はピクセルアートで」)。

スタイル変更のフォローアップ(「じゃあピクセルアートで」「水彩で試して」「同じのを木版画で」): 同じ animation-films/ フォルダに留まり、同じアイデア、ビート表、shapesファイルを維持し、新しいスタイルのコンポーネントから新しい src/films/<idea>-<new-style>.tsx をビルドします。以前のバージョンと一緒に登録し(上書きしない)、フレームを確認し、最終レンダリングを行い、新しいパスを提供します。ユーザーがスタイルを大まかに指定した場合(「8ビット」「古い映画」「チョーク」)、セクション1でマッピングします。3Dルックのスタイル(57、58、59、62、80)はオブジェクトを3Dメッシュとして構築するため、新しいオブジェクトの交換にはより多くの作業が必要です:src/styles/3d/mesh.ts のヘルパーを使用して、形状を単純な旋盤メッシュまたはボックスメッシュに変換します。

1. スタイルの選択

ユーザーが指定していない場合は、どのスタイルが希望かを尋ねます。ユーザーが不明な場合は、ファミリーごとにグループ化された npm run list と README.md のギャラリー(各スタイルには media/thumbs/ に動くプレビュー、media/videos/ に720×900のMP4があります)を表示します。大まかにマッピングします:「Japanese print」→ 33 Ukiyo-e、「chalk」→ 02 Chalkboard、「8-bit」または「retro game」→ 64 Pixel art RPG、「clay」→ 62 Claymation、「Lego-like」→ 58 Brick toy(画面上ではLegoと呼ばない)、「old movie」→ 70 Silent film または 71 Newsreel、「sci-fi screen」→ 84 Hologram HUD。

ファミリースタイル(番号、スラッグ)
ボードに描画01 whiteboard · 02 chalkboard · 05 notepad-doodle · 06 blueprint
手描きとペイント08 hand-drawn · 09 urban-sketch · 10 crayon-book · 11 watercolour · 13 one-line · 16 cel-line-boil
カートゥーン17 flat-vector · 21 cel-anime-80s · 22 stick-figure
紙とパペット23 cut-out · 24 red-papercut · 25 paper-pop-up · 27 shadow-puppet
版画とクラフト28 woodcut · 29 engraving · 31 silkscreen-poster · 33 ukiyo-e · 34 art-deco · 35 stained-glass
グラフィックと解説39 memphis-diorama · 51 sticker-explainer · 52 math-diagram
3Dルック57 low-poly-island · 58 brick-toy · 59 glass-product · 62 claymation · 80 lidar-survey
映画時代70 silent-film · 71 newsreel
画面と科学64 pixel-art-rpg · 81 microscope · 84 hologram-hud · 85 circuit-board
抽象87 liquid-motion · 89 generative-abstract

src/catalog.ts が単一のリストです:番号、コンポジションID(33-ukiyo-e)、名前、ファミリー、外観、スタイルが表示する画面上のテキスト、コードが存在するファイル。

2. 組み込みスタイルをそのまま表示

npm run render -- 33            # 720x900 プレビュー  -> out/33-ukiyo-e_preview.mp4  (数秒から1分)
npm run render -- 33 --final    # 2160x2700 マスター -> out/33-ukiyo-e.mp4          (crf 16)
npm run render -- 33 --frames   # 6つの確認フレーム   -> out/33-ukiyo-e_frames/ (ffmpegがインストールされていればコンタクトシートも)
npm run render -- 33 --still 75 # フレーム75の1枚のPNG

スタイルは番号、ID、スラッグ、または名前の一部(ukiyo、pixel、stained)で指定できます。既製の720×900動画はすでに media/videos/ にあり、完全な2160×2700マスターはGitHubリリースページにあるため、スタイルを表示するだけならレンダリングはまったく必要ありません。

3. ユーザーのストーリーやオブジェクトで再構成

ストーリーは src/story.ts で固定されています。タイミングは維持し、描画されるものを変更します。これにより、新しいフィルムが初回から正しく出力されます:すべてのスタイルはこれらのビートをどのように演出するかを既に知っています。

ビート(30fpsでのフレーム、5秒の動画では決して移動しないでください):

フレームビートstoryAt(f) からの値
0–24動作主体が右から入場kx, ky
24–42準備(傾く)tilt(0 → −38°)
42–96メインアクション(注ぐ)streaming、stream(tip からカップへのSVGパス)
44–100結果の成長(カップが満たされる)level 0 → 1、surface(チャイの楕円)
96–126終了と退場tilt が0に戻る、kx がスライドアウト
104–150余韻(湯気が立ち上る)steam[0..2] 0 → 1、steamPath(i, p, t0) で描画

story.ts の P は、カップ(kulhadBody、kulhadOutline、rim)とやかん(kettleBody、kettleLid、kettleSpout、kettleHandle、kettleBand、および KNOB)のSVGパスを保持します。やかんは自身の原点を中心に描画され、translate(kx, ky) rotate(tilt) で配置されます。

最初にユーザーのストーリーを同じ6つのビートにマッピングし、短い表にしてユーザーに表示します。例:

ユーザーのアイデア動作主体(やかん)アクション(注ぐ)結果(満たす)余韻(湯気)
マグカップへのコーヒーコーヒーポットコーヒーの流れマグが満たされる湯気
植物への水やりじょうろ水滴土が暗くなり、level に応じて芽が成長2枚の葉が開く
貯金コインを持った手コインが落ちる貯金箱が満たされる(level → コインの山)キラキラ
ペンキ缶への塗料ペンキ缶濃いペンキ缶が満たされる滴が落ち着く
データアップロード(抽象または情報スタイル)雲パケットが stream に沿って移動level でバーまたはゲージが満たされるチェックマークが上がる

次に構築します:

  1. インストールされたスキルをクリーンに保つため、別のプロジェクトで作業します:デフォルトではユーザーの現在のフォルダ内の animation-films/(上記「よくあるリクエスト」を参照)、node <skill>/scripts/new-project.mjs <folder> で作成し、その中で npm install を実行します。<skill> 内にユーザーのフィルムを構築しないでください。
  2. 選択したスタイルのコンポーネントをそのファイル(src/catalog.ts を参照)から src/films/<film-name>.tsx に、それがインポートするヘルパーとともにコピーします。39のオリジナルファイルをその場で編集しないでください:それらはリファレンスです。
  3. タイミングではなく形状を置き換えます:やかんとカップのパスをユーザーのオブジェクトに交換し(同じくらいのサイズと位置を維持:カップは中央x 540、リムはy ≈ 800に配置;動作主体は静止時はおおよそ(796, 324)で、「注ぎ口」はローカルポイント(−251, −62))、液体の色を変更し、立ち上るものを変更します。スタイル独自のマテリアル、パレットロジック、フィルター、テクスチャ、モーションキャラクター(手作りメディアでは2または3フレームごとにステップ、デジタルではスムーズ、フィルムではフリッカー)を維持します。
  4. スタイルにテキストが表示される場合(カタログの text フィールドにリストされています:51、52、64、70、71、84、85にテキストが表示されます)、新しいストーリー用に書き換えます:短く、平易な英語で、ストーリーについてのみ。
  5. フィルムを src/films/index.ts に登録し、レンダリングします(セクション4)。

より長いまたは異なるストーリー(より多くのビート、2つの動作主体、カメラ移動):story.ts の隣に(例えば src/films/my-story.ts)新しいストーリーファイルを作成し、独自の storyAt(f) で描画に必要なすべての値を返し、先頭の表に新しいビートをリストし、フィルムに durationInFrames を設定し、「ストーリーファイルがすべてのタイミングを所有し、スタイルファイルがすべての外観を所有する」というルールを維持します。スタイルが手作りに見えることを意図されている場合にのみ、フレームを量子化します(Math.floor(f / 2) * 2)。

コードのルール:決定論的のみ(Math.random() や Date は使用不可;フレームまたはインデックスのシード付き関数を使用)、一意のフィルターとclipPath ID、フォントは @remotion/google-fonts/<Font> 経由でモジュールレベルで loadFont() を使用、package.json を超えるものはインストールしない。

4. レンダリング

目的コマンド
クイックルックnpm run render -- <film-or-style>(720×900、crf 23)
最終版npm run render -- <film-or-style> --final(2160×2700、crf 16)
src/films からのフィルムnpm run render -- <film-id> --final(同じフラグが使用可能:--frames、--still 75)
ライブ編集npm run studio でブラウザにRemotion Studioを開く

3Dルックのスタイル(57、58、59、62、80)は、1080幅の1.5倍(80は1.25倍)の解像度でソフトウェアレンダリングされたシーンをキャンバスに描画し、その後2160に引き伸ばすため、他のスタイルよりも少しソフトで低速です。よりシャープな最終版を得るには、src/catalog.ts 内の glView(...) の第2引数を上げてください(2 = ネイティブ4K、約2倍遅くなります)。

5. 引き渡す前の出力確認

npm run render -- <id> --frames を実行し、すべてのフレームを確認します(PNGを読んでください)。その後、修正して再レンダリングします。2〜3回のパスを許可します。

  • ストーリーが読み取れるか: フレーム50で何かが明らかに注がれており、75で容器が目に見えて満たされており、149で余韻が見える。
  • フレーム端でクリッピングされていない: 動作主体が完全に入場し、完全に退場している。
  • レイヤリング: 液体は容器の内側に留まり、流れは容器の中に入っている(手前のリムの前ではない)、湯気は表面から立ち上っている。
  • スタイルが1つのフレームから読み取れる: スタイルを知っている人が静止画からそのスタイルを名指しできること。2つのスタイルが互いの色違いに見えてはならない。
  • コントラスト: 液体と流れが背景に対して見え、濁っていない。
  • モーションキャラクター: メディアが手作りの場合はステップ送り、デジタルの場合はスムーズ;意図しないフリッカーがない。
  • テキスト: 意図した単語のみで、綴りが正しく、フレーム内に収まっている。
  • コンテンツルール(下記)のすべてを満たしている。 最後にプレビューMP4を最初から最後まで一度視聴し、その後最終版をレンダリングします。

6. コンテンツルール(常に)

  • 実際のブランド、ロゴ、製品、人物、チャンネル名、TVネットワークは禁止、画面上に商標名も禁止。「Brick toy」は一般的な玩具ブロックであり、ブランド名ではありません。
  • 実際の地図、場所、国境は禁止、旗、政治シンボル、スローガンも禁止。風景がある場合も、認識可能な地理のない架空のもの。
  • 特定の映画、番組、タイトルシーケンス、ゲーム、キャラクター、または既知のキャラクターのシルエットやスプライトのコピーは禁止。 スタイルやジャンルは許可されますが、特定の既存作品は許可されません。
  • でっち上げの事実は禁止: 偽の統計、価格、日付、引用、情報源は禁止。データスタイルはストーリー自身の値(フィルレベルなど)のみをプロットし、それ以外はプロットしません。
  • テキストはスタイルがタイポグラフィック、放送、またはゲームUIの場合のみ、そしてストーリー自体に関する短い英語。
  • オリジナルに保つ:ユーザーのストーリー、あなた自身の描画、技法としてのスタイル。

ファイル

パス内容
src/story.tsストーリー:サイズ、タイミング、ビート、オブジェクトパス、storyAt(f) と steamPath()
src/kit.tsx共有ヘルパー:Stage(SVGステージ)、Paper(紙目)、Rough(ぐらつき変位)、region
src/catalog.ts39のスタイル:番号、ID、名前、ファミリー、外観、画面上のテキスト、ファイル、コンポーネント
src/styles/<family>/描画コード、技法ごとにグループ化
src/films/ユーザー自身のフィルム
src/Root.tsx、src/index.tsすべてのスタイルとフィルムをRemotionコンポジションとして登録
scripts/render.mjsnpm run list / npm run render
scripts/new-project.mjsnpm run new -- <folder> でコードを新しいプロジェクトにコピー
media/videos/、media/thumbs/すべてのスタイルの720×900 MP4とアニメーションWebP

関連スキル