Master class render
Entrada: <source>/scripts/NN - Title.script.md (escrito por master-class).
Você escreve: <source>/scenes/NN.scenes.md (texto D2, sem coordenadas, sem temporizações).
Um comando produz: <videos>/NN - Title.mp4 + <notes>/NN - Title.md + <notes>/<MOC>.md.
Tudo roda localmente: D2 desenha diagramas (estilo sketch), Kokoro-82M fala, a temporização vem do áudio real, Chromium captura um quadro por mudança visual, ffmpeg codifica. Nada é enviado para terceiros. Os únicos tokens gastos são os arquivos de cenas (~1× o tamanho do script).
0 · Configuração (uma vez por máquina; reexecutar é seguro)
bash ~/.copilot/skills/master-class-render/scripts/setup.sh
Instala d2, ffmpeg, uv (Homebrew), um venv em scripts/.venv com kokoro-onnx, soundfile e playwright (Chromium), e o modelo Kokoro em ~/.cache/kokoro (~350 MB). Se scripts/.venv/bin/python existir, a configuração está concluída.
1 · Escreva as cenas
Leia references/scenes-guide.md e os exemplos aprovados primeiro: 01, 05, 08. Cada um está emparelhado com seu script em ~/.copilot/skills/master-class/examples/, para que você veja exatamente como cada Tela se tornou um diagrama. Esta etapa funciona bem em um modelo pequeno/rápido: trabalhe uma lição por vez e deixe o validador dizer quando estiver correto. Em seguida, para cada script, um ## Beat N + um bloco ```d2 por batida, traduzindo a descrição da Tela da batida:
# @at "frase"(3–7 palavras copiadas literalmente da narração daquela batida) revela o que vem a seguir quando o narrador diz isso. O layout final é calculado uma vez, então nada salta; novas peças brilham brevemente.# @continueestende o diagrama da batida anterior.- Classes:
model,code,tool,data,person,bad,good,note(adesivo com a conclusão; estes se tornam as Ideias-chave da nota da lição),muted,wrong. - O guia lista as pegadinhas do D2 (
\$, sem@atdentro de blocos{}, tabelas|||md, mudanças de estilo não animam).
Valide cada lição à medida que avança (deve imprimir ok: e nenhum 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
Muitas lições → divida entre subagentes paralelos (≈4 lições cada) com o guia e os exemplos.
2 · Construa o 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 "<Lab name> · Master class" \
--course "<rótulo exibido no canto superior esquerdo do vídeo>" \
--tags "course/<course-tag>,section/labs,topic/<x>,type/lesson" \
--intro "Um parágrafo para o MOC: do que o curso é construído ([[links das notas de origem]]) e sua intenção." \
--voice am_michael --lang en-us
- Idioma/voz: Inglês
--voice am_michael --lang en-us(alternativasam_puck,bm_george --lang en-gb); Espanhol--voice em_alex --lang es(feminino:ef_dora). --only 03,07reconstrói lições selecionadas (as notas são sempre regeneradas para todas).--notes-onlyregenera notas sem vídeo.- ~15 s por lição após o cache da voz (primeira síntese ≈ 1 min por lição). As saídas são codificadas em uma pasta temporária e copiadas, pois escrever diretamente em pastas sincronizadas com OneDrive resulta em timeout.
- Combine
--tagscom as tags usadas pelas notas de origem.
3 · Verifique antes de relatar
- A construção imprimiu
ok:para cada lição e nenhum!! … @at frase(s) não encontrada(s). - Extraia 2 quadros de um ou dois MP4s e examine-os (use um nome de arquivo novo a cada vez; visualizadores de imagem fazem cache):
ffmpeg -v error -ss 120 -i "<mp4>" -frames:v 1 -vf scale=1280:-1 /tmp/mc_check_<n>.pngVerifique: o diagrama está legível (não uma faixa minúscula), a legenda corresponde, a batida correta é mostrada. - Diagrama muito pequeno? O renderizador já tenta a outra direção de layout automaticamente; se ainda assim estiver pequeno, divida o diagrama da batida ou remova
@continuee resuma etapas anteriores em uma caixamuted. - Abra a nota do MOC e uma nota de lição: vídeo embutido
![[NN - Title.mp4]], Objetivo, Ideias-chave, Verifique-se (pergunta + resposta dobrada), Transcrição dobrada, links anterior/próximo.
O que cada nota de lição contém (gerado, zero tokens)
Frontmatter (tags, lição, duração, link do curso) · MP4 embutido · Objetivo · equívoco · Ideias-chave (de adesivos note) · Verifique-se (da batida Pausa de recuperação) · transcrição dobrada · ← anterior · Índice do curso · próximo →.
Arquivos
scripts/: build_course.py (ponto de entrada) · render.py (script + cenas → HTML intermediário com áudio e linha do tempo) · export_mp4.py (HTML → MP4) · make_notes.py (notas + MOC) · player.html (template intermediário; também um reprodutor offline utilizável) · prelude.d2 (classes, tamanhos de fonte) · setup.sh. Caches: scripts/.cache/ (clipes de voz, diagramas; seguro excluir).