Emoji Party (clip vidéo lyrique synchronisé au beat avec des mondes d'emoji, Blender Grease Pencil)
L'utilisateur fournit une chanson (fichier audio) de n'importe quel genre et ses paroles, ou aucune parole pour une version instrumentale. Vous produisez une vidéo 1080p complète : un visage emoji reconnaissable par section, chacun dans son propre monde et sa propre palette de couleurs, faisant quelque chose de relatable, dansant sur le beat, avec les paroles apparaissant à l'écran et vibrant avec la basse. Testé sur "Mr Me" (150 BPM, 4:12, 15 scènes, ~840 objets, rendu en environ 10 minutes).
0. Règles créatives (apprises de l'utilisateur)
- Les personnages principaux sont des visages emoji qui portent une émotion, un différent par scène (anxieux, sourire, bandé, haletant, rire-aux-larmes, chut, époustouflé, intello, en colère, chaud, yeux-étoiles, bouche-fermée, bouche-argent, auréole, fête). Les objets (bougie, boussole, diamant) sont uniquement des accessoires, jamais le personnage principal.
- Du swag sur chaque personnage principal : chaque personnage principal porte quelque chose. Pour le rap, cela inclut une chaîne avec pendentif, grilles dentaires, tatouages faciaux, boucles d'oreilles et un chapeau (casquette, durag, bob, bonnet, couronne); pour les autres genres, voir section 0b.
- Action relatable par scène : conduire, faire du vélo, passer un examen, filmer avec des téléphones, pêcher, faire du DJ, soulever des poids, selfie, lancer de l'argent.
- Une palette par scène, choisie selon l'ambiance des paroles. Le style des paroles reste constant entre les scènes pour que la vidéo forme un tout cohérent.
- Un personnage principal récurrent (emoji lunettes de soleil) possède le refrain et revient dans le refrain final avec tout le casting derrière lui.
- Dessinez des personnages de style emoji originaux. Ne copiez pas un ensemble d'emoji d'une marque.
- Montrez d'abord une scène de test (ou 3 options de palette) et obtenez un accord avant de tout construire. Envoyez des aperçus avec SendUserFile.
0b. Adaptation à la musique (tout genre)
Lisez le morceau avant de choisir quoi que ce soit. Le genre est une entrée, pas une hypothèse.
- Recherche de tempo : recherchez 60-180 BPM, puis résolvez moitié/double temps selon la position de la caisse claire ou du clap (temps 2 et 4). Le trap et le hip-hop sont souvent lus à 140-150 mais semblent être en half-time ; la drum and bass se lit à 170+ mais peut être animée à la moitié de la vitesse. Stockez à la fois
FPB(feel beat) et le beat de la grille. - Métrique : par défaut 4 temps par mesure ; faites du nombre de temps par mesure un paramètre (3 pour la valse, 6 pour 6/8) et utilisez-le dans
FR(bar)et les expressions de longueur de mesure. - Dérive de tempo (groupes live, enregistrements anciens) : si le score de combinaison est faible ou dérive, utilisez une liste de beats suivis et attribuez une propriété
beat_phasepar beat au lieu des expressions de période fixe. - Fréquence d'images : choisissez le fps qui donne des images entières par beat ressenti ; sinon 25 et acceptez des fractions de beat.
- Mouvement par ressenti :
- Four-on-the-floor (house, techno, disco, amapiano) : rebond régulier sur chaque beat, balancement stable.
- Half-time (trap, hip-hop, drill, dubstep) : grand coup sur le beat 1, appui sur le 3, petits détails rapides de charleston.
- Off-beat (reggae, dancehall, afrobeats, ska) : rebond sur l'OFFP, balancement des hanches sur une période de 2 beats.
- Rapide (drum and bass, punk, hardcore) : corps à la moitié de la vitesse, mains et accessoires à pleine vitesse.
- Lent (ballade, R&B, soul, lo-fi) : seulement un balancement, longues périodes, peu d'écrasement, fondus de paroles lents au lieu de pops.
- Swing/triplet (jazz, blues, shuffle) : retarder le contretemps à deux tiers du beat.
- Taux de coupe selon l'énergie : 8 à 16 mesures par scène lorsqu'il est calme, 4 mesures dans les refrains, 1 à 2 mesures dans les drops et les pics.
- Look selon le genre et les paroles : choisissez des palettes, des mondes, des chapeaux et des accessoires qui appartiennent à la musique (chaînes et grilles pour le rap, casques et visières pour la musique dance, chapeau de cowboy pour la country, fleurs pour le folk, clous pour le rock). Gardez toujours le visage emoji comme personnage principal, et respectez la règle du swag : chaque personnage principal porte quelque chose.
- Style des paroles : pops durs et secousses pour les morceaux lourds en basse ; glissade douce et fondu pour les morceaux doux ; police plus grande pour les refrains et les accroches. La langue suit les paroles telles qu'elles sont données (ne "corrigez" jamais un dialecte ou un pidgin).
- Instrumentaux : pas de couche de paroles ; utilisez le titre, les noms de section ou des mots d'ambiance courts sur les drops, et laissez les accessoires porter l'histoire.
- Confirmez la lecture avec l'utilisateur en une ligne (BPM, ressenti, plan de section) avant de construire.
1. Analyse de la chanson (espace de travail)
pip install --break-system-packages -q librosa, puis une recherche combinaison sur le flux basse fréquence (<130 Hz) sur une plage de BPM donne le BPM exact et le décalage du premier beat ; imprimez le kick par mesure (K) et la loudness (R) pour voir l'intro, le groove, les drops et les zones creuses. Ne faites pas confiance au BPM écrit dans la requête (la requête Suno disait 140 ; le morceau était à 150).- Utilisez 25 fps lorsque cela donne des images entières par beat (120, 125, 150 BPM le font).
- Timing des paroles : les modèles de reconnaissance vocale ne peuvent pas être téléchargés dans l'espace de travail, et les téléversements vers le stockage Descript sont bloqués depuis le shell. Appelez
Descript file_upload_ui, demandez à l'utilisateur de déposer l'audio,wait_for_job, puisexport_transcriptau format srt. Attendez-vous à un timing par ligne pour les parties rap/parlées claires et un timing par bloc (ou manquant) pour les parties denses ou chantées ; faites correspondre les vraies paroles de l'utilisateur à ces horodatages à la main et estimez le reste uniformément entre les mesures. Dites à l'utilisateur quelles sections sont estimées. - Écrivez un tableau de scènes : section, mesure de début, emoji, monde, action, palette. Les limites de scène se situent sur les mesures (les demi-mesures sont acceptables). Ajoutez des scènes instrumentales (carte de titre, drop) là où le vocal est silencieux.
2. Configuration de Blender
- Vérifiez la connexion avec
blender__get_scene_info. Demandez avant d'effacer un fichier sauvegardé. Sauvegardez tôt (demandez un dossier ; le Python de Blender peut lire directement les dossiers de l'utilisateur, donc pointez la piste sonore vers l'audio sur place plutôt que de le copier). - 2D plat : caméra orthographique à y=-20 regardant le long de +Y,
ortho_scale16 (la vue est de 16 x 9 unités). Tout est dessiné dans le plan XZ ; la profondeur est le Y de l'objet (un Y plus grand est plus loin). - Chaque scène se trouve à X = index * 40 dans sa propre collection
S01_...; la caméra saute entre elles avec des clés LINEAR sur la position X (plus une petite dérive à l'intérieur de chaque scène) et un marqueur de timeline par coupe. - Couleur :
view_transform='Standard', look None. Stockez le code réutilisable dansbpy.data.textsetexec-le en haut de chaque appel.
3. Règles de Grease Pencil qui prennent du temps à trouver (Blender 5.x)
- Les données sont
bpy.data.grease_pencils;layer.frames.new(1).drawing;drawing.add_strokes([n]); définissezpoint.position=(x,0,z)etpoint.radius; appelezdrawing.tag_positions_changed(). - Les remplissages ne sont pas rendus à moins que chaque trait rempli n'ait un
fill_idnon nul. Définissezstroke.fill_id = unique intpour les remplissages et 0 pour les lignes, etstroke.hide_stroke = Truesur les traits de remplissage uniquement. Donnez à toutes les boucles d'une même glyphe de texte le même fill_id pour que les trous de lettres se découpent. - Matériaux :
bpy.data.materials.create_gpencil_data(m);show_fill/show_stroke; gradient radial viafill_style='GRADIENT'. Les couleurs des matériaux sont linéaires : convertissez hex avec(v/255)**2.2ou tout semble délavé. layer.use_lights = Falsesur chaque calque.- Les objets de texte police/courbe sont cachés derrière Grease Pencil dans les rendus. Convertissez le texte en GP : créez une courbe FONT temporaire,
evaluated_get(dg).to_curve(dg), échantillonnez les splines bezier avecmathutils.geometry.interpolate_bezier, dessinez les boucles en traits GP (traits de contour d'abord, puis remplissages). Faites le travail temporaire dans une scène de travail séparée pour que le graphe de dépendance de la grande scène ne soit pas réévalué par mot (486 mots ont pris 3 s de cette façon). - Les remplissages translucides sur d'autres remplissages translucides donnent un aspect boueux ; préférez des couleurs opaques plus foncées pour les rayons et les lueurs.
- Drivers : l'auto-exécution Python est généralement désactivée, donc chaque driver doit être une expression simple (
sin abs exp fmod min max pi frame) ; affirmezdriver.is_simple_expression.
4. Expressions de beat (F0 = image du premier beat, FPB = images par beat)
PULSE = exp(-fmod(frame-F0+BIG, FPB)/(FPB*0.25)) # 1 sur chaque beat, décroît
OFFP = identique, décalé d'un demi-beat # contretemps
HALF = exp(-fmod(frame-F0+BIG, 2*FPB)/(FPB*0.45)) # tous les 2 beats
OFFB = HALF décalé d'un beat
SWAY(per,ph) = sin(pi*(frame-F0)/(FPB*per)+ph)
FR(bar) = F0 + round(4*FPB*bar)
dance(obj) : location Z += rebondPULSE, scale X (1+écrasementPULSE), scale Z (1-écrasementPULSE), rotation Y += balancementSWAY. Alternez PULSE et OFFP entre les voisins. Les mains haussent sur HALF/OFFB. Caméra ortho_scale = 16*(1 - zoom*PULSE) avec une propriété personnalisée zoom clé (plus grande dans les drops et les refrains).
5. Bibliothèque d'aide pour construire une fois
- Formes :
ell,rect,rrect,star,drop;F(remplissage),S(ligne),P(remplissage + contour à l'encre). emo(C,name,x,z,r,mood): ombre, disque jaune en dégradé, reflet, puis caractéristiques par humeur. Stockezo["r"]=rpour que les accessoires se redimensionnent.- Swag :
chain(o,pendant,ice),grills(o),tattoo(o,kind,side)(larme, croix, étoile, lignes, texte),earring(o,side),hat(o,kind,col,col2,tilt)en tant qu'objet enfant,headphones(o),hand(...)avec bagues et montre optionnelle. - Monde :
sky(C,X,top,mid,bot)avec 16 bandes de couleur,ground,cityskyline avec fenêtres éclairées,wheelavec un driver de rotation,phone. preview(shots)rend des images fixes à 33% dans /tmp etmontage(paths)les assemble avec numpy en une seule image ; visualisez-la avecblender__look(image=path). Vérifiez chaque scène de cette façon avant de rendre.
6. Couche des paroles
- Données : liste de
(kind, t0, t1, text)avec les kindsLligne,Aad-lib,Hmot d'accroche,Bgrand cri. Stockez-la en JSON dans un bloc texte. L: divisez en mots, enveloppez à 14,4 unités de large avec une taille de 0,78 et un espacement de 0,44, en haut du cadre. Chaque mot est un objet GP séparé apparaissant àstart + i*step(step à partir de la durée de la ligne, 2 à 8 images) et caché au début de la ligne suivante ou à la coupe de la scène.- Drivers par mot :
scale = vis * pop * (1+0.10*PULSE)oùvisest une rampe d'entrée/sortie de 2 images etpopest un dépassement de 6 images ;location X/Z += shake*sin(frame*k+ph)*PULSEpour les vibrations de la basse. A: rose, incliné, alternant gauche et droite.H: jaune, en bas, tombe du dessus.B: or, taille 1,5, en haut.- Placez les objets de paroles de chaque scène dans des collections
LYR_Sxxpour que les morceaux de rendu puissent cacher le reste.
7. Rendu (chemin rapide)
- Un rendu de scène complète prend environ 1,3 s/image car chaque objet GP est évalué. Rendez un morceau par scène en parallèle à la place : un Blender en arrière-plan par scène qui définit
hide_rendersur chaque collection saufSxx_,LYR_SxxetCAMERA, supprime la piste audio et écrit en H264 sans audio. Lancez 5 à la fois depuis un processus de lancement détaché (start_new_session=True) qui journalise dansrender_log.txt. - Ensuite, assemblez dans une scène vide d'usine avec des pistes vidéo à l'image de début de chaque scène plus la piste audio, H264 + AAC. Définissez la transformation de vue de cette scène sur Standard sinon la vidéo finale sort sombre et désaturée (le réglage d'usine par défaut est AgX).
- Ne supprimez pas les morceaux tant que le fichier final n'est pas vérifié.
- Vérifiez : chargez le mp4 en tant que movieclip (nombre d'images, fps, taille) et en tant que son (taux, canaux) ; extrayez environ 16 images à travers une scène de séquenceur temporaire avec une transformation de vue Standard dans un contact sheet et regardez-le. Le traceback de l'add-on
bgldans les logs d'arrière-plan est inoffensif. - N'interrogez pas en boucle serrée ; dormez environ 5 minutes entre les vérifications et dites à l'utilisateur le temps attendu.
8. Livraison
- Dites où se trouvent le mp4 et le .blend (mots simples plus un lien computer://), et envoyez le contact sheet.
- Indiquez ce qui n'a pas été vérifié (vous avez vu des images fixes, pas la lecture) et quelles sections de paroles sont estimées.
- Proposez des correctifs par scène ou par ligne de paroles ; les marqueurs de timeline sont les coupes et le JSON des paroles contient les timings.