Communitygithub.com

robertomanfroi/videos-opus

Transforme uma gravação vertical (pessoa falando para a câmera) num anúncio/criativo para Meta Ads: headline nos primeiros 5 segundos, depois esquemas animados que ilustram a fala (fluxos, antes/depois, telas de app, prints com contadores), legenda palavra a palavra, respeitando as zonas seguras dos anúncios do Meta, sem pausas nem repetições.

Qu'est-ce que videos-opus ?

Cette skill transforme un enregistrement vertical (une personne parlant à la caméra) en une annonce publicitaire pour Meta Ads (Facebook/Instagram). Elle commence par un titre accrocheur (headline) durant les 5 premières secondes, puis enchaîne avec des schémas animés qui illustrent visuellement chaque idée prononcée : flux de processus, comparaisons avant/après, icônes d'erreur/succès, captures d'écran d'applications, preuves sociales avec compteurs, etc. Le texte est synchronisé mot à mot sous forme de sous-titres. La skill respecte strictement les zones de sécurité imposées par Meta pour les publicités Reels (14% en haut, 35% en bas, 6% sur les côtés) afin que tout élément important reste visible. Elle automatise le découpage des silences et répétitions, la composition des schémas à partir d'un catalogue de 16 blocs prêts à l'emploi, et la vérification finale (aucun marqueur oublié, images réelles, respect des dimensions). Elle est conçue pour la plateforme videos-opus (commande `$K`) et s'utilise notamment quand la skill `editar` délègue le style "annonce", ou quand l'utilisatrice demande explicitement "annonce", "créatif", "ad", "pour du trafic", "sponsorisé", "pour vendre". Pour un Reel organique, il faut utiliser les styles "celular" ou "editorial". La skill gère également les variantes (changement de headline ou CTA sans refaire le montage complet) et les ajustements après livraison (modification du découpage, de la headline, de la position des sous-titres).

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-anuncio

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Estilo anúncio

La règle unique : la partie supérieure (ou la bande de la poitrine) MONTRE le mécanisme de ce qu'elle dit ; ne retapez jamais la phrase — les sous-titres le font déjà. Chaque idée prononcée devient un schéma qui change sur le mot.

Avant de commencer, lisez ../perfil-criadora.md et chargez (ou créez) le perfil.json à la racine. Demandez aussi, dans un seul message, ce qui manque : le nom du produit/offre, l'appel à l'action final (CTA : "commente X" ou "clique sur le lien") et les images réelles qu'elle veut montrer (couverture du produit, captures de résultats avec les chiffres, cadres de vidéos d'elle). Enregistrez les images dans assets/img/ du projet. N'inventez jamais de logo, couverture, chiffre, prix ou résultat.

src/index.template.html (copié de template/index.template.html) est un catalogue de 15 schémas prêts, avec des temps d'exemple. Conservez le CSS et les helpers ; réécrivez le titre et choisissez/retimez les schémas pour son discours ; supprimez les blocs que vous n'utilisez pas. L'ancien modèle, uniquement textuel, est dans src/classico.template.html (utilisez-le seulement si elle demande ce visuel : copiez-le par-dessus index.template.html).

Structure : titre puis schémas (obligatoire)

  1. 0 → ~5 s : uniquement le titre. Un grand titre (ligne blanche + ligne dans la couleur d'accentuation, ~90–125 px, soulignement optionnel balayant le mot-clé). Pas de schéma, pas d'écran d'appli, pas d'image.
  2. Après le titre : un schéma par idée prononcée, changeant sur le mot. Texte dans le schéma uniquement en étiquettes courtes (1–3 mots : "avant", "avec IA", "votre entreprise").
  3. Quand le produit vend un processus, montrez la complexité de l'ancienne méthode à côté de la simplicité de la nouvelle (timeline chargée + horloge + ✕ × une commande + ✓).

Schémas du catalogue (réutilisez et retimez) :

Idée prononcéeSchémaBloc
"j'ai fait X → je suis passé par Y → c'est devenu Z"carte de téléphone (cadre réel) → flèche en pointillés + point qui avance → nœud rond → flèche → carte résultatB2
enlève les erreurs / pausesonde audio : les parties-problèmes deviennent bleu/rouge avec étiquette et disparaissent ; horloge diminueB3
arrive tout seultéléphone où les éléments apparaissent seuls + compteur "0 clics"B4
ancienne méthode × nouvelle méthodedeux panneaux : timeline chargée + horloge + ✕ × une commande + ✓B5
objections ("pas le temps", "je ne sais pas")Non ✕ / Oui ✓ : cartes de problème mènent à ✕ → flèche → carte solution avec ✓B6
doute → preuvebulle avec le doute → carte de test avec ✓B7
"il faut bien expliquer"demande générique → résultat gris ✕ × instruction détaillée en cours de frappe ✓B8
liste de ce qu'elle livrecases en pointillés qui se remplissent avec des images réelles ou des icônes, une par élément ditB9
cours / produitcouverture réelle + puces qui volent vers l'intérieur + graphique qui monteB10
preuve socialecaptures réelles avec compteur de vues qui monte (découpez le compteur de la capture elle-même)B11
copier un styleréférence → nœud → son cadre recevant le même style + "= même style"B12
offre / lancementétiquette + tampon → post avec barre d'envoi → "✓ publié"B13
trois étapes ("enregistre, édite, poste")trois nœuds s'allument à chaque motB14
CTA de commentaireboîte de commentaire tapant le mot ("JE VEUX") + carte de directB15
CTA de lienbarre blanche "En savoir plus ›" qui pulseB16

Avant de rendre, lisez chaque bloc et demandez : "la zone MONTRE l'idée, ou répète-t-elle seulement les sous-titres ?"

Chiffres : les compteurs de B3, B5 et B11 viennent avec des marqueurs (__B3_SEG_AVANT__, __B5_SEG_NOUVEAU__, __VIEWS_CAPTURE_1__…). Le montar.mjs s'arrête avec une erreur tant qu'il en reste un. Remplacez par le chiffre RÉEL (dit par elle ou lu de la capture) ou supprimez le compteur.

Images : bruto.jpg sort seul de la vidéo (novo-anuncio.mjs). Tout le reste (couverture, captures, cadres d'autres vidéos, référence) seulement si l'élève les envoie. Image manquante → supprimez ou redessinez le schéma (icône dessinée en SVG, carte de texte) ; ne laissez jamais d'espace d'exemple. Nom/@ et avatar viennent du perfil.json (montar.mjs remplace __UTILISATEUR__, __NOM__ et place l'avatar ; sans photo, un cercle avec l'initiale).

Zones de sécurité (annonce Meta dans Reels — obligatoire)

Laissez libres 14 % en haut, 35 % en bas et 6 % de chaque côté. En 1080×1920, la boîte de sécurité est x 65–1015, y 270–1248 : tout mot, chiffre, sceau, CTA, sous-titre et étiquette de schéma reste à l'intérieur (y compris au pic d'échelle/rotation des animations). Seule la décoration (bande sombre, ombre de panneau) peut dépasser. Vérifiez avec $K --em video-projects/<slug> node ../../$E/scripts/zonas-seguras.mjs renders/<fichier>.mp4 assets/seguras.jpg t1 t2 … (boîte rouge sur chaque image).

Zone des schémas (reel.json à la racine du projet)

Les blocs sont dessinés dans une zone de 1080×340 et le montar.mjs positionne et met à l'échelle cette zone :

Cadragereel.json
tête plus basse, il reste de l'espace en haut (sommet de la tête en dessous de y ≈ 450){"faixa":"haut","zonaHaut":280,"zonaHauteur":<sommet de la tête − 290>,"capHaut":<menton + 20, max. 1165>}
tête haute dans le cadre (selfie serré, voiture){"faixa":"poitrine","zonaHaut":<menton + 20>,"zonaHauteur":<≈ 1150 − zonaHaut>,"capHaut":<zonaHaut + zonaHauteur + 10, max. 1165>}

En mode poitrine, une bande sombre couvre du menton jusqu'à la fin de la zone de sécurité, et les schémas + sous-titres se trouvent dessus. Le sous-titre (hauteur 80 px) doit se terminer au plus tard à y 1248.

Visuel

ÉlémentRègle
Bande sombrehaut : dégradé rgba(0,0,0,.66) → transparent descendant du haut. poitrine : bande sombre du menton jusqu'à ~y 1300.
Kit de schémaspanneaux rgba(16,16,19,.92) rayon 22 avec bordure claire de 1 px ; cartes de téléphone 160×284 (9:16) avec cadres réels ; nœud rond de l'IA dans la couleur couleur_ia ; flèches en pointillés avec point dans la couleur d'accentuation qui avance ; tampons ronds ✕ rouge #ff453a et ✓ vert #30d158 qui explosent sur le mot ; textes d'interface en Inter. Décoration répétée (barres de l'onde, clips de timeline) utilise le rnd() avec la graine du modèle — jamais Math.random ni from:"random" de GSAP.
Typographiepolice de titre (Archivo Black ou fonte_titulo du profil) dans le titre, les étiquettes et les sous-titres. Blanc ; accentuation dans la couleur couleur_accentuation (par défaut jaune #FFD21F).
Mouvemententrées courtes : monte + apparaît en 0,45–0,6 s (power3.out / expo.out) ; tampons avec back.out ; compteurs qui courent ; barres qui se remplissent ; flèches qui grandissent. Sorties en 0,28 s. Les schémas changent sur le mot prononcé.
Sous-titreun mot à la fois, 46 px, blanc avec ombre douce (jamais de contour), juste en dessous du menton (capHaut dans reel.json).
CTAboîte de commentaire tapant le mot + carte de direct, ou barre blanche "En savoir plus ›".

Couleurs, tailles et interdictions : template/DESIGN.md (copié dans chaque projet).

Règles de coupe

  • Supprimez toute pause (−30 dB / 0,15 s) et toute répétition ; ≤ 90 s si possible. Phrase dite deux fois : gardez la DERNIÈRE (la corrigée). La répétition d'insistance ("vaut, vaut") n'est pas une erreur.
  • L'annonce coupe sans J/L (cortar.mjs --no-jl) : l'image suit exactement la parole.
  • Après la coupe, retranscrivez le clean.mp4 et lisez en cherchant une phrase doublée et un mot coupé. La transcription entière CACHE les répétitions : balayez aussi toute la vidéo en fenêtres courtes, en un seul appel, $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas 1,3,5,7,… (toutes les 2 s jusqu'à la fin), et comparez.

Règles de vitesse (le PC de l'élève peut être lent — elles prévalent sur les étapes ci-dessous)

  • La transcription du novo-anuncio.mjs est déjà --rapide (juste pour choisir la coupe). La re-transcription du clean.mp4 (celle des sous-titres) utilise le modèle précis — une fois par version de la coupe.
  • Vérifiez les raccords et répétitions en UN seul appel avec --janelas. Jamais une fenêtre à la fois.
  • Ne rendez pas un brouillon entier juste pour regarder des images. Utilisez $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots (un temps par schéma) et regardez les PNG. Rendez UNE fois, quand les snapshots sont corrects.
  • L'encodeur du raw.mp4 / clean.mp4 est choisi automatiquement. Ne le changez pas.
  • Avant chaque étape lente, prévenez par une ligne courte en français de ce qui est en cours ("Rendu de l'annonce — cela peut prendre quelques minutes."), pour que l'attente ne ressemble jamais à un blocage.

Flux (toutes les commandes par le lanceur $K)

E=.claude/skills/estilo-anuncio · M=.claude/skills/_motor · K = le lanceur de la skill videos-opus : "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit, où <VO> est le dossier de la skill videos-opus (celui qui contient le SKILL.md qui vous a envoyé lire ce guide). Il met les programmes portables dans le chemin et s'exécute dans le dossier de travail du kit ($K dossier montre lequel ; les projets se trouvent dans <dossier>\video-projects\<slug>). $K --em <sous-dossier> … s'exécute à l'intérieur. Rien de npx, Python ou node seul : tout passe par le $K.

  1. Projet + transcription rapide : $K node $E/scripts/novo-anuncio.mjs "<video>" <slug> → video-projects/<slug>/ avec raw.mp4, raw.json, assets/palavras.txt, les deux modèles, assets/img/bruto.jpg et reel.json.
  2. Cadrage : feuille de contact avec grille ($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) et REGARDEZ : lignes jaunes tous les 100 px, boîte rouge = zone de sécurité. Trouvez le sommet de la tête et le menton et écrivez reel.json (tableau "Zone des schémas").
  3. Coupe : lisez assets/palavras.txt, écrivez assets/keeps.json ; dans assets/ : $K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs --no-jl.
  4. Vérification : à la racine du projet : $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<termes du profil>" ; lisez ; faites le balayage --janelas ; ajustez la coupe jusqu'à ce qu'elle soit propre ; mot mal entendu → assets/caption-fixes.json.
  5. Composition : réécrivez src/index.template.html : titre en 0–5 s, puis un schéma par idée prononcée ; temps de $K --em video-projects/<slug> node ../../$M/ancoras.mjs "phrase" … (racine du projet) ; images réelles dans assets/img/.
  6. Montage + vérification : $K --em video-projects/<slug> node ../../$E/scripts/montar.mjs (s'arrête avec erreur s'il reste un marqueur ou une image manquante) → $K --em video-projects/<slug> hyperframes lint (0 erreurs) → $K --em video-projects/<slug> hyperframes snapshot --at … sur CHAQUE schéma et REGARDEZ (visage jamais couvert, étiquettes lisibles, chiffres corrects, rien d'exemple qui reste) → zonas-seguras.mjs sur les snapshots/temps → rendu et livraison (par le lanceur, dans le dossier de travail du kit) : $K node $M/renderizar.mjs <slug> — vérifie les verrous, rend en arrière-plan, valide et copie déjà dans prontos/. Sortie 3 = encore en rendu : exécutez $K node $M/renderizar.mjs <slug> --esperar jusqu'à ce qu'il sorte PRÊT. N'exécutez jamais $K --em video-projects/<slug> hyperframes render directement ni prontos.mjs à la main. Ensuite zonas-seguras.mjs renders/<slug>-final.mp4 … aux temps des schémas.
  7. Livraison : répondez en français, brièvement : où il se trouve, ce qui a été coupé, images utilisées, ce qui est resté en doute, et que la vidéo respecte la zone de sécurité Meta. Ne publiez jamais et ne téléchargez jamais d'annonce.

Variations d'annonce (quand l'élève demande "plus d'une version")

Même coupe, autre titre et/ou autre CTA : copiez le projet (video-projects/<slug>-v2), changez seulement le bloc B1 et le CTA, montez, snapshot du titre et rendez. Ne refaites ni la coupe ni la transcription.

Ajustements après livraison

"enlève la partie du prix" → keeps.json, étapes 3–4, recalculez les temps des schémas après l'extrait avec ancoras.mjs et étape 6. "change le titre" → B1 et étape 6. "sous-titre plus haut" → capHaut dans reel.json et étape 6. Ne refaites jamais depuis le début ce qu'elle n'a pas demandé de changer.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés