Communitygithub.com

aleksanderstevens191-sudo/course-video-skill

Convierte el material propio del estudiante (transcripciones de clases, diapositivas, apuntes, problemas) en videos de estudio narrados y animados, con gráficos, ejercicios resueltos, cuestionarios, subtítulos, efectos de sonido y escenas 3D opcionales en Blender. Cada número del video debe provenir del material del curso; un verificador lo garantiza. Úsalo cuando te pidan crear videos de estudio o repaso a partir de sus clases o materiales.

¿Qué es course-video-skill?

Esta skill transforma los materiales de curso de un estudiante (transcripciones, diapositivas, apuntes, sets de problemas) en videos de estudio narrativos y animados. Su regla fundamental es que cada número, ejemplo y afirmación debe provenir exclusivamente del material del estudiante, sin inventar nada. La skill soporta gráficos, ejercicios resueltos, cuestionarios, subtítulos, efectos de sonido y escenas 3D opcionales con Blender. Un verificador integrado (`check_sources.py`) examina cada número en el video contra las fuentes, y el flujo incluye la escritura de un guion en JSON, construcción con voz y temporización, y renderizado final a 1080p. Es ideal para estudiantes que necesitan repasar para exámenes con el contenido exacto de su profesor, y funciona en cualquier sistema con Python y ffmpeg, con soporte opcional para Blender.

Compatible con~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/aleksanderstevens191-sudo/course-video-skill/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

Video de curso

Conviertes los materiales del curso del estudiante en videos de estudio. La regla que distingue a esta skill:

Cada número, ejemplo y afirmación proviene del material del curso del estudiante. Nada se inventa. Los estudiantes usan estos videos para estudiar para exámenes calificados por su profesor. Un ejemplo "más bonito" con números inventados, una fórmula con notación diferente o un hecho externo al curso es un error, incluso si es correcto en economía/física/etc.

0. Requisitos (verificar una vez)

python3 -m pip install -r requirements.txt && python3 -m playwright install chromium
ffmpeg -version | head -1          # brew install ffmpeg  /  apt install ffmpeg

Opcional: Blender 4.2+ para escenas 3D y el presentador mascota (BLENDER=/path/to/blender si no está en PATH), pdftotext (poppler) o pip install pypdf para leer diapositivas PDF, openai-whisper para transcribir grabaciones, XAI_API_KEY para la voz Grok (de lo contrario se usa la voz neuronal gratuita de Microsoft).

1. Recopilar las fuentes

Crea una carpeta <curso>/sources/ y coloca solo material del curso en ella: transcripciones de clases (.txt/.srt/.vtt), diapositivas (.pdf o texto exportado), apuntes del estudiante, sets de problemas, exámenes de práctica.

  • Grabación sin transcripción → whisper lecture.mp4 --model base --output_format txt --output_dir sources/
  • .docx → textutil -convert txt file.docx (macOS) o pandoc file.docx -t plain -o file.txt
  • Pregunta al estudiante qué clases/temas debe cubrir el video. No añadas material de otras semanas a menos que se te pida.

Lee las fuentes por completo antes de escribir nada. Anota la notación exacta del profesor, términos, ejemplos resueltos y números.

2. Escribir el guion (JSON de contenido)

Escribe <curso>/<nombre>.json siguiendo engine/SCHEMA.md (tipos visuales, palabras clave, formato de cuestionario, límites de diseño). examples/lemonade/ es un ejemplo pequeño completo.

Reglas:

  • Ejemplos: usa los ejemplos resueltos de la clase con los números de la clase. Si la clase usa "precio $4, 3 unidades", el video usa "precio $4, 3 unidades", no "precio $10, 5 unidades".
  • Cuestionarios: tómalos de los problemas de práctica del curso, preguntas de clicker o ejemplos resueltos. Si escribes una pregunta nueva, constrúyela solo con números de las fuentes, e indícalo en la etiqueta del cuestionario ("Práctica", no "Pregunta de examen").
  • Números derivados (un total que calculaste, una diferencia) están bien, pero declara cada uno en el mapa "derived" de nivel superior con la aritmética, usando solo números de las fuentes: "derived": {"16": "4 * 4", "-6": "120 - 126"}.
  • Conteos pequeños que no sean datos ("Tres cosas para recordar", "Paso 2") van en "allow": ["3"]. 0 y 1 siempre están permitidos.
  • Notación y términos: usa los del profesor (si la clase escribe "MR = MC", no cambies a "∂R/∂q").
  • Si un hecho que el video necesita no está en las fuentes, detente y pregúntale al estudiante por el material, o déjalo fuera. Nunca llenes el vacío con conocimiento general.
  • La narración (say) está escrita para el oído: palabras, no símbolos ("4 por 4 es 16 dólares").

3. Verificar cada número contra las fuentes (obligatorio, antes de construir)

python3 tools/check_sources.py <curso>/<nombre>.json <curso>/sources --report <curso>/<nombre>.sources.md

Extrae cada número de la narración, texto en pantalla, opciones de cuestionario y etiquetas de escenas 3D, y encuentra cada uno en las fuentes (dígitos o palabras escritas, ej. "ciento veinte"). Los números derivados se recalculan y se verifican sus operandos. Debe salir con código 0 antes de construir. Para cada problema reporta:

  • el número es un error tipográfico o inventado → corrige el guion para usar el número de la fuente;
  • es un cálculo real → agrégalo a "derived";
  • está en las fuentes en una forma que el verificador no detectó (ej. en una imagen) → pide al estudiante que confirme, luego agrégalo a "derived" o "allow" con una nota en tu respuesta.

Luego lee tú mismo la sección de Evidencia del informe, verificando por muestreo que cada número se use con el mismo significado que en la fuente (el verificador empareja valores, no significados: "$40" el precio vs. "40 unidades" la cantidad).

4. Construir y renderizar

cd engine
python3 build.py ../<curso>/<nombre>.json              # voz, temporización, subtítulos, música (TTS=xai XAI_API_KEY=... para Grok)
python3 lint.py build/<video-id>/spec.json            # visuales que llegan tarde
python3 qa.py <video-id>                              # capturas de cada beat + hojas de contacto: MÍRALAS
OUT=../out python3 render.py <video-id> --workers 6   # renderizado completo 1080p -> ../out/<video-id>.mp4 + .srt

Mira las hojas de contacto de QA antes de renderizar: texto superpuesto, pantallas vacías, números incorrectos en pantalla.

5. Opcional: escenas 3D, mascota, efectos de sonido

Un beat con "v": {"type": "clip", "scene": "<nombre>"} reproduce una escena de Blender desde engine/blender/scene_defs/<nombre>.py (ver el docstring en engine/blender/scenelib.py; market.py y safe.py son ejemplos completos, escritos para un curso de economía, por lo que sus etiquetas llevan los números de ese curso. Cambia las etiquetas para que coincidan con tus fuentes). Las etiquetas de escenas también son verificadas por check_sources.py.

cd engine
python3 blend.py prep <video-id>                         # línea de tiempo de mascota + entradas por escena
python3 blender/stills.py <scene> --dry                  # detecta errores rápido, luego sin --dry para imágenes fijas
python3 blend.py clips <video-id>                        # renderiza las escenas 3D (lento: minutos por escena)
python3 blend.py mascot <video-id> && python3 blend.py pack <video-id>
python3 sfx.py mix <video-id>                            # efectos de sonido debajo de la narración
OUT=../out python3 blend.py comp <video-id>              # -> ../out/<video-id>-3d.mp4
OUT=../out python3 blend.py site <id1>,<id2> --title "Mi curso" --out ../out/site   # una página web con capítulos

El renderizado es lento y consume mucho espacio en disco (varios GB de fotogramas por video mientras se ejecuta). Verifica el espacio libre primero, renderiza una escena a la vez en laptops y mantén la máquina despierta.

6. Entrega

Informa al estudiante: dónde está el video, cuánto dura, qué clases cubre y el resultado de la verificación de fuentes (números verificados, cualesquiera derivados o permitidos). Si algo en las fuentes era ambiguo, indica qué supusiste. Recuérdales que el video es una ayuda de estudio construida a partir de sus materiales, no un reemplazo de la clase, y que los materiales del curso pueden no ser de su propiedad para publicar: verifica antes de publicar un video públicamente.

Skills relacionados