Communitygithub.com

fangdididi/chalk-roster

Antes de gerar em massa curtas animados estilo palito, line-art ou giz, congele um roster de elenco e estilo e uma pauta cronometrada; então avalie a continuidade (marcadores, adereços, gancho, densidade de VO) para ENVIAR / CORRIGIR / SEGURAR. Use ao planejar episódios de stick figure para o YouTube sem rosto, explicadores multi-cena em line-art ou qualquer elenco de giz que não possa variar entre takes.

O que é chalk-roster?

O **chalk-roster** é um pré-processador que atua como um portão de continuidade para animações curtas em estilo stick figure, line-art ou giz. Ele é ideal para criadores que produzem episódios para o YouTube sem rosto ou vídeos explicativos com múltiplas cenas, onde o elenco e os adereços precisam permanecer consistentes. A ferramenta força o usuário a congelar um roster de elenco (com marcadores visuais fixos e itens proibidos) e um estilo visual definitivo, além de uma pauta de batidas cronometrada com ações, adereços, transferências e pontos de gancho. Em seguida, executa um verificador que produz três resultados: **ENVIAR** (continuidade limpa), **CORRIGIR** (problemas suaves como densidade de narração) ou **SEGURAR** (quebras graves como adereço teletransportado). Somente no estado ENVIAR o usuário deve gastar o orçamento de geração de prompts. O sistema inclui linting, verificação de densidade de VO, detecção de transferências de marcadores e um modo de série para travar o estilo entre episódios. Suporta os formatos de roster e pauta em JSON, com exemplos e um comando de demonstração integrado.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fangdididi/chalk-roster/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

O que chalk-roster faz?

Curta-metragens em giz e stick figure se despedaçam quando o gorro muda de cor no meio do episódio, um adereço teletransporta ou o gancho chega no segundo doze. chalk-roster é um portão de continuidade pré-renderização: trave o elenco e o estilo uma vez, escreva as batidas cronometradas, execute o verificador e só então gaste o orçamento de geração.

Quando usar

  • Curtas animados sem rosto / stick figure / line-art / giz com elenco recorrente
  • Explicadores multi-cena onde a mesma silhueta deve permanecer reconhecível
  • Trabalhos em série onde o estilo deve servir como impressão digital entre episódios
  • Qualquer plano que pularia direto para prompts por take

Não use para temporização de edição de live-action, cortes travados em música, desmontagem de mixagem de som, bloqueio de poses de fotos humanas ou pacotes de figurinhas de chat — esses são trabalhos diferentes.

Ideia central

  1. Cartão de roster (congelado): canal + trava de estilo + membros do elenco com marcadores fixos e listas de proibição.
  2. Pauta de batidas: takes ordenados com duração, elenco presente, ação (sem inatividade), mapa de adereços, transferências opcionais, contagens de palavras de VO, sinalizador de gancho.
  3. Portão: chalkroster.py check → ENVIAR / CORRIGIR / SEGURAR.

Verdictos

VerdictoSignificadoGerar clipes?
ENVIARContinuidade limpaSim
CORRIGIRProblemas suaves (densidade de VO, direção de viagem, redação proibida)Corrigir batidas, depois re-verificar
SEGURARQuebras graves (elenco desconhecido, adereço pulado, sem gancho, estilo incompleto)Não gerar

Passos

  1. Copie templates/roster.json → roster.json. Preencha style (proporção, espessura de linha, preenchimento de cabeça, regra de membros, regra de fundo, limite de cores de destaque) e cast (id, marcadores ≥1, proibidos).
  2. Copie templates/beats.json → beats.json. Um take por linha; marque o gancho inicial; liste os portadores de adereços; registre cada passagem em transfers com transfer: true.
  3. Lint: python3 scripts/chalkroster.py lint roster.json beats.json
  4. Portão: python3 scripts/chalkroster.py check roster.json beats.json
  5. Somente em ENVIAR: expanda cada take nos prompts do seu gerador, repetindo os marcadores congelados literalmente para cada membro do elenco que apareça.
  6. Se CORRIGIR / SEGURAR: corrija os problemas listados; nunca "aproxime" uma alteração de marcador sem um evento de transferência.

Formato do roster

{
  "channel": {"name": "chalk-bytes", "lock_style_across_episodes": true},
  "vo_lang": "en",
  "style": {
    "aspect_ratio": "9:16",
    "line_weight": "medium",
    "head_fill": "hollow",
    "limb_rule": "two-arms-two-legs",
    "bg_rule": "flat-black",
    "max_accent_colors": 3,
    "accent_colors": ["vivid red", "electric blue", "warm gold"],
    "fingerprint": "hollow-head/medium-line/flat-black/3-accent"
  },
  "cast": [
    {
      "id": "guide",
      "role": "narrator-avatar",
      "silhouette": "tall-thin",
      "markers": ["red beanie", "yellow shirt"],
      "forbid": ["photoreal face", "extra arms"]
    }
  ]
}

Formato da pauta

Cada take precisa de duration_s, action e geralmente cast. Adereços são um mapa prop → holder_id|null. Mudar um portador ou um marcador exige uma transferência explícita.

Faixas de densidade de VO (palavras/segundo): Inglês 1.8–2.9, Chinês 3.2–5.2. O gancho deve chegar até hook_deadline_s (padrão 5).

Exemplos

  • Episódio limpo de 30s: examples/cache-lie-roster.json + examples/cache-lie-beats.json → ENVIAR.
  • Adereço teletransportado: examples/broken-prop-jump-beats.json contra o mesmo roster → SEGURAR até que uma transferência seja registrada.
  • Embutido: python3 scripts/chalkroster.py demo

Dicas

  • Marcadores são palavras simples ("red beanie"), não códigos hexadecimais ou receitas anatômicas.
  • Uma mudança de silhueta = novo id de elenco, não uma edição silenciosa de marcador.
  • Mantenha as cores de destaque ≤ max_accent_colors; nomeie-as com linguagem comum.
  • Modo série: defina channel.lock_style_across_episodes e mantenha style.fingerprint idêntico entre episódios.
  • Figuras de giz inativas falham no portão — cada take precisa de uma action concreta.

Habilidades Relacionadas