Pipeline Python/Remotion piloté par un skill Claude Code qui produit tous les teasers Instagram d'une soirée techno depuis un seul fichier de description. L'IA générative ne produit que les plans d'ambiance. Les noms, la charte, les vidéos réelles des DJs et les cuts calés sur la musique sont composés en code, pour environ 5 à 10 $ de génération par soirée. En production.
Je préside Tekuno, une association qui promeut la musique électronique dans la région messine : elle organise des soirées et porte un label qui met en avant les artistes locaux. Chaque soirée demande sa série de teasers Instagram : la lineup, un focus artiste, un compte à rebours à J-7 et J-1, la timetable du jour. Jusqu'ici, tout se montait à la main sous After Effects.
Le montage manuel se refait à chaque soirée, et l'IA générative seule ne suffit pas : elle écrit mal les noms des artistes, ne tient pas une charte graphique et déforme les visages dès qu'une photo réelle passe dans un modèle image-to-video.
Objectif : produire en une passe tous les teasers 9:16 d'une soirée depuis un seul fichier, dans la charte de l'affiche, pour 5 à 10 $ de génération IA par soirée.
Mon rôle : conception, développement et exploitation, seul.
Confier tout le teaser à un modèle vidéo, c'est accepter des noms mal orthographiés, une typographie approximative et des visages déformés. Pour une association qui publie au nom de ses artistes, ce n'est pas acceptable.
Solutions : un partage strict des rôles. L'IA ne génère que les plans d'ambiance abstraits (chrome liquide, fumée, lumière) et l'animation de l'affiche, sans texte ni personne. Tout le reste est composé en code : noms, horaires, lieux, logos, médias réels des DJs. Un nom ne peut donc jamais être mal écrit, et aucun visage réel ne passe dans un modèle génératif. Quand l'affiche montre une personne identifiable, elle n'est jamais confiée à l'IA : la vidéo l'anime alors par un simple zoom lent, calculé en code.
Un plan vidéo coûte de l'argent à chaque génération, et un job tourne deux à trois minutes chez le fournisseur. Une coupure réseau, un Ctrl+C ou une affiche retouchée suffisent à repayer ce qui a déjà été payé.
Solutions : chaque plan porte une empreinte de ce qui le définit (prompt, modèle, résolution, durée, image source) : un plan déjà généré n'est jamais repayé. Chaque job est inscrit dans un manifest dès sa soumission : après une coupure, la génération suivante reprend le suivi au lieu de resoumettre. Un devis gratuit précède chaque lancement, un plafond par soirée impose une confirmation humaine, et un draft en 480p valide le rendu avant le final en 720p. Le final reprend le seed du draft retenu, pour rester proche de ce qui a été validé. Résultat : environ 5 à 10 $ de génération par soirée.
Préparer une soirée, c'est une suite d'étapes : ranger les fichiers, remplir la description, écrire les prompts, préparer les médias, générer, rendre. Un agent conversationnel s'y prête bien, mais il manipule des données personnelles (les médias des DJs) et peut déclencher des dépenses.
Solutions : un skill Claude Code conduit la préparation en conversation, mais il n'exécute rien lui-même : un CLI déterministe, utilisable sans Claude, est le seul exécutant. La lecture des médias des DJs est bloquée par permission, et chaque génération payante franchit trois étapes : un devis gratuit, un accord explicite dans la conversation, puis une fenêtre de permission de Claude Code, que l'agent ne peut pas valider à ma place.
OpenRouter propose une trentaine de modèles de génération vidéo, aux tarifs très variés. Pour choisir, les classements publics ne m'aidaient pas : ils reflètent l'avis général des utilisateurs, toutes vidéos confondues. Or j'avais besoin d'un usage précis : des plans abstraits, sans texte ni personne, dans les couleurs de la soirée.
Solutions : un benchmark reproductible entre Wan 3.0 et MiniMax Hailuo 3 Max, en trois phases (pré-tri en 480p, contrôle en résolution de production, animation de l'affiche). La règle de décision était fixée avant le moindre résultat, et la notation se faisait à l'aveugle, sur des clips anonymisés par une lettre tirée au sort. Wan 3.0 l'emporte, 4,1 contre 3,5 sur 5 pour 6 % d'écart de coût. Coût total du benchmark : 9,58 $ pour 32 clips, sans aucun échec.
Dans un teaser, les cuts doivent tomber sur la musique : calés au hasard, ils sonnent faux à l'écoute, même quand l'image est juste. Et chaque soirée a une lineup différente, qu'il faut répartir sur une durée fixe sans retoucher le code.
Défis techniques : détecter le tempo et le drop d'un morceau sans calibrage manuel, puis répartir les cartes, les vidéos des DJs et les plans d'ambiance sur une grille musicale, en frames entières (sans dépasser la durée de la variante).
Solutions : la composition est écrite en Remotion (React), pilotée par un CLI Python. Le tempo et le drop sont détectés automatiquement (le drop est retrouvé à 0,01 s près sur un morceau réel). Chaque cut tombe sur le premier temps d'une demi-mesure. Une règle unique répartit le temps entre les cartes, les vidéos des DJs et les plans d'ambiance, pour les quatre variantes. Si tout ne tient pas dans la durée prévue, elle retire d'abord des passages de plans d'ambiance, puis raccourcit ou retire des vidéos, en signalant chaque coupe. En dernier recours, elle indique de combien allonger la vidéo. Une soirée se règle donc par sa description seule, sans toucher au code.
Une affiche se lit à l'arrêt, sur un grand format. Un teaser se regarde en quelques secondes, sur un téléphone, avec un fond qui bouge sous le texte : la typographie et la mise en page de l'affiche n'y tiennent pas telles quelles.
Solutions : un fond IA continu sous le texte, qui avance d'une carte à l'autre sans rejouer un passage, et le cadre de l'affiche fixe sur toute la vidéo (date, horaires, lieux). La vidéo se termine par un fondu au noir sous le logo. La typographie est agrandie et épaissie pour l'écran d'un téléphone, et chaque écart au design system de l'affiche est tranché puis consigné.
Les vidéos des DJs arrivent dans tous les formats. Celles filmées à l'iPhone sont en HDR : converties en vidéo standard pour Instagram, leurs couleurs ressortent ternes et grisâtres. Beaucoup sont tournées à l'horizontale, et le niveau sonore change d'un fichier à l'autre.
Solutions : une conversion HDR vers vidéo standard qui garde le contraste et les couleurs d'origine, un volume sonore harmonisé au niveau recommandé par Instagram, et une règle de cadrage : plein écran quand le recadrage en vertical garde l'essentiel de l'image, sinon vidéo entière dans un cadre de la charte. Les plans IA sont étalonnés dans la couleur de la soirée, les vidéos des DJs gardent leurs couleurs d'origine.
Code source disponible sur demande (dépôt privé).
© 2026 Thibaud Geisler - SIRET 880 419 122 00036