Communitygithub.com

Compétence Instagram

Compétence Instagram : créez, vérifiez et planifiez des publications Instagram depuis votre agent IA, pour un ou plusieurs comptes. Transforme une idée, un lien, des notes, des photos ou une vidéo en publications finalisées.

Qu'est-ce que Compétence Instagram ?

Cette compétence permet à un agent IA (Claude Code, Codex, Cursor, etc.) de gérer entièrement des publications Instagram, de la création à la planification, directement sur l'ordinateur de l'utilisateur. Elle ne se limite pas à générer du texte ; elle crée les médias (carrousels, images uniques, Reels, Stories), vérifie chaque fichier et légende par rapport aux limites actuelles d'Instagram (formats, codecs, nombre de hashtags), et les corrige automatiquement. L'agent utilise des scripts Python locaux (render_slides.py, reel.py, ig_check.py) pour produire des images JPEG 1080x1350 prêtes à poster, convertir les PNG/HEIC, ajuster les ratios 4:5 et 9:16, et ajouter des couvertures aux Reels. La compétence s'intègre à WoopSocial pour la planification et la publication, et génère des aperçus visuels du feed et de la grille pour validation par l'utilisateur avant tout envoi. Elle garantit que chaque publication respecte les règles d'Instagram, évite les doublons entre comptes, et utilise les données réelles du compte (Insights) pour optimiser les horaires de publication.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/instagram-skill/tree/HEAD/skills/instagram-skill

Demander à votre IA préférée

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

Documentation

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 :

  1. Finalisé, pas ébauché. L'utilisateur reçoit de vrais fichiers qui respectent les limites d'Instagram, pas des conseils.
  2. 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.
  3. Une idée par publication, une demande par publication. Lisible sur un écran de téléphone.
  4. 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.
  5. 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 :

  1. Vérifiez avec social_accounts_list. Si les comptes Instagram sont présents, continuez.
  2. 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 --continue ou codex resume --last) et connexion, l'utilisateur dit « continuez » et vous reprenez à partir des fichiers.
  3. 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 :

  1. De quoi parle le compte, et à qui s'adresse-t-il (une personne spécifique) ?
  2. Quel(s) compte(s) et leurs identifiants. Pour plusieurs comptes : qu'est-ce qui diffère entre eux (langue, public, région) ?
  3. 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.
  4. Qu'avez-vous : photos, captures d'écran, vidéos, un lien, des notes ?
  5. 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.
  6. 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.

ObjectifFormatPourquoi
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 pertinentLes envois par portée sont le signal qu'Instagram nomme pour toucher de nouvelles personnes
Portée auprès des non-abonnésReel (Reel d'essai quand le compte est éligible)Les Reels sont recommandés aux personnes qui ne vous suivent pas
Une belle photo ou annonceImage uniquePlus rapide à lire ; utilisez le 4:5 pour remplir l'écran
Abonnés existants, un rappelStoryVu 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, photo ou text.
  • Ouvrez chaque diapositive en taille réelle, puis contact-sheet.png, et jugez la couverture depuis cover-grid.png. Corrigez chaque avertissement dans manifest.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 --fix ne la rembourrera pas avec des barres floues toutes seules (cela ressemble à une republication) ni ne la recadrera aveuglément. Regardez reel.py frames, puis choisissez : un Reel encadré ("frame": {"title": "..."} et "own_footage": true sur 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 crop quand 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 (alt dans 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 times dans son propre timezone (défini dans accounts du plan), à partir des Insights de l'utilisateur ou de son choix. Sans cela, il utilise 12:00 et le mentionne en haut de schedule.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 dans requests/.

É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.

  1. social_accounts_list pour les ID de comptes ; mettez-les dans accounts du plan.
  2. Téléchargez chaque fichier (media_uploads_create_session, scripts/upload_parts.py, media_uploads_complete_session), un par un. Mettez les ID dans mediaIds et coverId, puis python3 scripts/schedule.py plan.json --bodies-only.
  3. posts_validate chaque requête. Corrigez tout ce qu'elle rejette.
  4. Après l'accord : posts_create par requête, écrivez chaque ID de publication dans le postId de la cible, posts_get pour le statut, puis python3 scripts/log.py record plan.json.
  5. 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 checklist et 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.

Skills associés