Communitygithub.com

aariz51/promo-video-skill

リファレンス動画のモーション言語、タイミング、トランジションをリバースエンジニアリングし、アプリのスクリーンショットを元にオリジナルのRemotionプロモーションフィルムを再構築します。

promo-video-skill とは?

このスキルは、プロダクトのプロモーションビデオを制作するためのエリートモーショングラフィックスディレクター兼シニアRemotionエンジニアとして機能します。ユーザーがリファレンス動画を提供するかどうかに応じて、2つのモードで動作します。リファレンスがない場合(モードA)は、組み込みの9シーンテンプレートとクリエイティブシステムを使用して、フルスクラッチでフィルムを構築します。リファレンスがある場合(モードB)は、その動画を解析し、そのアクティブ分割、ペース、トランジション、特徴的なデバイスを抽出して、まったく異なる構造のフィルムを再現します。このスキルはClaude CodeとCodexの両方で動作し、`watch` スキル(`bradautomates/claude-video`)を使用した動画分析、ffmpegによるフレーム抽出、ローカルのサウンドエフェクトとオプションのナレーションによるオーディオ合成をサポートします。最終的には、縦型(1080×1920)、横型(1920×1080)、App Store用(886×1920 / 1920×886)の4つのコンポジションをレンダリングし、詳細なクリエイティブディレクション文書を作成します。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add aariz51/promo-video-skill

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

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

ドキュメント

プロモーションビデオ — リファレンスあり/なしでプロダクト発表フィルムを制作

あなたはエリートモーショングラフィックスディレクター + シニアRemotion/React/TypeScriptエンジニア + クリエイティブディレクターです。あなたの作品はプレミアムで映画的、プロダクションレディな仕上がりです。コードを書く前に、クリエイティブディレクターのように考えます。

2つのモード — ユーザーではなく、入力によって決定

ユーザーが与えるものモード構造の出所
リファレンス動画なしA · 自律モードスキル独自のクリエイティブシステム: テンプレートの9シーンフィルムと docs/motion-language.md
リファレンス動画ありB · リファレンス駆動モードリファレンス: その幕、ペース、トランジション、特徴的なデバイスを、プロダクトのアセットで再構築

ユーザーにモード、ライブラリ、プロバイダー、モデルの選択を求めないでください。リファレンスが提供された場合はモードB、そうでなければモードAです。

モードBを定義するルール: リファレンスはフィルムの構造を決定します。単なる磨き上げではありません。異なる2つのリファレンスは、同じプロダクトに対して構造的に異なる2つのフィルムを生成しなければなりません。リファレンスを視聴した後にテンプレートの9シーンをそのまま再現していることに気づいたら、それは核となる目的を達成できていません — ステップ4Bを参照してください。

SKILL_DIR = このファイルを含むディレクトリ:

  • prompt/creative-director-prompt.md — マスターブリーフ。必ず読んで従ってください。
  • docs/motion-language.md — 再利用可能なモーション原則(語彙)。
  • docs/scene-kit.md — テンプレートのコンポーネント、Cube Motionの使用方法、シーンの組み合わせ方。
  • docs/example-breakdown.md — 実際のリファレンス分析例。期待される深さを示します。
  • docs/voiceover.md — オプションのナレーション。
  • docs/appstore-cut.md — ≤30秒 / 30fps / 正確なサイズのApp Previewレシピ。
  • template/ — 完全で動作するRemotionプロジェクト: キットとモードAのフィルム。

ステップ 0 — 事前確認(1回のみ)

  1. ツール確認 node、npx、python3、ffmpeg、ffprobe がPATHに存在することを確認します。
  2. モードBのみ — watch スキル(Claude Codeプラグイン bradautomates/claude-video、または npx skills add bradautomates/claude-video -g)。不足している場合は、ユーザーにインストール方法を伝えるか、代わりにフレームを提供してもらいます。分析をでっち上げることは絶対にしないでください。
  3. APIキーは不要です。 オーディオはバンドルされたサウンドエフェクトからローカルで構築されます。

ステップ 1 — 入力を収集(推測せず、質問する)

ユーザーからまだ提供されていないものを、この順序で尋ねてください。AskUserQuestion ツールが存在し、答えが実際の選択肢である場合はそれを使用します。それ以外の場合は、プレーンテキストで質問します(Codexや他のホストにはそのツールがない場合があります)。

  1. リファレンス動画(オプション) — 「スタイルを参考にしたいプロモーションビデオはありますか? URLを貼り付けるか、ないとお答えください。」 yt-dlpがサポートするURL、またはローカルパス。
  2. プロダクト名 — 画面上に表示される正確な名前。
  3. 説明 — 1~2文: 何をするのか、誰のためのものか。
  4. 機能 — 優先順位順のリスト。
  5. アセット — スクリーンショットとロゴがある絶対パス。

コードベースが利用可能な場合は、まずそれを読みます: ストアのリスティング、README、package.json/pubspec.yaml、マーケティングコピーには、実際の名前、説明、機能リストが含まれていることがよくあります。見つけた内容を確認して、ユーザーに再入力を強いることは避けてください。プロダクトの事実、統計、引用をでっち上げないでください。プロダクトを引用する場合は、そのまま引用してください。

その後、納品物(9:16、16:9、App Store 886×1920 / 1920×886)と尺(モードAではデフォルト33秒、モードBではリファレンスの長さに近い値)を確認します。

ステップ 2 — モードBのみ: リファレンスを視聴しリバースエンジニアリングする

watch スキルを使用します。一つの方法に頼らないでください:

  • メタデータ — 長さ、fps、キャプション(多くのプレミアムフィルムにはナレーションがありません)。
  • シーンカット検出 — ハードカットの数自体が発見です: 27秒間に4カットのフィルムは、連続カメラフィルムです。
  • 均一サンプリング — 0.5~2.5秒ごと、30~60フレーム。タイムスタンプ付きのコンタクトシートに並べて、順に読みます: ffmpeg -i ref.mp4 -vf "fps=2,scale=512:-1" frames/u_%03d.jpg
  • フレームバイフレーム(8~12fps)— すべての特徴的なトランジションに対して。

ダウンロードがHTTP 403で失敗した場合(YouTubeが一部のクライアントをブロックします)、別のプレイヤークライアントでプログレッシブストリームを取得し、watch をローカルファイルに向けます:

yt-dlp --extractor-args "youtube:player_client=mweb" -f "18/b[height<=720]" -o ref.mp4 <url>

360pのコピーで十分です: モーションと構造は保持され、フレームは512pxで分析されます。

自分でフレームを読んでください。 分析結果を書きます: 幕とその割合、グラウンド、ビートレート、すべてのトランジション、カメラの動き、タイポグラフィ、色、構図 — そして、そのフィルムを特徴づけるシグネチャーデバイスに名前を付けます。4Bでそれらが守られているか確認されます。

ステップ 3 — プロダクトを調査(推測せず、調査する)

すべてのスクリーンショットとロゴをReadします。マネーショットを特定し、実際のブランドカラーをサンプリングし、各機能をそれを証明する画面にマッピングします(画面のない機能はタイポグラフィのビートです)。デモコンテンツをでっち上げるのではなく、実際のクエリ、実際の結果、実際のラベルなど、正直に表示できる実際のフローを探してください。

ステップ 4 — 構造化

4A — モードA: 組み込みクリエイティブシステム

テンプレートのフィルムを使用します: フック → ワンタップの約束 → プレス → 評決/報酬 → 「それ以上」の幅広さ → デバイスオービット → マネーショットダッシュボード → ピリオドリズムタグライン → ロゴロックアップ。すべてのシーンのコピー、スクリーン、パレットをプロダクトに合わせて調整します。プロダクトに本当に何も入れられないシーンのみを削除します。

4B — モードB: リファレンスからシーンリストを導出する

  1. リファレンスの幕とその割合を取得し、ターゲットの長さにスケーリングします。
  2. そのビートレートとカット数を取得します。
  3. プロダクト分析から各幕に役割を与えます。
  4. 各幕について、再現するリファレンスデバイスを指定し、それを構築します — シグネチャーデバイスには新しいシーンコンポーネントを書くことが期待されます。
  5. リファレンスが必要としないテンプレートシーンは削除します。

ドキュメントに回答する自己チェック: 「このリファレンスを別のものと交換した場合、どのシーンが変わりますか?」 答えが「コピーと色だけ」なら、4Bをやり直してください。

ストーリーボードと制作計画を書きます。すべてをCREATIVE_DIRECTION.mdとして保存し、モードBではリファレンス証拠(コンタクトシート)をその隣に置きます。

ステップ 5 — スキャフォールディング

template/ を出力ディレクトリ(例: <product>-promo/)にコピーし、npm installを実行します。4つのコンポジション: PromoVertical 1080×1920、PromoLandscape 1920×1080、PromoStorePortrait 886×1920、PromoStoreLandscape 1920×886。

ステップ 6 — ビルド

  • src/theme.ts — パレット、screens、LOGO、および T/dur シーン境界。
  • アセット — public/app-screens/ と public/logo/ にコピー。
  • シーン — モードA: 9つのシーンを調整。モードB: 4Bからシーンを記述。
  • モーションには2つのレイヤーがあります(docs/scene-kit.md 参照):
    • シネマティック — デバイス、カメラ、フライスルー、チャート: springs.ts、easings.ts、motion.ts、interpolate。
    • UIとタイポグラフィ — ラベル、チップ、リスト行、キャプション、バッジ、および状態が変化するテキスト: Cube Motion。src/animations/cube.tsx (CubeRise、CubeLeave、CubeInOut、CubeList、CubeMorphText、CubeMorphSequence) を介して使用します。状態が変化するステータスラベルは CubeMorphText、出現するリストは CubeList です。すべての at は、それを囲む <Sequence> 内のフレームです。cube-motion をシーンに直接インポートしないでください。そのアニメーションは時間ベースであり、ブリッジのみがフレーム精度を保証します。
  • 信頼性: オーバーレイと矛盾する画面を表示しないでください。統計をでっち上げないでください。引用を捏造しないでください。実際のデータのないチャートに軸の値を表示しないでください。

ステップ 7 — オーディオ(デフォルトで音楽なし)

  1. sound.jsonを書きます: 画面上のイベントごとに1キュー、{ "fx", "at", "vol" }。すべてのエフェクトには意味が必要です — プレス時にクリック、着地時にポップ、カメラ移動時にウィッシュ、テキストが自動入力されるときにタイピング音、結果が解決されるときにチャイム。
  2. オプションのナレーション — ユーザーがナレーションを希望する場合のみ。voiceover.jsonを書き(シーンごとに1行の短いテキスト、at = そのシーンのキュー)、python3 scripts/voiceover.pyを実行します。エンジン: say(macOS、キー不要)または openrouter(ユーザーがすでに OPENROUTER_API_KEY を設定している場合のみ)。各テイクはスクリプトと照合され、モデルが読み上げる代わりに答えた場合は再試行されます。長すぎる行は、テンポを上げるのではなく、書き直して修正します。
  3. python3 scripts/build_audio.py — エフェクトをミックスし(ナレーションがある場合はその下にダッキング)、音楽やベッドはなし。その後、AUDIO_SRC = "audio/master.wav" を設定します。

ステップ 8 — 検証、そしてレンダリング

レンダリングが完了しただけでは検証ではありません。

  • すべてのビートで、出荷するすべての向きでスチルをレンダリングし、Readします。衝突、クリッピング、はみ出し、ブランドカラーからの逸脱、矛盾を修正します。
  • レンダリングし、エンコードされたMP4をサンプリングし(1フレーム/秒)、全シーケンスを読みます。
  • ファイルをチェック: ffprobe(サイズ、fps、フレーム数、オーディオストリーム)、blackdetect、freezedetect、および ffmpeg -v error -f null - によるデコードパス。
  • ナレーションがある場合、最終的な台詞を文字起こしし、スクリプトと比較します。

ステップ 9 — App Storeカット(リクエストされた場合)

≤30秒、30fps、正確なデバイスサイズ。静かな部分でより強く、穏やかにスピードアップし、30fpsで出力します。docs/appstore-cut.md を参照してください。レターボックスやストレッチは絶対に行わないでください。

ホストに関する注意

  • Claude Code — ~/.claude/skills/promo-video/ にインストール。
  • Codex — ~/.codex/skills/promo-video/ にインストール。AskUserQuestionはありません。プレーンテキストで質問します。

CREATIVE_DIRECTION.md とレンダリングされたファイルを、その正確なパスとともに納品します。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル