Communitygithub.com

vitozev/phone-portal-reel

Utilisez cette compétence pour réaliser une courte vidéo verticale de produit (Instagram Reels, TikTok, YouTube Shorts) où une main fait glisser un téléphone et chaque produit tombe de l'écran dans la scène réelle, ou toute publicité de type « portail téléphonique », « glisser-déposer » ou « sortie d'écran », surtout lorsqu'il n'y a pas de séquence réelle et que le décor, les mains et le produit doivent être générés.

Qu'est-ce que phone-portal-reel ?

Cette compétence décrit un processus complet pour créer une publicité verticale au format 9:16 de 9 secondes, montrant une main qui fait glisser l'écran d'un téléphone pour faire tomber des produits dans la scène réelle. Elle est idéale pour les annonceurs souhaitant un rendu ultra-réaliste sans tournage traditionnel, car elle combine une image fixe générée (découpée en plans : décor, téléphone avec main, main qui glisse) avec un modèle 3D réel du produit. La compétence est conçue pour des agents comme Claude Code ou des pipelines automatisés, exploitant `gpt-image-2` pour la création d'images, `ElevenLabs` pour la musique et les bruitages, et le framework HyperFrames pour l'animation et le rendu. Elle inclut des scripts Python et bash pour la génération d'images, le mixage audio, la synchronisation et les contrôles qualité (niveaux sonores, alignement des plans). Le guide détaille chaque étape, de la génération du décor à la vérification finale, en passant par la mesure des constantes de la caméra 3D et la résolution des problèmes d'illusion d'optique courants.

Compatible avec~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/vitozev/claude-skills/tree/HEAD/skills/phone-portal-reel

Demander à votre IA préférée

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

Documentation

Reel portail téléphonique

Aperçu

Une publicité produit de 9 secondes au format 9:16 filmée sur un seul plan fixe trépied, en trois temps :

  1. Chute du portail (environ 4,3 s). Une main tient un téléphone. Une seconde main fait glisser l'écran, et chaque glissement fait tomber un produit de l'écran sur une étagère en dessous, arrivant en rythme. Le produit héros tombe en dernier, après un arrêt net dans la musique.
  2. Mélange en stop-motion (environ 2,7 s). Un cut sec supprime les mains et le téléphone. Le produit défile toute la ligne, une image fixe par double-croche, tenu sur les temps forts.
  3. Logo fixe (environ 2 s). Le mot-symbole apparaît en fondu sur 6 à 8 images et reste immobile. Musique uniquement, pas de voix.

Il n'y a pas de séquence réelle. Une photo générée est découpée en calques (décor, téléphone avec main qui tient, main qui glisse) et animée par code. Le produit est un vrai modèle 3D, rendu par la même caméra à l'intérieur du téléphone et dans la pièce, pour qu'il traverse la vitre comme un seul objet.

L'exigence : cela doit passer pour un vrai tournage. Chaque échec que nous avons rencontré était une rupture de continuité que quelqu'un a vue sur une seule image. Regardez en taille réelle, à chaque moment de contact, sur le fichier livré.

Ce dont vous avez besoin

BesoinPour
OPENAI_API_KEYgpt-image-2 pour le plateau et le master ; gpt-image-1.5 avec input_fidelity: high pour les éditions qui doivent conserver la photo
ELEVENLABS_API_KEYLa musique de fond (music_v2_5) et les bruitages
CLI HyperFrames (npx hyperframes), three.js r169Le moteur d'images et le rendu
ffmpeg ; Python 3 avec numpy opencv-python-headless pillow openaiLes scripts

Les scripts lisent les clés depuis l'environnement, ou depuis un fichier .env dans le dossier de travail ou tout dossier au-dessus. Ils ne les affichent jamais. Signalez ce que chaque exécution dépense : dollars OpenAI (les scripts enregistrent une estimation) et crédits ElevenLabs.

Si quelqu'un peut filmer une vraie main faisant glisser un téléphone sur un trépied, utilisez cette séquence pour la main. C'est la partie la plus difficile à simuler.

Portes : arrêtez-vous pour un OK à chaque étape

  1. Brief et feuille de rythme. La marque, 4 à 6 produits (le héros en dernier, dans la couleur qui complète le décor), le décor, et un tempo où un temps est un nombre entier d'images. À 30 ips, 112,5 BPM donne 16 images, 120 BPM donne 15 et 90 BPM donne 20. Positionnez chaque chute sur la grille musicale, sur un temps ou un demi-temps, jamais entre. Pour le nombre de chutes, voir references/build.md, section 1.
  2. Visuel. Le plateau, le master (mains et téléphone), un premier rendu du produit 3D dans la caméra ajustée, et la carte de fin avec 3 paires de polices, le tout sur une seule planche.
  3. Test de mouvement. Un glissement et une chute, rendus en qualité livraison et vérifiés image par image. La plupart des échecs apparaissent ici.
  4. Construction, puis son, puis le final.

Construction

Suivez references/build.md. Il contient chaque étape, avec les chiffres qui ont fonctionné. Dans l'ordre :

  1. Générez un plateau (le décor vide), puis un master : une édition du plateau qui ajoute les deux mains et un téléphone vide. Le master est l'image de référence. Chaque plateau propre est fabriqué à partir de lui.
  2. Découpez les calques du master et mesurez les coins de l'écran, le bord inférieur de l'écran, le bout du doigt et le poignet.
  3. Ajustez la caméra 3D aux bords de l'étagère.
  4. Construisez le moteur. Copiez example/studio/ (la construction de référence : une marque de thé, cinq boîtes) et remesurez ses constantes pour votre plateau. Il ne contient que du code : apportez vos propres images, polices, étiquettes et fichiers three.js. Si le produit n'est pas un carton (un bocal, une bouteille, une canette, du verre), lisez d'abord « Autres produits » dans build.md.
  5. Faites la musique en premier et mesurez ses temps. Verrouillez ensuite les chutes sur la grille, ajoutez les bruitages et mixez.
  6. Effectuez le rendu, puis exécutez les vérifications ci-dessous.

Règles qui ont brisé l'illusion

Ce qui apparaissaitCorrection
Le produit apparaît sous le téléphone quelques images en retardC'est un seul objet 3D des deux côtés de la vitre. Résolvez chaque glissement en arrière à partir de son image de chute : depuis l'image où son point le plus bas atteint le bord, il tombe sous gravité à la vitesse du défilement
Le produit tombe derrière la mainEn dessous du bord inférieur de l'écran, dessinez-le devant la lunette et les doigts
Il reste suspendu sous le téléphone pendant quelques imagesLa gravité prend le relais au bord. Ne le laissez pas continuer à suivre le glissement de la page
Le glissement ressemble à un défilement de photoDonnez une impulsion depuis le poignet et gardez l'avant-bras rigide. Résolvez l'angle du poignet pour que le bout du doigt se déplace avec la page. Pas deux glissements identiques
L'image ressemble à une photo fixeLe téléphone tenu dérive de 1,5 à 2 px et fléchit sous chaque pression. Le mur ne bouge jamais
Une ligne sombre traverse le téléphonePas de séparateurs de page dans le fil d'actualité. Gardez tout effet de rémanence faible
Une montre ou un bijou glisse sur le poignetDemandez un poignet nu dans le master. Si un objet apparaît, masquez-le entièrement et retirez-le avec scripts/blend-edit.py
Un cut se transforme en fonduDécidez chaque cut, échange et image fixe sur l'image entière, jamais à l'intérieur des échantillons d'obturation
L'étiquette s'imprime comme une série de copiesUtilisez 48 sous-images pendant la chute du produit et 10 autrement, avec un obturateur de 0,38 image
Une édition générée a déplacé des éléments en dehors de son masqueLes éditions masquées ne sont pas respectées. Enregistrez l'édition, puis ne la prenez qu'à l'intérieur du masque
Un bruit sourd arrive avant la boîteCoupez chaque prise à 4 ms avant son attaque la plus forte, et alignez sur cette attaque

La liste complète, avec les causes, se trouve dans references/lessons.md.

Vérification avant envoi

  • Recadrages en taille réelle du fichier livré à chaque moment de contact : première image de chaque glissement, produit traversant le bord, chaque chute, le cut, et le bras quittant l'image.
  • python3 scripts/sync-sheet.py final.mp4 --audio sound/stems/sfx.wav : chaque impact se trouve sur son image désignée.
  • bash scripts/check-final.sh final.mp4 1080x1920 : -14 LUFS ±1 et un pic vrai à ou en dessous de -1 dBTP.

Scripts

ScriptFait
scripts/openai-image.py OUT.png "prompt" [--edit IN.png --mask M.png --fidelity high]Génère ou édite une image et enregistre les tokens et un coût estimé
scripts/blend-edit.py crop / blendPrépare une édition masquée d'une région, puis enregistre le résultat et ne le prend qu'à l'intérieur du masque
scripts/elevenlabs.py spec.json OUTDIRGénère la musique de fond et les effets à partir d'une spécification, les met en cache et enregistre les crédits dépensés
scripts/beats.py bed.mp3Trouve le tempo du morceau, sa grille de temps et son premier temps fort
scripts/sync-sheet.py VIDEO --audio sfx.wav ou --cues cues.jsonAffiche les cinq images autour de chaque impact sonore, sur une seule planche
bash scripts/check-final.sh VIDEO [WxH]Vérifie la taille, les fps, la durée, la sonie et le pic vrai

Exécutez chaque script avec --help pour ses options. example/README.md référence la construction de base.

Skills associés