Système multi-agents IA pour la génération de vidéos éducatives de mathématiques.
Propulsé par Strands Agents + Claude + Manim.
mathvideo/
├── main.py # Point d'entrée
├── config.py # Configuration
├── models.yaml
├── pyproject.toml
│
├── agents/
│ ├── orchestrator.py # Chef d'orchestre (analyse prompt + délègue)
│ ├── pdf_agent.py # Transcription des programmes PDF
│ ├── script_agent.py # Génération du code Manim
│ ├── executor_agent.py # Exécution Manim + auto-correction
│ └── latex_agent.py # Exercices, corrections, cours LaTeX
│
├── tools/
│ ├── pdf_tool.py # Lecture de PDFs
│ └── file_tools.py # Gestion fichiers et dossiers
│
├── pdfs/ # 📁 Déposez vos PDFs ici (programmes officiels, etc.)
├── knowledge/ # 📁 Base de connaissances générée automatiquement
└── output/ # 📁 Contenu généré
└── {niveau}/
└── {notion}/
├── video.mp4
├── script_manim.py
├── cours.tex
├── synthese.md
├── exercices.tex
└── corrections.tex
pip install -r requirements.txtNote Manim : Manim nécessite aussi des dépendances système (FFmpeg, LaTeX).
Voir : https://docs.manim.community/en/stable/installation.html
Créez un fichier .env à la racine :
ANTHROPIC_API_KEY=sk-ant-...
Ou exportez la variable d'environnement :
export ANTHROPIC_API_KEY=sk-ant-...Déposez vos PDFs dans le dossier pdfs/ :
- Programmes officiels MEN
- Livres scolaires numérisés
- Cours universitaires
python main.py "Génère moi une vidéo illustrant le raisonnement par récurrence niveau terminal"
python main.py "Crée une vidéo sur les suites arithmétiques pour des élèves de première"
python main.py "Explique les intégrales de Riemann niveau licence 1"
python main.py "Vidéo sur la géométrie des triangles pour la 6ème"python main.py "Ajoute plus d'exemples concrets à la vidéo sur la récurrence terminale"
python main.py "Rends la vidéo sur les suites plus colorée et ajoute une conclusion"python main.py "Génère des exercices sur le raisonnement par récurrence niveau terminal"
python main.py "Crée des exercices progressifs sur les matrices niveau BTS"python -c "
import asyncio
from agents.pdf_agent import PDFAgent
asyncio.run(PDFAgent().ingest_all_pdfs())
"Prompt utilisateur
│
▼
┌─────────────────┐
│ Orchestrateur │ ← Analyse, planifie, délègue
└────────┬────────┘
│
┌─────┼──────────────┐
▼ ▼ ▼
PDF Script LaTeX
Agent Agent Agent
│ │ │
▼ ▼ │
Base Exécuteur ←──────┘
conn. Agent
│
▼
video.mp4
- Analyse le prompt (niveau, notion, type de tâche)
- Vérifie si une vidéo existe déjà
- Coordonne les autres agents
- Lit les PDFs de programmes scolaires
- Extrait et structure les connaissances par niveau/notion
- Maintient un cache Markdown pour éviter de retraiter
- Génère du code Manim pédagogique complet
- Peut modifier un script existant selon des instructions
- Lance Manim en sous-processus
- Détecte et corrige automatiquement les erreurs (jusqu'à 3 tentatives)
- Génère des exercices progressifs avec niveaux de difficulté
- Produit les corrections détaillées correspondantes
- Crée des cours et fiches de synthèse
from manim import *
class MainScene(Scene):
def construct(self):
# Titre
title = Text("Raisonnement par récurrence", font_size=40)
self.play(Write(title))
self.wait(2)
self.play(FadeOut(title))
# Définition
definition = MathTex(r"\text{Étape 1 (Initialisation)}: P(n_0) \text{ vraie}")
self.play(Write(definition))
# ...Les modèles et paramètres sont centralisés dans models.yaml — vous n'avez jamais besoin de toucher au code Python pour changer de modèle.
Ouvrez models.yaml et modifiez la ligne model: de l'agent concerné :
```yaml agents: orchestrator: model: claude-haiku-4-5-20251001 # ← changer ici max_tokens: 1024
script: model: claude-sonnet-4-6 # ← ou ici max_tokens: 8192 ```
Un commit Git sur models.yaml suffit — vous gardez l'historique complet de vos changements de modèles.
| Section | Paramètre | Valeur par défaut | Description |
|---|---|---|---|
agents.*.model |
— | voir fichier | Modèle par agent |
agents.*.max_tokens |
— | voir fichier | Limite de tokens en sortie |
local_fallback.* |
— | "" |
Modèle Ollama si USE_LOCAL=true |
manim.quality |
medium_quality |
low / medium / high |
Qualité de rendu vidéo |
manim.preview |
false |
true / false |
Ouvrir la vidéo après génération |
manim.timeout |
300 |
secondes | Durée max de rendu |
limits.max_retries |
3 |
entier | Tentatives de correction auto |
limits.session_token_budget |
50000 |
tokens | Limite par génération |
Ajoutez dans votre .env :
``` USE_LOCAL=true LOCAL_API_URL=http://localhost:11434/v1 ```
Les agents légers (orchestrateur, PDF) basculeront automatiquement sur les modèles définis dans local_fallback de models.yaml. Les agents critiques (script, executor) restent toujours sur l'API cloud.
Au démarrage, le système interroge automatiquement l'API Anthropic et affiche un avertissement si un modèle plus récent est disponible :
```
- Interface web (Streamlit ou FastAPI)
- Support des voix-off (TTS)
- Export vers YouTube automatique
- Base de données vectorielle pour la recherche sémantique
- Mode interactif avec révision humaine avant exécution
- Support multilingue (EN, ES, DE)