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
- Cartão de roster (congelado): canal + trava de estilo + membros do elenco com marcadores fixos e listas de proibição.
- 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.
- Portão:
chalkroster.py check→ ENVIAR / CORRIGIR / SEGURAR.
Verdictos
| Verdicto | Significado | Gerar clipes? |
|---|---|---|
ENVIAR | Continuidade limpa | Sim |
CORRIGIR | Problemas suaves (densidade de VO, direção de viagem, redação proibida) | Corrigir batidas, depois re-verificar |
SEGURAR | Quebras graves (elenco desconhecido, adereço pulado, sem gancho, estilo incompleto) | Não gerar |
Passos
- Copie
templates/roster.json→roster.json. Preenchastyle(proporção, espessura de linha, preenchimento de cabeça, regra de membros, regra de fundo, limite de cores de destaque) ecast(id, marcadores ≥1, proibidos). - Copie
templates/beats.json→beats.json. Um take por linha; marque o gancho inicial; liste os portadores de adereços; registre cada passagem emtransferscomtransfer: true. - Lint:
python3 scripts/chalkroster.py lint roster.json beats.json - Portão:
python3 scripts/chalkroster.py check roster.json beats.json - Somente em
ENVIAR: expanda cada take nos prompts do seu gerador, repetindo os marcadores congelados literalmente para cada membro do elenco que apareça. - 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.jsoncontra o mesmo roster →SEGURARaté 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_episodese mantenhastyle.fingerprintidêntico entre episódios. - Figuras de giz inativas falham no portão — cada take precisa de uma
actionconcreta.