Communitygithub.com

chalkreel — objetivo entra, vídeo explicativo acessível sai

Transforma um objetivo de aprendizagem mensurável em um curto vídeo explicativo desenhado com código, com narração, legendas alinhadas, transcrição, notas de áudio-descrição, rastreabilidade de afirmações com fontes e controle de qualidade baseado nos princípios multimídia de Mayer. Quatro portões de aprovação humana. Sem modelos generativos de vídeo ou imagens de arquivo.

O que é chalkreel — objetivo entra, vídeo explicativo acessível sai?

O chalkreel é uma skill voltada para profissionais de educação (designers instrucionais, desenvolvedores de e-learning e educadores) que precisam criar vídeos explicativos de aprendizagem verdadeiramente eficazes, baseados em um objetivo mensurável, e não em um tópico genérico. Diferente de explicadores comuns otimizados para engajamento, o chalkreel gerencia a carga cognitiva do aluno seguindo os princípios multimídia de Mayer, gerando acessibilidade (legendas, transcrição, notas de áudio-descrição) como entregáveis de primeira classe, e garantindo que cada afirmação factual tenha uma fonte rastreável. O pipeline é composto por scripts autônomos (Node.js) e um processo de 4 portões de aprovação humana: objetivo + mapa de batidas, roteiro, estilo visual e corte final. Os vídeos são gerados por código (Remotion, SVG, CSS), jamais por modelos generativos ou banco de imagens, o que torna cada quadro revisável, diffável e reproduzível. A skill suporta TTS local (kokoro-82m) ou de terceiros, desde que retorne timestamps por palavra, e inclui verificações rigorosas de qualidade (como lint de narração e de acessibilidade) que devem passar antes da entrega. O produto final inclui vídeo MP4, legendas SRT, transcrição HTML, notas para o instrutor e uma trilha de auditoria completa.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iwyusdaz/chalkreel/tree/main/skill

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que chalkreel — objetivo entra, vídeo explicativo acessível sai faz?

Você está produzindo um vídeo explicativo de aprendizagem. Diferente de explicadores otimizados para engajamento, um vídeo de aprendizagem parte de um objetivo mensurável, gerencia a carga cognitiva propositalmente (princípios multimídia de Mayer) e entrega artefatos de acessibilidade — legendas, transcrição, notas de áudio-descrição — como entregáveis de primeira classe, não como complementos. Cada afirmação factual na narração é rastreável até uma fonte.

Tudo o que o espectador ouve também deve ser visível ou legível. Tudo o que o aluno aprende deve ser rastreável. Nada é entregue sem um portão humano.

Regras rígidas

  1. Nenhum modelo generativo de vídeo. Nenhuma imagem de arquivo. Nenhum gerador de imagens para o conteúdo das cenas. Os quadros são desenhados em código (componentes Remotion, SVG, CSS). Isso mantém cada quadro revisável, diffável e reproduzível.
  2. Quatro portões humanos. Nunca prossiga além de um portão sem aprovação explícita registrada no log do projeto: PORTÃO 1 objetivo + mapa de batidas, PORTÃO 2 roteiro da narração, PORTÃO 3 estilo visual, PORTÃO 4 corte final.
  3. Rotule tudo que é sintético. Dados de exemplo construídos, temporizações simuladas e resultados de revisão por agente são rotulados como tal no próprio arquivo. Nunca apresente um artefato seco como uma saída real renderizada/TTS.
  4. Afirmações antes do roteiro. Notas de pesquisa com afirmações com fontes existem antes de a narração ser escrita, e nenhum número entra no roteiro sem uma linha no livro-razão.
  5. TTS local primeiro. A voz padrão é kokoro-82m (local, gratuita). TTS próprio é suportado; nunca chame um TTS em nuvem sem a chave configurada pelo usuário. Nenhum modelo local além do TTS que o usuário escolher.

Entradas

objective:    uma frase mensurável (ABCD — o portão do objetivo impõe isso)
audience:     quem está aprendendo e seu conhecimento prévio presumido
length:       duração alvo (padrão 60–120 s)
language:     idioma da narração (padrão en)

Rejeite tópicos. "Um vídeo sobre fotossíntese" não é uma entrada; execute scripts/objective-gate.mjs e itere com o usuário até que passe.

Pipeline

objective + audience + prior knowledge + length + language
  |
  +-- 1. PORTÃO DO OBJETIVO    objective-gate.mjs; reescrever tópico -> objetivo ABCD;
  |                             enquadramento visível ao aluno "você será capaz de...";
  |                             mapa de batidas segmentado conforme segmentação de Mayer (batidas de 10-30 s)
  |                             << PORTÃO 1: usuário aprova objetivo + mapa de batidas
  +-- 2. PESQUISA              extrair afirmações, encontrar fontes, escrever livro-razão de afirmações
  |                             (ids estilo claim-001; fontes com título/veículo/ano;
  |                             redação vaga preferida a estatísticas inventadas)
  +-- 3. NARRAÇÃO              roteiro por orçamento de segmento; passada de lint humanizador
  |                             (scripts/lint-narration.mjs deve sair com 0);
  |                             verificação de nível de leitura vs. público
  |                             << PORTÃO 2: usuário aprova roteiro
  +-- 4. COMPETIÇÃO DE ESTILO  renderizar a MESMA batida em 2-3 variantes de fundo/tema
  |                             com o template; usuário escolhe visualmente
  |                             << PORTÃO 3: usuário escolhe um estilo
  +-- 5. CONSTRUÇÃO            um componente de segmento Remotion por batida (template/);
  |                             TTS com timestamps por palavra (kokoro-82m padrão, BYO ok);
  |                             construir JSON de temporização {segments[].words[{w,start,end}]}
  +-- 6. ACESSIBILIDADE        make-srt.mjs (SRT alinhado por palavra), make-transcript.mjs
  |                             (HTML de transcrição), notas de áudio-descrição por
  |                             segmento, então a11y-lint.mjs DEVE passar
  +-- 7. CONTROLE DE QUALIDADE pontuar quadros renderizados + roteiro contra os
  |                             critérios escritos abaixo; escrever qc-report.md com rótulos de método
  |                             << PORTÃO 4: usuário revisa o corte final
  +-- entregar: video.mp4 + .srt + transcript.html + instructor-notes.md
      + livro-razão de afirmações + trilha completa (objetivo, pesquisa, narração,
      storyboard, temporização, relatório de QC)

Orçamentos de segmento

  • 10–30 s por segmento (segmentação de Mayer; limite rígido de 30 s sem autorização do usuário).
  • ~145 palavras por 60 s de narração; uma ideia por segmento.
  • Texto na tela: apenas rótulos e frases curtas (2–7 palavras), nunca a narração lida literalmente (princípio de redundância).
  • Cada segmento define: narração, um tipo de cena, texto na tela, nota de áudio-descrição, IDs de afirmações.

Padrões de TTS

  • Padrão: kokoro-82m, local. Voz: af_heart (ou escolha do usuário). Velocidade 1.0.
  • Capture timbres por palavra do TTS/alinhador no JSON de temporização. Se o TTS não puder emiti-los, alinhe com um alinhador forçado; nunca adivinhe temporizações — um alinhamento adivinhado faz as legendas se deslocarem, e a verificação de ida e volta detectará texto incompatível, mas não tempos desviados.
  • BYO TTS: qualquer mecanismo que retorne timbres no nível da palavra; documente o mecanismo e a voz no log do projeto.

Scripts (todos autônomos, node >=18, sem dependências)

ScriptPropósitoSair com 0 significa
scripts/objective-gate.mjs "<objective>"valida objetivo ABCDo objetivo é mensurável
scripts/lint-narration.mjs <script.txt>verificador de sinais de escrita de IA (executar antes do TTS)o roteiro soa humano o suficiente para gravar
scripts/make-srt.mjs <timing.json> --out x.srtSRT alinhado por palavra a partir do JSON de temporizaçãoSRT escrito
scripts/make-transcript.mjs --timing <timing.json> --storyboard <sb.json> --out t.htmlpágina de transcrição acessívelHTML escrito
scripts/a11y-lint.mjs <storyboard.json>"nenhuma informação apenas em áudio" + verificações de entregáveistoda afirmação da narração está na tela ou na transcrição/nas notas de AD

Amostras negativas vivem em examples/ (bad-narration.txt, bad-storyboard.json) — sempre verifique uma configuração nova executando os lints nelas e confirmando que ELES FALHAM.

Formatos de arquivo

timing.json — timbres por palavra (da alinhamento TTS):

{ "video": { "title": "...", "fps": 30 },
  "segments": [ { "id": "seg-01", "text": "...", "start": 0.0,
    "words": [ { "w": "Close", "start": 0.1, "end": 0.34 } ] } ] }

storyboard.json — um objeto por segmento:

{ "video": { "title": "...", "fps": 30, "width": 1920, "height": 1080,
    "srtEmitted": true, "transcriptEmitted": true, "claimsLedger": "caminho" },
  "segments": [ { "id": "seg-01", "title": "Ancoragem", "sceneKind": "statement",
    "startSec": 0, "durationSec": 18.2, "narration": "...",
    "visual": { "backdrop": "chalkboard", "description": "...",
                "onScreenText": ["Reler supera releitura"] },
    "audioDescriptionNote": "...", "claims": [] } ] }

sceneKind mapeia para um componente de template: statement, definition, timeline, cycle, list, caption. Adicione novos tipos no template, não como componentes avulsos dentro de um projeto.

Pacote de critérios de QC (pontue a saída renderizada CONTRA ISSO, por escrito)

Um agente de QC não "assiste" ao vídeo e opina. Ele pontua cada critério como aprovado/reprovado com uma observação citada. Verificações no nível do quadro precisam de quadros renderizados; verificações no nível do roteiro são executadas nos artefatos. Escreva o resultado em qc-report.md e rotule o método de revisão (ex.: "Revisão heurística por agente").

Nível do roteiro (executar sempre)

  1. Alinhamento com o objetivo — cada segmento avança o objetivo aprovado; tudo que não avança é cortado (princípio de coerência aplicado a metas).
  2. Rastreabilidade de afirmações — cada número, data ou descoberta nomeada na narração tem uma linha no livro-razão de afirmações com uma fonte. Falhe em qualquer fato órfão.
  3. Lint de narração — lint-narration.mjs sai com 0.
  4. Nível de leitura — frases com média inferior a ~17 palavras; nenhum termo técnico não explicado; verbos concretos em vez de abstrações.
  5. Pacote de acessibilidade — a11y-lint.mjs sai com 0; SRT e transcrição existem; nota de AD presente para cada segmento.

Nível do quadro (executar em quadros renderizados ou capturas de tela por segmento)

  1. Sinalização — o termo/número chave do momento é destacado visualmente (sublinhado de giz, cor, seta) exatamente enquanto é narrado.
  2. Coerência — nada decorativo na tela; cada elemento mapeia para uma ideia narrada; nenhuma música de fundo a menos que o usuário tenha solicitado.
  3. Redundância — o texto na tela não duplica a narração literalmente; são rótulos e frases curtas.
  4. Contiguidade espacial — os rótulos estão adjacentes ao que descrevem; sem caça ao tesouro legenda-gráfico dentro de um quadro.
  5. Contiguidade temporal — a revelação de um elemento é sincronizada com sua linha de narração (verificar contra timing.json), não mostrada antes ou depois.
  6. Legibilidade — linhas de giz contrastam com o fundo (>= 4,5:1 para equivalentes de texto na tela); nada cortado em 1920x1080 ou 1280x720.
  7. Orçamento de movimento — animações se estabilizam em 1,2 s; nada se move durante uma frase que introduz uma ideia diferente.

Pontue cada REPROVADO/APROVADO com evidência. Qualquer REPROVADO em 1–5 bloqueia o PORTÃO 4. Qualquer REPROVADO em 6–12 requer correção e re-renderização daquele segmento, ou aceitação explícita do usuário.

Padrões de estilo (competição do PORTÃO 3)

  • Fundo: chalkboard (verde-ardósia profundo, textura sutil, vinheta suave). Alternativas para a competição: paper (off-white quente, linhas de tinta), night (quase preto, única cor de destaque).
  • Paleta: branco-giz primário, um destaque (âmbar #FFC66D) para realces. Destaque apenas o que a sinalização exigir.
  • Tipo: grande (>= 64 px em 1080p), alto contraste; legendas no centro inferior com placa translúcida, máx. 2 linhas / 42 caracteres por linha.
  • Respeite o espectador: sem flashes (> 3 flashes/s proibido), movimento estabiliza rápido, barra de progresso mostra posição do capítulo.

Trilha de auditoria (commite tudo)

01-objective.md (+ saída do portão)     05-timing.json
02-research-notes.md                     06-subtitles.srt
03-narration.md                           07-claims-ledger.md
04-storyboard.json                        08-qc-report.md

A trilha de auditoria é tão produto quanto o vídeo: é o que torna o pipeline auditável por outro designer instrucional.

Limitações honestas (diga estas no log do projeto)

  • O QC do agente é revisão heurística por um modelo, não endosso de especialista.
  • Nenhuma afirmação de que uma saída é "instrucionalmente validada" — isso requer testes com aprendizes que esta skill não realiza.
  • Legendas alinhadas por palavra são tão boas quanto o alinhamento do TTS; verifique 10 dicas contra o áudio antes do PORTÃO 4.
  • Licenciamento de voz: as vozes do kokoro-82m têm seus próprios termos de uso; verifique antes da distribuição comercial.

Atribuição

Inspiração metodológica, sem código copiado: anything2explainer (PolyForm Noncommercial — método apenas, veja o ATTRIBUTION.md deste repositório), o padrão de fluxo de aprovação por portões do vox-director (MIT) e o conceito de lista de verificação de "sinais de escrita de IA" do blader/humanizer e da Wikipedia "Signs of AI writing" (o lint deste repositório é uma implementação independente).

Habilidades Relacionadas