关于 scenario-game-ua-ads
Scenario Game UA Ads 是一项技能,使用 Scenario 资源和工具制作游戏玩法风格的用户获取广告。它涵盖规划、画面板、视频片段、UI、合成、音效和成片检查,并提供本地渲染与验证脚本。
主要功能
- 01规划画幅与分镜时间线
- 02根据游戏素材制作画面板
- 03生成并检查视频片段
- 04合成 UI 与音频
- 05验证最终广告成片
- 06提供本地规划和检查脚本
适用场景
- 01制作游戏玩法风格的用户获取广告
- 02将广告适配为多种宽高比
- 03交付前检查渲染成片
MCP 相关
它通过 Scenario MCP 进行发现、素材操作、上传和视频合成。上传与合成由 MCP 调用完成,本地渲染和检查则使用所提供的脚本。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-game-ua-ads安装后在 Claude Code 中输入/scenario-game-ua-ads确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/concepts.mdinputs.mdplatforms.mdui-layers.mdscripts/build_passes.pycheck_master.pycheck_take.pymake_patch.pyput_parts.pyrender_tracks.py详细介绍
场景游戏 UA 广告
概述
像实际游玩一样的 UA 广告:Scenario 生成或调整棋盘美术和动作,并将所有游戏 UI 合成在画面上。交付内容必须是所需时长和格式、达到最终渲染质量的成片,不能是草稿或单个片段。每个节拍的检验标准:一个从未听说过这款游戏的陌生人看完后会想:“我真的很想试试这款游戏。”如果要根据产品照片制作广告,请使用 scenario-video-ads;如果要为已完成的广告制作钩子、CTA 或片尾卡变体,请使用 scenario-ad-variants。连接、发现和恢复请遵循 scenario。如果你的可用技能中缺少此处提到的同系列技能,请使用 skill_get(Scenario MCP)加载,或请用户安装(https://github.com/scenario-labs/skills#install);若无人值守,请根据工具架构继续操作,并标明这一缺口。
简报:询问一次,然后执行
一轮询问完毕后,直接执行,不要中途停下:
- 创意概念或游戏的核心循环,以及游戏名称。如果用户未提供名称,请虚构一个。
- 平台和广告位。它们决定画面比例、安全区、建议时长和声音要求 (平台)。
- 准确时长,以秒为单位。若未提供,则使用该广告位建议的 UA 时长。
- 游戏自身素材,均为可选项(输入):截图、屏幕录制或游戏视频、角色和道具、应用图标、Logo 或 UI 套件。
- 配色和支出上限。
如果用户提供了游戏自身素材,广告的视觉和玩法必须与游戏一致:棋盘取材于游戏截图,角色形象保持一致,片尾卡使用游戏的真实图标。只有用户未提供素材时,才可虚构玩法。
首次计费运行前,以及每次补拍前,都要对所有付费负载执行 dry_run;若超出上限,请删减拍摄次数或询问用户。若无人值守且未设置上限,则停在计划和估算阶段。
快速参考
| 阶段 | 工作内容 | 同系列技能 |
|---|---|---|
| 1. 规划 | 画面比例、安全区、按秒划分的时间线(概念) | |
| 2. 棋盘 | 每种机制制作一张无文字静帧,采用交付画面比例,并以用户素材为基础 | scenario-game-assets、scenario-image |
| 3. 片段 | 基于静帧制作最终质量的镜头,或剪辑用户提供的素材 | scenario-video、scenario-seedance |
| 4. 逻辑 | 每个镜头:时间表、每个动作一份裁切表、结束帧、动作检查 | |
| 5. UI | 钩子、HUD、手部、爆发效果、特效、片尾卡(UI) | scenario-text-overlay |
| 6. 合成 | 按准确时长和画布尺寸制作一条时间线 | scenario-video-assembly |
| 7. 声音 | 每个事件配一个音效,单独铺设音乐,并在合成阶段混音 | scenario-audio |
| 8. 检查 | 探测、音量、每秒 2 帧的检查表,然后核对拒绝清单 |
时长与格式
| 时长 | 铺垫或失败 | 回报 | 片尾卡 |
|---|---|---|---|
| 6 s | 无,钩子与回报合一 | 4.5 s | 1.5 s |
| 10 s | 3.5 s | 4.5 s | 2 s |
| 15 s | 5 s | 6 s | 4 s |
| 20 s | 5 s | 6 s,然后用 5 s 升级 | 4 s |
| 30 s | 两轮失败与胜利 | 或三次升级 | 4 s |
使用实拍素材时,素材自身的节奏点会取代此划分(输入素材)。
- 针对每种画幅原生构图:在交付画布上生成游戏画面(9:16 为 1080x1920, 4:5 为 1080x1350,1:1 为 1080x1080,16:9 为 1920x1080)。绝不要从另一种画幅裁切。
- 按投放版位的区域规划游戏画面静帧:背景只放在平台 UI 下方,HUD 和钩子放在 UI 下方,所有关键动作都放在安全区域中。带文字的叠加元素以及所有点击目标(圆环、拉杆) 都要留在安全区域内,并避开 TikTok 右侧栏:在拍摄前先测量静帧上的目标位置。
- 多种投放版位:每种画幅分别使用同一份规划制作一张游戏画面,并单独完成一次组装。
让观众想要玩
游戏画面能正确变化,并不代表它就有吸引力。围绕每个概念的幻想(力量、 聪明才智、秩序、成长、营救)及其乐趣一行来规划:
- 输入在 2 s 内就能看明白:手和游戏物件同步移动,游戏立即给出反馈。
- 每次输入都要在动作本身带来令人满足的反应:预备、接触、反应。物件在边缘摇晃、 倾斜,然后旋转着落下;叠起的物件摇摆后稳定下来。在片段提示词中逐拍写清楚。
- 先展示限制,再克服限制:过大的物件沿着边缘咔嗒作响地移动,直到洞口变大。
- 幻想的核心对象(球、汽车、洞口)在手机上要清晰可见:宽度约占画面 4% 或更多, 快速移动时要有拖尾。按每个节拍规划主体的大小变化曲线,并拉远镜头,让主体始终约占画面的三分之一。
- 逐步升级:每个节拍都比上一个更大或更快,加入一次险些失败、一次出人意料的巧妙操作, 然后在游戏过程接近结束时呈现最精彩的瞬间。
- 绝不要为了让模型无法破坏机制而简化玩法。通过串联阶段构建丰富的机制: 每一步使用一张状态静帧,每张都基于上一张编辑;每次拍摄都从一个状态衔接到下一个状态, 并只展示一个可见动作。或者根据剪切出的部件编写脚本(见下文)。
广告制作规则
- 第一帧就呈现前提:棋盘、钩子文案、利害关系。0.0 秒时要有声音,0.3 秒内出现动作,不要加 Logo 开场。
- 绝不让棋盘或视频模型在静帧或镜头中绘制文字、数字、闸门数值、按钮或手:留空相应位置,再进行合成。
- 只设一个机制,逐步升级。计数器只能递增,分 4 或 5 个清晰可见的步骤,每一步都要与触发事件成比例:捡起一个物品,绝不能让等级从 30 一下跳到 99。
- 失败诱饵由同一张静帧生成两个镜头:先展示错误操作及其后果,再展示正确操作。在爆发词处剪切。
- 每个镜头使用一台锁定的摄像机,并采用最终画质。棋盘元素繁杂时不要推进镜头:管道、闸门和槽位都会变形。要求生成更长的镜头,只保留干净的开头部分。
- 游戏逻辑必须成立,因为玩家一眼就能看出作弊:
- 视频模型会无视障碍物:熔岩和金币会穿过关闭的插销流动。设计时确保每条路径只需一个清晰可见的操作,且镜头中不会打开任何插销、闸门或墙壁。
- 优先使用垂直下落和直线路径。管道或弯道会诱使模型走捷径,从路径外穿过去。
- 棋盘上的每个玩家操作都必须有理由:滑动是为了触及可收集物,或躲避危险。同一条直线上的可收集物会让滑动变得毫无意义。
- 在提示词中说明每个障碍物的状态(“金币留在玻璃罩内”),以及哪些东西保持静止。
- 固定的结束状态应单独制作成一张静帧:从棋盘素材编辑而来,计数保持一致,并将其设为镜头的最后一帧。固定最后一帧也会锁定摄像机。编辑可能会改变遮罩区域外的像素:只将遮罩区域贴回源图。
- 模型无法干净完成的精确操作(例如交换两块拼图、自由落体),应从静帧制作成分层素材;模型只负责为其后果添加动画。
- 在生成镜头上局部绘制的障碍物(例如画线或补丁),每帧都要检查其内部遮罩:蜜蜂在绘制的穹顶内停留了 74 帧。
- 每一步都必须精准的棋盘游戏(配对消除、排序、合并、螺丝谜题),应整体采用脚本制作:从棋盘静帧或用户截图中裁出棋子,再将它们制作成分层动画。游戏规则始终保持精确,视频模型只为背景添加环境动态。
- 合成使用
model_scenario-compose-video,即 Scenario 唯一的确定性合成器,因此其 id 是固定的(使用search确认)。 - UI 层上所有会移动的内容都必须放在一个透明的 ProRes 4444
.mov文件中,并裁剪至其运动范围,绝不能使用逐帧切换的图像图层或 WebM alpha(ui)。 - 音效:每个可见事件(点击、碰撞、拾取、计数变化)都要在对应帧添加一声撞击音,音量高于音乐。对静音剪辑进行视频转音频处理可以添加环境音效,但会漏掉事件音效。单独生成背景音乐,禁止使用环境铺底音,并调整时间,让音乐的起伏落在关键效果上。
- 每次合成最多支持 50 个图层(其中 49 个可用于音频,因此密集的一组音效应预混成一条音轨),且不带限幅器,所以合成分多个阶段进行:
- 画面:将静音的片段和叠加素材合成为静音母版;
- 声音:将静音母版作为唯一的视频图层放在所有音频图层之下,并将时间精确到毫秒;
- 仅在声音阶段未达到 -16 至 -14 LUFS,或峰值超过 -1 dBTP 时进行响度处理:使用
model_scenario-audio-extract并设置normalizeLoudness: true,再将静音母版与该音轨合并。Scenario 为这些任务各提供一个工具,因此对应的 id 是固定的。
- 先以关键效果收尾,再接上计划中设计的片尾卡;片尾卡要像钩子一样,取材于这款游戏的世界:显示关卡完成画面,并在“下一关”所在的位置放上文案;或展示冻结的下一关高难度棋盘,并配上“你能解开吗?”;或让主角手持文案。使用游戏中的词语:SAVE HIM、DIG NOW、TRY LEVEL 2(ui)。社交信息流禁止使用伪造按钮,所以行动号召应以标签形式呈现;只有可点击的广告网络卡片才能使用按钮。
脚本
Agent 使用 Python 3.11+、Pillow 13、numpy 2 和 ffmpeg 在本地运行这些脚本。它们负责渲染和规划;上传和合成仍通过 MCP 调用完成。每个脚本都接受一个 JSON 规范;--help 会列出其字段。
- render_tracks.py:将手、计数器、奖励、爆发效果和星星渲染为裁剪后的 ProRes 4444 轨道,并生成
layers.json,其中包含与合成精确对应的时间以及安全区警告。 - build_passes.py:
simulate在本地混合提示表,并输出响度、真峰值和每个撞击音的余量;picture和sound会写入两个合成负载。 - check_master.py:检查下载的成片的画布、时长、响度、真峰值、暗帧、2 fps 联系表,以及每个撞击音的起始时间(
--sim会将其与混音进行对照)。 - put_parts.py:将文件 PUT 到
upload_asset返回的 S3 签名分块 URL,并输出upload_asset_complete所需的信息。 - check_take.py:组装前对每条片段进行逻辑检查;
motion需要锁定摄像机。 - make_patch.py:生成干净底图图像层,遮住与计数矛盾的静止物件,并检查其覆盖的每条片段。
示例:分阶段串联的拔针救援,15 秒,TikTok 9:16
- 规划:1080x1920,符合 TikTok 安全区,HUD 从 y 280 开始。开场钩子展示错误拔针:黄金熔化在熔岩中,2.5 秒时出现 FAIL,然后倒带。3.8 秒拔掉水针,让熔岩凝固成石坡,同时镜头推进;5.8 秒拔掉金针;8.3 秒拔掉牢房针,矿工跑上斜坡进入矿车。结束卡从 11.2 秒持续到 15 秒。
- 分镜:使用
recommend为精致的休闲游戏美术推荐图像模型;如果两个模型排名接近,就用同一个提示词分别运行,然后保留效果更好的那个。玻璃密封舱中不含文字:水和黄金挂在金色针上,熔岩在下方,矿工锁在旁边,矿车是空的。然后为每一步制作一张状态静帧,每张都以上一步为基础编辑:石坡、黄金装入矿车、矿工进入矿车。 - 片段:先运行
model_schema_get,再为每一步各运行一次,设置wait: false,使用最终档位,将首尾帧固定为连续状态,每段只显示一个动作。失败片段从分镜图开始。然后对每个任务 ID 调用jobs_wait,并重试pending_job_ids;parallel-custom-jobs返回 429 时未创建任务:等这一批任务结束后重新启动它(scenario)。 - 逻辑检查:对每条片段使用
check_take.py检查,不逐帧检查:用sheet查看时间安排;用action --at 4.5 --box 270 600 540 540将水撞击熔岩的画面平铺为八张原生分辨率裁剪图;用ends检查数量;用motion --allow检查密封舱边框,标记其他任何移动。任何东西都不能穿过关闭的针或玻璃,包括蒸汽。 - UI 使用
scenario-text-overlay:开场钩子、关卡徽章、计数器数值、FAIL、RESCUED!。结束卡:完整矿车驶入,图标放在车厢侧面,下一位矿工被锁在后方,下方标注“FREE HIM NEXT”。render_tracks.py在每个圆环上渲染手部动作、飞向计数器的金币和星星。 - 画面合成:
build_passes.py picture按各片段的startTime排列片段,设置fit: "cover"、mute: true,将叠加层置于上方,设置durationMode: "custom"、duration: 15。 - 静音成片的声音合成:为每次拔针、熔化、蒸汽、金币、计数器每次变化、跳跃和结束卡添加撞击音;在奖励揭晓时让背景音乐渐强。先运行
simulate,然后剪辑,直到峰值接近 -1.8 dBTP。 - 检查:运行
check_master.py --sim,然后对每个动作各使用一张平铺裁剪图执行拒收项检查。
拒绝清单
- 棋盘发生变化,却没有清晰可辨的玩家输入;或有输入,却没有令人满意的反馈。
- 任何物体穿过关闭的弹珠柱、闸门、墙壁、玻璃或地板,或离开容器;必须在动作的原生分辨率平铺裁剪图上检查,绝不使用缩小的拼图。
- 任何不应移动却发生移动的物体:人群齐声反应、英雄角色出现第二个副本、其他位置的棋子发生位移(
check_take.py motion)。 - 手势与动作不匹配、动作没有对应手势,或计数与屏幕内容矛盾。
- 胜利时棋盘上仍有棋子(例如一辆车还停在棋盘上却显示“已清空”),即使棋子有一半被 HUD 遮住也不行。
- 计时器或进度条的速度快于真实秒数。
- 角色或物品不符合用户素材的设定,或棋盘与用户截图不再一致。
- UI 超出对应版位的安全区域、元素重叠,或 1080 像素宽的画面中 HUD 数字小于 72 px。
- 剪辑处出现黑帧:片尾卡必须在最后一段片段结束的同一刻开始,不要淡入淡出。
- 片尾卡看起来像其他游戏也能用的通用卡片:每条广告都沿用相同布局和“PLAY NOW”。
- 不同镜头的棋盘发生偏移,或棋子在镜头快结束时变形:提前剪掉,并提示固定镜头在提前一秒时稳定下来(蒸汽消失,棋子静止)。
- 事件没有撞击声、撞击声与对应画面相差超过 0.1 s、开头第一秒没有声音,或峰值高于 -1 dBTP。
- 计数器跳动、奖励、爆发效果或星星出现时,屏幕上没有对应的触发事件。
常见错误
- 固定在移动物体上的标签会从物体上滑开。将标签放在静止的第二层,或使用 HUD。
- 在合成过程中缩放全画布叠加层:它会从角落开始缩放,可能会超出画面。请按最终尺寸渲染。
- 在虚构玩法中使用真实游戏、工作室或角色的名称,或让原型设计逐渐变得像某个真实对象:一个愤怒的司机角色后来变成了戴红帽、留胡子、穿蓝衬衫的形象。请为原创形象命名,并在制作动画前检查静帧。如果某个镜头因 IP 被标记:将描述改写为通用内容并重新运行;若再次被标记,则使用静帧分层制作该段内容。