Communitygithub.com

aakashmehra/superbrag

将任意商业网站 URL 转换为专业的约 30 秒 1920x1080 宣传视频——包含搜索框钩子、暗色“问题”场景、“认识 <人物>”卡片、真实浏览器内展示产品面板、#1 排名+AI 答案证明场景、签名引用、收尾和点击的 CTA——配有 TTS 语音旁白、词同步动画、背景音乐和音效。当用户输入“/superbrag”、“superbrag <url>”或需要从网站或应用页面生成专业推广/广告视频时使用。

superbrag 是什么?

这是一个强大的 AI 代理技能,能够将任意商业网站 URL 自动转换为一段约 30 秒、分辨率为 1920x1080 的专业宣传视频。该技能完全基于 Claude Code 等支持技能调度的 AI 代理平台运行,但其设计理念可适配其他类似工具。它通过深入抓取网站内容(包括标题、元数据、图片、字体、颜色等设计元素),自动提取品牌视觉语言,并基于一个 9 节拍的叙事模板编排视频故事。视频包含搜索钩子、问题场景、人物介绍、产品演示、排名证明、客户引用和行动号召等环节,全程使用从网站自身提取的文案和素材,而非 AI 生成的内容。它利用 Remotion 渲染动画、Kokoro(免费本地)/MiniMax/ElevenLabs 进行 TTS 语音合成、faster-whisper 进行词级时间对齐,并整合背景音乐与音效。支持通过 `--focus` 参数指定客户类型或服务焦点,以及通过 `--voice` 切换不同语音引擎。输出视频位于用户项目文件夹下的 `superbrag-output/` 目录中。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aakashmehra/superbrag/tree/HEAD/skills/superbrag

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

/superbrag

输入网站 URL → 输出完成的宣传视频:一个关于该网站的简短、精良的视频,配有旁白、词同步动画和从网站本身提取的设计语言。颜色、字体、卡片、背景和头像均来自被推广的网站。 每一张图片和每一条声明都来自该网站。“屏幕”是使用 Remotion 渲染的 UI 模拟图,而非 AI 生成的像素。

<skill-dir> = 包含此文件的文件夹。<ws> = 用户当前的项目文件夹。 一次性设置(如果 <skill-dir>/.venv 和 <skill-dir>/template/node_modules 已存在则跳过):需要 Node.js 22+、FFmpeg、Python 3 和 espeak-ng,然后运行 bash <skill-dir>/scripts/setup.sh。它将安装 Remotion 和 Playwright、一个包含 Kokoro(免费本地语音)和 faster-whisper(词时间戳)的 Python 环境,并将其路径写入 <skill-dir>/.env。

调用

/superbrag https://example.com
/superbrag https://example.com --focus "restaurants"        # 指定要讲述故事的客户/服务
/superbrag https://example.com --voice minimax|elevenlabs|kokoro --voice-id <id>

默认值:语音使用 Kokoro af_heart(免费,本地)。如果在 <skill-dir>/.env 中设置了 MINIMAX_API_KEY 或 ELEVENLABS_API_KEY,则改用该提供商。输出文件位于 <ws>/superbrag-output/<domain-slug>/,如果该文件夹已存在,则会添加 -2、-3 等后缀。

步骤 1:捕获网站

export PATH="/opt/homebrew/bin:$PATH"   # macOS Homebrew;在其他系统上无害
node <skill-dir>/scripts/capture.mjs <url> <run>

这将写入 <run>/site.json(标题、元数据、标题、CTA、全文、字体、Google Fonts 链接、颜色、CSS 变量以及包含替代文本和上下文的图片列表)和 <run>/public/site/*(每张图片以及 screenshot-hero.png 和 screenshot-full.png)。

然后查看图片(阅读它们)。屏幕截图内打印的详细信息(评分、位置、配送时间)是最佳证明,因此请阅读它们,而不仅仅是 HTML。如果首页缺少人物照片或产品截图,请将一两个链接页面(关于我们、项目)捕获到同一 run 中。

关口: 你必须能够说出人物或企业名称、所在地点、2-4 项服务、最佳证明(评分、客户、数据)、优惠或保证、CTA 文本、URL,以及哪张图片是人物照片、头像或徽标、产品截图和证明图片。

步骤 2:编写故事(<run>/story.json)

选择一种客户类型和一个具体场景。一个清晰的故事胜过三个半吊子的故事,因此请忽略其他服务。除非 --focus 另有说明,否则选择视觉效果和证明最强的服务。然后填充 9 节拍公式。每节拍一句简短的口语句子,总计约 75-85 个词,大约持续 30 秒。

#类型任务示例(posflexgrowth.com)
1search钩子:正在搜索的客户“你的下一位患者正在搜索。”
2results问题:你不可见(暗色)“但另一家诊所排在了前面。”
3cost(进入:滑动)问题的代价(暗色收据,条形缩小)“而每个未接电话都转给了下一个接电话的人。”
4meet人物或品牌:照片+头像、姓名、角色、地点标签、标语“认识一下 PosFlex 创始人 Sajal Kumar,位于新西兰。”
5browser展示真实产品(网站截图)以及执行任务的界面“每个未接来电都会被短信回复并预约。一个都不漏。”
6answer(进入:模糊)证明:排名第一 + AI 答案推荐“在 Google 地图上位列前三,并且当人们询问 AI 时被提及。”
7quote纸上优惠或保证,盖章并签名“以及我们的零风险承诺,白纸黑字,设定 12 周目标。”
8payoff标语 + 高亮词;开始的搜索变成了结果“三项工作:被发现、被推荐、被预约。”
9end名称 + 点击的 CTA 按钮 + URL“从 PosFlex Growth 获取您的免费增长计划。”

规则:

  • 文案来自网站。 重用其自身的短语(元描述、服务线、运作方式、常见问题)。仅编造使其具体的场景细节:搜索查询、菜肴和价格、预订时间。保持编造细节在场景中合理:当地货币、当地人名。
  • 重复查询。 相同的搜索查询出现在节拍 1、2、6 和 8 中。故事自我循环,这正是它感觉经过精心设计的原因。
  • 说出提示词。 当提示词被说出时触发动画,因此 place、name/role/tagline 的第一个词、每个 chips 条目、highlight.cue、price 和 highlight(收尾)必须出现在该场景的 say 中。
  • 设计语言来自网站。 切勿重复使用其他品牌的视觉风格:每个视频必须看起来像被输入的那个网站。阅读 site.json → design(页面颜色、卡片圆角、边框和阴影、按钮、h1 字体、字号、粗细和字距、标题强调颜色、标记)并阅读 public/site/section-*.png 截图,然后设置:
    • primary = 主要品牌颜色(按钮和链接);ink = 网站文本颜色;paper = design.pageBackground;dark = 网站最暗色调(其墨色或暗色模式背景)用于问题场景。
    • highlight = 网站实际使用的柔和色(标记颜色或 CSS 变量,例如 --bg: #DFFAAA);accent = 第二种品牌颜色,用于药丸形状和数字。
    • style:radius = 最常见的卡片圆角像素值;border = 卡片边框颜色(如果卡片无边框则省略);shadow = flat(无)、soft(微弱着色)或 lifted(深沉);tracking = h1 字距 ÷ 字号(例如 -1.2px/60px = -0.02);headWeight = h1 字重;emphasis = design.headlineEmphasisColors[0]。
    • 字体:head = h1 字体,ui = 正文字体,script = 网站的手写字体,或 Caveat。所有字体必须是 Google Fonts 字体。
    • 如果网站以两种色调书写标题(“填满你的日历”),则在 title、headline 和 name 中使用 *星号* 标记相同的词(例如 "PosFlex*.*" 表示徽标点)。它们将以强调色渲染。
  • background: 对于浅色网站,使用 light(网站页面颜色,纯色),这适用于大多数情况。sky(浮动卡通云在纯品牌色上)仅在网站本身具有天空或云朵主题时使用。soft(纯品牌色配白色文本)用于醒目、饱和的品牌。任何地方都不使用渐变:仅纯色。
  • 头像: build.py 会自动在捕获到网站 Apple 触摸图标时将其用于“认识”徽章和结束卡片。仅当网站没有头像,或者该场景涉及其他人(例如,以制造者结束的案例研究)时才自己设置 avatar:此时添加 "keepAvatar": true。
  • 照片: 对于 meet,使用真实人物:创始人或所有者,如果首页没有,则来自关于我们或团队页面(将该页面捕获到临时文件夹并复制图像)。裁切掉图像上打印的任何名称或标题(ffmpeg -vf crop=...)。
  • 不是人物? 在 meet 中,使用徽标或店面作为 photo,使用吉祥物或徽标作为 avatar,并设置 kicker: "Meet" 和品牌名称。
  • 适应其他业务: 一个技工网站可能是 search “紧急水管工附近” → results 竞争对手/广告 → cost “本周未接电话” → browser 报价表单 + 点击呼叫 → answer → quote “固定价格” → payoff “工作已预订”。SaaS:搜索成为待完成的工作,成本是浪费时间,浏览器展示应用。
  • 发音: 检查品牌和人名。对每个候选拼写用 TTS 朗读一行,用 $WHISPER_PYTHON 转写每个,并保留被识别为真实名称的拼写。对于 PosFlex,“Pos Flex”被听成“Poe's Flex”,而“Poss Flex”被听成“POSFLEX”。将获胜者放入 voice.pronounce,例如 {"PosFlex": "Poss Flex"}。屏幕上的文本保持正确。

模式:复制 <skill-dir>/examples/posflexgrowth.story.json(一个具有完整 style 令牌的浅色网站)或 snapshare.story.json(一个应用,天空主题,带有手机场景)并更改值。每个场景类型都有这些属性(除非标记为 *,否则都是可选的):

  • search:query*、title、suggestions[]
  • results:query*、results[{title, sub}]、title、pill
  • cost:title*、label、items[{name, price}]、totalLabel、total*、keep*、cut*、cutCue(开始条形缩小的词,默认为“commission”)
  • meet:photo*、avatar、kicker、name*、role、place、tagline
  • browser:screenshot*、tab、panel{title*、items[{name, price}]、chips[]、extra{image, title, sub}、highlight{label, value, cue}、button}
  • answer:query*、result{image*、rank、name*、meta、rating、ratingLabel}、below、aiLabel、answer、source{icon, label}
  • quote:title*、forLabel、checks[]、priceLabel、price、stamp、signature、signNote、signCue(默认为“writing”)
  • payoff:headline*、highlight、query*、toast{title*、sub、meta}*
  • end:name*、button*、avatar、url
  • phone(应用和移动产品):phone*(一个带透明背景的带框手机 PNG,例如来自网站或 App Store 截图)、title*、kicker、big(一个大的统计数据,例如 "*0*")、points[](当它们的第一个词被说出时弹出的药丸状元素)、icon(应用图标)、side(left | right)、bg(brand | paper | dark)。对于应用广告,用 3-5 个手机场景替换节拍 4-6,每个场景一个功能。请参阅 examples/snapshare.story.json。

每个场景还可以包含 say、enter(cut | slide | blur,默认为 cut)和 hold(额外秒数)。图片路径相对于 <run>/public(site/...)。

关口: story.json 包含按此顺序排列的 9 个节拍。每个提示词出现在其 say 中。除场景细节外,所有文案均追溯至 site.json 或图片。

步骤 3:构建语音和时间线

python3 <skill-dir>/scripts/build.py <run>

这将为每行运行 TTS(按文本缓存)、修剪静音、将每行放置在其场景剪辑后 0.18 秒、使用 faster-whisper 获取词时间戳,并写入 <run>/props.json 和 <run>/public/voice.wav。它会打印时间线,总计应为 28-34 秒。如果时间线过长,请缩短台词;不要加速语音。在任何故事编辑后重新运行它;仅视觉编辑不会再次调用 TTS。

步骤 4:预览,然后渲染

bash <skill-dir>/scripts/render.sh <run> stills "40,120,200,300,450,560,680,780,880"   # 从构建输出中选取每个场景内部的帧
bash <skill-dir>/scripts/render.sh <run>                                                # 完整渲染,大约 30 秒

在完整渲染之前阅读 stills/sheet.jpg。检查文本是否溢出卡片,长名称是否合适(缩短文案而不是缩小字体),图片是否显示正确的主题,以及颜色在背景上是否可读。完整渲染后,阅读 qa-sheet.jpg(每秒一帧)。

关口: <run>/superbrag.mp4 存在,音量约为 -14 LUFS(已打印)。QA 表显示所有 9 个节拍,没有任何内容被截断。

步骤 5:交付

告诉用户 superbrag.mp4 的路径、其长度、你选择了哪个客户故事及其原因,以及哪些细节是编造的(查询、价格)。如果 Kokoro 朗读听起来平淡,则提供语音切换(MiniMax 或 ElevenLabs)。 发布时的署名行:“Music: Sascha Ende, ende.app (CC BY 4.0)”。

注意事项

  • Remotion 对个人和最多 3 人的公司免费;更大的公司需要许可证(remotion.dev/license)。
  • 要更改每个视频的外观,请编辑 template/src/scenes.tsx(布局)和 template/src/ui.tsx(运动、背景、字体)。使用 cd template && npx remotion studio src/index.ts --props=<run>/props.json --public-dir=<run>/public 进行预览。
  • 目前仅支持横向 1920x1080。竖屏需要其自身的布局,位于 scenes.tsx 中。

相关技能