From e4e8dcfad8ebe6be83fb4e0d83026825eaeb4fbd Mon Sep 17 00:00:00 2001 From: dcwebsolutions2016-design <231010317+dcwebsolutions2016-design@users.noreply.github.com> Date: Sat, 10 Oct 2026 16:26:23 -0300 Subject: [PATCH] Add Oney Araujo editing skills to the kit Adds six Claude skills from the "pacote-edite-reels" course package so the kit can edit talking-head recordings in Oney Araujo's styles: reel-oney (phone look), reel-editorial-oney (serif/editorial), reel-explicativo-oney (explainer/news band), video-colagem-oney (collage), anuncios-oney (ads) and vsl (sales video). Each skill ships its SKILL.md, build scripts, HTML templates, fonts and reference images. The shared _perfil-oney.md tells every skill how to read or create the creator's perfil.json. Co-Authored-By: Claude Fable 5.1 --- .claude/skills/_perfil-oney.md | 18 + .claude/skills/anuncios-oney/SKILL.md | 109 ++ .../skills/anuncios-oney/scripts/anchors.mjs | 11 + .../anuncios-oney/scripts/build-cut.mjs | 67 + .../anuncios-oney/scripts/build-index.mjs | 29 + .../skills/anuncios-oney/scripts/encoder.mjs | 28 + .../anuncios-oney/scripts/find-prints.mjs | 24 + .../anuncios-oney/scripts/new-anuncio.mjs | 48 + .../anuncios-oney/scripts/safe-sheet.mjs | 25 + .../scripts/transcribe-local-whisper.py | 94 ++ .../skills/anuncios-oney/template/DESIGN.md | 32 + .../template/esquemas.template.html | 549 +++++++ .../template/example-img/agora.png | Bin 0 -> 13499 bytes .../template/example-img/antes.png | Bin 0 -> 13696 bytes .../template/example-img/avatar.png | Bin 0 -> 4776 bytes .../template/example-img/capa.jpg | Bin 0 -> 28628 bytes .../template/example-img/editado.jpg | Bin 0 -> 10836 bytes .../template/example-img/exemplo1.jpg | Bin 0 -> 8116 bytes .../template/example-img/exemplo2.jpg | Bin 0 -> 9139 bytes .../template/example-img/exemplo3.jpg | Bin 0 -> 8324 bytes .../template/example-img/exemplo4.jpg | Bin 0 -> 9158 bytes .../template/example-img/print1.png | Bin 0 -> 7528 bytes .../template/example-img/print2.png | Bin 0 -> 7863 bytes .../template/example-img/print3.png | Bin 0 -> 7946 bytes .../template/example-img/produto.jpg | Bin 0 -> 18928 bytes .../template/example-img/referencia.jpg | Bin 0 -> 9692 bytes .../template/fonts/Advercase-Bold.woff2 | Bin 0 -> 31796 bytes .../template/fonts/Advercase-Regular.woff2 | Bin 0 -> 30324 bytes .../template/index.template.html | 246 ++++ .claude/skills/reel-editorial-oney/SKILL.md | 73 + .../reel-editorial-oney/scripts/anchors.mjs | 11 + .../reel-editorial-oney/scripts/build-cut.mjs | 67 + .../scripts/build-index.mjs | 48 + .../reel-editorial-oney/scripts/encoder.mjs | 28 + .../scripts/find-prints.mjs | 24 + .../reel-editorial-oney/scripts/new-reel.mjs | 42 + .../scripts/transcribe-local-whisper.py | 94 ++ .../reel-editorial-oney/template/DESIGN.md | 28 + .../template/fonts/Caveat-Bold.woff2 | Bin 0 -> 51020 bytes .../fonts/InstrumentSerif-Italic.woff2 | Bin 0 -> 22128 bytes .../template/fonts/Inter-Medium.ttf | Bin 0 -> 315132 bytes .../template/fonts/Inter-SemiBold.ttf | Bin 0 -> 316220 bytes .../template/index.template.html | 145 ++ .claude/skills/reel-explicativo-oney/SKILL.md | 135 ++ .../references/diagram-step3.png | Bin 0 -> 135336 bytes .../references/sheet-0.jpg | Bin 0 -> 164688 bytes .../references/sheet-24.jpg | Bin 0 -> 165266 bytes .../references/sheet-48.jpg | Bin 0 -> 193380 bytes .../references/sheet-72.jpg | Bin 0 -> 179898 bytes .../scripts/build-index.mjs | 72 + .../reel-explicativo-oney/scripts/encoder.mjs | 28 + .../scripts/new-reel.mjs | 42 + .../scripts/tight-cut.py | 87 ++ .../reel-explicativo-oney/template/DESIGN.md | 33 + .../template/fonts/Advercase-Bold.woff2 | Bin 0 -> 31796 bytes .../template/fonts/Advercase-Regular.woff2 | Bin 0 -> 30324 bytes .../template/fonts/Inter-Medium.ttf | Bin 0 -> 315132 bytes .../template/fonts/Inter-Regular.ttf | Bin 0 -> 310252 bytes .../template/fonts/Inter-SemiBold.ttf | Bin 0 -> 316220 bytes .../template/index.template.html | 129 ++ .claude/skills/reel-oney/SKILL.md | 78 + .../references/oney-reels-frames.png | Bin 0 -> 2514336 bytes .../skills/reel-oney/references/sheet1.jpg | Bin 0 -> 274066 bytes .../skills/reel-oney/references/sheet2.jpg | Bin 0 -> 301817 bytes .../skills/reel-oney/references/sheet3.jpg | Bin 0 -> 258487 bytes .../skills/reel-oney/references/sheet4.jpg | Bin 0 -> 331894 bytes .claude/skills/reel-oney/scripts/anchors.mjs | 11 + .../skills/reel-oney/scripts/build-cut.mjs | 67 + .../skills/reel-oney/scripts/build-index.mjs | 58 + .claude/skills/reel-oney/scripts/encoder.mjs | 28 + .../skills/reel-oney/scripts/find-prints.mjs | 24 + .../skills/reel-oney/scripts/index-prints.ps1 | 44 + .claude/skills/reel-oney/scripts/new-reel.mjs | 42 + .../scripts/transcribe-local-whisper.py | 94 ++ .claude/skills/reel-oney/template/DESIGN.md | 0 .../template/fonts/Advercase-Bold.woff2 | Bin 0 -> 31796 bytes .../template/fonts/Advercase-Regular.woff2 | Bin 0 -> 30324 bytes .../reel-oney/template/index.template.html | 56 + .claude/skills/video-colagem-oney/SKILL.md | 111 ++ .../video-colagem-oney/scripts/beat-sheet.mjs | 17 + .../scripts/build-index.mjs | 108 ++ .../video-colagem-oney/scripts/cutout.py | 20 + .../video-colagem-oney/scripts/find-photos.py | 28 + .../video-colagem-oney/scripts/head-top.mjs | 35 + .../scripts/matte-person.py | 53 + .../video-colagem-oney/scripts/print-news.mjs | 30 + .../video-colagem-oney/scripts/remap-times.py | 56 + .../video-colagem-oney/template/DESIGN.md | 37 + .../template/index.vertical.example.html | 471 ++++++ .claude/skills/vsl/SKILL.md | 262 ++++ .claude/skills/vsl/references/BREAKDOWN.md | 112 ++ .claude/skills/vsl/references/SAFE-ZONES.md | 28 + .claude/skills/vsl/scripts/build-clean.mjs | 51 + .claude/skills/vsl/scripts/build-index.mjs | 48 + .claude/skills/vsl/scripts/hf-auth.mjs | 51 + .../skills/vsl/scripts/higgsfield-edit.mjs | 78 + .claude/skills/vsl/scripts/higgsfield-key.mjs | 34 + .claude/skills/vsl/scripts/make-sfx.mjs | 32 + .claude/skills/vsl/scripts/matte.py | 58 + .claude/skills/vsl/scripts/new-vsl.mjs | 44 + .claude/skills/vsl/scripts/reveal.mjs | 17 + .../skills/vsl/scripts/safe-zone-check.mjs | 100 ++ .claude/skills/vsl/scripts/splice-hf.py | 130 ++ .claude/skills/vsl/scripts/tight-jl-cut.py | 117 ++ .claude/skills/vsl/scripts/track-mouth.py | 43 + .../skills/vsl/scripts/transcribe-fillers.py | 29 + .claude/skills/vsl/template/DESIGN.md | 48 + .claude/skills/vsl/template/beats.example.js | 98 ++ .claude/skills/vsl/template/beats.gallery.js | 34 + .../skills/vsl/template/beats.live.example.js | 121 ++ .../vsl/template/clean/demo.template.html | 167 +++ .../vsl/template/clean/index.template.html | 328 +++++ .../vsl/template/fonts/Advercase-Bold.woff2 | Bin 0 -> 31796 bytes .../template/fonts/Advercase-Regular.woff2 | Bin 0 -> 30324 bytes .claude/skills/vsl/template/fonts/Anybody.ttf | Bin 0 -> 201352 bytes .../vsl/template/fonts/JetBrainsMono.ttf | Bin 0 -> 187208 bytes .../skills/vsl/template/fonts/OFL-Anybody.txt | 93 ++ .../vsl/template/fonts/OFL-JetBrainsMono.txt | 93 ++ .../template/fonts/OFL-PlusJakartaSans.txt | 93 ++ .../vsl/template/fonts/PlusJakartaSans.ttf | Bin 0 -> 176288 bytes .claude/skills/vsl/template/gsap.min.js | 11 + .../skills/vsl/template/index.template.html | 48 + .claude/skills/vsl/template/kit.css | 226 +++ .claude/skills/vsl/template/kit.js | 1283 +++++++++++++++++ 124 files changed, 7711 insertions(+) create mode 100644 .claude/skills/_perfil-oney.md create mode 100644 .claude/skills/anuncios-oney/SKILL.md create mode 100644 .claude/skills/anuncios-oney/scripts/anchors.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/build-cut.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/build-index.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/encoder.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/find-prints.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/new-anuncio.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/safe-sheet.mjs create mode 100644 .claude/skills/anuncios-oney/scripts/transcribe-local-whisper.py create mode 100644 .claude/skills/anuncios-oney/template/DESIGN.md create mode 100644 .claude/skills/anuncios-oney/template/esquemas.template.html create mode 100644 .claude/skills/anuncios-oney/template/example-img/agora.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/antes.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/avatar.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/capa.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/editado.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/exemplo1.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/exemplo2.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/exemplo3.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/exemplo4.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/print1.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/print2.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/print3.png create mode 100644 .claude/skills/anuncios-oney/template/example-img/produto.jpg create mode 100644 .claude/skills/anuncios-oney/template/example-img/referencia.jpg create mode 100644 .claude/skills/anuncios-oney/template/fonts/Advercase-Bold.woff2 create mode 100644 .claude/skills/anuncios-oney/template/fonts/Advercase-Regular.woff2 create mode 100644 .claude/skills/anuncios-oney/template/index.template.html create mode 100644 .claude/skills/reel-editorial-oney/SKILL.md create mode 100644 .claude/skills/reel-editorial-oney/scripts/anchors.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/build-cut.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/build-index.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/encoder.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/find-prints.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/new-reel.mjs create mode 100644 .claude/skills/reel-editorial-oney/scripts/transcribe-local-whisper.py create mode 100644 .claude/skills/reel-editorial-oney/template/DESIGN.md create mode 100644 .claude/skills/reel-editorial-oney/template/fonts/Caveat-Bold.woff2 create mode 100644 .claude/skills/reel-editorial-oney/template/fonts/InstrumentSerif-Italic.woff2 create mode 100644 .claude/skills/reel-editorial-oney/template/fonts/Inter-Medium.ttf create mode 100644 .claude/skills/reel-editorial-oney/template/fonts/Inter-SemiBold.ttf create mode 100644 .claude/skills/reel-editorial-oney/template/index.template.html create mode 100644 .claude/skills/reel-explicativo-oney/SKILL.md create mode 100644 .claude/skills/reel-explicativo-oney/references/diagram-step3.png create mode 100644 .claude/skills/reel-explicativo-oney/references/sheet-0.jpg create mode 100644 .claude/skills/reel-explicativo-oney/references/sheet-24.jpg create mode 100644 .claude/skills/reel-explicativo-oney/references/sheet-48.jpg create mode 100644 .claude/skills/reel-explicativo-oney/references/sheet-72.jpg create mode 100644 .claude/skills/reel-explicativo-oney/scripts/build-index.mjs create mode 100644 .claude/skills/reel-explicativo-oney/scripts/encoder.mjs create mode 100644 .claude/skills/reel-explicativo-oney/scripts/new-reel.mjs create mode 100644 .claude/skills/reel-explicativo-oney/scripts/tight-cut.py create mode 100644 .claude/skills/reel-explicativo-oney/template/DESIGN.md create mode 100644 .claude/skills/reel-explicativo-oney/template/fonts/Advercase-Bold.woff2 create mode 100644 .claude/skills/reel-explicativo-oney/template/fonts/Advercase-Regular.woff2 create mode 100644 .claude/skills/reel-explicativo-oney/template/fonts/Inter-Medium.ttf create mode 100644 .claude/skills/reel-explicativo-oney/template/fonts/Inter-Regular.ttf create mode 100644 .claude/skills/reel-explicativo-oney/template/fonts/Inter-SemiBold.ttf create mode 100644 .claude/skills/reel-explicativo-oney/template/index.template.html create mode 100644 .claude/skills/reel-oney/SKILL.md create mode 100644 .claude/skills/reel-oney/references/oney-reels-frames.png create mode 100644 .claude/skills/reel-oney/references/sheet1.jpg create mode 100644 .claude/skills/reel-oney/references/sheet2.jpg create mode 100644 .claude/skills/reel-oney/references/sheet3.jpg create mode 100644 .claude/skills/reel-oney/references/sheet4.jpg create mode 100644 .claude/skills/reel-oney/scripts/anchors.mjs create mode 100644 .claude/skills/reel-oney/scripts/build-cut.mjs create mode 100644 .claude/skills/reel-oney/scripts/build-index.mjs create mode 100644 .claude/skills/reel-oney/scripts/encoder.mjs create mode 100644 .claude/skills/reel-oney/scripts/find-prints.mjs create mode 100644 .claude/skills/reel-oney/scripts/index-prints.ps1 create mode 100644 .claude/skills/reel-oney/scripts/new-reel.mjs create mode 100644 .claude/skills/reel-oney/scripts/transcribe-local-whisper.py create mode 100644 .claude/skills/reel-oney/template/DESIGN.md create mode 100644 .claude/skills/reel-oney/template/fonts/Advercase-Bold.woff2 create mode 100644 .claude/skills/reel-oney/template/fonts/Advercase-Regular.woff2 create mode 100644 .claude/skills/reel-oney/template/index.template.html create mode 100644 .claude/skills/video-colagem-oney/SKILL.md create mode 100644 .claude/skills/video-colagem-oney/scripts/beat-sheet.mjs create mode 100644 .claude/skills/video-colagem-oney/scripts/build-index.mjs create mode 100644 .claude/skills/video-colagem-oney/scripts/cutout.py create mode 100644 .claude/skills/video-colagem-oney/scripts/find-photos.py create mode 100644 .claude/skills/video-colagem-oney/scripts/head-top.mjs create mode 100644 .claude/skills/video-colagem-oney/scripts/matte-person.py create mode 100644 .claude/skills/video-colagem-oney/scripts/print-news.mjs create mode 100644 .claude/skills/video-colagem-oney/scripts/remap-times.py create mode 100644 .claude/skills/video-colagem-oney/template/DESIGN.md create mode 100644 .claude/skills/video-colagem-oney/template/index.vertical.example.html create mode 100644 .claude/skills/vsl/SKILL.md create mode 100644 .claude/skills/vsl/references/BREAKDOWN.md create mode 100644 .claude/skills/vsl/references/SAFE-ZONES.md create mode 100644 .claude/skills/vsl/scripts/build-clean.mjs create mode 100644 .claude/skills/vsl/scripts/build-index.mjs create mode 100644 .claude/skills/vsl/scripts/hf-auth.mjs create mode 100644 .claude/skills/vsl/scripts/higgsfield-edit.mjs create mode 100644 .claude/skills/vsl/scripts/higgsfield-key.mjs create mode 100644 .claude/skills/vsl/scripts/make-sfx.mjs create mode 100644 .claude/skills/vsl/scripts/matte.py create mode 100644 .claude/skills/vsl/scripts/new-vsl.mjs create mode 100644 .claude/skills/vsl/scripts/reveal.mjs create mode 100644 .claude/skills/vsl/scripts/safe-zone-check.mjs create mode 100644 .claude/skills/vsl/scripts/splice-hf.py create mode 100644 .claude/skills/vsl/scripts/tight-jl-cut.py create mode 100644 .claude/skills/vsl/scripts/track-mouth.py create mode 100644 .claude/skills/vsl/scripts/transcribe-fillers.py create mode 100644 .claude/skills/vsl/template/DESIGN.md create mode 100644 .claude/skills/vsl/template/beats.example.js create mode 100644 .claude/skills/vsl/template/beats.gallery.js create mode 100644 .claude/skills/vsl/template/beats.live.example.js create mode 100644 .claude/skills/vsl/template/clean/demo.template.html create mode 100644 .claude/skills/vsl/template/clean/index.template.html create mode 100644 .claude/skills/vsl/template/fonts/Advercase-Bold.woff2 create mode 100644 .claude/skills/vsl/template/fonts/Advercase-Regular.woff2 create mode 100644 .claude/skills/vsl/template/fonts/Anybody.ttf create mode 100644 .claude/skills/vsl/template/fonts/JetBrainsMono.ttf create mode 100644 .claude/skills/vsl/template/fonts/OFL-Anybody.txt create mode 100644 .claude/skills/vsl/template/fonts/OFL-JetBrainsMono.txt create mode 100644 .claude/skills/vsl/template/fonts/OFL-PlusJakartaSans.txt create mode 100644 .claude/skills/vsl/template/fonts/PlusJakartaSans.ttf create mode 100644 .claude/skills/vsl/template/gsap.min.js create mode 100644 .claude/skills/vsl/template/index.template.html create mode 100644 .claude/skills/vsl/template/kit.css create mode 100644 .claude/skills/vsl/template/kit.js diff --git a/.claude/skills/_perfil-oney.md b/.claude/skills/_perfil-oney.md new file mode 100644 index 00000000..ccc14bf3 --- /dev/null +++ b/.claude/skills/_perfil-oney.md @@ -0,0 +1,18 @@ +# Perfil do criador (lido por todas as skills /reel-oney, /reel-editorial-oney, /reel-explicativo-oney, /video-colagem-oney, /anuncios-oney) + +Antes do primeiro vídeo, procure `perfil.json` na raiz do kit. Se não existir, pergunte ao aluno +UMA vez, numa mensagem só, e salve: + +```json +{ + "nome": "Nome que aparece no perfil", + "usuario": "arroba_sem_o_arroba", + "nicho": "Ex.: Marketing Digital", + "seguidores": "Ex.: 12,4 mil (como aparece no Instagram)", + "pasta_prints": "C:\\Users\\\\Pictures\\Screenshots", + "avatar": "caminho da foto de perfil (opcional)" +} +``` + +Use esses dados sempre que um template mostrar nome, @, avatar ou número de seguidores. +Nunca invente números, logos, capas ou prints. Se faltar algo, peça ao aluno o print exato. diff --git a/.claude/skills/anuncios-oney/SKILL.md b/.claude/skills/anuncios-oney/SKILL.md new file mode 100644 index 00000000..d9656f5e --- /dev/null +++ b/.claude/skills/anuncios-oney/SKILL.md @@ -0,0 +1,109 @@ +--- +name: anuncios-oney +description: Edit a talking-head recording into an AD in Oney Araujo's style (anúncio / criativo) — a headline title in the first 5 s, then animated SCHEMATICS above the head that illustrate what the person is saying (flows, before/after, não ✕ / sim ✓, mock app screens, real prints with view counters) instead of text that repeats the captions; word-by-word captions, Meta Reels safe zones, no pauses or retakes. Use when the user says /anuncios-oney", "anúncio", "criativo", or asks for the ad-style edit. For organic Reels use reel-oney instead. +--- + +# Anúncios no estilo do Oney + +First read `../_perfil-oney.md` and load (or create) `perfil.json`. Also ask, if not given: product name, +the call to action, and the product images/prints to show (cover, mockup, results, prints of past videos +with their view counts). Put them in `assets/img/` replacing the placeholders (see the list below). + +`src/index.template.html` (copied from `template/esquemas.template.html`) is a full working ad from the +course author ("Edição Viral com Claude", 1:48) with placeholders where his images were. Keep its CSS +system and helpers; rewrite the headline and the schematics for the new script. The older text-beat +ad is in `src/classico.template.html` (use only if the user asks for that look). + +## Structure: headline, then schematics (mandatory) + +1. **0 → ~5 s: headline only.** One big Advercase Bold title (white line + yellow line, ~90–125 px, + optional yellow underline sweep on the key word). No diagram, no UI, no images. +2. **After the headline: one schematic per spoken idea, changing on the word.** The top zone SHOWS the + mechanism; it never re-types the sentence (the captions already say it). Text inside a schematic is + limited to short labels (1–3 words: "bruto · 4:05", "gaguejo", "com IA", "seu vídeo"). +3. When the product sells a process, show the **complexity of the old way next to the simplicity of the + new one** (e.g. crowded manual timeline + clock to 40:00 + ✕ vs one request + 10:00 + ✓). + +Schematic patterns in the template (reuse and re-time them): + +| Idea said | Schematic | +|---|---| +| "I did X → sent to Y → got Z" | Flow: phone card (raw frame) → dashed arrow + travelling dot → round node → arrow → result phone card | +| removes errors / pauses | Waveform panel: problem parts turn blue/red with tags, then shrink away; timer counts down to the new length | +| happens automatically | Phone mock where elements appear by themselves + "0 cliques" counter | +| old way × new way | Two panels: dense multi-track timeline + clock + ✕ stamp vs a single request box + ✓ stamp | +| objections ("sem tempo", "não sei") | **Não ✕ / Sim ✓**: problem cards each get a red ✕ → arrow → solution card with green ✓ | +| doubt → proof | Chat bubble with the doubt → test card with ✓ | +| "you must explain what you want" | Generic request → grey generic result ✕ vs a detailed instruction file typing → ✓ | +| list of offerings | Dashed empty slots that fill with real frames/images, one per spoken item | +| course / product | Real cover + chips flying into it + rising chart | +| social proof | Real prints with view counters ticking up (crop the print's own counter out) | +| copy a style | Reference → node → the user's frame receiving the same styling + "= mesmo estilo" | +| offer / launch | Price-tag shape + rubber-stamp discount → post mock with upload bar → "✓ publicado" | +| "grava, edita, posta" | Three icon nodes lit on each word | + +Before rendering, read every beat and ask: "does the top zone SHOW it, or just repeat the caption?" + +Placeholders in `assets/img/` (replace with the user's real images; never invent logos, covers or results): +`bruto.jpg` (made automatically from the recording) · `editado.jpg` (frame of an edited video) · `capa.jpg` +(product cover, portrait) · `exemplo1-4.jpg` (frames of the user's own videos) · `referencia.jpg` · +`print1-3.png` (prints of the user's videos) · `avatar.png` · `produto.jpg`, `antes.png`, `agora.png` (classic +template). Write the user's @ from `perfil.json` where the template says `seu_usuario`. If an image is +missing, drop or redesign that schematic instead of showing a placeholder. + +## Safe zones (Meta Reels ads — mandatory) + +Keep **14 % top, 35 % bottom, 6 % each side** free of text. On 1080×1920 the safe box is +**x 65–1015, y 270–1248**: every word, number, badge, CTA and the schematics' labels must sit inside it +(including scale/rotation peaks). Only decoration (scrim, panel shadows) may bleed. Captions go on the chest +just under the chin, centred, and above y ~1640 (the post's name/caption start below). Check with +`node $S/safe-sheet.mjs renders/.mp4 safe.jpg t1 t2 …` (red box on each frame). + +## Look + +| Element | Rule | +|---|---| +| Top zone | y 280 → head top (measure per video on a contact sheet). Soft top scrim `linear-gradient(180deg, rgba(0,0,0,.66) → transparent)`. | +| Schematic kit | Dark panels `rgba(16,16,19,.92)` radius 22 with a 1 px light border; phone cards 160×284 (9:16) with real frames; round orange node `#d97757` for the AI step; dashed arrows with a travelling yellow dot; red `#ff453a` ✕ and green `#30d158` ✓ round stamps that pop on the word; UI labels in Arial bold. Repeated decoration (waveform bars, timeline clips) uses the template's seeded `rnd()`, never `Math.random` or GSAP `from:"random"`. | +| Type | Advercase Bold for headline, labels, captions. White; accent **yellow `#ffd21f`**. | +| Motion | Short entrances: rise + fade 0.45–0.6 s (`power3.out` / `expo.out`), stamps `back.out` pop, counters ticking, bars filling, arrows growing. Exits 0.28 s fade. Beats change on the spoken word. | +| Captions | One word at a time, Advercase Bold 46 px, white with dark stroke, just under the chin (`#cap{top:…}`, set per video). | +| CTA | Comment-box mock typing the keyword ("EU QUERO") + direct-message card, or a white "Saiba mais ›" bar. | + +## Cuts + +Remove every pause (−30 dB / 0.15 s) and every retake, ≤ 90 s if possible. When a sentence is said twice, +keep the LAST (corrected) version. Run `build-cut.mjs --no-jl`, re-transcribe `clean.mp4` and read it for +doubled phrases / clipped words. The full transcript HIDES retakes: also scan the whole clean video in short +windows in ONE call, `$PY $S/transcribe-local-whisper.py clean.mp4 --windows 1,3,5,7,…` (every 2 s to the +end), and compare. + +## Speed rules (students may have slow PCs — these override the steps below) + +- The raw transcription in the scaffold step is automatically `--fast` (small model when there is no NVIDIA GPU): + it is only used to choose the cut. The re-transcription of `clean.mp4` (captions) uses the accurate settings — + run it once per cut version, not after every small change. +- Check splices / retakes in ONE call (one model load) with `--windows`. Never transcribe windows one by one. +- Do not render a full draft just to look at frames. Use `npx hyperframes snapshot --at t1,t2,… -o snapshots` + (one time per beat) and look at the PNGs. Render the video once, when the snapshots are right: + `npx hyperframes render --output renders/-final.mp4`. Render again only for requested changes. +- raw.mp4 / clean.mp4 encoding picks the fastest encoder automatically. Do not override it. +- Before each slow step, tell the user in one short Portuguese line what is running and that it may take a few + minutes ("Transcrevendo o vídeo — no seu PC pode levar uns minutos."), so the wait never looks like a freeze. + +## Workflow (run from the kit root) + +`S=.claude/skills/anuncios-oney/scripts` · `PY=~/.venvs/whisper/Scripts/python.exe` (Mac: `~/.venvs/whisper/bin/python`) + +1. `node $S/new-anuncio.mjs "