关于 app-sizzle
此 Skill 使用真实应用截图及 Logo 或图标制作 15 秒预告片。它会分析截图、编排简短叙事、增强画面,并生成 1080p 视频。
主要功能
- 01生成 15 秒应用预告片
- 02获取真实应用截图
- 03将截图对应到应用功能
- 04增强选定的截图
- 05生成 1080p 视频
适用场景
- 01制作简短的应用推广片
- 02根据 App Store 截图制作预告片
- 03按顺序展示应用核心界面
MCP 相关
使用 Pika MCP 工具获取 App Store 截图,并生成或编辑图像与视频。生成前必须具备真实截图和 Logo 或应用图标。
安装
复制下面的命令,在终端中运行。
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 秒应用预告片。每个选中的界面都会先经过 GPT-image-2 处理,再交给 Seedance,这样压缩后的截图就能成为更清晰的参考图,同时不会凭空编造 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。跳过 fast=true,因为它会将 Seedance 限制在 720p。时长和声音由此技能负责,因此用户只需提供应用身份信息、界面、Logo 和宽高比。
视觉美学应源于应用的个性,而不是默认采用流动玻璃风格。Agent 会从应用图标、截图和类别中领会应用的灵魂,然后选择一种处理方式。用户提供应用身份信息和素材;其他所有内容(模式、提示词、镜头、风格)均由 Agent 决定。
生成前的时间限制
在具备所需的应用身份信息以及界面/Logo 来源、并通过费用关卡后,于技能启动时启动计时器。等待用户回复 proceed 或等待非交互式调用者提供 cost_ack=proceed 的时间不计入准备时间,也不会触发此限制。如果缺少所需输入或真实素材,则在阶段 0 或阶段 0.5 停下并索取素材;不要绕过素材关卡。对于已备齐所需输入的运行,首次付费生成调用是 GPT-image-2 的 generate_image_edit 增强环节,必须在技能启动后 5 分钟内调用。如果技能启动后 5 分钟内尚未调用首次 generate_image_edit 增强,则在任何付费生成调用之前停止,并报告 failed_pre_generation_timeout,同时提供目前已有内容:已获取的素材、选定的界面、功能图谱、叙事弧线、增强提示词状态、Seedance 提示词草稿(如有),以及具体阻碍。不要继续完善分析、增强措辞、提示词措辞或镜头描述。
每个准备阶段结束后,以及付费生成调用之前,打印一条单行进度检查点:
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 和开始时间。
- 紧密循环调用
task_status({task_id}),直到任务进入终态(completed | failed | cancelled)。不要手动休眠,也不要使用 Bash 轮询;工作线程会让每次状态调用保持打开。 - 当状态为
queued、running或processing时,每 60s 输出一行可见的进度信息:Seedance i2v queued for {N}m {S}s... still processing。轮询 Kling、GPT-image-2、overlay 或 edit 任务时,替换提供方/阶段标签。 - 状态为
completed时,提取返回的结果 URL 并继续。 - 状态为
failed或cancelled时,向用户说明失败情况,包括task_id、状态和最后一条状态消息。 - 从最初提交起总计 15 min 后,如果任务仍未进入终态,则调用
task_cancel({task_id}),然后向用户说明失败情况。如果取消操作报告任务已进入终态,则再调用一次状态查询,并报告该终态结果。 - 当原任务仍处于
queued、running或processing状态时,不要提交重复请求。
模式:参考图转视频
首选:generate_reference_video(provider="seedance", resolution="1080p"),使用 3–5 张截图,并将应用图标/Logo 作为最后一张参考图。
出现以下情况时,改用 provider="kling", quality_mode="pro"(即 1080p):
- Seedance 返回非音频的
partner_validation_failed(名人面孔、屏幕录制 UI) - Seedance 返回
insufficient_balance - Seedance 一直处于排队/运行状态,直至返回超时,例如
seedance timed out after ...
不要将生成音频审核视为立即切换到 Kling 的理由。请先查看 Generate Video 中的 Seedance 生成音频审核恢复手册。
Kling 提示词使用 <<<image_1>>> … <<<image_5>>> 标记,而非 @Image1 … @Image5。省略 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.
如果触发消息或先前上下文已提供部分信息,则在调用任何工具之前,只询问缺少的必填项。用户只需回答这些问题;由 Agent 决定模式、提示词、镜头和风格。
用户回答后,Agent 将:
- 获取屏幕素材(MCP App Store 抓取/网站截图/上传本地文件)
- 分析每个屏幕(阶段 1)— 阅读每张截图,将 UI 与功能对应起来
- 设计叙事弧线(阶段 2)— 在处理提示词之前,先构建 15s 的故事结构
- 选择最适合宣传视频的 3–5 个屏幕(按叙事角色排序)
- 上传 Logo 和屏幕素材,以获取公开 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:
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均不足以单独成为停止理由。在实拍/风格化路线之前运行此检查。即使是 Q 版 Batman,只要avatar_type为 stylized/illustrated,仍然是 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 资源后,挑选 3–5 个能展示核心 UI 的画面。跳过:
- 纯文本/启动画面(无 UI)
- 空白或加载状态
- 有人脸的画面(可能触发内容政策)
画面选择原则——最大化视觉反差。 每个选定的画面都应尽可能与其他画面不同:深色与浅色背景、UI 密集与照片为主、微距特写与宽幅网格、极简与繁复。如果所有画面看起来都很相似,Seedance 会把它们混成一团视觉模糊。Dazz Cam 的成功之处:3D 相机网格 + 拍立得成片 + VHS 面板 + 鱼眼球体——四个截然不同的视觉世界。预告片失败的原因:四个画面都是同一 UI 在略有差异的滚动位置。
Web 应用 / 网站(自动捕获)
使用 Pika MCP 的捕获工具:
capture_website(url="https://example.com", mode="screenshot")
# Returns image_url — use directly as a reference
每个要纳入的不同页面/视图都调用一次。
本地文件
用户提供路径 → 通过 Pika MCP 上传每个文件(见下方“资源上传”部分)。
第 1 阶段——应用分析
获取画面后,在写提示词的任何内容之前,先用 Claude 的视觉能力阅读每张截图。这是最重要的一步——跳过它,你得到的就会是一个没有故事的通用玻璃团块。
对每张截图,记录:
- 显示的 UI——例如,“带有建议提示词的聊天输入框”“带有 AI 编辑标签的视频时间线”“显示生成片段的 Agent 结果卡片”
- 代表的功能——例如,“创作入口”“Agent 正在处理”“输出/分享”
- 情绪基调——这是彰显能力的时刻、轻松上手的时刻,还是恍然大悟的时刻?
同时从 fetch_appstore_screens 的结果或用户提供的描述中提取应用元数据:
- 应用名称、副标题、一句话价值主张
- 类别和目标用户
第 1 阶段的输出: 编号功能图:
Screen 1 — [filename]: Shows [X UI]. Represents [Y feature]. Moment: [hook/build/reveal].
Screen 2 — [filename]: ...
...
完成功能图后,为每个画面评估视觉独特性:它看起来是否与其他已整理的画面截然不同?优先选择配色、布局密度和主题各异的画面。优秀的组合应拥有最大的视觉差异——开场钩子应与构建段截然不同,构建段又应与揭示段截然不同。
在写出此功能图之前,不要进入第 2 阶段。
第 2 阶段——叙事架构
每支 15 秒的宣传片都需要一条主线。动手填写提示词模板之前,先设计故事弧线。
四拍结构
| 节拍 | 秒数 | 作用 | 使用哪些画面 |
|---|---|---|---|
| 开场钩子 | 0–3 秒 | 抓住注意力——展示最具冲击力的 UI 时刻或正在解决的问题 | 视觉冲击力最强的画面 |
| 构建 | 3–10 秒 | 按照合乎逻辑的用户旅程顺序演示功能 | 依次展示 2–3 个画面 |
| 揭示 | 10–13 秒 | 拉远镜头或展示产品概览——呈现“原来它是这么用的”这一刻 | 广角镜头或最完整的画面 |
| 徽标 | 13–15 秒 | 品牌定版——字标显现,强调色脉冲 | 徽标(@Image6 或最后一张参考图)。COMING SOON 会在之后作为生成后文字叠加添加。 |
故事弧线类型——根据应用选择
| 弧线 | 适用场景 | 结构 |
|---|---|---|
| 问题 → 解决方案 | 效率/工具类应用 | 开场钩子 = 痛点 UI → 构建 = 应用解决问题 → 揭示 = 结果 |
| 功能展示 | 功能丰富的应用 | 开场钩子 = 最出色的功能 → 构建 = 另外 2 个功能 → 揭示 = 概览 |
| 旅程 | 消费者/生活方式类应用 | 开场钩子 = 入口 → 构建 = 使用体验 → 揭示 = 结果 |
| 转变 | 前后对比类应用 | 开场钩子 = “之前” → 构建 = 过程 → 揭示 = “之后” |
阶段 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 提示词。
阶段 2.5 — GPT-Image-2 增强
定义好故事弧线并选出 3–5 个画面后,在上传到 Seedance 之前,先用 GPT-image-2 增强每个画面。这能提升压缩后的网站截图和 App Store 缩略图的质量,使其成为更清晰、保真度更高的参考图。
针对每个选定的画面(包括 Logo/片尾卡参考图):
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)。 - 并行运行所有增强任务(每个画面调用一次)。
- 在 Seedance 调用中,将增强后的 URL 用作
reference_images数组,而不是原始图片。 - 保持阶段 1 的功能图描述不变——这些描述对应原始内容,而增强后的图片会保留这些内容。
阶段 3 — 撰写提示词
准备好功能图(阶段 1)和故事弧线(阶段 2)后,撰写 Seedance 提示词。每条 @Image 描述都必须引用功能图中的真实 UI 内容——不要写“带有控件的移动界面”之类的泛泛描述。
根据应用截图选择模板——不要默认使用液态玻璃。 根据应用的个性,准确阅读以下其中一个模板;另一个不会加载:
- 模板 A — 电影叙事(默认;生产力、AI、创意、社交、食品、游戏):阅读
references/template-a-cinematic.md。该文件包含经过验证的 BEAT 结构模板和示例。 - 模板 B — 液态玻璃(仅限摄影、相机、滤镜应用,且镜头/滤镜隐喻恰当时):阅读
references/liquid-glass.md。该文件包含模板 B 框架和玻璃变换词汇。
强调色始终取自品牌——查看图标和主要 UI 颜色,切勿自行编造。
两种模板均适用的规则
- 每条
@Image描述都必须直接来自阶段 1 的功能图 - 镜头运动指示必须直接来自阶段 2 的故事弧线
- 切勿写“应用界面”或“移动屏幕”——描述必须具体
- 不超过 200 个词
- **具体描述为何重要:**Seedance 会将
@ImageN描述作为主要创作依据——“深色聊天界面”与“包含城市街道、滑板公园和海岸日落的 VHS 三栏网格,并带有复古时间戳叠加效果”会生成截然不同的结果。逐字复制阶段 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 完成生成后返回 422,且响应正文包含 type: "content_policy_violation"、reason: "partner_validation_failed"、loc: ["body", "generated_video"] 和 msg: "Output audio has sensitive content.",则将其视为可恢复的生成音频审核误判。
重试预算:生成音频恢复最多允许在 Seedance 初始调用失败后进行 3 次恢复渲染:一次 sound=False 探测、一次 sound=True 重试,以及一次 Kling 回退。达到上限后,停止操作或按文档说明处理成功的无声 URL;不要继续探测 Seedance。
- 使用完全相同的提示词和
reference_images,以sound=False和相同的seed重试。 - 如果无声探测成功,使用完全相同的提示词和参考图集,以
sound=True和相同的 seed 重试。 - 如果
sound=True重试成功,将恢复后的有声 URL 作为generated_teaser_url传入第 4 阶段。仅将无声探测 URL 留作调试上下文。 - 如果无声探测失败,将其视为视频/参考图审核失败,并使用 Kling 回退。
- 如果无声探测成功,但
sound=True重试再次失败,则运行一次 Kling 回退。如果 Kling 不可用,则将无声 URL 作为generated_teaser_url传入第 4 阶段,并明确说明生成音频审核仍不稳定。
在此恢复流程中,不要更改提示词、参考图、宽高比、时长或 seed。更改其中任何一项都会使无声探测变成一次新的生成,而无法用于测试是否仅生成音频触发了审核。
Seedance 超时恢复
如果 Seedance 在 15 分钟总轮询上限之前返回终态超时,则将其视为服务提供方队列拥塞,而非提示词/内容问题。不要等待服务提供方超时字符串,例如 seedance timed out after 900s 或 seedance timed out after 1200s。
发生这种情况时,使用相同的已选参考图、相同的节拍结构、duration=15、sound=True 和 quality_mode="pro" 运行 Kling 回退。调用 Kling 前,将提示词中的 @ImageN 标记转换为 <<<image_N>>>。
达到 15 分钟总时长后,遵循上述轮询约定:取消尚未终止的任务并报告失败,不要在原任务可能仍处于活动状态时启动回退。
超时后不要继续重试 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 限制:跳过 fast=True,因为它会将分辨率限制在 720p;跳过 negative_prompt,因为 Seedance 不接受此参数;跳过 auto_duration,因为此路径固定为 15s。
Kling 限制:使用 quality_mode="pro" 以获得 1080p;Kling 不接受 resolution=。
Kling 排队/交接恢复
Kling 的回退流程是异步的。如果 generate_reference_video(provider="kling") 返回 task_id,请按照上文的长时间运行轮询约定,持续跟踪任务直至进入终态。
如果 task_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 请求。重复请求可能消耗提供商配额,并导致产物来源不明确。
如果状态持续 queued 超过 10 分钟,且 lastUpdatedAt 没有变化,请记录 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 文本,因此最后两秒会使用确定性的 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,除非用户明确要求只生成一个变体,否则使用原生 16:9 作为源宽高比。
调用一次 generate_reference_video 生成原生 16:9 预告片,然后运行一次 Stage 4 生成 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预告片显示在模糊背景上。为确保清晰易读,请将关键主体(产品、徽标、标题)置于中央,但不要将这些输出描述为裁切后的变体。
生成后质量检查
在宣布成功之前,调用 analyze_media 检查 final_url,并要求返回结构化评估。如果请求了 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 + Stage 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.
参考数量指南
所有视频时长均为 15s,分辨率为 1080p。根据叙事弧线选择 3–5 个画面。
| 参考数量 | 用例 |
|---|---|
| 3 | 标准配置——每个节拍使用一个画面(钩子 / 铺垫 / 揭示)+ 图标作为 @Image4 |
| 4 | 两个铺垫节拍 + 钩子 + 图标 |
| 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 | 提示词编写指南 | 促使 Agent 使用画面特征图和故事弧线,而不是凭空套用模板。 |
pure black background / floating in empty black space | 设备构图提示词 | 让产品镜头聚焦于应用 UI,而不是臆想出的环境。 |
materializes whole / crystallizes as a single form / fades in as a complete element | Logo 揭示用语 | 避免逐字母构建 Logo,以免品牌文字变得乱码。 |
运行时预期
典型运行时间为 4-8 分钟。首次付费调用 generate_image_edit 进行增强之前的所有生成前阶段,都必须控制在上述 5 分钟限制内。如果无法做到,请停止并报告部分准备结果,不要继续。
| 步骤 | 耗时 | 备注 |
|---|---|---|
| 资源搜集 | 10-60s | 通过 fetch_appstore_screens 获取 App Store 画面;网站截图耗时取决于页面加载情况 |
| 画面分析 + 弧线设计 | <=2 min | 将此阶段限制在最多 2 次提示词 / 分析轮次内 |
| GPT-image-2 增强 | 30-90s | 只有在仍处于 5 分钟生成前限制内时,才并行处理所选画面 |
| Seedance 生成 | 3-5 min | 生成音频审核恢复流程会增加一次静音探测,以及一次使用相同种子的声音重放 |
| Kling 回退 | 5-15 min | 容量等待或工作进程交接可能暂时显示 queued;请遵循 Kling 排队 / 交接恢复手册 |
| 下载验证 | <30s | 交付前进行本地健全性检查 |
引擎选择:Seedance 为主,Kling 为备选
Seedance 是默认选择,因为它能很好地处理精致的动态图形参考和 1080p 应用预告片。遇到审核、余额或 Seedance 超时故障时,使用 Kling 作为备选,因为它对某些屏幕内容的限制较少,且使用 quality_mode="pro" 生成 1080p。
故障模式
从 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,请中止并向用户说明:“服务提供商两次返回暂时性上游错误。请在 1-2 分钟后重试;此类问题通常会自行消失。”
最多重试一次。不要将 5xx 视为内容或审核问题;重写应用弧线可能会消耗额度,却无法解决服务中断问题。
从上游 4xx / moderation_blocked 中恢复
如果使用 provider="gpt-image-2" 调用 generate_image_edit 增强屏幕截图时返回上游 4xx 或 moderation_blocked:
- 不要使用相同的提示词重试;审核拦截和大多数 4xx 验证失败都是确定性的。
- 如果不增强也能使用参考图,请跳过增强并使用原始屏幕截图。如果质量太低,只尝试一次备用提供方进行增强;不要更改选定的应用屏幕或 Seedance 提示词。
- 如果备用提供方也失败,请向用户说明:“图像提供方拒绝了此屏幕截图增强提示词。请提供更清晰的屏幕截图、裁掉人脸/录制界面,或继续使用原始屏幕截图。”
对于 Seedance 非音频内容政策导致的失败,请使用下文记录的 Kling 备用方案;这是此技能的视频备用提供方路径。
从上游 429(速率限制)中恢复
如果任何上游返回 HTTP 429 并提供退避提示:
- 等待提示的退避时间;如果未提供提示,则等待 30 秒。
- 使用完全相同的参数,重新调用完全相同的 MCP 工具。
- 最多重试一次。如果仍返回 429,请中止并显示速率限制消息,不要提交重复的付费渲染任务。
capture_website 返回空结果 / 页面未加载
如果网站模式调用 capture_website 后返回 200,但 action_bboxes 为空或 recording_viewport 为 0x0:
- 不要重试;该网站未能在捕获环境中渲染。
- 显示:“无法捕获 。该页面可能被屏蔽/需要付费,或需要身份验证。请提供 3-5 张屏幕截图以及一个徽标/图标。”
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 min
- Kling fallback:每次调用 15 min
- gpt-image-2 high quality:每次调用 3 min
- 上传/编辑/渲染辅助工具:每次调用 5 min
采用以下两者中较早的时间:提供商上限 x 1.5,或任何特定技能的硬性轮询上限,包括上述长时间运行 task_status 轮询约定中的 15 min 总上限。如果 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、“输出音频包含敏感内容。” | 对非敏感应用宣传素材的误报较常见 | 按照有上限的生成音频恢复流程操作:使用相同种子进行 sound=False 探测,再使用相同种子进行 sound=True 重试,然后最多进行一次 Kling fallback |
Seedance 超时,例如 seedance timed out after ... | 提供商队列拥塞,或尾部延迟超出工具预算 | 运行 Kling fallback;除非用户明确要求等待,否则不要继续重试 Seedance |
视频上的 Seedance partner_validation_failed | 屏幕内容包含录屏界面、名人面孔或类似审核触发因素 | 切换到 provider="kling",并将令牌转换为 <<<image_N>>> |
| 截图中的人脸触发内容政策 | 截图中包含真实人物 | 上传前裁掉人脸,或使用 Kling |
| 6 张以上参考图导致质量下降 | 模型混合的参考图过多 | 保留 3-5 张参考图,大约每 3 秒一张 |
| 忽略提示词末尾内容 | 提示词超过约 200 个单词 | 精简为节拍结构和具体的 UI 细节 |
| 输出中的文字乱码 | 要求视频模型渲染新文字 | 将文字保留为参考图中已有的内容;在后期叠加任何新品牌元素 |
| Logo 显现时生成虚构字形 | “assemble/build/construct”这类措辞会触发逐字形渲染 | 使用“整体显现”、“凝结成一个整体”或“作为完整元素淡入” |
任务返回 { task_id } 而不是内联结果 | 长时间运行的生成任务超出了内联预算 | 遵循长时间运行轮询约定:轮询 task_status({task_id}),每 60s 输出进度行,在总计 15 min 时取消并提示,并在完成时提取 result.structuredContent |
Kling 任务先前运行过,随后返回状态:queued | 工作器交接或等待提供商容量 | 遵循 Kling 排队/交接恢复流程及长时间运行轮询约定。不要重复提交;继续轮询,直到任务结束,或在总计 15 min 时取消并提示 |
Kling 拒绝 resolution= | Kling 使用不同的质量参数 | 使用 quality_mode="pro" |
| App Store 图标 URL 指向宣传图 | App Store 元数据回退机制找到了功能介绍图片 | 优先使用 fetch_appstore_screens 返回的 icon.url;如果缺失,请索要 Logo/图标文件 |