

Générer des diapositives de cours de manière programmatique à partir d’un programme (2026)
Pour générer des diapositives de cours de manière programmatique, exportez votre programme sous forme d’une ligne par leçon (unité, titre, objectifs, vocabulaire, niveau, langue), puis faites qu’un script appelle l’endpoint 2Slides Fast PPT POST /api/v1/slides/generate une fois par ligne avec un thème éducatif issu de GET /api/v1/themes/search et responseLanguage défini par classe. Chaque présentation de 12 diapositives est un PPTX modifiable qui coûte 120 crédits, environ 0,30 $, et est livré en environ 30 secondes. Pour les classes inversées, create-pdf-slides plus generate-narration produit de courtes vidéos de cours. Conçu pour les développeurs edtech, les concepteurs pédagogiques et les équipes de programmes scolaires.
Points clés
- Une présentation Fast PPT coûte 10 crédits par diapositive, donc une présentation de 12 diapositives coûte 120 crédits, environ 0,30 $ au tarif de 5 $ pour 2 000 crédits.
- Un département avec 40 leçons de 12 diapositives utilise 4 800 crédits, soit environ 12 $, et soumet en environ 7 minutes avec la limite de 6 requêtes par minute.
responseLanguageaccepte un nom de langue tel que « Spanish » ou « Vietnamese », couvrant plus de 20 langues de sortie pour des programmes bilingues à partir des mêmes lignes de programme.- La sortie Fast PPT est un PPTX natif et modifiable, donc les enseignants peuvent adapter chaque diapositive avant le cours. Les présentations Fast PPT ne peuvent pas être narrées.
- Pour les classes inversées, une vidéo de cours narrée de 8 diapositives coûte 2 490 crédits (810 pour 2K diapositives plus 1 680 pour la narration), soit environ 5 à 6,25 $.
À qui cela s’adresse
Concepteurs pédagogiques, ingénieurs edtech et créateurs de cours qui détiennent le programme sous une forme structurée (Google Sheet, CSV LMS, base de données de cours) et ont besoin d’un brouillon de présentation pour chaque leçon, pas seulement quelques-unes. Les équipes de district gérant des programmes bilingues, où une leçon doit exister en anglais et en espagnol ou vietnamien, tirent le plus parti du champ langue par ligne.
Ignorez cette recette si vous avez cinq leçons et un enseignant avec un après-midi ; le tour d’horizon des outils pour enseignants couvre la voie des applications web.
Le flux de travail en un coup d’œil
| Étape | Outil | Ce qui se passe | Endpoint 2Slides / crédits |
|---|---|---|---|
| 1 | Export Sheets ou LMS | Une ligne par leçon et langue : unité, titre, niveau, objectifs, vocabulaire, nombre de diapositives | aucun |
| 2 | curl ou navigateur | Recherche de thèmes éducation et classe, stockage d’un themeId par tranche de niveau | GET /api/v1/themes/search, gratuit |
| 3 | Python ou Node | Construction d’un prompt structuré à partir des champs de la ligne, définition de responseLanguage par classe | aucun |
| 4 | Python ou Make | Un appel generate par ligne avec mode: "async", au maximum 6 par minute | POST /api/v1/slides/generate, 10 crédits par page |
| 5 | Script | Interrogation toutes les 5 à 10 s jusqu’à success, téléchargement du PPTX vers Drive ou LMS | GET /api/v1/jobs/{id}, gratuit |
| 6 | Enseignant | Revue, édition et approbation du PPTX avant diffusion aux élèves | aucun |
| 7 (optionnel) | Script plus espace de travail | Classe inversée : diapositives conçues en images, narration à voix unique, export MP4 | create-pdf-slides 10 + 100 par page à 2K, generate-narration 210 par page |
Étape 1 : Normaliser l’export du programme
Aplatissez l’export LMS ou le guide de progression en une ligne par leçon par langue. Si une leçon est donnée en deux langues, dupliquez la ligne en ne changeant que la colonne language. Gardez les champs multi-valeurs (objectifs, vocabulaire) séparés par des pipes pour que le générateur de prompt puisse les transformer en listes à puces.
unit,lesson_title,grade,objectives,vocabulary,language,slide_count
Ecosystems,Food Webs and Energy Flow,7,"Explain how energy moves between trophic levels|Identify producers, consumers and decomposers in a local ecosystem","producer|consumer|decomposer|trophic level",English,12
Ecosystems,Food Webs and Energy Flow,7,"Explain how energy moves between trophic levels|Identify producers, consumers and decomposers in a local ecosystem","producer|consumer|decomposer|trophic level",Spanish,12
Fractions,Comparing Fractions with Unlike Denominators,4,"Compare two fractions using common denominators|Justify comparisons with a visual model","numerator|denominator|equivalent fraction|benchmark fraction",Vietnamese,10Ajoutez trois colonnes de suivi que le script remplira plus tard : job_id, download_url et status. La colonne status pilote le flux de révision décrit ci-dessous.
Étape 2 : Trouver un themeId adapté à l’éducation
Le themeId détermine l’apparence d’une présentation Fast PPT. Recherchez parmi les 1 500+ modèles avec des termes liés à la classe, puis conservez un ou deux IDs par tranche de niveau : un style dessiné à la main ou griffonné pour l’élémentaire, quelque chose de plus épuré pour le secondaire.
curl "https://2slides.com/api/v1/themes/search?query=education&limit=10" \
-H "Authorization: Bearer $SLIDES_API_KEY"
# À essayer aussi : query=classroom, query=doodle, query=science, query=studyChaque résultat inclut un themeId et des métadonnées. Stockez les IDs comme variables d’environnement (EDU_THEME_ELEMENTARY, EDU_THEME_SECONDARY) plutôt que dans la feuille. L’endpoint de recherche est gratuit mais partage la limite de 6 requêtes par minute, donc lancez-le une fois lors de la configuration, pas une fois par leçon.

themes/search.
Étape 3 : Construire le prompt et définir la langue pour des diapositives multilingues
Le prompt est là où la qualité du programme devient qualité de la présentation. Donnez au modèle le niveau, les objectifs en puces, le vocabulaire à définir, et une structure fixe de diapositives. Gardez userInput sous quelques centaines de mots ; les objectifs et le vocabulaire sont l’entrée, pas tout le plan d’unité.
Puis définissez responseLanguage depuis la ligne. Il prend un nom de langue, donc « Spanish » et « Vietnamese » fonctionnent, mais pas « es » ou « vi ». Rédigez le prompt en anglais et laissez la présentation sortir en espagnol ; un seul modèle sert tout le programme.
Create a 12-slide lesson deck for grade 7.
Unit: Ecosystems
Lesson: Food Webs and Energy Flow
Learning objectives:
- Explain how energy moves between trophic levels
- Identify producers, consumers and decomposers in a local ecosystem
Key vocabulary to define with one example each: producer, consumer, decomposer, trophic level
Structure: title slide, objectives, warm-up question, 5 content slides with one idea each,
vocabulary slide, quick check with 3 questions, summary.
Use short sentences suitable for the grade level.
generate dans la documentation API 2Slides, incluant les 20+ valeurs que responseLanguage accepte par nom.
Étape 4 : Générer les diapositives de cours de manière programmatique avec Fast PPT
C’est l’étape qui permet à une petite équipe de créer en masse des présentations de classe. Fast PPT generate est synchrone par défaut et retourne un downloadUrl en un appel, ce qui convient pour une seule présentation. Pour un lot, définissez mode: "async", collectez les jobId, et interrogez. Chaque présentation prend environ 30 secondes, et la clé autorise 6 requêtes par minute, donc espacez les soumissions de 10 secondes.
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Create a 12-slide lesson deck for grade 7. Unit: Ecosystems. Lesson: Food Webs and Energy Flow. Learning objectives: explain how energy moves between trophic levels; identify producers, consumers and decomposers in a local ecosystem. Key vocabulary to define with one example each: producer, consumer, decomposer, trophic level. Structure: title, objectives, warm-up question, 5 content slides, vocabulary, 3-question quick check, summary.",
"themeId": "'"$EDU_THEME_SECONDARY"'",
"responseLanguage": "Spanish",
"mode": "async"
}'
# -> {"jobId":"..."} puis interroger GET https://2slides.com/api/v1/jobs/{jobId}La boucle complète en Python : lire le CSV, soumettre chaque ligne avec un intervalle de 10 secondes, interroger chaque job toutes les 8 secondes, et sauvegarder le PPTX sous un nom de fichier incluant unité, niveau et langue pour que deux niveaux avec le même titre de leçon ne s’écrasent pas.
import csv, os, time, requests
API = "https://2slides.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SLIDES_API_KEY']}"}
THEMES = {
"elementary": os.environ["EDU_THEME_ELEMENTARY"],
"secondary": os.environ["EDU_THEME_SECONDARY"],
}
def theme_for(grade: str) -> str:
return THEMES["elementary"] if int(grade) <= 5 else THEMES["secondary"]
def build_prompt(row: dict) -> str:
objectives = "\n".join(f"- {o.strip()}" for o in row["objectives"].split("|"))
vocab = ", ".join(v.strip() for v in row["vocabulary"].split("|"))
return (
f"Create a {row['slide_count']}-slide lesson deck for grade {row['grade']}.\n"
f"Unit: {row['unit']}\nLesson: {row['lesson_title']}\n"
f"Learning objectives:\n{objectives}\n"
f"Key vocabulary to define with one example each: {vocab}\n"
"Structure: title slide, objectives, warm-up question, content slides with one "
"idea each, vocabulary slide, quick check with 3 questions, summary. "
"Use short sentences suitable for the grade level."
)
def submit(row: dict) -> str:
r = requests.post(f"{API}/slides/generate", headers=HEADERS, timeout=60, json={
"userInput": build_prompt(row),
"themeId": theme_for(row["grade"]),
"responseLanguage": row["language"] or "English",
"mode": "async",
})
r.raise_for_status()
return r.json()["jobId"]
def wait(job_id: str) -> dict:
while True:
job = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30).json()
if job["status"] in ("success", "failed"):
return job
time.sleep(8) # interroger toutes les 5-10 s ; endpoint jobs autorise 10 req/min
with open("curriculum.csv", newline="", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
queued = []
for row in rows:
queued.append((row, submit(row)))
time.sleep(10) # 6 soumissions par minute, jamais plus
os.makedirs("decks", exist_ok=True)
for row, job_id in queued:
job = wait(job_id)
if job["status"] != "success":
print("ÉCHEC", row["lesson_title"], row["language"], job_id)
continue
pptx = requests.get(job["downloadUrl"], timeout=120).content
name = f"{row['unit']}_G{row['grade']}_{row['lesson_title']}_{row['language']}.pptx"
with open(os.path.join("decks", name.replace(" ", "_")), "wb") as out:
out.write(pptx)
print("sauvegardé", name)Écrivez job_id, download_url et status = "draft" dans la feuille au fur et à mesure que chaque présentation arrive.

generate produit le même PPTX modifiable à partir des mêmes modèles, un appel par leçon.
Étape 5 : Variante classe inversée : courtes vidéos de cours narrées
Pour une classe inversée, l’artefact que les élèves voient à la maison est une vidéo, donc changez de pipeline. Les jobs Fast PPT ne peuvent pas être narrés. Utilisez create-pdf-slides pour des diapositives conçues en images au format 16:9 en 2K, puis generate-narration avec un seul intervenant, puis exportez la vidéo. Gardez les cours courts : 6 à 8 diapositives avec environ 45 secondes de narration chacune font une vidéo de 5 à 6 minutes.
# 1) diapositives conçues en images (async par défaut)
curl -X POST https://2slides.com/api/v1/slides/create-pdf-slides \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "8-slide mini-lecture for grade 7 on food webs and energy flow. One idea per slide, written to be read aloud in about 45 seconds per slide. Cover: what a food web is, producers, consumers, decomposers, trophic levels, the 10 percent energy rule, one local example, a 2-question check.",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 8,
"contentDetail": "standard",
"responseLanguage": "English",
"mode": "async"
}'
# interroger GET /api/v1/jobs/{jobId} jusqu’à status = success (10 + 8 x 100 = 810 crédits)
# 2) narration à voix unique sur ce job (8 x 210 = 1 680 crédits)
curl -X POST https://2slides.com/api/v1/slides/generate-narration \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobId": "JOB_ID_FROM_STEP_1",
"mode": "single",
"speakerName": "Teacher",
"voice": "Leda",
"contentMode": "standard",
"includeIntro": true
}'
# interroger à nouveau jusqu’à succès
# 3) PNG + WAV par page, gratuit
curl -X POST https://2slides.com/api/v1/slides/download-slides-pages-voices \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobId": "JOB_ID_FROM_STEP_1"}' -o lecture-assets.zipDeux options pour le MP4 : ouvrez le job dans l’espace de travail 2Slides et utilisez Exporter, puis Générer la vidéo, qui rend un MP4 H.264 en 1920×1080 dans le navigateur pour 20 crédits par page ; ou assemblez les paires PNG et WAV du ZIP avec FFmpeg pour un upload LMS entièrement scripté. Le post sur les courts éducatifs sans visage montre la version 9:16 pour les clips de révision.
Étape 6 : Alternatives sans code et agents
Automatisation du programme vers PowerPoint dans Make
Si personne dans l’équipe programme ne veut lancer un job Python, la même boucle s’intègre dans un scénario Make (n8n et Zapier fonctionnent pareil) :
- Déclencheur : surveillez les nouvelles lignes ou mises à jour dans la Google Sheet du programme, ou un déclencheur Webhook lancé par le LMS.
- Transformation : une étape texte ou variable assemble
userInputà partir des champs de la ligne selon le modèle de l’étape 3. - Requête HTTP :
POST https://2slides.com/api/v1/slides/generateavecmode: "async", l’en-têteAuthorization: Bearerstocké comme secret du scénario, etresponseLanguagemappé depuis la ligne. - Attente : une étape Delay ou Sleep de 30 à 45 secondes.
- Requête HTTP :
GET https://2slides.com/api/v1/jobs/{jobId}; sistatusn’est pas encoresuccessoufailed, bouclez avec une autre attente. - Livraison : téléchargez le PPTX dans un dossier Drive par niveau, puis écrivez
download_urletstatus = "draft"dans la ligne. - Limitation : une ligne par exécution, au moins 10 secondes entre les soumissions, ainsi un collage de 40 lignes ne dépasse jamais 6 requêtes par minute.
Demander à un agent à la place
Les enseignants qui travaillent dans Claude Code, Codex ou Cursor peuvent sauter le script et le scénario. Installez la compétence 2Slides Agent Skill ou ajoutez le serveur MCP hébergé (claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY"), collez la table du programme, et demandez une présentation par ligne. L’agent appelle les mêmes outils themes_search, slides_generate et jobs_get avec la même clé et crédits ; voir la page Agent Skills.

Accessibilité et révision : brouillons IA, enseignants valident
Considérez chaque présentation générée comme un brouillon. La colonne status passe de draft à reviewed puis approved avec les initiales du réviseur, et rien ne parvient aux élèves tant que ce n’est pas approved. C’est une politique, pas une fonctionnalité, et c’est pourquoi le PPTX modifiable importe plus qu’un PDF plus joli pour l’usage en classe.
Une checklist de révision par présentation :
- Contenu : chaque objectif de la ligne apparaît et est correct pour la norme ; pas de faits ou dates inventés ; les questions du contrôle rapide sont répondables à partir des diapositives.
- Niveau de lecture : la longueur des phrases et le vocabulaire correspondent au niveau. Les diapositives de niveau 4 avec des phrases de niveau 9 sont la correction la plus fréquente.
- Présentations traduites : un enseignant bilingue révise la présentation espagnole ou vietnamienne sur ses propres mérites, car les exemples doivent convenir culturellement autant que la traduction soit correcte.
- Accessibilité : ajoutez du texte alternatif aux images, vérifiez le contraste du texte avec le fond du modèle, gardez le texte lisible depuis le fond de la salle, et ne transmettez jamais d’information par la couleur seule. Les directives WCAG sont la référence citée par la plupart des districts.
- Vidéos de cours : le ZIP de
download-slides-pages-voicesvous donne un WAV par diapositive, donc une transcription avec n’importe quel outil de reconnaissance vocale et des sous-titres sur le MP4 prennent quelques minutes.
Prévoyez environ 10 minutes de révision enseignant par présentation : environ 7 heures pour 40 leçons, contre zéro heure passé à créer des présentations à partir d’un modèle vierge.
Coût pour un département
Les crédits sont payés à l’usage : 5 $ achètent 2 000 crédits (0,0025 $ chacun) et 80 $ achètent 40 000 (0,002 $ chacun). Les nouveaux comptes reçoivent 500 crédits gratuits, suffisants pour 4 présentations test de 12 diapositives.
| Volume | Pipeline | Crédits | USD |
|---|---|---|---|
| 40 leçons × 12 diapositives (un département, un trimestre) | Fast PPT generate | 480 pages × 10 = 4 800 | ≈ 12,00 $ au tarif pack 5 $ |
| 500 leçons × 12 diapositives (district ou marché de cours, par mois) | Fast PPT generate | 6 000 pages × 10 = 60 000 | ≈ 120 $ au tarif pack 80 $ |
| 40 cours inversés × 8 diapositives, 2K plus narration | create-pdf-slides 40 × 810, generate-narration 40 × 1 680 | 32 400 + 67 200 = 99 600 | ≈ 199 à 249 $ |
| Export MP4 optionnel pour ces 40 cours dans l’espace de travail | 320 pages × 20 | 6 400 | ≈ 13 à 16 $ |
Le temps est l’autre budget. À 6 soumissions par minute, 40 leçons se soumettent en environ 7 minutes et 500 en environ 84 minutes, chaque présentation se terminant environ 30 secondes après la soumission.
Fast PPT ou diapositives conçues en images pour ce cas d’usage ?
- Fast PPT (
generate) quand les enseignants doivent éditer dans PowerPoint ou Google Slides et que le volume est élevé : 120 crédits pour une présentation de 12 diapositives, livrée en environ 30 secondes. create-pdf-slidesquand la présentation est l’artefact final destiné aux élèves (vidéo de cours, intégration LMS) ou nécessite un style visuel spécifique : 1 010 crédits pour 10 pages en 2K, plus 210 par page pour la narration.create-like-thisquand le district a une diapositive de marque que chaque présentation doit respecter ; passez son URL publique commereferenceImageUrl, même coût quecreate-pdf-slides.- Ne les mélangez jamais par accident : narration et export MP4 existent uniquement pour les jobs
create-pdf-slidesetcreate-like-this, pas pour Fast PPT.
Pièges courants
- HTTP 429 lors d’un collage massif : la clé autorise 6 requêtes par minute, donc gardez un seul soumissionnaire avec un intervalle de 10 secondes. Ne répartissez pas les soumissions sur plusieurs threads ou branches de scénario partageant une clé.
- Clé API dans la feuille ou un Apps Script partagé : gardez-la côté serveur ou dans le magasin de secrets de l’outil d’automatisation. Les enseignants reçoivent les présentations, jamais les clés.
- Narration d’un job Fast PPT : l’endpoint narration le rejette. Reconstruisez la leçon avec
create-pdf-slidesd’abord. - Passage d’un code langue :
responseLanguage: "es"n’est pas"Spanish". Validez la colonne langue avec les noms supportés. create-pdf-slidespar défaut àpage: 1: définissez explicitement le nombre (8 pour une mini-leçon) ou utilisezpage: 0pour laisser le modèle choisir. Une leçon d’une page est une surprise fréquente au premier lancement.- Coller tout le plan d’unité comme
userInput: des documents de normes longs produisent des présentations peu ciblées. Réduisez chaque leçon aux objectifs, vocabulaire et structure de diapositives d’abord.
Questions fréquemment posées
Puis-je générer des diapositives de cours de manière programmatique sans coder ?
Oui. Dans Make, n8n ou Zapier, un déclencheur Sheets alimente une étape Requête HTTP qui appelle POST /api/v1/slides/generate avec mode: "async", suivi d’une étape d’attente et d’une seconde Requête HTTP vers GET /api/v1/jobs/{id}. Les enseignants peuvent aussi sauter les outils d’automatisation et demander à un agent IA avec la compétence 2Slides ou le serveur MCP de construire les présentations à partir d’un tableau de programme collé. Chaque voie utilise la même clé API et les mêmes crédits.
Comment créer des diapositives multilingues à partir d’un seul programme ?
Dupliquez chaque ligne de leçon une fois par langue et définissez la colonne langue avec un nom tel que « Spanish » ou « Vietnamese ». Le script passe cette valeur comme responseLanguage, donc des objectifs et vocabulaire identiques produisent une présentation en anglais et une en espagnol à partir d’un seul modèle de prompt. 2Slides supporte plus de 20 langues de sortie. Faites réviser chaque présentation traduite par un enseignant bilingue, car les exemples de vocabulaire doivent convenir culturellement autant que la traduction soit correcte.
Existe-t-il une alternative API IA plan de cours vers diapositives à 2Slides ?
Oui, plusieurs outils de présentation ont des API. L’API Gamma offre une automatisation similaire mais nécessite un plan Pro pour les clés API, tandis que les clés 2Slides fonctionnent sur tout compte, y compris un gratuit avec 500 crédits. SlideSpeak et Canva Connect exposent aussi des API. 2Slides est notre produit, donc comparez sur les points importants pour l’éducation : sortie PPTX modifiable, langue par requête, et tarification par diapositive.
Combien de diapositives une présentation de cours générée doit-elle avoir ?
Pour une séance de 45 à 50 minutes, 10 à 14 diapositives est un bon standard : titre, objectifs, échauffement, 4 à 6 diapositives de contenu avec une idée chacune, une diapositive vocabulaire, un contrôle rapide, et un résumé. À 10 crédits par diapositive, une présentation de 12 diapositives coûte 120 crédits. Indiquez le nombre dans userInput pour que chaque présentation du lot ait une taille, un temps de révision et un coût prévisibles.
Les enseignants peuvent-ils modifier les présentations générées dans PowerPoint ou Google Slides ?
Oui. L’endpoint Fast PPT generate retourne un PPTX natif construit à partir d’un modèle conçu, donc les zones de texte, formes et images sont modifiables dans PowerPoint, Keynote ou Google Slides après import. C’est pourquoi cette recette considère la sortie API comme un brouillon : l’enseignant ouvre le fichier, ajuste les exemples pour ses élèves, et sauvegarde la version approuvée. La sortie create-pdf-slides est un PDF plus images par page et n’est pas modifiable en texte.
Prochaines étapes
Vous avez maintenant la mise en page de la feuille, le modèle de prompt, la boucle Python et la politique de révision nécessaires pour générer des diapositives de cours de manière programmatique pour un département entier, dans toutes les langues enseignées par le programme.
- Obtenez une clé API sur 2slides.com/api. L’inscription inclut 500 crédits gratuits, suffisants pour lancer quatre leçons test de 12 diapositives avant d’acheter.
- Lisez le post hub, Cas d’usage API présentation IA par équipe, pour voir comment les équipes commerciales, RH et marketing lancent la même boucle sur leurs propres feuilles.
- Continuez avec la recette batch pour decks de vocabulaire pour une variante à prompt plus court, et le guide vidéo de cours avant d’enregistrer votre première vidéo de classe inversée.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free