Communitygithub.com

master-class-render

Convierte guiones de lecciones master-class en videos narrados con diagramas dibujados a mano (MP4, 1080p, subtítulos incrustados, voz local Kokoro) más notas para Obsidian y un MOC del curso.

¿Qué es master-class-render?

Esta habilidad transforma guiones de lecciones (archivos `.script.md`) producidos por la habilidad `master-class` en videos educativos completos con diagramas estilo dibujo a mano, narración generada localmente y subtítulos quemados. El proceso funciona completamente sin conexión: D2 genera los diagramas, Kokoro-82M sintetiza la voz, Chromium captura cada fotograma y ffmpeg codifica el MP4 final. También genera automáticamente notas de lección para Obsidian con metadatos, objetivo, ideas clave, preguntas de autoevaluación y transcripción plegable, más un MOC (Mapa de Contenido) del curso. Soporta múltiples idiomas (inglés y español con distintas voces) y se integra con repositorios sincronizados como OneDrive. Es ideal para creadores de contenido técnico que desean producir materiales de video atractivos sin depender de servicios externos, manteniendo el control total sobre los datos y reduciendo costos de tokens.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/carlos-carvajal-slalom/master-class-skills/tree/HEAD/master-class-render

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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.
  • # @continue extiende 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 @at dentro 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 (alternativas am_puck, bm_george --lang en-gb); Español --voice em_alex --lang es (femenina: ef_dora).
  • --only 03,07 reconstruye lecciones seleccionadas (las notas siempre se regeneran para todas). --notes-only regenera 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 --tags con 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>.png Verifica: 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 @continue y resume los pasos anteriores en un recuadro muted.
  • 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).

Skills relacionados