Communitygithub.com

stripe-youtube

Montage longue durée pour YouTube (16:9, 5 à 15 minutes) sur le thème d'une entreprise — Stripe par défaut. Transforme une prise caméra (plus des captures d'écran ou un projet Cap) en une vidéo finie avec le système de design adnaan-reel v7.

Qu'est-ce que stripe-youtube ?

Cette compétence permet de réaliser un montage vidéo long format pour YouTube (16:9, 5 à 15 minutes) en respectant la charte graphique d'une entreprise, Stripe étant la marque par défaut. Elle transforme une prise unique (caméra, captures d'écran ou projet Cap) en une vidéo finie en appliquant le système de design adnaan-reel v7. Les couleurs sont extraites d'un unique fichier de marque (`brand/stripe.json`). Le pipeline comprend le découpage, la composition scénique, les sous-titres cinétiques, les effets sonores et une musique de fond. La compétence est prévue pour Claude Code et repose sur des assistants Python (helpers) réutilisés depuis `adnaan-reel`. Le processus implique deux étapes d'approbation (plan de chapitres, puis table des séquences), la construction parallèle des scènes HyperFrames, la composition avec ffmpeg, et la livraison d'un fichier final `.mp4` ainsi que des fichiers `.srt`, `.txt`, une description et des vignettes. Pour les formats verticaux, une compétence séparée `adnaan-reel` est disponible.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/adukhan98/stripe-video-skill/tree/HEAD/skills/stripe-youtube

Demander à votre IA préférée

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

Documentation


name: stripe-youtube description: Montage longue durée pour YouTube (16:9, 5 à 15 minutes) sur le thème d'une entreprise — Stripe par défaut. Transforme une prise caméra (plus des captures d'écran ou un projet Cap) en une vidéo finie : système de design adnaan-reel v7 sur un plateau 16:9, recolorié depuis UN fichier de marque (brand/stripe.json : accent blurple, disques ardoise et encre, papier froid, le logo officiel) — un plateau papier quadrillé avec une forte vignette la plupart du temps, la caméra du présentateur dans une carte fixe arrondie avec un anneau d'accent, le plan large en ponctuation avec des sous-titres cinétiques pleine largeur, une chaîne de disques qui cartographie le parcours de la caméra, des cartes blanches plates, des vraies pages avec un surligneur, des données dans une seule couleur de données, des enregistrements d'écran dans une carte fenêtre avec des zooms planifiés sur les clics, des inserts avant/après avec leur propre son, des effets sonores structurels clairsemés et un fond musical ElevenLabs atténué d'environ 5 dB sous la voix. Coupe toutes les pauses, reprises et regards baissés ; ne construit que les moments conçus en tant que scènes HyperFrames en parallèle, compose le reste avec ffmpeg, vérifie la synchronisation labiale, et livre final.mp4 + captions.srt + chapters.txt + une description + des vignettes miniature. Utiliser pour "/stripe-youtube", "éditer cette vidéo YouTube dans notre charte graphique", une longue prise qui doit devenir une vidéo 16:9 de marque, ou pour échanger avec le fichier de marque d'une autre entreprise. Planifie en deux approbations (plan de chapitres, puis table des séquences). Pour les formats verticaux, utiliser /adnaan-reel.

Que fait stripe-youtube ?

L'édition Stripe de la compétence longue durée d'Adnaan (adnaan-youtube) : le même pipeline et le système de design v7 sur le plateau 16:9, avec chaque couleur tirée d'un seul fichier de marque. La marque par défaut est Stripe (brand/stripe.json, écrit d'après la page de marque publique de Stripe : accent blurple #533AFD, disques ardoise #061B31 et encre, papier froid #EEF1F6, cartes blanches, fraise uniquement pour les données). Une autre entreprise = un autre fichier de marque ($Y/brand.py init --edit-dir edit --brand acme.json) ; rien d'autre ne change. Avant toute chose, regardez assets/style/stripe_youtube_sheet.jpg (images réelles de la première vidéo réalisée avec) et parcourez examples/stripe-v1/ (sa table des séquences et ses scènes) et examples/yt-01-v7/. La direction artistique est contraignante et se trouve dans references/style.md ; les chapitres, fenêtres et cadence sont dans references/planning.md ; la description est dans references/description.md. (L'aspect plus ancien avec marqueur Greg Light/Dark n'est conservé que sur demande.)

Comment la marque est appliquée : edit/brand/brand.json → $Y/brand.py écrit brand.css (il re-pointe les tokens du runtime) → board.py le lie après v7yt.css dans chaque scène qu'il prépare, et talkcaps.py fait de même pour les superpositions de sous-titres ; les interpolations du runtime (V.mintTo / V.charcoalTo) lisent également les tokens, et les plaques de la composition suivent le fichier. Les scènes ne tapent jamais un code hexadécimal. Les logos nommés dans le fichier de marque sont récupérés depuis le kit officiel dans edit/logos/ (jamais redessinés).

Cette compétence est la sœur longue durée de adnaan-reel et réutilise ses assistants (transcription, coupe, vérification, captures de pages, récupérateurs de logos/photos/icônes, le pipeline de rendu/loudness, le kit SFX, la pose de la tête). Elle doit être installée dans ~/.claude/skills/adnaan-reel. Exécutez chaque assistant avec l'environnement de ce projet : uv run --project ~/.claude/skills/adnaan-reel python <assistant> … — R=~/.claude/skills/adnaan-reel/helpers, Y=~/.claude/skills/stripe-youtube/helpers ci-dessous.

Comment le montage longue durée est construit (pourquoi il diffère des formats courts)

Un format court transforme chaque séquence en une scène HyperFrames complète. Une vidéo longue ne le peut pas (des heures de rendu, et fatigante à regarder). Voici :

  1. La coupe ($R/render.py --base-only) → base.mp4 : sa caméra, coupée, 1920x1080, avec la voix (construite en un seul passage échantillon-précis — voir Anti-patrons, dérive de synchronisation labiale), puis $Y/lookdowns.py maintient une image sur les regards baissés.
  2. Les moments conçus sont des scènes HyperFrames ($Y/board.py) : canevas, carte, plateau, preuve (opaque, 3–10 s) et superpositions d'encadrés — typiquement 25 à 45 par vidéo, construites en parallèle par des agents. Les sous-titres de parole sont des superpositions générées ($Y/talkcaps.py), une par fenêtre de plan large.
  3. Tout le reste est composé ($Y/compose.py) : parole = base plan large + sous-titres ; écran = plaque de plateau + son enregistrement d'écran (coupé avec les mêmes plages, zoomé par $Y/zoomplan.py) + la carte du présentateur ; fenêtres de scène = le rendu + la carte ; superpositions par-dessus ; SFX + le fond musical nivelé ; −14 LUFS. ~40 s de composition par minute de vidéo.

Principes

  1. Le plateau est la base, il est sur la carte. ~70–85 % de la durée est une mise en page de plateau avec sa caméra simple dans la carte (emplacement fixe, ne bouge que sur une coupe, anneau d'accent) ; le plan large est la ponctuation (introduction, opinions, histoires, CTA). Pas de fond perdu par défaut — il aime la carte simple.
  2. Un seul aspect, un seul fichier de marque. Papier + grille + forte vignette, la couleur primaire de la marque comme SEUL accent (blurple Stripe), sa couleur profonde pour les disques avec des glyphes Phosphor blancs et de l'encre (ardoise Stripe), cartes blanches plates, traits vectoriels propres, Inter Tight / Inter (la police de caractères propre à Stripe n'est pas publique). La couleur des données (fraise #E8435A) uniquement pour les chiffres. Pas de marqueur, pas de Caveat, pas de teintes pastel, pas de code hexadécimal tapé dans une scène.
  3. La parole est sous-titrée, chaque mot. Les fenêtres de plan large portent des sous-titres cinétiques pleine largeur (blanc, un mot héros par phrase dans l'accent clair de la marque, colonne de gauche sur une partie calme de son arrière-plan). Les fenêtres de plateau portent les mots à l'intérieur du design. Le SRT est tout de même livré. Les mots à l'écran sont les mots qu'il dit.
  4. Montrez la vraie chose. Chaque page, papier, article, étude qu'il nomme apparaît pour de vrai (bande lisible dans une carte blanche, surligneur à la teinte de la marque sur la phrase prononcée) ; chaque outil/entreprise obtient son logo officiel ; les personnes obtiennent de vraies photos. N'inventez jamais de chiffres, citations, captures d'écran.
  5. Les écrans sont la démonstration. Son enregistrement Cap dans une carte fenêtre, zoomé sur ce qu'il clique (ses zooms Cap gagnent, puis les groupes de clics, puis les cibles manuelles), des encadrés dessinés après l'atterrissage du zoom. L'attente est coupée, jamais accélérée.
  6. Deux approbations, puis construisez tout. Plan de chapitres → table des séquences → pilote (2–3 scènes + les sous-titres dans l'aspect) → construire tous les moments en parallèle → composer → auto-vérification → livrer. Le mode automatique ("fais-le") saute les attentes.
  7. Jamais un plateau mort. Chaque moment conçu a un objet héros qui illustre la phrase + 1–3 micro-animations ; la caméra voyage ; l'image 0 de chaque scène montre déjà son titre ou son objet principal.
  8. Le son soutient la voix. SFX structurels uniquement (~1 toutes les 30–60 s, kit v6 bas et chaud), un fond musical calme atténué d'environ 5 dB sous sa voix (il n'entendrait pas un plus silencieux), voix par-dessus, −14 LUFS.
  9. Vérifiez avant de montrer. Comptes d'images exacts, synchronisation labiale vérifiée à chaque coupe, chaque limite de fenêtre sur une feuille, sous-titres lus par rapport à la coupe, niveau mesuré. Il ne devrait jamais être celui qui trouve un problème de synchronisation ou de niveau.

Règles strictes

  1. Plan approuvé, puis table des séquences approuvée, avant qu'aucune scène ne soit construite (sauf mode automatique).
  2. Les règles de coupe de adnaan-reel s'appliquent inchangées : coupes aux limites de mots, chaque remplissage et chaque jointure vérifiée avec $R/verify_cuts.py (lire les ⚠ drapeaux TAIL/HEAD), ne jamais rendre une EDL de test dans edit/, fondus de 30 ms.
  3. Partez de ses coupes Cap (source/cap.json "trims"). Ensuite, supprimez les reprises : conservez la DERNIÈRE prise complète de chaque ligne, ne jamais assembler une ligne à partir de deux tentatives, abandonnez tout ce qu'il rejette à voix haute ("non", "encore", "annule ça") et les bêtisiers ; vérifiez la fin de la session pour une accroche ré-enregistrée. Trouvez les répétitions en transcrivant chaque plage conservée individuellement puis chaque jointure avec ses voisins — le modèle de langage sur la longue coupe fusionne deux prises de la même ligne en une seule.
  4. Pas de temps mort : coupez chaque plage à sa parole (bruit de fond + 7 dB, 0,07 s avant / 0,09 s après) et divisez les pauses internes ≥ 0,22 s ($R/audio_env.py tighten --margin 7 --min-gap 0,22). Il a demandé deux fois "toutes les pauses" coupées — les 0,3–0,9 s d'air que le premier passage conservait étaient perçues comme des pauses.
  5. Les écrans sont coupés avec les MÊMES plages que la caméra (compose.py le fait à partir de timeline.json).
  6. Scènes : exactement leur nombre d'images (board.py le prédéfinit, board.py check vérifie) ; le runtime (board.css/js, v7yt.css/js) est installé, jamais modifié par scène ; un changement d'aspect global est fait UNE FOIS dans templates/runtime/ → board.py runtime. Zone de carte claire ; image 0 non vide.
  7. Rendre uniquement via board.py render (agents aussi, --only <id>) : il choisit ProRes 4444 .mov pour les superpositions (un .mov h264 est opaque — les fenêtres de parole montraient du papier au lieu de lui) et partage les emplacements de rendu à l'échelle de la machine. Ne jamais pkill les rendus — le pkill d'un agent a tué le rendu de tous les autres agents.
  8. Les positions des encadrés proviennent de compose.py where <out_t> <sx> <sy>, jamais devinées.
  9. Un sous-agent par scène (ou par famille de scènes partageant un objet, par exemple la chaîne), tous lancés dans un même message ; examinez les images fixes de chaque scène au fur et à mesure qu'elles arrivent, envoyez des corrections avec SendMessage au même agent. Un objet partagé a UN SEUL propriétaire qui écrit le module partagé + les notes ; les autres agents copient, jamais ne bifurquent. Faites confiance aux horodatages des fichiers, pas aux rapports.
  10. Téléchargements via $R/fetch.py, captures via $R/capture.py (journalisées pour credits.md) ; toutes les sorties dans <projet>/edit/ ; n'écrivez jamais dans un répertoire de compétence pendant une édition.
  11. Vérification miroir sur la caméra avant la coupe (zoomez sur toute impression sur ses vêtements/arrière-plan dans une image fixe pleine résolution).
  12. Dans les boucles shell, ffmpeg obtient -nostdin (sinon il consomme l'entrée standard de la boucle).

Assistants

AssistantCe qu'il fait
$Y/cap.py find / info <p.cap> / ingest <p.cap> --edit-dir EProjets Cap (les plus récents en premier) → source/cam.mov, source/screen.mp4, source/cap.json (clics, mouvements, coupes, zooms)
$R/transcribe.py source/cam.mov --edit-dir E --vocab "…"Transcription mot par mot → transcripts/cam.json (mise en cache)
$R/pack_transcripts.py · $R/audio_env.py · $R/verify_cuts.py · $R/timeline_view.pyLire la prise, resserrer, vérifier chaque jointure (adnaan-reel)
$R/headpose.py source/cam.mov --start 0 --end <s> > E/headpose_report.txtInclinaison de la tête sur la prise → intervalles de regards baissés
$R/render.py edl.json -o base.mp4 --base-onlyLa coupe → base.mp4 + timeline.json (voix échantillon-précise)
$Y/lookdowns.py --edit-dir EMaintient une image de la caméra sur les regards baissés au début/fin des lignes ; relancer après chaque rendu de base
$Y/sync_check.py --edit-dir E [--final final.mp4]Synchronisation labiale par segment (image vs voix vs source) et final vs base ; sortir avec 1 si décalé
$R/capture.py · $R/fetch.py logo/photo/icon/url/creditsBandes de pages lisibles, logos officiels, vraies photos, icônes Phosphor, téléchargements, credits.md
$Y/board.py prepare/runtime/render/check --edit-dir E [--only ids]Projets de scène à partir de animations/scenes.json (runtime v7 + icônes + starter + assets + TASK.md) ; rendu limité par emplacements ; vérification d'image exacte / alpha
$Y/talkcaps.py --edit-dir E [--dry-run]Sous-titres de parole pleine largeur : une superposition cNN_talk générée par fenêtre de parole (relancer après tout changement de coupe/scène)
$Y/compose.py plan / where <t> <sx> <sy> / render -o final.mp4 [--preview] [--only-window N] / sheet <video>Table des fenêtres ; coordonnées des encadrés ; la composition (fenêtres + carte + superpositions + SFX + musique nivelée + −14 LUFS) ; feuille de limites
$Y/zoomplan.pyLa caméra zoom (bibliothèque)
$Y/deliver.py srt / chapters / stills <video> t…deliver/captions.srt, deliver/chapters.txt (validé pour YouTube), vignettes miniatures
$Y/brand.py init / css / apply --edit-dir E [--brand x.json]Le fichier de marque → brand.css → chaque scène (board.py et talkcaps.py l'appellent ; apply le réinstalle manuellement)
$Y/review.py --edit-dir E <ids>Fiche de révision par scène (5 images, boîte de carte soulignée) → verify/review/<id>.jpg
$Y/inserts.py clip / splice / shift --edit-dir EClips avec leur propre audio sur un plateau de marque → épissés image par image dans la composition → SRT + chapitres décalés

Starters (templates/scenes/) : canvas, map, board, proof (opaque), callout_overlay, talk_overlay (transparent) et talk_captions (modèle de talkcaps.py). En-têtes runtime (board.js, v7yt.js) listent chaque primitive. Scènes de référence : examples/stripe-v1/ (la vidéo Stripe : table des séquences, liste de scènes, modules de chaîne + carte de marque + page) et examples/yt-01-v7/ (carte chaîne + module partagé, barres de données, page de preuve, flux de plateau, sous-titres).

Structure

<projet>/
└── edit/
    ├── project.md                 mémoire de session
    ├── source/ (cam.mov, screen.mp4, cap.json)        transcripts/ (cam.json brut, CAM.json corrigé)
    ├── edl.json, base.mp4 (+ base_unfrozen.mp4), timeline.json, headpose_report.txt, layout.json
    ├── brand/ (brand.json, brand.css)   captures/ logos/ photos/ icons/ downloads/ music/ inserts/
    ├── animations/ (scenes.json, <id>/{hf/, TASK.md, render.mp4|mov, beats.json, qa/}, cNN_talk/ généré)
    ├── compose/ (plates, screen_cut.mp4, windows/)   verify/
    └── final.mp4, deliver/ (captions.srt, chapters.txt, description.txt, thumb_*.png), credits.md

Le processus

  1. Reprendre. Si edit/project.md existe, résumez la dernière session en une ligne et demandez s'il faut continuer.
  2. Ingestion. S'il ne donne pas de chemin : $Y/cap.py find et confirmez l'enregistrement. Pas de Cap : liez le fichier caméra en tant que source/cam.mov (enregistrements d'écran en tant que source/screen.mp4 sur une horloge ; un cap.json minimal). Collectez le script, les liens et tout ce qu'il souhaite montrer. Marque : $Y/brand.py init --edit-dir edit (Stripe ; --brand x.json pour une autre entreprise), puis récupérez les logos nommés dans le fichier de marque depuis son kit officiel dans edit/logos/. Testez une scène dans la marque avant de construire le reste.
  3. Ingérer + lire. ffprobe ; une image fixe pleine résolution pour la vérification miroir ; $R/transcribe.py source/cam.mov --edit-dir edit --vocab "<chaque nom du script/liens>" ; $R/pack_transcripts.py ; $R/headpose.py sur toute la prise → headpose_report.txt (il

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés