gpt-image2-ppt — Générer des présentations PPT avec gpt-image-2
Prenez un plan Markdown (ou un slides_plan.json) + un style visuel, envoyez-le directement à l'API officielle OpenAI Images (gpt-image-2), générez chaque diapositive sous forme d'image, puis empaquetez le tout en un fichier .pptx 16:9.
Styles disponibles
| Identifiant du style | Description en une phrase | Cas d'usage typique |
|---|---|---|
gradient-glass | Apple Vision OS / Spatial Glass | Lancement de produit IA, partage technique, proposition créative |
clean-tech-blue | Bleu et blanc de type Stripe / Linear | Levée de fonds, business plan, stratégie d'entreprise |
vector-illustration | Illustration vectorielle vintage + contours noirs | Formation, storytelling de marque, partage communautaire |
editorial-mono | Design éditorial style Kinfolk / Monocle | Lancement de marque, interview culturelle, partage de lecture |
dark-aurora | Néons sombres style Linear / Vercel | Produit IA, outils développeur, partage technique |
risograph | Impression bichrome Risograph + trame de points | Studio créatif, marque culturelle, fanzine indépendant |
japanese-wabi | Wabi-sabi style Muji / Kenya Hara | Cérémonie du thé, style de vie, luxe, conférence culturelle |
swiss-grid | Grille Bauhaus / Vignelli | Rapport académique, exposition muséale, présentation sérieuse |
hand-sketch | Sketchnote / tableau blanc dessiné à la main | Atelier, brainstorming produit, formation |
y2k-chrome | Métal liquide Y2K + autocollants papillons | Marque streetwear, divertissement, co-branding, marketing génération Z |
abstract-art-showcase | Minimalisme noir et blanc, ambiance galerie d'art, grands caractères et images abstraites | Commissariat d'exposition, portfolio, identité de marque |
coal-industry-business-company-profile | Marron industriel, titres en gras, lignes structurelles et icônes robustes | Énergie, industrie lourde, présentation d'entreprise |
college-candy-aesthetics-infographics | Couleurs candy, ambiance campus, infographies arrondies et décorations légères | Éducation, événement scolaire, vulgarisation de données légères |
creative-agency | Ambiance agence créative, collage visuel fort, rythme typographique marqué | Proposition d'agence, projet de marque, rapport créatif |
culinary-innovation | Innovation culinaire, photographie d'ingrédients, blocs de couleurs chaudes et mise en page magazine | Marque culinaire, innovation alimentaire, lancement de menu/nouveauté |
data-science-consulting | Gris-bleu conseil en données, mise en page modulaire, graphiques et hiérarchie technique | Analyse de données, conseil IA, transformation numérique |
mindfulness-in-the-classroom-breathing-techniques | Palette de couleurs douces pour la santé mentale, espaces vides, blocs arrondis et illustrations calmes | Santé mentale, activité en classe, exercice de respiration |
mind-maps-workshop-professional | Style atelier professionnel, nœuds de mind map, structure de processus claire | Atelier de formation, méthodologie, co-création d'équipe |
meeting-agenda | Ordre du jour de réunion, grille propre, regroupement d'informations fort et titres professionnels | Réunion, synchronisation de projet, rapport à la direction |
investment-company-business-plan | Texture société d'investissement, contraste foncé/clair, mise en page professionnelle stable | Plan d'investissement, présentation de fonds, business plan |
indigenous-cultures | Motifs culturels, couleurs naturelles, texture artisanale et composition narrative | Cours de culture, sujet historique, éducation solidaire |
health-disparities-and-social-determinants-of-health-doctor-of-philosophy-phd-in-health-behavior-and-health-education | Style académique santé publique, grille rationnelle, couleurs médicales douces et hiérarchie de thèse | Soutenance de thèse médicale, rapport de santé publique, recherche éducative |
geometric-duotone-thesis | Géométrie bichrome, ambiance soutenance de thèse, formes en diagonale et titres forts | Soutenance académique, rapport de recherche, contenu par chapitre |
geometric-clinical-case | Style géométrique médical, palette de couleurs calmes, fiches de cas cliniques et colonnes claires | Cas clinique, formation médicale, rapport de diagnostic |
geometric-business | Blocs géométriques professionnels, tons bleus/verts stables, langage graphique simple | Business plan, rapport d'équipe, stratégie produit |
formal-lavender-portfolio | Lavande formel, espacement de portfolio, lignes fines élégantes et mise en page douce | Portfolio personnel, CV de designer, présentation professionnelle |
flowery | Décorations florales, blocs de couleurs douces, mise en page romantique mais ordonnée | Style de vie, marque féminine, présentation d'événement |
first-impressions | Thème première impression, visuel de couverture fort, relation dramatique personnage/titre | Formation à l'entretien, marque personnelle, cours de communication |
final-year-project-thesis-defense | Soutenance de projet de fin d'études, grille académique, chapitres clairs et pages de données | Soutenance de diplôme, conclusion de projet, présentation de recherche |
fashion-business-consulting-toolkit-aesthetic | Ambiance conseil en mode, collage haut de gamme, mise en page magazine et couleurs neutres | Mode business, conseil en marque, rapport de tendance |
economic-impact-of-coronavirus | Style rapport d'impact économique, infographie sérieuse, couleurs calmes et narration de données | Macroéconomie, analyse politique, rapport de risque |
eco-green-business-plan | Vert sauge, photographie de matériaux naturels, éco-business et écran partagé minimaliste | Commerce durable, marque éco-responsable, style de vie sain |
Tous les styles disponibles sont regroupés dans styles/ et organisés par collection : initial/ pour les 10 premiers styles, featured/ pour 22 styles sélectionnés, et xiamulingzi/ pour 233 styles fournis par la designer @夏目玲子. L'index des collections est dans styles/README.md ; les couvertures des styles sélectionnés sont dans docs/distilled-styles.md.
Principe de choix du style : Sélectionnez d'abord le style le plus adapté dans
styles/en fonction du contenu. Pour les présentations techniques, privilégiezdark-aurora/gradient-glass/data-science-consulting. Pour les présentations business, regardezclean-tech-blue/editorial-mono/eco-green-business-plan/investment-company-business-plan. Pour les thèmes culturels et lifestyle, utilisezjapanese-wabi/vector-illustration/culinary-innovation/flowery. Pour les présentations académiques, choisissezswiss-grid/geometric-duotone-thesis/final-year-project-thesis-defense. Pour les ateliers et formations, préférezhand-sketch/mind-maps-workshop-professional/mindfulness-in-the-classroom-breathing-techniques.
Recettes par scénario (modèles de démarrage optionnels)
examples/ n'est pas une nouvelle compétence, ni une entrée obligatoire lors de l'exécution. C'est une bibliothèque de modèles de démarrage par scénario, qui aide l'agent à rédiger plus rapidement une première version de slides_plan.md lorsque l'utilisateur ne fournit qu'un besoin vague.
Règles de déclenchement :
- Si l'utilisateur a déjà fourni un plan complet / un
slides_plan.mdcomplet / unslides_plan.jsoncomplet, n'utilisez pas de recette, suivez directement le processus de génération avec le contenu de l'utilisateur. - Si l'utilisateur dit simplement "Fais un PPT de lancement produit / Levée de fonds / Rapport hebdomadaire / Cours / Soutenance de thèse / Partage de lecture" ou d'autres scénarios courants, sans donner de structure de page claire, commencez par vérifier si
examples/contient une recette correspondante. - La recette ne sert que de référence de structure : lisez
examples/<id>/recipe.mdpour comprendre le scénario, le style recommandé et les points d'attention, puis référez-vous à la structure de page deexamples/<id>/slides_plan.mdpour l'adapter au thème et au contenu de l'utilisateur. - Ne prenez pas les produits, entreprises, projets ou données fictifs des exemples comme le produit final de l'utilisateur ; remplacez-les impérativement par les informations fournies par l'utilisateur, ou indiquez-les explicitement comme des espaces réservés et attendez la confirmation de l'utilisateur.
- Si l'utilisateur fournit des images réelles, des logos, des captures d'écran, des graphiques de recherche ou des UI de produit, traitez-les selon la règle "image réelle externe à inclure" ; la recette ne gère que la structure du contenu, elle ne remplace pas le processus de fidélité des éléments.
Recettes intégrées actuelles :
| Scénario utilisateur | Dossier de recette | Style recommandé |
|---|---|---|
| Lancement produit, nouvelle fonctionnalité, présentation d'un produit IA | examples/product-launch/ | gradient-glass |
| Levée de fonds, business plan, présentation aux investisseurs | examples/investor-pitch/ | clean-tech-blue |
| Rapport hebdomadaire, mensuel, synchronisation de réunion | examples/weekly-report/ | meeting-agenda |
| Cours, formation, vulgarisation scientifique | examples/courseware/ | vector-illustration |
| Soutenance de thèse, soutenance de projet de fin d'études, présentation de conclusion | examples/thesis-defense/ | final-year-project-thesis-defense |
| Partage de lecture, interview culturelle, partage d'opinion | examples/book-sharing/ | editorial-mono |
Utilisation :
- Déterminez si la demande de l'utilisateur correspond à une recette.
- Lisez le
recipe.mdet leslides_plan.mdcorrespondants. - Rédigez un nouveau fichier
slides_plan.mdbasé sur le thème de l'utilisateur, sans modifier directement le fichier source de la recette. - Confirmez avec l'utilisateur le nombre de pages, le titre et le contenu clé de chaque page.
- Une fois l'utilisateur d'accord, exécutez
md_to_plan.pypour convertir en JSON, puis poursuivez le processus de clonage du style ou du modèle spécifié ci-dessous.
Fichier sidecar de banque de dispositions pour les styles intégrés (format d'exécution unique)
Les styles intégrés utilisent une structure à deux fichiers : "MD pour les humains, JSON pour les machines" :
styles/<collection>/<style-id>.md # Description du style, design tokens, prompt de base
styles/<collection>/<style-id>.layouts.json # Obligatoire ; banque de dispositions par page pour l'attribution automatique des mises en page
generate_ppt.py utilise le .layouts.json homonyme comme RuntimeProfile sans image de référence : via assign_layouts(), il attribue différentes dispositions, intègre visual_signature / content_capacity / best_for / avoid_for / variation_tags dans le prompt, et écrit les informations réduites de la disposition choisie dans metadata.json.
Actuellement, tous les fichiers styles/**/*.md doivent être accompagnés d'un fichier .layouts.json du même nom dans le même répertoire. Les anciens styles qui n'ont que le Markdown et pas de sidecar généreront une erreur avant la génération d'image, sans utiliser silencieusement l'ancien prompt. Pour les nouveaux styles distillés ou ajoutés ultérieurement, vous devez produire simultanément le sidecar JSON ; ne compressez pas une description textuelle de "système de mise en page" multi-page dans un seul MD.
Noyau d'exécution RuntimeProfile unifié
Le clonage strict de modèles et le sidecar de style structuré sont d'abord compilés dans le même RuntimeProfile, puis passent par assign_layouts(), l'attachement du profil de page, la compilation du prompt et l'enregistrement dans metadata. Les adaptateurs d'entrée ne conservent que les différences nécessaires :
template-clone: provient de--template-profileou de l'analyse visuelle du modèle ; la disposition peut contenirreference_image; seul--template-stricttransmet effectivement l'image de référence pour la génération.distilled-style: provient de<style>.md+<style>.layouts.json; utilise le routage de contenu et les dispositions multiples, ne dépend pas de l'image du modèle original.
Le RuntimeProfile enregistre de manière unifiée source_kind, prompt_strategy=layout-fields (fixe), layouts et capabilities (routing / evidence / reference / portability). La priorité est fixe : profil de modèle valide > RuntimeProfile de style ; si l'analyse du modèle n'a pas de dispositions, il faut vraiment revenir au style structuré, pas seulement afficher un message. L'exécution ne contient plus de branche legacy-freeform ou de disposition synthétique.
Mode de clonage de modèle
Donnez directement un modèle .pptx à la compétence, et toutes les pages suivantes imiteront ce modèle.
# Une ligne : rendu automatique + analyse du modèle + génération d'images. Nécessite un backend de rendu PPTX disponible localement.
python3 scripts/generate_ppt.py \
--plan slides_plan.json \
--template-pptx ./company-template.pptx \
--template-strict
--template-strict signifie que chaque page envoie la page correspondante du modèle comme image de référence à gpt-image-2, pour la meilleure fidélité.
Rendu du modèle : pas besoin d'utiliser PowerPoint sur la machine locale
La compétence contient render_template.py, qui convertit automatiquement le .pptx en PNG par page, et les enregistre dans <cwd>/template_renders/<stem>/page-NN.png.
Vérification préalable par l'agent (obligatoire pour le clonage de modèle)
Avant d'exécuter toute commande --template-pptx, vous devez d'abord vérifier si un backend de rendu PPTX est disponible localement.
Méthode de vérification :
- Recommandé : Exécutez
python3 scripts/render_template.py --checkdans le répertoire de la compétence. Il vérifie si le backend est réellement exécutable, et pas seulement si le chemin existe. - macOS : Vérifiez d'abord la présence de
/Applications/Keynote.appet si AppleScript est exécutable ; sinon, vérifiezlibreoffice --version || soffice --version. - Windows : Vérifiez d'abord si le composant COM PowerPoint est disponible ; sinon, vérifiez
libreoffice --version/soffice --version. - Linux / environnements de compatibilité : Vérifiez
libreoffice --version || soffice --version; n'utilisez pas seulementwhich.
Remarque : Les environnements HarmonyOS / Termux / conteneurs / architectures spéciales peuvent ressembler à Linux, mais on ne peut pas supposer que le binaire LibreOffice pour Linux aarch64 fonctionne ; basez-vous toujours sur le résultat réel de l'exécution de render_template.py --check ou soffice --version. Ne considérez pas aspose-slides comme solution de repli par défaut ; il n'a pas de wheel installable dans de nombreux environnements Python mobiles/spéciaux.
Si aucun backend n'est disponible, informez d'abord l'utilisateur que le rendu du modèle nécessite l'installation de LibreOffice exécutable, ou demandez-lui d'exporter manuellement chaque page du modèle au format page-01.png, page-02.png sur son ordinateur de bureau, puis de les transmettre via --template-images. Commandes d'installation optionnelles :
| Plateforme | Commande d'installation |
|---|---|
| Windows | winget install LibreOffice.LibreOffice |
| macOS | brew install --cask libreoffice |
| Linux (Debian/Ubuntu) | sudo apt-get install -y libreoffice |
| Linux (Fedora/RHEL) | sudo dnf install -y libreoffice |
| Linux (Arch) | sudo pacman -S --noconfirm libreoffice-fresh |
Après l'installation, vérifiez à nouveau qu'un backend de rendu est disponible avant de poursuivre.
Remarque : Sur Windows,
wingetest intégré à Win10/11 et affichera une boîte de confirmation UAC (l'utilisateur doit cliquer sur "Oui"). Sur macOS,brewnécessite d'avoir Homebrew installé au préalable.
Le backend de rendu de render_template.py est choisi automatiquement par ordre de priorité :
- Windows : PowerPoint COM (prioritaire si Office est installé localement, sortie directe en PNG, contourne l'étape PDF) > LibreOffice
- macOS : Keynote AppleScript (prioritaire si Keynote est installé, sortie directe en PNG) > LibreOffice
- Linux / environnements de compatibilité : Commande LibreOffice / soffice détectée comme exécutable via
--version - PDF -> PNG via
pymupdf(déjà dans requirements) ; si absent, utilisepdf2image+ poppler
Si vous omettez --template-images lors de l'exécution de generate_ppt.py --template-pptx ..., le rendu sera appelé automatiquement. Vous pouvez aussi l'exécuter manuellement d'abord :
python3 scripts/render_template.py company-template.pptx
# -> <cwd>/template_renders/company_template/page-01.png ... page-NN.png
Double cache pour l'imitation de modèle
| Élément | Chemin | Usage |
|---|---|---|
| PNG de chaque page du modèle | <cwd>/template_renders/<stem>/page-NN.png | Rendu unique par le backend local, réutilisable |
| Analyse du style du modèle | <cwd>/template_cache/<sha256>.json ou template_profile.json écrit manuellement | Généré par l'agent multimodal lui-même ; les agents texte pur ont besoin d'une vision externe |
| Résultat de la génération | <cwd>/outputs/<timestamp>/ | Nouveau répertoire à chaque exécution |
Les trois se trouvent dans le répertoire de travail de l'appelant, évoluant naturellement avec le projet. Il est recommandé d'ajouter template_renders/, template_cache/, outputs/ au fichier .gitignore du projet.
Analyse visuelle du modèle (l'agent décide lui-même s'il a besoin de configurer VISION_*) :
- Si l'agent de code actuel est un modèle multimodal (par ex. Claude multimodal de Claude Code, GPT multimodal de Codex) : aucune configuration supplémentaire de
VISION_*n'est nécessaire. L'agent lit directementtemplate_renders/<stem>/page-*.png, génèretemplate_profile.jsonselon la structureTemplateProfiledetemplate_analyzer.py, puis le transmet àgenerate_ppt.pyavec--template-profile template_profile.json. Si vous utilisez aussi--template-strict, chaque disposition doit contenirreference_image(chemin absolu ou accessible du PNG du modèle). - Si l'agent de code actuel est un modèle texte pur (par ex. connecté uniquement au modèle texte DeepSeek) : il ne peut pas voir les captures d'écran du modèle ; vous devez configurer
VISION_BASE_URL/VISION_API_KEY/VISION_MODEL_NAMEpour quetemplate_analyzer.pyappelle un point d'accès multimodal compatible OpenAI indépendant pour l'analyse du modèle.
L'analyse visuelle et la génération d'images par gpt-image-2 sont toujours découplées : changer de fournisseur de vision n'affecte pas le pipeline de génération d'images.
Installation
git clone [email protected]:JuneYaooo/gpt-image2-ppt-skills.git
cd gpt-image2-ppt-skills
bash install_as_skill.sh --target claude # Claude Code
# ou
bash install_as_skill.sh --target codex # Codex
# Les clés nécessaires pour la connexion directe à l'API sont injectées de préférence via la configuration de l'agent / les variables d'environnement système
Injection de variables d'environnement (connexion directe à l'API)
N'écrivez pas les clés de cette compétence dans le fichier .env à la racine du projet métier de l'appelant, et ne lisez pas le fichier .env général du projet utilisateur pour générer des images. Les variables d'environnement doivent être injectées selon les méthodes standard du framework de l'agent :
- Général / CI / Serveur : utilisez les variables d'environnement système,
environment/env_filede Docker Compose, Kubernetes Secret, CI Secret, etc. - Claude Code : utilisez le fichier utilisateur
~/.claude/settings.jsonou le fichier projet.claude/settings.local.jsonpour injecter les variables d'environnement ; les variables d'environnement de la ligne de commande ont la priorité la plus élevée. - OpenClaw / Agent personnalisé : utilisez
apiKey/ env reference dans la configuration du framework pour référencer les variables d'environnement système, en évitant d'écrire la clé en clair dans la configuration du projet. - Fallback local standalone CLI : vous pouvez définir
GPT_IMAGE2_PPT_ENV=/path/to/private.env, ou utiliser le fichier.envdans le répertoire d'installation de la compétence ; ce n'est qu'une solution de repli, pas le fichier.envdu projet métier.
La connexion directe à l'API nécessite ces variables :
OPENAI_BASE_URL=https://api.openai.com # ou tout relais compatible OpenAI
OPENAI_API_KEY=sk-...
GPT_IMAGE_MODEL_NAME=gpt-image-2
GPT_IMAGE_QUALITY=high # low / medium / high / auto
# Optionnel : backend d'analyse visuelle pour le mode de clonage de modèle.
# Les agents multimodaux / Codex natif peuvent lire les images eux-mêmes pour générer --template-profile, ils n'ont pas besoin des variables ci-dessous.
# Seuls les agents texte pur (comme le modèle texte DeepSeek) ont besoin de ces variables supplémentaires.
# Ne fournissez pas de point d'accès par défaut intégré, remplissez un service de confiance, ou ne remplissez rien.
# VISION_BASE_URL=https://your-openai-compatible-relay.example.com/v1
# VISION_API_KEY=sk-...
# VISION_MODEL_NAME=gemini-3.1-pro-preview # ou gpt-4o / claude-3.5-sonnet, etc., tout SKU multimodal
La priorité de configuration est fixe : variables d'environnement du processus courant > variables gpt-image2-ppt_* injectées par la plateforme > GPT_IMAGE2_PPT_ENV / fichier .env dans le répertoire de la compétence ; les variables JULING_GPT_IMAGE2_* ne servent que de fallback de compatibilité lorsqu'il n'y a pas de variable OPENAI_* correspondante, elles ne remplacent jamais une configuration explicite.
Avertissement de sécurité : Le script lit uniquement les variables d'environnement du processus courant, les variables
gpt-image2-ppt_*injectées par la plateforme, le fichierGPT_IMAGE2_PPT_ENVexplicite, et le fichier.envdu répertoire d'installation de la compétence en fallback. Le script ne remonte pas pour lire les fichiers.envdans les répertoires projet de l'appelant, afin d'éviter de capturer accidentellement les clés du projet métier.python3 scripts/render_template.py --checkexécute une conversion minimale réelle pour valider le backend de rendu.
Si vous êtes l'agent Codex (génération d'image native via image_generation — recommandé)
Si vous êtes vous-même Codex (l'agent qui exécute cette compétence est Codex CLI / Codex TUI) et que l'environnement courant fournit l'outil image_generation ainsi qu'une session authentifiée ChatGPT, alors n'utilisez pas generate_ppt.py ou --backend codex pour la génération d'images. Utilisez directement l'outil natif pour générer les images, et ne réutilisez que la logique de conversion MD / d'empaquetage PPTX de ce dépôt.
Limite clé : Les scripts Python s'exécutent dans un processus enfant et n'ont pas accès à l'outil natif image_generation de la session agent courante. Ce que generate_ppt.py --backend codex peut faire, c'est uniquement lancer un sous-processus codex exec, pour qu'un autre Codex génère les images ; ce n'est pas "réutiliser l'outil image_generation du Codex actuel". Par conséquent, lorsque l'agent actuel peut déjà générer des images nativement, l'action de génération doit être effectuée par l'agent lui-même, pas par generate_ppt.py.
Comment déterminer
Vous avez accès à l'outil image_generation et vous pouvez générer des images sans configurer manuellement OPENAI_API_KEY. Si ces deux conditions sont remplies, suivez le chemin natif. Si la session Codex actuelle n'a pas cet outil, traitez-la comme un agent normal : utilisez la connexion directe à l'API, le backend de repli --backend codex, ou demandez à l'utilisateur de compléter l'environnement.
Processus de génération d'images (chemin natif Codex)
1. Préparez les données des diapositives
Si vous n'avez pas encore de slides_plan.json, suivez d'abord les étapes 2-3 de la section "Processus de génération" ci-dessous : rédigez slides_plan.md → python3 scripts/md_to_plan.py ... pour convertir en JSON.
2. Préparez le prompt avec le runtime unifié
Ne reproduisez pas manuellement generate_prompt(). Exécutez --prepare-only pour que la connexion directe à l'API et le chemin natif Codex partagent le même RuntimeProfile, le même routage de dispositions et le même compilateur de prompt :
python3 scripts/generate_ppt.py \
--plan slides_plan.json \
--style styles/<collection>/<id>.md \
--prepare-only \
--output outputs/<timestamp>
Cette commande n'appelle pas l'API d'image, ni n'empaquette le PPTX ; elle génère prompts.json, le texte du prompt par page et metadata.json. Pour un test sur une seule page, ajoutez --slides 1.
3. Lisez le résultat compilé de chaque page
Depuis outputs/<timestamp>/prompts.json, lisez le prompt, reference_image, asset_reference_image et layout_id de chaque page. Ne reconstruisez pas un prompt à partir du Markdown, sinon vous contournerez la banque de dispositions structurée.
4. Appelez l'outil image_generation pour générer les images
Pour chaque page, appelez votre outil image_generation :
prompt: le prompt complet déjà compilé pour cette page dansprompts.jsonoutput_format:png- Si
reference_image/asset_reference_imagesont enregistrés, transmettez-les dans l'ordre comme images de référence - Enregistrez l'image retournée dans
outputs/<timestamp>/images/slide-NN.png(NN est le numéro de page à deux chiffres)
Vous pouvez le faire en parallèle (4 maximum recommandé pour éviter le rate limiting).
5. Empaquetez le PPTX
Si le deck ne contient pas d'images réelles externes, vous pouvez utiliser le simple collage PNG plein écran ci-dessous. Si une page contient external_image / image_overlay / external_image_placeholder pointant vers une image réelle, n'utilisez pas ce collage simplifié, sinon l'image réelle sera fusionnée dans le PNG de fond de page, et l'utilisateur ne pourra pas la sélectionner ni la déplacer individuellement dans PowerPoint. Dans ce cas, utilisez impérativement la logique d'empaquetage standard de generate_ppt.py, ou appelez generate_pptx(..., metadata=metadata) dans une session existante, pour que l'image réelle reste un objet picture indépendant superposé sur le fond.
python3 -c "
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
import os, glob
for p in sorted(glob.glob('outputs/<timestamp>/images/slide-*.png')):
slide = prs.slides.add_slide(blank)
slide.shapes.add_picture(p, 0, 0, width=prs.slide_width, height=prs.slide_height)
prs.save('outputs/<timestamp>/<title>.pptx')
print('done')
"
La structure PPTX correcte pour une page avec image externe réelle doit être :
- Calque 1 :
images/slide-XX.pngcomme image de fond de page entière (contenant le fond et le texte générés par le modèle). - Calque 2 : l'image réelle pointée par
sourcecomme objet picture PPT indépendant, placé sur le fond selon les coordonnéesslide_spec, sélectionnable, déplaçable et redimensionnable dans PowerPoint.
Mode de clonage de modèle (chemin natif Codex)
Vous êtes vous-même un agent multimodal — utilisez directement Read pour lire les PNG de chaque page du modèle, extrayez le style visuel, écrivez template_profile.json (schéma dans TemplateProfile de template_analyzer.py, chaque disposition doit contenir reference_image), puis utilisez --template-profile template_profile.json --template-strict --prepare-only pour compiler le prompt et la référence de chaque page ; ne choisissez pas manuellement une autre logique de construction de prompt.
Vous n'avez pas besoin de configurer VISION_* — vous êtes la vision.
Différence avec la section « --backend codex » ci-dessous
| Chemin natif (cette section) | --backend codex | |
|---|---|---|
| Cas d'usage | Vous êtes l'agent Codex | Vous êtes Claude Code / un autre agent, utilisant le CLI codex local |
| Méthode d'appel | Appelez directement l'outil image_generation | Lancez un sous-processus codex exec --full-auto |
| Nombre de couches de génération | 1 |
...
[truncaté pour la traduction]