Communitygithub.com

fangdididi/chalk-roster

Vor der massenhaften Generierung von Strichfiguren-, Line-Art- oder Kreide-Animationen erstelle eine eingefrorene Besetzungs- und Stil-Roster sowie eine getaktete Beat-Tabelle und prüfe die Kontinuität (Markierungen, Requisiten, Hook, VO-Dichte) auf SHIP / FIX / HOLD. Verwende dies, wenn du gesichtslose YouTube-Stick-Episoden, mehrszenige Line-Erklärvideos oder jede Kreide-Besetzung planst, die zwischen den Aufnahmen nicht abdriften darf.

Was ist chalk-roster?

chalk-roster ist ein Pre-Render-Kontinuitäts-Gate für Strich- und Kreide-Animationen mit wiederkehrenden Figuren. Es verhindert typische Fehler wie Farbwechsel einer Mütze mitten in der Episode, teleportierende Requisiten oder einen verpassten Hook-Timing. Die Skill besteht aus drei Kernkomponenten: einer Roster-Karte (gefrorener Kanal + Stil-Lock + Figuren mit festen Markern und Verbotsliste), einer Beat-Tabelle (geordnete Einstellungen mit Dauer, anwesenden Figuren, Aktion, Requisiten, ggf. Übergaben und VO-Wortzahlen, Hook-Flag) und einem Gate-Check (`python3 scripts/chalkroster.py check`), der die Ergebnisse in SHIP, FIX oder HOLD einteilt. Nur bei SHIP darf die eigentliche Prompt-Generierung beginnen. Plattformen: CLI-basiert (Python 3), keine spezielle IDE notwendig. Der Nutzer erstellt JSON-Dateien aus Vorlagen, füllt Stil, Besetzung und Beats aus, führt Lint- und Gate-Prüfungen durch und wiederholt bei SHIP die gefrorenen Marker wörtlich in jedem Prompt für jede auftretende Figur. Der Workflow ist für Entwickler:innen, die mit KI-Bildgeneratoren (z. B. Stable Diffusion, Midjourney) konsistente animierte Kurzfilme produzieren wollen, konzipiert.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht chalk-roster?

Strich- und Kreide-Kurzfilme zerfallen, wenn die Mütze mitten in der Episode die Farbe wechselt, eine Requisite teleportiert oder der Hook mit zwölf Sekunden Verzögerung kommt. chalk-roster ist ein Pre-Render-Kontinuitäts-Gate: friere die Besetzung und den Stil einmal ein, schreibe getaktete Beats, führe den Checker aus und gib erst dann das Generierungsbudget frei.

Wann verwenden

  • Gesichtslose / Strichfiguren / Line-Art / Kreide-Animationen mit wiederkehrender Besetzung
  • Mehrszenige Erklärvideos, in denen dieselbe Silhouette erkennbar bleiben muss
  • Serienarbeit, bei der der Stil über Episoden hinweg wiedererkennbar sein soll
  • Jeder Plan, der sonst direkt in Einzel-Einstellungs-Prompts springen würde

Nicht verwenden für: Live-Action-Schnitt-Timing, musikgesperrte Cuts, Sound-Mix-Analyse, menschliche Foto-Posen-Blockung oder Chat-Sticker-Pakete – das sind andere Aufgaben.

Kernidee

  1. Roster-Karte (gefroren): Kanal + Stil-Lock + Besetzungsmitglieder mit festen Markern und Verbotsliste.
  2. Beat-Tabelle: geordnete Einstellungen mit Dauer, anwesender Besetzung, Aktion (kein Stillstand), Requisiten-Zuordnung, optionalen Übergaben, VO-Wortzahlen, Hook-Flag.
  3. Gate: chalkroster.py check → SHIP / FIX / HOLD.

Urteile

UrteilBedeutungClips generieren?
SHIPKontinuität sauberJa
FIXWeiche Probleme (VO-Dichte, Bewegungsrichtung, verbotene Formulierungen)Beats patchen, dann erneut prüfen
HOLDHarte Brüche (unbekannte Besetzung, Requisitensprung, kein Hook, unvollständiger Stil)Nicht generieren

Schritte

  1. Kopiere templates/roster.json → roster.json. Fülle style (Seitenverhältnis, Linienstärke, Kopf-Füllung, Gliedmaßen-Regel, Hintergrund-Regel, Akzent-Begrenzung) und cast (id, Marker ≥1, forbid).
  2. Kopiere templates/beats.json → beats.json. Eine Einstellung pro Zeile; markiere den frühen Hook; liste Requisitenhalter auf; notiere jede Übergabe unter transfers mit transfer: true.
  3. Lint: python3 scripts/chalkroster.py lint roster.json beats.json
  4. Gate: python3 scripts/chalkroster.py check roster.json beats.json
  5. Nur bei SHIP: erweitere jede Einstellung zu deinen Generator-Prompts und wiederhole die gefrorenen Marker wörtlich für jedes anwesende Besetzungsmitglied.
  6. Bei FIX / HOLD: repariere die aufgeführten Probleme; nähere nie eine Marker-Änderung ohne Übergabeereignis an.

Roster-Form

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

Beat-Form

Jede Einstellung benötigt duration_s, action und normalerweise cast. Requisiten sind eine Zuordnung prop → holder_id|null. Ein Wechsel des Halters oder eines Markers erfordert eine explizite Übergabe.

VO-Dichte-Bänder (Wörter/Sekunde): Englisch 1.8–2.9, Chinesisch 3.2–5.2. Der Hook muss bis hook_deadline_s (Standard 5) landen.

Beispiele

  • Saubere 30-Sekunden-Episode: examples/cache-lie-roster.json + examples/cache-lie-beats.json → SHIP.
  • Requisitenteleport: examples/broken-prop-jump-beats.json gegen denselben Roster → HOLD, bis eine Übergabe aufgezeichnet wird.
  • Integriert: python3 scripts/chalkroster.py demo

Tipps

  • Marker sind einfache Wörter ("red beanie"), keine Hex-Codes oder Anatomie-Rezepte.
  • Eine Silhouetten-Änderung = neue Besetzungs-ID, keine stille Marker-Bearbeitung.
  • Halte die Akzentfarben ≤ max_accent_colors; benenne sie in alltäglicher Sprache.
  • Serienmodus: setze channel.lock_style_across_episodes und behalte style.fingerprint über Episoden hinweg identisch.
  • Stille Kreidefiguren bestehen das Gate nicht – jede Einstellung braucht eine konkrete action.

Verwandte Skills