Intérieurs Reels
Transformez les séquences brutes de projets d'intérieur en Reels 9:16 prêts à être téléchargés. Le script n'est qu'un outil. Les décisions éditoriales (quelle séquence, quelle partie, quel ordre) sont la tâche de Claude et doivent être basées sur l'observation des images de chaque clip, pas sur des suppositions à partir du nom du fichier.
SKILL = dossier de cette compétence. Tous les scripts : python3 SKILL/scripts/<nom>.py.
Avant de commencer (une fois par session)
Exécutez bash SKILL/setup.sh. En cas d'ÉCHEC, corrigez d'abord. Lisez SKILL/brand.json pour le nom du studio, l'appel à l'action, le logo, le motif par défaut et les préférences du client.
Règles absolues (à ne pas enfreindre)
- Le texte et le logo ne sont pas la tâche de l'assistant. Le texte et le logo sont définis par le client dans l'interface graphique et stockés dans
<dossier>/_edit/overlay.json.render.pylit ce fichier et écrase touttexteetlogodans le plan. N'écrivez pastexteoulogodansplan.json, ne demandez pas le contenu du texte au client et n'ajoutez pas de texte vous-même àoverlay.json(y compris l'appel à l'action debrand.json) sauf si le client le demande. - Le motif ne contrôle que les coupures et l'apparence. Ce qui est extrait du motif : l'ordre des emplacements, la durée, le mouvement, les transitions et l'étalonnage. Le
texte,exemple_contenuetlogodans le motif ne sont que des notes de la vidéo de référence, ils ne sont pas rendus. - Modifier le texte ou le logo via le chat = éditer
overlay.json. Si le client demande de changer le contenu du texte, la police, la position, le moment d'apparition, la taille, la couleur ou le logo, modifiez<dossier>/_edit/overlay.json(format dansPLAN.mdsectionoverlay.json), puis rendez à nouveau. L'interface graphique recharge ce fichier après votre réponse. Les polices proviennent uniquement deSKILL/fonts/. La liste des polices, catégories, caractéristiques et utilisations se trouve dansfonts/fonts.json; choisissez-y en fonction de l'ambiance demandée par le client. Les polices ou tailles différentes par ligne (par exemple "la deuxième ligne en Great Vibes") sont gérées viatexte[].par_ligne. Le logo n'est quenoir(brand/logo.png) oublanc(brand/logo-blanc.png). Les données du studio (nom, site webkeziakarin.com, Instagram@keziakarin.studio) restent dansbrand.json. - L'audio provient également de
overlay.json(audio). Ne choisissez pas ou ne remplacez pas la musique vous-même et n'écrivez pasmusiquedans le plan. Si le client demande via le chat (changer de chanson, volume, point de départ, final avec/sans musique, synchronisation des battements), modifiezaudiodansoverlay.json(format dansPLAN.md). La musique provient uniquement de l'audio du motif guide (patterns/audio/) ou de la bibliothèque du studio (brand/musique/). Rappelez au client que l'audio de référence appartient à d'autres personnes s'il souhaite l'utiliser dans la version finale. - Si
overlay.jsonn'existe pas encore, le rendu s'exécute quand même sans texte et logo du motif. Mentionnez au client que le texte et le logo peuvent être saisis dans l'interface graphique, partie Détails. - Ne supprimez pas et ne remplacez pas
overlay.jsonsans demande. Ce fichier est le choix du client. - Le bougé est géré automatiquement.
render.pymesure le bougé de chaque segment et le stabilise lui-même ("stable" : "auto", par défaut). Ne remplissezstableque s'il y a une raison :trueforce la stabilisation,falsela désactive (par exemple mouvement intentionnel de la main). Lisez le tableau "Stable" dans le journal de rendu :! bougé résiduel visible= vérifiez le résultat ;! ÉCHEC= le rendu s'arrête, choisissez une autre plage ou un autre clip pour ce segment. Lors de la révision, remplissez toujoursbougedans_review/*.jsonpour les parties manifestement instables/perte de focus : cette plage ne sera pas utilisée lorsque le rendu décalera ledebut. - Choisissez les parties valables, n'utilisez pas toutes les secondes du clip. Lors du rendu,
render.pyanalyse automatiquement le clip (_qualite/) et marque les parties sombres, vides (sans objet) ou floues. Les segments contenant plus de 0,3 seconde de parties mauvaises sont rejetés et une suggestiondebutest donnée. Obligation : déplacezdebutvers la suggestion, ou réduisezduree, ou changez de clip. N'utilisez pas--ignorer-qualitesans l'autorisation de l'utilisateur. - La durée suit les séquences, pas le motif. Si la bonne plage d'un clip est plus courte que l'emplacement du motif, raccourcissez cet emplacement. La durée totale du Reel peut être inférieure à
duree_totaledu motif. Ne remplissez pas un emplacement avec des parties de mauvaise qualité. - Regardez l'image avant la finale. Les suggestions de l'analyse doivent être vérifiées en regardant les images dans cette plage (grille ou aperçu). L'analyse ne sait pas si l'objet principal est bon ou si cette partie constitue une bonne ouverture.
- Passez d'abord en revue tous les clips bruts. Exécutez
scripts/review_bahan.py <dossier-brut>, regardez CHAQUE feuille dans_review/jusqu'à épuisement, puis remplissez le JSON de chaque clip (deja_vu,bouge,plage_valable,decision).render.pyrefuse le rendu si le clip n'a pas été revu ou si le segment est en dehors deplage_valable(sauf--ignorer-qualite). - Vérifiez le texte après le rendu. La position du texte est choisie par le client (grille 3x3). Après le rendu, regardez
*_texte<N>_verif.jpg(carré rouge = zone de texte estimée). Si le texte cache le visage ou l'objet principal, informez le client et suggérez une autre position. Ne modifiez pas la position vous-même sans approbation. - Les clips choisis par le client proviennent de
<dossier>/_edit/clip.json. Lisez ce fichier avant de créer le plan (format dansPLAN.mdsectionclip.json).ouverture= clip du premier segment,fermeture= clip du dernier segment,interdit= ne doit pas être utilisé dans aucun segment. Le choix du client prime surtype_plandu motif ; si le type de plan du clip est différent de l'emplacement du motif, informez le client. Les meilleures secondes dans le clip choisi sont toujours sélectionnées par l'assistant.render.pyrefuse un plan qui viole ce fichier (ne peut pas être contourné par--ignorer-qualite). Ne modifiez pas et ne supprimez pasclip.json; ce fichier est écrit par l'interface graphique.
Flux : éditer un clip en Reel
- Rassemblez les informations. Obligatoire : le dossier des clips. Optionnel : le motif et le fichier audio (narration/voix off, mp3/m4a/wav). Le texte et le logo se trouvent déjà dans
_edit/overlay.json, ne les demandez pas. Ne posez des questions que sur ce qui est vraiment vide, maximum 1 question. S'il y a un fichier audio, remplissezvoixdans le plan (voirPLAN.md). La voix n'est pas enregistrée par la compétence : l'utilisateur doit fournir le fichier audio. Comparez le nombre de clips dans le dossier avecmin_clipdu motif. S'il est inférieur, informez le client et suggérez un motif avec unmin_clipplus petit ou d'ajouter des clips. Vous pouvez continuer si le client est d'accord. - Analyse. Exécutez
scan_clips.py <dossier>pour créer<dossier>/_scan/. - Regardez CHAQUE grille
_scan/<clip>.jpgavec l'outil d'affichage. Pour chaque clip, notez dans un tableau : le type de plan (large / moyen / détail / visite / panoramique), la pièce, la qualité (bougé, sombre, trop clair, présence de personnes ou d'objets en désordre), les meilleures secondes (seconde_imagedansmanifest.jsonmappe les carrés de la grille aux secondes), et la direction du mouvement de la caméra. Ne continuez pas avant d'avoir vu toutes les grilles. - Choisissez le motif parmi
SKILL/patterns/*.json, selon la demande ou le défaut. Si la sélection est automatique, choisissez celui dontadapte_acorrespond le mieux au nombre et au contenu des clips. Lisez lesnotes_entrainementdu motif choisi (le cas échéant) et appliquez ses enseignements lors du remplissage des emplacements. - Remplissez les emplacements. Pour chaque emplacement dans
parcours, choisissez le clip et la secondedebutqui correspondent àtype_plan, suivez les règles narratives ci-dessous. Copiezduree,mouvement,transition_entree,effet_entree,effet_sortie,fonduet l'étalonnage du motif. Copiez égalementcadreetfindans le plan, remplacezlogo_emplacementparlogo_segment(indice du segment de cet emplacement) et remplissezouverture_segmentavec l'indice du segment du premier emplacement de texte du motif (texte[0].emplacement), afin que le texte d'ouverture de l'interface graphique apparaisse dans cet emplacement. Si le motif atexte[0].duree, écrivez aussiouverture_duree_texte(valeur numérique, en secondes) dans le plan — cela garantit que le texte d'ouverture s'affiche assez longtemps pour être lu. Si le motif atexte[0].jusqua_emplacement, écrivez aussiouverture_textedans le plan :debut,animation,fondu,sortiesont copiés detexte[0], etjusqua_segment= indice du segment de l'emplacementjusqua_emplacement. Ne copiez pas le texte et le logo. Écrivez<dossier>/_edit/plan.jsonselonSKILL/PLAN.md, en utilisant des chemins absolus.- Motif avec
cadreletterbox : privilégiez les clips paysage. Les clips portrait sont recadrés au centre en bande 16:9 ; si vous êtes obligé de les utiliser, informez le client. - Réutilisation des clips autorisée si le nombre de clips est inférieur au nombre d'emplacements : les
debutdans le même clip sont espacés d'au moins 1 seconde, et pas dans deux segments consécutifs. Le rendu émet un avertissement si cette règle est violée. - Si le motif a
pas_encore_pris_en_charge, mentionnez cet effet au client avant le rendu. - Mode d'édition depuis l'interface graphique (mentionné dans le message "Commencer l'édition") :
suivre_reference(défaut) : copiez le parcours du motif exactement, ne supprimez pas, n'échangez pas et ne fusionnez pas les emplacements. Les superpositions de texte sont déjà numérotées selon l'emplacement du motif (quand), et le logo utiliselogo_segment, donc l'ordre des segments doit être le même queparcours. S'il manque des clips, réutilisez-les (règles ci-dessus), ne supprimez pas d'emplacement.personnalise: le motif n'est qu'un point de départ stylistique (étalonnage, transitions, effets, cadre). La durée et le nombre de segments peuvent être adaptés aux clips. Écrivez"mode" : "personnalise"dans le plan, afin que l'audio de référence soit synchronisé aux battements.
- Motif avec
- Aperçu. Exécutez
render.py <plan> --apercu, puis regardez*_apercu_verif.jpg. Vérifiez : l'ordre a du sens, aucun mauvais plan, le texte de la superposition est lisible et ne cache pas l'objet principal, aucune image figée étrange. Corrigez le plan et répétez si nécessaire. - Final. Exécutez
render.py <plan>, regardez*_verif.jpgune fois de plus, puis rapportez le chemin de la vidéo avec un résumé de l'ordre des plans en 1-2 phrases.
Règles narratives pour l'intérieur
- Les 3 premières secondes déterminent si l'utilisateur arrête de défiler. L'ouverture doit être le plan le plus fort : lumineux, droit, espace visible en entier.
- Suivez le plan. Ordre des pièces de l'entrée vers les zones publiques (salon, salle à manger, cuisine) puis vers les zones privées (chambre, salle de bain). Ne sautez pas d'une pièce à l'autre de façon désordonnée.
- Alternez les échelles. Plan large, puis détail, puis large. Deux plans larges de pièces différentes à la suite devraient être reliés par une transition, pas une coupe.
- Direction du mouvement cohérente. Un panoramique vers la gauche est suivi d'un plan qui se déplace vers la gauche ou d'une transition
slideleft/smoothleft. Évitez les directions opposées à une jonction. - Prenez des parties stables. Choisissez les secondes au milieu du mouvement, pas au début ou à la fin du mouvement de la caméra. Ignorez les parties floues, sombres ou avec des personnes.
- Fermeture utilisez le plan le plus beau qui a une zone vide pour l'appel à l'action et le logo.
- Texte : géré par le client via
overlay.json. Si un conseil est demandé, suggérez un maximum de 6 mots par texte. - Moins de clips que d'emplacements : supprimez d'abord les emplacements
details. Plus de clips que nécessaire : n'utilisez que les meilleurs, pas besoin d'utiliser tous les clips. - Clips paysage : utilisez
"remplir" : "flou"si la composition est importante. Si l'objet principal est au centre, unrecadragesuffit.
Flux : révision après résultat
S'applique si le message du client se termine par [mode révision : ...] (l'interface graphique l'ajoute lorsque _edit/plan.json existe déjà). Objectif : comprendre l'intention de la révision avant de modifier quoi que ce soit, car le rendu est long. Le client ne fait que cliquer sur un bouton, donc toutes les questions DOIVENT être envoyées via le bloc questions, pas en texte libre.
- Nouveau message de révision (pas une réponse, pas "Exécuter") :
- Lisez
plan.jsonet regardez*_verif.jpgdu dernier résultat. Ne modifiez aucun fichier. - Envoyez un tour : maximum 4 questions. Le contenu porte sur l'intention (quel plan, combien, quel style) et un maximum de 2 constats du résultat (par exemple plan sombre, texte cachant un objet), chacun avec des options comme "Corriger" / "Laisser".
- Chaque question a 2 à 4 options courtes (≤ 6 mots), exactement une option
"suggere" : true."multi" : trueuniquement pour les choix qui peuvent en contenir plusieurs (par exemple quels plans remplacer). N'ajoutez pas d'option "Autre" ; l'interface graphique la fournit déjà. - Écrivez au maximum 1 phrase d'introduction, puis le bloc, puis arrêtez-vous et attendez.
- Lisez
- Message commençant par
Réponse := réponse du tour. Si des points ne sont pas encore clairs et qu'il s'agit du premier tour, envoyez un deuxième tour (mêmes règles). Ensuite (ou si c'est déjà clair), envoyez un blocresume: liste des modifications à apporter, 1 point par modification. Arrêtez-vous et attendez. Exécuter directement : ...= utilisez l'optionsuggerepour toutes les questions du dernier tour, puis exécutez sans résumé.Exécuter selon le résumé.= exécutez exactement le contenu du dernier résumé (modifier le plan/overlay, aperçu, final), puis rapportez comme d'habitude.- Message texte libre lorsque la carte est ouverte = réponse libre. Traitez-le comme
Réponse :. - Maximum 2 tours de questions par révision. Les demandes déjà très claires (par exemple "changer la police en Great Vibes") passent par 1 tour court (juste les constats, ou 1 question de confirmation), puis un résumé.
- Message "choix des clips modifié" (envoyé par l'interface graphique après que le client a modifié le clip d'ouverture, de fermeture ou interdit) = révision normale : lisez le dernier
_edit/clip.jsonet appliquez-le au plan via les étapes 1 à 4 ci-dessus (règle absolue 13).
Format du bloc (JSON valide, un bloc par réponse) :
```questions
{"type": "demander", "questions": [
{"id": "q1", "titre": "Quel plan remplacer ?", "multi": true,
"options": [{"label": "Plan 2 (cuisine)", "suggere": true}, {"label": "Plan 4 (chambre)"}]},
{"id": "q2", "titre": "Constat : plan 3 un peu sombre", "multi": false,
"options": [{"label": "Corriger", "suggere": true}, {"label": "Laisser"}]}
]}
```
```questions
{"type": "resume", "resume": ["Plan 2 remplacé par clip cuisine seconde 4", "Plan 3 éclairci"]}
```
Flux : entraînement du style
S'applique si le message se termine par [mode entraînement : ...] (envoyé depuis l'onglet Entraînement du style de l'interface graphique). Objectif : tester un motif existant avec sa vidéo exemple, signaler les incohérences et corriger le motif avec l'accord du client. Toutes les questions DOIVENT passer par le bloc questions (format dans "Flux : révision après résultat").
- Entrée du message de l'interface graphique : nom du motif, mode (
suivre_reference/personnalise) et dossier des clips. - Matériel. Lisez
SKILL/patterns/<motif>.jsony comprisnotes_entrainement. Vidéo exemple =skill/exemple-video/<video_exemple>(dossierexemple-videoà côté du dossier de la compétence). Feuille de référence : utilisezSKILL/_ref/<nom>/existant (cherchez le nom du motif ou le nom du fichiervideo_exemplesans extension ; regardezfilmstrip.jpg/shots.jpg). Si elle n'existe pas, exécutezanalyze_ref.py <video exemple> --name <motif> --out <dossier>/_training/<motif>/ref. - Dossier de travail =
<dossier>/_training/<motif>/. Ne touchez pas à
…
[suite tronquée pour la traduction]