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.
- Attends
polling_policy.wait_seconds(généralement 10-15s) avant la première interrogation. - Appelle
get-create-design-async-jobavecjob_id+ le derniercontinuation_token. - 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). UtiliseBashavecsleeppour attendre, pas d'appels rapprochés. - Le résultat donne
design.idetdesign.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 :
copy-designde 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).- Réécris les textes avec
replace_textsur les localisateurs existants (jamaisadd_textpour les titres — perd la police choisie par le générateur, voir note technique ci-dessous). - 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. - Insère le CTA final (icône + deux lignes, voir ci-dessous).
- 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, cheminM0,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
\ndans un seul), car chacun porte un formatage différent.
Phase 5 — Livraison
export-design, formatpng,width: 1080, height: 1350, sanspages(toutes ensemble) une fois la Phase 3 terminée.- 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]]). - 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.
- 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.
- 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
topdu numéro romain doit coïncider (ou presque) avec letopde 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, pasnormal/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 :
#ffffffdoit être remplacé par#f1f1f1sur 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-designgénère déjà au bon format.- Si tu dois conserver une version p…