Kinetic 릴 (Kinetic reels)
릴을 모션 디자이너처럼 만들되 코드로 만듭니다. 하나의 HTML 페이지가 비디오의 임의 시점 t를 그리고, 헤드리스 브라우저가 이를 30fps로 프레임별로 렌더링하며, ffmpeg가 음성과 음악을 추가합니다. 동일한 입력, 동일한 비디오, 매번 똑같이.
SKILL은 이 파일이 있는 폴더를 의미합니다. 모든 명령은 사용자의 프로젝트 폴더(reels/와 .env가 있는 곳)에서 실행하세요.
Mac/Linux에서는 python3을, Windows에서는 python을 사용하세요.
첫 번째 릴 전에 (한 번만)
node "SKILL/scripts/doctor.mjs"를 실행합니다. FIX 라인이 출력되면node "SKILL/scripts/setup.mjs"를 실행한 후, 나머지 FIX 라인이 지시하는 대로 처리합니다. ALL GOOD이 출력될 때까지 진행하지 마세요.- 사용자는
.env파일에 Gemini API 키가 필요합니다 (GEMINI_API_KEY=..., https://aistudio.google.com/apikey 에서 무료로 받을 수 있음). 키를 절대 출력하지 말고,.env를 커밋하지 마세요. kinetic.config.json에는 사용자의 핸들(워터마크), 이름, 엔드 카드용 정사각형 사진이 저장됩니다.new-reel.mjs가 처음 생성할 때 세 가지 값을 사용자에게 물어보고 채워 넣으세요.
릴 만들기 (모든 단계를 순서대로)
- 주제 및 사실. 하나의 주제에 동의합니다. 1차 출처(문서, 저장소, 공급업체 자체 페이지)에서 조사하고 모든 주장을
facts.md에 URL과 읽은 날짜와 함께 기록합니다. 사실 없이 주장하지 마세요. - 비트 계획 (만들기 전에 사용자에게 보여주세요). 5
7개 목록의 경우 3845초, 설명 영상의 경우 최대 60초. 장면별: 초, 말하는 내용, 그림, 정확한 에셋 파일 및 출처. 에셋(로고, 사진, 스크린샷)을 찾을 수 없으면 중단하고 사용자에게 요청하세요. 가짜 로고를 그리거나, UI를 만들어내거나, 사람을 생성하지 마세요. - 폴더 시작:
node "SKILL/scripts/new-reel.mjs" <slug> [--logo claude]를 실행합니다. 모서리 로고는 주제 자체 로고입니다 (as/폴더에 파일이 있으며, 없으면 실제 SVG를 추가하세요). - 스크립트.
tts.json(음성이 말할 내용을 훅 / 본문 / 페이오프 / CTA 부분으로 나누고 각각 스타일 지정)과script.txt(자막, 같은 단어, 같은 순서)를 작성합니다. 규칙:references/SCRIPT.md. 태그 및 스타일:references/VOICE.md. - 음성:
python "SKILL/scripts/voice.py" reels/<slug>를 실행한 후python "SKILL/scripts/tighten.py" reels/<slug>를 실행합니다 (일시 정지를 0.34초로, 보통 속도). 테이크를 듣거나 어떤 트랜스크라이버로 확인하세요: 라인이 누락되거나 이름이 잘못되었으면 텍스트를 수정하고 voice.py를 다시 실행하세요. - 자막 + 타이밍:
python "SKILL/scripts/captions.py" reels/<slug>를 실행하면DUR,SCN,CAPS가 출력됩니다. 이를reel.js에 붙여넣으세요. 단어가 일찍 또는 늦게 나타나면 앵커([email protected])를 수동으로 조정하세요. - 실제 에셋:
node "SKILL/scripts/docshot.mjs" <url> reels/<slug>/as/<name>.png [--selector "css"]로 스크린샷을, 로고는 공급업체 또는SKILL/assets/logos에서 SVG로 가져옵니다. 모든 에셋에는 화면에 작은 출처 라인이 표시됩니다. 자세한 내용:references/ASSETS.md. reel.js빌드. 먼저examples/claude-code-shortcuts/reel.js를 읽으세요: 이것이 최고의 릴이며 모든 패턴을 보여줍니다. 사용 가능한 조각:references/COMPONENTS.md. 그림은 y 2601100에, 자막은 y 11501570에 위치합니다.- 평가:
node "SKILL/engine/shot.cjs" reels/<slug> audit는 반드시LAYOUT PASS를 출력해야 합니다. 그런 다음node "SKILL/engine/shot.cjs" reels/<slug> prev 0 <각 장면 내의 시간>을 실행하고 모든 스틸을 확인하세요 (JPG를 열어서). 수정하고 반복하세요. 5개의 훅 스틸(0, 0.5, 1, 2, 3초)을references/SCRIPT.md(훅 규칙)와 대조하여 확인하세요. - 사운드:
mix.py를 편집하고 (DUR, SCN, 그림 변경당 하나의 사운드;references/SOUND.md),python reels/<slug>/mix.py를 실행하세요. 다른 배경 음악:python "SKILL/scripts/music.py" search "lofi chill"을 실행한 후pull <id> reels/<slug>(CC0만 해당). - 렌더링:
node "SKILL/engine/render.cjs" reels/<slug>를 실행한 후python "SKILL/scripts/finish.py" reels/<slug>(반드시 PASS를 출력해야 함)와node "SKILL/engine/shot.cjs" reels/<slug> cover 0.6을 실행하세요. - 전달:
reels/<slug>/out/final.mp4와out/cover.jpg, 그리고 1행에 주제 키워드, 3~5개의 해시태그, facts.md의 출처가 포함된 캡션을 전달하세요.
시청자를 붙잡는 규칙 (이론이 아닌 실제 결과 기반)
- 페이오프는 1행에 넣습니다. "오늘 무언가를 보여드리겠습니다"보다 "거의 아무도 모르는 Claude Code 단축키 7가지"가 더 효과적입니다.
- 프레임 0에서 움직임을 시작합니다. 음수 시간에 진입을 시작하세요 (
popV(t,-0.3,...)) 그래야 첫 프레임이 이미 움직이고 있습니다. 절대 빈 프레임이나 정지된 첫 프레임을 사용하지 마세요. - 첫 프레임부터 마지막 프레임까지 하나의 룩(look)을 유지하세요. 어두운 화면에서 밝은 화면으로 전환하지 마세요: 새 비디오로 인식되어 사람들이 넘깁니다.
- 목록의 경우: 카운트 헤더 (
SHORTCUT 3/7+ 점)와 2행의 오픈 루프 ("그리고 7번째가 제 시간을 몇 시간 절약해줍니다")를 사용하여 마지막에 결말을 맺습니다. - 0.8~1.5초마다 새로운 그림을 보여주세요. 효과를 설명하지 말고 보여주세요.
- 음성은 상단에 위치합니다. 음악은 작게 (기본
sfx.mix_reel의 값은 검증되었습니다). - CTA는 이 릴만을 위해 작성하세요 (저장하기, 적합한 사람에게 보내기, 또는 진짜 질문). 절대 "더 보려면 팔로우하세요"를 사용하지 마세요.
문제 해결
references/TROUBLESHOOTING.md를 참조하세요. 흔한 문제: PATH에 ffmpeg가 없음, Chromium이 설치되지 않음, 음성 API에서 429 (무료 제한, 잠시 기다리거나 결제 활성화), 심사관(judge)의 CLIP (텍스트가 카드보다 넓음: 텍스트를 줄이거나 카드를 최대 920px까지 넓힘).