Communitygithub.com

Plextrang/story-shorts

모든 이야기 아이디어를 내레이터가 있는 완성된 애니메이션 숏(9:16, 1080x1920, 30fps, 약 60초)으로, 원작 캐릭터, 장소, 카메라 움직임, 설명 그래픽, 자막, 음성, 음악 및 효과음을 포함하여 로컬에서 코드(헤드리스 Chrome의 three.js)로 렌더링하고 AI 비디오 크레딧이 필요하지 않습니다. 누군가 애니메이션 스토리 숏, 만화 숏, 설명, 우화, 역사적 호기심, 실제 사건 이야기 또는 아이디어에서 비디오를 만들고 싶을 때 사용하거나, 이 파이프라인(캐릭터, 샷, 카메라 움직임, 사운드, 캡션, 프레이밍)으로 만든 영화를 변경하려는 경우 사용합니다.

story-shorts란 무엇인가요?

이 스킬은 headless Chrome에서 three.js를 프레임별로 렌더링하여 완전한 애니메이션 숏(9:16, 1080x1920, 30fps, 약 60초)을 제작하는 영화 엔진이자 워크플로우입니다. 엔진은 툰 쉐이딩과 잉크 아웃라인이 적용된 3D 세계에서 2D 캔버스 인형 캐릭터, 카메라 움직임과 디졸브, 설명 그래픽을 위한 2D 오버레이, 하드코딩된 캡션, 타임드 이벤트 사운드 믹스를 지원합니다. 각 영화는 캐릭터, 장소, 샷, 그래픽 및 사운드 계획을 포함한 스토리 레이어만 작성하며, 새로운 영화는 빈 스타터에서 시작합니다. 에피데믹 사운드(Epidemic Sound)용 MCP 커넥터나 Kokoro TTS를 포함한 무료 도구를 지원하며, 사용자에게 어떤 사운드 도구를 사용할지 먼저 질문합니다. 워크플로우는 새 프로젝트 생성, 스토리 작성, 캐스팅, 월드 및 소품 구성, 샷 블로킹, 보이스 생성, 프레임 검토, 사운드 제작, 최종 렌더링 및 조립의 9단계로 구성되며, 모든 단계는 참조 문서에 설명된 엄격한 규칙(예: 무음 상태에서 읽혀야 함, 문자 그대로의 은유 금지, 2D 다이어그램으로 명확히 설명)을 따릅니다. 이 스킬은 Claude Code, Cursor, Codex 등 모든 AI 에이전트 플랫폼에서 사용할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Plextrang/claude-story-animator/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

스토리 숏(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: 이미 발생한 버그와 그 수정 방법. 디버깅 전에 반드시 확인하십시오.

시작하기 전에: 두 가지 질문

  1. 아이디어. 한 문장이면 충분합니다: "어둠을 두려워하는 등대지기", "1904년 올림픽 마라톤", "만약 중력이 하루 동안 절반이 된다면". 사용자가 아직 제공하지 않았다면 물어보십시오. 길이가 사용자에게 중요할 경우에만 물어보십시오(기본 약 60초).
  2. 사운드 도구. 질문: "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으로 표시된 항목을 모두 수정하십시오.

워크플로우(사용자가 요청하지 않는 한 승인 불필요)

  1. 새 프로젝트. python scripts/new_film.py <폴더> "제목" 명령어로 엔진과 빈 스타터를 복사하고, 플레이스홀더 타임라인을 작성하며 film/node_modules를 새로 설치합니다. 해당 폴더 안에서만 작업하십시오.
  2. 스토리 (docs/STORY.md, script/lines.json).
    • 아이디어에 맞는 스토리 템플릿을 선택하고(reference/story-templates.md), 어떤 템플릿을 선택했는지와 그 이유를 말하십시오.
    • 대본 작성: 말하는 줄당 하나의 항목(id, 화자, 시작 시간, 텍스트). 내레이션과 몇 개의 캐릭터 대사 포함; 분당 약 150단어.
    • 샷 리스트 작성: 각 샷에 대해 무음 읽기(muted viewer가 그림만으로 이해하는 내용)를 포함하십시오.
    • 장소 이름 지정. 장소 변경이 디졸브의 유일한 이유입니다. 장소 내에서는 카메라가 움직입니다.
    • 사실은 실제 숫자와 함께 사실이어야 합니다. 캐릭터, 스토리 및 월드는 독창적이어야 합니다.
  3. 캐스팅 (film/src/story/cast.js).
    • 캐릭터당 하나의 키(화자 id와 동일). 프리셋에서 시작하여 이 영화만의 고유한 색상, 비율 및 특징으로 재정의하십시오(reference/engine-api.md, "Characters" 참조). 스토리에 필요할 경우 character.js에 새 feat 플래그 뒤에 새로운 룩을 추가하십시오.
    • node film/tools/charsheet.mjs를 렌더링하고, 샷을 만들기 전에 모든 시트를 살펴보십시오.
  4. 월드 및 소품 (story/world.js, story/set.js, 옵션 story/props.js).
    • worldkit.js와 고유 랜드마크로 각 장소를 구축하십시오. 모든 표시를 SET에 넣으십시오. 히어로 소품에 스토리에 필요한 상태를 부여하십시오.
  5. 그림 블로킹 (story/shots.js, story/overlay.js).
    • 스타터의 네 개 샷을 영화의 샷으로 교체하십시오. 타임라인의 비트(K.wordAt, K.lineAt)로 시간을 측정하고, 하드코딩된 초를 사용하지 마십시오. 보이스가 생성될 때까지 python tools/build_timeline.py --placeholder를 실행하십시오.
    • 처음부터 연속성을 위해 스테이징하십시오(규칙 11): 장소당 캐릭터당 하나의 퍼포먼스, 소품은 지정된 위치에 배치.
    • 2D 다이어그램으로 설명하십시오(규칙 4). 모든 가시적 액션을 CUES에 나열하십시오.
  6. 보이스.
    • 각 줄을 별도의 클립으로 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를 실행하십시오.
    • 속삭임 단어 시간에 클립을 자르지 마십시오. 프레이밍을 다시 확인하십시오: 실제 보이스로 비트가 이동했습니다.
  7. 전체 렌더링 전에 그림 검토:
    • node framecheck.mjs --step 4가 "framing OK"를 출력해야 합니다.
    • node tools/poptest.mjs --out ../render/pop이 모든 경계에서 팝을 확인합니다. bash tools/movesheet.sh는 움직임을 확인합니다.
    • bash tools/sheet.sh <이름> "<시간>"은 콘택트 시트를 만듭니다. 시트를 살펴보고, 각 샷을 무음 읽기와 비교하십시오. 최소 두 번의 전체 라운드를 수행하십시오.
  8. 사운드 (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 선명해야 하며, 무음 갭이 없고, 모든 효과음이 한 프레임 이내여야 합니다.
  9. 렌더링, 조립 및 전달.
    • 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%)를 깨끗하게 유지하며, 아무도 끝에서 잘리지 않도록 하십시오.
  • 같은 장소는 카메라 움직임을 의미하고, 새 장소는 디졸브를 의미하며, 컷은 명시된 이유가 있을 때만 유지됩니다.
  • 모든 가시적 액션에는 들을 수 있는 소리가 있으며, 내레이션은 전체적으로 명확하게 유지됩니다.
  • 독창적인 캐릭터, 스토리 및 월드만 사용합니다. 기존 쇼의 캐릭터나 룩을 절대 복사하지 말고, 예제 영화의 것을 재사용하지 마십시오.
  • 영화의 자체 폴더 안에서만 작업합니다. 모든 것을 그 안에 새로 설치하고, 다른 프로젝트에 연결하지 마십시오.

관련 스킬