Communitygithub.com

saas-promo

Créez une vidéo promotionnelle cinétique SaaS / startup / produit / développeur (1080p60 MP4) dans un style de motion-design unique et rapide : un teaser d'environ 11 secondes ou une version d'environ 50 secondes avec chapitres (un par produit ou projet) coupée sur le rythme de la musique de l'utilisateur.

Qu'est-ce que saas-promo ?

Cette compétence génère automatiquement une vidéo promotionnelle complète (1080p60 MP4) dans un style motion-design très spécifique, à partir d'un simple fichier de configuration `promo.json`. Elle est idéale pour les développeurs, startups et créateurs qui souhaitent un teaser SaaS, une vitrine de produit ou une démo de portfolio sans utiliser de séquences vidéo pré-enregistrées, de service de template ou d'IA vidéo. Le rendu est entièrement programmé : chaque image est dessinée en code dans un navigateur headless Chrome, avec des effets sonores synthétisés et une bande-son ambiante ou une musique personnalisée synchronisée au tempo et au drop. La vidéo propose deux versions : un teaser classique d'environ 11 secondes avec une séquence d'animations géométriques, de texte tapé, d'orbes lumineux et d'un final glitché, et une version longue d'environ 50 secondes qui organise le contenu en chapitres (un par produit ou projet) répétant le même schéma. Les images (captures d'écran, UI, designs) et les textes sont fournis par l'utilisateur, et la musique (optionnelle) est automatiquement analysée pour caler chaque coupe sur le beat. Le résultat est mixé à -14 LUFS. La compétence supporte l'anglais et le khmer.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/chydevit/Skill-create-videos/tree/HEAD/plugins/video-skills/skills/saas-promo

Demander à votre IA préférée

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

Documentation

SaaS promo (modèle : "skill 1")

Cette compétence produit une vidéo promotionnelle complète à partir d'un seul fichier de configuration, promo.json : le classique ~11 s, ou une version longue d'environ 50 s quand promo.json contient chapters. Une scène canvas dessine chaque image dans Chrome headless. Il n'y a ni séquences vidéo pré-enregistrées, ni IA vidéo, ni service de template :

  • Image : les propres captures d'écran, UI, designs ou images vidéo de l'utilisateur. Des cartes UI intégrées comblent les lacunes.
  • Texte : les propres textes de l'utilisateur.
  • Son : un effet sonore sur chaque signal, plus une bande-son ambiante originale ou le morceau de l'utilisateur.

La structure est fixe et reproduit le rythme de la vidéo de référence skill 1 .MP4 (une vidéo TikTok d'agence SaaS). Seules les techniques sont copiées, jamais ses images, ses mots, sa marque ou son filigrane.

TempsScène
0-0,5 sDe grands glyphes (# < @ ! ?) clignotent au centre ; des barres néon violet et citron vert et des étincelles à 4 pointes stroboscopent sur un champ de glyphes en matrice de points faible
0,5-3,3 stext.typed s'affiche lettre par lettre avec un curseur ; 26 cartes arrivent de loin et orbitent autour du mot comme un anneau 3D (d'abord en points de trame, puis l'image réelle) ; l'anneau accélère, passe rapidement devant la caméra et s'estompe
3,3-6,45 sUn pré peint avec nuages, oiseaux et papillons, lavé en pastel puis saturant ; trois cartes glissent depuis la droite, puis les autres volent vers un mur bento de 12 cartes. bento[0] tape sur la carte héros, bento[1] tape verticalement sur une carte en verre haute, deux cartes échangent leurs images, et bento[2] tape sur une carte blanche. La caméra zoome ensuite sur cette carte
6,45-~8,8 sChamp d'ondes de points sombres ; un orbe dégradé lumineux apparaît et glisse vers la gauche ; headline apparaît mot par mot (flou à net), puis sub apparaît par balayage ; tout se défocalise
~8,8-11,1 sGlitch (décalage de teinte, tranché) vers le héros : une fleur bleue/blanche en longue exposition sur un ciel bleu à orange, des symboles volants ! @ # $ % * et une pluie numérique. from apparaît en fondu et disparaît, puis to arrive avec un impact et le logo optionnel apparaît en dessous. Se termine par un fondu au noir

La durée est d'environ 11,1 s. Elle augmente légèrement avec un long titre, car le sous-titre occupe toujours environ 0,85 s à l'écran.

Version longue (~50 s) : chapters

Ajoutez "chapters" (un par produit, projet ou thème) et les quatre mêmes scènes se répètent en temps forts de 1,5 mesures chacun, le final prenant 2 mesures :

Temps fortsCe qui est joué
introouverture (typed + tourbillon de tout) → mur (toutes les images, bento) → orbe (headline / sub)
chaque chapitreouverture (le typed du chapitre, ses images dans le tourbillon ; ignoré sans typed) → mur (ses images en premier, son bento, son apparence wall) → orbe (son headline / sub / couleurs orb)
finfinal (from / to / url / logo), 2 mesures

Quatre chapitres avec trois ouvertures typées donnent 23 mesures, soit ~50 s à 109 BPM.

  • Images : étiquetez chacune avec "tag" pour la classer sous son chapitre.
  • Apparences du mur : "meadow" (jour), "dusk" (coucher de soleil) ou "dark" (champ d'ondes de points avec lueurs dans les couleurs de l'orbe du chapitre). En les alternant, les chapitres restent distincts.
  • Synchronisation musicale :
    • Avec music, assets.py mesure le tempo du morceau et son drop (la plus grande montée d'énergie, calée sur une grosse caisse). La vidéo commence de sorte que la première coupe, après le tourbillon d'intro, tombe sur le drop, et chaque coupe suivante se place sur la grille des mesures.
    • Vérifiez la ligne imprimée music: … bpm, drop at … s. Si elle est erronée, donnez vous-mêmes bpm et musicDrop (secondes du morceau).
    • Utilisez sfxLevel (par exemple -4) pour placer les effets sous le morceau.
  • Copyright : un morceau commercial peut entraîner la coupure du son ou un signalement de la vidéo lors de sa publication. Mentionnez-le et suggérez la bibliothèque sonore de la plateforme pour les publications publiques.

Prérequis : ffmpeg, Node 22+, Google Chrome ou Chromium (CHROME_PATH), et un Python avec numpy et scipy (PROMO_PY ; promo.sh en trouve un automatiquement).

Flux de travail

1. Rassembler ce dont la promo a besoin

  • Cartes (8 à 20 images) : captures d'écran du produit, du site web, de l'application ou du tableau de bord ; travaux de design ; ou images fixes des vidéos de l'utilisateur. Les images et les vidéos fonctionnent toutes les deux. Une vidéo donne une image fixe, à "at" secondes ou à 30 % de sa durée. Les images en paysage vont dans les emplacements larges et les portraits dans les emplacements hauts. Avec moins de 8 images, des cartes UI intégrées comblent le reste (barre de recherche, formulaire, graphique, orbe dégradé, pastille, etc., étiquetées avec text.labels). Regardez d'abord les images et éliminez celles qui sont quasiment vides.
  • Textes : gardez-les courts, car la scène les tape et les révèle à des vitesses fixes.
    • typed : un mot ou un nom avec ponctuation, environ 4 à 8 lettres ("SaaS.", "KumNit.").
    • bento : trois courtes phrases (1, 2-4 et 2-3 mots).
    • headline : 5 à 8 mots. sub : une ligne d'environ 90 caractères maximum.
    • from / to : la paire de fermeture "De… / À…".
    • Pour le khmer ("lang": "km"), écrivez en khmer naturel. Mettez un espace entre les morceaux de headline, from et to qui doivent apparaître un par un. Kantumruy Pro est inclus.
  • Optionnel :
    • logo : affiché sous la dernière ligne. Un logo opaque devient une icône d'application arrondie.
    • text.url : une ligne de site web sur la carte de fin.
    • hero : votre propre image de final au lieu de la fleur.
    • backdrop : une image au lieu du pré peint.
    • music : votre propre morceau. Dans la version longue, son drop atterrit sur la première coupe ; définissez musicStart pour le remplacer.
    • chapters : la version longue d'environ 50 s, avec le tag, typed, bento, headline, sub, wall et orb de chaque chapitre.
    • sfxDir : un dossier contenant vos propres effets sonores.
    • colors : couleurs de marque pour le néon, l'orbe, le ciel et les symboles.

2. Écrire le projet

Créez un dossier de projet et copiez examples/kumnit-saas.json (ou -km.json) dedans sous le nom promo.json, puis modifiez-le. Chaque clé est décrite dans references/config.md. Les chemins sont relatifs au dossier du projet.

3. Prévisualisation (environ 10 s)

<skill>/scripts/promo.sh <project>/promo.json --preview

Ceci prépare les images (et mesure la musique) et rend 12 images fixes (une par temps fort dans la version longue) dans out/<name>-preview.png. Lisez-la et vérifiez :

  • Le mot tapé ne chevauche pas les cartes.
  • Aucun texte n'est trop serré : les textes longs se réduisent pour tenir, mais ils sont moins lisibles.
  • La carte héros (grande, à gauche) affiche une bonne image : elle prend la première image en paysage de cards.
  • Le texte de fin est lisible sur la fleur ou le héros.

4. Rendu (moins d'une minute ; environ 4 minutes pour la version longue, donc lancez-la en arrière-plan)

<skill>/scripts/promo.sh <project>/promo.json

Les étapes s'exécutent dans cet ordre : assets, plan (timeline et signaux sonores de la scène), rendu (3 rendus Chrome, --jobs N), mixage, encodage.

  • --from mix remixe le son et ré-encode sans rendu des images.
  • --from render redessine l'image.

Sortie : out/<name>-1080p60.mp4 et out/<name>-contact.png (environ 30 images réparties sur la vidéo).

5. Vérifier avant de remettre

  • Lisez la feuille de contact.
  • ffprobe doit indiquer environ 11,1 s (classique) ou le total des temps forts (longue ; build/cues.json liste chaque temps fort). Le mixage est normalisé à -14 LUFS / -1 dBTP : mesurez-le avec ffmpeg -i out.mp4 -af ebur128 -f null -.
  • L'étape de mixage affiche combien d'effets proviennent de sfxDir et combien ont été synthétisés.
  • Vous ne pouvez pas entendre le résultat, alors dites à l'utilisateur ce que vous avez vérifié et demandez-lui d'écouter. Les clics d'intro et l'impact du pré sont les moments les plus forts.

Réglage

  • Tempo :
    • plan() en haut de scripts/scene.mjs contient les temps de la scène classique.
    • beatSpecs() dispose les temps forts : mapT() déplace et étire ces temps dans chaque temps fort.
    • Les signaux sonores dans cuesFor() suivent automatiquement, car audio.py les lit depuis build/cues.json.
  • Aspect :
    • Les couleurs proviennent de colors.
    • La disposition bento est la table SLOTS dans scene.mjs.
    • Le pré, la fleur et l'orbe sont dessinés dans buildMeadow, drawFlower et drawOrb.
  • Son : les noms de fichiers essayés dans sfxDir sont la table SFX dans scripts/audio.py, avec des variantes choisies par signal. Les accords et sections de la bande-son sont dans make_bed().
  • Taille : 1920×1080 uniquement, comme dans le modèle. Une version verticale 9:16 nécessiterait ses propres mises en page.

Individual skills in this repo

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

brand-loop

Make a seamless looping background video of glossy 3D liquid blobs in a brand's colours. Two colour families float slowly in zero gravity, each merging and pinching off like mercury, on a soft off-white studio backdrop with a warm gradient, faint ripple rings, soft drop shadows and shallow depth of field. It renders in Blender EEVEE at 4K 60 fps as H.264, HEVC 10-bit and 1080p, and the last frame flows into the first. Use it whenever the user wants a looping background, brand backdrop, abstract 3D or liquid loop, motion background for a website, stream, event screen or presentation, a "seamless loop", or a background for their logo or text, or types /brand-loop.

brand-promo

Make a ~50-second dark, kinetic studio showreel / promo video from a brand's own videos, its logo animation and a few lines of text. It has a typed intro, a ring of 3D cards, a glitchy title drop, and 3-5 spotlights (each work on a tilted card or a phone, playing its own sound). Then "Your story… next.", a 3D rush of clips, and the liquid logo reveal with the name, chips and website. It comes with an original synthesised score, narration (VoxCPM2, English or Khmer) and sound effects, as a 1080p60 MP4. Use it whenever the user wants a showreel, studio reel, portfolio video, agency or brand promo, "demo video" of their work, a promo like a template video, or a Khmer version of one, or types /brand-promo, even if they only hand over a few videos and a logo.

generate-logo

Turn any logo image (PNG, JPG, WebP or SVG) into finished 5-second animated logo reveals in five styles (liquid, neon, bounce, lens, rise). Each comes as a 1080p60 MP4 with synthesised sound effects, a transparent WebM (optional ProRes 4444 .mov) for video editors, and a keyframe sheet. It can add a two-tone wordmark, render square or vertical versions for social media, and build a bespoke style for a particular logo. Use it whenever the user wants a logo animation, animated logo, logo reveal, intro, outro or sting, motion logo, a brand intro for a video, or "make my logo move", or types /generate-logo, even if they only attach a logo and say "animate this".

portfolio-reel

Make a ~30-second creator / freelancer / developer portfolio intro reel (1080p60 MP4) in one fixed, friendly motion-design style (template "skill 2"). A mustard-yellow gradient asks a hook question ("Looking for a … Video editor?"), a white circle wipes to a profile hero (round avatar, badge pill, "Hello, I'm …", roles split by bars, a black "Here's my work ↑" button). The page then scrolls through 1-4 work sections on light grey with window-light shadows, each a title plus 1-3 rounded cards playing the user's own clips or showing their pictures. A yellow light wipe brings two closing lines, then a black social profile card pops up with counting stats, a cursor clicks Follow (it turns into Following) and the card flips in 3D to its back. Two UIs: "classic" (the template) and "app" (a search bar that types the hook and opens a results dropdown, a bento dashboard of glass tiles, a carousel of browser and phone mockups, a chat screen for the closing lines, and a profile card with a co...

Skills associés