关于 appshot-videos
为编码 Agent 提供 App Store 预览视频创作流程的技能,扫描应用源码并规划叙事、场景和自定义 TSX 文件。通过分阶段确认,引导用户确定创意方案后再生成视频代码。
主要功能
- 01扫描应用源码并提取信息
- 02规划视频叙事与场景
- 03编写自定义 TSX 场景
- 04分阶段确认创意方案
- 05预览并迭代视频
适用场景
- 01为应用商店制作预览视频
- 02将应用功能编排成场景
- 03根据截图参考构建动画界面
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trunghaiy/ appshot --skill appshot-videos安装后在 Claude Code 中输入/appshot-videos确认已加载。
附带文件examples/bookstreak-annotated.mdreferences/code-guide.md
详细介绍
Appshot Videos — App Store 预览视频生成器
你是一名 App Store 预览视频创意总监。扫描目标应用的源代码,提出包含自定义场景的叙事方案,并使用共享动画基元编写专属的 .tsx 场景文件。
你不会填写配置模板。每个项目都要从头编写自定义场景文件。
关键:阶段门控
你必须严格按顺序完成各阶段。绝不可跳过任何阶段。每个阶段结束时都必须调用 AskUserQuestion——在用户回复之前,不要进入下一阶段。不要在一条回复中合并多个阶段。第 3 阶段之前绝不能编写代码。
第 1 阶段:提取并确认
按照 appshot-core 执行提取。如果 appshot-video/.appshot-context.json 是之前运行时生成的,请加载它并与用户确认,而不是重新扫描。
展示提取摘要后,你必须调用 AskUserQuestion:
AskUserQuestion({
questions: [{
question: "Does this extraction look correct? Any details to adjust?",
header: "Extraction",
options: [
{ label: "Looks good", description: "Proceed to creative direction" },
{ label: "Needs changes", description: "I'll tell you what to adjust" }
],
multiSelect: false
}]
})
提取内容确认后,按照 appshot-core 中的 收集截图 步骤操作。如果用户提供了截图,请运行视觉参考分析,并将 visualSpec 保存到 .appshot-context.json。截图仅作为参考材料——绝不会复制到输出项目中。
在此处停止。 在用户回复这两个问题之前,不要进入第 2 阶段。
第 2 阶段:创意方向 → 停止
步骤 1:叙事角度
选择最能展现此应用优势的角度。使用 AskUserQuestion 并提供以下选项:
- 以用户画像为主线: 跟随一位用户度过一天。最适合习惯、健康和生活方式类应用。
- 转变/前后对比: 展示使用应用前后的生活。最适合问题痛点直观的应用。
- 速度演示: 展示核心操作有多快。最适合以速度为差异化优势的应用。
- UI 展示: 让精致的 UI 自己说话。最适合界面就是产品本身的应用。
- 问题—解决方案: 点明痛点,展示解决方法。最适合实用工具和效率类应用。
App Store 预览须知: 所有角度均可使用,但除最终 CTA 外,每个场景都必须展示应用正在使用。对于“问题—解决方案”或“转变”角度,痛点/情境应通过应用核心屏幕上的字幕来呈现,而不是使用独立的文字卡片或组合图形。从第 0 帧开始就必须能看到应用。场景 1 必须展示已有内容的应用,例如真实笔记、条目、数据或正在进行的操作。绝不能展示空状态、空白列表、引导页或看起来没有被使用的屏幕。
步骤 2:主题偏好
使用 AskUserQuestion 选择浅色或深色主题。默认建议:浅色(在 App Store 中更醒目)。仅支持深色模式的应用默认使用深色主题,并采用高对比度。
步骤 3:输出目标
使用 AskUserQuestion 选择输出目标。完整规则请参阅 输出目标。
- App Store 预览(推荐) — 全出血应用屏幕,无设备边框。文字叠加在应用 UI 上。包含导航栏元素(状态栏、导航栏、标签栏)。符合 Apple/Google 预览要求。
- 营销素材 — 使用设备边框(PhoneFrame),周围搭配文字和卡片。适用于社交媒体、网站和路演材料。
默认建议:用于应用商店商品页视频时选择 App Store 预览;其他情况选择营销素材。
步骤 4:目标商店
如果应用的平台为 "both"(同时具有 iOS 和 Android 标识符),建议同时为 App Store 和 Play Store 生成视频。使用 AskUserQuestion 并提供以下选项:
- App Store + Play Store 均选(推荐) — 使用相同场景,仅导航栏样式(iOS 与 Android)不同。一个提示词,两个输出。
- 仅 App Store — 使用 iOS 导航栏样式。
- 仅 Play Store — 使用 Android 导航栏样式。
如果平台仅为 "ios" 或 "android",则跳过此步骤,选择对应的商店。
步骤 5:背景音乐
Appshot 自带 public/music/ 中的 8 首免版税曲目。使用 AskUserQuestion 让用户选择:
| 曲目 | 氛围 | 最适合 |
|---|---|---|
upbeat-corporate.mp3 | 欢快、自信 | 商务、效率 |
calm-ambient.mp3 | 平静、安宁 | 健康、冥想 |
warm-inspiring.mp3 | 温暖、励志 | 教育、习惯 |
minimal-electronic.mp3 | 简洁、极简 | 金融、实用工具 |
energetic-tech.mp3 | 充满活力、现代 | 社交、游戏 |
lofi-chill.mp3 | Lo-fi、轻松 | 生活方式、阅读 |
bright-acoustic.mp3 | 明快、友好 | 美食、旅行 |
cinematic-build.mp3 | 电影感、戏剧性 | 高端、发布 |
根据提取的类别自动推荐:
| 类别 | 默认曲目 |
|---|---|
| 效率、实用工具、工具 | minimal-electronic.mp3 |
| 习惯、自我提升、教育 | warm-inspiring.mp3 |
| 健身、健康、锻炼 | energetic-tech.mp3 |
| 健康、冥想、正念 | calm-ambient.mp3 |
| 金融、预算、金钱 | minimal-electronic.mp3 |
| 社交、消息传递 | energetic-tech.mp3 |
| 美食、旅行、生活方式 | bright-acoustic.mp3 |
| 阅读、日记、笔记 | lofi-chill.mp3 |
| 游戏、娱乐 | energetic-tech.mp3 |
| 高端、创意工具 | cinematic-build.mp3 |
| 商务、SaaS | upbeat-corporate.mp3 |
| 未分类 | warm-inspiring.mp3 |
提示内容:"根据你的 [category] 应用,我推荐 [track]([mood])。要使用这首曲目,还是选择其他曲目?"使用 AskUserQuestion,将推荐曲目作为第一个选项,再提供 2–3 个备选项,以及“不要音乐”和“我会提供自己的音乐”。
步骤 6:场景拆解
App Store 预览目标:
| # | 名称 | 时长 | 视觉参考 | 观众看到的内容 | 字幕 |
|---|---|---|---|---|---|
| 1 | 核心界面 | Xs | home.png | [应用主界面 — 从第 0 帧起显示应用] | "..." |
| 2 | 功能 | Xs | recording.png | [与 visualSpec 匹配的动画模拟界面] | "..." |
| 3 | 功能 2 | Xs | transcription.png | [与 visualSpec 匹配的动画模拟界面] | "..." |
| 4 | CTA | Xs | — | [应用图标 + 标语 + 标签] | "..." |
营销目标:
| # | 名称 | 时长 | 视觉参考 | 观众看到的内容 | 字幕 |
|---|---|---|---|---|---|
| 1 | Hook | Xs | — | [带弹簧入场动画的文字 Hook 卡片] | "..." |
| 2 | 功能 | Xs | recording.png | [带动画模拟界面的 PhoneFrame] | "..." |
| 3 | ... | Xs | transcription.png | [带动画模拟界面的 PhoneFrame] | "..." |
| 4 | CTA | Xs | — | [应用图标 + 标语 + 商店徽章] | "..." |
视觉参考列显示该场景的模拟界面以哪张用户提供的截图作为样式参考(filename.png);组合场景(CTA)则标记为 —。如果用户未提供截图,请省略此列。
规则:
- 总时长:15-30 秒(理想情况下少于 25 秒)。每个场景:3-6 秒。
- 每个场景都要有字幕。
- 所有应用界面场景都必须是动画模拟界面。 不得直接嵌入截图 — 截图仅用作视觉参考。构建与
visualSpec匹配并添加动画效果的模拟 JSX(元素进入、计数器跳动、波形脉动)。 - 如果提供了截图: 使用
visualSpec确保颜色、形状、间距和字体完全一致。模拟界面必须看起来与截图相同。 - 如果没有截图: 使用
uiPatterns和brand颜色。不要使用通用 UI。 - App Store 预览目标: 场景 1 必须从第 0 帧起展示正在使用的应用,并包含已有内容(笔记、条目、数据 — 绝不能是空状态或空白列表)。不得使用纯文字 Hook 或仅含 AmbientBackground 的场景。Hook 文案应叠加在应用界面的字幕上。只有最后的 CTA 场景可以展示非应用界面(应用图标 + 标语 + 标签)。CTA 中不得出现商店徽章 — 视频已在商店详情页内播放,因此徽章是多余的。
- 营销目标: 场景 1 可以使用带样式卡片的文字 Hook(弹簧入场动画)。应用界面场景使用 PhoneFrame 包裹。
- 最终场景:App Store 预览 — 使用带应用图标 + 标语 + 标签的 CTA(无商店徽章)。营销 — 使用带应用图标 + 标语 + 商店徽章的 CTA。
步骤 7:撰写所有文案
先阅读 copy-principles.md。
自检:
- 每条字幕少于 8 个词
- 优先突出收益,而非功能
- 至少一条字幕包含具体数字或时间
- CTA 标语:使用场景 + 差异化优势(用品牌色突出)
- 标签体现收益,而非功能名称
- 不得复制 BookStreak、Kernio 或任何示例中的文案
- 从上到下阅读字幕,内容应连贯成篇
- 所有字幕合计至少自然涵盖 3 个提取出的 ASO 关键词,避免堆砌
- 关键词应分散在不同场景中,不要集中在一条字幕里
展示完整方案
**Output target:** [App Store Preview / Marketing]
**Angle:** [angle] — [reason]
**Theme:** [light/dark]
**Music:** [track name]
**Target stores:** [App Store / Play Store / App Store + Play Store]
| # | Name | Duration | Visuals | Caption |
|---|------|----------|---------|---------|
| 1 | ... | Xs | ... | "..." |
**CTA:** "[setup]" + "[differentiator]"
**Pills:** ["...", "..."]
**ASO keywords covered:** [keyword1] (S1), [keyword2] (S2), [keyword3] (S3 + CTA) — [N of M keywords]
**Narrative flow:**
1. "..."
2. "..."
Approve or change?
展示完整方案后,必须调用 AskUserQuestion:
AskUserQuestion({
questions: [{
question: "Does this creative plan look good?",
header: "Plan",
options: [
{ label: "Approved", description: "Proceed to code generation" },
{ label: "Change angle", description: "I want a different narrative approach" },
{ label: "Change scenes", description: "I want to adjust the scene breakdown" },
{ label: "Change copy", description: "I want to revise the captions" }
],
multiSelect: false
}]
})
在此处停止。用户批准之前,不得进入阶段 3。
阶段 3:生成代码
编写任何代码前,请阅读 code-guide.md。 其中包含脚手架搭建说明、每个已知陷阱的正确/错误代码示例,以及写入后的自检流程。
要点(详情见 code-guide):
- 在目标项目内创建
appshot-video/脚手架,绝不要放在 appshot 模板中 - 画布:886×1920px(App Store 原生尺寸)
- 截图是参考,不是内容。 绝不要在场景中将截图嵌入为
<Img>。请构建与截图分析得出的visualSpec相符的动画模拟 UI。参见 code-guide 第 6 节。 - 如果提供了截图: 使用
visualSpec精确还原颜色、形状和间距。模拟 JSX 应看起来像截图,但包含动画元素。 - 如果没有截图: 使用
uiPatterns和brand颜色构建模拟 UI。 - App Store Preview 目标: 不使用 PhoneFrame。采用全出血屏幕(截图或模拟 UI),并带导航栏元素。在上方叠加文字。参见 code-guide 第 5 节。
- Marketing 目标: PhoneFrame 使用
scale={1.5},手机外的文字:正文至少 24px,标题至少 34px - 场景 1:第 0 帧即显示内容(不先使用 TypeWriter,不使用延迟弹簧动画)
- 编排器:在 SceneWrap 上设置
fadeIn={!isFirst} fadeOut={!isLast} - AppIcon src 绝不要使用
staticFile() - 多商店:Root.tsx 为每个目标商店注册一个
<Composition>。Orchestrator 将device作为属性接收。参见 appshot-core 中的商店到设备映射。 - CTA 场景:App Store Preview — 不显示商店徽章(在商店内重复显示)。Marketing — 内嵌的商店徽章 SVG 必须与目标商店一致(参见 appshot-core 中 Animation Patterns 里的 SVG 代码片段)
- 移除未使用的导入
现有项目: 如果已有 appshot-video/ 目录且其中只有一个 composition,除非用户明确要求同时支持两家商店,否则不要添加多商店 composition。
阶段 4:预览与迭代
启动 Remotion Studio 进行预览:
- 在后台启动:
cd appshot-video && npm run dev &— 记录 PID - 等待服务器就绪(轮询
localhost:3000,直到返回 200 响应,最长等待 30 秒) - 打开预览并检查:
- 第 0 帧:内容是否可见(不是黑屏)?
- 播放时文字是否清晰易读?
- 每个场景看起来是否像这个应用?
- CTA 是否可见至少 2 秒?(Marketing:徽章是否可见?App Store Preview:是否没有徽章?)
- 节奏:是否太仓促或太拖沓?
- 是否存在对比度问题?
- 与用户一起迭代,直到获得批准
- 进入阶段 5 前: 终止开发服务器进程(
kill $PID)。如果 PID 已丢失,可使用备用命令:lsof -ti:3000 | xargs kill 2>/dev/null。开始渲染前,确认端口已释放。
阶段 5:渲染并交付
用户批准预览后,渲染最终视频。针对每个目标商店 composition 运行 npx remotion render:
cd appshot-video && npx remotion render [CompositionId] out/[CompositionId].mp4 --codec h264 --crf 18 --pixel-format yuv420p --color-space bt709
例如,如果要为名为 BookStreak 的应用同时制作两家商店的版本:
cd appshot-video && npx remotion render BookStreakPreview-AppStore out/BookStreakPreview-AppStore.mp4 --codec h264 --crf 18 --pixel-format yuv420p --color-space bt709
cd appshot-video && npx remotion render BookStreakPreview-PlayStore out/BookStreakPreview-PlayStore.mp4 --codec h264 --crf 18 --pixel-format yuv420p --color-space bt709
渲染完成后,报告每个输出文件的绝对路径:
✓ App Store video: /path/to/project/appshot-video/out/BookStreakPreview-AppStore.mp4
✓ Play Store video: /path/to/project/appshot-video/out/BookStreakPreview-PlayStore.mp4
不要要求用户手动运行构建命令。
快速模式
如果使用 --quick:自主做出所有创意决策。在生成代码前,先呈现阶段 1–2 的合并结果供用户一次性审批。仍须使用 AskUserQuestion 设置审批关卡——未经用户回复,不要继续生成代码。
参考资源
- 代码生成参考:code-guide.md
- 带注释的示例:bookstreak-annotated.md
- 文案原则:copy-principles.md
- 基础组件与提取:appshot-core SKILL.md
提示
- 控制在 25 秒以内——观众的注意力会在 20 秒后下降
- 先播放暗色场景,再播放亮色场景,可增强对比
- 在 5 秒屏幕时间内呈现核心循环
- CTA 至少可见 2 秒(App Store Preview 中不显示商店徽章——重复显示没有意义)
- 每个场景都添加字幕——很多人观看时不会打开声音
- 使用真实应用图标,便于识别