Communitygithub.com

interior-reels

Transforme des séquences brutes de projets d'intérieur en Reels 9:16 prêts à être publiés sur Instagram ou TikTok, avec la possibilité de créer des motifs d'édition réutilisables.

Qu'est-ce que interior-reels ?

Cette compétence est conçue pour les agents IA qui éditent des vidéos de design d'intérieur et d'architecture en Reels/TikTok (format 9:16). Elle guide l'agent à travers un workflow complet : analyse des séquences brutes, sélection des meilleurs extraits, arrangement selon des motifs prédéfinis ou personnalisés, et rendu final. Les décisions éditoriales sont basées sur l'inspection visuelle des images (pas seulement les noms de fichiers), en respectant des règles strictes comme la non-interférence avec le texte et les logos (gérés par le client via `overlay.json`), la stabilisation automatique des plans instables, et la sélection de séquences de qualité. L'agent interagit avec le client via des blocs de questions structurés pour clarifier les révisions et les entraînements de motifs, tout en maintenant un flux de travail collaboratif avec l'interface utilisateur GUI. Elle prend en charge des motifs d'édition réutilisables, des révisions guidées et un mode d'entraînement pour améliorer les motifs existants.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/alfianwilfredo/edit-skill/tree/main/skill/interior-reels

Demander à votre IA préférée

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

Documentation

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)

  1. 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.py lit ce fichier et écrase tout texte et logo dans le plan. N'écrivez pas texte ou logo dans plan.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 de brand.json) sauf si le client le demande.
  2. 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_contenu et logo dans le motif ne sont que des notes de la vidéo de référence, ils ne sont pas rendus.
  3. 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 dans PLAN.md section overlay.json), puis rendez à nouveau. L'interface graphique recharge ce fichier après votre réponse. Les polices proviennent uniquement de SKILL/fonts/. La liste des polices, catégories, caractéristiques et utilisations se trouve dans fonts/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 via texte[].par_ligne. Le logo n'est que noir (brand/logo.png) ou blanc (brand/logo-blanc.png). Les données du studio (nom, site web keziakarin.com, Instagram @keziakarin.studio) restent dans brand.json.
  4. L'audio provient également de overlay.json (audio). Ne choisissez pas ou ne remplacez pas la musique vous-même et n'écrivez pas musique dans le plan. Si le client demande via le chat (changer de chanson, volume, point de départ, final avec/sans musique, synchronisation des battements), modifiez audio dans overlay.json (format dans PLAN.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.
  5. Si overlay.json n'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.
  6. Ne supprimez pas et ne remplacez pas overlay.json sans demande. Ce fichier est le choix du client.
  7. Le bougé est géré automatiquement. render.py mesure le bougé de chaque segment et le stabilise lui-même ("stable" : "auto", par défaut). Ne remplissez stable que s'il y a une raison : true force la stabilisation, false la 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 toujours bouge dans _review/*.json pour les parties manifestement instables/perte de focus : cette plage ne sera pas utilisée lorsque le rendu décalera le debut.
  8. Choisissez les parties valables, n'utilisez pas toutes les secondes du clip. Lors du rendu, render.py analyse 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 suggestion debut est donnée. Obligation : déplacez debut vers la suggestion, ou réduisez duree, ou changez de clip. N'utilisez pas --ignorer-qualite sans l'autorisation de l'utilisateur.
  9. 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_totale du motif. Ne remplissez pas un emplacement avec des parties de mauvaise qualité.
  10. 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.
  11. 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.py refuse le rendu si le clip n'a pas été revu ou si le segment est en dehors de plage_valable (sauf --ignorer-qualite).
  12. 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.
  13. Les clips choisis par le client proviennent de <dossier>/_edit/clip.json. Lisez ce fichier avant de créer le plan (format dans PLAN.md section clip.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 sur type_plan du 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.py refuse un plan qui viole ce fichier (ne peut pas être contourné par --ignorer-qualite). Ne modifiez pas et ne supprimez pas clip.json ; ce fichier est écrit par l'interface graphique.

Flux : éditer un clip en Reel

  1. 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, remplissez voix dans le plan (voir PLAN.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 avec min_clip du motif. S'il est inférieur, informez le client et suggérez un motif avec un min_clip plus petit ou d'ajouter des clips. Vous pouvez continuer si le client est d'accord.
  2. Analyse. Exécutez scan_clips.py <dossier> pour créer <dossier>/_scan/.
  3. Regardez CHAQUE grille _scan/<clip>.jpg avec 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_image dans manifest.json mappe 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.
  4. Choisissez le motif parmi SKILL/patterns/*.json, selon la demande ou le défaut. Si la sélection est automatique, choisissez celui dont adapte_a correspond le mieux au nombre et au contenu des clips. Lisez les notes_entrainement du motif choisi (le cas échéant) et appliquez ses enseignements lors du remplissage des emplacements.
  5. Remplissez les emplacements. Pour chaque emplacement dans parcours, choisissez le clip et la seconde debut qui correspondent à type_plan, suivez les règles narratives ci-dessous. Copiez duree, mouvement, transition_entree, effet_entree, effet_sortie, fondu et l'étalonnage du motif. Copiez également cadre et fin dans le plan, remplacez logo_emplacement par logo_segment (indice du segment de cet emplacement) et remplissez ouverture_segment avec 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 a texte[0].duree, écrivez aussi ouverture_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 a texte[0].jusqua_emplacement, écrivez aussi ouverture_texte dans le plan : debut, animation, fondu, sortie sont copiés de texte[0], et jusqua_segment = indice du segment de l'emplacement jusqua_emplacement. Ne copiez pas le texte et le logo. Écrivez <dossier>/_edit/plan.json selon SKILL/PLAN.md, en utilisant des chemins absolus.
    • Motif avec cadre letterbox : 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 debut dans 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 utilise logo_segment, donc l'ordre des segments doit être le même que parcours. 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.
  6. 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.
  7. Final. Exécutez render.py <plan>, regardez *_verif.jpg une 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, un recadrage suffit.

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.

  1. Nouveau message de révision (pas une réponse, pas "Exécuter") :
    • Lisez plan.json et regardez *_verif.jpg du 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" : true uniquement 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.
  2. 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 bloc resume : liste des modifications à apporter, 1 point par modification. Arrêtez-vous et attendez.
  3. Exécuter directement : ... = utilisez l'option suggere pour toutes les questions du dernier tour, puis exécutez sans résumé.
  4. 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.
  5. Message texte libre lorsque la carte est ouverte = réponse libre. Traitez-le comme Réponse :.
  6. 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é.
  7. 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.json et 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").

  1. Entrée du message de l'interface graphique : nom du motif, mode (suivre_reference / personnalise) et dossier des clips.
  2. Matériel. Lisez SKILL/patterns/<motif>.json y compris notes_entrainement. Vidéo exemple = skill/exemple-video/<video_exemple> (dossier exemple-video à côté du dossier de la compétence). Feuille de référence : utilisez SKILL/_ref/<nom>/ existant (cherchez le nom du motif ou le nom du fichier video_exemple sans extension ; regardez filmstrip.jpg/shots.jpg). Si elle n'existe pas, exécutez analyze_ref.py <video exemple> --name <motif> --out <dossier>/_training/<motif>/ref.
  3. Dossier de travail = <dossier>/_training/<motif>/. Ne touchez pas à

…

[suite tronquée pour la traduction]

Skills associés