Communitygithub.com

Caroselli Canva

Crée un carrousel Instagram pour @aurumiles dans Canva (create-design / copy-design de #8), style affirmé avec Davide les 24-25 sept 2026 : police Anton/Roboto/OpenSauce, or sur noir, une vraie photo de Davide uniquement sur la couverture.

Qu'est-ce que Caroselli Canva ?

Cette compétence est spécialisée dans la création et l'édition de carrousels Instagram dans Canva pour le compte @aurumiles. Elle doit être utilisée uniquement lorsque Davide demande explicitement « in Canva » ou de cloner/adapter un carrousel déjà réalisé dans Canva. Pour les carrousels au style des leçons (rouge sur noir, Oswald, créés ici par Claude), il faut utiliser la compétence `caroselli-claude`. La compétence prend en charge un processus complet en 5 phases : la rédaction d'un brief textuel unique (`create-design`), l'attente de la génération asynchrone (avec interrogation périodique), un contrôle qualité rigoureux (vérification de l'ordre des pages, des textes fantômes, des polices, de la photo de couverture, etc.), la mise en place d'un appel à l'action final standardisé, et la livraison des PNG. Elle inclut également des notes techniques sur des bogues connus (comme `resize_element` sur des icônes à image de remplissage) et des standards de layout fixes (numérotation romaine, police, espacement).

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/aurumiles/Skill/tree/HEAD/caroselli-canva

Demander à votre IA préférée

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

Documentation

Caroselli Canva (ex carosello-aurum)

À partir du 13 oct 2026, Davide préfère le style des diapositives de la Leçon 1 et veut le reproduire pour tous les carrousels : ceux-ci se font avec la compétence caroselli-claude (aucun Canva). Cette compétence reste pour les carrousels dans Canva.

Remplace l'ancienne méthode (modèle Canva copié à la main, police Anton sur photo + bande sombre). Cela reste bon comme style de référence pour les couvertures de reel ([[copertine-reel]]), mais plus pour les carrousels. Remplace également la compétence globale ig-carousel (Higgsfield/Nano Banana) : celle-ci générait des images IA et du texte brûlé dedans, ce n'est plus notre flux.

Avant d'ouvrir cette compétence, le contenu (textes, études, ton) se prépare comme décrit dans [[caroselli]] (mémoire/wiki) : 5-6 questions à Davide, études réelles vérifiées, voix en « tu » avec Davide toujours impersonnel (jamais « je »). Cette compétence part de là et ne s'occupe que de la production graphique.

Pourquoi cette méthode et pas l'ancienne

edit-design (l'outil utilisé pour les couvertures de reel) est chirurgical : il modifie un élément qui existe déjà, il ne peut jamais choisir une police ou une mise en page pour quelque chose de nouveau. create-design est différent : on lui envoie un brief écrit et le moteur IA de Canva lui-même (le même que « Magic Design ») décide police, mise en page, icônes, hiérarchie — pas moi à la main. Le résultat est un design véritable, avec un graphisme différent pour chaque diapositive (réticule, chiffres géants, checklist, cercles numérotés), pas un collage. Le prix : il arrive toujours avec des défauts à vérifier — c'est pourquoi la Phase 4 ci-dessous n'est pas optionnelle.

Phase 1 — Le brief

Un brief textuel unique (pas un plan structuré — celui-ci ne vaut que pour design_type: presentation, que nous n'utilisons pas ici) avec :

  • Format : « Instagram Post » (donne 4:5, 1080x1350 — confirmé dans ce projet).
  • Ton : registre chevaleresque/romain modéré, décidé avec Davide le 25 sept 2026 après une recherche — gladiateur/spartiate est le cliché le plus saturé du secteur fitness/combat (Gladiator Gym Gear, Spartan Race...), le chevalier est moins usé et cohérent avec ce qui est déjà écrit dans [[cammino-guerriero]] (Musashi/Bushido = code individuel, pas une discipline de masse d'une légion). Pas encore fixé à 100 % — Davide a dit qu'il aimait les deux registres et qu'il voulait trouver « le bon mix » avec le temps : demande confirmation si peu de temps s'est écoulé depuis la dernière fois, sinon repropose le même mix (Anton/Roboto/OpenSauce, or sur noir, pas de casque/bouclier/gladius explicite, seulement des détails discrets comme des chiffres romains).
  • Couleurs : fond noir/anthracite, texte blanc, un seul accent or clair (zone #c29342–#d8af54, varie légèrement diapositive par diapositive car généré par l'IA — ce n'est pas un bug, pas besoin d'uniformiser).
  • Photo : SEULEMENT la couverture a une photo (décidé par Davide le 24 sept : les autres diapositives restent graphiques/typographiques, pas de photo — ainsi pas besoin de gérer de nombreuses images différentes). Dans le brief, écris « SEULEMENT la couverture a une photo... les 7 autres pages sont graphiques/typographiques, sans photo ».
  • Structure : énumère chaque diapositive comme PAGE N : ... avec étiquette, titre, corps, et notes en italique là où une étude est citée. La dernière page est la clôture avec le CTA « sauvegarde » (icône + deux lignes, voir Phase 4).
  • Indicateur de défilement : demande un indicateur de page « 1/8 »…« 8/8 » + flèche sur toutes les pages sauf la dernière (il le donne déjà ainsi, puis en Phase 4 on le convertit en chiffres romains).
  • Logo/handle : « AURUM MILES » petit, discret, sur chaque page.

Appelle create-design avec ce brief, user_intent court, aucun outline (nous sommes sur Instagram Post, pas Presentation).

Phase 2 — Attendre la génération

create-design est asynchrone : renvoie un job_id + continuation_token et un status: pending.

  1. Attends polling_policy.wait_seconds (généralement 10-15s) avant la première interrogation.
  2. Appelle get-create-design-async-job avec job_id + le dernier continuation_token.
  3. Répète jusqu'à ce que status: completed — généralement 4-6 tours, ne raccourcis pas l'attente (la même réponse revient identique, cela n'accélère rien). Utilise Bash avec sleep pour attendre, pas d'appels rapprochés.
  4. Le résultat donne design.id et design.url — c'est le carrousel à vérifier et corriger.

Phase 3 — Contrôle qualité (toujours, sans exceptions)

Avant de montrer quoi que ce soit à Davide, lis toutes les pages (read-design, design_content sans page_indices pour voir tout le texte d'un coup) et vérifie :

a) L'ordre physique des pages

Le générateur crée parfois les pages dans un ordre différent de celui écrit au-dessus de chaque diapositive (« N/8 »). Compare le texte de chaque page avec l'étiquette qu'elle porte ; si une diapositive est déplacée, réordonne avec :

merge-designs, type: modify_existing_design, operations: [{type: move_pages, from_page_numbers: [N], to_after_page_number: M}]

Une opération par appel — l'outil rejette les lots multiples.

b) Diapositives manquantes

Le générateur saute parfois une page du brief (c'est déjà arrivé : 7 pages au lieu de 8, la clôture manquait). S'il manque :

  1. copy-design de la page la plus similaire par sa structure (ex. la dernière « correction » pour une clôture, pas une page avec un numéro-fantôme comme « 01 » spécifique au thème).
  2. Réécris les textes avec replace_text sur les localisateurs existants (jamais add_text pour les titres — perd la police choisie par le générateur, voir note technique ci-dessous).
  3. Supprime les éléments décoratifs qui ne sont plus nécessaires (ex. la rangée d'icônes de checklist si cela devient un CTA) avec delete_element.
  4. Insère le CTA final (icône + deux lignes, voir ci-dessous).
  5. Réinsère la page au bon endroit avec merge-designs → insert_pages.

c) Texte « fantôme » dans le fond

Bug récurrent de ce générateur : le texte original (avant tout replace_text) reste parfois « cuit » dans l'image de fond de la page, pas seulement dans l'élément de texte modifiable — remplacer le texte ne le fait pas disparaître du rendu. Il apparaît comme un texte délavé derrière le titre ou le corps. Fix : insert_shape avec un rectangle plein (chemin M0,0 H<w> V<h> H0 Z), couleur proche du noir de la page (#0e0e0e ou #131110 conviennent), positionné au-dessus de toute la zone sale — puis toujours layer_element avec position: « back » sur le même localisateur, ainsi la pièce se trouve au-dessus du fond raster mais sous le titre/corps/badge (qui restent des éléments séparés, visibles). Si le fantôme continue d'être visible plus bas (ex. près d'une liste), élargis la pièce avec resize_element jusqu'à ce qu'il n'y ait plus de trace — vérifie toujours avec le rendu avant de considérer la chose résolue.

d) Ordre de superposition (z-order) en général

Chaque nouvel élément (insert_shape, add_text) s'insère toujours en haut (devant tout). Si tu ajoutes quelque chose qui doit être derrière le texte existant (comme les pièces ci-dessus), tu as toujours besoin de layer_element: back après. Si en revanche un élément existant (logo, titre, numéro de page) se retrouve derrière quelque chose que tu as ajouté, utilise layer_element: front sur lui.

e) Numéros de page en romain

Le générateur fait « 1/8 », « 2/8 »… Remplace par « I / VIII », « II / VIII »… jusqu'à « VIII / VIII » sur la dernière. Le texte romain est plus long : il faut presque toujours élargir la boîte (resize_element, +100/150px de largeur) et repositionner à gauche (position_element) pour qu'il n'empiète pas sur la petite flèche à côté — vérifie toujours le left de l'icône-flèche sur la même page et laisse la boîte du numéro juste devant elle. La dernière diapositive n'a pas de flèche (il n'y a plus rien à faire défiler) : laisse seulement « VIII / VIII » sans toucher au reste.

f) Police cohérente

Le générateur attribue des polices différentes à des éléments différents. Je ne peux pas choisir une police pour un élément nouveau ou déjà existant — aucune opération ne le permet (format_text change seulement la taille/le poids/la couleur/l'italique, jamais la famille). La seule façon : Davide sélectionne le texte dans Canva (lien de l'edit_url) et choisit la police à la main, une fois par élément ; à partir de là, je le recycle sur d'autres éléments avec replace_text, qui préserve toujours la police de l'élément de destination. Si un nouveau carrousel sort avec des polices incohérentes entre les diapositives, c'est normal — demande à Davide de faire le même tour rapide qu'il a déjà fait (titres dans une police, corps dans une autre, petites étiquettes dans une troisième), puis corrige toi-même les dimensions/l'espacement.

g) Photo de couverture

Si Davide envoie une photo à lui : create-upload-url (pas upload-asset-from-url, celui-ci veut une URL publique) → une POST directe du fichier vers l'URL à usage unique reçue → mediaId → update_fill sur le rectangle-photo de la couverture. Le recadrage automatique de Canva est généralement déjà bon sur des photos verticales ou carrées ; vérifie-le avec le rendu avant de l'ajuster à la main avec crop_media. Les autres diapositives restent sans photo (voir Phase 1).

Phase 4 — Le CTA final (diapositive de clôture)

Standard fixé avec Davide (22-25 sept 2026), à reproduire à l'identique à chaque fois :

  • Icône signet (insert_shape, chemin M0,0 H34 V44 L17,30 L0,44 Z, couleur or) sur la même ligne que la première ligne de CTA, pas au-dessus.
  • Ligne 1 (l'action, ex. « SALVALO PRIMA DEL PROSSIMO SPARRING. ») : majuscules, gras, PAS en italique, couleur or.
  • Ligne 2 (le plus, ex. « Mandalo a chi deve salire la prossima volta. ») : minuscules sauf la première lettre, italique, même or — un cran plus léger. Attention au texte : ne restreins pas trop la cible (ex. pas « chi sale per la prima volta » si le message doit valoir pour quiconque revient sur le ring, pas seulement les débutants — cela dépend du contenu spécifique, demande à Davide si la première ébauche semble trop étroite).
  • Bloc détaché avec un véritable espace vertical du paragraphe au-dessus (~150px), pas à proximité — sinon on dirait la continuation de la même phrase.
  • Deux lignes = deux éléments de texte distincts (pas un \n dans un seul), car chacun porte un formatage différent.

Phase 5 — Livraison

  1. export-design, format png, width: 1080, height: 1350, sans pages (toutes ensemble) une fois la Phase 3 terminée.
  2. Télécharge chaque PNG et sauvegarde-les dans Caroselli elaborati/AAMMGG_Titolo/1.png … 8.png (même dossier que le texte, slide_, caption_, note_ — voir [[caroselli]] et [[produzione-contenuti]]).
  3. Envoie une planche-contact ou les 8 images à Davide avant de considérer la chose définitive — c'est toujours un tour de corrections, ne donne pas pour approuvé au premier export.
  4. Contrôle pré-publication : compte les PNG exportés (N) et dans le message de livraison, rappelle explicitement à Davide de vérifier que toutes les N diapositives sont dans la file d'attente sur Instagram avant d'appuyer sur publier (ex. « Il y a N diapositives, 1.png...N.png — vérifie qu'elles sont toutes là avant de publier »). C'est déjà arrivé (carrousel #8) qu'une diapositive reste dehors par oubli lors du chargement, sans que personne ne s'en aperçoive avant la publication — cela n'a pas eu d'incidence cette fois, mais c'est un contrôle à coût zéro.
  5. Seulement après son accord : log dans memoria/wiki/log.md, mets à jour l'état dans [[caroselli]].

Standards de mise en page — fixés par Davide le 2 oct 2026 sur #12 (valables pour chaque carrousel à partir de maintenant)

Après le clone-de-#8 (voir ci-dessous), Davide a corrigé à la main dans Canva une série de détails qui reviennent à l'identique sur chaque diapositive « à en-tête » (étiquette + numérotation romaine + flèche en haut, type « Tecnica N »). Voici les mesures/critères fixes à appliquer dès maintenant, pas à redécouvrir diapositive par diapositive :

  • Numérotation romaine alignée à l'étiquette : le top du numéro romain doit coïncider (ou presque) avec le top de l'étiquette à côté (« Tecnica 2 », « Perché », etc.), pas être plus haut ou plus bas tout seul. Même ligne, même hauteur visuelle.
  • Flèche : police/taille ~32-36px, couleur toujours #c29342 (or standard, voir ci-dessous). La flèche se trouve juste après le numéro romain avec un petit espace propre (~15-20px), jamais à proximité.
  • Séparateur horizontal sous l'en-tête : quand il y en a un (diapositive avec une ligne sous l'étiquette), le faire presque à toute largeur (ordre de 560-930px), pas un trait court — coupe proprement sous tout le bloc étiquette+numérotation, pas seulement sous l'étiquette.
  • Corps de texte en gras : le corps de texte (pas le titre, pas les citations) va en font_weight: bold, pas normal/medium — rendu plus plein et plus lisible sur fond noir. Les paragraphes courts et consécutifs (ex. « phrase 1: » + « phrase 2. ») peuvent être regroupés en un seul élément de texte au lieu de les garder séparés, s'ils sont logiquement une seule phrase coupée en deux lignes.
  • Blanc jamais pur : #ffffff doit être remplacé par #f1f1f1 sur le texte blanc et le logo « Aurum Miles » — légèrement moins dur contre le noir.
  • CTA final (icône+2 lignes) : l'icône de sauvegarde et la première ligne de texte (« SALVALO... ») partagent le même top (même ligne, pas icône-plus-haut-texte-plus-bas), avec ~25-30px de distance horizontale entre le bord droit de l'icône et le début du texte.

Bug confirmé : resize_element sur des icônes à image de remplissage

Non résoluble de notre côté : redimensionner via l'API une icône avec un remplissage image (flèches, badges) la recadre au lieu de la redimensionner (voir note dans [[caroselli]]). Quand une flèche/icône plus petite est nécessaire, n'utilise pas resize_element : soit on la laisse à sa taille native et on travaille sur la position, soit — si Davide la corrige à la main dans Canva — on note que là, le redimensionnement fonctionne bien (l'éditeur réel redimensionne correctement le contenu, c'est seulement l'opération API qui a le bug). Signe concret que quelque chose s'est cassé ainsi : un élément proche d'un texte avec textAlign: end qui semble « inversé » — probable fragment d'icône cassée superposé, pas un bug dans le texte.

Notes techniques éparses (à ne pas redécouvrir à chaque fois)

  • merge-designs : une opération par appel, toujours.
  • resize-design (celui de l'ancienne méthode avec le modèle Canva) est à usage limité/essai — plus nécessaire avec ce flux, create-design génère déjà au bon format.
  • Si tu dois conserver une version p…

Skills associés