master-class render
Entrada: <source>/scripts/NN - Title.script.md (escrito por master-class).
Tú escribes: <source>/scenes/NN.scenes.md (texto D2, sin coordenadas, sin temporización).
Un comando produce: <videos>/NN - Title.mp4 + <notes>/NN - Title.md + <notes>/<MOC>.md.
Todo se ejecuta localmente: D2 diseña los diagramas (estilo boceto), Kokoro-82M habla, la temporización proviene del audio real, Chromium captura un fotograma por cada cambio visual, ffmpeg codifica. No se envía nada a terceros. Los únicos tokens gastados son los archivos de escenas (~1× el tamaño del guion).
0 · Configuración (una vez por máquina; es seguro volver a ejecutar)
bash ~/.copilot/skills/master-class-render/scripts/setup.sh
Instala d2, ffmpeg, uv (Homebrew), un venv en scripts/.venv con kokoro-onnx, soundfile y playwright (Chromium), y el modelo Kokoro en ~/.cache/kokoro (~350 MB). Si scripts/.venv/bin/python existe, la configuración está completa.
1 · Escribe las escenas
Lee primero references/scenes-guide.md y los ejemplos aprobados: 01, 05, 08. Cada uno está emparejado con su guion en ~/.copilot/skills/master-class/examples/, para que puedas ver exactamente cómo cada Pantalla se convirtió en un diagrama. Este paso funciona bien con un modelo pequeño/rápido: trabaja una lección a la vez y deja que el validador te diga cuándo está correcto. Luego, para cada guion, un ## Beat N + un bloque ```d2 por beat, traduciendo la descripción de la Pantalla del beat:
# @at "frase"(3–7 palabras copiadas textualmente de la narración de ese beat) revela lo que sigue cuando el narrador lo dice. El diseño final se calcula una sola vez, por lo que nada salta; las piezas nuevas brillan brevemente.# @continueextiende el diagrama del beat anterior.- Clases:
model,code,tool,data,person,bad,good,note(nota adhesiva con la conclusión; estas se convierten en las Ideas clave de la nota de lección),muted,wrong. - La guía enumera los problemas comunes de D2 (
\$, no@atdentro de bloques{}, tablas|||md, los cambios de estilo no se animan).
Valida cada lección a medida que avanzas (debe imprimir ok: y sin warning:):
cd ~/.copilot/skills/master-class-render/scripts && export PATH=/opt/homebrew/bin:$PATH
.venv/bin/python render.py "<source>/scripts/NN - Title.script.md" "<source>/scenes/NN.scenes.md" /tmp/check.html
Muchas lecciones → dividir entre subagentes paralelos (≈4 lecciones cada uno) con la guía y el ejemplo.
2 · Construye el curso
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 "<Nombre del laboratorio> · Master class" \
--course "<etiqueta mostrada arriba a la izquierda en el video>" \
--tags "course/<tag-del-curso>,section/labs,topic/<x>,type/lesson" \
--intro "Un párrafo para el MOC: de qué está hecho el curso ([[enlaces a notas fuente]]) y su propósito." \
--voice am_michael --lang en-us
- Idioma/voz: Inglés
--voice am_michael --lang en-us(alternativasam_puck,bm_george --lang en-gb); Español--voice em_alex --lang es(femenina:ef_dora). --only 03,07reconstruye lecciones seleccionadas (las notas siempre se regeneran para todas).--notes-onlyregenera notas sin video.- ~15 s por lección después de que la voz esté en caché (primera síntesis ≈ 1 min por lección). Las salidas se codifican en una carpeta temporal y se copian, porque escribir directamente en carpetas sincronizadas con OneDrive provoca tiempos de espera.
- Haz coincidir
--tagscon las etiquetas usadas por las notas fuente.
3 · Verifica antes de informar
- La construcción imprimió
ok:para cada lección y sin!! … @at frase(s) no encontrada(s). - Extrae 2 fotogramas de uno o dos MP4 y míralos (usa un nombre de archivo nuevo cada vez; los visores de imágenes guardan caché):
ffmpeg -v error -ss 120 -i "<mp4>" -frames:v 1 -vf scale=1280:-1 /tmp/mc_check_<n>.pngVerifica: el diagrama es legible (no una tira diminuta), el subtítulo coincide, el beat correcto se muestra. - ¿Diagrama demasiado pequeño? El renderizador ya intenta la otra dirección de diseño automáticamente; si aún es pequeño, divide el diagrama del beat o elimina
@continuey resume los pasos anteriores en un recuadromuted. - Abre la nota MOC y una nota de lección: video incrustado
![[NN - Title.mp4]], Objetivo, Ideas clave, Compruébalo tú mismo (pregunta + respuesta plegada), Transcripción plegada, enlaces anterior/siguiente.
Qué contiene cada nota de lección (generada, cero tokens)
Frontmatter (etiquetas, lección, duración, enlace al curso) · MP4 incrustado · Objetivo · idea errónea · Ideas clave (de las notas adhesivas note) · Compruébalo tú mismo (del beat Pausa de recuperación) · transcripción plegada · ← anterior · Índice del curso · siguiente →.
Archivos
scripts/: build_course.py (punto de entrada) · render.py (guion + escenas → HTML intermedio con audio y línea de tiempo) · export_mp4.py (HTML → MP4) · make_notes.py (notas + MOC) · player.html (plantilla intermedia; también un reproductor offline útil) · prelude.d2 (clases, tamaños de fuente) · setup.sh. Cachés: scripts/.cache/ (clips de voz, diagramas; se pueden eliminar sin problema).