Communitygithub.com

ClaudinNarsis/claude-video-skills

Créez une promo vidéo dynamique de 12 à 20 secondes pour n'importe quel produit, générée à partir de code en MP4 avec une musique synthétisée. Changements de scène rapides synchronisés sur le rythme, typographie cinétique, une forme qui se propage à travers chaque transition, et un cadre HUD.

Qu'est-ce que claude-video-skills ?

Cette compétence permet à un agent IA de générer une vidéo promotionnelle de haute énergie de 12 à 20 secondes, entièrement via du code, sans nécessiter de logiciel de montage. L'agent interroge l'utilisateur sur le produit, la marque, le format et la musique, puis planifie et produit une page HTML unique qui décrit chaque scène et transition. La vidéo finale est rendue en MP4 avec flou de mouvement et bande sonore synthétisée ou personnalisée. Elle est idéale pour créer des bandes-annonces, des teasers ou des séquences de lancement et prend en charge des scènes dynamiques comme des slams de marque, des triplets cinétiques, des moments produits et des cartes de fin. L'outil repose sur un fichier HTML autonome avec CSS et JS embarqués, utilisant une fonction `seek(t)` pure pour garantir un rendu déterministe et précis à chaque image. Des helpers JavaScript sont fournis pour les animations par ressort, les transitions fluides et la génération audio. L'agent vérifie ensuite le résultat, propose un brouillon pour révision, et livre le fichier final MP4 en haute qualité.

Compatible avec✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/ClaudinNarsis/claude-video-skills/tree/HEAD/skills/explainer-high-energy

Demander à votre IA préférée

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

Documentation

Explicateur haute énergie

Un morceau de hype de 12 à 20 secondes qui frappe comme un showreel. Toutes les demi-secondes, quelque chose atterrit sur le temps, mais cela ne donne jamais l'impression de coupures aléatoires, car une forme guide l'œil à travers chaque transition : une étincelle devient une ligne, la ligne inonde l'écran pour former le fond suivant, un point se détache et devient la balle autour de laquelle la scène suivante est construite.

Vous l'écrivez comme une seule page HTML qui rend chaque image à partir d'une valeur temporelle, puis vous la rendez en MP4 avec flou de mouvement et une bande sonore synthétisée.

Étape 1 : Obtenir le brief (un seul message, puis exécuter)

Demandez tout en un seul message, puis travaillez par vous-même. Seul le produit est requis ; pour tout ce qui est laissé vide, décidez vous-même et dites ce que vous avez choisi.

  1. Produit : nom, et description en quelques phrases. Une URL de site web est encore mieux.
  2. La chose que le spectateur doit retenir (ex. "tapez une idée, obtenez une application live").
  3. Marque : couleurs, polices, fichier logo, ou "utilisez le site web". Si rien, utilisez la palette par défaut ci-dessous.
  4. Format : 16:9 (1920×1080) ou 9:16 (1080×1920). Par défaut 16:9.
  5. Durée : la durée par défaut est donnée ci-dessous pour ce style.
  6. Musique : leur propre piste (un chemin de fichier), ou laissez-vous synthétiser. Par défaut : synthétiser.
  7. Direction (optionnelle) : scènes souhaitées, un slogan, un appel à l'action, tout ce qui peut éviter des erreurs.

S'ils ont donné une URL, lisez-la (récupération web) pour obtenir le vrai wording, les fonctionnalités, les couleurs et les noms de polices du produit avant d'écrire quoi que ce soit. Utilisez leurs vrais mots pour les étiquettes d'interface et les slogans.

N'inventez jamais de faits. Pas de chiffres clients, revenus, notations, témoignages ou citations inventés. Des chiffres uniquement si l'utilisateur ou le site web les mentionne ; sinon, utilisez des barres relatives, des progressions et des lignes squelettes de placeholder. Le contenu d'exemple à l'intérieur de l'interface (une invite, un nom de fichier, un nom de projet, des prix sur un reçu) est acceptable et doit être crédible ; les affirmations sur le produit lui-même (statistiques, nombres d'utilisateurs, notations, offres comme "gratuit") ne le sont pas. Les appels à l'action n'utilisent qu'une URL ou une offre donnée par l'utilisateur ou le site web ; sans cela, terminez sur le nom et le slogan.

Logos. Utilisez un logo uniquement si l'utilisateur fournit le fichier ou s'il s'agit de son propre produit et qu'il l'a demandé. Sinon, écrivez le nom en texte dans la police de la marque. Les logos tiers (intégrations) uniquement s'ils sont fournis ; sinon, utilisez des tuiles arrondies neutres avec le nom.

Durée par défaut pour ce style : 15 secondes (128 BPM, 8 mesures). Plage 12–20.

Étape 2 : Planifier les scènes, puis construire

La structure (6–8 scènes de 1,5–3 s, sur une grille de 120–140 BPM)

Choisissez parmi ces types de scènes et mappez le produit dessus. Écrivez d'abord la feuille de rythme (scène, heure de début sur la grille de rythme, ce qui entre, ce qui sort, son).

  1. Ouverture étincelle (sombre). Toile presque noire avec une grille faible. Une petite marque d'accentuation apparaît, pulse, s'étire en une fine ligne horizontale à travers le cadre avec une petite étiquette mono (produit / lancement — 2026), vacille une fois, puis la ligne s'étend verticalement en une inondation plein écran de la couleur d'accentuation. Cette inondation est le fond suivant.
  2. Slam de marque. Le nom du produit en grotesque lourd, tout en majuscules, énorme, lettres révélées par des masques sur des temps de 1/16 consécutifs, un petit sous-titre mono au-dessus (INTRODUCING — 2026) et une ligne italique serif en dessous (ce que c'est, 2–4 mots). Le poids peut passer de fin à noir. Le point ou le point d'une lettre se détache et grandit en la forme qui commence la scène suivante.
  3. Triplet cinétique. La proposition de valeur en trois mots ou phrases courts, deux temps chacun (trois pour un mot manuscrit, pour qu'il puisse être lu), chacun avec son propre traitement et son propre fond, échangés durement sur le temps (à l'intérieur de cette scène, les échanges sont le rythme, donc ils ne comptent pas comme des coupes) : sombre sur crème ; accent sur noir avec le mot répété comme un motif de contour remplissant le cadre ; blanc sur bleu électrique à l'intérieur de parenthèses de viseur avec une petite étiquette 1920 × 1080 ; un dernier mot en écriture manuscrite qui se dessine lui-même. Chaque mot entre avec un flou/glissement rapide et atterrit avec un léger dépassement.
  4. Visuel signature. Un moment "comment ont-ils fait ça" qui symbolise le produit : un champ 3D de cubes ondulant depuis le centre (dessiné sur un canvas avec votre propre projection de perspective, coloré par hauteur avec la palette), un flux de particules génératif qui se condense en un anneau et éclate vers l'extérieur, ou une goutte liquide qui se transforme entre les formes. Choisissez celui qui correspond à l'idée du produit (blocs de construction → cubes, données/IA → particules, flexibilité → liquide). La caméra s'incline ou orbite lentement pendant qu'il joue.
  5. Micro-moment produit. Une interaction réelle du produit sous forme de carte d'interface flottante, légèrement inclinée en 3D avec deux cartes fantômes empilées derrière : le curseur actionne un interrupteur, appuie sur le bouton principal, une barre de progression se remplit dans la couleur d'accentuation avec un pourcentage, le bouton devient Terminé ✓, un toast glisse en haut à droite. Utilisez les vraies étiquettes du produit.
  6. Preuve (uniquement si des chiffres réels existent). Un grand compteur (+312% style, chiffres flous pendant qu'ils tournent), un anneau de donut, des barres décalées montant avec une barre d'accentuation, une ligne se dessinant par-dessus avec une infobulle. Pas de chiffres réels → sautez cette scène ou montrez les vraies capacités du produit sous forme de liste qui claque.
  7. Pont liquide/morph. La forme de la scène précédente se réduit à un point, le point devient une impulsion d'anneau sur fond sombre, qui devient le point dans le logo.
  8. Carte de fin (maintenir 2 s). Logo ou nom avec le point d'accentuation, un slogan en italique serif, une ligne mono trackée tapant lettre par lettre (la vraie URL ou l'appel à l'action si donné, ex. PRODUIT.COM ; sinon une courte ligne du brief), une règle fine.

Tous les produits n'ont pas besoin de chaque scène ; 6 fortes valent mieux que 8 faibles. Restez à une idée par scène.

Règles qui le rendent cher

  • Les transitions sont des objets, pas des coupes. Chaque scène passe à la suivante à travers une forme (inondation, balayage par une barre qui grandit, un point qui grandit pour devenir le fond suivant, un mot qui zoome à travers la caméra). Une coupe dure entre les scènes n'est autorisée que sur un temps fort, au maximum deux fois.
  • Tout atterrit sur la grille. Les grands changements sur les temps, la typographie sur des notes de 1/8 ou 1/16. Dépassez légèrement (z ≈ 0,6–0,7) pour les impacts, puis stabilisez.
  • Cadre HUD sur chaque scène : parenthèses de coin fines, SCÈNE 02 / 07 en haut à droite, une étiquette de catégorie en bas à gauche en petit mono (TYPE CINÉTIQUE, PRODUIT, DONNÉES), et un timecode courant en bas à droite avec un point rouge. Petit (12–14 px à 1080p) et environ 50% d'opacité ; cela doit ressembler à un viseur de caméra.
  • Texture : une douce vignette radiale sur chaque fond plat, un très subtil grain de film (prégénérez quelques tuiles de grain avec une graine au chargement et cyclez-les), et un vrai flou de mouvement.
  • Typographie : un grotesque lourd pour les slams (ex. Inter Tight 900 ou Archivo Black), un italique serif pour la ligne humaine (Instrument Serif italique), un mono pour le HUD et les légendes (JetBrains Mono ou Geist Mono). Si la marque a des polices, utilisez les leurs pour le nom et gardez le mono pour le HUD.
  • Palette par défaut : encre #0B0B10, accent #FF4F1A, crème #EDEBE4, bleu électrique #2F47FF, blanc. La couleur principale de la marque remplace l'accent et sa deuxième couleur remplace le bleu ; une marque à une seule couleur utilise une nuance profonde de sa couleur comme deuxième.
  • Interdit : looks de modèles stock, lueurs sur tout, emoji, plus de 3 couleurs dans une scène (sans compter le noir et blanc), texte plus petit que lisible en un coup d'œil, toute scène sans mouvement.

Son

128 BPM (ou la piste de l'utilisateur). Perçant : kick sur chaque temps, clap sur 2 et 4, une basse sub suivant les racines de la scène, un riser filtré dans le slam de marque et la carte de fin, un impact (boom grave + burst de bruit) sur chaque inondation, de courts blips tonals sur chaque mot tapé, un whoosh (balayage de bruit passe-bande) sur chaque transition portée, un doux ring-out sur la carte de fin. Mélangez la musique sous les hits.

Comment la page doit être construite

Un seul fichier HTML autonome (CSS et JS embarqués ; images uniquement si l'utilisateur les a fournies). Dessinez avec DOM + transformations CSS, SVG, ou un canvas plein écran, selon ce qui convient.

Le contrat de la page

  • window.VIDEO = {w, h, duration} et window.seek(t), une fonction pure du temps : elle définit chaque élément pour le temps t (secondes). Pas de transitions ou animations CSS, pas de setTimeout, pas d'état hérité de l'image précédente. Chaque image doit être rendue correctement par elle-même, dans n'importe quel ordre. Mesurer la disposition à l'intérieur de seek (ex. offsetLeft, measureText) est acceptable ; c'est déterministe.
  • L'aléatoire (grain, particules, bruit audio) provient d'un générateur avec graine, jamais de Math.random.
  • Tout ce qui a besoin d'un historique (une caméra qui suit un objet en mouvement, une simulation) est cuit une fois au chargement : parcourez-le de 0 à duration à 1/240 s, stockez les valeurs, et faites en sorte que seek les lise avec interpolation. Pour les boucles, commencez la simulation à partir de l'état où la boucle commence (voir la règle de jointure du style).
  • Boucles : seek(t) utilise t % duration ; les effets qui chevauchent la jointure (un écrasement d'atterrissage, une queue sonore) sont dessinés ou mixés aux deux extrémités.
  • Avec ?render dans l'URL : pas de contrôles, pas de mise à l'échelle de l'aperçu ; la scène est exactement w × h en haut à gauche. Sans cela : la scène est mise à l'échelle avec CSS pour s'adapter à la fenêtre et les contrôles d'aperçu sont affichés.
  • Polices : intégrez-les. Téléchargez les fichiers woff2 (Google Fonts ou ceux de la marque) et intégrez-les en base64 @font-face, pour que le rendu ne revienne jamais en silence. Pour un morphing de poids, utilisez une police variable avec une plage ([email protected]).
  • Couches : donnez aux couches de scène des arrière-plans transparents et laissez un seul arrière-plan de scène derrière elles fournir la couleur de base, pour qu'une couche ultérieure ne cache jamais une précédente par accident. Les textes positionnés de manière absolue reçoivent white-space: nowrap.
  • Vitesse : les grands filter: blur() CSS et les grands dégradés flous sont très lents à capturer. Dessinez les dégradés et les lueurs sur un canvas une fois au chargement (ou en tant qu'image) et déplacez-les.

Helpers : collez-les et construisez tout dessus

// réponse d'un pas de ressort amorti 0 -> 1. w = vitesse (8 lent, 14 normal, 22 vif), z = amortissement (1 = pas de dépassement)
function spring(t, w = 14, z = 0.82) {
  if (t <= 0) return 0;
  if (z >= 1) return 1 - Math.exp(-w * t) * (1 + w * t);
  const wd = w * Math.sqrt(1 - z * z);
  return 1 - Math.exp(-z * w * t) * (Math.cos(wd * t) + (z * w / wd) * Math.sin(wd * t));
}
// une valeur qui change de cible plusieurs fois, faisant un ressort vers chacune : track(start, [[time, value, w?, z?], ...]) -> f(t)
const track = (v0, keys) => t => { let v = v0, p = v0; for (const [tk, val, w, z] of keys) { v += (val - p) * spring(t - tk, w, z); p = val; } return v; };
// keyframes précis avec easing (meilleurs pour les mouvements de caméra) : kf([[t0, v0], [t1, v1, easeFn?], ...]) -> f(t)
const kf = keys => t => { if (t <= keys[0][0]) return keys[0][1]; for (let i = 1; i < keys.length; i++) { const [a, va] = keys[i - 1], [b, vb, e = ease] = keys[i]; if (t <= b) return lerp(va, vb, e((t - a) / (b - a))); } return keys[keys.length - 1][1]; };
const clamp = (x, a = 0, b = 1) => Math.min(b, Math.max(a, x));
const ease = x => (x = clamp(x), x < .5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2);   // easeInOutCubic
const lerp = (a, b, k) => a + (b - a) * k;
const seg = (t, a, b) => clamp((t - a) / (b - a));      // progression 0..1 de t dans [a, b]
const rng = s => () => (s = (s + 0x6D2B79F5) | 0, s = Math.imul(s ^ (s >>> 15), 1 | s), s ^= s + Math.imul(s ^ (s >>> 7), 61 | s), ((s ^ (s >>> 14)) >>> 0) / 4294967296);
  • Saisie : la chaîne visible est full.slice(0, n(t)) avec un curseur clignotant à partir de t. Compteurs : formatez lerp(a, b, ease(seg(t, …))).
  • Une caméra est un élément wrapper avec transform: translate() scale() rotate() piloté par kf ou track.

Son

  • window.buildAudio(ctx) planifie toute la bande sonore (musique + effets) à partir du temps 0 sur le AudioContext ou OfflineAudioContext donné, en utilisant les mêmes numéros de timeline que les visuels. Synthétisez avec des oscillateurs, du bruit filtré (à partir d'un buffer avec graine) et des enveloppes. Si l'utilisateur a donné un fichier musical, chargez-le avec fetch + decodeAudioData, définissez la grille de rythme sur son tempo (mesurez-le), et ajoutez uniquement les effets par-dessus.
  • Lecture d'aperçu : lors de la première lecture, rendez la bande sonore une fois dans un buffer, puis lisez à partir de n'importe quelle position défilée. L'horloge pilote seek :
let buf, ac, src, startAt = 0, offset = 0, playing = false;
async function play() {
  ac ??= new AudioContext();
  if (!buf) { const off = new OfflineAudioContext(2, Math.ceil(48000 * VIDEO.duration), 48000); await buildAudio(off); buf = await off.startRendering(); }
  src = ac.createBufferSource(); src.buffer = buf; src.connect(ac.destination);
  src.start(0, offset % VIDEO.duration); startAt = ac.currentTime; playing = true;
}
function pause() { if (!playing) return; offset += ac.currentTime - startAt; src.stop(); playing = false; }
function now() { return playing ? (offset + ac.currentTime - startAt) % VIDEO.duration : offset; }
(function loop() { seek(now()); requestAnimationFrame(loop); })();   // le défileur définit offset (pause, set, play)
  • Mettez la feuille de rythme en commentaire en haut du script : une ligne par moment avec son heure, ce qui se passe, et quel son.

Étape 3 : Vérifier, rendre, livrer

Configurez une fois dans le dossier de travail : npm i playwright, puis npx playwright install chromium si Chromium n'est pas encore installé ; ffmpeg doit être sur le PATH. Sauvegardez le script en bas de ce fichier en tant que render.mjs.

  1. Images fixes. node render.mjs demo.html check.png --stills 0.5,1.2,… avec une heure par ligne de la feuille de rythme (la feuille est à taille lisible, 3 par ligne). Regardez-la. Corrigez tout ce qui est coupé, superposé, illisible, hors marque, mal cadré ou vide. Vérifiez à nouveau.
  2. Brouillon. node render.mjs demo.html draft.mp4 30 1 4 (rapide : 30 fps, pas de flou de mouvement, 4 workers parallèles ; définissez le dernier nombre sur le nombre de cœurs de la machine). C'est la copie de révision : envoyez-la à l'utilisateur avec le HTML et demandez des modifications avant la finale.
  3. Finale. node render.mjs demo.html demo.mp4 60 8 8. Le flou de mouvement multiplie le temps de rendu par le nombre de sous-images ; un rendu final de 60 s peut prendre 20 à 60 minutes sur un ordinateur portable, alors dites-le avant de commencer. Le rendu final utilise 60 fps, 8 sous-images de flou de mouvement, et 8 workers parallèles pour la vitesse.

Individual skills in this repo

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

ClaudinNarsis/claude-video-skills

Make a clean 45–90 second product demo video for any software product, rendered from code to MP4 with music. Airy light canvas, short centred lines the camera pushes into, the product's own UI rebuilt and shown up close as it is used (typing, results, tables, clicks), integrations, and a logo close. Use when someone wants a product demo, launch video, feature walkthrough or "how it works" video for an app, SaaS or tool.

ClaudinNarsis/claude-video-skills

Make a 10–30 second continuous-shot explainer for any product, rendered from code to MP4 with sound. One hero element (a ball, a cursor, a file, a message) travels through the product's workflow laid out as stations on one big canvas; the camera follows it, each station reacts as it passes, then the camera pulls out to reveal the whole journey. Use when someone wants an engaging, story-driven, one-take explainer or a loopable product animation.

ClaudinNarsis/claude-video-skills

Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text overlays, lower-thirds and titles, silence removal, multicam and external-mic sync, loudness normalisation, HDR/Dolby Vision to SDR, LUTs, background music with ducking, platform exports (YouTube, Reels, TikTok, X), compliance checks, scene detection and highlight reels, contact sheets to inspect results, and whole-edit project files. Use this skill whenever the user mentions a video or audio file (mp4, mov, mkv, wav, m4a), footage, a clip, captions, subtitles, a reel or short, YouTube/Instagram/TikTok delivery, LUFS, sync, transcoding, ffmpeg, or asks to make something "60 seconds", "vertical", "louder", "captioned" — even when they do not say "edit". Python 3.10+ standard library only (3.9 deprecated), no cloud, no API keys.

Skills associés