Communitygithub.com

fangdididi/chalk-roster

Antes de generar en masa animaciones de figuras de palitos, arte lineal o estilo tiza, congela un roster de estilo y elenco, una hoja de ritmos cronometrada, y comprueba la continuidad (marcadores, utilería, gancho, densidad de VO) para decidir entre ENVIAR / REPARAR / MANTENER. Úsalo al planificar episodios de stick sin rostro para YouTube, explicadores de varias escenas con líneas o cualquier elenco de tiza que no deba cambiar entre tomas.

¿Qué es chalk-roster?

**chalk-roster** es una puerta de continuidad previa a la renderización diseñada para animaciones de estilo tiza y líneas. Evita errores comunes como cambios de color en accesorios entre escenas o la aparición repentina de objetos, garantizando que el elenco y el estilo se mantengan coherentes en todo el episodio. La herramienta funciona con un sistema de tres fases: una tarjeta de roster que congela el canal, estilo y elenco con marcadores y prohibiciones fijos; una hoja de ritmos que define cada toma con duración, acción, utilería y banderas de gancho y VO; y una verificación final (`chalkroster.py check`) que emite un veredicto de ENVIAR (continuidad limpia), REPARAR (problemas suaves como densidad de VO) o MANTENER (fallos graves como elenco desconocido o utilería teletransportada). Soporta principalmente animaciones de figuras de palitos sin rostro, explicadores de varias escenas y series donde el estilo debe ser consistente entre episodios. No está diseñado para edición de tiempo real, mezcla de sonido o posado de fotos humanas. Su uso implica copiar plantillas JSON de roster y beats, llenar los datos, ejecutar el linter y luego la verificación; solo tras obtener 'ENVIAR' se deben expandir las tomas en prompts para el generador, repitiendo los marcadores congelados de cada miembro del elenco.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿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

  1. Tarjeta de roster (congelada): canal + bloqueo de estilo + miembros del elenco con marcadores fijos y listas de prohibición.
  2. 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.
  3. Puerta: chalkroster.py check → ENVIAR / REPARAR / MANTENER.

Veredictos

VeredictoSignificado¿Generar clips?
ENVIARContinuidad limpiaSí
REPARARProblemas suaves (densidad de VO, dirección del movimiento, redacción de prohibiciones)Corrige los ritmos, luego vuelve a verificar
MANTENERFallos graves (elenco desconocido, objeto que salta, sin gancho, estilo incompleto)No generar

Pasos

  1. Copia templates/roster.json → roster.json. Rellena style (relación de aspecto, grosor de línea, relleno de cabeza, regla de extremidades, regla de fondo, límite de acentos) y cast (id, marcadores ≥1, prohibiciones).
  2. Copia templates/beats.json → beats.json. Una toma por fila; marca el gancho temprano; lista los poseedores de objetos; registra cada transferencia bajo transfers con transfer: true.
  3. Linter: python3 scripts/chalkroster.py lint roster.json beats.json
  4. Puerta: python3 scripts/chalkroster.py check roster.json beats.json
  5. Solo en ENVIAR: expande cada toma en las indicaciones de tu generador, repitiendo los marcadores congelados textualmente para cada miembro del elenco que aparezca.
  6. 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.json contra el mismo roster → MANTENER hasta 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_episodes y mantén style.fingerprint idéntico entre episodios.
  • Las figuras de tiza inactivas fallan la puerta — cada toma necesita una action concreta.

Skills relacionados