Communitygithub.com

KaranO-Dev/one-take

Réalisez une vidéo promotionnelle, un lancement, une rétrospective ou un making-of en une seule prise : posez toutes les questions une fois au départ (scènes, références, formats et ratios, durée et limites des plateformes, dépôts et sites sources, langues, musique, voix et sous-titres, marque), puis storyboardez, construisez, sonorisez, rendez chaque format et vérifiez chaque fichier sans autre question. Musique originale synthétisée avec stems et effets sonores calés sur l'animation, faits extraits de git, une seule source ré-agenée par ratio, et une passe de QA sur le volume sonore, les images noires/fixées/silencieuses, le maintien de l'end-card, la taille du texte sur un téléphone et les zones de sécurité des plateformes. À utiliser quand on veut une vidéo multi-format complète livrée de bout en bout plutôt qu'une session de co-création. Construit sur HyperFrames.

Qu'est-ce que one-take ?

Ce skill pour Claude Code permet de créer une vidéo complète multi-format en une seule interaction, sans demandes de clarification itératives. Il orchestre le processus de détection des sources (dépôts git, sites web), la saisie unique des contraintes (formats, durée, son, voix, marque), la génération du storyboard, la construction de la scène, la composition musicale originale, le rendu de chaque format, et le contrôle qualité automatique. Il est conçu pour les équipes produit, marketing ou contenu qui ont besoin d'une vidéo de promotion ou de résumé prête à l'emploi, en respectant des contraintes de format strictes (portrait, carré, large, paysage) et de plateforme. Il s'appuie sur HyperFrames pour le rendu. Le contrat est clair : une seule série de questions, pas de chiffres inventés (tout vient de git), la musique s'aligne sur l'animation grâce à des « cues », et un fichier n'est livré que s'il passe la QA (fondamental : pas de fichier non vérifié). Le skill détecte automatiquement les logos, polices, couleurs et statistiques du dépôt, et peut capturer des sites web en référence. Il propose quatre modes sonores : score synthétisé, piste fournie, bibliothèque ou aucun son, avec gestion des sous-titres incrustés ou en fichier SRT.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add KaranO-Dev/one-take-skill

Demander à votre IA préférée

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

Documentation

Que fait one-take ?

Demandez tout en une fois. Puis réalisez le film complet, dans chaque format, vérifié, sans plus de questions.

Ce skill orchestre ; HyperFrames effectue le rendu. Il a besoin des skills HyperFrames (hyperframes, hyperframes-core, hyperframes-animation) et est meilleur avec hyperframes-registry, hyperframes-keyframes, media-use, figma et humanizer. Si hyperframes-core est absent, arrêtez-vous et donnez la ligne d'installation : npx skills add heygen-com/hyperframes.

SKILL_DIR ci-dessous signifie le dossier de ce skill. Les scripts sont du Node standard (≥ 22) plus ffmpeg, sans installations.

Le contrat

  1. Un seul tour de saisie. Détectez d'abord, puis demandez une fois (Phase 1). Après les réponses, ne demandez plus rien. La seule exception est un blocage dur que vous ne pouvez pas contourner par défaut, comme un fichier qui n'existe pas ou un site qui refuse de se charger. Alors posez cette question précise et continuez.
  2. La réponse de saisie autorise les rendus. Elle n'autorise pas la publication, la mise en ligne, le post, le push ou le téléchargement de quoi que ce soit que l'utilisateur n'a pas nommé. Demandez-les séparément, après le rapport.
  3. Les faits sont calculés, jamais saisis. Chaque nombre à l'écran provient du fichier facts.json ou d'une source donnée par l'utilisateur. N'inventez jamais de statistiques, citations, logos ou témoignages.
  4. L'image écrit le son. Chaque mouvement qui doit être entendu appelle T.cue() au moment où il se produit. La partition est construite à partir de ces indices, donc le son et l'image ne peuvent pas dériver.
  5. Terminé signifie QA validé. Un fichier est livré lorsque qa.mjs le valide, ou lorsqu'un échec est documenté dans le rapport avec la raison pour laquelle il n'a pas pu être corrigé en deux passes.

Phase 0 : détection (silencieuse, avant de demander)

node SKILL_DIR/scripts/detect.mjs <chemins des sujets…> --out /tmp/one-take-detect.json
  • Lancez-la sur le dépôt actuel et tout chemin ou site mentionné par l'utilisateur.
  • Elle retourne, par source : titre et tagline du README, intervalle git et nombre de commits, logos, fichiers de polices et familles, jetons de couleur. Elle retourne aussi la chaîne d'outils : node, ffmpeg, version en cache de hyperframes, Chrome, heygen CLI, et si les clés d'API de musique sont définies.
  • Si take.json existe déjà dans le projet cible, c'est une reprise. Lisez-le, ignorez la saisie, et continuez à partir de la première phase dont la sortie est manquante.

Phase 1 : la saisie (un message, un tour)

Lisez references/intake.md. En un message :

  1. Montrez la feuille de saisie : chaque champ pré-rempli à partir de la détection ou d'une valeur par défaut recommandée, chacun sur une ligne. L'utilisateur ne modifie que ce qui est erroné.

  2. Appelez AskUserQuestion une fois avec les quatre décisions qui changent le plus le travail : formats (sélection multiple), durée, son, et voix/sous-titres. Le texte de la question leur dit d'ajouter toute modification de la feuille comme une note sur n'importe quelle réponse.

    Si AskUserQuestion n'est pas disponible, mettez les quatre mêmes choix numérotés à la fin de la feuille et demandez une seule réponse.

Ensuite, sans demander à nouveau :

  • Écrivez take.json (schéma : references/take-json.md). Les codes de langue, les identifiants de format, le slug et output.name doivent correspondre à [a-z0-9][a-z0-9._-]{0,63} (casse quelconque, pas de ..), sinon le processus s'arrête. Ne mentionnez pas hyperframes sauf si l'utilisateur le demande : la version par défaut est épinglée dans scripts/lib/platforms.mjs (HF_VERSION, 0.8.223).
  • Écrivez un BRIEF.md HyperFrames avec workflow: general-video, flow: automation, storyboard: no. Cela signifie qu'un futur appel /hyperframes reprendra ce projet au lieu de ré-interviewer.
  • Enregistrez les réponses dans le corps de BRIEF.md : formats, son, sous-titres, limites de plateforme.

Phase 2 : sources

  • Faits git. Lancez node SKILL_DIR/scripts/facts.mjs --repo <chemin> [--repo …] [--since …] --out <projet>/facts.json. Cela collecte les commits, l'intervalle, les jours actifs, la plus longue série, le jour le plus chargé, les lignes par langage, les lignes ajoutées et supprimées, et les mots les plus fréquents des commits, ainsi que l'objet du premier et du dernier commit. Les noms d'auteurs et les e-mails ne sont jamais enregistrés. Utilisez uniquement les faits que l'utilisateur a autorisés.
  • Sites. Pour montrer une URL, lancez npx hyperframes capture <url> -o <projet>/src/assets/cap. Arrêtez-vous sur ok:false ou BLOCKED.md : c'est un blocage.
  • Références. Pour chacune, écrivez une ligne dans STORYBOARD.md sur ce que vous en tirez : rythme, type, couleur, une transition. Pour un lien Figma, lancez /figma d'abord.
  • Marque. Copiez le logo SVG et les fichiers de polices dans src/assets/brand et src/assets/fonts, déclarez-les dans take.json sous fonts, et extrayez les jetons de couleur dans la racine :root du template.

Phase 3 : direction et storyboard

Lisez references/direction.md avant d'écrire quoi que ce soit de visuel. Écrivez STORYBOARD.md :

  • Direction, un paragraphe : l'idée maîtresse, le mouvement signature, l'association de types, la palette, la référence d'où vient chaque choix.
  • Tempo en premier. Choisissez le bpm pour que la durée cible soit un nombre entier de mesures (4/4). Donnez ensuite à chaque scène une longueur en mesures, une energy (0–1, qui pilote l'arrangement de la partition), et comment elle entre (in).
  • Tableau des scènes : id, mesures, énergie, ce qui est à l'écran, mouvement, indices, texte.
    • La dernière scène est l'end-card, end: true, avec assez de mesures pour la maintenir complète pendant 3 s ou plus.
    • Marquez les scènes qui peuvent aller dans un cutdown par optional (1–9, plus grand va en premier).
  • Le texte va dans copy/<langue>.json, une clé par ligne de texte. Passez-le par /humanizer si disponible. Gardez les titres assez courts pour être lus deux fois dans le temps où ils sont à l'écran.

Phase 4 : construction

  • Copiez SKILL_DIR/templates/index.html dans <projet>/src/index.html et réécrivez ses scènes à partir du storyboard.
  • Lisez references/kit.md (l'API T.*) et les règles non négociables de hyperframes-core. Pour le mouvement, lisez les règles et les blueprints de hyperframes-animation. Avant de construire manuellement un effet nommé, cherchez dans hyperframes-registry.

Règles qui maintiennent chaque format et la QA honnêtes :

  • Les scènes sont des <section class="clip scene" data-scene="id"> de premier niveau, jamais imbriquées, jamais avec style en ligne.
  • Taille en px de conception via --u (1% du petit côté). Le texte lisible n'est jamais en dessous de --t-min (3,4u ≈ 37 px à 1080).
  • Gardez le texte lisible à l'intérieur de .safe, les bandes UI de la plateforme pour ce format.
  • Ré-ageneez par format avec les règles .f-tall, .f-wide, .f-square, .f-portrait, pas en mettant à l'échelle une seule disposition.
  • Effacez les mots d'une scène avant que la transition de la scène suivante ne les couvre (T.sink/T.leave près de s.end). Le texte sous une révélation échoue à la vérification de disposition.
  • Chaque scène bouge : T.drift la caméra dessus. Rien ne reste immobile avant l'end-card.
  • T.endCard(t) au moment où l'end-card est complète. La dernière image doit encore la montrer : pas de fondu au noir sur le maintien.
  • Indicez tout ce qui doit être entendu (references/sound.md liste les catégories). La plupart des helpers du kit indicent par défaut ; passez cue: false pour garder un moment silencieux.
  • Les nombres proviennent de T.facts ou du texte. T.count a besoin d'un nombre fini et lève une exception sans lui, donc un fait manquant arrête la sonde au lieu de mettre un nombre inventé à l'écran.
  • Terminez le script avec window.__timelines["main"] = T.done();. T.done() enregistre la timeline une fois, après que chaque tween a été ajouté, et le template la répète dans cette ligne. Construisez d'abord tous les tweens, pas à l'intérieur d'un callback asynchrone (font-ready ou autre) : le linter HyperFrames rejette un enregistrement précoce.

Phase 5 : passe de brouillon

node SKILL_DIR/scripts/run.mjs <projet> --draft

Ceci exécute, par format × langue : construction → sonde (indices, tailles de texte, marque d'end-card à partir de Chrome headless) → partition → hyperframes check → rendu brouillon → encodage → QA → REPORT.md.

HyperFrames s'exécute à la version épinglée comme HF_VERSION dans scripts/lib/platforms.mjs (0.8.223), ou à hyperframes depuis take.json. Le premier lancement le récupère avec npx, et la construction récupère GSAP 3.14.2 une fois depuis jsDelivr dans ~/.cache/one-take/. Le fichier GSAP est vérifié par rapport à un sha256 épinglé après le téléchargement et chaque fois qu'il est lu depuis le cache. Un fichier qui ne correspond pas n'est jamais utilisé : un mauvais téléchargement n'est pas mis en cache, et un mauvais fichier en cache est supprimé et la construction s'arrête. Relancez-la pour récupérer une copie fraîche.

Ensuite :

  • Ouvrez chaque contact sheet *.sheet.jpg et regardez-la.
  • Lisez REPORT.md.
  • Corrigez les échecs et tout ce qui semble incorrect : chevauchements, recadrages, images mortes, texte trop petit, une coupe qui ne tombe pas bien.

Il y a au maximum deux passes de correction. Chacune relance run.mjs --draft ; utilisez --only <format>-<langue> pour relancer uniquement ce qui a changé.

Phase 6 : final

node SKILL_DIR/scripts/run.mjs <projet>

Ceci est le rendu qualité intégrale de chaque sortie. Les livrables atterrissent dans renders/ (ou output.dir). Chaque sortie obtient :

  • <nom>.mp4 : x264 CRF 12, AAC 320k, faststart
  • .cover.jpg : l'end-card
  • .sheet.jpg
  • .qa.json

Les stems de la partition et marks.json sont conservés dans out/<format>-<langue>/score/.

Phase 7 : rapport

Répondez avec :

  • le tableau des sorties de REPORT.md (fichier, taille, durée, verdict)
  • la contact sheet du format principal
  • une ligne sur le son
  • les points ouverts, s'il y en a

Proposez les étapes suivantes sans les exécuter : poster le texte, plus de langues, un cutdown, publication. Rien n'est posté ou poussé sauf si l'utilisateur le demande.

Modes sonores

sound.modeCe qui se passe
score (par défaut)score.mjs synthétise le tapis, la bande et la batterie à partir des énergies de scène sur la grille de mesures : plan d'accords à partir de mood et key, sidechainé sur la grosse caisse, crescendos dans chaque montée, un impact sur chaque arrivée. Le stem fx est construit à partir des indices, accordé à l'accord sous chacun et panoramisé depuis l'endroit où il se produit à l'écran. Mixé, limité, puis loudnorm en deux passes vers lufs (par défaut −14) avec true peak −1,5. Original, donc rien à licencier.
trackLe fichier de l'utilisateur. Obtenez le bpm et le premier temps avec score.mjs --analyze <fichier> (ou npx hyperframes beats), définissez bpm à cette valeur et placez les scènes sur ses mesures. Le stem fx joue par-dessus.
library/media-use resolve --type bgm (nécessite la CLI heygen) ou ses générateurs. Le résultat est utilisé comme track, et sa licence est enregistrée dans sound.licence.
noneAucun élément audio du tout.

Pour une voix-off, placez-la dans src/assets/audio/vo.wav, provenant de Kokoro via npx hyperframes tts ou de l'enregistrement de l'utilisateur. La partition creuse la musique en dessous (duckDb, par défaut −9). Pour les sous-titres, chronométrez-les à partir de npx hyperframes transcribe vo.wav --model <modèle>. Les sous-titres incrustés sont du texte de scène placé à l'intérieur de .safe à --t-cap ou plus. Pour les sous-titres sidecar, écrivez <nom>.srt à partir du même transcript à côté de chaque sortie.

Fichiers

  • scripts/detect.mjs, facts.mjs : ce qui est là, et les nombres
  • scripts/build.mjs : une source → projets HyperFrames out/<format>-<langue>/. Remplit les tailles, les bandes de sécurité et le timing des scènes, intègre TAKE (texte, faits, scènes), fournit le kit et GSAP 3.14.2 (vérifié sha256), supprime les scènes pour les cutdowns
  • scripts/probe.mjs : passe Chrome headless qui lit les indices, les tailles et positions de texte dans le temps, et les marques
  • scripts/score.mjs : partition synthétisée, stems, mix, master, marks.json ; --analyze pour le tempo d'une piste
  • scripts/encode.mjs, qa.mjs, report.mjs, run.mjs : livraison, vérifications, rapport, et l'exécution complète
  • scripts/selftest.mjs : vérifie la chaîne d'outils, puis prouve que la QA échoue sur un fichier construit pour échouer
  • scripts/lib/ : helpers partagés (git, plateformes avec HF_VERSION et la vérification de nom, WAV, DSP)
  • kit/take.js : le kit de mouvement (references/kit.md)
  • templates/index.html : la scène de départ
  • references/ : intake.md, take-json.md, direction.md, sound.md, formats.md, qa.md, kit.md

Skills associés