chalk-roster 是做什么的?
火柴人和粉笔动画短片常因一集中帽子颜色变化、道具瞬移或钩子没在头五秒出现而功亏一篑。chalk-roster 是一个预渲染连续性检查器:锁定角色与风格,编写带时间线的节拍,运行检查器,只有当一切就绪后才投入生成预算。
何时使用
- 无脸 / 火柴人 / 线稿 / 粉笔风格动画短片,包含固定角色阵容
- 多场景解说,要求同一剪影在不同镜头间始终可识别
- 系列作品,风格应成为每集的标识
- 任何原本会直接跳入逐镜头提示词的计划
不要将此技能用于真人剪辑节奏、音乐锁定剪辑、声音混缩分解、人类照片姿态锁定或聊天贴纸包——那些是不同任务。
核心理念
- 角色表(冻结):频道 + 风格锁定 + 角色成员,包含固定标记和禁止列表。
- 节拍表:按顺序排列的镜头,包含时长、出席角色、动作(禁止空闲)、道具映射、可选转移、配音字数、钩子标记。
- 检查门:
chalkroster.py check→ SHIP / FIX / HOLD。
判定结果
| 结果 | 含义 | 生成片段? |
|---|---|---|
SHIP | 连续性无问题 | 是 |
FIX | 软问题(配音密度、行进方向、禁止措辞) | 修补节拍后重新检查 |
HOLD | 硬错误(未知角色、道具跳跃、无钩子、风格不完整) | 不生成 |
步骤
- 复制
templates/roster.json→roster.json。填写style(宽高比、线宽、头部填充、肢体规则、背景规则、强调色上限)和cast(id、标记≥1、禁止列表)。 - 复制
templates/beats.json→beats.json。每行为一个镜头;标记早期的钩子;列出道具持有者;在transfers下记录每次交接,设置transfer: true。 - 格式检查:
python3 scripts/chalkroster.py lint roster.json beats.json - 检查门:
python3 scripts/chalkroster.py check roster.json beats.json - 仅在
SHIP后:将每个镜头扩展为生成器提示词,逐字重复每个出现角色的固定标记。 - 若为
FIX/HOLD:修复所列问题;切勿在无交接事件的情况下“近似”修改标记。
角色表形状
{
"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"]
}
]
}
节拍形状
每个镜头需包含 duration_s、action,通常还包括 cast。道具是一个映射 prop → holder_id|null。更换持有者或标记需要明确的交接记录。
配音密度带(字数/秒):英语 1.8–2.9,中文 3.2–5.2。钩子必须在 hook_deadline_s(默认 5)前出现。
示例
- 干净的30秒剧集:
examples/cache-lie-roster.json+examples/cache-lie-beats.json→SHIP。 - 道具瞬移:
examples/broken-prop-jump-beats.json配合同一角色表 →HOLD,直到记录交接。 - 内置演示:
python3 scripts/chalkroster.py demo
提示
- 标记应为普通词语(如“红色毛线帽”),而非十六进制颜色码或解剖结构描述。
- 一次剪影变化意味着新的角色 id,而非静默修改标记。
- 强调色数量不超过
max_accent_colors;用日常语言命名。 - 系列模式:设置
channel.lock_style_across_episodes并保持style.fingerprint在各集间一致。 - 空闲粉笔角色会触发检查失败——每个镜头都需要具体的
action。