Communitygithub.com

Stickman Story Reels

바이럴 숏폼 스토리 스크립트를 작성하고, ElevenLabs 음성 해설, 단어별 자막, 합성 사운드 디자인, 화면 시계 및 '댓글로 투표' 엔딩이 포함된 1080×1920 스틱맨 애니메이션 세로 릴(인스타그램 릴스, 틱톡, 유튜브 쇼츠용)으로 제작합니다.

Stickman Story Reels란 무엇인가요?

이 스킬은 간단한 아이디어나 한 줄짜리 전제만으로도 완성도 높은 60~90초 세로 릴(릴스/쇼츠)을 자동 생성하는 파이프라인입니다. 사용자가 '스틱맨 애니메이션', '선택형 스토리', '공포/스릴러/드라마 마이크로 스토리' 등을 요청하면, 먼저 바이럴 스크립트 플레이북을 참고하여 시청 시간을 최적화한 후크 중심 스크립트를 작성합니다. 이후 `scripts/reel.py` CLI를 통해 음성(ElevenLabs), 사운드 디자인(합성), 자막, 투표 카드가 포함된 MP4 영상을 순차적으로 렌더링합니다. 코드 기반 드로잉(Canvas/SVG)으로 스틱맨 장면을 그리고, 이미지 모델이나 스톡 영상 없이 동작합니다. '투표 시리즈'의 경우 시리즈 바이블을 업데이트하여 다음 파트로 자연스럽게 이어집니다. 사용자는 `reel new`, `reel voice`, `reel all` 같은 간단한 명령어로 전체 워크플로우를 제어할 수 있으며, `--draft` 모드로 음성 크레딧 소모 없이 미리보기도 가능합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/QuantumCoderSys/stickman-story-reels/tree/main

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

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

문서

Stickman Story Reels은(는) 무엇을 하나요?

전제를 완성된 60~90초 세로 릴로 바꿔줍니다: 시청 시간을 위해 설계된 후크 우선 스크립트, 코드로 그린 스틱맨 장면, 단어별 자막이 포함된 음성 해설, 사운드 디자인, 그리고 사람들이 댓글을 달고 2부를 기다리게 만드는 두 가지 선택지 투표. PlotVote 인터랙티브 스토리(@plotvote)의 워크플로우를 기반으로 제작되었습니다.

파이프라인은 결정론적입니다: episode.json(스크립트, 타이밍, 모션)과 scenes.js(드로잉)를 작성하면 scripts/reel.py가 나머지(음성 → 사운드 → 빌드 → 체크 → 렌더)를 처리합니다. 이미지 모델, 스톡 영상, 음성 외 유료 도구는 사용하지 않습니다.

설정 (기기당 한 번)

python3 --version(3.9+), ffmpeg -version, node --version(18+)을 확인하세요. 첫 번째 렌더링에서 npx를 통해 HyperFrames와 헤드리스 Chrome을 다운로드합니다. 정상이며 1분 정도 걸립니다. 음성의 경우 사용자는 프로젝트 폴더의 .env 파일에 ELEVENLABS_API_KEY=...를 넣거나(또는 export)합니다. 키를 절대 출력하지 마세요. 키가 없어도 --draft 모드에서 모든 기능이 작동합니다(무음, 실제 속도 타이밍).

터미널 세션당 한 번 이 셸 함수를 정의하세요(함수여야 하며, 문자열 변수가 아니어야 함; zsh와 bash 모두에서 작동). 아래 명령어에서 이를 사용합니다:

reel() { python3 "<이 스킬의 폴더>/scripts/reel.py" "$@"; }

워크플로우

1. 요청 이해하기

  • "이 이야기를 만들어줘" 명확한 전제 포함 → 강력한 스크립트 하나를 작성하고 제작합니다.
  • "선택지를 줘" 또는 "스크립트 아이디어" → 세 가지 전체 옵션을 제시(플레이북 §10 참조), 선택을 기다린 후 제작합니다.
  • "다음 편" 또는 "X가 투표에서 이겼어" → 시리즈를 이어갑니다: 결과부터 시작, 마지막 단서 해소, 진짜 답변 제공, 긴장 고조, 새로운 투표(플레이북 §9). 시리즈 바이블이 있으면 읽습니다.
  • 스크립트만 (또는 셸 사용 불가) → 스크립트 테이블과 episode.json, scenes.js를 제공합니다(직접 렌더링할 경우).

2. 스크립트 작성

매번 references/viral-script-playbook.md를 먼저 읽으세요. 여기에는 사람들이 3초 이상 머물게 할지 결정하는 규칙이 있습니다. 전제, 시리즈 또는 시즌을 창작할 때는 references/story-engines.md도 읽으세요.

스크립트는 테이블 형식(# · 음성 · 대사 · 화면)으로 작성하며, 약 210~230단어(집중 속도 기준 약 85초)를 목표로 합니다. 플레이북의 사전 음성 체크리스트를 실행하세요. 사람들이 가장 자주 실수하는 부분: 1번 프레임은 움직여야 함; 5초 이내에 어디서, 언제, 누가인지; 모든 결정은 12세 테스트를 통과해야 함; 캐릭터는 자신의 반전을 1인칭으로 말해야 함; 투표는 양쪽에 비용이 있는 두 가지 물리적 한 단어 행동이어야 함; 투표 후 속삭이는 단서는 이전에 심은 것을 가리켜야 함.

사용자가 옵션을 요청했거나 크레딧 사용 전 승인을 원할 경우, 스크립트 테이블을 보여주고 기다리세요. 그렇지 않으면 계속 진행합니다.

3. 릴 초안 만들기

reel new reels/<슬러그>-part1 --title "<제목> — 1부"

이 명령은 작동하는 작은 스타터에서 episode.json과 scenes.js를 생성합니다. 둘 다 여러분의 스토리로 교체하세요.

4. 장면 그리기 (scenes.js)

references/drawing-kit.md를 읽고 examples/sundown-part1/scenes.js를 패턴 라이브러리로 열어보세요(밖으로 몸을 내미는 생물체, 축소 지도, 한 줄씩 드러나는 규칙 벽, 스톱모션 생물체, 창문 근접 실수, 말하는 라디오, 나무 사이의 손전등, 선택 분할, 표지).

스크립트 테이블의 각 장면당 하나의 함수입니다. 각 함수는 키트 헬퍼(defs(), sky(), forest(), cabin(), room(), water(), stick(), kid(), creature(), phone(), radio(), chip(), ring(), splitChoice()…)로 구축된 1080×1920 SVG를 반환합니다. 키트에 없는 배경(워터파크, 기차, 사막 등)은 정상입니다: rect, path 및 헬퍼를 사용하여 드로잉 키트의 "새 배경 만들기" 섹션을 따라 그리세요. 움직이거나 단어에 나타나야 하는 모든 것에 id를 부여하세요. 얼굴이 자막 영역(y 1180–1380)과 오른쪽 140px을 침범하지 않도록 하세요. 표지(제목 아래에 주제 배치)와 투표 카드 삽입용 mode를 추가하세요.

5. 에피소드 연결 (episode.json)

references/episode-format.md를 읽으세요. 모든 장면에 대해: draw, say 라인, kenburns, 그리고 발화 단어에 맞춘 animate 항목("at": "faster"). 그 다음: 음성(fx와 다른 캐릭터용 자막 tag 포함), 시계가 있는 HUD 알약, 단어 위에 수동 배치된 sfx, bed 큐, 투표 장면(두 옵션, 삽입 이미지, 단서 라인), cover, post(caption에 {vote_line} 포함, 고정 댓글, posts_at). 음성, 사운드 및 자막은 references/sound-voice-posting.md를 참조하세요.

6. 초안 패스 (무료)

reel voice reels/<슬러그> --draft     # 무음, 실제 속도 타이밍
reel sound reels/<슬러그>
reel build reels/<슬러그>
reel check reels/<슬러그>
reel snap  reels/<슬러그> --at scenes  # 장면당 두 장의 스틸 (또는 --at 0.5,12,30.5 초)

reels/<슬러그>/snaps/의 모든 스틸을 살펴보세요. 드로잉 키트의 가독성 규칙이 경고하는 내용을 수정하세요: 너무 어두워서 읽기 힘든 것, 자막 아래 얼굴, 너무 작은 주제, 잘못된 타이밍의 공개. check는 "Check passed"를 출력해야 합니다(all은 통과하지 않으면 렌더링 전에 중단). 다음 경고는 예상되며 괜찮습니다: "nested structure", "track too dense", "composition file too large", 그리고 삽입 이미지가 "overflowing" 크롭.

7. 음성 및 렌더링

reel all reels/<슬러그>               # voice(ElevenLabs) → sound → build → check → render
reel frames reels/<슬러그> --every 2  # 전체 릴의 연락처 시트, 검토용

출력된 길이 확인(60–90초; 초과 시 설정 부분을 잘라내세요). renders/review.png 확인: 주제가 읽을 수 있고, 자막이 명확하며, 이름이 지정된 것이 해당 단어에서 움직이고, 투표 카드와 단서 삽입이 나타납니다. 1번 라인을 들어보세요; 단어가 잘못 들릴 수 있으면 단어를 바꾸고 음성을 다시 만드세요(변경된 라인만 크레딧이 소모됩니다).

8. 전달

사용자에게 renders/<슬러그>.mp4, renders/cover.png 및 POST.md(캡션, 고정 댓글, 대체 텍스트, 투표 마감 시간)를 제공하세요. 시리즈인 경우, 릴 폴더 옆에 bible.md를 작성하거나 업데이트하세요: 출연진, 규칙, 정식 설정, 단서, 그리고 다음 편이 어떻게 시작되는지에 대한 투표 옵션당 한 줄(story-engines §4).

명령어

명령어설명
reel new <dir> --title "…"릴 폴더 초안 만들기
reel voice <dir> [--draft]음성 + 단어 타이밍 → timing.json, assets/audio/narration.wav
reel sound <dir>19가지 음향 효과 + 앰비언트 배경 합성
reel build <dir>index.html, cover/, POST.md 컴파일
reel check <dir>HyperFrames 린트, 레이아웃 및 대비 게이트(실패 시 0이 아닌 값으로 종료)
reel snap <dir> --at scenes장면당 두 장의 PNG 스틸(또는 --at 1,5.5,9 초)
reel render <dir> [--draft]−14 LUFS의 MP4 + cover.png + 연락처 시트
reel all <dir> [--draft]voice → sound → build → check → render (check 실패 시 중단)
reel frames <dir> --every 2렌더링된 전체 MP4의 검토 시트

문제 해결

  • "word"가 해당 위치에서 발화되지 않음: 시간 참조는 자막 철자를 사용하며 해당 장면 내에서만 검색됩니다; 오류는 장면의 내용을 출력합니다. 두 번째 발생에는 word#1, 다른 장면에는 sN:word, 오프셋에는 start+0.2, 절대 시간에는 12.5s를 사용하세요.
  • 음성을 찾을 수 없음: 미리 정의된 이름(Liam, Brian, George, Daniel, Callum, Bill, Roger, Chris, Eric, Will, Harry, Charlie, River, Adam, Sarah, Matilda, Jessica, Alice, Lily, Laura, Bella) 또는 음성 ID를 사용하세요.
  • 크레딧 소진: 이미 음성으로 변환된 라인은 캐시됩니다; 충전 후 voice를 다시 실행하세요.
  • 빈 장면 또는 검은 장면: 해당 세트의 JavaScript 오류입니다. check에 표시됩니다; 수정 후 다시 빌드하여 함수를 테스트하세요.
  • 90초 초과: 설정 라인과 형용사를 줄이세요; 후크, 반전, 투표 및 단서를 유지하세요.
  • npx 또는 node 오류: Node 18+를 설치하세요; 첫 실행 시 npx가 HyperFrames와 Chrome을 다운로드하도록 하세요.

이 스킬의 내용

  • scripts/reel.py: CLI. scripts/synth.py: 19가지 음향 효과 및 배경(드론, 바람, 펄스, 험, 물), 모두 합성.
  • assets/kit.js: 드로잉 키트. assets/runtime.js, assets/base.css: 자막, HUD 및 투표 카드.
  • references/: viral-script-playbook.md(항상), story-engines.md(전제, 시리즈, 바이블), episode-format.md(명세), drawing-kit.md(드로잉), sound-voice-posting.md(음성, 사운드, 자막, 게시, 안전).
  • examples/sundown-part1/: 완전한 89초 1부(episode.json + scenes.js). examples/starter/: new에서 사용하는 4장면 스타터. examples/script-pitches.md: 5개의 추가 전체 1부 스크립트(THE WHEEL, LAST CAR, LOW TIDE, 3:33, ROW ONE).

관련 스킬