Communitygithub.com

JayGPTPro/keyword-openers

完成した製品動画を1つ入力すると、キーワードごとに1バージョンが出力されます。最初の数秒間の画像のみを検索キーワードに合ったシーンに置き換え、キーワードを画面に表示し、動画本来のサウンドトラックはそのまま保持します。そのため、各バージョンは同じ長さで、2つのクリップを繋ぎ合わせたようなサウンドになりません。Genrupt MCP に接続すると、オープニングシーンの作成、生成(各約5秒)、差し替え、全ファイルのチェック、レビューページの構築までを自動で行います。出品者が製品動画を持っており、スポンサーブランド動画やキーワードターゲット型動画広告用にキーワードごとのバージョンが必要な場合に使用します。トリガー:「keyword openers」「a video per keyword」「video for each keyword」「match my video to my keywords」「change the opening of my video」「PPC video variants」「sponsored brands video per keyword」「/keyword-openers」。製品動画そのものを作成するためのものではありません。出品者は完成済みの動画を持ち込みます。

keyword-openers とは?

このスキルは、出品者が持つ完成済みの製品動画をベースに、検索キーワードごとに異なるオープニングを持つ複数のバージョンの動画を生成するためのものです。具体的には、動画の冒頭2〜6秒の映像をキーワードに合わせたシーンに差し替え、キーワードを画面上にテキスト表示しますが、動画の長さやサウンドトラックは変更しません。これにより、例えば「ホットドッグ用 roasting sticks」と「野菜用 roasting sticks」で検索した買い物客に、それぞれが検索した内容に合わせた冒頭部分を持つ別々の動画を提供できます。これは、音声が再生されないスポンサーブランド動画広告に特に有効で、最初に目に入る映像とテキストを検索意図にマッチさせることができます。Genrupt MCP が利用可能な環境では、シーンのプロンプト作成、動画生成(Seedance 2.5 など)、差し替え、品質チェック、レビューページの構築までを自動化します。利用には、出品者からの完成動画、キーワードリスト、ASIN が必要です。このスキルは、製品動画を最初から作成するのではなく、既存の動画をキーワードターゲティング広告に最適化するためのものです。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JayGPTPro/keyword-openers/tree/HEAD

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

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

ドキュメント

Keyword openers

「ホットドッグ用 roasting sticks」を検索した買い物客と「野菜用 roasting sticks」を検索した買い物客は、今日、同じ動画を目にし、その冒頭はマシュマロです。このスキルは、それぞれの検索語に合わせた冒頭を提供します。

変更するもの: 最初の2〜6秒の映像と、キーワードを表示するタイトル。 決して変更しないもの: サウンドトラック、動画の長さ、最初のカット以降のすべて。

スポンサーブランド動画は音声なしで始まるため、最初の映像とそこに表示される言葉が買い物客に実際に届く情報です。そのため、冒頭部分をキーワードに合わせることが重要なのです。

出品者が用意するもの

  1. 完成済みの製品動画(mp4 または mov)。16:9 または 9:16。
  2. キーワード(3〜10個)。リストがない場合は、出品者に代わって選択肢を提案します。商品説明を読み、異なる「用途」「食品」「人物」「場所」を表すキーワードを提案します(これらは映像を変更します)。同じ単語を並べ替えただけのキーワードはスキップします。同じシーンになってしまうためです。
  3. ASIN。オープニングシーンに実際の製品を表示するために必要です。

これら3つを1つのメッセージで依頼してください。不足がある場合はもう一度尋ね、それでも不足している場合は先に進みます。

ステップ 1:動画を読み取る

python3 scripts/openers.py inspect "<video>" "<workdir>" --keywords "kw one; kw two; kw three"

<workdir> は動画の隣に作成する新しいフォルダで、名前は keyword-openers です。このコマンドは inspect.json、plan.json、および2つの連絡シートを出力します。Windows では、ここおよびステップ4において、コマンドは python3 ではなく python です。

opening-sheet.jpg を開いて確認します。 REPLACED とマークされたタイルが、置き換えられる部分です。そこにロゴ、価格、主張、またはテキストが埋め込まれている場合は、先に進む前に出品者に伝え、cuts_first_20s からより早いカットを提供します(plan.json の "window" を設定します)。

look-sheet.jpg も開きます。 これから作成するシーンは、この動画のために撮影されたかのように見える必要があります。同じ時間帯、同じ照明、同じ種類の人物、同じレンズの感触です。

inspect.json の notes が空でない場合は、そのメモをそのまま出品者に読み上げます。ノートで再エクスポート(フレームレートが30以上、可変フレームレート、96 kHz サウンド)が要求されている場合は、ffmpeg を使用して修正済みのコピーを自分で作成し、そのコピーに対して inspect を実行することを提案します。aspect が 16:9 でない場合は、クレジットが消費される前に、スポンサーブランド動画は16:9のみ対応していることを伝え、出品者が他のプレースメント用のバージョンを希望する場合のみ先に進みます。

ステップ 2:キーワードごとに1つのオープニングシーンを作成する

references/prompt-recipe.md に厳密に従います。キーワードごとに1つのプロンプト。それぞれ opener_seconds_to_generate 秒の単一ショットです。各シーンを簡潔な1行(「ホットドッグ用 roasting sticks:父親と息子がキャンプファイヤーの上に2本のホットドッグをかざしている」)で出品者に表示し、異論がなければ先に進みます。求められない限り、完全なプロンプトは貼り付けないでください。

ステップ 3:価格を確認し、生成する

製品参照画像:scrape_video_reference_images_from_asin を ASIN(および、amazon.com 以外の場合は出品者のマーケットプレイスの domain)を指定して呼び出し、画像URLを待ちます。最初の4つを使用します。

動く機能を表すキーワード(伸縮式、折りたたみ式、開く蓋など)には、動きの参照が必要です。そうしないとモデルがその機構を考え出してしまいます。このスキルで最初に作成された伸縮式オープニングは、魔法のように自動で成長してしまいました。まず、出品者自身の動画内でその機能を探し、その秒数を ffmpeg で切り出します。動画にその機能が表示されていない場合のみ、出品者にその機能が使用されている短いクリップ(3〜8秒、最低300ピクセルの高さ、スマホ撮影で可)を依頼します。 create_reference_asset_upload ケイパビリティ(search_capabilities で見つけ、返されたURLにファイルをPUTします)を使用してアップロードし、seedanceReferenceVideoUrls に assetUrl を渡します。プロンプトには、クリップから何を取るか(動き)と何を無視するか(テーブル、照明、その他のオブジェクト)を記載します。参照動画は価格に加算されるため、価格チェックに含めてください。

何かを実行する前に価格を確認します。video_generation プリセット(モデル seedance_2_5_reference、720p、オープナー長、videoCount = キーワード数)を指定して get_credit_balance_and_costs を呼び出します。720p は動画のデフォルトです。オープニングは小さなスロットで数秒間再生され、1080p との差はそこではわかりません。出品者の動画が1080p以上で、最も鮮明なオープニングを希望する場合にのみ、1080p の価格も提示します。価格は記憶から見積もらず、必ずAPIを呼び出して確認してください。次に、1行だけ伝え、承認を待ちます:

「5つのオープニング、各5秒、Seedance 2.5 720p:[価格APIが返した数値]クレジット。実行しますか?」

出品者がより安い価格を希望する場合は、seedance_2_mini_reference の価格を確認し、それを提案します。480p のドラフトはシーンを判断するには十分ですが、1080p の動画の広告としては粗すぎます。

次に、キーワードごとに1回の generate_video 呼び出しを、すべてまとめて送信します:

  • modelType: "fal_seedance"、seedanceModel、seedanceMode: "reference_to_video"
  • seedanceReferenceImageUrls:製品画像
  • seedanceDuration:opener_seconds_to_generate
  • seedanceAspectRatio:inspect.json の aspect
  • seedanceResolution:価格設定された解像度
  • asin:ASIN(プロジェクトはこれから作成または再利用されます)
  • promptEnhancement: "skip"(レシピがすでに最終プロンプトを作成しています)
  • sceneTitle:キーワード

wait_for_operation / get_video_generation_result で待機します。完了した各クリップを、plan.json の該当行が指定するパスにダウンロードします:

curl -L -s -o "<workdir>/openers/<slug>.mp4" "<video url>"

生成に失敗した場合、または拒否された場合:1行で報告し、残りは続行します。許可なく2回以上リトライしないでください。リトライは同じクレジットを再度消費します。再生成されたシーンは、独自の "label" とファイル名を持つ新しいテイクとして保存され、既に支払われたクリップを上書きすることは決してありません。

Genrupt がない場合? それでもスキルは機能します。出品者が任意のクリップ(撮影、ストック、別のツールで作成)を plan.json のパスに配置し、ステップ4に直接進みます。

ステップ 4:すべてのバージョンをビルドする

python3 scripts/openers.py build "<workdir>/plan.json"

クレジットはかかりません。1バージョンのビルドにかかる時間は、720p で約4秒、1080p で10秒、4K で25秒で、各バージョンの完了時に1行出力されます。コマンドは10分のタイムアウトで実行します。通常の2分の制限では長いリストを処理しきれません。各キーワードについて、オープニング画像を差し替え、タイトルを描画し、出力ファイルをチェックします。元の動画と同じ長さ、サウンドトラックはビット単位で同一、残りの画像は変更なし、オープニングが実際に新しいものになっていること、タイトルがフレーム内に収まっていることを確認します。

修正後に1つのキーワードだけを再ビルドし、残りはそのままにするには、--only "hot dog roasting sticks" を追加します(複数の場合:"kw one; kw two")。

次に、すべての out/check/<slug>-seam.jpg を確認します。 スクリプトではチェックできない以下の3点を確認します:

  1. 新しいシーン内の製品が出品者の製品であること(形状、色、数量)。
  2. タイトルが判読可能であり、顔やキーワードが表すものの上に配置されていないこと。タイル「title held」を隣の「under the title」と比較します。後者は同じ瞬間で文字がないものです。auto は明るさとディテールからのみ推測するため、顔を認識できません。また、焚き火の明かりの下では、落ち着いた帯(calm band)に顔が来ることがよくあります。
  3. 「最後の新しいフレーム」から「最初の元のフレーム」へのジャンプが、通常のカットとして自然に見えること。

タイトルの位置が不適切な場合は、無料で修正できるため、出品者が見る前に修正します。そのバリアントに place(top、bottom、top-left、top-right、bottom-left、bottom-right)を指定し、フルサイズで空いている場所がない場合は title_scale(0.5〜1)を指定します。再度ビルドし、再度確認します。製品が正しくないシーンは、修正したプロンプトで再生成します(クレジットがかかるため、まず確認します)。

ステップ 5:引き渡し

出品者のために out/index.html を開きます。以下の順序で伝えます:

  1. 準備ができたバージョンの数と、アップロードするファイルが out/upload/ にあること。キーワードごとに1ファイル、ファイル名はキーワードに基づいています。
  2. シームシートで確認した、出品者が注目すべき点があれば、その内容。
  3. それらの使用方法:references/amazon-upload.md(キーワードごとに1つの広告グループ、それぞれに独自のバージョン)。このページにも同じ手順が記載されています。

複数のテイクがあるキーワードの場合、1つが選択されるまで out/upload/ にはファイルがありません。出品者にどのテイクにするか尋ね、そのバリアントに "pick": true を設定し、再度ビルドします。

plan.json

{
  "video": "/path/to/video.mp4",
  "window": 3.875,
  "style": "pop",
  "font": "bold",
  "accent": "CD763C",
  "title": true,
  "opener_audio": "off",
  "variants": [
    {"keyword": "hot dog roasting sticks", "opener": "openers/hot-dog-roasting-sticks.mp4"}
  ]
}
  • window:置き換える映像の秒数。inspect は4秒に最も近い動画のカットを選択します。変更する場合は、cuts_first_20s の他の値のみに変更します。
  • style:キーワードを画面に表示する方法。
    • pop(デフォルト):大きな大文字。このキーワードを他と区別する単語が、ワイプインする蛍光ペンのようなバーに配置され、残りの単語は単語ごとにポップインします。検索結果の小さなサイレントタイル向けに設計されています。
    • sticker:キーワードが傾いた白い検索ステッカーにスタンプインされ、異なる単語がマークされます。
    • kinetic、line、search:静かなブランド向けの、落ち着いた lower-third タイトル。
  • punch:pop と sticker の場合、タイトルが表示されるビートに合わせて画像が1.08倍に拡大されたフレームにカットされます。false でオフに、punch_zoom で別のサイズを設定します。
  • place(pop と sticker のみ):auto(デフォルト)は、ショット内のより静かな帯を上部または下部から推測し、その帯のどちらか一方が明らかに静かな場合はその側も推測します。top、bottom、top-left、top-right、bottom-left、bottom-right で強制指定します。3つの静かなスタイルは常に下部に配置されます。
  • title_scale(pop と sticker のみ):0.5〜1。フルサイズで空きスペースがないショット向けの、より小さいタイトル。ファイルの先頭ですべてのバージョンに適用するか、特定のバリアントに適用します。
  • font:bold、round、serif、clean。動画内で既に使用されているタイプに合わせます。
  • accent:動画自体の色から取得します。ブランドカラーがわかっている場合は上書きします。
  • title:false で画面上に文字を表示しません。
  • opener_audio:"off" はサウンドトラックをビット単位で保持します。-18 などの数値は、新しいシーンの独自のサウンドをそのデシベル数で下にミックスします。
  • take:オープナーは通常、ウィンドウより少し長めです。end(デフォルト)は、シーンが落ち着いた最後の数秒を保持します。start は、動作がすぐに始まるシーン(伸びる棒、開く蓋など)の最初の数秒を保持します。
  • 1つのキーワードに複数のテイク:同じ keyword、異なる opener、および "label"("A"、"B")を持つバリアントを繰り返します。それぞれが独自のファイルとカードにビルドされ、出品者が見て選択できます。重要なキーワードについては2回目のテイクを提案し、その料金を伝えます。選択されたテイクの "pick": true は、それを out/upload/<keyword>.mp4 にコピーします。
  • バリアントには、画面に表示するテキストがキーワードと異なる場合の "title_text"、"take"、"emphasis"(マークする単語。デフォルトではキーワード間で共有されない単語。例えば「hot dog roasting sticks」の「hot dog」)、"place"、"title_scale"、"pick"、および独自の "window" を含めることができます。

問題が発生した場合

build は最初に plan.json をチェックし、何を修正すべきかを言葉で示します。内蔵フォントで描画できない文字(ヘブライ語、中国語、アラビア語)を含むキーワードは、その旨を示すメッセージとともに失敗します。そのバリアントにラテン文字の "title_text" を指定するか、"title": false を設定します。絵文字はタイトルから削除されます。5語を超えるキーワードは小さく描画されます。短い "title_text" を指定します。2〜6秒の間にカットがない動画には、カットの代わりに短いディゾルブが適用されます。

ルール

  • 動画を長くしたり、サウンドトラックに触れたりしないでください。リクエストにこれらのいずれかが必要な場合は、それは別の作業です。その旨を伝えてください。
  • シーン内で製品の機能をでっち上げないでください。シーンは、製品をそのままの状態でキーワードの使用法を示すものです。
  • 新しいシーンの人物は、動画に人物が登場する場合、その人物に合わせてください。
  • 出品者の承認がない限り、キーワードごとに有料生成は1回までです。

関連スキル