music-video은(는) 무엇을 하나요?
서브 명령 (먼저 확인)
| 호출 | 수행할 작업 |
|---|---|
/music-video help, /music-video (노래 없음), "이걸 어떻게 사용하나요?" | 아래 도움말 블록을 그대로 출력한 후, 필수 구성 요소(node -v, ffmpeg -version, uv --version, Chrome 설치 여부)를 각각 ✅/❌로 확인하고 설치 명령어를 함께 보고합니다. 중단하고 비디오를 시작하지 마세요. |
/music-video lessons | LESSONS.md를 출력합니다 (가장 최신 항목은 전체, 이전 항목은 제목만). |
/music-video <song file> [lyrics.srt] [flags] [notes] | 아래 플래그를 파싱하여 어떤 게이트가 켜져 있고 어떤 선택이 이미 설정되었는지 한 줄로 말한 후 파이프라인을 실행합니다. |
도움말
/music-video: 노래를 비트 동기화된 뮤직비디오로 변환합니다. 모든 프레임을 코드로 그리며,
손으로 그린 카툰부터 선명한 마케팅 스타일 모션 디자인까지 지원합니다.
사용법
/music-video ~/Downloads/song.mp3 Suno 파일(내장 가사 포함)은 추가 입력 불필요
/music-video ~/Downloads/song.mp3 lyrics.srt 다른 노래: 시간 동기화된 가사(.srt) 제공
/music-video song.mp3 "느와르 스타일, 고양이 탐정" 선택적 창작 방향
/music-video song.mp3 --auto --style=editorial --human=~/me.jpg --dir=~/musicVideos
완전 자동: 모든 선택을 플래그로 설정
/music-video help | lessons
플래그 (기본값: 스토리보드와 파일럿에서 멈춤)
--skip=storyboard 스토리보드 대기 없음; 파일럿은 여전히 대기
--skip=pilot 스토리보드는 대기; 파일럿은 대기 없음
--skip=all (또는 --auto) 중단 없음: 노래 입력 → 완성된 MP4 출력, 완전 에이전트 방식
--design 더 많은 계획: 디자인 단계 추가 (캐릭터 모델 시트,
팔레트 견본, 챕터당 하나의 스타일 프레임)
애니메이션 전에 외형을 반복할 수 있도록 중단.
조합: --design --skip=pilot
선택 사항 (설정되지 않은 것은 짧은 인터뷰에서 질문; --auto에서는 기본값 사용)
--style=painted|editorial|keynote|geometric|hybrid
painted = 손으로 그린 수채화 카툰 (원래 스타일)
editorial = 따뜻한 종이, 정밀한 가는 선, 세리프체, 차분함
keynote = 거의 검은색, 빛나는 그라디언트, 광선, 입자
geometric = 스위스 그리드, 색상 블록, 매개변수 곡선, 굵은 산세리프
hybrid = 에디토리얼 절, 키노트 후렴
ask (기본값) = 각 스타일로 한 프레임씩 렌더링하여 선택
auto 기본값: editorial
--lyrics=kinetic|bar|hooks|off 운동감 있는 자막 / 자막 바 / 후크 라인만 / 없음
(기본값: 벡터 스타일은 kinetic, painted는 bar)
--density=bold|every-line|abstract
bold (기본값) = 2-4줄당 하나의 강력한 이미지, 배경 이스터에그;
every-line = 가사 줄마다 하나의 개그
--human=PHOTO|pip "당신" 역할: 사진에서 캐리커처, 또는 기본 Pip
--dir=PARENT 노래 폴더 위치 (기본값 ~/PROJECTS); PARENT/_shared/
재사용 가능한 항목(사진, 캐릭터)을 여러 비디오에서 공유
--interview / --no-interview 사전 인터뷰(G0) 강제 또는 건너뛰기
건너뛴 게이트는 작업 자체를 생략하지 않습니다: 아티팩트는 여전히 제작되고 자체 검토되며,
선택 사항은 DECISIONS.md에 기록되어 나중에 확인할 수 있습니다.
진행 과정 (중단 포함 약 1.5-2시간; --auto 사용 시 약 45-60분)
1. 노래 분석: 템포, 드롭, 섹션, 가사 타이밍
1b. 인터뷰: 스타일 스틸 + 설정되지 않은 선택지, 중단 (--auto / 모두 설정 시 생략)
2. STORYBOARD.md 작성 후 승인을 위해 중단 (--skip 시 생략)
2b. --design 사용 시: 모델 시트 + 스타일 프레임, 반복을 위해 중단
3. 30초 파일럿 클립 제작 후 시청을 위해 중단 (--skip 시 생략)
4. 나머지 부분을 병렬로 제작 (서브 에이전트), 모든 장면 변경 확인
5. out/<song>_full.mp4 렌더링 (1080p, H.264 + AAC), YouTube 업로드 준비
필요 사항 Node 20+, Google Chrome, ffmpeg, uv (Mac: brew install node ffmpeg uv)
비용 추가 API 비용 없음; 클로드 플랜 사용 (전체 노래는 상당한 사용량)
출력 프로젝트 폴더 (기본값 ~/PROJECTS/<song>-video/, 또는 --dir), 어떤 저장소 외부
이후 "오늘의 교훈을 music-video 스킬에 추가"를 입력하면 다음 비디오가 개선됩니다
완성된 예시는 zoo2 비디오 ("Please Select Your Ending", 4:30)입니다: 약 100개의 샷, 약 1시간 40분 소요.
examples/zoo2/에는 스토리보드, 각 챕터 파일, 제작 과정(타임라인, 토큰, 비용)이 포함되어 있습니다. 시작하기 전에
LESSONS.md를 읽으십시오: 이는 개선 로그이며, 여기 있는 내용과 상충되는 경우 LESSONS.md가 우선합니다.
왜 코드인가, 생성이 아닌가
이미지 모델(Deforum, SDXL-Turbo img2img 등)은 매 프레임을 다시 추측하여 깜빡임, 얼굴 녹음, 손 왜곡을 유발합니다. zoo2의 첫 번째 시도는 밤새 그렇게 했지만 거부되었습니다. 코드로 그린 프레임은 노래 시간의 순수 함수입니다: 부드럽고, 모델을 유지하며, 정확히 비트에 맞춥니다. 클라우드 비디오 모델(Kling, Seedance, Veo)은 다른 경로로, 노래당 약 $70-300의 비용이 듭니다.
플래그와 게이트
인수 및 일반 단어에서 플래그를 파싱합니다: "중단 없음", "완전 자동", "그냥 만들어"는
--skip=all을 의미합니다; "스토리보드 승인 건너뛰기"는 --skip=storyboard를 의미합니다; "캐릭터 먼저 보여줘", "더 계획해"는
--design을 의미합니다. 값은 쉼표로 결합됩니다(--skip=storyboard,design). 알 수 없는 플래그: 알리고 중단합니다.
| 게이트 | 기본값 | 건너뛸 때 |
|---|---|---|
| G0 인터뷰 | 아래 선택 사항 중 하나라도 설정되지 않으면 중단 | --auto/--no-interview에서 설정되지 않은 선택은 기본값을 사용하고 DECISIONS.md에 기록됩니다 |
| G1 스토리보드 | 중단 | 작성하고, 가사 시트에 대해 한 번의 자체 비평을 수행한 후(줄당 하나의 아이디어? 모든 후렴은 보상? 마지막에 모티프 재등장?), 계속 진행 |
G2 디자인 (--design만 해당) | 승인될 때까지 중단 및 반복 | --skip=design은 단계를 유지하지만 대기 없이 시트를 자체 비평 |
| G3 파일럿 | 중단 | 여전히 파일럿을 제작하고 (이는 챕터에 필요한 공유 SETS를 생성), 두 번의 접촉 시트 검토를 수행하고 일반적인 첫 번째 버그를 수정한 후 계속 진행 |
선택 사항 (--style, --lyrics, --density, --human, --dir; 도움말 표 참조). 일반 단어도 적용됩니다: "깔끔한",
"회사 스타일", "마케팅", "아이들 것 아님", "선명한"은 벡터 스타일을 의미합니다 (어느 것인지 묻거나, --auto에서는 editorial);
"zoo 비디오처럼", "손으로 그린"은 painted를 의미합니다. 최종 선택 사항을 STORYBOARD.md 상단과
src/config.js에 PROJECT.style, PROJECT.lyrics로 기록하여 서브 에이전트가 상속받게 합니다.
게이트는 사용자가 직접 말한 경우에만 건너뜁니다; 확실하지 않으면 중단합니다. 중단은 실제입니다: 턴을 종료하고 기다립니다.
건너뛴 모든 게이트에 대해 DIR/DECISIONS.md에 추가: 게이트, 결정된 사항, 고려한 대안,
검토한 이미지 경로. 최종 보고서에 DECISIONS.md 링크를 포함하여 사용자가 감사할 수 있게 합니다.
8단계의 최종 ffprobe 확인과 가사/프레임 스팟 확인을 절대 건너뛰지 마십시오: 이는 검증이지 승인이 아닙니다.
파이프라인 (이 순서대로 수행; 플래그로 건너뛰지 않았다면 중단은 실제입니다)
- 프로젝트. 모든 저장소 외부에 프로젝트 폴더 생성:
PARENT/<song-slug>/(PARENT는--dir, 기본값~/PROJECTS), 노래를assets/로 이동합니다. 참고 사진(--human)은PARENT/_shared/에 넣습니다.bash ~/.claude/skills/music-video/scripts/setup_project.sh PARENT/<song-slug>이 명령은UPSTREAM_PIN에서 ClaudeAnimationBase를 복제하고,src/cast.js(Pip, 소품, 노래방)를 추가하며 노래방을 연결합니다. Node 20+, Chrome, ffmpeg, uv 및 git이 필요합니다. - 분석.
uv run ~/.claude/skills/music-video/scripts/analyze_song.py SONG --project DIR [--srt LYRICS.srt]이 명령은src/config.js(위상 맞춤 bpm 및 오프셋),src/lyrics.js및analysis.json을 작성합니다. librosa의 BPM을 절대 신뢰하지 마십시오. 맞춤 값을 사용하십시오.energy_drops를[Chorus]섹션 시작과 비교하십시오. Suno 내보내기는[Section]태그가 포함된 SRT 트랙을 포함합니다; 다른 노래의 경우 먼저 타이밍을 얻으십시오 (사용자에게 묻거나 whisper로 정렬). 맞춤 BPM은 느껴지는 템포의 두 배가 될 수 있습니다 (낮은 일관성, 한 가사 줄 = 두 개의 "마디"): 스토리보드에 느껴지는 템포를 기록하고bt(2k)를 사용하여 느껴지는 비트를 표현하십시오. 2b. 인터뷰 (G0). 모든 선택 사항이 설정되었거나--auto/--no-interview가 주어진 경우에만 건너뜁니다. 그렇지 않으면:- 먼저 스타일을 그림으로.
--style이 설정되지 않은 경우, 비교 스틸을 렌더링합니다:node design/style_tests.mjs(설정에 의해 복사됨)는 동일한 가사 순간을 editorial, keynote, geometric 및 hybrid로 그립니다 (--line1/--line2/--stamp는 단어를 설정),out/design/style_test_*.jpg및style_tests_all.jpg로 출력합니다. 이것들을 보내고, 사용자가 본 적이 없다면 zoo2 예제의 한 painted 프레임도 함께 보냅니다. 사람들은 단어로 스타일을 고를 수 없습니다. - 그런 다음 한 번의
AskUserQuestion라운드에서 나머지 설정되지 않은 선택 사항(lyrics, density, human)과 스토리보드만으로는 결정할 수 없는 노래별 요청(실제 브랜드나 제품을 얼마나 문자 그대로 보여줄지, 민감한 가사 줄(폭력, 스캔들, 실제 사건)을 어떻게 보여줄지)을 묻습니다. - 다시 그리기 전에 재사용:
PARENT/_shared/cast/에 이 사람의 캐릭터가 이미 있는 경우 (예:<name>.js+<name>_body.js, 이전 비디오에서 승인됨), 해당 파일을src/vec/에 복사하고,vec.js다음에<script>태그를 추가하며, 있는 그대로 사용합니다 (표현 및 포즈 제어 포함). 사용자가 변경을 요청하는 경우에만 다시 그립니다. 새로운 사람이 승인된 후, 해당 파일을PARENT/_shared/cast/에 복사하고 (_shared/README.md에 한 줄 추가) 다음 비디오에서 재사용할 수 있게 합니다. - 새로운
--human사진이 주어지면, 그것을 보고 캐리커처 특징을STORYBOARD.md에 기록합니다 (머리 모양, 머리카락 유무, 수염, 눈썹, 눈, 평소 옷차림). 특징을 바탕으로 그리고; 사진을 비디오에 추적하거나 붙여넣지 마십시오. G0 — 중단: 스틸과 질문을 보낸 후. 답변을 선택 사항으로 결합한 다음 진행합니다.
- 먼저 스타일을 그림으로.
- 읽기
DIR/ANIMATION_GUIDE.md(키트의 규칙),LESSONS.md및 예제 챕터 하나 (examples/zoo2/scenes/c01_pilot.js)를 작성하기 전에. 벡터 스타일 (painted 제외)의 경우, 가이드의 엔진 섹션(타임라인,shots(), 카메라, 이징, 비트, 검토 루프)은 여전히 적용되지만, 외형 규칙은 반대입니다: 아래 벡터 스타일 참조. - 스토리보드.
DIR/STORYBOARD.md작성 (형식:examples/zoo2/STORYBOARD.md) 로그라인, 출연진, 팔레트 아크, 모티프, 전체 노래에 대한 챕터 표, 파일럿을 샷별로 시간 정보 "읽기"와 함께. 이미지 밀도는--density를 따릅니다 (bold: 2-4줄당 하나의 강력한 이미지, 나머지는 배경 이스터에그;every-line: 줄마다 하나의 개그, 캐릭터가 연기). G1 — 중단: 사용자에게 보여주고 승인 대기 (--skip=storyboard/all사용 시: 자체 비평,DECISIONS.md에 기록, 계속). 4b. 디자인 (--design만 해당). 애니메이션 전에, 스틸 이미지로 외형을 결정합니다 (out/design/):- 캐릭터당
cast_<name>.jpg모델 시트: 정면, 3/4 측면, 측면, 4가지 표정 (중립, 기쁨, 두려움, 결의), 스토리보드의 3가지 액션 포즈, 전체 출연진의 키 비교; palette.jpg: 챕터별 견본 스트립, 노래 전체 팔레트 아크 표시;style_<chapter>.jpg: 스토리보드의 영웅 순간에 챕터당 하나의 완성된 키 프레임, 가사 포함. 일회용scenes/design.js(노래 시간 범위 밖의 시트 전용 챕터)를 사용하여 그리고node render.mjs --sheet=...로 실행; 캐릭터 코드는 챕터에서 재사용할src/cast.js추가 사항에 들어가므로 승인된 디자인은 곧바로 비디오에 반영됩니다. G2 — 중단: 시트를 보여주고; 메모를 취하며 ("더 큰 눈", "더 따뜻한 후렴 팔레트"), 다시 렌더링하고, 사용자가 승인할 때까지 반복합니다. 그런 다음STORYBOARD.md를 일치하도록 업데이트합니다.
- 캐릭터당
- 파일럿. 후렴으로 섹션 경계를 넘는 약 30초를 선택합니다. 하나의 챕터 파일로 작성하며, 공유 세트를
window.SETS로 내보냅니다 (c01_pilot.js끝 참조). 확인하려면node render.mjs --sheet=... --out=out/check/x.jpg및--strip=a:b를 사용하고 이미지를 봅니다. 일반적인 첫 번째 버그: 캐릭터가 너무 작음 (카메라를 1.3-1.5배 확대), 배경 도형이 와이프 팬에 비해 너무 좁음, 소품이 노래방 바 아래에 가려짐. 벡터 스타일의 경우src/scenes/sets.js를 기반으로 구축합니다 (설정이 작동하는 것을 복사: 방, 창문, 복도, 스크롤, 감정 혼합; 적응).node render.mjs --clip --range=a:b --out=out/pilot.mp4렌더링. G3 — 중단: 사용자가 시청하고 승인하거나 변경 사항을 요청 (--skip=pilot/all사용 시: 두 번의 검토,DECISIONS.md에 기록, 계속). - 챕터 병렬 제작. 먼저 모든 챕터에 대해 스텁 파일과
<script>태그를studio.html에 추가합니다 (에이전트는 절대 공유 파일을 편집해서는 안 됩니다). 그런 다음 챕터당 하나의 서브 에이전트를 시작합니다 (포크 유형, 이 컨텍스트를 상속). 각각에게 시간 범위, 가사 줄, 스토리보드의 챕터 설명, "YOUR FILE ONLY", 공유SETS및 전역 변수, 그리고 이음새 계약을 제공합니다:- 챕터 사이에는 양쪽에서 동일한 색상을 사용한 전환 (painted:
brushWipe, 마지막 0.3초 동안p<.5로 나가고,.5+lt/.6로 들어옴; 벡터:V.wipe, CHAPTER_BRIEF.md 참조)
- 챕터 사이에는 양쪽에서 동일한 색상을 사용한 전환 (painted: