SaaS 프로모 (템플릿: "skill 1")
이 스킬은 promo.json 설정 파일 하나로 완성된 프로모를 만듭니다. 고전적인 약 11초 컷 또는 promo.json에 chapters가 있을 때 약 50초 롱 컷을 생성합니다. 모든 프레임은 헤드리스 Chrome에서 캔버스로 그려집니다. 스톡 푸티지, AI 비디오 또는 템플릿 서비스는 사용하지 않습니다.
- 이미지: 사용자의 스크린샷, 앱 UI, 디자인 또는 비디오 스틸. 부족한 부분은 내장 UI 카드로 채웁니다.
- 텍스트: 사용자의 자체 텍스트.
- 사운드: 모든 큐에 효과음이 있으며, 합성된 앰비언트 베드 또는 사용자의 자체 트랙을 사용합니다.
구조는 고정되어 있으며 레퍼런스 릴 skill 1 .MP4 (TikTok SaaS 에이전시 릴)의 템포를 따릅니다. 기법만 복사하며, 푸티지, 단어, 브랜딩 또는 워터마크는 절대 복사하지 않습니다.
| 시간 | 장면 |
|---|---|
| 0-0.5초 | 큰 글리프(# < @ ! ?)가 중앙에서 번쩍임; 보라색과 라임 네온 바, 4포인트 스파클이 어두운 도트 매트릭스 글리프 필드 위에서 스트로브 |
| 0.5-3.3초 | text.typed가 커서와 함께 타이핑됨; 26개의 카드가 먼 곳에서 날아와 단어 주위를 3D 링으로 공전함(처음에는 하프톤 도트, 그 다음 실제 사진); 링이 빨라지며 카메라를 스쳐 지나가고 흐려짐 |
| 3.3-6.45초 | 구름, 새, 나비가 있는 그림 같은 초원, 파스텔 톤으로 시작하여 채도가 올라감; 오른쪽에서 세 개의 카드가 슬라이드 인, 나머지 카드들이 날아와 12개 카드 벤토 벽을 만듦. bento[0]이 히어로 카드에 타이핑, bento[1]이 긴 유리 카드에 세로로 타이핑, 두 카드가 사진을 교환, bento[2]가 흰 카드에 타이핑. 그런 다음 카메라가 그 카드로 줌 인 |
| 6.45-~8.8초 | 어두운 도트 웨이브 필드; 빛나는 그라데이션 오브가 나타나 왼쪽으로 슬라이드; headline이 단어별로 나타남(블러에서 선명하게), sub가 슬라이드 인; 모든 것이 디포커스 |
| ~8.8-11.1초 | 글리치(색상 이동, 슬라이스)가 히어로로 전환: 파란색/흰색 장노출 꽃이 파란색-주황색 하늘 위에, 날아다니는 ! @ # $ % * 기호와 디지털 레인. from이 블러 인/아웃, 그 다음 to가 붐과 함께 착지하며 선택적 로고가 그 아래 나타남. 검은색으로 페이드 아웃 |
길이는 약 11.1초입니다. 긴 헤드라인이 있으면 약간 늘어나는데, 서브라인은 항상 약 0.85초 동안 화면에 표시됩니다.
롱 컷 (~50초): chapters
"chapters" (제품, 프로젝트 또는 테마당 하나)를 추가하면 동일한 네 장면이 각각 1.5마디의 비트로 반복되며, 피날레는 2마디를 차지합니다:
| 비트 | 재생 내용 |
|---|---|
| 인트로 | 오픈(typed + 모든 스크린샷의 소용돌이) → 월(모든 사진, bento) → 오브(headline / sub) |
| 각 챕터 | 오픈(챕터의 typed, 소용돌이에 해당 사진; typed 없으면 생략) → 월(해당 사진 먼저, bento, wall 모양) → 오브(해당 headline / sub / orb 색상) |
| 종료 | 피날레(from / to / url / 로고), 2마디 |
네 개의 챕터에 세 개의 타이핑 오프너가 있으면 23마디이며, 109 BPM에서 약 50초입니다.
- 사진: 각 사진에
"tag"를 태그하여 해당 챕터로 분류합니다. - 월 모양:
"meadow"(낮),"dusk"(일몰) 또는"dark"(챕터의 오브 색상으로 빛나는 도트 웨이브 필드). 번갈아 사용하면 챕터가 구분됩니다. - 음악 싱크:
music과 함께assets.py는 노래의 템포와 드롭(에너지가 가장 크게 상승하는 지점, 킥 드럼에 맞춤)을 측정합니다. 비디오는 인트로 소용돌이 후 첫 번째 컷이 드롭에 맞춰지도록 시작하며, 이후 모든 컷은 마디 그리드에 맞춰집니다.- 출력된
music: … bpm, drop at … s줄을 확인하세요. 잘못된 경우 직접bpm과musicDrop(노래 초)을 제공하세요. sfxLevel(예: -4)을 사용하여 효과음을 노래 아래에 배치하세요.
- 저작권: 상업용 노래를 사용하면 게시 시 비디오가 음소거되거나 클레임이 걸릴 수 있습니다. 이 점을 언급하고, 공개 게시물에는 플랫폼 자체 사운드 라이브러리를 제안하세요.
필요 사항: ffmpeg, Node 22+, Google Chrome 또는 Chromium (CHROME_PATH), numpy와 scipy가 있는 Python (PROMO_PY; promo.sh가 자동으로 찾음).
워크플로우
1. 프로모에 필요한 것 수집
- 카드 (8-20장 사진): 제품, 웹사이트, 앱 또는 대시보드 스크린샷; 디자인 작업; 또는 사용자 비디오의 스틸. 이미지와 비디오 모두 작동합니다. 비디오는
"at"초 또는 길이의 30% 지점에서 하나의 스틸을 제공합니다. 가로 사진은 와이드 슬롯으로, 세로 사진은 높은 슬롯으로 들어갑니다. 8장 미만이면 내장 UI 카드가 나머지를 채웁니다 (검색 바, 폼, 차트, 그라데이션 오브, 알약 등,text.labels로 레이블 지정). 먼저 사진을 살펴보고 대부분 비어 있는 것은 제외하세요. - 텍스트: 장면이 고정된 속도로 타이핑하고 나타내므로 짧게 유지하세요.
typed: 구두점이 있는 하나의 단어 또는 이름, 약 4-8자 ("SaaS.", "KumNit.").bento: 세 개의 짧은 구문 (1개, 2-4개, 2-3개 단어).headline: 5-8개 단어.sub: 최대 약 90자 한 줄.from/to: 마무리 "From … / To …" 쌍.- 크메르어 (
"lang": "km")의 경우 자연스러운 크메르어를 작성하세요.headline,from및to에서 한 번에 하나씩 나타나야 하는 덩어리 사이에 공백을 넣으세요. Kantumruy Pro가 번들로 제공됩니다.
- 선택 사항:
logo: 마지막 줄 아래에 표시됨. 불투명 로고는 둥근 앱 아이콘이 됩니다.text.url: 엔드 카드의 웹사이트 줄.hero: 꽃 대신 사용자의 자체 피날레 이미지.backdrop: 그림 같은 초원 대신 이미지.music: 사용자의 자체 트랙. 롱 컷에서는 드롭이 첫 번째 컷에 맞춰집니다.musicStart를 설정하여 재정의 가능.chapters: 각 챕터의tag,typed,bento,headline,sub,wall및orb가 있는 약 50초 롱 컷.sfxDir: 사용자 자체 사운드 효과 폴더.colors: 네온, 오브, 하늘 및 기호에 대한 브랜드 색상.
2. 프로젝트 작성
프로젝트 폴더를 만들고 examples/kumnit-saas.json (또는 -km.json)을 promo.json으로 복사한 다음 편집하세요. 모든 키는 references/config.md에 설명되어 있습니다. 경로는 프로젝트 폴더를 기준으로 합니다.
3. 미리보기 (약 10초)
<skill>/scripts/promo.sh <project>/promo.json --preview
이것은 사진을 준비하고 (음악을 측정하고) 12장의 스틸 (롱 컷의 비트당 하나)을 out/<name>-preview.png로 렌더링합니다. 읽고 다음을 확인하세요:
- 타이핑된 단어가 카드와 겹치지 않는지.
- 텍스트가 너무 꽉 차지 않는지: 긴 텍스트는 줄어들지만 가독성이 떨어집니다.
- 히어로 카드 (크고, 왼쪽)가 좋은 사진을 보여주는지:
cards의 첫 번째 가로 사진을 사용합니다. - 피날레 텍스트가 꽃 또는 히어로 위에서 읽을 수 있는지.
4. 렌더링 (1분 미만; 롱 컷은 약 4분이므로 백그라운드에서 실행)
<skill>/scripts/promo.sh <project>/promo.json
단계는 다음 순서로 실행됩니다: assets, plan (타임라인 및 장면의 사운드 큐), render (3개의 Chrome 렌더러, --jobs N), mix, encode.
--from mix는 프레임을 다시 렌더링하지 않고 사운드를 다시 믹싱하고 인코딩합니다.--from render는 그림을 다시 그립니다.
출력: out/<name>-1080p60.mp4 및 out/<name>-contact.png (비디오 전체에 걸쳐 약 30프레임).
5. 전달 전 확인
- 연락처 시트를 읽으세요.
ffprobe는 약 11.1초 (클래식) 또는 비트 합계 (롱 컷;build/cues.json에 모든 비트 나열)를 표시해야 합니다. 믹스는 -14 LUFS / -1 dBTP로 노멀라이즈됩니다:ffmpeg -i out.mp4 -af ebur128 -f null -로 측정하세요.- 믹스 단계는
sfxDir에서 가져온 효과음의 수와 합성된 효과음의 수를 출력합니다. - 결과를 들을 수 없으므로 사용자에게 확인한 내용을 알리고 들어보라고 요청하세요. 인트로 클릭과 초원 임팩트가 가장 큰 순간입니다.
튜닝
- 타이밍:
scripts/scene.mjs상단의plan()이 클래식 장면 시간을 보유합니다.beatSpecs()가 비트를 배치합니다:mapT()가 해당 시간을 각 비트로 이동 및 늘립니다.cuesFor()의 사운드 큐는audio.py가build/cues.json에서 읽어오므로 자동으로 따라옵니다.
- 모양:
- 색상은
colors에서 가져옵니다. - 벤토 레이아웃은
scene.mjs의SLOTS테이블입니다. - 초원, 꽃 및 오브는
buildMeadow,drawFlower및drawOrb에서 그려집니다.
- 색상은
- 사운드:
sfxDir에서 시도하는 파일 이름은scripts/audio.py의SFX테이블이며, 큐당 변형이 선택됩니다. 베드의 코드와 섹션은make_bed()에 있습니다. - 크기: 템플릿과 같이 1920×1080만 지원합니다. 세로 9:16 버전은 자체 레이아웃이 필요합니다.