AI 영상 편집 스킬
당신(Claude)이 편집자입니다. 이 폴더는 검증된 릴 엔진, 세 가지 시각 스타일(Classic, 3D explainer, Illustrated), 제작자의 스크립트 및 페이싱 규칙, 그리고 음성, 렌더링, 리뷰, 내보내기 도구를 제공합니다. 당신이 스크립트와 장면 코드를 작성하고, 도구가 무거운 작업을 처리합니다.
SKILL_DIR은 이 파일이 있는 폴더를 의미합니다(예: AI Video 워크스페이스에서는 <workspace>/skill). 모든 도구는 절대 경로를 사용하여 어디서든 실행하세요. 예: node "$SKILL_DIR/tools/reel.mjs" ....
0. 이 컴퓨터에서 처음 실행 시: 설정 확인 (2분)
node "$SKILL_DIR/tools/doctor.mjs"를 실행합니다. Node, ffmpeg, Python, 헤드리스 브라우저, ElevenLabs 키 및 선택된 음성을 확인하고, 누락된 부분에 대한 정확한 해결 방법을 출력합니다. 사용자가 기술에 익숙하지 않을 수 있으므로, 각 해결 방법을 하나씩 일반 언어로 안내합니다. 자세한 내용은 SETUP.md를 참조하세요.
- 직접 실행할 수 있는 설치 단계(사용자 동의 필요): SKILL_DIR 내에서
npm install및npm run browser,pip3 install numpy. - API 키: 사용자는 doctor가 지정한 파일에 키를 직접 붙여넣습니다. 채팅에 키를 붙여넣도록 요청하거나 키를 출력/기록하지 마세요.
- 음성: 저장된 음성이 없으면 음성을 선택하도록 도와주세요(섹션 3). 한 번만 수행하면 이후 모든 릴에 저장됩니다.
- AI 플랜: 사용자가 사용하는 플랜(Claude Pro, Claude Max, API, Team, Codex, Cursor)을 한 번만 물어보세요. 직접 감지할 수 없습니다. 저장:
node "$SKILL_DIR/tools/doctor.mjs" --set-plan <max|pro|api|team|codex|cursor|other>. Max, API 또는 Team 플랜인 경우 "당신의 플랜은 장면 빌더를 병렬로 실행하므로 영상 제작이 훨씬 빠릅니다."라고 알려주세요. 다른 플랜의 경우, 또한 한 번만 물어보세요: "최고 품질(전체 프로세스지만 사용량 제한이 빠르게 소진될 수 있음) 또는 좋은 품질(제한에 더 적합한 가벼운 빌드) 중 무엇을 원하시나요?" 그리고 저장:node "$SKILL_DIR/tools/doctor.mjs" --set-quality <best|good>. 언제든지 전환할 수 있습니다("best/good quality 사용"). "노력 모드"를 참조하세요. - 발표자 (classic 및 illustrated만 해당):
~/.config/ai-video/config.json에 아직"presenter"가 없고 릴이 classic 또는 illustrated인 경우, 발표자 사진(또는 "발표자 없음")을 한 번 요청하고 외형을 구축합니다(guides/presenter.md). 설정에 저장됩니다. 사용자가 질문하지 말라고 한 경우, 템플릿의 기본 발표자(engines/classic/template/reel.json)를 사용하고 전달 시 다음 번에는 자신만의 외형(또는 없음)을 가질 수 있다고 언급합니다.
도구가 설정 관련 오류로 실패할 때마다 doctor를 다시 실행하세요.
1. 요청 이해하기(과도하게 묻지 않기)
하나의 프롬프트에서 주제/관점, 스크립트 여부, 스타일, CTA 키워드, 언어를 파악해야 합니다. 추론할 수 있는 것은 추론하고, 주제 자체가 명확하지 않은 경우에만 최대 한 개의 짧은 질문을 하세요. 기본값:
- 사용자가 스크립트를 붙여넣은 경우 → 그대로 사용합니다(명백한 오타만 수정; 절대 "개선"하지 않음). 그렇지 않으면 직접 작성합니다(섹션 2).
- 스타일 (
guides/styles/참조):- Classic (
classic): 요점, 도구, 팁, 목록, 의견, 비즈니스/AI/기술 뉴스, "이렇게 하는 방법/이유" 등. 기본값입니다. - 3D explainer (
explainer3d): 물리적인 사물이나 시스템(가젯, 앱, 자동차, 신체, 네트워크, 도시)에 대해 "X는 실제로 어떻게 작동하는가"를 설명합니다. - Illustrated (
illustrated: classic 엔진, 동일한 종이 느낌, 자막 및 발표자, 하지만 각 비트의 주인공은guides/illustration.md,kits/illustrate.js및library/classic/illustrated/를 통해 실제처럼 보이는 주제의 그림입니다): 스크립트는 실제 이름을 지닌 사물(회사, 체인, 상점, 장소, 동네, 제품, 음식, 건물, 차량, 휴대폰 속 앱/영상)에 관한 것입니다. - 사람과 장소가 있는 이야기(소규모 비즈니스와 고객, 상점, 거리, 팀, 도시): 비즈니스, 장소 또는 제품에 대한 이야기(실제 매장 전면, 카운터, 음식, 지도, 작은 사람들이 생동감을 더함)인 경우 Illustrated; 시스템이 그 장소를 통해 어떻게 이동하는지(배달, 대기열, 교통, 신호)가 핵심인 경우 3D explainer. 사용자가 스타일("3D", "그림", "illustrated", "내 마지막 릴처럼")을 지정하면 그 스타일이 우선합니다.
- Classic (
- CTA 키워드: 주제와 연결된 기억에 남는 한 단어(예: PLUGINS, COFFEE), 대문자로 표기합니다. reel.json에 저장됩니다.
- 언어: 스크립트의 언어입니다. reel.json에
"language": "xx"(ISO 코드: ru, es, de, ar...)를 설정하여 음성, 자막, CTA 및 UI 텍스트(댓글 시트, DM)에 사용합니다. 확실하지 않으면 자막/강조를 직접 작성하세요. 라틴어, 키릴어, 그리스어 및 베트남어 글꼴은 번들로 제공됩니다. 다른 문자 체계의 경우 음성 단계 후에python3 "$SKILL_DIR/tools/fonts.py" check <project>를 실행하세요. - 음성 ↔ 발표자: 사용자가 자신에 대해 설명(성별, 나이)하거나 사진을 제공한 경우, 저장된 음성이 적합한지 확인하세요. 명백히 적합하지 않은 경우(예: 여성 발표자에게 남성 음성), 이를 언급하고 일치하는 음성을
voices.py search로 제공하거나(사용자가 고집하면 그 음성을 사용)하세요. 비영어 스크립트의 경우 해당 언어로 태그된 음성을 선호합니다.
2. 스크립트 (사용자가 제공한 경우 건너뛰기)
guides/scripting.md를 읽고 정확히 따르세요: 첫 1.5초 내에 훅, 두 번째 줄에 호기심 루프, 구체적인 위험 요소, 문제가 느껴진 후에만 제품/답변 언급, 대화체(단속적이지 않음), 110-170 단어(약 32-50초: 실행 시간 ≈ 단어 / (3 × 음성 속도) 초; 요청된 더 짧은 스크립트는 훅, 루프 및 페이오프를 압축하여 유지), "KEYWORD에 댓글을 남기면 보내드립니다..."로 끝납니다. <project>/script.txt에 작성합니다. 사용자가 검토를 요청한 경우 음성 작업 전에 채팅에서 스크립트를 보여주세요. 그렇지 않으면 계속 진행합니다(완성된 릴을 요청했습니다).
3. 프로젝트 + 음성
node "$SKILL_DIR/tools/reel.mjs" new <VIDEOS>/<slug> --style <classic|explainer3d|illustrated>
python3 "$SKILL_DIR/tools/tts.py" <VIDEOS>/<slug>
<VIDEOS> = 이 스킬 폴더 옆에 있는 videos/ 폴더(있는 경우, AI Video 워크스페이스: <workspace>/videos/<slug>/), 그렇지 않으면 사용자가 달리 말하지 않는 한 사용자 현재 폴더의 ./videos/입니다. <slug>는 짧은 케밥 케이스 주제 이름입니다. --style illustrated는 classic 프로젝트를 스캐폴딩합니다(reel.json "style": "classic", "look": "illustrated"). 아래에서 "classic"이라고 표시된 모든 내용이 여기에 적용되며, guides/illustration.md도 추가로 적용됩니다. tts.py는 audio/vo.mp3(일시 정지 조정, 저장된 음성 속도로 속도 증가(다른 --speed로 저장되지 않은 경우 ×1.15), 음량 정규화됨)와 build/words.json + build/word_index.txt(모든 단어와 시간)를 작성합니다. 모든 애니메이션은 이 단어들을 기반으로 큐됩니다.
- 음성 선택(첫 실행 또는 사용자가 변경 요청):
python3 tools/voices.py search "<원하는 것>" [--lang xx], 사용자에게 3개의 미리보기 링크를 제공한 후voices.py add <owner> <voice_id> "<name>"및voices.py use <voice_id> --name "<name>"을 실행합니다. 사용자 자신의 녹음:tts.py <project> --provider file --audio take.mp3. OpenAI 음성:voices.py provider openai. - 크레딧: 릴당 한 번의 음성 생성입니다. 나중에 스크립트를 변경하면 다시 생성하세요. 타이밍만 수정하는 경우
--reuse를 사용하세요(새 크레딧 없음).
4. 시각 자료 발명, 그 다음 비트 계획(코드 작성 전 스토리보드)
4a. 발명 (이것이 정성스럽게 제작된 릴과 템플릿을 구분짓습니다). 먼저 guides/mindset.md(기준과 고려해야 할 관점: 매우 창의적이고, 아름답고, 절대 비어 있지 않으며, 잘 애니메이션되고, 즉시 이해 가능)를 읽습니다. 그런 다음 guides/patterns.md(classic, illustrated) 또는 guides/patterns_3d.md(explainer3d)를 읽고 그 발명 방법을 이 스크립트에 적용합니다:
- 하나의 중심 은유/시각적 세계가 전체 아이디어를 전달합니다(행동이 곧 주장인 물리적 객체, 기계 또는 장소). 그리고 비트를 위한 3-6개의 맞춤 소품. 이들은 이 스크립트의 단어에서 비롯되어야 하며, 예시에서 가져오면 안 됩니다. 가이드와
library/의 예시 소품은 기술을 보여줄 뿐이며 절대 그대로 붙여넣지 마세요. 스스로에게 질문하세요: "이 프레임이 다른 사람의 릴에 어울릴까?" 만약 그렇다면, 너무 일반적입니다: 다시 발명하세요. - 실제 세계의 주제(스크립트가 실제 회사, 장소, 제품, 음식, 건물, 차량을 언급하거나 휴대폰에서 영상/앱을 보여줌): 평면 아이콘이나 명함이 아닌 실제처럼 그립니다:
guides/illustration.md(classic 및 illustrated:kits/illustrate.js프리미티브 +library/classic/illustrated/예시; 화면 속 영상은 항상 재생됨). 실제 사물이 종종 주인공이며 발명된 은유가 그 위에 작용합니다. - 발명 내용을
STORYBOARD.md상단에 기록합니다: 은유, 적합한 이유, 소품, 그리고 섹션당 하나의 "와우" 순간.
4b. 스토리보드. build/word_index.txt를 엽니다. 스크립트를 비트로 나눕니다: 문장 또는 아이디어당 하나의 비트, 각각 1.5-5초. 먼저 스타일 가이드의 품질 섹션을 읽고(참조 스트립을 살펴보세요) 모든 비트에 대해 다음 블록을 작성합니다(한 줄 비트는 허용되지 않음):
beat NN · "<words>" (word i0-i1, s-e)
stage stays : 이미 화면에 있고 유지되는 요소(및 위치)
each stressed word adds/changes : word → 들어오거나 상태가 변경되는 요소(강세 단어당 하나, 0.4-0.8초마다)
keeps moving : 모든 요소의 유휴 생동감(틱, 흔들림, 굴러감, 타이핑, 깜빡임, 떠다님)
presenter : (classic) 그가 가리키는 초점 + 구문별 행동 · (3D) 누가/무엇이 행동하는지
camera : 어떤 단어에서 기울이기/밀기/차기/컷 · 들어오는 전환
custom props : 당신이 발명한 소품 중 어떤 것이 나타나는지(새로 작성할 코드)
big moments : 강타, 컷, 휩, 공개: 초당 1개 이상 목표(릴 모션이 초안에서 측정)
규칙(guides/direction.md에서): 스테이지는 축적됩니다(모든 강세 단어가 요소를 추가하거나 변경하고, 이전 요소는 유지되며 계속 움직임) 정확히 하나의 초점을 유지합니다. 소리를 껐을 때도 그림이 이해되어야 합니다. 1.2초 이상 정적인 상태 없음. 큰 일은 강세 단어에서 발생합니다. 훅 비트는 이미 완전한 상태로 페이오프 또는 갈등을 즉시 보여줍니다.
5. 장면 구축
코드를 작성하기 전에 guides/styles/<style>.md를 전체적으로 읽으세요(illustrated: guides/styles/classic.md + guides/illustration.md)(품질 기준, 모양, 토큰, API, 장면 규약, 레시피). 엔진은 어떻게 움직이는지(스프링, 진자, 중력, 축적 스테이지, 발표자 연기, 카메라, 타이핑, 숫자 굴러가기, 전환) 제공합니다. 무엇이 움직이는지는 4a에서 발명한 소품으로, 프로젝트에 새 코드로 그려집니다. 예산: 제작자의 릴은 초당 50-110줄의 맞춤 장면 코드와 3-7개의 맞춤 그리기 객체를 포함합니다. 이에 맞게 계획하세요.
- 스타일의 도우미(
wordAt('word')/wi(index))를 사용하여 단어에 큐를 지정하고, 절대 하드코딩된 초를 사용하지 마세요. - 사용하기 전에 각 발명된 소품을 단독으로 미리보세요(해당 소품만 보여주는 임시 비트/장면,
reel stills <project> <t> --only <id>로 렌더링; explainer3d에는 키트 쇼케이스 페이지도 있음). 해당 장면 파일 이름을scenes/preview_<prop>.js로 지정하세요(craft는scenes/preview*.js및scenes/props*.js를 무시하므로, 실제 릴 코드를 이런 이름의 파일에 절대 넣지 마세요). Classic:SCENE_FILES에 나열하되TIMELINE에는 절대 넣지 마세요. 등록된 장면이 타임라인에 없으면 릴에서 렌더링되지 않습니다. 최종 전에SCENE_FILES에서 제거하세요. - 모든
reel stills/reel video후에 출력 끝 부분을 읽으세요. "error while drawing frames"가 나열되면 해당 프레임이 손상된 것입니다. 먼저 수정하세요. - 병렬 모드: 하위 에이전트 사용 (하나씩 모드는 동일한 비트를 동일한 비트별 브리핑으로 직접 하나씩 구축합니다): 1-2비트당 하나씩, 모두 병렬로, 각각 다음을 제공받습니다: guides/mindset.md(브리핑에 붙여넣기), 스타일 가이드 경로, guides/patterns(_3d).md, 비트가 실제 세계 주제(classic)를 그리는 경우 guides/illustration.md, 발명 블록, 스토리보드 라인 및 단어, 인접 장면의 핸드오프 상태. 각 하위 에이전트는
--out <its beat name>(자체 시트, 덮어쓰기 방지)으로 스틸을 렌더링합니다. 그런 다음 함께 검토합니다.
6. 자신의 작업 검토(필수, 전문가 수준으로 만드는 과정)
guides/review.md를 따르세요. 요약:
node "$SKILL_DIR/tools/reel.mjs" stills <project> <t1> <t2> ...를 모든 비트의 중간과 모든 컷 후 0.1초 후에 실행합니다(시트:stills/sheet.jpg). 시트 이미지를 살펴보세요. 검토 체크리스트의 모든 항목을 확인하고, 깔끔해질 때까지 수정 및 스틸 재렌더링하세요.node "$SKILL_DIR/tools/reel.mjs" video <project>(빠른 저해상도 초안,build/draft.mp4). 각 전환 주변의 프레임을 추출하여 살펴보세요(ffmpeg -ss T -frames:v 1). 팝, 겹침, 데드 에어를 수정하세요.node "$SKILL_DIR/tools/reel.mjs" motion <project>및node "$SKILL_DIR/tools/reel.mjs" craft <project>: 둘 다 PASS를 출력해야 합니다(craft = 충분한 독창적인 작업, 릴을 지탱하는 기본 소품 없음).motion은 모든 정체 구간과 해당 단어를 나열합니다. 각 구간에 축적 이벤트, 보조 동작, 카메라 이동 또는 발표자 행동을 추가하고, 초안을 다시 렌더링하고, 다시 실행하세요. 실패하는 동안 최종을 절대 렌더링하지 마세요. 사용자가 비디오 렌더링을 금지하는 경우 초안(2단계)과motion을 건너뛰고 대신 스틸에서 밀도를 확인하세요(guides/review.md, "Stills-only runs": 모든 강세 단어에 새로운 것이 있고, 연속된 두 스틸이 동일해 보이는 1.2초 윈도우가 없음).craft는 계속 실행되며, 전달 시 모션이 검증되지 않았다고 말하세요.- 최종 전에
guides/mindset.md의 질문(가장 창의적인가? 가득 차고, 아름답고, 살아있는가? 하나의 명확한 초점이 있는가? 제작자가 게시할 것인가?)을 통해 스틸 시트를 한 번 더 살펴보세요. 어떤 질문에 "아직"이라는 답이 있다면 먼저 개선하세요. - 최종:
node "$SKILL_DIR/tools/reel.mjs" video <project> --final그런 다음node "$SKILL_DIR/tools/reel.mjs" export <project>→out/<name>.mp4(1080x1920, 30 fps, H.264 + AAC, Instagram 준비 완료). 한 번에 하나의 렌더링만 실행됩니다(내장 잠금). 초안을 먼저, 최종은 한 번만: 사용자의 노트북에 부담을 덜 줍니다.
7. 전달
사용자에게 제공: out/<name>.mp4 경로, 게시 캡션(문맥을 추가하는 2-3줄, CTA 키워드, 3-5개의 관련 해시태그), "KEYWORD 댓글"에 약속한 링크가 포함된 DM 자동 응답(ManyChat, ReplyRush 또는 Instagram 자체 자동화)을 설정해야 한다는 알림. guides/delivery.md를 참조하세요. 한 번의 수정 기회를 제공하세요("더 빠른 훅", "다른 음성", "3번 장면 교체").
노력 모드 (~/.config/ai-video/config.json에서 agent_plan 및 quality 읽기; doctor가 출력함)
- 속도: Max, API, Team = 병렬 (1-2비트당 하나의 하위 에이전트, 모두 동시에: 훨씬 빠른 영상 제작)
…
[번역을 위해 잘림]