ugc-ads について
ugc-adsは、商品URLから商品紹介のUGC広告を作成するPikaのスキルです。商品情報を取得して多言語の動画プロンプトを組み立て、段階的な生成フローで動画、字幕、判読可能なテキストを加えます。
主な機能
- 01商品ページ情報の取得とカテゴリ判定
- 02Seedanceが既定、Klingも選択可能
- 03アバターと商品スクリーンショットの参照
- 04多言語のセリフとリップシンク用プロンプト
- 05字幕とテキストオーバーレイの追加
活用シーン
- 01商品ページからUGC風広告を作成
- 02異なるアスペクト比の広告動画を生成
- 03字幕や判読可能なブランド名・仕様を追加
MCP 対応
画像分析、動画生成、ウェブサイトのキャプチャ、編集、字幕、タスク状態の確認にPika MCPツールを使用します。有料生成の前に費用を提示し、ユーザーの承認を得ます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pika-labs/ pika-plugins --skill ugc-adsインストール後、Claude Code で/ugc-adsを入力して読み込まれたか確認します。
詳細
/pika:ugc-ads
パラメーター
| パラメーター | デフォルト | 備考 |
|---|---|---|
url | 必須 | 商品の URL。カテゴリの検出とビートの置き換えに使用します |
avatar_url | 組み込みのフォールバック | ペルソナのポートレート URL。@Image1 の参照画像として渡されます。省略した場合、このスキルは事前生成された Pixar 風の女性クリエイターのポートレートを使用します |
provider | seedance | seedance:UGC の自撮り/トーキングヘッド POV に強く、ネイティブのリップシンクと単一プロンプト内の複数セグメントに対応し、3:4 をサポートします。kling:明示的な shots[] を使用し、9:16/16:9 のみ |
aspect_ratio | 9:16 | 3:4 は seedance のみ対応します(kling は 3:4 を受け付けません) |
variants | 未設定 | 共有生成エクスポート用の任意のカンマ区切りリストです。対応形式:9:16、16:9、1:1。コストの高い UGC レンダリングを共有し、最終段階でリフレームします |
category | 自動 | HAUL / APP / FOOD / BEAUTY / FITNESS / TECH。URL から自動選択されます |
captions | true | 最終動画に焼き込まれる、TikTok 風の単語単位に分割されたキャプション |
コストの透明性に関するゲート
有料の MCP 呼び出しを行う前に、一度 identity_balance({verbose: true}) を呼び出します。現在の残高、直近の消費ペース、残りの利用可能期間を提示してから、次の文言をそのまま表示して処理をゲートします。
推定コスト:フォールバック/再試行の予算を含む、一般的な Seedance UGC 広告で約 4,000 クレジット(約 40 ドル)です。5 ドルを超えるため、続行するには
proceed、停止するにはcancelと返信してください。
ユーザーが proceed と返信するまで、有料の MCP ツールを呼び出さないでください。ユーザーが cancel と返信した場合は、生成せずに停止します。このゲートは、商品 URL が判明した後、アバターの分析、スクリーンショットの撮影、動画の生成、キャプションの追加、有料の再試行を行う前に実行します。
実行時の想定
通常のエンドツーエンドの実行時間:6~12 分。内訳:
- ステップ 1(WebFetch)+ステップ 3(capture_website のスクリーンショット):約 10~30 秒
- ステップ 7(
generate_reference_video):seedance は約 3~5 分、kling は約 5~7 分 - ステップ 7b/c(カートゥーン化+再試行):seedance のモデレーションでアバターが拒否された場合、さらに約 1~2 分
- ステップ 8(決定論的なブランド/仕様のオーバーレイ):
edit_text_overlayを 1~2 回呼び出し、合計約 30 秒~5 分 - ステップ 9(キャプション):
add_captionsを 1 回呼び出し、約 30 秒~5 分(文字起こしと焼き込みを一度に実行)
進捗がないまま 15 分を超えた場合は、何らかの問題が発生しています。ツールが報告した生成ステータスとエラーメッセージを確認してください。
生成前の実時間制限ガード
商品 URL が利用可能になり、コストゲートを通過した時点でスキルのタイマーを開始します。ユーザーの proceed 返信を待つ時間は準備時間に含まれず、このガードの対象にしてはいけません。最初の有料生成呼び出しは、最も時間のかかる有料工程である generate_reference_video です。スキル開始から 5 分以内に呼び出す必要があります。スキル開始から 5 分以内に generate_reference_video を呼び出せなかった場合は、有料生成を呼び出す前に停止し、これまでに得られた情報(取得した商品情報、選択したカテゴリ、アバターのソース、スクリーンショットのステータス、台詞の草案、具体的な阻害要因)とともに failed_pre_generation_timeout を報告してください。スクリプトの表現、プロンプトの根拠付け、ショットの順序をさらに調整し続けてはいけません。
準備の各段階の後、および有料生成呼び出しの直前に、次の進捗チェックポイントを 1 行で出力します。
Stage 1/3 done — product fetched and categorized.Stage 2/3 done — avatar and screenshot ready, composing dialogue.Stage 3/3 done — prompt locked, calling Seedance now.
スクリプトとプロンプトの反復は最大 2 回です。2 回の反復を終えたら、手元にある内容で generate_reference_video を実行してください。フック、オチ、画面のクローズアップの表現をさらに磨き続けてはいけません。
長時間実行されるタスクのステータス確認
長時間実行される生成または編集の呼び出しが、初期ステータスの有無にかかわらず task_id を返した場合({task_id}、{task_id, status: "queued"}、初期ステータスが queued、running、processing の場合など)は、タスク ID と開始時刻をすぐに記録してください。
- 終端状態(
completed | failed | cancelled)になるまで、task_status({task_id})を間隔を空けずに繰り返し呼び出してください。手動で待機したり、Bash でポーリングしたりしないでください。ワーカーは各ステータス呼び出しを開いたまま保持します。 - ステータスが
queued、running、processingの間は、60 秒ごとに進行状況を示す行を1行表示してください。Seedance i2v queued for {N}m {S}s... still processing。Kling、GPT-image-2、キャプション、編集タスクをポーリングする場合は、プロバイダー/ステージのラベルを置き換えてください。 completedになったら、返された結果 URL を取り出して続行してください。failedまたはcancelledになったら、task_id、ステータス、最後のステータスメッセージをユーザーに伝えてください。- 最初の送信から合計15分経過してもタスクが終端状態でない場合は、
task_cancel({task_id})を呼び出してから、失敗をユーザーに伝えてください。キャンセル時にタスクがすでに終端状態だと報告された場合は、ステータスをもう一度確認し、その終端結果を報告してください。 - 元のタスクがまだ
queued、running、processingの間は、重複リクエストを送信しないでください。 - 非同期ポーリングの上限:アクティブなタスクは1つ、ポーリング期間は15分間です。ポーリング上限に達したらタスクをキャンセルし、別の有料レンダリングを送信するのではなく、失敗をユーザーに伝えてください。ただし、後続の手順で、元のタスクが終端状態になった後に別途上限付きで再試行することが明示的に許可されている場合を除きます。
エンジンの選択:デフォルトはSeedance、代替はKling
UGC のセルフィー/トーキングヘッド広告では、ネイティブのリップシンク、1つのプロンプトによる複数ビートのペース配分、任意の3:4出力に対応する Seedance をデフォルトで使用してください。呼び出し元が明示的に provider=kling を指定した場合、または Seedance で上限付きのカートゥーン化再試行を使い切った後、停止メッセージでユーザーが Kling を選択した場合は Kling を使用してください。Kling はアスペクト比の対応がより厳しい一方、別のモデレーション経路を備え、ショットの明示的な分割が必要です。
手順
0. 入力の解決(引数が空の場合のメニュー)
$ARGUMENTS からフラグと key=value パラメーターを除去してください。商品 URL が残らず、以前のコンテキストにも使用可能な商品 URL がない場合は、このメニューを表示して終了してください。
UGC 広告で宣伝する商品を指定してください。 必須項目:
- 商品 URL — 商品名、カテゴリー、ビジュアル参照、言語を取得するページ
任意項目:
avatar_url=、provider=seedance|kling、aspect_ratio=9:16|3:4、variants=9:16,16:9,1:1、category=auto|HAUL|APP|FOOD|BEAUTY|FITNESS|TECH、captions=true|false。
商品 URL がある場合は、この手順を何も表示せずにスキップしてください。
1. 取得とカテゴリー分類
URL を WebFetch し、product_name、brand_name、価値提案、ブランドカラー、商品の形状、パッケージ、メインコピー、ターゲットユーザー、カテゴリー、ページの主要言語を取得してください。category= が渡された場合はそれを使用し、渡されていない場合は WebFetch の判定を採用してください。判断できない場合は、実物の商品には HAUL、デジタル商品には APP を使用してください。
取得したページに基づき、事実リストを2つ作成してください。
{
"grounded_specs": [
{
"claim_text": "250W total output",
"value": "250",
"unit": "W",
"source_quote": "visible source-page text containing the exact value",
"source_url": "<product URL>"
}
],
"claims_allowlist": ["250W total output"]
}
すべての数値仕様(W、mAh、%、分数、ポート数、価格、寸法、数量、充電速度、バッテリー容量、ランキング)は、表示されているソースページのテキストに基づく必要があり、source_quote を含めてください。ソースページ上で数値を裏付ける記述が確認できない場合は、その数値を grounded_specs と claims_allowlist から除外してください。商品カテゴリー、モデル名、一般知識、競合他社のページから仕様を推測しないでください。
2. アバターの解決(見つからない場合は組み込みアバターを使用)
avatar_urlが渡された場合 → そのまま使用してください。- 渡されていない場合 → 次の組み込みアバターを使用してください。
事前生成された、若い女性クリエイターの Pixar 風3Dアニメーションポートレートです。事前にカートゥーン化されているため、Seedance のモデレーションでそのまま受け入れられ、どのカテゴリーにも合うニュートラルなデザインです。最後の要約でこの代替アバターを使用したことを記載し、次回はペルソナの一貫性を保つために独自のポートレートを指定するよう、呼び出し元に知らせてください。https://cdn.pika.art/v2/files/agent/17d62bf9-0edb-49e4-9ba9-2c5419fa518f/seedream-1777624057811.jpeg
2.5 クリエイターのポートレートに対するアバタータイプの確認
Step 7 の前、および有料の generate_reference_video 呼び出しの前に、この確認を実行してください。ユーザー提供の avatar_url、組み込みのフォールバック、または @Image1 として選択したクリエイターのポートレートのいずれにも適用されます。組み込みのフォールバックは、すでに IP を含まないスタイライズされたクリエイターですが、最終サマリーには引き続きその出典を記載してください。
analyze_media を 1 回呼び出します。
query: "Classify this image for paid video generation. Is it a photograph of a real human face, an AI-generated realistic portrait, a stylized / illustrated character, or a recognizable trademarked / copyrighted character such as Batman, Pikachu, or Mickey Mouse? Return strict JSON only: { \"avatar_type\": \"real_human\" | \"ai_realistic\" | \"stylized_illustrated\" | \"recognized_ip\", \"recognized_character\": string | null, \"moderation_risk\": \"low\" | \"medium\" | \"high\", \"recommendation\": \"proceed\" | \"warn\" | \"reject\" }. Use null for `recognized_character` when no specific character is recognized; never write \"none\", \"unknown\", or explanatory prose in that field."
結果に応じて次のように振り分けます。
- 認識された IP/著作権リスク ->
avatar_typeが"recognized_ip"、recognized_characterに特定のキャラクター(例:"Batman")が指定されている、またはmoderation_riskが"high"かつrecommendationが"reject"の場合に限り、停止します。recognized_character: null、空文字列、"none"、"unknown"、"n/a"、および低/中程度のmoderation_riskは、それだけでは停止する理由として不十分です。実在の人物/スタイライズのルートに進む前に、この確認を実行してください。avatar_typeがスタイライズ/イラストであっても、ちびキャラの Batman は Batman です。 - 実在の人物/AI 生成のリアルな画像 -> 通常どおり続行します。
- スタイライズ/イラスト -> Kling では受け入れられても、Seedance のモデレーションでは結果が一貫しない場合があることを明示的に警告したうえで続行します。ただし、ユーザーがそのアバターを提供または承認した場合に限り続行してください。
- 商標登録済み/著作権で保護されたキャラクター -> 生成前に停止します。次のメッセージを提示してください:
The avatar appears to be a trademarked character ([X]). Most video providers will moderate this and refuse to generate. Pass avatar_url=<real-looking-photo-url> to override.
3. 商品のスクリーンショットを撮影する(ベストエフォート)
mode: "screenshot" を指定して capture_website を呼び出します。携帯端末向けの商品カテゴリ(APP/FITNESS/BEAUTY)では mobile=true を使用し、キャプチャしたページが縦向きのスマートフォン画面として表示されるようにします。デスクトップ向けのカテゴリ(HAUL/TECH/FOOD)では mobile=false を使用します。
呼び出しが失敗した場合(タイムアウト、ブラウザプールの停止)は、1 回だけ再試行します。それでも失敗する場合は、スクリーンショットなしで続行してください。スキルの機能は低下しますが、引き続き使用できます。その場合、クローズアップのビートでは文章のみでページを説明し、Beat 2 の reference_images は [avatar_url] のみとします。
キャプチャ URL → screenshot_url(または null)。
4. プロンプトを作成する
プロンプト全体は、1回の generate_reference_video 呼び出しに渡す、複数のビートで構成された単一の文字列です。構成を説明する文章で記述し、Markdown の箇条書きは使いません。各ビートには、リップシンク用の Says: "..." の行を入れます。15秒の広告全体で、ペースは1秒あたり約5.5〜6語(合計で約85〜90語)を目安にします。@Image1 はアバター、利用できる場合は @Image2 をスクリーンショットとして使います。
すべての Says: "..." の行は、手順1の WebFetch で検出された言語で書いてください。 seedance と kling はどちらも多言語のリップシンクに対応しています。製品ページが中国語、日本語、スペイン語などの場合、台詞もその言語にしてください。手順5のフックの類型は言語を問いませんが、修辞的な表現はその言語で自然な語調に合わせてください。
仕様の根拠に関するルール: 数値を捏造しないでください。音声または映像で伝える数値や単位の主張は、すべて claims_allowlist に逐語的に記載されている必要があります。数値が claims_allowlist にない場合は、その主張を「急速に充電できる」「複数のポート」「大容量バッテリー」のような定性的な表現に書き換えるか、省略してください。情報源で裏付けられていない限り、「28分で50%」「3ポート」「140W」、価格、個数、時間枠は言わないでください。
ブランド名/仕様テキストの表示に関するルール: ブランドロゴ、製品名、パッケージのラベル、仕様テキストを、文章から Seedance や動画モデルに描画させないでください。動画モデルが生成するテキストは文字化けします。プロンプトでは参照画像として @Image2 を表示してもかまいませんが、読み取り可能な状態で表示する必要がある新しいブランド名や仕様のコピーは、後の手順8で決定的なオーバーレイとして追加します。
HOOK (0–3 sec) <visual setting + creator framing + face/body cue>. Says to camera, fast and energetic: "<hook line>". <style anchor — POV handheld, authentic, raw>.
JUMP CUT 1 (3–6 sec) <wide POV — creator's body language, product partially in frame edge>. <face cue>, says fast: "<setup line>".
JUMP CUT 2 (6–9 sec) <next visual beat — could be the screen close-up showing @Image2 OR another reaction beat, depending on which beat the dialogue arc puts the reveal>. Says (or voice continues over the shot if it's a screen close-up), fast and confident: "<reveal line>".
JUMP CUT 3 (9–12 sec) <next visual beat — same logic; one of the JUMP CUTs is the screen close-up, the others are wide-POV reaction shots>. Says, fast: "<insight twist line>".
OUTRO (12–15 sec) <selfie POV, mid-chest framing, same setting>. Says to camera, fast: "<punchline line>".
avatar is image 1, asset is image 2
画面のクローズアップのビート — 広告全体で1回のみ。位置は台詞に合わせて決めます:
- 画面のクローズアップは、商品の見せ場の台詞が入るジャンプカット(1、2、または3)に配置します。ほとんどの広告ではジャンプカット2に配置しますが、ストーリー上、前後にずらす必要がある場合は、ジャンプカット1またはジャンプカット3でもかまいません。番号ではなく、内容に基づいて選んでください。
- 画面のクローズアップのビートでは、
@Image2をそのまま表示し、指さしのジェスチャーを1回だけ入れます(画面の端から指を1本だけ入れ、メインのテキストまたは製品を指します。タップ、スワイプ、スクロール、CTA 上でのホバーは禁止)。指さしのジェスチャーだけが、広告全体で唯一の画面操作です。 - ほかのジャンプカットは、広角視点のリアクションビートにします。手は膝の上、ベッドの上、または体の横に置いたままにします。
@Image2 を信頼してください — 製品ページを表示する際は、画像を参照し、文章で UI を説明しないでください。UI の説明があると、モデルが余分なパネル、ドロップダウン、サイドバー、アニメーションを捏造する原因になります。画像を参照し、そのまま使ってください。
5. カテゴリーの本質
各エッセンスは、5つのビートを構成する前に読むブリーフです。手順1で選んだカテゴリーから1つを選び、実際の製品に合わせた Says: "..." の行を書いてください。
カテゴリーの数値に関する注意: カテゴリーの類型は、修辞やカメラワークの指針であり、日付、期間、個数、割引、費用、評価、充電時間、ポート数、出力値、緊急性を煽る時間枠を捏造してよいという意味ではありません。数値を含む表現はすべて、完全に一致する主張が claims_allowlist に記載されていない限り、書き換えてください。claims_allowlist に一致する数値がない場合は、「使ってみてから」「日々の習慣の中で」「情報源で裏付けられた仕様」「発売記念オファー」「販売中」など、数値を含まない表現を使ってください。
HAUL_UNBOX
- 使用するタイミングと理由:ファッション、ハンドバッグ、ジュエリー、靴、デザイナーの新作、ストリートウェア、パッケージにストーリーがある高級コスメ、アクセサリーなど、ブランドのパッケージと質感・素材が価値提案となるものに適しています。視聴者は、疑似開封による高揚感と「これ、買ったんだ」という社会的証明によって購入に至ります。質感や金具こそが顧客がお金を払う価値なので、クローズアップでは機能ではなく素材に焦点を当てます。TECH ではありません(→ TECH_UNBOX)。スキンケアやメイクの実演でもありません(→ BEAUTY_APPLY)。
- 感覚の手がかり:薄葉紙のカサカサ音、布が滑る音、金具が触れ合う音(チェーン/留め具/バックル)、指先で感じる革や布の織り目、箔のきらめき。
- 設定:自然光が差し込む窓辺の、白いベッドメイキング前のベッド。最後に商品を掲げて見せる場面では、背景にバスルームの鏡を配置します。ストリートウェアの新作なら、デスクや床を使ってもかまいません。
- クローズアップの演出:画面ではなく、商品をクローズアップします。
@Image2は商品写真(またはブランドサイトのモバイル表示)です。指差しは一度だけにし、金具の細部(チェーン、留め具、型押しロゴ)に向けます。 - セリフの特徴:フックは謎めいた予告です。中身をまだ知らない視聴者のために、開封の様子を見せます。フックのセリフでは商品名を出さないでください。展開:開封の謎で引きつける → ブランド名と新作の背景を伝える → クローズアップで金具を映しながら素材やシルエットを見せる → 触り心地や身に着けたときの感覚について語る → 視聴者がそのアイテムを身に着ける姿を想像できるオチにする。
APP_REVEAL
- 使用するタイミングと理由:SaaS、AI ツール、モバイル/ウェブアプリ、エージェント型の製品、開発ツール、生産性ツールなど、画面そのものが製品である場合に適しています。実際の UI が素早く動作する様子を見せると、視聴者は購入に至ります。クローズアップの場面ではデモを、前後の場面では社会的証明を見せます。純粋なハードウェア製品ではありません(→ TECH_UNBOX)。
- 感覚の手がかり:親指の小さな動き、ブランドカラーのハイライト、小さな動きのある生き生きとした UI、室内の環境音。
- 設定:居心地のよい寝室や、ソファに座った視点。画面の端にジーンズやジョガーパンツが見えるようにし、暖かな窓辺の光を使います。
- クローズアップの演出:ベッドの上のノートパソコン(デスクトップのスクリーンショット)か、手に持ったスマートフォン(モバイルのスクリーンショット。ステップ 3 で
mobile=trueを設定)を使います。 - セリフの特徴:フックは戸惑いを含む好奇心です。クリエイターがまだそのものを分類できていないことがポイントです。フックでは機能の羅列やマーケティング用語を使わないでください。「これを何て呼べばいいのか分からない」「これ、すごい」といった言い方で、視聴者に名前が明かされるまで見てもらいます。展開:戸惑いを含むフック → 人に伝わる言葉で製品名と操作方法を紹介する(「話しかけるだけ」「Y から X を作る」など) → クローズアップでページを映しながら、生成されるものを具体例をカンマ区切りで挙げて見せる → ユーザーのワークフローで何を置き換えるか、何を変えるかという個人的な気づきを加える → 試してみるよう促す、明示的または暗示的な CTA を含むオチにする。
FOOD_ASMR
- 使用するタイミングと理由:食品ブランド、飲み物、キッチンツール、スナック、テイクアウト商品を扱うレストランなど、注ぐ・焼ける音・立ち上る湯気・最初のひと口といった感覚のピークが価値提案となるものに適しています。視聴者は食欲を刺激されて購入に至るため、感覚のピークを見せて、言葉で説明するのは避けます。
- 感覚の手がかり:パッケージのカサカサ音、まな板に包丁が当たる音、焼ける音、液体が流れ落ちる様子、立ち上る湯気、最初のひと口の後に満足げに息を吐く音。
- 設定:大理石のカウンター、または温かみのある木製のキッチン。真上から撮影します。
- クローズアップの演出:画面ではなく、商品や料理をクローズアップします。ブランドにデリバリーアプリやレシピアプリがある場合に限り、カウンターの上で手に持ったスマートフォンを使います。
- セリフの特徴:フックは説明せずに見せることです。視聴者が目の前で見ている実演として構成し、説明にはしません。手や最初の食材がすでに動き始めているところでフックのセリフを入れ、映像そのものが好奇心をかき立てるようにします。展開:実演のフック → 商品名と第一印象を伝える → 注ぐ・焼ける音・湯気といった感覚のピークを、その瞬間に合わせて描写する → 「これが新しい定番」といった満足感の気づきを伝える → レシピや購入リンクへ自然につなぐオチにする。
BEAUTY_APPLY
- 使用する場面と理由:スキンケア、メイクアップ、化粧品、フレグランス、ヘアケア製品、ボディケアなど、使用前後の変化と使用の儀式そのものに価値があるもの。照明条件をそろえた視覚的な変化によって視聴者の購入につながります。フックと締めくくりの対称性が、結果に現実味を持たせ、購入を後押しします。パッケージが主役の高級品は対象外です(→ HAUL_UNBOX)。
- 感覚的な要素:ポンプを押す音、絞り出す音、肌の上を滑る感触、ツヤが増す様子、水滴が玉になる様子、ブラシを動かす音。
- 設定:バスルームの鏡、自然光または化粧台の照明。フックと締めくくりは同じアングルにします。
- クローズアップの見せ方:画面ではなく、手に持った製品のクローズアップ(ボトル/チューブ/コンパクト)。
- 会話の特徴:フックはルーティンによる社会的証明です。架空の使用期間ではなく、ルーティンの具体的な一場面を通じて、実際に使っていることを伝えます。フックで、ビフォーアフターの映像で明らかになる対称的な効果を示唆します。流れ:ルーティンでの使用を示すフック → 製品名と情報源で裏付けられた主要成分または効能 → 指やブラシを肌に当てるクローズアップとともに使用の様子を説明 → アフターショットを披露(フックと同じアングル) → 限定感またはリピート購入の意向を伝えるオチ。
FITNESS_TRANSFORM
- 使用する場面と理由:トレーニング器具、サプリメント、リカバリーツール、アクティブウェア、トラッキング機能のあるフィットネスアプリなど、努力から結果への変化に価値があるもの。視聴者の購入につながるのは、共感できる苦労の後に努力に見合った成果を見せることです。プロテインシェイクのボトルを見せるだけでは不十分で、トレーニングも見せる必要があります。
- 感覚的な要素:荒い息づかい、パウダーにスプーンが当たる音、器具のクリック音、光を受ける汗、トレーニング後の息を吐く音。
- 設定:ジムまたはホームジム。画面の端にトレーニング器具を置き、床またはベンチの高さから撮影します。
- クローズアップの見せ方:アプリの統計/心拍数/経過時間が表示されたスマートフォンを手に持つ、または製品パッケージをクローズアップする(容器の中のスプーン、ボトルから注ぐ様子)。
- 会話の特徴:フックは共感できる抵抗感です。つらさ/面倒さ/やりたくない気持ちを口にします(「本当にやりたくなかった」「今日はもう少しでサボるところだった」「今日は休息日のはずだった」など)。疲れを感じていたことを作業に入る前に共有することで、信頼を得ます。流れ:抵抗感を示すフック → 製品名と、数値を使わないルーティンまたは情報源で裏付けられた効能 → デバイスまたはスプーンを映すクローズアップとともに、トレーニング中の様子を説明 → 信頼につながる満足感のある気づき → 使い続けることを示すオチ。
TECH_UNBOX
- 使用する場面と理由:ガジェット、ハードウェア、電子機器、スマートホームデバイス、ウェアラブル、周辺機器、AI ハードウェア(Framework のノート PC、AirPods、Whoop、Rabbit r1、Friend のペンダント、メカニカルキーボード、人間工学に基づいたギア)など、デバイスそのものと初回使用の瞬間に価値があるもの。箱を開ける儀式が高級感を伝え、視聴者の購入につながるのは「本当に使えるのか/何ができるのか」を目にしたときです。初回使用の場面が購入の決め手になります。HAUL は対象外(→ HAUL_UNBOX)。ソフトウェア/SaaS のみの製品も対象外です(→ APP_REVEAL)。
- 感覚的な要素:カッターナイフで切る音、プラスチックを剥がす音、緩衝材から取り出す音、電源を入れたときのチャイム、ボタンを押す感触、触覚的なクリック音、ファンが回り始める音。
- 設定:開封時は木製のデスクで真上から撮影。初回使用時は手持ちで撮影。継続使用の様子はデスクまたは膝の上で撮影します。
- クローズアップの見せ方:開封して電源を入れた後のデバイスそのもの。
@Image2には通常、重要な UI が表示されたデバイス画面の実際の写真を使います(初回の計測、ペアリング済みの状態、主要機能を開いた画面など)。画面がないデバイスの場合は、使用中の様子がよく分かるきれいな写真を使います。 - 会話の特徴:フックは到着の儀式です。「たった今届いた」「開封するところ」など、まさに今起きていることを伝えます。説明より期待感を重視します。フックで「これは何をするものなのか?」という疑問を提示し、初回使用の場面で答えます。スペックから始めてはいけません。流れ:到着を伝えるフック →
claims_allowlistに情報源で裏付けられたスペックの見出しがある場合は製品名とその見出し、ない場合は定性的な見出し → デバイスが動作している様子のクローズアップとともに初回使用を披露 → ワークフローがどう変わるかを伝える気づき(「これは私の X を置き換える/変える/解決する」) → コストや緊急性をでっち上げず、入手方法の案内につなげるオチ。
6. 音声 — モデルのデフォルト
このスキルには音声クローン用の入力がありません。動画モデルは、独自のデフォルト音声で台詞を生成します。音声サンプルを取得したり渡したりすることはありません。ステップ 7 に進みます。
7. 生成 — アバターで初回試行し、拒否されたらカートゥーン化して再試行
ステップ 2.5 のアバタータイプのプローブに合格したら、ステップ 2 で解決したアバター(呼び出し元が指定したもの、または組み込みのフォールバック)をそのまま使い、最初に呼び出しを試みます。seedance に拒否された場合に限り、スタイルを変更します。
再試行の上限:Seedance による動画生成は合計 2 回までです。7a の元のアバターでのレンダリングと、7c のカートゥーン化したアバターでの再試行が各 1 回です。3 回目の Seedance レンダリングは開始しないでください。2 回目も失敗した場合は、7d のメッセージを表示するか、ユーザーが明示的に provider=kling を指定した場合、または停止メッセージの後にユーザーが Kling を選択した場合に限り、Kling に切り替えます。
7a. 初回試行 — アバターをそのまま使用
generate_reference_video を呼び出します。
provider:seedance(デフォルト)、またはユーザーがprovider=klingを指定した場合はklingaspect_ratio:9:16(デフォルト)。3:4は seedance の場合に限り使用できますresolution:720p(seedance のみ)duration: 15reference_images:[avatar_url, screenshot_url](ステップ 3 が失敗した場合はscreenshot_urlを除外)prompt: ステップ 4 の複数ビートの文字列sound: true(デフォルト — モデルが環境音とリップシンクを生成)
provider=kling の場合は、複数ビートの説明文を shots: [{prompt, duration}, ...](5 ショット × 3 秒 = 合計 15 秒)に変換し、さらに広告を要約するトップレベルの prompt を指定します。参照では @Image1 / @Image2 の代わりに <<<image_1>>> / <<<image_2>>> を使います。
呼び出しが { task_id, status: "queued" } を返した場合、上記の非同期ポーリングの上限に従って、終端状態(completed | failed | cancelled)になるまで task_status(task_id) をポーリングします。completed になったら、result.url を取得して → video_url に設定し、ステップ 8 に進みます。
7b. 拒否された場合 — アバターを自動でカートゥーン化
7a が image_urls / reference_images に対する 422 content_policy_violation を返した場合(seedance と fal-queue のモデレーションでは、写実的すぎる肖像と判断されたものはフラグされます。一部の Pixar 風 3D アバターも対象になります)、その場でアバターのスタイルを変更します。
generate_image_edit を呼び出します。
provider: "seedream"(ネイティブな Pixar 風の 3D アニメーションスタイル)images: [avatar_url]aspect_ratio: 広告と同じアスペクト比resolution: "1K"watermark: false(seedream 専用の設定 — 下流のリップシンク再レンダリングで使うスタイル変更後のアバターに、プロバイダーの透かしが入らないようにします)prompt: "Stylized 3D game character render — Unreal Engine 5 / Overwatch / Valorant / Apex Legends visual style. Anatomically grounded facial proportions with subtle stylization: slightly larger expressive eyes, defined sculpted cheekbone planes, smooth skin shader (smoother than photoreal, no micropore detail), idealized but believable features. PBR materials with subtle subsurface scattering, strand-based hair simulation, crisp cloth shader. Cinematic three-point studio lighting with strong rim light. Clearly a stylized AAA-game-character render — NOT photorealistic person, NOT Pixar plastic-toy cartoon, NOT exaggerated big-head proportions. Same person, same glasses, same outfit, same accessories. Centered medium portrait, neutral indoor background."
返された URL を取得し → avatar_url_cartoon に設定します。
7c. カートゥーン化したアバターで seedance を再試行
7a とまったく同じ generate_reference_video 呼び出しを再実行し、アバターの参照を差し替えます。reference_images: [avatar_url_cartoon, screenshot_url](またはステップ 3 が失敗した場合は [avatar_url_cartoon])を指定します。その他のパラメーターはすべて変更しません。result.url を取得し → video_url に設定します。
7d. 最終フォールバック — それでも拒否された場合
7c も content_policy_violation を返した場合は、停止します。アバターは自動でスタイル変更した後も seedance のモデレーションでは写実的すぎると判断されること、よりスタイライズされた肖像をユーザー自身が用意するか、provider=kling を指定して再実行することをユーザーに伝えます(kling は別のモデレーションパイプラインを使用しており、写実的なアバターを受け付けます)。
8. 決定論的なブランド/仕様オーバーレイ
キャプションを追加する前に、生成後の決定論的なオーバーレイで読みやすいブランド/仕様テキストを追加します。動画モデルによるテキスト描画ではブランドのワードマークや仕様ラベルが崩れるため、これはSeedanceプロンプトとは意図的に分けています。
ステップ1の情報からオーバーレイのテキストを作成します。
{
"brand_overlay_text": "<brand_name>",
"grounded_spec_overlay_text": "<one short source-backed claim from claims_allowlist, or empty>",
"overlay_font_color": "#111111 | #ffffff"
}
ルール:
brand_overlay_textは常に、WebFetchから取得した正確なbrand_nameにします。brand_nameが空の場合はproduct_nameを使用し、モデルにロゴ/ワードマークを作らせないでください。grounded_spec_overlay_textは空にするか、claims_allowlistにある正確な表記を1つだけ使用します。claims_allowlistにない数値をオーバーレイに表示しないでください。overlay_font_colorはブランドのイメージではなく、生成されたフレームとのコントラストで選びます。スクリーンショット/製品の表面が明るい、または不明な場合は#111111を使用します。映像が明らかに暗い場合にのみ#ffffffを使用します。処理後のOCRでオーバーレイを読み取れるようにしてください。- キャプションや単語ごとの字幕にはこのステップを使用しないでください。キャプションはステップ9で1回の
add_captions呼び出しにより追加します。
ブランド名のために edit_text_overlay を1回呼び出します。
edit_text_overlay(
video_url: video_url,
text: brand_overlay_text,
position: "top_left",
font_size: 54,
font_color: overlay_font_color,
start_s: 0.2,
end_s: 15
)
返されたURLを brand_guarded_url として保存します。grounded_spec_overlay_text が空でない場合は、brand_guarded_url に対して edit_text_overlay をもう1回呼び出します。
edit_text_overlay(
video_url: brand_guarded_url,
text: grounded_spec_overlay_text,
position: "top_right",
font_size: 42,
font_color: overlay_font_color,
start_s: 6,
end_s: 10
)
返されたURLを guarded_video_url として保存します。仕様オーバーレイが不要な場合は、guarded_video_url = brand_guarded_url に設定します。いずれかのオーバーレイ呼び出しが { task_id } を返した場合は、長時間実行タスクの契約に従って task_status をポーリングします。決定論的なオーバーレイに失敗した場合は処理を停止し、Seedanceに依存したブランド/仕様テキストしか読み取れない動画を納品せずに、失敗を報告します。
キャプションを追加する前に、オーバーレイのフレーム単位OCRを実行します。動画単位の分析では短時間だけ表示される画面上部の隅のオーバーレイを見落とすことがあるため、両方のオーバーレイが表示されているはずのタイミングでフレームを1枚抽出します。
extract_frame(
video_url: guarded_video_url,
time_s: grounded_spec_overlay_text ? 7 : 1
)
# Save returned url as overlay_qa_frame_url
analyze_media(
media: overlay_qa_frame_url,
query: "Expected brand text: ${brand_overlay_text}
Expected spec text: ${grounded_spec_overlay_text}
Return JSON only: { \"visible_text_ocr\": string[], \"brand_visible\": boolean, \"spec_visible\": boolean, \"observations\": string[] }. OCR/read all visible text. brand_visible is true only if the exact expected brand text above is readable. spec_visible is true if expected spec text is empty or the exact expected spec text above is readable."
)
brand_visible が false の場合、または grounded_spec_overlay_text が空でないときに spec_visible が false の場合は、処理を停止し、overlay_font_color を反対の色(#111111 ↔ #ffffff)にして決定論的なオーバーレイを1回再レンダリングします。overlay_qa_frame_url を再抽出し、同じOCRチェックを再実行します。再試行しても失敗する場合は処理を停止し、overlay_qa_frame_url とOCR JSONを提示します。キャプションの追加には進まないでください。
9. キャプション — 1回のスタイル付き焼き込み(デフォルトで有効)
variants が指定されている場合は、このステップで単一出力用の add_captions 呼び出しを実行しないでください。キャプションを追加せずに guarded_video_url を残し、アスペクト比バリエーションに進みます。そこでは、各指定アスペクトに合わせて先にリフレームし、その後に1回だけキャプションを追加します。
variants がなく、captions=false の場合は、キャプション生成をスキップし、final_url = guarded_video_url に設定します。それ以外の場合は、チャンクごとに edit_text_overlay を連続して呼び出すのではなく、add_captions を1回呼び出します。こちらの方がはるかに高速です(1回の呼び出しで≤5分、逐次実行で5~8分)。また、スタイルを選ぶだけでキャプションが適切な位置に配置されます。
add_captions を呼び出します。
video_url:ステップ8のguarded_video_urlstyle:"tiktok"(デフォルト。単語ごとに紫色でハイライトし、Bebas Neue、すべて大文字でフレームの下部に描画します。顔と画面を見やすく保つ、TikTokクリエイター定番のスタイルです)。代替スタイル:"hormozi"(中央より下に黄色でハイライトする、より強めのスタイル。手にスマートフォンを持ったクローズアップの一部に重なります)、"classic"(シンプルな下部字幕バーで、最も安全なスタイル)、"karaoke"(段階的な色塗りで、こちらも下部に表示されます)。font_size:60。スタイルごとのデフォルトを上書きします。フレームを占有しすぎず、9:16で読みやすいサイズに調整済みです。language:ステップ1で検出したページ言語のBCP-47コード("en"、"zh"、"ja"、"es"など)を渡します。自動検出をスキップし、CJKテキストがラテン文字専用のフォントパスに誤って振り分けられるのを防ぎます。
返されたURLを取得し、final_url に設定します。
アスペクト比のバリエーション
ユーザーが同じUGC広告から縦型ショート動画、横型、スクエアフィード向けの出力を求めている場合は、オプションのvariants=9:16,16:9,1:1を使用します。variantsを指定すると、aspect_ratioはネイティブの9:16に上書きされます。aspect_ratio=3:4は単一出力専用で、variantsと併用してはいけません。ユーザーがaspect_ratio=3:4とともにvariantsをリクエストした場合は、ネイティブの9:16バリエーションのフローを使い、3:4は単一出力の実行にのみ適用されることを伝えます。
ネイティブの9:16広告についてgenerate_reference_videoを1回呼び出してから、ステップ8の決定論的オーバーレイを1回実行し、guarded_video_urlを生成します。追加のバリエーションを作成するために、商品取得、アバター分析、スクリーンショットのキャプチャ、アバターのカートゥーン化、Seedance/Klingによる生成、決定論的オーバーレイ、その他のコストの高いプロバイダー呼び出しを再実行してはいけません。
ステップ9の単一出力向けadd_captions呼び出しは実行しないでください。最初に生のvariant_sourcesを作成し、次にフラットなvariant_urlsオブジェクトを作成します。
{
"9:16": "<native final_url>",
"16:9": "<edit_reframe url>",
"1:1": "<edit_reframe url>"
}
9:16の場合は、variant_sources["9:16"] = guarded_video_urlを設定します。16:9と1:1の場合は、edit_reframe(video_url=guarded_video_url, target_aspect="<aspect>", fill_mode="blur")を呼び出し、返されたURLをそれぞれvariant_sourcesに保存します。ぼかしによる塗りつぶしでは、クリエイターや字幕が切り取られず、ネイティブの縦型広告全体がぼかした背景の上に保持されます。captions=trueの場合は、リフレーム後に字幕を追加します。各variant_sourcesの値に対してadd_captionsを実行し、そのアスペクト比に合った位置に字幕を焼き込んでから、字幕付きのURLをvariant_urlsに保存します。captions=falseの場合は、字幕なしのネイティブ動画とリフレーム済みURLをvariant_urlsに直接保存します。final_url = variant_urls["9:16"]を設定し、メインの納品物がリクエストされたネイティブバリエーションと一致するようにします。edit_reframeとバリエーションごとの字幕焼き込みは、低コストの最終合成/リフレーム段階として扱います。リフレームに失敗した場合は、成功したバリエーションのURLに加えて、失敗したアスペクト比とツールエラーを返します。コストの高い生成を再送信してはいけません。
注意 — バリエーションではぼかしによる塗りつぶしを使用します。
16:9と1:1では、ネイティブの9:16広告全体がぼかした背景の上に表示されます。読みやすさを保つため、クリエイター、商品、字幕は中央に配置します。ただし、これらの出力をクロップしたバリエーションとして説明してはいけません。
10. 返却
final_urlを1行で返し、あわせて1行の要約を返します。要約には、実行したカテゴリー、アバターが呼び出し元から提供されたもの/組み込みのフォールバック/カートゥーン化による復旧のいずれか、スクリーンショットを使用したか、または説明文にフォールバックしたか、選択したプロバイダー、会話で検出された言語、字幕を焼き込んだかどうかを含めます。variantsがリクエストされた場合は、同じレスポンスにフラットなvariant_urlsオブジェクトを含めます。
飛行後の品質ゲート
成功を宣言する前に、字幕を焼き込んだ場合はfinal_urlを、captions=falseの場合はguarded_video_urlを対象に、analyze_mediaを呼び出して構造化された判定を求めます。variantsがリクエストされた場合は、各variant_urlsの値に対して同じゲートを実行し、警告のキーにはアスペクト比を使用します。
analyze_mediaを呼び出す前に、クエリの期待値を具体的な値に置き換えます。正確なbrand_name、正確なproduct_name、および実際のclaims_allowlistの値をJSON配列として含めます。モデルが推測する必要があるプレースホルダーを残してはいけません。
Expected brand: ${brand_name}
Expected product: ${product_name}
Allowed numeric/spec claims: ${JSON.stringify(claims_allowlist)}
Return JSON only: {
"verdict": "clean" | "degraded" | "catastrophic",
"visible_text_ocr": string[],
"unauthorized_numeric_claims": string[],
"observations": string[],
"quality_warning": string | null,
"re_roll_suggestion": string | null
}
OCR / read all visible text. Use the concrete expected values above when checking that `brand_name` and `product_name` are spelled correctly anywhere they appear, deterministic brand/spec overlays are legible, captions are present when requested and not garbled, and no visible numeric claim appears unless it exactly matches one of the actual `claims_allowlist` values above. Also check that the avatar / creator remains visually stable, the product screenshot or prose fallback matches the product page, and there are no black frames or wrong-product shots.
verdictがcleanの場合は、通常どおりfinal_urlを返します。verdictがdegradedの場合は、ユーザーが公開前に確認できるよう、final_urlとquality_warningを返します。verdictがcatastrophicの場合、visible_text_ocrに判読不能なブランド名/仕様テキストが含まれる場合、brand_nameにスペルミスがある場合、またはunauthorized_numeric_claimsにclaims_allowlistにない主張が含まれる場合は、広告を完成とみなしてはいけません。成功を宣言する代わりに、判定結果とre_roll_suggestionを提示します。
故障モード
| 症状 | 考えられる原因 | 対処方法 |
|---|---|---|
| 商品ページを取得またはキャプチャできない | ページにアクセス制限がある、ブロックされている、または商品に関する根拠が不足している | 呼び出し元が提供した商品情報が明示的な場合に限り使用します。それ以外の場合は処理を停止し、商品概要またはより適切な URL を求めます。 |
| アバターの事前チェックで、識別可能な知的財産、不適切な肖像、または使用できない顔のフレーミングが検出される | 提供されたクリエイター画像が有料生成に適していない | 有料生成の前に停止し、より安全なクリエイター画像を求めます。呼び出し元からアバターが提供されていない場合は、組み込みのスタイライズされたクリエイターに切り替えます。 |
画像/動画生成中にプロバイダーが 4xx または moderation_blocked を返す | プロンプト、ソース画像、または商品コンテンツが確定的に拒否された | 同じペイロードを再試行しないでください。拒否された入力を削除するか、その工程に文書化されたフォールバックプロバイダーがある場合に限り切り替えます。 |
| 1 回の色調整再試行後も、決定論的なオーバーレイ OCR に失敗する | ブランド/仕様のコピーが依然として判読できない | overlay_qa_frame_url と OCR JSON を添えて停止します。字幕や最終納品には進まないでください。 |
| バリアントのリフレームまたはバリアントごとの字幕焼き込みに失敗する | コストのかかるネイティブ広告の生成後に、低コストの最終合成工程が失敗した | 成功したバリアントと、失敗したアスペクト比/ツールのエラーを返します。商品取得、アバター準備、動画生成は再実行しないでください。 |
重要なフレーズ
これらの要点により、広告が一般的な商品デモに逸れるのを防ぎます。
| フレーズ | 場所 | 重要な理由 |
|---|---|---|
HOOK + 3 JUMP CUTs + OUTRO | プロンプトのひな形 | 連続したプレゼンターショットではなく、TikTok 風の複数カットのリズムを強制します。 |
Every beat has a Says: "..." line | プロンプトのひな形 | すべてのビートで動画エンジンに明示的なリップシンク用の素材を与えます。 |
Trust @Image2 | 画面のクローズアップ規則 | 実際のスクリーンショットがすでに提供されている場合に、商品 UI が捏造されるのを防ぎます。 |
exactly one screen-close-up beat | プロンプトの構成 | 広告がクリエイター風の紹介ではなく、画面録画になるのを防ぎます。 |
Write all Says lines in the language detected from step 1 | セリフの規則 | ローカライズされた商品ページに対して、デフォルトで英語のセリフが生成されるのを防ぎます。 |
forbid inventing numbers | プロンプトの根拠付け | 裏付けのない仕様の主張がナレーションやオーバーレイに含まれるのを防ぎます。 |
Deterministic brand/spec overlays | ステップ 8 | 判読可能なブランド名や仕様のコピーを、動画モデルのテキスト描画に任せないようにします。 |
single add_captions call | 字幕の工程 | テキストオーバーレイを連鎖させることで生じる品質低下やずれを防ぎます。 |
例
/pika:ugc-ads https://pika.me avatar_url=https://cdn/face.png→ APP_REVEAL、9:16、seedance、実際のスクリーンショット、字幕オン/pika:ugc-ads https://maisonbrune.com avatar_url=https://cdn/face.png aspect_ratio=3:4→ HAUL_UNBOX、3:4、seedance/pika:ugc-ads https://pika.me avatar_url=https://cdn/face.png provider=kling captions=false→ APP_REVEAL、9:16、kling shots[]、字幕なし/pika:ugc-ads https://pika.me→avatar_urlなし → 組み込みのフォールバックである Pixar 風の女性クリエイターの肖像を使用し、エンドツーエンドで実行