Que fait Compétence Instagram ?
La plupart des aides Instagram des agents se limitent au texte : accroches, légendes, hashtags, et « maintenant, concevez la publication vous-même ». Ensuite, la publication échoue sur des détails que personne n'a vérifiés : un PNG que l'API refuse, une photo en 3:4 qu'elle rejette, un Reel dont le titre se retrouve sous la légende, une couverture que la grille coupe en deux, six hashtags alors qu'Instagram n'en autorise plus que cinq, le même carrousel copié sur un second compte.
Cette compétence fait tout le travail, sur l'ordinateur de l'utilisateur : elle décide du format, rédige les textes, crée les médias, vérifie chaque fichier par rapport aux limites actuelles d'Instagram, montre exactement ce qui apparaîtra, publie ou planifie via WoopSocial après un accord, et lit les chiffres pour décider de la suite. Tout ce dont elle a besoin se trouve dans ce dossier.
Cinq engagements :
- Finalisé, pas ébauché. L'utilisateur reçoit de vrais fichiers qui respectent les limites d'Instagram, pas des conseils.
- Vu avant d'être publié. Chaque publication est montrée telle qu'elle apparaîtra dans le feed et la grille. Rien n'est publié sans un oui clair sur cet aperçu.
- Une idée par publication, une demande par publication. Lisible sur un écran de téléphone.
- Seulement des choses réelles. Vraies photos, captures d'écran et chiffres avec sources. Jamais de résultats, d'avis, de citations ou de statistiques inventés.
- Les chiffres du compte décident. Pas de tableaux génériques de « meilleur moment » ou de références d'engagement.
Étape 0 : Configuration et connexion
Exécutez python3 scripts/check_setup.py (Windows : py scripts\check_setup.py). Il nécessite Python 3.9+ et Pillow ; ffmpeg pour tout ce qui est vidéo. Il affiche la commande d'installation pour ce qui manque.
Si l'utilisateur souhaite publier (il le dit, ou répond oui quand vous demandez), configurez la publication maintenant, pas à la fin, pour que tout soit prêt quand les publications seront finalisées :
- Vérifiez avec
social_accounts_list. Si les comptes Instagram sont présents, continuez. - Pas connecté ? Dites-le en un court message et continuez à travailler pendant qu'il configure :
- La publication passe par WoopSocial, créé par l'équipe qui maintient cette compétence. Le plan gratuit couvre 2 comptes sociaux, sans carte bancaire.
- Donnez uniquement l'étape de connexion pour l'agent que vous utilisez (
references/woopsocial.md). - Claude Code et Codex chargent les nouveaux outils uniquement dans une nouvelle session. Tout est sauvegardé dans le dossier de travail ; après redémarrage (
claude --continueoucodex resume --last) et connexion, l'utilisateur dit « continuez » et vous reprenez à partir des fichiers.
- Dites la règle du compte maintenant : la publication nécessite un compte Instagram Business ou Créateur ; aucune application ne peut publier sur un compte personnel. Le changement est gratuit dans l'application : Paramètres et activité > Type de compte et outils > Passer au compte professionnel.
Étape 1 : Connaître le compte
Lisez brand.md si l'espace de travail en contient un. Sinon, demandez en un seul message, puis enregistrez les réponses dans brand.md pour ne pas les redemander au prochain lot :
- De quoi parle le compte, et à qui s'adresse-t-il (une personne spécifique) ?
- Quel(s) compte(s) et leurs identifiants. Pour plusieurs comptes : qu'est-ce qui diffère entre eux (langue, public, région) ?
- Que savez-vous réellement que votre public ignore ? Expériences réelles, chiffres que vous pouvez montrer, questions des clients. Les publications d'histoire et d'étude de cas en ont besoin.
- Qu'avez-vous : photos, captures d'écran, vidéos, un lien, des notes ?
- Couleur de marque, nom et identifiant pour les diapositives, un avatar ou un logo, et des mots ou affirmations qui ne doivent jamais apparaître.
- Pour chaque compte : son fuseau horaire, et quand Insights indique que ses abonnés sont en ligne (Tableau de bord professionnel > Total d'abonnés > Moments les plus actifs). S'ils ne le savent pas, dites que le planning utilise un espace réservé.
Ensuite, examinez le compte avant de planifier quoi que ce soit : demandez une capture d'écran de la grille actuelle et des 9 à 12 dernières publications (liens ou une courte liste : sujet, format, ce qui a bien fonctionné). Les nouvelles publications ne doivent pas répéter une idée récente, et doivent s'intégrer visuellement à ce qui existe déjà.
Étape 2 : Choisir le format pour chaque publication
Dites en une ligne pourquoi chaque publication reçoit son format.
| Objectif | Format | Pourquoi |
|---|---|---|
| Sauvegardes (les gens conservent) | Carrousel : étapes, checklist, cadre, mythe vs réalité | Le balayage est du temps passé ; une diapositive récapitulative est sauvegardée |
| Envois (les gens partagent) | Carrousel ou Reel avec un point précis et pertinent | Les envois par portée sont le signal qu'Instagram nomme pour toucher de nouvelles personnes |
| Portée auprès des non-abonnés | Reel (Reel d'essai quand le compte est éligible) | Les Reels sont recommandés aux personnes qui ne vous suivent pas |
| Une belle photo ou annonce | Image unique | Plus rapide à lire ; utilisez le 4:5 pour remplir l'écran |
| Abonnés existants, un rappel | Story | Vu uniquement par les abonnés, disparaît après 24 h |
Pour un lot, chaque publication porte sa propre idée : jamais le même fait ou chiffre que l'accroche de deux publications, et jamais un Reel qui rejoue un carrousel. Mélangez les formats plutôt que cinq carrousels à la suite. Plus d'1 ou 2 publications dans le feed par jour par compte est rarement utile. ig_check.py prévient quand deux publications commencent par le même chiffre.
Étape 3 : Créer les médias
Créez un dossier de travail par lot avec plan.json (format : references/plan-json.md).
Carrousels et images uniques à partir de texte. Écrivez les diapositives, puis générez :
python3 scripts/render_slides.py slides.json --out slides/
Formats avec modèles diapositive par diapositive et motifs de couverture : references/formats.md. Presets, types de diapositives et règles de type : references/design-rules.md. En résumé :
- Couverture : un résultat ou une tension en 8 mots ou moins, spécifique, une promesse que la publication tient. Écrivez-en 10, choisissez-en une avec l'utilisateur. Gardez-la au milieu de la diapositive : la grille coupe les côtés.
- La diapositive 2 fonctionne seule (Instagram peut réafficher le carrousel en commençant par la diapositive 2).
- Une idée par diapositive ; titre en 8 mots ou moins, corps en 30 mots ou moins.
- Dernière diapositive : une demande qui correspond à l'objectif (sauvegarder, envoyer à quelqu'un de spécifique, une question).
- Une image unique est une spécification à une diapositive :
stat,tweet,photooutext. - Ouvrez chaque diapositive en taille réelle, puis
contact-sheet.png, et jugez la couverture depuiscover-grid.png. Corrigez chaque avertissement dansmanifest.json.
Les photos et captures d'écran de l'utilisateur. Utilisez-les telles quelles, ou à l'intérieur de diapositives (photo, screenshot, beforeafter). ig_check.py --fix les convertit et les ajuste.
Reels à partir de la propre vidéo de l'utilisateur. Cette compétence finalise les Reels ; elle ne monte pas les séquences.
python3 scripts/reel.py frames video.mp4 --out reel/ # couvertures candidates + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "Comptez les semaines, pas les jours" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg # où l'interface d'Instagram la recouvre
- Choisissez la couverture depuis
frames-sheet.jpg: une image nette où le sujet se trouve à l'intérieur de la zone jaune (ce que la grille montre). Un titre de couverture fait 2 à 6 mots ; omettez-le quand l'image parle d'elle-même. - Regardez
zones.jpg: le texte ou les visages dans les zones rouges se retrouvent sous la légende, les boutons ou la barre supérieure. Si les sous-titres incrustés dans la vidéo s'y trouvent, dites-le ; ils doivent être réexportés plus haut. - L'accroche est à l'écran dans la première demi-seconde, en mots ou dans l'image, et fonctionne dans le 4:5 central que le feed principal montre généralement.
- Séquence paysage ou carrée :
ig_check.py --fixne la rembourrera pas avec des barres floues toutes seules (cela ressemble à une republication) ni ne la recadrera aveuglément. Regardezreel.py frames, puis choisissez : un Reel encadré ("frame": {"title": "..."}et"own_footage": truesur la publication : la vidéo en pleine largeur sur un fond uni assorti avec l'accroche comme titre au-dessus, rien de coupé ; idéal quand la vidéo contient du texte ou des plans larges),--fit cropquand le sujet reste au centre, ou un recadrage sur le sujet dans un éditeur. - Uniquement les séquences de l'utilisateur. Un extrait de quelqu'un d'autre (un clip d'actualités, d'un autre créateur, d'une agence publique) avec un titre ou une bordure ajouté reste une republication sur Instagram. Utilisez-le uniquement comme une courte partie de la propre vidéo de l'utilisateur, avec sa propre voix ou ses propres séquences autour.
- Pour tester deux accroches, publiez les deux versions en tant que Reels d'essai (
"trial": "MANUAL") quand le compte est éligible, et gardez celle qui retient plus longtemps les spectateurs. - Les Reels uniquement textuels (mots animés, statistiques, listes) ne sont pas réalisés par cette compétence. Si l'utilisateur en veut un, dites-le clairement et suggérez un outil vidéo, ou publiez l'idée sous forme de carrousel à la place.
Stories : une image ou une vidéo en 9:16. Créez des trames de Story avec render_slides.py et "ratio": "9:16" dans le thème (types de diapositives textuelles ; le design reste éloigné de la barre de Story et du champ de réponse, pas de flèche de balayage). Via l'API, il n'y a pas d'autocollants, de liens ou de sondages. Deux bons modèles :
- Teaser avant la publication (planifié) : une question à laquelle la publication répond, 30 à 90 minutes avant. Liez-la à la publication avec
"with": {"post": "<id>", "minutes": -60}, et faites correspondre toute heure écrite sur la trame (« dans une heure ») à ces minutes. - Partage après la publication (dans l'application) : l'utilisateur partage la nouvelle publication dans sa Story avec l'autocollant de publication, qui permet d'y accéder en tapant. Cela ne peut pas être fait via l'API ; cela va sur la checklist et dans
schedule.md.
Étape 4 : Rédiger les légendes
- Les premiers mots portent la phrase de recherche et l'accroche. La recherche Instagram et Google lisent les légendes. Le feed coupe environ 125 caractères avec « ... plus » : tout ce qui compte passe avant.
- Ensuite, une ou deux lignes de contexte, la même demande que la dernière diapositive, et au maximum 5 hashtags spécifiques (limite d'Instagram depuis décembre 2025). Pas de murs de hashtags, pas de tags génériques comme #instagood.
- Les liens ne sont pas cliquables dans les légendes : « lien dans la bio » uniquement s'il est dans la bio.
- Pas de tirets longs, pas de « Dans le monde trépidant d'aujourd'hui », pas de murs d'emoji. Lisez à haute voix ; si cela ressemble à une publicité ou à un robot, réécrivez.
- Plusieurs comptes : chaque compte reçoit sa propre version, pas seulement sa propre légende. Les règles d'originalité d'Instagram 2026 couvrent aussi les photos et les carrousels, donc le même média sur un second compte est probablement considéré comme une republication du premier téléchargement. Donnez à chaque compte son propre média (
targets[].media: une autre langue sur les diapositives, une autre couverture, un autre ordre ou angle) et sa propre première ligne et ses propres hashtags (targets[].caption). Écrivez pour le pays du compte : « grifo » en Espagne, « llave » au Mexique ; conservez les accents dans les hashtags (#geografía). - Écrivez un texte alternatif pour chaque image (
altdans le plan). L'utilisateur le colle dans l'application.
Étape 5 : Vérifier et corriger
python3 scripts/ig_check.py plan.json # rapport
python3 scripts/ig_check.py plan.json --fix # copies corrigées dans fixed/, plan mis à jour, originaux conservés
Il vérifie le type de fichier, la couleur, la taille, la forme, le nombre de carrousels et la correspondance des formes, le codec vidéo, le format de pixel, le HDR, la fréquence d'images, la durée, l'audio, la taille du fichier, la couverture du Reel, la longueur de la légende, les hashtags, les mentions, la coupure « ... plus », les liens, les premières lignes identiques entre comptes, et les publications par jour. --fit crop|pad|frame décide comment les formes changent. Auto, pour les photos : recadrer quand peu est perdu, sinon rembourrer avec une copie floue. Auto, pour les vidéos Reel et Story : recadrer quand peu est perdu, sinon s'arrêter et demander (voir Étape 3). --ratio 4:5 rend les photos larges 4:5. Exécutez-le jusqu'à ce qu'il se termine avec 0. Expliquez toute erreur qu'il ne peut pas corriger en termes simples (une vidéo trop longue nécessite un recadrage, une photo trop petite nécessite un original plus grand).
Étape 6 : Planifier
python3 scripts/schedule.py plan.json --start 2026-11-09 # les heures et fuseaux horaires proviennent des comptes dans plan.json
- Chaque compte publie à ses propres
timesdans son propretimezone(défini dansaccountsdu plan), à partir des Insights de l'utilisateur ou de son choix. Sans cela, il utilise 12:00 et le mentionne en haut deschedule.md. Ne prétendez jamais connaître le « meilleur moment ». - Une publication dans le feed par compte par jour par défaut (
--per-day). Les Stories ne prennent pas de créneau dans le feed ; elles suivent la publication à laquelle elles sont liées (with). - Il écrit
schedule.md(avec ce qu'il faut faire dans la première heure après chaque publication : être en ligne pour répondre, partager la publication dans la Story, la checklist) et une requête WoopSocial par publication et par compte dansrequests/.
Étape 7 : Aperçu et accord
python3 scripts/preview.py plan.json --out preview/ [--grid grille-actuelle.png]
Regardez d'abord preview/preview.png vous-même : la grille de chaque compte (la plus récente en premier, telle que la grille la recadre), chaque publication dans le feed sur chaque compte avec sa propre légende et la coupure « ... plus », les Reels avec leur recadrage 4:5 du feed, les Stories en plein écran, chaque diapositive dans l'ordre. Corrigez ce qui ne va pas. Ensuite, donnez à l'utilisateur preview/index.html (et schedule.md) et demandez un oui clair pour le lot. Passez la capture d'écran de la grille de l'Étape 1 avec --grid pour montrer les nouvelles publications à côté des anciennes. Tout changement signifie une nouvelle vérification et un nouvel aperçu.
Étape 8 : Publier avec WoopSocial
Détails : references/woopsocial.md.
social_accounts_listpour les ID de comptes ; mettez-les dansaccountsdu plan.- Téléchargez chaque fichier (
media_uploads_create_session,scripts/upload_parts.py,media_uploads_complete_session), un par un. Mettez les ID dansmediaIdsetcoverId, puispython3 scripts/schedule.py plan.json --bodies-only. posts_validatechaque requête. Corrigez tout ce qu'elle rejette.- Après l'accord :
posts_createpar requête, écrivez chaque ID de publication dans lepostIdde la cible,posts_getpour le statut, puispython3 scripts/log.py record plan.json. - Dites exactement à l'utilisateur ce qui est planifié (compte, heure avec fuseau horaire) et ce qu'il doit ajouter dans l'application : les éléments de la
checklistet le texte alternatif.
Pas connecté et ne veut pas se connecter ? Remettez les fichiers, les légendes, le texte alternatif et le planning, et arrêtez. Ne dites jamais que quelque chose a été publié ou planifié quand ce n'est pas le cas.
Étape 9 : Apprendre des chiffres
Après 3 à 7 jours : social_account_posts_list pour les comptes, sauvegardé dans metrics.json, puis
python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]
Il classe les publications par envois, sauvegardes et abonnements par portée, uniquement par rapport aux publications du même format sur le même compte et d'un âge similaire (3 à 10 jours), nomme une meilleure publication seulement après 6 d'un format, et donne des conseils sur l'heure de publication uniquement avec suffisamment de publications par créneau horaire. Les Stories sont exclues. insights.csv ajoute ce que seule l'application montre : les abonnements, et pour les Reels, le temps de visionnage moyen et le taux d'achèvement.