app-sizzle について
実際のアプリ画面とロゴまたはアイコンから15秒のアプリ紹介動画を作るスキルです。画面を分析して短いストーリーにまとめ、画像を補正して1080p動画を生成します。
主な機能
- 0115秒のアプリ紹介動画を生成
- 02実際のアプリ画面を取得
- 03画面とアプリ機能を対応付け
- 04選択したスクリーンショットを補正
- 051080p動画を生成
活用シーン
- 01短いアプリ紹介動画を制作
- 02App Storeのスクリーンショットから予告動画を作成
- 03主要なアプリ画面を順に見せる
MCP 対応
Pika MCP ツールで App Store のスクリーンショットを取得し、画像や動画を生成・編集します。生成前に実際のスクリーンショットとロゴまたはアプリアイコンが必要です。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pika-labs/ pika-plugins --skill app-sizzleインストール後、Claude Code で/app-sizzleを入力して読み込まれたか確認します。
同梱ファイルreferences/liquid-glass.mdreferences/template-a-cinematic.md
詳細
App Sizzle — GPT-Image-2 で強化した iOS アプリのティーザー
実際のアプリ画面から、洗練された15秒のアプリティーザーを生成します。選択した各画面を Seedance に渡す前に GPT-image-2 に通すことで、UI を捏造することなく、圧縮されたキャプチャをより鮮明な参照画像にします。
コストの透明性ゲート
有料の MCP 呼び出しを行う前に、identity_balance({verbose: true}) を一度呼び出します。現在の残高、直近の消費ペース、残りの実行可能期間を提示し、以下の正確なメッセージで実行を確認します。
推定コスト:約3,000~4,000クレジット(約30~40ドル)。スクリーンショットの強化と Seedance 動画生成を含む一般的な実行の場合です。5ドルを超えるため、続行するには
proceed、停止するにはcancelと返信してください。
ユーザーが proceed と返信するまで、有料 MCP ツールを呼び出してはいけません。ユーザーが cancel と返信した場合は、生成せずに停止します。非対話型の --quick または --config 呼び出しでは、設定に cost_ack=proceed が必要です。設定にない場合は、クレジットを消費せずに推定コストを提示して停止してください。
生成の契約: resolution="1080p"、duration=15、sound=True を使用してください。Seedance が 720p に制限されるため、fast=true は使用しないでください。このスキルが再生時間と音声を管理するため、ユーザーが指定するのはアプリの基本情報、画面、ロゴ、アスペクト比だけです。
ビジュアルの美学は、アプリの個性をもとに決定します。デフォルトでリキッドグラスにするわけではありません。エージェントはアイコン、スクリーンショット、カテゴリからアプリの本質を読み取り、それに合った表現を選びます。ユーザーがアプリの基本情報とアセットを提供し、モード、プロンプト、カメラ、スタイルなど、それ以外のすべてをエージェントが決定します。
生成前の経過時間ガード
必要なアプリの基本情報と画面/ロゴのソースがそろい、コスト確認ゲートを通過した時点で、スキルの開始時にタイマーを開始します。ユーザーの proceed 返信を待つ時間、または非対話型の cost_ack=proceed を待つ時間は準備時間に含めず、このガードの対象にもなりません。必要な入力または実際のアセットが不足している場合は、Stage 0 または Stage 0.5 で停止して提供を求め、アセットのゲートを回避してはいけません。必要な入力がそろっている実行では、最初の有料生成呼び出しは GPT-image-2 の generate_image_edit による強化処理です。スキル開始から5分以内に呼び出してください。5分以内に最初の generate_image_edit による強化処理を呼び出せなかった場合は、有料生成呼び出しを行う前に停止し、ここまでに完了した内容(取得したアセット、選択した画面、機能マップ、展開、強化プロンプトの状況、作成済みであれば Seedance プロンプトの草案、具体的なブロッカー)とともに failed_pre_generation_timeout を報告してください。分析、強化文言、プロンプト文言、カメラ表現の調整を続けてはいけません。
準備の各段階が終わるごと、および有料生成呼び出しの直前に、次の進捗チェックポイントを1行で表示してください。
Stage 1/3 done — assets sourced and screened, analyzing screenshots.Stage 2/3 done — feature map and arc written, locking enhancement prompts.Stage 3/3 done — enhancement prompts locked, calling GPT-image-2 now.
最初の generate_image_edit 呼び出しまでに、機能マップと強化プロンプトの作成は最大2回までです。2回に達したら、完成した内容を generate_image_edit に渡してください。強化文言、画面分析、展開の表現を引き続き磨いてはいけません。強化処理の完了後、Seedance プロンプトの作成は最大2回までです。その後、完成した内容を generate_reference_video に渡してください。
長時間実行タスクの task_status ポーリング
長時間実行される生成または編集の呼び出しが、初期ステータスの有無を問わず 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の間は、重複するリクエストを送信しないでください。
モード:Reference-to-Video
第一候補:generate_reference_video(provider="seedance", resolution="1080p") を、スクリーンショット 3~5 枚と最後の参照画像としてのアプリアイコン/ロゴを使って呼び出します。
次の場合は provider="kling", quality_mode="pro"(=1080p)にフォールバックします:
- Seedance が音声以外の
partner_validation_failedを返す(有名人の顔、画面録画の UI) - Seedance が
insufficient_balanceを返す - Seedance が
seedance timed out after ...などのタイムアウトを返すまでqueued/runningのままになる
生成音声のモデレーションを、即座に Kling へフォールバックする理由として扱わないでください。まず「Generate Video」の Seedance 生成音声モデレーション復旧手順を確認してください。
Kling のプロンプトでは、@Image1~@Image5 の代わりに <<<image_1>>>~<<<image_5>>> トークンを使用します。resolution パラメーターは省略してください(Kling では代わりに quality_mode を使用します)。「Gotchas」を参照してください。
ステージ 0 — アセットの取得
引数が空で、関連する以前のコンテキストもない状態で呼び出された場合は、このメニューをそのまま表示して終了してください。ユーザーがアプリの識別情報と画面のソースを指定するまで、ツールを呼び出さないでください。
To make your app promo, I need:
1. App name + one-line description of what it does
(e.g. "Nova — an AI journaling app for iOS")
2. Where should I pull the app screens from?
— iOS App Store: give me the App Store URL or app name → I'll use
`fetch_appstore_screens` to fetch screenshots, metadata, and icon
— Web app / website: give me the URL → I'll capture it with Pika MCP
— Local files / URLs: drop the paths and I'll upload them
3. Brand logo — path or URL (preferred) or skip to use the App Store icon
The logo anchors the end card and prevents Seedance from hallucinating brand text.
If you don't have a logo file, use the fetched App Store icon as the fallback.
4. Aspect ratio: 16:9 (landscape/YouTube) / 9:16 (Reels/TikTok) / 1:1. Optional: `variants=16:9,9:16,1:1` to export multiple deliverables from one render.
トリガーメッセージまたは以前のコンテキストですでに一部の情報が指定されている場合は、ツールに触れる前に、不足している必須項目だけを確認してください。ユーザーが回答する必要がある質問はこれだけです。モード、プロンプト、カメラ、スタイルはエージェントが決定します。
回答を受け取ったら、エージェントは次の手順を実行します:
- 画面を取得します(MCP App Store からの取得/ウェブサイトのキャプチャ/ローカルファイルのアップロード)
- 各画面を分析します(ステージ 1)— すべてのスクリーンショットを読み取り、UI と機能を対応付けます
- 物語の流れを設計します(ステージ 2)— プロンプトに触れる前に、15 秒のストーリー構成を作成します
- プロモーションに最適な画面を 3~5 枚選びます(物語上の役割に沿った順序にします)
- ロゴと画面をアップロードして、公開 URL を取得します
- 画面に合わせたプロンプトを作成します(テンプレート A または B)
- 1080p で生成します
ステージ 0.5 — アセットの確認
生成ツールを呼び出す前に、以下の両方のアセットが手元にあることを確認します。
| アセット | 必須 | 不足している場合 |
|---|---|---|
| 実際のアプリのスクリーンショット(実際に取得した画像を 1 枚以上) | はい | 停止してスクリーンショットを依頼する |
| ブランドロゴまたはアプリアイコン | はい | App Store から取得する場合は fetch_appstore_screens のアイコンを使用し、それ以外の場合は停止してロゴ/アイコンを依頼する |
どちらか一方でも不足している場合は、必要なものをユーザーに正確に伝え、返答を待ちます。実際のアセットがあることでティーザーの内容に根拠を持たせられます。テキストから動画を生成したプレースホルダーでは、Seedance が UI を作り出してしまいます。
次のことは避けてください。
- 画面が必要な場合に、代わりにテキストから動画を生成する
- 実際の参照画像なしで、プロンプトに架空の UI(「暗いダッシュボードに…」など)を記述する
- 「ひとまずプレースホルダーを使います」と言って先に進める
- アプリ名や説明から、アプリの見た目を推測して作り出す
許容される唯一の進め方は、ユーザーから実際のアセットを提供してもらうことです。MCP による取得やキャプチャに失敗した場合(App Store から何も返されなかった、ウェブサイトのスクリーンショットでエラーが発生したなど)は、何が起きたかを伝え、画面を手動で提供するようユーザーに依頼します。決して作り出してはいけません。
人物またはキャラクターのアセットに対するアバター種別の確認
アプリのスクリーンショットとアプリアイコンのみを、デフォルトのビジュアルの基準とします。App-sizzle は創業者やクリエイターの顔を扱うスキルではないため、画面やロゴが不足していてもユーザーのアバターで補うことはありません。
有料の generate_image_edit または generate_reference_video を呼び出す前に、ユーザー提供の画面、ロゴ、プロモーション画像、マスコット、創業者の写真、またはキャラクターのアセットに、加工や動画の参照に使われる目立つ人物またはキャラクターが含まれている場合に限り、このアバター種別の確認を実行します。何気なく顔が写り込んでいる通常のアプリのスクリーンショットの場合は、別のスクリーンショットを使うか、アップロード前に顔を切り抜いてください。
そのアセットに対して 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は、単独では停止する理由として不十分と見なします。実在の人物/写実的なルートより先にこの確認を実行してください。アバター種別がスタイライズ/イラストであっても、ちびキャラの Batman は Batman です。 - 実在の人物/AI 生成の写実的な人物 -> 正当なアプリのスクリーンショットまたはユーザー提供のプロモーション用アセットである場合に限り続行します。それ以外の場合は、アプリの UI を依頼してください。
- スタイライズ/イラスト -> スタイライズされたキャラクターは Seedance の信頼性を下げる可能性があることを明示的に警告したうえで続行します。ただし、不足している画面の代わりには使用しません。
- 商標登録済み/著作権で保護されたもの -> 生成前に停止します。次のメッセージを表示してください。
The supplied avatar appears to be a trademarked character ([X]). Most video providers will moderate this and refuse to generate. Pass --avatar <real-looking-photo-url> to override.App-sizzle では、アバターのオーバーライドを画面の代わりに使わず、IP に関わらないアプリのスクリーンショット/ロゴを依頼してください。
画面の取得
iOS App Store
Pika MCP の fetch_appstore_screens を使用してください。ローカルのスクレイパーは使用しないでください。完全な App Store URL、数値のアプリ ID、またはアプリ名の検索語を指定できます。
fetch_appstore_screens(
query: <app_store_url | numeric_app_id | search_term>,
country: "us",
max_screens: 10,
include_icon: true
)
期待される結果の形式:
{
"app_url": "https://apps.apple.com/...",
"metadata": { "name": "...", "subtitle": "...", "description": "...", "category": "...", "icon_url": "https://..." },
"icon": { "url": "https://cdn.pika.art/...", "source_url": "https://is...mzstatic.com/...", "filename": "appstore-icon.png", "mime_type": "image/png", "width": 1024, "height": 1024 },
"screenshots": [
{ "url": "https://cdn.pika.art/...", "source_url": "https://is...mzstatic.com/.../1290x2796bb.png", "filename": "appstore-screen-01.png", "mime_type": "image/png", "width": 1290, "height": 2796 }
],
"count": 1
}
fetch_appstore_screens がスクリーンショットを返さない場合は、エラーを報告し、実際のスクリーンショットを3~5枚とロゴ/アイコンをユーザーに依頼してください。Playwright/ヘッドレスでの App Store キャプチャに切り替えたり、UI をでっち上げたりしないでください。
App Store のアセットを取得したら、コア UI がわかる画面を3~5枚選びます。次の画面は除外してください。
- テキストのみの画面/スプラッシュ画面(UI がないもの)
- 空白状態や読み込み中の状態
- 顔が写っている画面(コンテンツポリシーに抵触する可能性があります)
画面選択の原則 — 視覚的なコントラストを最大化する。 選ぶ各画面は、ほかの画面とできるだけ見た目が異なるものにします。暗い背景と明るい背景、UI が密集した画面と写真中心の画面、細部のクローズアップと広いグリッド、ミニマルな画面と情報量の多い画面などです。すべての画面が似ていると、Seedance がそれらを視覚的にぼんやりと混ぜ合わせてしまいます。Dazz Cam がうまくいった理由は、3D カメラのグリッド、ポラロイドの出力、VHS パネル、魚眼レンズの球体という、まったく異なる4つの視覚世界を組み合わせていたことです。ティーザーが失敗するのは、同じ UI を少しずつスクロールした画面が4枚続く場合です。
Web App / Website(自動キャプチャ)
Pika MCP のキャプチャツールを使用してください。
capture_website(url="https://example.com", mode="screenshot")
# Returns image_url — use directly as a reference
含めるページ/ビューごとに1回呼び出します。
Local Files
ユーザーがパスを指定した場合は、Pika MCP を使って各ファイルをアップロードします(下記の「アセットのアップロード」セクションを参照)。
Stage 1 — アプリの分析
画面を取得したら、プロンプトの文章を一言でも書く前に、Claude のビジョン機能を使ってすべてのスクリーンショットを読み取ってください。これは最も重要な手順です。省略すると、ストーリー性のないありきたりなガラスの塊になってしまいます。
各スクリーンショットについて、次の項目を記録します。
- 表示されている UI — 例:「プロンプト候補が表示されたチャット入力欄」、「AI 編集チップが表示された動画タイムライン」、「生成されたクリップを表示するエージェントの結果カード」
- 表している機能 — 例:「作成の入口」、「作業中のエージェント」、「出力/共有」
- 感情的な印象 — 力強さを感じる瞬間か、手軽さを感じる瞬間か、ひらめきを感じる瞬間か
また、fetch_appstore_screens の結果、またはユーザーから提供された説明から、アプリのメタデータも取得します。
- アプリ名、サブタイトル、1行の価値提案
- カテゴリとターゲットユーザー
Stage 1 の成果物: 番号付きの機能マップ:
Screen 1 — [filename]: Shows [X UI]. Represents [Y feature]. Moment: [hook/build/reveal].
Screen 2 — [filename]: ...
...
マップを作成したら、各画面の視覚的な独自性を評価します。マップしたほかの画面と、見た目がまったく異なっているでしょうか。色のパレット、レイアウトの情報密度、主題がそれぞれ異なる画面を優先します。優れたセットは視覚的な幅が最大限に広く、フックがビルドとまったく異なり、ビルドがリビールとまったく異なる印象になります。
このマップを書き出すまで、Stage 2 に進まないでください。
Stage 2 — ナラティブ設計
15秒のプロモには、物語の軸が必要です。プロンプトテンプレートに触れる前に、ストーリーの流れを設計します。
4つのビート構成
| ビート | 秒数 | 役割 | 対応する画面 |
|---|---|---|---|
| フック | 0–3秒 | 注目を集める — 最もドラマチックな UI の瞬間、または解決する課題を見せる | 最も視覚的に印象的な画面 |
| ビルド | 3–10秒 | ユーザーの行動の順序に沿って、機能を紹介する | 連続した2~3画面 |
| リビール | 10–13秒 | 引きの映像または製品の全体像 — 「なるほど、こういうことができるのか」と伝わる瞬間 | ワイドショット、または最も全体像がわかる画面 |
| ロゴ | 13–15秒 | ブランドを印象づける — ワードマークが現れ、アクセントカラーが脈打つ | ロゴ(@Image6 または最後の参照画像)。COMING SOON は生成後にテキストオーバーレイとして追加します。 |
ストーリーアークの種類 — アプリに合わせて1つ選ぶ
| アーク | 使用する場面 | 構成 |
|---|---|---|
| 課題 → 解決策 | 生産性アプリ/ツールアプリ | フック=課題を示す UI → ビルド=アプリが課題を解決 → リビール=結果 |
| 機能紹介 | 多機能なアプリ | フック=最も印象的な機能 → ビルド=さらに2つの機能 → リビール=全体像 |
| ユーザー体験 | 一般消費者向けアプリ/ライフスタイルアプリ | フック=入口 → ビルド=体験 → リビール=成果 |
| 変化 | ビフォー/アフター形式のアプリ | フック=「変化前」 → ビルド=プロセス → リビール=「変化後」 |
Stage 2 の出力
生成する前に、アークを明示的に書き出します:
Arc type: [Problem→Solution / Feature Parade / Journey / Transformation]
Hook (0-3s): Screen [N] — [what happens] — camera: [extreme close-up on X]
Build (3-10s): Screen [N] → [N] → [N] — [what each reveals] — camera: [whip pan / orbital / etc.]
Reveal (10-13s): Screen [N] — [what it shows] — camera: [pull-back to show full product]
Logo (13-15s): @Image[N] — wordmark materializes whole in a burst of [accent color] light and holds. Do not ask the video model to render the `COMING SOON` copy; it is added later as a post-generation text overlay.
アークを定義するまでは、Seedance のプロンプトを書かないでください。
Stage 2.5 — GPT-Image-2 による強化
アークを定義し、3~5 個の画面を選んだら、Seedance にアップロードする前に、それぞれを GPT-image-2 で強化します。これにより、圧縮されたウェブサイトのキャプチャや App Store のサムネイルが、より鮮明で忠実度の高い参照画像になります。
選択した画面(ロゴ/エンドカードの参照画像を含む)ごとに:
result = generate_image_edit(
provider="gpt-image-2",
prompt="High quality version, preserve all content exactly",
images=["<original_cdn_url>"],
aspect_ratio="16:9", # match the capture — use 9:16 for portrait screens
quality="medium",
)
# use result.image_url (or result.url) as the Seedance reference
ルール:
- プロンプトは、表示されているとおりにそのまま使用してください。短く、説明を加えないでください。画像の内容を説明すると、GPT-image-2 が新しい詳細を幻覚してしまいます。
aspect_ratioは元のキャプチャに合わせてください(デスクトップ=16:9、モバイル=9:16)。- すべての強化処理を並列で実行してください(画面ごとに 1 回呼び出します)。
- Seedance の呼び出しでは、元の画像ではなく、強化後の URL を
reference_images配列に使用してください。 - Stage 1 の機能マップの説明は変更しないでください。強化後の画像でも元の内容が保たれるため、その説明は元の内容を表しています。
Stage 3 — プロンプトの作成
機能マップ(Stage 1)とアーク(Stage 2)を用意したら、Seedance のプロンプトを作成します。すべての @Image の説明には、機能マップに記載された実際の UI コンテンツを含めてください。「コントロールのあるモバイルインターフェース」のような一般的な説明は決して書かないでください。
アプリのスクリーンショットを見てテンプレートを選んでください。デフォルトでリキッドグラスを選ばないでください。 アプリの個性に応じて、次のいずれか 1 つだけを読んでください。もう一方は読み込まれません。
- テンプレート A — シネマティック・ナラティブ(デフォルト。生産性、AI、クリエイティブ、ソーシャル、食品、ゲーム):
references/template-a-cinematic.mdを読みます。実証済みの BEAT 構成テンプレートと、検証済みの例が含まれています。 - テンプレート B — リキッドグラス(写真、カメラ、フィルターのアプリのみ。レンズ/フィルターの比喩が適切な場合):
references/liquid-glass.mdを読みます。テンプレート B の骨組みと、ガラス変換に関する用語が含まれています。
アクセントカラーは必ずブランドの色を使います。アイコンと UI の主要色を確認し、色を勝手に作らないでください。
両方のテンプレートに共通するルール
- すべての
@Imageの説明は Stage 1 の機能マップから直接引用します。 - カメラの指示は Stage 2 のアークから直接引用します。
- 「アプリのインターフェース」や「モバイル画面」と書かず、具体的に説明します。
- 200 語未満にします。
- 具体性が重要な理由: Seedance は
@ImageNの説明を主な指示として使用します。「暗いチャットインターフェース」と「レトロなタイムスタンプを重ねた、街路、スケートパーク、海岸の夕焼けを並べた VHS 風の 3 パネルグリッド」では、まったく異なる結果になります。Stage 1 の機能マップから、視覚的に最も具体的な詳細をそのまま使ってください。
動画の生成
主な方法 — Seedance:
generate_reference_video(
provider="seedance",
reference_images=["<url1>", "<url2>", "<url3>", "<url4>", "<url5>"], # 3–5 screens + icon
prompt="<prompt using @Image1 … @Image5 tokens>",
resolution="1080p", # always
duration=15, # always
sound=True, # always
aspect_ratio="16:9", # or 9:16 / 1:1 per user request
seed=<int>, # set one; reuse it for content-policy recovery
)
Seedanceの生成音声モデレーションからの復旧
Seedanceが生成を完了した後に、レスポンス本文にtype: "content_policy_violation"、reason: "partner_validation_failed"、loc: ["body", "generated_video"]、msg: "Output audio has sensitive content."を含む422を返した場合、生成音声のモデレーションによる復旧可能な誤検知として扱います。
再試行の上限:生成音声の復旧では、Seedanceの最初の呼び出しが失敗した後に行える復旧用レンダリングは最大3回です。内訳は、sound=Falseでのプローブ1回、sound=Trueでのリプレイ1回、Klingへのフォールバック1回です。この上限に達したら、停止するか、ドキュメントに記載されたとおりに成功した無音URLをルーティングしてください。Seedanceのプローブを続けないでください。
- 同じプロンプトと
reference_imagesを使用し、同じseedのまま、sound=Falseで再試行します。 - 無音プローブが成功した場合、同じプロンプトと参照画像のセットを使用し、同じシードのまま、
sound=Trueで再試行します。 sound=Trueのリプレイが成功した場合、復旧した音声ありのURLをStage 4のgenerated_teaser_urlにルーティングします。無音プローブのURLはデバッグ用のコンテキストとしてのみ保持します。- 無音プローブが失敗した場合、動画または参照画像のモデレーションによる失敗として扱い、Klingにフォールバックします。
- 無音プローブは成功したものの、
sound=Trueのリプレイが再び失敗した場合、Klingへのフォールバックを1回実行します。Klingが利用できない場合は、無音URLをStage 4のgenerated_teaser_urlにルーティングし、生成音声のモデレーションが依然として不安定だったことを明記します。
この復旧手順では、プロンプト、参照画像、アスペクト比、長さ、シードを変更しないでください。いずれかを変更すると、生成音声のみがモデレーションを引き起こしたかどうかを検証するのではなく、無音プローブが新たな生成になってしまいます。
Seedanceのタイムアウトからの復旧
Seedanceが15 minの合計ポーリング上限に達する前に終端タイムアウトを返した場合、プロンプトまたはコンテンツの問題ではなく、プロバイダーのキュー飽和として扱います。seedance timed out after 900sやseedance timed out after 1200sなど、プロバイダーのタイムアウト文字列が返るまで待たないでください。
この場合、選択した参照画像と同じビート構成を使い、duration=15、sound=True、quality_mode="pro"を指定してKlingにフォールバックします。Klingを呼び出す前に、プロンプト内の@ImageNトークンを<<<image_N>>>に変換してください。
合計15 minに達した場合は、上記のポーリング規約に従ってください。終端状態ではないタスクをキャンセルし、元の処理がまだアクティブな可能性がある状態でフォールバックを開始するのではなく、失敗を通知してください。
ユーザーがSeedanceを待つよう明示的に依頼しない限り、タイムアウト後にSeedanceの再試行を続けないでください。タイムアウト経路では、ローンチデモに使える時間予算をすでに消費しています。プロバイダーの切り替えが、ドキュメントに記載された復旧方法です。
フォールバック — Kling(音声以外のpartner_validation_failedまたはinsufficient_balance):
generate_reference_video(
provider="kling",
reference_images=["<url1>", "<url2>", "<url3>", "<url4>", "<url5>"],
prompt="<prompt using <<<image_1>>> … <<<image_5>>> tokens>",
quality_mode="pro", # = 1080p on Kling (NOT resolution=)
duration=15,
sound=True,
aspect_ratio="16:9",
)
Seedanceトークン: @Image1 … @Image5 | Klingトークン: <<<image_1>>> … <<<image_5>>>
Seedanceの制約:720pに制限されるため、fast=Trueは指定しないでください。Seedanceでは拒否されるため、negative_promptは指定しないでください。この経路では15秒に固定されるため、auto_durationは指定しないでください。
Klingの制約:1080pにするには、quality_mode="pro"を使用してください。Klingではresolution=は拒否されます。
Kling のキュー再登録/引き継ぎからの復旧
Kling のフォールバックは非同期です。generate_reference_video(provider="kling") が task_id を返した場合は、上記の長時間実行ポーリングの仕様に従い、タスクが終端状態になるまで追跡してください。
task_status が status: queued を返し、statusMessage に Worker handoff: task was requeued for retry on another worker. が含まれている場合は、レンダリング失敗ではなく、ワーカーの再起動に伴う引き継ぎとして扱ってください。task_status(task_id) のポーリングを続けてください。次のワーカーが同じタスクを引き継ぐはずです。
statusMessage が Kling is at capacity で始まる場合は、プロバイダーの空き待ちとして扱ってください。lastUpdatedAt が引き続き更新され、タスクが合計15分の上限内である間は、同じタスクのポーリングを続けてください。
元のタスクが queued または running の間は、Kling に重複リクエストを送信しないでください。重複リクエストはプロバイダーのクォータを消費し、成果物の出所を不明瞭にする可能性があります。
lastUpdatedAt が更新されないまま status が10分を超えて queued のままの場合は、task_id、status、statusMessage、lastUpdatedAt を記録し、合計15分の上限まで同じタスクを続けてください。合計15分に達したら、task_cancel({task_id}) で停止中の元のタスクをキャンセルし、失敗を伝えてください。この経路では、新しい Kling リクエストを再試行しないでください。有料呼び出しの後にプロバイダーを変更したり、再送信したりすると、二重課金や成果物の出所が不明瞭になるおそれがあります。
アセットのアップロード(ローカルファイル → 公開 URL)
ユーザーからローカルファイルのパスが提供された場合は、生成を呼び出す前に公開 URL に変換してください。
- ファイルサイズと MIME タイプを読み取ります。
upload_asset(filename, mime_type, size_bytes)を呼び出します。- ホストクライアントのファイルアップロード機能を使って、返された
presigned_urlにバイトデータをアップロードします。 - 生成呼び出しでは、返された
public_urlを参照 URL として使用します。
対応している MIME タイプ:image/png、image/jpeg、image/webp、video/mp4、audio/mpeg、audio/wav
ステージ4 — 決定論的な「COMING SOON」オーバーレイ
Seedance や Kling に COMING SOON のレンダリングを依頼しないでください。動画モデルは新しいタイポグラフィ、特にすべて大文字の CTA テキストを正しく描画できないため、最後の2秒には生成後のテキストオーバーレイとして、決定論的な COMING SOON オーバーレイを使用します。
Seedance または Kling から15秒のティーザー URL が返された後、次を呼び出してください。
edit_text_overlay(
video_url=<generated_teaser_url>,
text="COMING SOON",
position="bottom_center",
font_size=56,
font_color="white",
start_s=13,
end_s=15,
)
edit_text_overlay が { task_id } を返した場合は、task_status をポーリングし、completed、failed、または cancelled に達するまで待ってから、返された URL を取り出してください。返された URL を final_url として保存します。オーバーレイの呼び出しが失敗した場合は、その失敗と、診断用プレビューとしてオーバーレイ前のティーザー URL を提示してください。唯一の COMING SOON テキストが動画モデルによって生成されたティーザーは納品しないでください。
アスペクト比のバリエーション
YouTube、Reels/TikTok、正方形フィード向けに、個別に生成する費用をかけずに同じアプリのティーザーを使いたい場合は、任意のvariants=16:9,9:16,1:1を使用します。単一出力の略記として従来のaspect=を使い続けます。variantsが指定されている場合、ユーザーが1つのバリエーションのみを明示的に要求しない限り、ソースのアスペクト比にはネイティブの16:9を使用します。
ネイティブの16:9ティーザー用にgenerate_reference_videoを1回呼び出し、続けてStage 4を1回実行してfinal_urlを生成します。追加のバリエーションのために、スクリーンショットの取得、GPT-image-2による高品質化、Seedance/Klingでの生成、その他の高コストなプロバイダー呼び出しを再実行しないでください。
final_urlができたら、フラットなvariant_urlsオブジェクトを作成します。
{
"16:9": "<final_url>",
"9:16": "<edit_reframe url>",
"1:1": "<edit_reframe url>"
}
16:9の場合、variant_urls["16:9"] = final_urlを設定します。9:16と1:1の場合は、edit_reframe(video_url=final_url, target_aspect="<aspect>", fill_mode="blur")を呼び出し、中央で切り抜くのではなく、ぼかした背景の上にティーザー全体を表示します。edit_reframeは、低コストな最終合成/リフレームの段階として扱います。リフレームに失敗した場合は、成功したバリエーションのURLに加えて、失敗したアスペクト比とツールエラーを返します。高コストな生成を再送信しないでください。
注意 — バリエーションにはぼかし背景が使われます。
9:16と1:1では、ネイティブの16:9ティーザー全体をぼかした背景の上に表示します。見やすさを保てるよう、主要な被写体(製品、ロゴ、見出し)は中央に配置します。ただし、これらの出力を切り抜きバリエーションと説明しないでください。
飛行後の品質チェック
成功を宣言する前に、final_urlに対してanalyze_mediaを呼び出し、構造化された判定を求めます。variantsが要求されている場合は、各variant_urlsの値についても同じチェックを実行し、警告はアスペクト比ごとにキー付けします。
Return JSON only: {
"verdict": "clean" | "degraded" | "catastrophic",
"observations": string[],
"quality_warning": string | null,
"re_roll_suggestion": string | null
}
Check that COMING SOON is visible and spelled correctly in the final overlay, the brand color is present, the app screen / product screen remains readable, and there are no black frames or wrong-product shots.
verdictがcleanの場合は、最終URLを通常どおり返します。verdictがdegradedの場合は、ユーザーが公開前に確認できるよう、最終URLとquality_warningを返します。verdictがcatastrophicの場合は、処理が完了したとしないでください。成功を宣言する代わりに、判定結果とre_roll_suggestionを提示します。
結果の受け渡し
主要な成果物として、Pika CDNの最終URLを返します。variantsが要求されている場合は、同じ応答でフラットなvariant_urlsオブジェクトも返します。ホスト側のクライアントでローカルメディアマーカーが必要な場合は、CDN URLにアクセスできることを確認してから、このスキルのフロー外でローカルプレビューを作成します。
生成が非同期で完了する場合: 動画が終端状態に達するまで、MCPツールが返すステータスハンドルを追跡してから、最終URLを渡してください。
プロンプトガイド
プロンプトはStage 1+2の出力であり、出発点ではありません。 想像でテンプレートを埋めないでください。作成した機能マップと構成に基づいて埋めてください。Stage 1の分析をせずに書いたプロンプトでは、ありきたりなガラスの塊が生成されます。
カメラ用語
具体的なカメラ用語を使ってください。Seedanceはこうした指定に反応します。
| 用語 | 効果 |
|---|---|
extreme macro close-up on [specific element] | ガラスの縁、ボタン、アイコンなどを捉える、細部に迫ったショット |
crash zoom into [element] | 素早いズームインで、勢いを生み出す |
whip pan to | モーションブラーを伴う、素早い横方向のカット |
orbital sweep around | 浮遊するパネルの周りを360°回り込む |
push-in drift | ゆっくりとした、シネマティックなドリー移動 |
pull-back to reveal | 定番の製品登場演出。全体の形を見せる |
hard cut to black | ロゴの前に入れる、すっきりとした間 |
速いカットとゆっくりした移動を交互に使います。速いカットだけでは混沌とした印象になり、ゆっくりした移動だけでは退屈になります。
(ガラス変形の用語はreferences/liquid-glass.mdにあります。Template Bのパスでのみ使用します。)
デバイスのフレーミング
製品を撮影する場合は、デバイスを黒い背景に固定し、環境の中に配置しないでください。
# Floating desktop screens (SaaS / desktop apps)
Show the desktop screens floating in 3D space on a pure black background, tilted at
slight angles like a MacBook product shot. The UI elements on screen become translucent
glass with reflections and refractions. No text, no logos, no words.
# iPad reveal
An iPad Pro floating in empty black space, tilted at a cinematic angle like an Apple
product shot. The iPad is a real solid device with visible bezels — only the screen
content has the glass effect. The device slowly rotates. No text, no logos.
# MacBook
A MacBook Pro floating in empty black space, open at a cinematic angle. The screen
displays [content]. Light catches the aluminium edges. No text, no logos.
参照画像数のガイド
すべての実行時間は15秒、解像度は1080pです。ストーリー展開に応じて、3~5枚の画面を選択してください。
| 参照画像数 | 使用例 |
|---|---|
| 3 | 標準 — 各ビートに1画面(導入/展開/見せ場)+@Image4としてアイコン |
| 4 | 展開のビートを2つ+導入+アイコン |
| 5 | 機能が豊富な場合 — 導入+展開のビートを3つ+アイコン。5枚を超えないでください。 |
黄金律:動画約3秒につき参照画像を1枚。
重要なフレーズ
これらのフレーズは、実証済みのプロンプト/フローの要です。スキルを簡略化するときも残してください。
| フレーズ | 場所 | 重要な理由 |
|---|---|---|
High quality version, preserve all content exactly | GPT-image-2による補正工程 | 圧縮アーティファクトを除去しながら、補正工程でUIが勝手に作られるのを防ぎます。 |
Do NOT write the Seedance prompt until this arc is defined | ステージ2.5のゲート | 選択した画面に基づかない、ありきたりなモーションプロンプトを防ぎます。 |
The prompt is the output of Stages 1 + 2, not a starting point | プロンプト作成ガイド | 想像でテンプレートを埋めるのではなく、画面の特徴マップとストーリー展開を使うようエージェントに促します。 |
pure black background / floating in empty black space | デバイスのフレーミングプロンプト | 幻覚された環境ではなく、アプリのUIに製品ショットの焦点を合わせます。 |
materializes whole / crystallizes as a single form / fades in as a complete element | ロゴを見せる表現 | 文字化けしたブランドテキストの原因となる、文字単位でのロゴ構築を防ぎます。 |
実行時の想定
通常の実行時間は4~8分です。最初の有料generate_image_edit補正呼び出しより前に行う生成前ステージは、すべて上記の5分ガード内に収めてください。収まらない場合は続行せず、準備状況を部分的に報告してください。
| ステップ | 経過時間 | 備考 |
|---|---|---|
| アセットの取得 | 10~60秒 | fetch_appstore_screens経由のApp Store取得。ウェブサイトのキャプチャ時間はページの読み込み状況によります |
| 画面分析+ストーリー展開 | <=2分 | プロンプト/分析のパスは最大2回に抑えてください |
| GPT-image-2による補正 | 30~90秒 | 5分の生成前ガード内に収まる場合に限り、選択した画面を並列処理してください |
| Seedance生成 | 3~5分 | 生成音声のモデレーションからの復旧では、無音でのプローブを1回行った後、同じシードで音声を再生します |
| Klingへのフォールバック | 5~15分 | 容量待ちまたはワーカーへの引き継ぎ中は、一時的にqueuedと表示されることがあります。Klingのキュー/引き継ぎ復旧手順に従ってください |
| ダウンロードの確認 | <30秒 | 納品前のローカルチェック |
エンジンの選択:Seedanceを優先し、Klingにフォールバック
洗練されたモーショングラフィックスの参照画像や1080pのアプリ紹介動画をうまく扱えるため、Seedanceを既定とします。モデレーション、残高、またはSeedanceのタイムアウトによる失敗時は、一部の画面コンテンツに対する制限が緩やかで、1080pにquality_mode="pro"を使うKlingにフォールバックします。
失敗モード
generate_image_edit / generate_reference_video / upload_assetで上流の5xxエラーから復旧する
有料の生成またはアセット関連のMCP呼び出しが次のいずれかを返した場合:
code: "provider_5xx"かつretry_class: "retry_after_backoff"- または、上流プロバイダー(OpenAI、Seedance、Kling、ストレージ)からのHTTP 502 / 503 / 504
次の手順を実行してください。
- 5秒待ちます。
- 同じ引数を完全にそのまま使って、同じMCPツールを再度呼び出します。選択した画面、プロンプトテキスト、シード、
sound、プロバイダー、画像の順序、アップロードするペイロードは変更しないでください。 - 再試行でも5xxエラーが発生した場合は中止し、次の内容をユーザーに伝えてください:「プロバイダーから一時的な上流エラーが2回返されました。1~2分後にもう一度お試しください。通常は自然に解消されます。」
再試行は1回を超えて行わないでください。5xxをコンテンツまたはモデレーションの問題として扱わないでください。アプリのストーリー展開を書き直しても障害には対処できず、クレジットを消費するおそれがあります。
上流の 4xx/moderation_blocked からの復旧
スクリーンショットの品質を高める際に、provider="gpt-image-2" を指定した generate_image_edit が上流の 4xx または moderation_blocked を返した場合:
- 同じプロンプトで再試行しないでください。モデレーションや大半の 4xx による検証エラーは、同じ条件では結果が変わりません。
- 品質を高めなくても参照画像を使用できる場合は、品質向上処理を省略し、元の画面を使用してください。品質が低すぎる場合は、品質向上処理に限り、フォールバックプロバイダーを一度だけ試してください。選択したアプリ画面や Seedance のプロンプトは変更しないでください。
- フォールバックプロバイダーも失敗した場合は、ユーザーに次のメッセージを表示してください:"Image provider declined this screenshot-enhancement prompt. Provide cleaner screenshots, crop faces/recording UI, or continue with the original screens."
Seedance で音声を含まないコンテンツがコンテンツポリシー違反となった場合は、以下に記載されている Kling のフォールバックを使用してください。これは、このスキルにおける動画のフォールバックプロバイダーパスです。
上流の 429(レート制限)からの復旧
上流のいずれかがバックオフの指示とともに HTTP 429 を返した場合:
- 指示された時間、または指示がない場合は 30 秒待機します。
- 引数をまったく変更せず、同じ MCP ツールを再度呼び出します。
- 再試行は一度までとします。それでも 429 が返された場合は、中止してレート制限のメッセージを表示してください。有料レンダリングを重複して送信してはいけません。
capture_website が空を返す/ページが読み込まれない場合
ウェブサイトモードで capture_website を呼び出し、200 が返されたにもかかわらず action_bboxes が空、または recording_viewport が 0x0 の場合:
- 再試行しないでください。キャプチャ環境でサイトのレンダリングに失敗しています。
- 次のメッセージを表示してください:"Could not capture . The page may be blocked / paywalled / require auth. Please provide 3-5 screenshots and a logo/icon instead."
upload_asset のネットワーク/認証エラー
ローカルの画面、ロゴ、オーバーレイをホストされた URL に変換する際に upload_asset が失敗した場合、reference_images や HTML でローカルパスを使用して処理を続けないでください。上記の 5xx または 429 の場合に限り、一度だけ再試行してください。auth_error、未対応の MIME タイプ、ネットワーク障害、またはアップロードの再試行後も失敗する場合は、処理を中止し、ホストされた PNG/JPEG/WebP アセットを求めてください。
上限を超えて長時間実行される task_status
各非同期 MCP 呼び出しは、インライン結果またはポーリング用の {task_id, status} を返します。タスクが停止していると判断する前に、次の上限を使用してください。
- Seedance i2v:呼び出しごとに 10 分
- Kling フォールバック:呼び出しごとに 15 分
- gpt-image-2 の高品質設定:3 分
- アップロード/編集/レンダリングのヘルパー:5 分
プロバイダーの上限の 1.5 倍、またはスキル固有のハードポーリング上限(上記の長時間実行タスクの task_status ポーリング契約にある合計 15 分の上限を含む)のうち、早い方を使用してください。task_status がこの早い方の上限を過ぎても status: "processing" または status: "queued" を返す場合は、task_cancel({task_id}) を呼び出し、次のメッセージを提示してください:「プロバイダーの処理に異常に時間がかかっているため、中止します。もう一度お試しください。」
| 症状 | 原因 | 対処方法 |
|---|---|---|
fast=True と resolution="1080p" の併用 | Seedance の高速モードは 720p が上限です | fast を削除し、resolution="1080p" は維持します |
negative_prompt が拒否される | Seedance はこのフィールドを受け付けません | 「滑らかな動き、安定したカメラ」など、肯定的な表現を使用します |
Seedance の生成音声のモデレーション:content_policy_violation/partner_validation_failed、generated_video、「Output audio has sensitive content.」 | 機微な内容を含まないアプリ紹介動画の参考素材でも、誤検出されることがよくあります | 上限付きの生成音声リカバリー手順に従います。同じシードで sound=False のプローブを実行し、同じシードで sound=True を再試行した後、Kling フォールバックは最大 1 回まで実行します |
seedance timed out after ... などの Seedance タイムアウト | プロバイダーのキューが飽和しているか、テールレイテンシーがツールの予算を超えています | Kling フォールバックを実行します。ユーザーが明示的に待つよう求めない限り、Seedance の再試行を続けないでください |
動画で Seedance の partner_validation_failed が発生する | 画面コンテンツに録画 UI、有名人の顔、または同様のモデレーションのトリガーが含まれています | provider="kling" に切り替え、トークンを <<<image_N>>> に変換します |
| スクリーンショット内の顔がコンテンツポリシーに抵触する | スクリーンショットに実在の人物が含まれています | アップロード前に顔を切り取るか、Kling を使用します |
| 参照画像が 6 枚以上だと品質が低下する | モデルが参照画像を混ぜすぎています | 参照画像は 3~5 枚に抑え、約 3 秒ごとに 1 枚を目安にします |
| プロンプトの末尾が無視される | プロンプトが約 200 語を超えています | ビート構成と具体的な UI の詳細に絞って短くします |
| 出力のテキストが文字化けする | 動画モデルに新しいテキストのレンダリングを求めています | テキストは既存の参照画像内のコンテンツとして維持し、新しいブランディングは後処理で重ねます |
| ロゴの表示で字形が幻覚される | 「組み立てる/構築する」などの表現が字形単位のレンダリングを引き起こします | 「全体として現れる」、「単一の形として結晶化する」、または「完全な要素としてフェードインする」を使用します |
インライン結果ではなく { task_id } が返される | 長時間の生成がインライン予算を超えました | 長時間実行タスクのポーリング契約に従います。task_status({task_id}) をポーリングし、60 秒ごとに進捗メッセージを出力し、合計 15 分でキャンセルして状況を提示します。完了時は result.structuredContent を取り出します |
Kling タスクが以前は実行中だったのに status: "queued" を返す | ワーカーの引き継ぎ、またはプロバイダーの空き待ちです | Kling のキュー/引き継ぎリカバリー手順と長時間実行タスクのポーリング契約に従います。重複して送信しないでください。終端状態になるまでポーリングを続けるか、合計 15 分でキャンセルして状況を提示します |
Kling が resolution= を拒否する | Kling は別の品質設定を使用します | quality_mode="pro" を使用します |
| App Store のアイコン URL がプロモーション画像を指している | App Store のメタデータのフォールバックでフィーチャー画像が見つかりました | fetch_appstore_screens が返す icon.url を優先します。ない場合は、ロゴ/アイコンファイルを依頼します |