스토리 숏(Story Shorts): 아이디어를 넣으면 완성된 만화 숏이 나옵니다
이 스킬은 영화 엔진과 워크플로우를 결합한 것입니다. 엔진(engine/)은 headless Chrome에서 three.js를 프레임별로 렌더링합니다:
툰 쉐이딩, 잉크 아웃라인이 적용된 3D 세계의 2D 캔버스 인형 캐릭터, 카메라 움직임과 디졸브, 설명 그래픽을 위한 2D 오버레이, 하드코딩된 캡션, 타임드 이벤트 사운드 믹스. 각 영화는 스토리 레이어(누가 나오는지, 어디에서 일어나는지, 샷, 그래픽, 사운드 계획)만 작성합니다. 새 영화는 빈 스타터(starter/: 두 개의 플레이스홀더 캐릭터, 두 개의 장소, 네 개의 샷)에서 시작합니다. examples/floating-scale/은 참고용으로만 제공되는 완성된 영화 하나입니다. 그 캐릭터나 이야기를 재사용하지 마십시오.
필요할 때마다 다음 문서를 읽으십시오:
reference/rules.md: 스토리 및 그림 규칙. 먼저 읽으십시오.reference/story-templates.md: 여섯 가지 스토리 형태. 영화당 하나를 선택하십시오.reference/engine-api.md: 엔진에서 영화를 작성하는 방법(캐릭터, 포즈, 월드, 소품, 샷, 그래픽, 큐).reference/transitions.md: 규칙 11의 실제 적용(카메라 움직임, 연속성을 위한 스테이징, 유지된 컷).reference/sound.md: 보이스, 음악 및 효과음(Epidemic Sound 또는 무료 도구 사용).reference/lessons.md: 이미 발생한 버그와 그 수정 방법. 디버깅 전에 반드시 확인하십시오.
시작하기 전에: 두 가지 질문
- 아이디어. 한 문장이면 충분합니다: "어둠을 두려워하는 등대지기", "1904년 올림픽 마라톤", "만약 중력이 하루 동안 절반이 된다면". 사용자가 아직 제공하지 않았다면 물어보십시오. 길이가 사용자에게 중요할 경우에만 물어보십시오(기본 약 60초).
- 사운드 도구. 질문: "Epidemic Sound(Claude 커넥터 포함)를 사용하시겠습니까, 아니면 무료 도구를 사용하시겠습니까?"
- Epidemic Sound(권장): 내레이터와 캐릭터용 Epidemic 보이스오버, 스토리에 맞게 자른 Epidemic 음악 트랙 1개, Epidemic 효과음 및 앰비언스. Claude Code에 Epidemic Sound MCP 커넥터가 필요합니다.
- 무료: 보이스용 Kokoro TTS(
scripts/kokoro_voice.py), 코드에서 합성된 악보 및 효과음. - 한 영화에서 두 가지를 혼합하지 마십시오. 혼합할 경우 영화의 README에 명시하십시오.
그런 다음 python scripts/check_setup.py를 실행하고, 영화 코드를 작성하기 전에 MISSING으로 표시된 항목을 모두 수정하십시오.
워크플로우(사용자가 요청하지 않는 한 승인 불필요)
- 새 프로젝트.
python scripts/new_film.py <폴더> "제목"명령어로 엔진과 빈 스타터를 복사하고, 플레이스홀더 타임라인을 작성하며film/node_modules를 새로 설치합니다. 해당 폴더 안에서만 작업하십시오. - 스토리 (
docs/STORY.md,script/lines.json).- 아이디어에 맞는 스토리 템플릿을 선택하고(
reference/story-templates.md), 어떤 템플릿을 선택했는지와 그 이유를 말하십시오. - 대본 작성: 말하는 줄당 하나의 항목(id, 화자, 시작 시간, 텍스트). 내레이션과 몇 개의 캐릭터 대사 포함; 분당 약 150단어.
- 샷 리스트 작성: 각 샷에 대해 무음 읽기(muted viewer가 그림만으로 이해하는 내용)를 포함하십시오.
- 장소 이름 지정. 장소 변경이 디졸브의 유일한 이유입니다. 장소 내에서는 카메라가 움직입니다.
- 사실은 실제 숫자와 함께 사실이어야 합니다. 캐릭터, 스토리 및 월드는 독창적이어야 합니다.
- 아이디어에 맞는 스토리 템플릿을 선택하고(
- 캐스팅 (
film/src/story/cast.js).- 캐릭터당 하나의 키(화자 id와 동일). 프리셋에서 시작하여 이 영화만의 고유한 색상, 비율 및 특징으로 재정의하십시오(
reference/engine-api.md, "Characters" 참조). 스토리에 필요할 경우character.js에 새feat플래그 뒤에 새로운 룩을 추가하십시오. node film/tools/charsheet.mjs를 렌더링하고, 샷을 만들기 전에 모든 시트를 살펴보십시오.
- 캐릭터당 하나의 키(화자 id와 동일). 프리셋에서 시작하여 이 영화만의 고유한 색상, 비율 및 특징으로 재정의하십시오(
- 월드 및 소품 (
story/world.js,story/set.js, 옵션story/props.js).worldkit.js와 고유 랜드마크로 각 장소를 구축하십시오. 모든 표시를SET에 넣으십시오. 히어로 소품에 스토리에 필요한 상태를 부여하십시오.
- 그림 블로킹 (
story/shots.js,story/overlay.js).- 스타터의 네 개 샷을 영화의 샷으로 교체하십시오. 타임라인의 비트(
K.wordAt,K.lineAt)로 시간을 측정하고, 하드코딩된 초를 사용하지 마십시오. 보이스가 생성될 때까지python tools/build_timeline.py --placeholder를 실행하십시오. - 처음부터 연속성을 위해 스테이징하십시오(규칙 11): 장소당 캐릭터당 하나의 퍼포먼스, 소품은 지정된 위치에 배치.
- 2D 다이어그램으로 설명하십시오(규칙 4). 모든 가시적 액션을
CUES에 나열하십시오.
- 스타터의 네 개 샷을 영화의 샷으로 교체하십시오. 타임라인의 비트(
- 보이스.
- 각 줄을 별도의 클립으로
audio/vo/raw/<id>.mp3|wav에 생성하십시오(Epidemic 또는scripts/kokoro_voice.py). python <repo>/scripts/prepare_voice.py(Kokoro의 경우--atempo-off추가)는 무음 끝을 자르고 템포를 설정합니다.python tools/build_timeline.py,python tools/captions.py, 그 다음cd film && node tools/cues.mjs를 실행하십시오.- 속삭임 단어 시간에 클립을 자르지 마십시오. 프레이밍을 다시 확인하십시오: 실제 보이스로 비트가 이동했습니다.
- 각 줄을 별도의 클립으로
- 전체 렌더링 전에 그림 검토:
node framecheck.mjs --step 4가 "framing OK"를 출력해야 합니다.node tools/poptest.mjs --out ../render/pop이 모든 경계에서 팝을 확인합니다.bash tools/movesheet.sh는 움직임을 확인합니다.bash tools/sheet.sh <이름> "<시간>"은 콘택트 시트를 만듭니다. 시트를 살펴보고, 각 샷을 무음 읽기와 비교하십시오. 최소 두 번의 전체 라운드를 수행하십시오.
- 사운드 (
audio/sound_plan.json,reference/sound.md).- Epidemic: 트랙과 효과음을
audio/epidemic/에 다운로드하고,music,effects및ambience를 채운 다음cd audio/epidemic_mix && python mix_film.py && python autolevel.py && python qc.py && python sync_check.py를 실행하십시오. - 무료:
synth를 채운 다음cd audio/synth && python music.py && python build_fx.py && python mix.py && python cue_presence.py를 실행하십시오. - 목표: −14 LUFS, 진정 피크 ≤ −1.3 dBTP, 모든 줄에서 보이스가 최소 6 dB 선명해야 하며, 무음 갭이 없고, 모든 효과음이 한 프레임 이내여야 합니다.
- Epidemic: 트랙과 효과음을
- 렌더링, 조립 및 전달.
cd film && node render.mjs --from 0 --to <프레임수-1> --scale 1.5 --workers 2 --jpg --out ../render/frames.bash tools/assemble.sh는out/<제목>.mp4와out/contact_sheet.jpg를 작성하고 결과를 측정합니다. 충돌한 워커가 빈 프레임을 남긴 경우 실행을 거부합니다.- earshot이 설치된 경우:
bash audio/tools/es.sh critique out/<제목>.mp4를 실행하여 "출시 등급"을 목표로 하십시오. - 영화의
README.md작성: 로그라인, 측정값, 모든 유지된 컷과 그 이유, 사용된 사운드, 솔직한 약점. 영화가 좋다고 주장하지 마십시오: 전체 속도로 보고 들을 수 없습니다. 사용자가 눈과 귀로 확인해야 할 사항을 나열한 다음 중단하고 사용자의 리뷰를 기다리십시오.
양보할 수 없는 규칙(자세한 내용은 reference/rules.md 참조)
- 무음 상태에서 읽혀야 합니다. 해결책 전에 문제를 보여주십시오. 말해지는 모든 줄이 화면에 표시되도록 하십시오.
- 문자 그대로의 은유 금지; 명확한 2D 다이어그램으로 설명하십시오.
- 소품은 한눈에 읽을 수 있어야 합니다. 중간 및 광각 샷을 전체 인물과 함께 사용하고, 캡션 밴드(높이의 62–78%)를 깨끗하게 유지하며, 아무도 끝에서 잘리지 않도록 하십시오.
- 같은 장소는 카메라 움직임을 의미하고, 새 장소는 디졸브를 의미하며, 컷은 명시된 이유가 있을 때만 유지됩니다.
- 모든 가시적 액션에는 들을 수 있는 소리가 있으며, 내레이션은 전체적으로 명확하게 유지됩니다.
- 독창적인 캐릭터, 스토리 및 월드만 사용합니다. 기존 쇼의 캐릭터나 룩을 절대 복사하지 말고, 예제 영화의 것을 재사용하지 마십시오.
- 영화의 자체 폴더 안에서만 작업합니다. 모든 것을 그 안에 새로 설치하고, 다른 프로젝트에 연결하지 마십시오.