chalk-roster은(는) 무엇을 하나요?
스틱 및 분필 쇼츠는 에피소드 중간에 비니 색상이 바뀌거나, 소품이 순간이동하거나, 훅이 12초에 도착하면서 망가집니다. chalk-roster는 사전 렌더링 연속성 게이트입니다: 캐스트와 스타일을 한 번 잠그고, 시간이 지정된 비트를 작성하고, 검사기를 실행한 후에만 생성 예산을 사용하세요.
사용 시기
- 얼굴 없는 / 스틱 / 선화 / 분필 애니메이션 쇼츠 (반복 출연 캐스트 포함)
- 동일한 실루엣이 계속 알아볼 수 있어야 하는 다중 장면 설명 영상
- 스타일이 에피소드 전체에 걸쳐 지문 역할을 해야 하는 시리즈 작업
- 그렇지 않으면 샷별 프롬프트로 곧바로 뛰어들 계획
실사 편집 타이밍, 음악 동기화 컷, 사운드 믹스 분해, 인간 사진 포즈 블로킹 또는 채팅 스티커 팩에는 사용하지 마세요 — 이러한 작업은 다른 도구에 적합합니다.
핵심 아이디어
- 명단 카드 (고정됨): 채널 + 스타일 잠금 + 고정 마커 및 금지 목록이 있는 캐스트 멤버.
- 비트 시트: 지속 시간, 출연 캐스트, 동작 (유휴 금지), 소품 맵, 선택적 전환, VO 단어 수, 훅 플래그가 있는 정렬된 샷.
- 게이트:
chalkroster.py check→ SHIP / FIX / HOLD.
판정
| 판정 | 의미 | 클립 생성? |
|---|---|---|
SHIP | 연속성 깔끔함 | 예 |
FIX | 부드러운 문제 (VO 밀도, 이동 방향, 금지 문구) | 비트 패치 후 재확인 |
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 맵입니다. 소유자나 마커를 변경하려면 명시적인 전환이 필요합니다.
VO 밀도 대역 (단어/초): 영어 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
팁
- 마커는 일반 단어("red beanie")여야 하며, 16진수 코드나 해부학 레시피가 아닙니다.
- 실루엣 변경 한 번 = 조용한 마커 편집이 아닌 새 캐스트 id입니다.
- 악센트 색상을
max_accent_colors이하로 유지하십시오. 일반 언어로 이름을 지정하십시오. - 시리즈 모드:
channel.lock_style_across_episodes를 설정하고style.fingerprint를 모든 에피소드에서 동일하게 유지하십시오. - 유휴 분필 그림은 게이트를 통과하지 못합니다. 모든 샷에는 구체적인
action이 필요합니다.