Communitygithub.com

portfolio-reel

Crée une vidéo d'introduction de portfolio (~30 s, 1080p60 MP4) pour créateur, freelance ou développeur, dans un style de motion design fixe et convivial (modèle « skill 2 »).

Qu'est-ce que portfolio-reel ?

Cette compétence génère automatiquement une vidéo de présentation professionnelle d'environ 30 secondes à partir d'un fichier de configuration unique (`promo.json`). Elle dessine chaque image en code via un navigateur headless, intègre les clips et photos du portfolio de l'utilisateur dans des cartes animées, et produit un rendu final en MP4 1080p60. Deux interfaces sont disponibles : le modèle « classic » (gradient moutarde, cercle blanc, héro avec avatar et bouton) et l'interface « app » (barre de recherche, tableau de bord bento, carrousel de maquettes, écran de chat, carte de profil avec QR code). Cinq styles de couleurs (moutarde, midnight, sunset, amber, mint) et dix effets visuels (bokeh, scintillement, surligneur, orbite, flou de défilement, numéros de section, reflet, ticker, confettis, grain) permettent une personnalisation poussée. La vidéo inclut également une bande-son lo-fi synthétisée (ou un fichier audio de l'utilisateur) mixée à -14 LUFS. La compétence prend en charge l'anglais et le khmer, et est conçue pour fonctionner sous Node.js, ffmpeg et Python. Elle est idéale pour créer une « vidéo de présentation », un « à propos de moi », un « showreel » ou une « vidéo de recrutement ».

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

Demander à votre IA préférée

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

Documentation

Portfolio reel (modèle : « skill 2 »)

Cette compétence crée une vidéo d'introduction finie d'environ 30 s à partir d'un seul fichier de configuration, promo.json. Une scène canvas dessine chaque image dans Chrome headless et lit les clips de l'utilisateur à l'intérieur des cartes. Il n'y a pas d'images d'archives, de vidéo IA ni de service de modèle. La structure copie le rythme de la vidéo de référence skill2.MP4 (une intro de créateur TikTok). Seules les techniques sont copiées, jamais ses images, mots, noms, pseudos ou filigrane.

Temps (3 sections)Scène
0-2.3 sgradient moutarde, deux grands cercles doux glissent ; hook[0] tape lettre par lettre, puis hook[1] apparaît en gros et en gras
2.3-2.9 sun cercle blanc balaie vers le haut depuis le bas ; l'avatar apparaît comme un petit disque jaune
2.9-6.4 shéro de profil sur fond blanc : l'avatar grandit en un grand cercle (avec un anneau jaune, ou un duo-tone jaune), puis le badge badge avec une étoile, hello mot par mot, roles séparés par de fines barres, et un bouton button noir avec ↑ dans un cercle blanc. La flèche monte et la page défile
6.4-20.5 sune page par section (4.6 s chacune) sur fond gris clair avec des ombres douces de lumière de fenêtre : un titre en dégradé, puis 1-3 cartes arrondies qui suivent le défilement et flottent. Les vidéos jouent, les photos zoom lentement. Les cartes portrait se tiennent debout, les cartes paysage sont larges, les rangées mixtes se chevauchent
20.5-24.4 sune lumière jaune émane du coin inférieur gauche pour revenir au dégradé ; cta[0], puis cta[1], mot par mot
24.4-30.3 sune carte de profil noire apparaît à partir d'un point (avatar ou logo, handle, name, jusqu'à 3 stats de comptage, deux boutons). Un curseur clique sur le premier bouton, qui devient gris et affiche clicked, puis la carte se retourne en 3D vers son back

La durée est d'environ 30 s avec 3 sections, 4.6 s de plus ou moins par section, et un peu plus longue avec des textes longs.

Deux interfaces : "ui": "classic" (par défaut) ou "app"

app conserve la même chronologie et les mêmes textes, mais chaque scène est un écran d'application moderne sur un gradient maillé animé :

TempsScène app
hookune barre de recherche en verre tape hook[0] hook[1] ; un menu déroulant de résultats liste la personne (avatar, nom, rôles) et les deux premières sections ; le curseur clique sur la personne
herole résultat cliqué grandit en un tableau de bord bento de tuiles en verre : une grande tuile photo (nom et pseudo), la tuile de salutation (badge, hello avec le surligneur, puces de rôles), une tuile de statistiques comptant profile.stats, une tuile button que le curseur clique, et une tuile listant les sections
sectionsun carrousel horizontal, un diaporama par section : un grand numéro, le titre, « n travaux », une barre de progression en haut. Les travaux s'affichent dans des maquettes d'appareils : clips paysage dans une fenêtre de navigateur (feux tricolores, barre d'adresse site/section-title), clips portrait dans un téléphone, en cascade sur le côté droit
ctaun écran de discussion : points de frappe, puis cta[0] et cta[1] arrivent sous forme de bulles de message de la personne (la dernière dans la couleur d'accentuation)
cardune carte de profil avec une bannière de couverture dégradée, avatar chevauchant, pseudo, nom, statistiques de comptage et deux boutons en forme de pilule ; le curseur clique sur Suivre (confettis), puis elle se retourne vers un QR code de profile.qr / profile.back (réalisé avec qrencode lorsqu'il est installé), avec l'adresse en dessous

site (optionnel) définit l'adresse affichée dans les maquettes du navigateur, par défaut profile.back. Chaque style et effet fonctionne dans les deux interfaces (dans app, orbit et ticker ne sont pas utilisés).

Styles et effets

"style" choisit un thème de couleurs. Les styles sombres obtiennent des pages sombres avec une grille légère et des cartes lumineuses au lieu d'ombres de fenêtre.

StyleAspect
mustard (par défaut)le modèle : dégradé jaune moutarde, fond blanc, pages gris clair, pilule noire, boutons bleus
midnightindigo à noir, cyan néon et violet, pages sombres, cartes lumineuses
sunsetpêche à rose, pages blanc chaud, titres et boutons corail
amberor sur quasi-noir (aspect développeur ou portfolio), pages sombres, pilule et boutons ambre
mintmenthe à sarcelle, pages blanches, titres verts

"colors" remplace toute couleur individuelle du style.

Tous les effets sont activés par défaut. Désactivez-en un avec "effects": {"ticker": false}, ou tous avec "effects": false pour un aspect modèle simple :

EffetCe qu'il fait
bokehdes particules de lumière douce dérivent vers le haut sur les scènes de dégradé
shineun balayage lumineux sur la grande question, le bouton et la carte de profil, ainsi que des anneaux d'écho sur le balayage circulaire et un anneau d'impulsion sur le bouton
markerun surligneur passe sous le nom (text.highlight choisit les mots, ou tout ce qui suit le deuxième mot)
orbitun anneau en pointillés avec trois points tourne autour de l'avatar
blurflou de mouvement vertical pendant le défilement de la page
labels« 01 / 03 » au-dessus de chaque titre de section et un soulignement qui se dessine
glareun reflet diagonal traverse chaque carte de travail après son atterrissage
tickerde grandes étiquettes en contour défilent derrière les lignes de fermeture (text.tags, ou sinon les rôles et les titres de section)
confettiune explosion de confettis dans les couleurs du style lorsque le bouton est cliqué
graingrain de film et une légère vignette sur tout

Pour laisser l'utilisateur choisir, rendez les mêmes 4 moments dans chaque style (un « tableau de styles ») avant le rendu complet. Utilisez render.mjs --times sur des copies de promo.json qui diffèrent uniquement par style.

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 tout seul).

Flux de travail

1. Rassemblez ce dont la vidéo a besoin

  • Avatar : une photo portrait, visage et épaules. Donnez crop: [x, y, size] (pixels) pour que le visage soit centré dans le cercle, et vérifiez l'aperçu. Avec un arrière-plan chargé ou clair, "avatarStyle": "duotone" crée une silhouette sombre sur jaune, comme dans le modèle.
  • Sections (1-4) : un titre court chacune (2-4 mots) et 1-3 clips : vidéos ({"file", "at"}, 5.5 s à partir de at jouent dans la carte) ou images. Utilisez les meilleurs travaux de l'utilisateur, et mélangez portrait et paysage pour la variété.
  • Textes : gardez-les courts.
    • hook : une petite ligne et une grande question de 1-2 mots.
    • badge : un slogan d'environ 50 caractères maximum.
    • hello : « Bonjour, je suis … ».
    • roles : 2-4 rôles courts.
    • button : l'étiquette du bouton.
    • cta : deux lignes de fermeture.
  • Carte de profil : handle, name, jusqu'à 3 stats, buttons, clicked et back. N'utilisez que des chiffres réels (provenant de l'utilisateur, de son site ou de son profil). Une valeur de chaîne (comme "2023") est affichée telle quelle, sans comptage.
  • Langue : pour le khmer, définissez "lang": "km" et écrivez du khmer naturel. Kantumruy Pro est inclus.
  • Optionnel : style, effects, logo (dans le cercle de la carte), colors, text.highlight, text.tags, music (+ musicStart), sfxDir.

2. Écrivez le projet

Créez un dossier de projet et copiez examples/creator-reel.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. Aperçu (environ 10 s)

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

Ceci coupe les clips et rend environ 13 images fixes vers out/<name>-preview.png. Lisez-le et vérifiez :

  • le recadrage de l'avatar ;
  • qu'aucune ligne n'est trop longue (les textes longs rétrécissent) ;
  • que les cartes de chaque section montrent de bonnes images : changez at ;
  • les chiffres de la carte de profil.

4. Rendu (environ 2 minutes ; exécutez-le en arrière-plan)

<skill>/scripts/promo.sh <project>/promo.json --jobs 4

Les étapes se déroulent dans cet ordre : assets, plan, render, mix, encode. --from mix remixe le son sans rendre à nouveau les images.

Sortie : out/<name>-1080p60.mp4 et out/<name>-contact.png.

5. Vérifiez avant de remettre

  • Lisez la fiche de contact.
  • ffprobe doit afficher la durée indiquée par build/cues.json. Le mix est normalisé à -14 LUFS / -1 dBTP.
  • Vous ne pouvez pas entendre le résultat, alors dites à l'utilisateur ce que vous avez vérifié et demandez-lui d'écouter.

Réglage

  • Timing : plan() dans scripts/scene.mjs. SEC est la durée d'une section et SCROLL la durée d'un défilement de page. Les repères dans buildCues() suivent automatiquement.
  • Aspect :
    • Les thèmes sont STYLES et les effets sont EFFECTS dans scene.mjs ; les couleurs peuvent également provenir de colors.
    • La mise en page des cartes est layout().
    • Les ombres de fenêtre sont buildShade().
    • Le retournement est drawFlip(), bandes avec perspective.
  • Son : SFX dans scripts/audio.py liste les noms de fichiers essayés dans sfxDir. make_bed() est le rythme lo-fi.

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".

saas-promo

Make a kinetic SaaS / startup / product / developer promo video (1080p60 MP4) in one fixed, fast motion-design style: an ~11-second teaser, or a ~50-second version with chapters (one per product or project) cut on the beat of the user's own song. It opens with glyph flashes and purple/lime neon shapes, then types a word with a cursor while a 3D swirl of your screenshots orbits it. Cards slide onto a painted meadow and build a bento wall with words typing inside them, and the camera zooms into a card. A glowing gradient orb then reveals the headline word by word, and a glitch drops into a long-exposure flower on a blue-to-orange sky with flying symbols and "From … / To …". Every frame is drawn in code, with typing, whoosh, riser and impact sound effects and a synthesised ambient bed or your own song (its tempo and drop are measured, so every cut lands on the beat), mixed to -14 LUFS. English or Khmer. Use it whenever the user wants a SaaS promo, product or app teaser, a developer or...

Skills associés