Communitygithub.com

Rudywizz-motion

コードから映画のようなモーショングラフィックス動画を生成します。キネティックタイポグラフィ、3Dタイトル、マップルートアニメーション(世界、地球、トルコの県)、ソーシャルテンプレート(ローワーサード、キャプション、チャットストーリー、カウントダウン、棒グラフレース、フォローCTA)、セピア調の歴史ドキュメント、ユーザーのクリップを使ったフルリール(カメラ移動、シェーダートランジション、カラーグレーディング、フィルムエフェクト)など。

Rudywizz-motion とは?

Rudywizz-motion は、コードベースで映画品質のモーショングラフィックス動画を生成するための決定論的レンダリングエンジンです。ヘッドレス Chromium + WebGL2 で各フレームを計算し、ffmpeg にパイプすることで、同じ入力から常に同じ出力が得られる再現性を保証します。このスキルは、キネティックタイポグラフィ、3Dタイトル、地球/平面/トルコ県レベルのマップルートアニメーション、ローワーサードやキャプションなどのソーシャルテンプレート、セピア調のエングレービング効果、ユーザーが提供するクリップへのカメラ移動や多彩なトランジションの適用など、多様なスタイルをサポートします。開発者は、CLI コマンドまたは JSON コンポジションファイルを使用して、各シーンのスタイル、テキスト、カメラ、グレーディング、トランジションを細かく制御でき、まず低解像度のスチルプレビューで確認してから最終レンダリングを行うワークフローにより、効率的に高品質な動画を生成できます。

対応✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Rudywizz/rudywizz-motion/tree/HEAD/skills/rudywizz-motion

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

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

ドキュメント

Rudywizz-motion は何をしますか?

決定論的レンダラー: すべてのフレームは(ヘッドレス Chromium + WebGL2 で)計算され、ffmpeg にパイプされます。そのため、同じ入力から常に同じ動画が得られます。このフォルダは自己完結型です:

engine/      cli.mjs (エントリ), host.js, timeline.js, camera.js, gl/ (シェーダー), data/ (地図), fonts/
styles/      スタイルごとに1フォルダ (style.js)
templates/   既製のコンポジション (JSON)
assets/demo/ 元のデモイラスト (CC0)

1. 初回セットアップ(最初のレンダリング前に確認)

RM="${CLAUDE_SKILL_DIR}"                       # この SKILL.md を含むフォルダ
[ -f "$RM/engine/cli.mjs" ] || RM=$(ls -dt "${CLAUDE_PLUGIN_ROOT}/skills/rudywizz-motion" ~/.claude/plugins/cache/*/rudywizz-motion/*/skills/rudywizz-motion ~/.claude/skills/rudywizz-motion .claude/skills/rudywizz-motion 2>/dev/null | head -1)
TMP=$(node -p "require('os').tmpdir()")       # bash と Node が合意する一時ディレクトリ (Windows でも同様)
cd "$RM" && npm install --no-audit --no-fund   # playwright をインストール (唯一の依存関係)
node engine/cli.mjs doctor                    # Node ✓ ffmpeg ✓ browser ✓ WebGL2 ✓ — 各 ✗ は修正方法を表示

レンダリングはユーザーのフォルダから node "$RM/engine/cli.mjs" … で実行し、相対パスがそこで解決されるようにします。 ブラウザチェックが失敗した場合: npx playwright install chromium(または RM_CHROME=/path/to/chrome を設定)。 ffmpeg がない場合、インストール方法をユーザーに伝えます(macOS brew install ffmpeg、Windows winget install ffmpeg、Linux apt install ffmpeg)。

2. ジョブの形状を選択

ユーザーの希望実行すること
アニメーションテキスト/タイトル1つrender <style> --text "…"
マップ / ルートアニメーションrender map-route --set 'route=["İstanbul","Konya"]'
画像をエングレービングとして描画render image --image photo.jpg --look engrave --grade sepia --film 0.6
クリップにカメラ移動を適用render clip --clip in.mp4 --camera handheld --set speed='"ramp-mid"'
エディター用の透明オーバーレイ(ローワーサード、キャプション、CTA)render lower-third --text "名前 / 役割" --alpha --out name.mov
マルチシーンリール / ドキュメント / ティーザー / イントロinit reel.json またはテンプレートから開始、その後編集(セクション4)

テンプレート: node engine/cli.mjs templates で全テンプレートを1行説明付きで一覧表示します。 ユーザーのアセットの横にコピーし(cp "$RM/templates/<name>.json" .)、テキスト/パスを編集してレンダリングします。

3. ワークフロー(常に)

  1. スタイル、テキスト、フォーマット(デフォルト 9:16 1080×1920)、カメラ、グレードを決定します。
  2. まずスチルを確認 — 低コストでレイアウト問題を発見できます: node "$RM/engine/cli.mjs" still <style|comp.json> --at 2.5 --size 540 --out "$TMP/check.png" → PNG を開いて確認します。各シーンの開始、中間、終了の2~3箇所をチェックします。warning/error 行を読んでください。タイポを特定し、正しいキーを提案します。
  3. レンダリング: node engine/cli.mjs render … --out out.mp4
  4. 確認: ffprobe -v error -show_entries format=duration -of csv=p=0 out.mp4 で1~2フレームを取得します。
  5. ファイルを1行のコンテキストと共に納品します。

経験則

  • 短いテキストが効果的: 行あたり1~6単語、最大約4行。改行には " / " または \n を使用します。
  • トルコ語の大文字小文字変換は、テキストに ğ/ş/ı/İ が含まれる場合は自動的に行われます。それ以外の場合は、トルコ語テキストに対して --lang tr を渡します(i → İ)。
  • レンダリングは CPU 負荷が高く、1080p フレームあたり約0.2~0.5秒かかります。プレビューは --size 540 で行い、最終出力のみ 1080 で行います。
  • ユーザーの許可なく Web から画像/クリップをダウンロードしないでください。ユーザーのファイルを使用します。
  • 透明オーバーレイ: --alpha --out file.mov(ProRes 4444)または .webm。
  • 音楽: --audio song.mp3 と --bpm N で、beat-cut、lyric-video、beat-punch カメラがビートに同期します。

4. コンポジション JSON

{
  "format": "9:16",
  "lang": "tr",
  "bpm": 96,
  "audio": "song.mp3",
  "look": { "grade": "teal-orange", "bloom": 0.3, "grain": 0.05, "leak": 0.2, "aberration": 0.3,
            "vignette": 0.3, "film": 0, "weave": 0, "distortion": 0 },
  "motionBlur": 1,
  "scenes": [
    { "style": "map-route", "route": ["İstanbul", "Kapadokya"], "duration": 6, "camera": "drift",
      "transition": { "type": "whip", "duration": 0.45, "dir": "left" } },
    { "clip": "beach.mp4", "in": 3.2, "duration": 2.5, "speed": "ramp-mid", "camera": "handheld",
      "overlay": { "style": "captions", "text": "Kaş, Antalya" },
      "transition": { "type": "burn", "duration": 0.8 } },
    { "image": "portrait.jpg", "look": { "type": "engrave", "reveal": 3 }, "duration": 4, "camera": "push-in" },
    { "style": "neon-sign", "text": "See you / soon", "duration": 3 }
  ],
  "overlays": [ { "style": "captions", "text": "…", "from": 0, "to": 5 } ]
}
  • シーンタイプ: style(任意のスタイルID + そのオプション)、image(image パス、または 2.5D パララックス用の layers: [{src, depth}])、clip(clip、in、speed: 数値 | ramp-in | ramp-out | ramp-mid)、color。
  • パスは JSON ファイルからの相対パスです。
  • transition は、それが適用されるシーン(遷移元のシーン)に配置します。次のシーンは、現在のシーンが終了する duration 秒前に開始します。
  • overlay = そのシーンの上に描画されるスタイル(そのカメラとともに移動)。overlays = すべての上に固定され、グレーディングされません。
  • カメラ: プリセット名、または { "preset": "drift", "amount": 0.6, "shake": 0.5, "keys": [{ "at": 0, "zoom": 1 }, { "at": 1, "zoom": 1.3, "ease": "outExpo" }] }。

5. カタログ

カメラ — static, drift, push-in, pull-out, punch-in, crash-zoom, whip-from-left, whip-from-right, whip-from-top, spin-in, rise, orbit, tilt-reveal, tilt-left, tilt-right, vertigo, handheld, float, beat-punch。カメラの動きは自動的にモーションブラーが適用されます。

トランジション — cut, fade, flash, dip, whip, zoom, spin, glitch, ink, burn, liquid, iris, wipe, blinds, pixelate, leak, cube, ripple, doors, stretch, luma。

ルックス(画像/クリップ) — engrave(インクが描画 → ハッチング → セピアウォッシュ)、sketch、oldphoto、duotone、halftone、posterize、noir。オプション: { "type": "engrave", "reveal": 3, "delay": 0.2, "paper": "#ece0c4", "ink": "#33210f" }。

グレード — none, teal-orange, kodak, fuji, sepia, noir, bleach, cyber, sunset, matte(+ gradeAmount 0–1)。

スタイル — 最新のリストは node engine/cli.mjs list を実行してください。各スタイルのオプションは styles/<id>/style.js の先頭に記載されています(defaults + options)。

スタイル機能主要なオプション
map-route地球 / 平面地図 / トルコ県上のルートフライト、ピンとラベルroute、mode globe·flat·turkey·auto、theme dark·atlas·light、icon、highlight
history-title金彩の年カウンター + 章タイトルtext "1453 / Title / Subtitle"、from
parchment-letter焦げた羊皮紙、手書き + 羽ペン + ワックスシールplace、signature、seal
murmurationムクドリの群れが文字に折りたたまれるbirds、空の色
led-marqueeショップ/ミニバスのLED「kayan yazı」ボード1行に1ボード、colors
receiptサーマルプリンターがメッセージを印刷し、切り離すheader、items、total、date
ink-bleedインクの滴が文字に広がるink、paper
halftone-press2色リソグラフ印刷inkA、inkB、dot
signal-tune古いテレビ: スノーノイズ → テストカード → 放送中channel、station
inflateY2Kクロームバルーン文字chrome、face
orbit-ring惑星の周りをテキストのリングが回る1行に1リング
beat-cutビートごとに1単語をスタンプ、スイス風ポスターbpm、offset
lyric-video歌詞がビートに合わせて単語ごとにハイライトbpm、times、credit
captionsリールキャプション、アクティブな単語をピルで表示(--alpha 使用)times、maxWords、pill、position
split-flap出発案内板が反転(トルコ太鼓)title、cols
neon-signレンガ壁のネオン管、1本故障colors、broken
odometer数字が回転してカウントアップtext "10000 takipçi"、prefix、suffix
pixel-quest8ビットタイトル画面pixel、subtitle
vhs-memoryホームビデオテープ風date、clock
キネティックタイポ
word-stack均等割り付けのポスタースタック、各行が全幅で叩き込まれるaccent、beat、kicker
typewriter点滅カーソルで1キーずつタイプtheme paper·terminal、speed、prompt
scrambleランダムなグリフがテキストにデコードfont mono·display、resolve、hud
ticker-rows巨大な行が交互方向にスクロールrows、tilt、speed、accent
highlight-quote引用がフェードイン、マーカーがキーワードをなぞるauthor、highlight (words)、marker
glitch-titleRGBスプリット + データモッシュがクリーンなタイトルに収束subtitle、colors、every
3D
extrude-3d肉厚の押し出し文字がスイングして回転face、side、bg、depth
cube-spinキューブが面ごとに回転、各面に1行colors、ink、floor
text-tunnelテキストのリングをくぐり抜けてタイトルへline 1 = title、rings、ring、colors
retro-gridシンセウェイブグリッド、ストライプの太陽、クロームタイトルline 1 chrome, rest script、sky、sun、speed
particle-sphereパーティクル球が単語にモーフィングcount、morphAt、colors
card-carouselカードの3Dリングが最後の行にランディングimages (local files)、turns、colors
ソーシャル&ブロードキャスト
countdown3·2·1 がリングスイープと共に、その後テキストfrom、tick、accent
lower-thirdニュース/YouTube 名前ストラップ(--alpha 使用)line 1 name, line 2 role、theme solid·glass·minimal、position
chat-storyメッセージングチャット、タイピングドット付き1行に1メッセージ、> = 自分、name、theme
bar-chart棒グラフレース、値がカウントアップitems: [["A",10],…]、unit、note、source
cta-followカーソルがフォローをクリック、チェック+紙吹雪line 1 handle, line 2 button, line 3 subtitle、done

スタイルオプションは --set key=value(JSON値: --set 'route=["A","B"]')またはシーンオブジェクトのキーとして指定します。

6. トラブルシューティング

  • unknown place "X" (map-route): "lat,lon" または { "name": "X", "lat": 0, "lon": 0 } を使用します。
  • カメラ移動でテキストがクリップされる: カメラの amount を下げるか、drift/float を使用します。
  • レンダリングが遅い: 下書きは --size 540 を使用します。最高品質が必要でない限り、--motion-blur を 4 以上にしないでください。
  • 出力が白/空: still を実行してエラーを読み、doctor で WebGL2 をチェックします。
  • Windows PowerShell / cmd で --set 'route=["A","B"]' が文字化けする: オプションをファイルに書き込み --params opts.json を使用するか、コンポジション JSON を使用します。
  • トルコ語の名前(ı、ş…)を含む英語テキストは自動的にトルコ語の大文字小文字変換が行われます。これを防ぐには --lang en を渡します。

関連スキル