Communitygithub.com

fangdididi/chalk-roster

Avant de générer en masse des courts-métrages animés en stick-figure, line-art ou style craie, figez un registre de cast et de style ainsi qu'une feuille de rythme minutée, puis validez la continuité (marqueurs, accessoires, accroche, densité VO) pour obtenir la mention EXPÉDIER / CORRIGER / SUSPENDRE. À utiliser lors de la planification d'épisodes stick YouTube sans visage, d'explicateurs multi-scènes en line-art, ou de tout cast à la craie qui ne doit pas dériver entre les plans.

Qu'est-ce que chalk-roster ?

Ce skill agit comme un garde-fou de continuité avant génération. Il permet de verrouiller le casting et le style graphique d'une série de courts-métrages animés (stick-figure, line-art, style craie) via un fichier `roster.json`, puis de définir le minutage et les actions de chaque plan dans `beats.json`. Un script Python (`chalkroster.py check`) analyse ensuite la cohérence et retourne un verdict : `SHIP` (continuité propre, on peut générer), `FIX` (problèmes mineurs à corriger) ou `HOLD` (problèmes bloquants comme un accessoire qui se téléporte). Ceci évite les erreurs classiques comme un changement de couleur de bonnet entre deux plans ou une accroche mal placée dans le temps. Le skill prend en charge la détection de transferts de marqueurs, la densité vocale par langue et la vérification que chaque plan contient une action concrète.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait chalk-roster ?

Les courts-métrages en stick et à la craie se désagrègent quand le bonnet change de couleur en milieu d'épisode, qu'un accessoire se téléporte ou que l'accroche arrive à la douzième seconde. chalk-roster est une porte de continuité pré-rendu : verrouillez le casting et le style une fois, écrivez les temps minutés, exécutez le vérificateur, et seulement alors investissez le budget de génération.

Quand l'utiliser

  • Courts-métrages animés sans visage / stick / line-art / style craie avec un casting récurrent
  • Explicateurs multi-scènes où la même silhouette doit rester reconnaissable
  • Travail en série où le style doit servir d'empreinte digitale entre les épisodes
  • Tout plan qui autrement sauterait directement dans des prompts par plan

Ne pas utiliser pour le timing de montage en prise de vue réelle, les coupes verrouillées sur la musique, le démontage du mixage audio, le blocage de poses humaines avec photos, ou les packs d'autocollants de discussion — ce sont des tâches différentes.

Idée principale

  1. Fiche de registre (figée) : canal + verrouillage du style + membres du casting avec marqueurs fixes et listes d'interdiction.
  2. Feuille de rythme : plans ordonnés avec durée, cast présent, action (pas d'inactivité), carte des accessoires, transferts optionnels, nombre de mots VO, indicateur d'accroche.
  3. Porte : chalkroster.py check → EXPÉDIER / CORRIGER / SUSPENDRE.

Verdicts

VerdictSignificationGénérer les clips ?
EXPÉDIERContinuité propreOui
CORRIGERProblèmes légers (densité VO, direction de déplacement, formulation d'interdiction)Corriger les temps, puis revérifier
SUSPENDREProblèmes graves (cast inconnu, saut d'accessoire, pas d'accroche, style incomplet)Ne pas générer

Étapes

  1. Copier templates/roster.json → roster.json. Remplir style (rapport d'aspect, épaisseur de trait, remplissage de tête, règle des membres, règle d'arrière-plan, limite de couleurs d'accent) et cast (id, marqueurs ≥1, interdictions).
  2. Copier templates/beats.json → beats.json. Un plan par ligne ; marquer l'accroche précoce ; lister les porteurs d'accessoires ; enregistrer chaque transfert sous transfers avec transfer: true.
  3. Vérification : python3 scripts/chalkroster.py lint roster.json beats.json
  4. Porte : python3 scripts/chalkroster.py check roster.json beats.json
  5. Seulement en cas de EXPÉDIER : développer chaque plan en vos prompts de générateur, en répétant textuellement les marqueurs figés pour chaque membre du casting qui apparaît.
  6. En cas de CORRIGER / SUSPENDRE : réparer les problèmes listés ; ne jamais « approximer » un changement de marqueur sans un événement de transfert.

Format du registre

{
  "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"]
    }
  ]
}

Format des temps

Chaque plan nécessite duration_s, action, et généralement cast. Les accessoires sont une carte prop → holder_id|null. Changer un porteur ou un marqueur nécessite un transfert explicite.

Bandes de densité VO (mots/seconde) : Anglais 1.8–2.9, Chinois 3.2–5.2. L'accroche doit arriver avant hook_deadline_s (par défaut 5).

Exemples

  • Épisode propre de 30s : examples/cache-lie-roster.json + examples/cache-lie-beats.json → EXPÉDIER.
  • Téléportation d'accessoire : examples/broken-prop-jump-beats.json face au même registre → SUSPENDRE jusqu'à ce qu'un transfert soit enregistré.
  • Intégré : python3 scripts/chalkroster.py demo

Conseils

  • Les marqueurs sont des mots simples (« red beanie »), pas des codes hexadécimaux ou des recettes anatomiques.
  • Un changement de silhouette = un nouvel id de cast, pas une modification discrète de marqueur.
  • Gardez les couleurs d'accent ≤ max_accent_colors ; nommez-les avec un langage ordinaire.
  • Mode série : définissez channel.lock_style_across_episodes et conservez style.fingerprint identique entre les épisodes.
  • Les figures à la craie inactives échouent à la porte — chaque plan nécessite une action concrète.

Skills associés