Communitygithub.com

music-video

한 곡의 전체 뮤직비디오를 오직 코드만으로 제작합니다. p5.js(헤드리스 크롬)를 사용해 손으로 그린 카툰부터 선명한 벡터 모션 디자인까지, ffmpeg로 오디오를 처리하며 AI 이미지/비디오 생성이나 추가 API 비용 없이 클로드 플랜만으로 완성합니다. 가사 기반 스토리보드, 박자에 맞춘 비트 그리드, 노래방 자막, 30초 파일럿 게이트를 거쳐 병렬 서브 에이전트가 챕터를 제작합니다.

music-video란 무엇인가요?

이 스킬은 사용자가 요청한 노래 파일을 분석하여 전체 분량의 뮤직비디오를 코드로 제작하는 자동화 파이프라인입니다. 핵심은 p5.js 라이브러리를 헤드리스 Chrome에서 실행해 모든 프레임을 수학적으로 그려내는 방식으로, AI 이미지/비디오 생성 모델을 전혀 사용하지 않아 깜빡임, 얼굴 변형, 손 왜곡 등의 문제가 없고 클로드 플랜 외 추가 비용이 들지 않습니다. 지원하는 스타일은 손으로 그린 수채화 카툰(painted), 따뜻한 종이 질감의 에디토리얼(editorial), 어두운 배경에 그라디언트와 입자가 돋보이는 키노트(keynote), 스위스 그리드 기반의 기하학적(geometric), 이들을 절마다 혼합한 하이브리드(hybrid)가 있습니다. 파이프라인은 노래 분석(G0, 스타일 및 선택사항 인터뷰), 스토리보드 작성(G1, 승인 대기), 디자인 단계(G2, 모델 시트 및 팔레트), 30초 파일럿 클립 제작(G3, 승인 대기), 나머지 챕터를 병렬 서브 에이전트로 제작, 최종 렌더링 순으로 진행되며 각 게이트는 플래그로 건너뛸 수 있습니다. Claude Code, Cursor, Codex 등에서 사용할 수 있으며 Node 20+, Chrome, ffmpeg, uv가 필요합니다. 완성된 예시로 `examples/zoo2/` 폴더에 4분 30초 분량의 'Please Select Your Ending' 영상의 스토리보드, 챕터 파일, 제작 과정 및 비용 정보가 포함되어 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add sagearbor/claude-music-video-skill

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

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

문서

music-video은(는) 무엇을 하나요?

서브 명령 (먼저 확인)

호출수행할 작업
/music-video help, /music-video (노래 없음), "이걸 어떻게 사용하나요?"아래 도움말 블록을 그대로 출력한 후, 필수 구성 요소(node -v, ffmpeg -version, uv --version, Chrome 설치 여부)를 각각 ✅/❌로 확인하고 설치 명령어를 함께 보고합니다. 중단하고 비디오를 시작하지 마세요.
/music-video lessonsLESSONS.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 확인과 가사/프레임 스팟 확인을 절대 건너뛰지 마십시오: 이는 검증이지 승인이 아닙니다.

파이프라인 (이 순서대로 수행; 플래그로 건너뛰지 않았다면 중단은 실제입니다)

  1. 프로젝트. 모든 저장소 외부에 프로젝트 폴더 생성: 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이 필요합니다.
  2. 분석. 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 — 중단: 스틸과 질문을 보낸 후. 답변을 선택 사항으로 결합한 다음 진행합니다.
  3. 읽기 DIR/ANIMATION_GUIDE.md (키트의 규칙), LESSONS.md 및 예제 챕터 하나 (examples/zoo2/scenes/c01_pilot.js)를 작성하기 전에. 벡터 스타일 (painted 제외)의 경우, 가이드의 엔진 섹션(타임라인, shots(), 카메라, 이징, 비트, 검토 루프)은 여전히 적용되지만, 외형 규칙은 반대입니다: 아래 벡터 스타일 참조.
  4. 스토리보드. 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를 일치하도록 업데이트합니다.
  5. 파일럿. 후렴으로 섹션 경계를 넘는 약 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에 기록, 계속).
  6. 챕터 병렬 제작. 먼저 모든 챕터에 대해 스텁 파일과 <script> 태그를 studio.html에 추가합니다 (에이전트는 절대 공유 파일을 편집해서는 안 됩니다). 그런 다음 챕터당 하나의 서브 에이전트를 시작합니다 (포크 유형, 이 컨텍스트를 상속). 각각에게 시간 범위, 가사 줄, 스토리보드의 챕터 설명, "YOUR FILE ONLY", 공유 SETS 및 전역 변수, 그리고 이음새 계약을 제공합니다:
    • 챕터 사이에는 양쪽에서 동일한 색상을 사용한 전환 (painted: brushWipe, 마지막 0.3초 동안 p<.5로 나가고, .5+lt/.6로 들어옴; 벡터: V.wipe, CHAPTER_BRIEF.md 참조)

관련 스킬