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 :
- 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.
- 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.
- 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
| Besoin | Pour |
|---|---|
OPENAI_API_KEY | gpt-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_KEY | La musique de fond (music_v2_5) et les bruitages |
CLI HyperFrames (npx hyperframes), three.js r169 | Le moteur d'images et le rendu |
ffmpeg ; Python 3 avec numpy opencv-python-headless pillow openai | Les 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
- 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. - 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.
- 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.
- Construction, puis son, puis le final.
Construction
Suivez references/build.md. Il contient chaque étape, avec les chiffres qui ont fonctionné. Dans l'ordre :
- 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.
- 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.
- Ajustez la caméra 3D aux bords de l'étagère.
- 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 » dansbuild.md. - Faites la musique en premier et mesurez ses temps. Verrouillez ensuite les chutes sur la grille, ajoutez les bruitages et mixez.
- Effectuez le rendu, puis exécutez les vérifications ci-dessous.
Règles qui ont brisé l'illusion
| Ce qui apparaissait | Correction |
|---|---|
| Le produit apparaît sous le téléphone quelques images en retard | C'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 main | En 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 images | La gravité prend le relais au bord. Ne le laissez pas continuer à suivre le glissement de la page |
| Le glissement ressemble à un défilement de photo | Donnez 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 fixe | Le 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éphone | Pas 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 poignet | Demandez 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 fondu | Dé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 copies | Utilisez 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 masque | Les é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îte | Coupez 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
| Script | Fait |
|---|---|
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 / blend | Pré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 OUTDIR | Gé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.mp3 | Trouve le tempo du morceau, sa grille de temps et son premier temps fort |
scripts/sync-sheet.py VIDEO --audio sfx.wav ou --cues cues.json | Affiche 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.