¿Qué hace chalk-roster?
Los cortos de tiza y líneas se desmoronan cuando el gorro cambia de color a mitad del episodio, un objeto aparece de la nada o el gancho llega en el segundo doce. chalk-roster es una puerta de continuidad previa a la renderización: bloquea el elenco y el estilo una sola vez, escribe los ritmos cronometrados, ejecuta el verificador y solo entonces gasta el presupuesto de generación.
Cuándo usarlo
- Cortos animados sin rostro / de figuras de palitos / arte lineal / estilo tiza con un elenco recurrente
- Explicadores de varias escenas donde la misma silueta debe mantenerse reconocible
- Trabajo en series donde el estilo debe ser consistente entre episodios
- Cualquier plan que de otro modo saltaría directamente a indicaciones por toma
No lo uses para edición de tiempo real de acción en vivo, cortes bloqueados por música, desglose de mezcla de sonido, bloqueo de poses en fotos humanas o paquetes de stickers de chat — esas son tareas diferentes.
Idea central
- Tarjeta de roster (congelada): canal + bloqueo de estilo + miembros del elenco con marcadores fijos y listas de prohibición.
- Hoja de ritmos: tomas ordenadas con duración, elenco presente, acción (sin inactividad), mapa de utilería, transferencias opcionales, recuento de palabras de VO, bandera de gancho.
- Puerta:
chalkroster.py check→ ENVIAR / REPARAR / MANTENER.
Veredictos
| Veredicto | Significado | ¿Generar clips? |
|---|---|---|
ENVIAR | Continuidad limpia | Sí |
REPARAR | Problemas suaves (densidad de VO, dirección del movimiento, redacción de prohibiciones) | Corrige los ritmos, luego vuelve a verificar |
MANTENER | Fallos graves (elenco desconocido, objeto que salta, sin gancho, estilo incompleto) | No generar |
Pasos
- Copia
templates/roster.json→roster.json. Rellenastyle(relación de aspecto, grosor de línea, relleno de cabeza, regla de extremidades, regla de fondo, límite de acentos) ycast(id, marcadores ≥1, prohibiciones). - Copia
templates/beats.json→beats.json. Una toma por fila; marca el gancho temprano; lista los poseedores de objetos; registra cada transferencia bajotransferscontransfer: true. - Linter:
python3 scripts/chalkroster.py lint roster.json beats.json - Puerta:
python3 scripts/chalkroster.py check roster.json beats.json - Solo en
ENVIAR: expande cada toma en las indicaciones de tu generador, repitiendo los marcadores congelados textualmente para cada miembro del elenco que aparezca. - Si
REPARAR/MANTENER: repara los problemas listados; nunca “aproximes” un cambio de marcador sin un evento de transferencia.
Forma del 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"]
}
]
}
Forma del beat
Cada toma necesita duration_s, action y generalmente cast. Los objetos son un mapa prop → holder_id|null. Cambiar un poseedor o un marcador requiere una transferencia explícita.
Bandas de densidad de VO (palabras/segundo): Inglés 1.8–2.9, Chino 3.2–5.2. El gancho debe llegar antes de hook_deadline_s (por defecto 5).
Ejemplos
- Episodio limpio de 30s:
examples/cache-lie-roster.json+examples/cache-lie-beats.json→ENVIAR. - Salto de objeto:
examples/broken-prop-jump-beats.jsoncontra el mismo roster →MANTENERhasta que se registre una transferencia. - Incorporado:
python3 scripts/chalkroster.py demo
Consejos
- Los marcadores son palabras sencillas (“red beanie”), no códigos hex ni recetas de anatomía.
- Un cambio de silueta = nuevo id de elenco, no una edición silenciosa de marcador.
- Mantén los colores de acento ≤
max_accent_colors; nómbralos con lenguaje ordinario. - Modo serie: establece
channel.lock_style_across_episodesy manténstyle.fingerprintidéntico entre episodios. - Las figuras de tiza inactivas fallan la puerta — cada toma necesita una
actionconcreta.