Communitygithub.com

Film de scène artisanal

Transforme les photos de campagne de la marque en un film de scène stop-motion de 15–20 s, avec marionnettes de papier, légendes sur papier déchiré et une carte finale sur le produit.

Qu'est-ce que Film de scène artisanal ?

Étend les vraies photos en 9:16, anime quelques gestes raides, découpe les accessoires dans les photos elles-mêmes, puis rend localement le mouvement par paliers, une valse de boîte à musique et la carte de fin. Visages, produits et étiquettes imprimées restent tels quels. Un film de sept images coûte environ deux dollars d'appels modèle ; le montage est gratuit sur la machine.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DarthManly/handmade-stage-film-skill/tree/HEAD

Demander à votre IA préférée

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

Documentation

Handmade Stage Film

Soir d'Halloween, rien à la télé : une fille avec un carré noir est assise sur un canapé en carton peint, une boisson rose à la main, et clique sur la télécommande en carton. La télévision en carton s'allume avec de la neige, un petit fantôme danse sur l'écran, puis s'en détache et flotte au loin. Il plane près de son verre (« Il voulait une gorgée. »), atterrit sur la table à carreaux où une fourchette géante pique une assiette de baies peintes (« Gardenia. Baies. Yaourt. »), et une gorgée plus tard, elle est assise sur un énorme chapeau de sorcière tandis que des étoiles apparaissent autour d'elle (« …pleine magie. »). Le verre a son gros plan avec une inscription gribouillée « Eau Magique Pretty » et une flèche, et la dernière carte affiche le logo, le verre, le fantôme, « Halloween édition limitée » et le lieu de vente. Chaque image provient des sept photos de campagne de la marque.

Il est composé de quatre parties :

  • scripts/generate.mjs transforme les photos en éléments : keyframes 9:16 (Nano Banana 2 peint le complément, les pixels originaux sont remis par-dessus), clips Kling, accessoires découpés, étiquettes repositionnées et le logo.
  • scripts/reel.mjs assemble les clips en un seul film sur l'horloge du film.
  • scripts/sfx.mjs synthétise le son : une valse originale de boîte à musique et un son sur chaque événement.
  • scripts/render.mjs joue le tout comme un spectacle : mouvement saccadé à 12 images par seconde, tremblement de caméra tenue à la main, grain animé, marionnettes, légendes sur papier déchiré, tags avec flèches, un écran de télévision qui s'allume, et la dernière carte. Le rendu est local avec Chrome headless et FFmpeg.

Configuration (une fois par machine)

Exécutez dans le dossier de ce Skill :

npm install

Ceci installe puppeteer-core et ffmpeg-static. Google Chrome doit être installé, ou définissez CHROME_PATH sur un exécutable Chrome/Chromium (npx @puppeteer/browsers install chrome-headless-shell@stable en affiche un).

Les séquences nécessitent une clé API pour Nano Banana 2 et Kling 2.5 Turbo ; les scripts les appellent via une passerelle API de modèle, où la clé est créée (https://fal.ai/dashboard/keys). L'utilisateur la définit dans son propre terminal sous le nom FAL_KEY (par exemple dans son profil shell). Ne demandez jamais à l'utilisateur de coller la clé dans le chat, et ne l'imprimez jamais.

Coût

Utilisation du modèle, facturée sur votre propre clé API : 0,08 $ pour chaque image étendue au format 9:16 (et chaque edit), 0,35 $ pour chaque clip de 5 secondes, et une fraction de centime pour chaque découpe (prix d'octobre 2026). Un film de sept images avec cinq clips coûte environ 2,30 $. Le film, les marionnettes, les légendes, le son et le MP4 final sont gratuits sur votre machine. Informez l'utilisateur du coût avant de générer.

Ce qui le fait fonctionner

  • Leurs propres photos, intactes là où ça compte. L'extension et chaque clip partent des vraies photos de la marque ; extend remet les pixels originaux par-dessus la version de l'IA, et relabel remet une étiquette nette sur toute image où le clip l'a floutée.
  • Une histoire, pas un diaporama. Planifiez une petite intrigue à travers les plans, avec un élément qui voyage entre eux (ici un fantôme marionnette qui s'échappe d'une télé). Les légendes sont de courts beats narratifs, pas des slogans.
  • Maladroit intentionnellement. Tout bouge par pas de 1/12 s avec une petite secousse, les marionnettes vacillent sur leurs points clés, les légendes apparaissent en trois étapes et les flèches se dessinent en trois traits. Ne lissez pas.
  • À moitié produit, à moitié marque. Le produit est présent dans la plupart des plans et a un gros plan avec un tag ; la dernière carte est le logo, le produit, le nom et où l'acheter.

Flux de travail

  1. Collectez 4 à 8 photos d'une même séance (3:4, 4:5 ou 9:16), le nom du produit, une ligne (saveurs, matériaux), une note (« Halloween édition limitée ») et l'appel à l'action. Demandez si les photos portent un logo ou un badge imprimé en bas (il est peint hors des images et masqué pour la dernière carte).
  2. Scénario (montrez-le avant de générer) : l'ordre des plans, l'intrigue, ce qui bouge dans chaque clip (une ou deux petites actions, le produit reste immobile), quels accessoires découper en marionnettes et ce qu'ils font, les légendes et les tags, et le coût. Limitez à 15–20 s.
  3. Keyframes : node scripts/generate.mjs extend --in still.jpg --out keys/<shot>.png --cover <rows> pour chaque photo qui n'est pas en 9:16 (--cover = la hauteur en pixels de la bande de logo imprimée en bas de l'originale, le cas échéant). Regardez chacune en taille réelle : si le modèle a laissé un objet miroité ou doublé dans les nouvelles bandes, couvrez-le avec une texture simple de la même photo.
  4. Essai : un clip, le plan avec l'accroche de l'intrigue : node scripts/generate.mjs clip --start keys/<shot>.png --prompt "…" --out clips/<shot>.mp4. Le prompt ne nomme que ce qui bouge (« elle appuie sur un bouton de la télécommande avec son pouce ; le verre reste droit et immobile ») ; un suffixe fixe garde la caméra verrouillée et le décor, le visage et le produit inchangés. Montrez-le, puis faites le reste.
  5. Clips pour les autres plans animés. Regardez chaque image image par image : notez où l'action atterrit (pour placer le son et les marionnettes dessus) et où le petit texte sur le produit est flou. Corrigez les étiquettes avec relabel --clip … --key keys/<shot>.png --box x,y,w,h (la boîte de l'étiquette dans la keyframe), ou utilisez uniquement les images avant que le produit ne bouge. Un clip n'est pas nécessaire pour chaque plan : un plan fixe en gros plan avec un lent zoom avant (still, box, boxTo) est souvent mieux pour le produit.
  6. Accessoires : cutout --in keys/<shot>.png --box x,y,w,h --out props/<name>.png pour chaque marionnette (un personnage, des étoiles, une fleur, une baie, le produit dans une main) ; edit pour une assiette avec quelque chose retiré (un écran de télé sans son fantôme). Le logo : wordmark --in still.jpg --box x,y,w,h --out props/wordmark.png. L'arrière-plan de la dernière carte est un recadrage d'un mur peint d'une des keyframes.
  7. Créez effect.json à partir de examples/example.json (voir Plans et la dernière carte), puis node scripts/reel.mjs effect.json --out reel.mp4 et définissez "reel": "reel.mp4".
  8. Son : node scripts/sfx.mjs effect.json --out stage.m4a, puis "music": "stage.m4a". Relancez-le après tout changement de timing. --no-bed --music track.mp3 échange la valse contre un morceau que l'utilisateur est autorisé à utiliser.
  9. Validez : node scripts/validate.mjs effect.json — corrigez chaque erreur et lisez les avertissements à l'utilisateur.
  10. Brouillon : node scripts/render.mjs effect.json --quality draft --width 540 --out draft.mp4, et vérifiez une image de chaque plan : aucune légende, tag ou marionnette sur un visage ou le produit, tout hors des 14% de droite où se trouvent les boutons de la plateforme.
  11. Final : node scripts/render.mjs effect.json --out film.mp4 --poster poster.png. Pour Xiaohongshu, recadrez une version 3:4 : ffmpeg -i film.mp4 -vf crop=720:960:0:160 -c:a copy film-3x4.mp4 (à la largeur par défaut de 720 ; vérifiez que rien d'important ne se trouve dans les 160 px du haut ou du bas).

Plans

Toutes les positions sont en pixels de cadre 1080 × 1920. Chaque plan est l'un des suivants :

  • Un plan clip : clip (le fichier que reel.mjs coupe), from et to (secondes dans le clip), speed (0.5 = moitié vitesse, qui avec la lecture à 12 pas utilise chaque image d'un bon court segment), hold (secondes pendant lesquelles la première image tient avant de bouger).
  • Un plan fixe : still (une image), len, box et boxTo ([x, y, width] fenêtres 9:16 dans les pixels de l'image ; la vue se déplace de l'une à l'autre).

Chaque plan peut avoir :

  • captions : { "text", "at", "out", "x", "y", "rot", "size" } — des bouts de papier déchirés avec des mots manuscrits ; \n coupe une ligne.
  • tags : { "text", "at", "x", "y", "to": [x, y], "ink": "dark" | "light", "rot", "size" } — des mots manuscrits avec une flèche qui se dessine jusqu'à to.
  • puppets : { "image", "path": [[t, x, y, width, rotation], …], "sound", "exit", "flip", "wobble" } — une découpe déplacée entre ses points clés (t en secondes dans le plan, x et y son centre). Une clé avec width 0 puis une pleine largeur une étape plus tard est un pop. Il tient sa dernière clé sauf si "exit": true. sound joue à sa première clé.
  • screen : { "rect": [x, y, w, h], "off", "static", "plate", "plateAt" } — un écran de télé ou de téléphone qui est noir jusqu'à off, neige jusqu'à static, et affiche plate (la même keyframe avec l'écran vidé) à partir de plateAt, afin qu'une marionnette puisse en sortir.
  • sounds : [[t, "kind"], …] — click, tvon, static, ghost, boing, tap, pop, whoosh, land, stab, sip, sparkle, chime, paper, scribble, cut. Les coupes, légendes, tags, écrans et marionnettes avec un sound obtiennent le leur automatiquement.

La dernière carte

end : len, bg (un mur peint 9:16), wordmark (wordmarkY, wordmarkWidth), name (nameY, nameSize), line (lineY), note sur un bout de papier (noteX, noteY), cta sur une pastille (ctaY), et puppets comme dans un plan (le produit dans une main glissant depuis le bord, le personnage, les étoiles). Chacun a un temps …At.

Champs

ChampRequisNotes
reelouichemin vers un fichier vidéo, relatif au fichier JSON — chaque plan clip coupé en un seul film 9:16 silencieux par scripts/reel.mjs (reel.mp4)
shotsouiliste de 2 à 10 entrées : clip, from, to, speed, hold, still, len — le film dans l'ordre : plans clip (un clip IA d'une de vos photos) et plans fixes (une photo avec un lent mouvement) ; voir SKILL.md, Plans
end.bgnonchemin vers une image, relatif au fichier JSON — l'arrière-plan de la dernière carte : un mur peint ou un fond de vos photos, 9:16
end.wordmarknonchemin vers une image, relatif au fichier JSON — votre logo sur fond transparent (scripts/generate.mjs wordmark)
end.namenontexte, moins de 4 mots — le nom du produit, écrit à la main sur la dernière carte
end.linenontexte, moins de 6 mots — une courte ligne sous le nom, par exemple les saveurs
end.notenontexte, moins de 4 mots — sur un bout de papier déchiré, par exemple "Halloween édition limitée"
end.ctanontexte, moins de 12 mots
musicnonchemin vers un fichier audio, relatif au fichier JSON — la bande-son de scripts/sfx.mjs (stage.m4a)
palettenoncouleurs au format #RRGGBB ; clés : ink (légendes et tags foncés), paper (les bouts de papier et tags clairs) et accent (la pastille CTA)

Conseils

  • Écrivez les prompts de clip serrés : une ou deux petites actions, un visage impassible, « le verre reste droit et immobile, l'étiquette face à la caméra ». Les grands gestes floutent les visages et les étiquettes.
  • Kling choisit son propre timing : regardez où l'action atterrit et placez le clic, la coupe et les marionnettes sur cette image, pas sur un nombre rond.
  • Donnez à l'histoire un voyageur : une marionnette découpée dans une photo qui apparaît dans les plans suivants lie sept images en un seul film.
  • Découpez les marionnettes dans les photos elles-mêmes, pas dans un nouvel art : la même peinture, le même papier et la même lumière les font appartenir.
  • Limitez les légendes à trois ou quatre mots ; les images racontent la plus grande partie.

Sortie

H.264 MP4, 1080 × 1920, 30 ips (l'image bouge par pas de 12 par seconde), 15–20 secondes avec le son, plus une image d'affiche (PNG).

Skills associés