Master class render
Entrée : <source>/scripts/NN - Titre.script.md (écrit par master-class).
Vous écrivez : <source>/scenes/NN.scenes.md (texte D2, sans coordonnées, sans minutage).
Une seule commande produit : <videos>/NN - Titre.mp4 + <notes>/NN - Titre.md + <notes>/<MOC>.md.
Tout s'exécute en local : D2 met en page les diagrammes (style sketch), Kokoro-82M parle, le timing provient de l'audio réel, Chromium capture une image par changement visuel, ffmpeg encode. Rien n'est envoyé à des tiers. Les seuls tokens dépensés sont les fichiers de scènes (~1× la taille du script).
0 · Configuration (une fois par machine ; relancer est sûr)
bash ~/.copilot/skills/master-class-render/scripts/setup.sh
Installe d2, ffmpeg, uv (Homebrew), un venv dans scripts/.venv avec kokoro-onnx, soundfile et playwright (Chromium), et le modèle Kokoro dans ~/.cache/kokoro (~350 Mo). Si scripts/.venv/bin/python existe, la configuration est terminée.
1 · Écrire les scènes
Lisez d'abord references/scenes-guide.md et les exemples approuvés : 01, 05, 08. Chacun est associé à son script dans ~/.copilot/skills/master-class/examples/, pour que vous puissiez voir exactement comment chaque Écran est devenu un diagramme. Cette étape fonctionne bien avec un modèle petit/rapide : travaillez une leçon à la fois et laissez le validateur vous dire quand c'est correct. Ensuite, pour chaque script, un ## Beat N + un bloc ````d2` par beat, en traduisant la description de l'Écran du beat :
# @at "phrase"(3–7 mots copiés textuellement de la narration de ce beat) révèle ce qui suit lorsque le narrateur le dit. La disposition finale est calculée une fois, donc rien ne saute ; les nouvelles pièces brillent brièvement.# @continueétend le diagramme du beat précédent.- Classes :
model,code,tool,data,person,bad,good,note(post-it avec la conclusion ; deviennent les Idées clés de la note de leçon),muted,wrong. - Le guide répertorie les pièges D2 (
\$, pas de@atdans les blocs{}, tables|||md, les changements de style ne s'animent pas).
Validez chaque leçon au fur et à mesure (doit afficher ok: et aucun warning:) :
cd ~/.copilot/skills/master-class-render/scripts && export PATH=/opt/homebrew/bin:$PATH
.venv/bin/python render.py "<source>/scripts/NN - Titre.script.md" "<source>/scenes/NN.scenes.md" /tmp/check.html
Plusieurs leçons → répartissez entre sous-agents parallèles (≈4 leçons chacun) avec le guide et l'exemple.
2 · Construire le cours
cd ~/.copilot/skills/master-class-render/scripts && export PATH=/opt/homebrew/bin:$PATH
.venv/bin/python build_course.py \
--source "<lab>/_attachments/master-class/source" \
--videos "<lab>/_attachments/master-class" \
--notes "<lab>/Master class" \
--moc "<Nom du Lab> · Master class" \
--course "<label affiché en haut à gauche dans la vidéo>" \
--tags "course/<tag-cours>,section/labs,topic/<x>,type/lesson" \
--intro "Un paragraphe pour le MOC : de quoi est constitué le cours ([[liens vers les notes source]]) et son intention." \
--voice am_michael --lang en-us
- Langue/voix : Anglais
--voice am_michael --lang en-us(alternativesam_puck,bm_george --lang en-gb) ; Espagnol--voice em_alex --lang es(féminin :ef_dora). --only 03,07reconstruit les leçons sélectionnées (les notes sont toujours regénérées pour toutes).--notes-onlyregénère les notes sans vidéo.- ~15 s par leçon après la mise en cache de la voix (première synthèse ≈ 1 min par leçon). Les sorties sont encodées dans un dossier temporaire puis copiées, car écrire directement dans des dossiers synchronisés OneDrive provoque des timeouts.
- Adaptez
--tagsaux tags utilisés par les notes source.
3 · Vérifier avant de rapporter
- La construction a affiché
ok:pour chaque leçon et aucun!! … @at phrase(s) not found. - Extrayez 2 images d'une ou deux MP4 et examinez-les (utilisez un nouveau nom de fichier à chaque fois ; les visionneuses d'images mettent en cache) :
ffmpeg -v error -ss 120 -i "<mp4>" -frames:v 1 -vf scale=1280:-1 /tmp/mc_check_<n>.pngVérifiez : le diagramme est lisible (pas une fine bande), la légende correspond, le bon beat est affiché. - Diagramme trop petit ? Le moteur de rendu essaie déjà automatiquement l'autre direction de mise en page ; si toujours trop petit, divisez le diagramme du beat ou abandonnez
@continueet résumez les étapes précédentes dans une boîtemuted. - Ouvrez la note MOC et une note de leçon : embed vidéo
![[NN - Titre.mp4]], Objectif, Idées clés, Vérifiez-vous (question + réponse pliée), Transcription pliée, liens précédent/suivant.
Ce que contient chaque note de leçon (généré, zéro token)
Frontmatter (tags, leçon, durée, lien cours) · MP4 embarquée · Objectif · idée reçue · Idées clés (des post-it note) · Vérifiez-vous (du beat Retrieval pause) · transcription pliée · ← précédent · Index du cours · suivant →.
Fichiers
scripts/ : build_course.py (point d'entrée) · render.py (script + scènes → HTML intermédiaire avec audio et timeline) · export_mp4.py (HTML → MP4) · make_notes.py (notes + MOC) · player.html (modèle intermédiaire ; aussi un lecteur hors ligne utilisable) · prelude.d2 (classes, tailles de police) · setup.sh. Caches : scripts/.cache/ (clips vocaux, diagrammes ; peut être supprimé).