Vidéo explicative
Vous créez une vidéo qui aide l'utilisateur à apprendre un concept. Vous avez un gros avantage sur un outil frais : vous connaissez cette conversation et ce projet. Utilisez cette connaissance.
Le moteur se trouve dans ~/.claude/skills/clayducation/engine/. Dans ce fichier, make signifie :
node ~/.claude/skills/clayducation/engine/make.mjs <commande> <répertoire-projet>
Étape 0 : demander d'abord (à chaque début du skill)
Que l'utilisateur ait tapé /clayducation ou demandé une vidéo en mots, la première chose que vous faites est
de poser les questions ci-dessous avec AskUserQuestion, avec des options cliquables. Omettre chaque question
que le message de l'utilisateur ou cette conversation répondent déjà (par exemple, « en style actualité » répond au
look, et « avec de la musique lo-fi » répond à la musique). Mettez l'option recommandée en premier et marquez-la
« (Recommandé) ». Posez les quatre questions en un seul appel (l'outil en accepte au maximum 4). Si le sujet
lui-même n'est pas clair et qu'aucune question n'est omise, posez d'abord la question sur le sujet, dans son propre appel.
| Question | En-tête | Options (première = par défaut) |
|---|---|---|
| Quel look utiliser pour la vidéo ? | Look | Clay 3D : un look en pâte à modeler douce, avec la mascotte silencieuse qui fait le travail · 2D classique, mixte : un style 2D différent pour chaque partie · 2D classique, un style : l'utilisateur le nomme (actualité, tableau blanc, ...) |
| À qui s'adresse la vidéo et quelle durée ? | Auditoire | Révision d'examen, standard : notation du cours, nombres travaillés, pièges d'examen, 5 à 6 min · Révision d'examen, approfondie : idem, 8 à 9 min, chaque étape de la dérivation · Débutant, court : intuition d'abord, moins de symboles, 2 à 4 min · (Autre : l'utilisateur nomme un auditoire et une durée, par exemple « révision pour expert, court ») |
| Quand dois-je vérifier avec vous ? | Point de contrôle | Tout en une fois : revenir avec la vidéo terminée · Après le storyboard : montrer le plan et attendre l'approbation · Après le premier rendu : montrer les premières images et attendre |
| Quelle musique ? | Musique | Calme (current) : nappe douce, sans rythme · Lo-fi (lofi) : rythme léger, plus d'énergie · Aucune |
Mettez une option recommandée en premier lorsque la conversation en suggère une (un examen la semaine suivante : Révision
d'examen, approfondie). Si le message ne répond qu'à une moitié de la question Auditoire (par exemple « pour mon examen »),
gardez la question et n'offrez que les options qui correspondent à cette moitié. Les auditoires sont : révision d'examen,
débutant et révision pour expert (rapide et dense) ; les durées sont : court (2 à 4 min), standard (5 à 6 min) et
approfondi (8 à 9 min). Écrivez les réponses dans video.json à l'étape 4 : "_look" (clay ou classic),
"_brief": { "viewer": ..., "length": ..., "checkpoint": ..., "style": ... } et
"_render": { "music": "current" | "lofi" | false }. Chaque étape ultérieure, et une reconstruction, les y lit
et ne repose pas les questions. Si l'utilisateur ignore les questions, utilisez la première option de chacune.
Tout en une fois, sauf si l'utilisateur a choisi un point de contrôle
Après l'étape 0, faites chaque étape ci-dessous sans vous arrêter, et revenez uniquement avec la vidéo
terminée et vérifiée. Ne demandez pas « dois-je continuer ? », ne montrez pas de brouillons, n'attendez pas entre les étapes.
Chaque vérification ci-dessous est à vous pour l'exécuter et agir en conséquence. Les seuls arrêts sont les points de contrôle que l'utilisateur
a choisis : « Après le storyboard » s'arrête après l'étape 7 (montrez le storyboard et le verdict de l'agent de script,
puis attendez), et « Après le premier rendu » s'arrête au premier make look de l'étape 9 (montrez ses
images, puis attendez).
Le look que l'utilisateur souhaite (à lire avant l'étape 6)
Clay pour les choses qui agissent, Manim pour les graphiques, et la mascotte est dans chaque vidéo. Lisez styles/clay.md.
L'utilisateur a choisi le look clay plutôt que l'ancien mélange de styles pour la cohérence entre les vidéos. Les styles 2D sont un look classique
sur option ; voir la section ci-dessous.
-
Ne forcez pas un graphique en clay (l'utilisateur l'a demandé). Lorsqu'une image 2D Manim aide le spectateur à comprendre plus que le clay ne le ferait (une courbe, une distribution, un contour, une projection ou autre géométrie dans un plan), faites de cette partie une partie Manim, sur le fond sombre de Manim (
styles/math-manim.md). Ne construisez jamais un modèle en clay qui copie une courbe mathématique : l'utilisateur les a fait retirer. Les objets qui agissent, et le travail physique de la mascotte, restent en clay. Une vidéo peut passer d'une partie clay à une partie Manim et revenir, avec la même couleur pour la même chose. -
Un seul look, plusieurs parties. La vidéo est divisée en parties d'environ 15 à 40 s (accroche, chaque idée, votre cas, conclusion). Chaque partie a son propre fond uni, sa caméra et son décor. Côte à côte, deux parties ne partagent jamais un fond.
-
La mascotte fait le travail. Il est silencieux, sans synchronisation labiale, et le narrateur est une voix off. Il marche, tire, pousse, porte et éteint les choses de ses propres mains, donc une force dans le script est quelque chose que le spectateur le voit faire. L'utilisateur a demandé cela après une vidéo où il se tenait seulement et regardait. Il reste impassible par défaut, et
make checkAVERTIT lorsqu'il reste au même endroit. Variez le travail : utilisez un assistant d'action différent dans chaque partie (carry,knock,press,grip,pointAt,pushOn; voir « Utiliser une action différente » dansstyles/clay.md). L'utilisateur l'a vu pousser dans chaque partie. -
Les choses doivent être connectées. Un ressort atteint son mur, une broche touche sa carte, une main touche ce qu'elle tient. L'utilisateur a trouvé un ressort qui manquait son mur après que toutes les vérifications étaient passées.
make bakemesure chaque jointure dansmodels.js(JOINS), alors ajoutez de nouvelles jointures là, et recherchez le contact dans les images fixes. -
Nos propres modèles uniquement. Utilisez le kit dans
styles/library/clay. Ne téléchargez jamais un modèle. Si une vidéo a besoin d'un nouvel objet, ajoutez-le au kit avec le même look. -
Chaque partie est un seul plan continu. À l'intérieur d'une partie, il n'y a ni coupes ni nouvelles diapositives : les objets arrivent, bougent et se rejoignent pendant que la voix parle, et la caméra se déplace lentement. Une partie se termine dans l'état à partir duquel la partie suivante commence, ou avec un fondu dans le fond de la partie suivante.
-
L'image explique ; le texte ne fait que nommer. Le texte reste plat et net, en HTML par-dessus la 3D. Par image : un chapeau (petites capitales, la partie et une source), un titre d'au plus 8 mots, quelques étiquettes de 1 à 4 mots chacune avec de fines lignes de guidage, et au plus une ligne de légende en bas. Jamais une colonne de phrases, jamais une liste à puces, jamais une légende expliquant la signification des couleurs. Environ 15 mots à l'écran au maximum.
-
Les formules jouent la voix (l'utilisateur a demandé cela). Une formule fixe ne vaut pas mieux que de lire des notes. Construisez chacune avec
eqn(): les termes arrivent au fur et à mesure qu'ils sont prononcés, bougent quand la voix les déplace, frappent et explosent quand elle dit annuler, et rebondissent seulement quand elle nomme quelque chose d'important.make lookdonne une erreur pour une formule qui reste immobile, et pour une phrase « annuler » sans annulation à l'écran. Voirstyles/clay.md. -
Mouvement physique. Les choses bougent comme des objets : un bras tend la main, une balle tombe et rebondit, un bloc tombe et se stabilise, une impulsion se déplace. Pas d'accumulation de boîtes statiques.
-
Le même objet garde sa couleur dans chaque vidéo (le robot est toujours orange, la carte toujours jaune).
Si un storyboard enfreint l'un de ces principes, modifiez le storyboard avant d'écrire le code.
Règles strictes
-
Parallélisme par défaut (l'utilisateur l'a demandé, 2026-11-09). Tout ce qui peut s'exécuter en même temps le fait : une vidéo de 13 minutes a pris 3 heures quand chaque image était mesurée dans une seule page Chrome (un cœur occupé, GPU à 10 %). Le moteur mesure maintenant
look,collide,reviewetstabledans plusieurs pages à la fois (leworkersdu rendu : la moitié des cœurs, au plus 8, et seulement autant que la mémoire libre le permet ;), etbuildexécute sheet, stable et review ensemble. Lorsque vous ajoutez une étape qui visite les images, répartissez-la aussi sur plusieurs pages (measureParallel,traceParallel,idParalleldansmake.mjs). Dans votre propre travail : lancez les tâches indépendantes ensemble (un look et un auto-test, un rendu Manim et une vérification), et n'attendez jamais qu'une tâche se termine alors qu'une autre pourrait s'exécuter. -
Faites la réflexion ici, dans la conversation principale. Vous écrivez le script, le storyboard et les scènes vous-même, car le contexte est ici. Ne confiez jamais ces étapes à un sous-agent : un sous-agent commence sans contexte. L'agent de script à l'étape 7 est la seule exception, et il démarre à froid intentionnellement.
-
Ne bâclez jamais l'explication principale. L'utilisateur apprend de ces vidéos. Suivez les règles de rythme dans
reference/script.mdet corrigez chaque AVERTISSEMENT de rythme. -
N'inventez jamais un fait. Chaque nombre, formule et affirmation provient d'une source que vous avez vérifiée : le code de l'utilisateur, une fiche technique, une spécification, un article, la documentation. Listez-les dans
storyboard.md. Signalez tout ce que vous n'avez pas pu vérifier. -
« Votre cas » est facultatif. Ajoutez-le uniquement lorsque cette conversation ou ce projet contient vraiment un exemple correspondant (un bug que l'utilisateur a rencontré, un correctif, un nombre mesuré). N'en inventez jamais.
-
Pas de chevauchements. Aucun visuel ne peut en recouvrir un autre : texte sur texte, texte sur un graphique, ou un graphique qui en cache un autre. Chaque étiquette, formule, flèche et objet a son propre espace.
checkAVERTIT sur les textes qui se chevauchent, etreviewécrit chaque chevauchement mesuré dansoverlaps.md. L'encombrement est du jugement de l'utilisateur, alors recherchez-le dans les images en taille réelle. Le passage d'identification aide :make lookajoute une image des espaces les plus serrés, et AVERTIT pour un texte à moins de 12 px d'une autre chose, du texte sur un dessin, un faible contraste de texte et un modèle que d'autres cachent. Corrigez chaque chevauchement avantmake final. -
Les sous-titres ont une seule ligne. Chaque réplique fait au maximum 42 caractères et deux répliques ne s'affichent jamais en même temps, donc un lecteur n'affiche jamais deux lignes. Le moteur le fait ;
verifysignale une réplique qui enfreint la règle. Ne modifiez pasSUB_MAXdansmake.mjspour faire tenir une réplique. -
La boucle fermée (l'utilisateur a demandé cela, et le moteur l'applique). Après chaque édition :
make look, lisez chaque image qu'il liste, corrigez ce que vous voyez, et regardez à nouveau. Ensuite seulement, construisez. Ne modifiez jamais et ne construisez jamais à l'aveugle, car une construction est longue et un look prend quelques secondes. Chaque image a un chiffre de VÉRIFICATION en haut à droite, et les portes ne s'ouvrent qu'avec les chiffres de toutes les images, dans l'ordre :- Modifiez. Si vous avez changé
script.md, exécutezmake voice. Si la vidéo a des parties Manim et que vous avez changémanim_scenes.pyou la voix, exécutezmake manim:make lookdessine les images Manim, il ne les crée pas. make look <dir>: il mesure chaque scène modifiée sur chaque image, et dessine ses images proches et ses parties mobiles. Lisez-les toutes. Ensuitemake look <dir> --ok <chiffres>.make builds'arrête sans cela. Une image avec les mêmes images et étiquettes qu'une déjà lue et confirmée affiche LU AVANT et n'a pas besoin de chiffre (--ok -quand chaque image est lue avant). Lisez chaque nouvelle image ; la même règle s'applique aux bandes.make build <dir>. Il s'arrête en cas de collision.- Lisez chaque bande dans
build/review/moving.md. Ensuitemake look <dir> --moving-ok <chiffres>. make final <dir>. Il s'arrête si la source a changé après le look ou la construction, ou si une collision ou un chevauchement est ouvert. Exécutez chaque étape comme sa propre commande, arrêtez-vous à la première erreur, et confirmez qu'une modification a été appliquée.
- Modifiez. Si vous avez changé
-
Chaque lecteur vérifie les images proches et les parties mobiles. Tout agent ou session qui juge une vidéo lit les images proches de chaque partie modifiée, et toutes les images de chaque chose qui bouge : la mascotte et les objets, pendant tout leur mouvement. Un échantillon de la vidéo ne suffit pas : une main a traversé une table entre les images échantillonnées.
-
Un nouveau défaut obtient une barrière de protection. Lorsque l'utilisateur trouve un défaut, ajoutez-le d'abord à
reference/faults.mdet àengine/test/selftest.mjs, et confirmez que le test échoue sur ce défaut. Ensuite, corrigez la vidéo. Ne vous contentez pas de corriger la vidéo. Exécutezmake selftestaprès chaque modification d'une vérification.
Ce que l'utilisateur a demandé (conservez-les)
Chacun a été demandé ou choisi à l'oreille. Le moteur les fait surtout automatiquement.
| Sujet | Quoi | Automatique ? |
|---|---|---|
| Voix | Voix intégrée de Chatterbox, ralentie à environ 160 mots par minute par engine/tts/slow-reference.wav ; chaque paragraphe lu d'une traite pour que le ton porte | oui |
| Pauses | chaque point exactement 0,6 s, chaque virgule au plus 0,3 s, définies à partir de la ponctuation du script | oui ; voice AVERTIT si une pause n'a pas pu être placée |
| Mauvaises prises | une partie dont les mots diffèrent du script (vérification Whisper) est reprise avec une nouvelle graine, jusqu'à 3 fois ; la meilleure prise est conservée | oui ; AVERTIT si toujours incorrect |
| Passages rapides | une proposition plus de 1,3 fois le rythme habituel de la vidéo (les mots de symbole comptent double) est reprise ; l'utilisateur a trouvé « lambda v est v, multiplié par lambda » trop rapide | oui ; AVERTIT « rapide » : donnez-lui sa propre phrase courte et un [pause] |
| Nombres négatifs | lisez « négatif », jamais « moins » | voice s'arrête avec une ERREUR |
| Mots répétés | « un un » obtient une virgule (« un, un »), ou la voix dérape | oui |
| Écriture | paragraphes connectés ; [pause] seulement là où une idée se termine ou une animation joue. Rejeté : une pause après chaque phrase, phrases saccadées, voix rapide, voix étirée (étouffée), Kokoro | vous, voir reference/script.md |
| Musique | audible, régulière, environ 13 dB en dessous de la voix (musicVolume 0.37 ; l'utilisateur l'a augmentée de 3 dB par rapport à 0.26), baisse de volume douce ; deux pistes approuvées, current (par défaut) et lofi. Rejeté : pompage fort-doux, musique trop douce pour être entendue, 4 autres pistes | oui ; vous choisissez la piste, voir SOUND.md |
| Effets sonores | le kit dans engine/sfx.mjs, approuvé à l'oreille ; le whoosh d'entrée 4 dB en dessous des autres accents (l'utilisateur l'a trouvé un peu trop fort). Activé pour les nouvelles vidéos (_render.sfx: true), désactivé pour les anciennes | vous ajoutez s.sfx aux signaux ; le moteur les mixe |
| Audio | 48 kHz stéréo | oui ; verify le vérifie |
| Sous-titres | doux, jamais incrustés ; le mpv de l'utilisateur les affiche petits (sub-scale=0.7) | oui |
| Une ligne de sous-titre | une ligne par réplique, au maximum 42 caractères, pas deux répliques en même temps. L'utilisateur a vu deux lignes dans la vidéo 1 de l'ensemble ROS 2 | oui ; verify signale une réplique qui enfreint la règle |
| Pas de chevauchements | aucun texte ou graphique n'en recouvre un autre | check AVERTIT pour les textes, overlaps.md et votre liste de vérification des images pour le reste |
| Look | un look 3D en pâte à modeler douce avec la mascotte silencieuse, et nos propres modèles ; parties Manim sur fond sombre pour les courbes et graphiques (l'utilisateur a demandé : ne forcez pas un graphique en clay) | vous, voir les styles |
Le système de couleur d'identification
Pour chaque objet qui porte un motif (pattern: ...) le moteur...
(Le contenu original a été tronqué ; je traduis le texte disponible dans sa totalité pour la version finale du skill.)