브랜드 프로모 (스튜디오 쇼릴)
이 스킬은 단일 설정 파일 promo.json으로 하나의 완성된 프로모 영상을 만듭니다. 모든 프레임을 헤드리스 Chrome에서 그리는 Canvas 장면을 사용하므로, 템플릿이나 스톡 푸티지 없이 순수 모션 디자인으로 제작됩니다.
- 영상: 브랜드의 자체 클립, 로고 애니메이션, 텍스트
- 음악: 코드로 제작된 오리지널 신스 트랙(128bpm). 모든 컷, 드롭, 히트가 박자에 맞춰집니다.
- 내레이션: VoxCPM2, 로컬에서 실행
- 사운드: 각 작업물의 자체 오디오가 스포트라이트 구간에 재생됩니다.
구조는 고정되어 있으며 어떤 브랜드 규모에서도 작동합니다. 내용물만 변경됩니다.
| 시간 | 섹션 |
|---|---|
| 0-3.4 초 | { 모든 이야기 }가 타이핑되고, 이어서 "감동할 자격이 있습니다." |
| 3.2-7.6 초 | 3D 카드 링 (모든 작업물의 스틸 이미지): "여기 다섯 개가 있습니다." |
| 7.6 초 (4번째 박자) | 드롭: 아이라이너, 브랜드 이름이 글리치되는 악센트 박스, 서브라인 |
| 9.5 초 + 각 5.6 초 | 작업물별 스포트라이트: 제목 블록과 기울어진 카드(16:9) 또는 폰(9:16) 위의 작업물, "Full video · m:ss" 칩, 자체 사운드와 라이브 레벨 막대 |
| 브레이크 | "당신의 이야기" 그 다음 "다음." (내레이션 줄의 마지막 단어) |
| 러시 | 모든 클립이 3D로 빠르게 지나가며, 내레이터 문구에 세 단어(Written · Voiced · Animated)가 표시됨 |
| 엔딩 | 리퀴드 로고가 마지막 히트에 착지하고 왼쪽으로 슬라이드, 이름이 와이프 인, 칩과 URL 표시 |
길이는 5개 작업물 기준 51.5초, 4개 작업물 기준 45.9초, 3개 작업물 기준 40.2초입니다.
요구 사항:
- ffmpeg, Node 22+ 및 Google Chrome 또는 Chromium (
CHROME_PATH) - numpy와 scipy가 설치된 Python (
PROMO_PY) - 내레이션을 위해 VoxCPM2 (
VOX_PY,scripts/voices.py참조). 없으면 내레이터 없이 프로모가 생성되거나, 사용자가 직접 녹음한 파일을build/vox/<id>.wav에 넣을 수 있습니다.
워크플로우
1. 프로모에 필요한 자료 수집
-
3-5개의 작업물: 브랜드 작업의 완성된 영상, 길이 제한 없음. 세로 영상은 폰에서, 가로 영상은 카드에서 재생됩니다. 다음을 확인하세요:
- 각 영상에서 좋은 사운드 순간(문장 시작이나 펀치라인 등)을 찾아 4초 정도를 스포트라이트에서 재생합니다. 시작 시간을
sound로 지정하거나, 생략하면 영상의 약 35% 지점에서 조용한 구간의 시작이 사용됩니다. - 사운드가 재생되지 않아야 하는 작업물은
"mute": true로 설정합니다.
- 각 영상에서 좋은 사운드 순간(문장 시작이나 펀치라인 등)을 찾아 4초 정도를 스포트라이트에서 재생합니다. 시작 시간을
-
로고 애니메이션: 투명도가 포함된 것. 가장 좋은 소스는 리퀴드 스타일의
/generate-logo입니다:generate-logo/scripts/animate.sh logo.png --styles liquid --prores그러면
<name>-5s-liquid-alpha.mov와 함께-sfx.wav파일이 생성됩니다. 투명한-alpha.webm또는 투명 PNG도 가능합니다. -
브랜드 정보:
- 이름: 두 가지 색상 부분으로 나눔 (예:
["KumNit", " Studio"]) - 색상: 이름용 두 그라디언트, 악센트, 보조 악센트, 웜 악센트. 로고에서 추출합니다.
- 웹사이트
- 브랜드가 만드는 것: 네 개의 칩
- 이름: 두 가지 색상 부분으로 나눔 (예:
-
언어:
"lang": "en"또는"km". 크메르어의 경우 모든 텍스트와 내레이션 줄을 자연스러운 크메르어로 작성합니다. Kantumruy Pro와 Koulen 폰트가 번들로 포함되어 있습니다.
2. 프로젝트 작성
프로젝트 폴더를 만들고 examples/kumnit-showreel.json을 promo.json으로 복사한 후 편집합니다. 모든 키는 references/config.md에 설명되어 있습니다. 텍스트는 짧게 유지하세요: 제목은 1-3단어, 줄은 최대 6단어. 긴 줄은 크기가 조정되지만 가독성이 떨어집니다.
내레이션은 voice.lines에 각 순간에 맞는 짧은 문장 하나씩 작성합니다:
next는 크게 표시될 단어로 끝나야 합니다. 예: "당신의 이야기가 다음이 될 수 있습니다."rush는 쉼표로 구분된 세 개의 구문이 필요하며, 러시 단어당 하나씩입니다 ("우리는 쓰고, 말하고, 모든 프레임을 애니메이션합니다.").
3. 미리보기 (약 30초)
<skill>/scripts/promo.sh <project>/promo.json --preview
이 명령은 에셋을 자르고, 타이밍을 계획하며, 12개의 스틸 이미지를 out/<name>-preview.png로 렌더링합니다. 확인하고 다음을 점검하세요:
- 카드가 올바른 순간을 보여주는지
- 제목이 밀집되지 않았는지
- 로고가 프레임 안에 잘 위치하는지 (마크가 박스의 약 60%를 채워야 함)
- 스포트라이트가 측면을 번갈아 가며 배치되었는지
이미지를 수정하려면 해당 작업물의 sound 시작을 변경하세요. 그런 다음 assets/clips/p<k>, assets/bites/p<k>.wav 및 assets/manifest.json을 삭제하고 미리보기를 다시 실행합니다.
4. 렌더링 (첫 번째는 약 10분)
<skill>/scripts/promo.sh <project>/promo.json # 백그라운드에서 실행
단계는 다음과 같은 순서로 실행됩니다: assets, voices, plan, music, mix, render, encode.
- Voices: 첫 번째 실행에서는 모델을 로드(약 2분)한 후, 줄당 10-60초가 소요됩니다. 이미 존재하는 줄은 유지되므로, 다시 생성하려면
build/vox/<id>.wav를 삭제하세요. - 렌더링: Chrome 프로세스 2개로 약 4분 소요.
- 재개:
--from mix(또는render,encode)를 사용하면 해당 단계부터 다시 실행됩니다.
출력: out/<name>-1080p60.mp4 및 out/<name>-contact.png (초당 한 프레임).
5. 전달 전 확인
- 콘택트 시트를 확인합니다.
ffprobe로 예상 길이(5개 작업물 기준 51.5초)를 확인합니다.- 믹스는 -14 LUFS로 노멀라이즈됩니다.
- 결과를 들을 수 없으므로, 사용자에게 확인한 사항(타이밍, 레벨, 프레임)을 알리고 직접 들어보도록 요청하세요. 각 작업물의 자체 사운드 위에 내레이터가 가장 잘 들리는지 주의하세요.
튜닝
- 음향 효과:
sfxDir을 사용자의 자체 음향 효과 폴더로 설정하면scripts/audio.py(SFX)의 파일 이름이 먼저 시도됩니다. 없는 것은 합성되므로, 라이브러리가 없어도 스킬이 작동합니다. - 타이밍:
scripts/plan.py의 내레이션에서 측정됩니다. 각 작업물의 사운드는 내레이션 줄 이후에 시작되고 다음 스포트라이트 이전에 멈춥니다. 규칙을 변경하려면 scene이 아닌plan.py를 편집하세요. - 외형: 색상은
brand에서 가져오며, 모든 모션은scripts/scene.mjs에, 음악은scripts/music.py에 있습니다. music.py의 상단에 박자 레이아웃이 문서화되어 있습니다.