广告风格
唯一规则: 上方(或胸部区域)展示她所讲内容的机制;绝不要重复输入文字——字幕已经显示了。每个口述的想法变成一个图表,且在关键词处切换。
开始前请阅读 ../perfil-criadora.md 并加载(或创建)根目录下的 perfil.json。同时,在一条消息中询问缺少的信息:产品/服务名称、最终行动号召(CTA:“回复 X”或“点击链接”)以及她想要展示的真实图片(产品封面、带有数字的结果截图、她的其他视频画面)。将图片保存在项目的 assets/img/ 中。切勿虚构 logo、封面、数字、价格或结果。
src/index.template.html(从 template/index.template.html 复制而来)是一个包含 15 个现成图表的目录,并附有示例时间。保留 CSS 和辅助函数;重写标题并根据她的讲话选择/调整图表时间;删除未使用的模块。旧模板(仅文本)位于 src/classico.template.html(仅当用户要求该视觉时才使用:将其复制覆盖到 index.template.html)。
结构:标题然后图表(强制)
- 0 → ~5 秒:仅标题。 一个大标题(白线 + 高亮颜色的线条,约 90–125 px,可选择在关键词下划线扫描)。无图表,无应用界面,无图片。
- 标题之后:每个口述想法一个图表,在关键词处切换。 图表内的文本仅限短标签(1–3 个词:“之前”、“使用AI”、“你的业务”)。
- 当产品推广一个流程时,展示旧方法的复杂性旁边新方法的简单性(拥挤的时间线 + 时钟 + ✕ 对比一个订单 + ✓)。
目录中的图表(可重用并调整时间):
| 口述想法 | 图表 | 模块 |
|---|---|---|
| “我做了 X → 经历了 Y → 变成了 Z” | 手机卡片(真实截图)→ 虚线箭头 + 移动的点 → 圆节点 → 箭头 → 结果卡片 | B2 |
| 消除错误/停顿 | 音频波形:问题部分变为蓝色/红色并带有标签然后消失;时钟减少 | B3 |
| 自动发生 | 手机屏幕元素自动出现 + 计数器“0 点击” | B4 |
| 旧方法 × 新方法 | 两个面板:拥挤的时间线 + 时钟 + ✕ 对比一个订单 + ✓ | B5 |
| 异议(“没时间”、“我不会”) | 错误 ✕ / 正确 ✓:问题卡片导致 ✕ → 箭头 → 解决方案卡片带 ✓ | B6 |
| 疑问 → 证明 | 疑问气泡 → 测试卡片带 ✓ | B7 |
| “需要正确解释” | 通用订单 → 灰色结果 ✕ 对比正在输入的详细指令 ✓ | B8 |
| 交付清单 | 虚线空位,用真实图片或图标填充,每提及一项填充一个 | B9 |
| 课程/产品 | 真实封面 + 飞入芯片 + 上升图表 | B10 |
| 社交证明 | 真实截图 + 观看次数计数器上升(从截图中裁剪出计数器) | B11 |
| 复制风格 | 参考 → 节点 → 她的画面接收相同风格 + “= 相同风格” | B12 |
| 优惠/发布 | 标签 + 印章 → 带有发送栏的帖子 → “✓ 已发布” | B13 |
| 三个步骤(“录制、编辑、发布”) | 三个节点,每个词点亮 | B14 |
| 评论型 CTA | 输入单词(“我想要”)的评论框 + direct 卡片 | B15 |
| 链接型 CTA | 白条“了解更多 ›”脉冲 | B16 |
在渲染之前,阅读每个模块并询问:“这个区域展示了想法,还是仅仅重复了字幕?”
数字:B3、B5 和 B11 的计数器带有占位符(__B3_SEG_ANTES__、__B5_SEG_NOVO__、__VIEWS_PRINT_1__……)。montar.mjs 在还有任何占位符时会报错并停止。将其替换为真正的数字(她讲述的或从截图中读取的)或删除计数器。
图片:bruto.jpg 由视频自动输出(novo-anuncio.mjs)。其余所有(封面、截图、其他视频画面、参考)仅当用户发送时才使用。缺少图片 → 删除或重新设计图表(SVG 绘制的图标、文本卡片);切勿留下示例空位。名称/@ 和头像来自 perfil.json(montar.mjs 替换 __USUARIO__、__NOME__ 并放置头像;如果没有照片,则使用首字母圆形图标)。
安全区域(Meta Reels 广告 — 强制)
留出顶部 14%、底部 35%、两侧各 6% 的空白。在 1080×1920 下,安全框为 x 65–1015, y 270–1248:所有文字、数字、印章、CTA、字幕和图表标签都必须位于此范围内(包括动画缩放/旋转的最高点)。仅装饰(深色条、面板阴影)可以超出。使用 $K --em video-projects/<slug> node ../../$E/scripts/zonas-seguras.mjs renders/<arquivo>.mp4 assets/seguras.jpg t1 t2 … 进行检查(在每个帧上显示红色方框)。
图表区域(项目根目录下的 reel.json)
模块绘制在 1080×340 的区域中,montar.mjs 会定位和缩放此区域:
| 取景方式 | reel.json |
|---|---|
| 头部较低,顶部有空间(头顶低于 y ≈ 450) | {"faixa":"topo","zonaTop":280,"zonaAltura":<头顶 − 290>,"capTop":<下巴 + 20, 最大 1165>} |
| 头部在画面中较高(自拍近景、车内) | {"faixa":"peito","zonaTop":<下巴 + 20>,"zonaAltura":<≈ 1150 − zonaTop>,"capTop":<zonaTop + zonaAltura + 10, 最大 1165>} |
在 peito 模式下,一条深色条覆盖从下巴到安全区域底部,图表和字幕位于其上。字幕(高度 80 px)必须在 y 1248 之前结束。
视觉效果
| 元素 | 规则 |
|---|---|
| 深色条 | topo:从顶部向下渐变 rgba(0,0,0,.66) → 透明。peito:从下巴到约 y 1300 的深色条。 |
| 图表工具包 | 面板 rgba(16,16,19,.92) 半径 22 带 1 px 亮边;手机卡片 160×284 (9:16) 使用真实画面;AI 圆节点使用 cor_ia 颜色;虚线箭头带高亮颜色移动的点;红色 #ff453a ✕ 和绿色 #30d158 ✓ 圆形印章在关键词处弹出;Inter 字体用于界面文本。重复的装饰(波形条、时间线剪辑)使用模板种子确定的 rnd() — 绝不要使用 Math.random 或 GSAP 的 from:"random"。 |
| 排版 | 标题字体(Archivo Black 或 perfil 中的 fonte_titulo)用于标题、标签和字幕。白色;高亮颜色使用 cor_destaque(默认黄色 #FFD21F)。 |
| 动画 | 短入场:0.45–0.6 秒内上升 + 出现(power3.out / expo.out);印章使用 back.out;计数器奔跑;条填充;箭头增长。退出 0.28 秒。图表在说出的关键词处切换。 |
| 字幕 | 每次一个词,46 px,白色带柔和阴影(绝无轮廓),位于下巴正下方(reel.json 中的 capTop)。 |
| CTA | 输入单词的评论框 + direct 卡片,或白条“了解更多 ›”。 |
颜色、大小和禁止事项:template/DESIGN.md(复制到每个项目)。
裁剪规则
- 移除所有停顿(−30 dB / 0.15 s)和所有重复;尽可能 ≤ 90 秒。一句话说了两次:保留最后一句(修正后的)。强调性重复(“值得,值得”)不是错误。
- 广告裁剪不使用 J/L(
cortar.mjs --no-jl):画面必须与讲话完全同步。 - 裁剪后,重新转录
clean.mp4并查找重复的句子和裁剪掉的词。完整转录会隐藏重复:也使用短窗口扫描整个视频,一次调用完成:$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas 1,3,5,7,…(每 2 秒直到结束),并进行比较。
速度规则(用户的电脑可能较慢 — 优先于以下步骤)
novo-anuncio.mjs的转录已经是--rapido(仅用于选择裁剪点)。clean.mp4的重新转录(用于字幕)使用精确模型 — 每个裁剪版本一次。- 在一次调用中使用
--janelas检查拼接和重复。切勿一次处理一个窗口。 - 不要仅仅为了查看帧而渲染整个草稿。使用
$K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots(每个图表一个时间点)并查看 PNG。当快照正确时,只渲染一次。 - raw.mp4 / clean.mp4 的编码器自动选择。不要更改。
- 在每个慢速步骤之前,用一句简短的葡萄牙语说明正在运行的内容(“正在渲染广告 — 可能需要几分钟。”),以防止等待看起来像死机。
流程(所有命令通过启动器 $K)
E=.claude/skills/estilo-anuncio · M=.claude/skills/_motor · K = videos-opus 技能的启动器:"<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit,其中 <VO> 是 videos-opus 技能文件夹(包含指示您阅读本指南的 SKILL.md)。它将便携式程序添加到路径中,并在套件的工作目录中运行($K pasta 显示哪个目录;项目位于 <pasta>\video-projects\<slug>)。$K --em <subpasta> … 在其中运行。没有 npx、Python 或单独的 node:全部通过 $K。
- 项目 + 快速转录:
$K node $E/scripts/novo-anuncio.mjs "<video>" <slug>→video-projects/<slug>/包含 raw.mp4, raw.json,assets/palavras.txt、两个模板、assets/img/bruto.jpg和reel.json。 - 取景:联系表网格(
$K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/5,drawbox=x=65:y=270:w=950:h=979:color=red:t=6,drawgrid=w=1080:h=100:[email protected]:t=2,scale=270:-1,tile=7x2" -frames:v 1 assets/contato.png)然后查看:黄色线每 100 px,红色框 = 安全区域。找到头顶和下巴,并写入reel.json(“图表区域”表)。 - 裁剪:读取
assets/palavras.txt,写入assets/keeps.json;在assets/内:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs --no-jl。 - 校对:在项目根目录:
$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<perfil 中的术语>";阅读;进行--janelas扫描;调整裁剪直到干净;听到错误的词 →assets/caption-fixes.json。 - 合成:重写
src/index.template.html:0–5 秒标题,然后每个口述想法一个图表;使用$K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" …(项目根目录)获取时间;真实图片在assets/img/中。 - 组装 + 检查:
$K --em video-projects/<slug> node ../../$E/scripts/montar.mjs(如果仍有占位符或缺少图片则报错停止)→$K --em video-projects/<slug> hyperframes lint(0 个错误)→$K --em video-projects/<slug> hyperframes snapshot --at …针对每个图表并查看(脸部从未被遮挡,标签可读,数字正确,没有残余示例)→zonas-seguras.mjs在快照/时间点上 → 渲染和交付(通过启动器,在套件工作目录中):$K node $M/renderizar.mjs <slug>— 检查锁,后台渲染,验证并自动复制到prontos/。输出 3 = 仍在渲染:运行$K node $M/renderizar.mjs <slug> --esperar直到输出 PRONTO。切勿直接运行$K --em video-projects/<slug> hyperframes render或手动prontos.mjs。之后zonas-seguras.mjs renders/<slug>-final.mp4 …在图表时间点。 - 交付:用葡萄牙语简短回复:位置,裁剪内容,使用的图片,任何疑问,以及视频遵守 Meta 安全区域。切勿发布或上传广告。
广告变体(当用户要求“多个版本”时)
相同裁剪,不同的标题和/或 CTA:复制项目(video-projects/<slug>-v2),仅替换 B1 模块和 CTA,组装,快照标题并渲染。不要重新裁剪或重新转录。
交付后的调整
“去掉价格部分” → keeps.json,步骤 3–4,使用 ancoras.mjs 重新计算该段落后图表的时间,步骤 6。“更改标题” → B1 和步骤 6。“字幕更靠上” → reel.json 中的 capTop 和步骤 6。切勿重新制作她未要求更改的内容。