mcpField
S
scenario-game-ua-ads

scenario-game-ua-ads

github.com/scenario-labs营销与增长3.7k59 次安装2 天前更新
代码仓库

关于 scenario-game-ua-ads

Scenario Game UA Ads 是一项技能,使用 Scenario 资源和工具制作游戏玩法风格的用户获取广告。它涵盖规划、画面板、视频片段、UI、合成、音效和成片检查,并提供本地渲染与验证脚本。

主要功能

  1. 01规划画幅与分镜时间线
  2. 02根据游戏素材制作画面板
  3. 03生成并检查视频片段
  4. 04合成 UI 与音频
  5. 05验证最终广告成片
  6. 06提供本地规划和检查脚本

适用场景

  1. 01制作游戏玩法风格的用户获取广告
  2. 02将广告适配为多种宽高比
  3. 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.md
inputs.md
platforms.md
ui-layers.md
scripts/
build_passes.py
check_master.py
check_take.py
make_patch.py
put_parts.py
render_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 s1.5 s
10 s3.5 s4.5 s2 s
15 s5 s6 s4 s
20 s5 s6 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

  1. 规划:1080x1920,符合 TikTok 安全区,HUD 从 y 280 开始。开场钩子展示错误拔针:黄金熔化在熔岩中,2.5 秒时出现 FAIL,然后倒带。3.8 秒拔掉水针,让熔岩凝固成石坡,同时镜头推进;5.8 秒拔掉金针;8.3 秒拔掉牢房针,矿工跑上斜坡进入矿车。结束卡从 11.2 秒持续到 15 秒。
  2. 分镜:使用 recommend 为精致的休闲游戏美术推荐图像模型;如果两个模型排名接近,就用同一个提示词分别运行,然后保留效果更好的那个。玻璃密封舱中不含文字:水和黄金挂在金色针上,熔岩在下方,矿工锁在旁边,矿车是空的。然后为每一步制作一张状态静帧,每张都以上一步为基础编辑:石坡、黄金装入矿车、矿工进入矿车。
  3. 片段:先运行 model_schema_get,再为每一步各运行一次,设置 wait: false,使用最终档位,将首尾帧固定为连续状态,每段只显示一个动作。失败片段从分镜图开始。然后对每个任务 ID 调用 jobs_wait,并重试 pending_job_ids;parallel-custom-jobs 返回 429 时未创建任务:等这一批任务结束后重新启动它(scenario)。
  4. 逻辑检查:对每条片段使用 check_take.py 检查,不逐帧检查:用 sheet 查看时间安排;用 action --at 4.5 --box 270 600 540 540 将水撞击熔岩的画面平铺为八张原生分辨率裁剪图;用 ends 检查数量;用 motion --allow 检查密封舱边框,标记其他任何移动。任何东西都不能穿过关闭的针或玻璃,包括蒸汽。
  5. UI 使用 scenario-text-overlay:开场钩子、关卡徽章、计数器数值、FAIL、RESCUED!。结束卡:完整矿车驶入,图标放在车厢侧面,下一位矿工被锁在后方,下方标注“FREE HIM NEXT”。render_tracks.py 在每个圆环上渲染手部动作、飞向计数器的金币和星星。
  6. 画面合成:build_passes.py picture 按各片段的 startTime 排列片段,设置 fit: "cover"、mute: true,将叠加层置于上方,设置 durationMode: "custom"、duration: 15。
  7. 静音成片的声音合成:为每次拔针、熔化、蒸汽、金币、计数器每次变化、跳跃和结束卡添加撞击音;在奖励揭晓时让背景音乐渐强。先运行 simulate,然后剪辑,直到峰值接近 -1.8 dBTP。
  8. 检查:运行 check_master.py --sim,然后对每个动作各使用一张平铺裁剪图执行拒收项检查。

拒绝清单

  • 棋盘发生变化,却没有清晰可辨的玩家输入;或有输入,却没有令人满意的反馈。
  • 任何物体穿过关闭的弹珠柱、闸门、墙壁、玻璃或地板,或离开容器;必须在动作的原生分辨率平铺裁剪图上检查,绝不使用缩小的拼图。
  • 任何不应移动却发生移动的物体:人群齐声反应、英雄角色出现第二个副本、其他位置的棋子发生位移(check_take.py motion)。
  • 手势与动作不匹配、动作没有对应手势,或计数与屏幕内容矛盾。
  • 胜利时棋盘上仍有棋子(例如一辆车还停在棋盘上却显示“已清空”),即使棋子有一半被 HUD 遮住也不行。
  • 计时器或进度条的速度快于真实秒数。
  • 角色或物品不符合用户素材的设定,或棋盘与用户截图不再一致。
  • UI 超出对应版位的安全区域、元素重叠,或 1080 像素宽的画面中 HUD 数字小于 72 px。
  • 剪辑处出现黑帧:片尾卡必须在最后一段片段结束的同一刻开始,不要淡入淡出。
  • 片尾卡看起来像其他游戏也能用的通用卡片:每条广告都沿用相同布局和“PLAY NOW”。
  • 不同镜头的棋盘发生偏移,或棋子在镜头快结束时变形:提前剪掉,并提示固定镜头在提前一秒时稳定下来(蒸汽消失,棋子静止)。
  • 事件没有撞击声、撞击声与对应画面相差超过 0.1 s、开头第一秒没有声音,或峰值高于 -1 dBTP。
  • 计数器跳动、奖励、爆发效果或星星出现时,屏幕上没有对应的触发事件。

常见错误

  • 固定在移动物体上的标签会从物体上滑开。将标签放在静止的第二层,或使用 HUD。
  • 在合成过程中缩放全画布叠加层:它会从角落开始缩放,可能会超出画面。请按最终尺寸渲染。
  • 在虚构玩法中使用真实游戏、工作室或角色的名称,或让原型设计逐渐变得像某个真实对象:一个愤怒的司机角色后来变成了戴红帽、留胡子、穿蓝衬衫的形象。请为原创形象命名,并在制作动画前检查静帧。如果某个镜头因 IP 被标记:将描述改写为通用内容并重新运行;若再次被标记,则使用静帧分层制作该段内容。

评论

支持 Markdown