Communitygithub.com

Robbert-Sombrio/VideoEdit-

9:16 토킹헤드 클립을 완성된 프리미엄 인스타그램 릴스로 변환: 최상의 테이크를 선택하고, 무음 구간을 제거하며, 다양한 스타일의 편집과 애니메이션 효과를 적용하고, 프레임 단위 검증까지 수행합니다.

VideoEdit-란 무엇인가요?

/video-edit 스킬은 9:16 세로형 토킹헤드 클립을 프리미엄 인스타그램 릴스로 자동 편집하는 엔드투엔드 AI 에이전트 도구입니다. 사용자가 직접 편집기를 열지 않아도 되며, /video-edit 또는 '이 클립들 편집해줘' 같은 구문으로 트리거할 수 있습니다. 이 스킬은 여러 클립에서 각 대사 라인의 가장 깨끗한 테이크를 자동 선택하고, 무음 구간을 제거하며, 4K 원본에서 확대/축소를 적용합니다. 배경에서 사용자를 분리하여 머리 뒤에 텍스트를 배치하는 기능과 세 가지 프리미엄 디자인 룩(볼드 키네틱 워드, 쿨 걸, 쿨 가이)을 제공합니다. 또한 하위 에이전트를 병렬로 실행하여 애니메이션 UI 인서트를 생성하고, 미묘한 사운드 디자인을 추가하며, 모든 컷이 릴스 안전 영역 내에 있는지 프레임 단위로 검증합니다. macOS, Linux, Windows를 지원하며, 각 플랫폼에 맞는 의존성 설치를 자동화합니다. 이 스킬은 동시에 하나의 컷아웃만 실행하며 약 1.5GB RAM을 사용하고, 25초 릴스의 최종 렌더링은 Apple Silicon에서 약 1.5-2분이 소요됩니다. 매 라운드 약 2분 만에 재렌더링이 완료되어 빠른 피드백 루프를 가능하게 합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Robbert-Sombrio/VideoEdit-/tree/HEAD/.claude/skills/video-edit

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

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

문서

/video-edit

원본 클립을 넣으면 완성된 릴스가 나옵니다. 사용자는 편집기를 열 필요 없이 휴대폰 사본을 검토하고 의견을 주기만 하면 되며, 매 라운드는 약 2분 만에 재렌더링됩니다.

제작하기 전에 다음 문서들을 읽어야 합니다: references/looks.md (세 가지 룩, 정확한 값), references/layout.md (안전 영역, 배치, 머리 뒤 텍스트 공식), references/gotchas.md (이미 경험한 모든 함정). 스크립트에서 애니메이션 인서트를 요청할 때는 references/overlays.md를 읽으세요.

macOS, Linux, Windows에서 작동합니다. setup.py는 매 실행 시작 시 머신을 감지하고, 아래의 모든 명령어는 그 기록에서 가져오므로 경로나 셸을 추측하지 마세요: "이 머신" 섹션을 Step 0 직후 참조하세요.

Step 0: 최초 설정 (한 번만 실행)

SK는 이 스킬의 폴더입니다 (이 SKILL.md가 있는 폴더), 전체 경로로 표시됩니다. 보통 ~/.claude/skills/video-edit 입니다; Windows의 경우 C:/Users/<name>/.claude/skills/video-edit 입니다.

SK/config.json 파일을 찾으세요.

파일이 존재하면: 로드하고 (이름, 인스타그램 핸들, 기본 룩, 폴더), 아래 Step 3과 똑같이 설정 스크립트를 실행하세요 (몇 초 소요: 환경을 확인하고 업데이트 후 복구합니다), "이 머신"을 읽고, READY가 출력되면 Step 1로 이동합니다.

파일이 존재하지 않으면:

  1. "Welcome to /video-edit! Let's get you set up. This takes about 2 minutes and only happens once." 라고 말합니다.
  2. 한 메시지에서 다음을 물어보세요:
    • 이름 (인스타그램 프로필 인서트에 사용됨)
    • 인스타그램 핸들 (프로필 인서트와 궤도 효과를 위한 릴스 가져오기용)
    • 기본 룩: bold (머리 뒤 키네틱 워드), cool girl (따뜻한 노랑 세리프 이탤릭, 사용자 릴스가 궤도를 돔), cool dude (어두운 에디토리얼, 트래킹된 캡스 + 세리프). 사용자가 확실하지 않으면 bold를 제안합니다.
    • 원본 클립이 보통 위치하는 폴더 (기본값 ~/Downloads)와 프로젝트가 저장될 폴더 (기본값 ~/reel-edits)
  3. 머신에 있는 Python으로 설정 스크립트를 실행합니다. STATUS 줄을 출력할 때까지 다음 순서로 시도하세요: python3 "SK/scripts/setup.py", 그 다음 python "SK/scripts/setup.py", 그 다음 py -3 "SK/scripts/setup.py". (Windows에서 python3는 종종 Microsoft Store 스텁으로 "Python was not found"를 출력합니다: 다음 것을 시도하세요.) 모두 실행되지 않음: Python이 없습니다. 해당 시스템에 맞는 해결 방법을 알려주고 중단합니다 (Windows: winget install --id Python.Python.3.12 -e, Mac: brew install python, Linux: sudo apt install python3 python3-venv). 그런 다음 STATUS 줄을 읽습니다:
    • ffmpeg / node / python venv MISSING: 해당 줄 끝에 이 머신에 맞는 정확한 해결책이 있습니다 (Windows: winget, Mac: brew, Linux: apt). 사용자에게 알려주고 스크립트가 READY를 출력할 때까지 중단합니다.
    • Windows: 사용자는 winget 줄을 자신의 PowerShell 창에 붙여넣습니다 (winget은 처음에 이용약관에 동의하도록 요청함), 그런 다음 Claude Code를 완전히 종료하고 다시 열어야 새 프로그램이 인식됩니다.
    • 스크립트는 6개의 사운드 효과를 자체 다운로드합니다. 여전히 MISSING (오프라인)이라고 보고하면 선택 사항입니다: 추가될 때까지 릴스에 SFX가 없습니다.
  4. 선택 사항, Apify (자동으로 릴스와 프로필 통계 가져오기): 간단한 Apify MCP 호출을 시도합니다. 연결되지 않은 경우, 선택 사항이며 추가 방법을 알려줍니다:
    1. https://apify.com에서 무료 계정을 만들고 Settings > API & Integrations에서 API 토큰을 복사합니다.
    2. 터미널에서 YOUR_TOKEN을 실제 토큰으로 바꿔 다음 한 줄을 붙여넣습니다: claude mcp add apify -e APIFY_TOKEN=YOUR_TOKEN -- npx -y @apify/actors-mcp-server (주의: Claude Code는 토큰을 ~/.claude.json에 평문으로 저장합니다; 해당 파일을 비공개로 유지하세요.)
    3. Claude를 다시 열고 /video-edit을 다시 실행합니다. Apify가 없으면, 스킬은 사용자에게 프로젝트에 릴스 파일을 직접 드롭하도록 요청합니다.
  5. SK/config.json을 저장합니다 (비밀 정보는 절대 저장하지 않음):
    {"name": "...", "instagram": "handle-without-@", "defaultLook": "bold", "clipsDir": "~/Downloads",
     "projectsDir": "~/reel-edits", "setupComplete": true, "setupDate": "YYYY-MM-DD"}
    
  6. "Setup complete! Running /video-edit now..." 라고 말하고 계속 진행합니다.

이 머신 (매 실행 시 읽음)

setup.py가 작성한 SK/.platform.json을 읽습니다. OS (os: macos, linux, windows), CPU 및 이 컴퓨터의 정확한 명령어를 기록합니다:

  • PY = python 값: 스킬 자체의 Python입니다 (Mac과 Linux에서는 .venv/bin/python, Windows에서는 .venv/Scripts/python.exe). 이 스킬의 모든 Python 스크립트는 이것으로 실행하고, 절대 python3를 사용하지 마세요.
  • HF = PY "SK/scripts/hf.py": 적절한 Node로 고정된 HyperFrames (npx --yes [email protected] ...)를 시작합니다. nvm use나 npx.cmd 문제가 없습니다.
  • cutout: CoreML (Apple Silicon) 또는 CPU (Windows, Linux, Intel Mac: GPU 도움 없음, 따라서 컷아웃 단계가 느립니다. 그렇게 말하고 백그라운드에서 실행하며 계속 빌드합니다).

setup.py는 매 실행 시 (Step 0) 이 파일을 다시 작성하므로 항상 최신 상태입니다. 파일이 없거나 PY가 더 이상 존재하지 않으면: 설정이 실행되지 않았거나 READY에 도달하지 못한 것입니다. Step 0에서처럼 실행하고 그 수정 사항을 따릅니다.

zsh, bash, Git Bash 및 PowerShell에서 작동하는 하나의 명령 스타일:

  • 큰따옴표와 슬래시를 사용한 전체 경로 (Windows에서도 문제 없음): "PY" "SK/scripts/ingest.py" "<project>".
  • PowerShell (Windows에서 Git for Windows가 없거나 PowerShell 도구만 있을 때)에서는 앞에 &를 붙입니다: & "PY" "SK/scripts/ingest.py" "<project>".
  • 호출당 하나의 명령어. &&, VAR=1 command, 인수 내 ~, source, zsh를 사용하지 마세요.
  • ffmpeg와 ffprobe는 모든 OS에서 PATH에 있습니다 (설치 시 확인), 따라서 일회성 ffmpeg 명령어는 어디서나 동일합니다.

엄격한 규칙

  1. 모든 것은 릴스 안전 영역 내에 있어야 합니다: 상단 220, 하단 450 (y 1470 아래 없음), 측면 35, y 1155에서 오른쪽 100.
  2. 텍스트나 카드로 얼굴을 가리지 마세요. 머리 뒤 단어는 각 글자의 최소 ~70%가 보여야 합니다.
  3. 자막은 실제로 말한 내용을 표시합니다: Whisper가 이름과 키워드를 잘못 알아듣는 것을 수정합니다 ("Claude"는 종종 "cloud"/"claws"로, "skill"은 "scale"로 나옵니다). 화면 텍스트에 em 대시를 사용하지 마세요.
  4. 사운드 효과는 미묘하게 (템플릿 SFX_GAIN = 0.75 기본 볼륨), 목소리보다 크지 않아야 합니다.
  5. 다른 제작자의 릴스가 나타날 때마다 화면에 크레딧 (@handle)을 표시합니다. 사용자 자신의 프로필에는 실제 숫자를 사용합니다. 다른 것 (댓글, 채팅 기록)은 일반적인 플레이스홀더이며, 실제 인물이 아니며, 조작된 증거가 아닙니다.
  6. 최종 렌더링의 컷을 증명하며, 스냅샷이 아닙니다.
  7. 사용자의 파일을 절대 삭제하지 마세요. 원본 파일은 읽기 전용이며 수정되지 않습니다.

워크플로우

1. 수집

  • 클립: 사용자가 지정한 파일, 또는 clipsDir에서 가장 최신 비디오 파일. <projectsDir>/<short-slug>/를 생성합니다. (config.json의 ~는 사용자의 홈 폴더, Windows의 경우 C:/Users/<name>입니다. 스킬 스크립트가 확장합니다.)
  • 스타일 참조 링크 (IG 릴스, Pinterest 핀): 디자인하기 전에 다운로드하여 프레임을 확인합니다 (가져오는 방법은 overlays.md 참조).

2. 인제스트

PY SK/scripts/ingest.py <project> <clips or folder> [--newest 5]

work/sheets.jpg (셋업과 앵글)와 transcript.txt (클립별 라인, 시간이 포함된 단어, 음성 맵)를 확인합니다.

3. 테이크 선택 -> <project>/edl.json

  • 테이크에서 스크립트를 재구성합니다: 사람들은 라인이 잘 될 때까지 반복합니다. 사용자가 달리 말하지 않는 한 ("더 나은 부분은 0:47부터 시작"은 그 지점부터 연속 테이크를 의미) 마지막 완전하고 깨끗한 테이크를 사용합니다.
  • 음성 맵을 기반으로 인/아웃 포인트 설정: 첫 단어보다 약 0.05-0.07초 전에 시작하고, 마지막 단어 후 무음 시작 시 종료합니다. 섹션 사이의 데드 에어를 제거합니다. 짧은 일시 중지는 silencedetect로 확인한 후 자릅니다 (Whisper는 컷에서 앞 단어를 잘못 생성할 수 있음).
  • 같은 앵글에서 연속된 두 세그먼트: 하나를 확대합니다 (4K 원본에서 줌 1.3-1.9, cx/cy는 가슴 부분).
  • 불확실한 단어 (키워드, CTA 트리거): 해당 스니펫을 medium.en 모델과 이름이 포함된 프롬프트로 다시 전사합니다.
  • 형식: [{"id": "hook", "clip": "c1", "in": 12.66, "out": 15.72, "zoom": 1.0, "cx": 0.5, "cy": 0.5, "line": "..."}]
  • EDL을 사용자에게 짧은 표 (라인, 클립, 섹션별 룩)로 게시하고 계속 진행합니다. 기다리지 마세요.

4. 어셈블, 전사, 컷아웃

PY SK/scripts/assemble.py <project>                 # aroll.mp4 30fps CFR 클린 + 정확한 프레임이 포함된 segments.json
PY SK/scripts/transcribe_cut.py <project> "<스크립트의 이름과 키워드>"
PY SK/scripts/cutout.py <project>                   # 백그라운드 실행; 컷아웃 프레임 == aroll 프레임 확인
PY SK/scripts/headpos.py <project>                  # 컷아웃 후: 세그먼트별 머리/몸 위치

한 번에 하나의 컷아웃 (약 1.5GB RAM 사용). 30초마다 진행률 줄을 출력합니다.

5. 인서트 (EDL이 확정되는 즉시 병렬로)

스크립트에서 요청하는 각 애니메이션 인서트 (화면의 앱, CTA의 프로필 팔로우, 파일 스크롤)에 대해 references/overlays.md의 브리프 템플릿을 사용하여 백그라운드에서 하위 에이전트를 생성합니다: 고정 크기, 고정 지속 시간, 비트가 단어 시간에 맞춰지고, 투명 웹을 출력합니다. 인서트가 작업하는 동안 메인 편집을 계속 빌드합니다.

6. 빌드

SK/assets/template/을 프로젝트로 복사하고 (build.py, hyperframes.json, package.json, assets/fonts, assets/sfx), 그 다음 build.py를 적응시킵니다. 이것은 실제 릴스의 완성된 빌드입니다: 기계 장치는 유지하고, 콘텐츠를 다시 작성합니다 (docstring에 어떤 것이 무엇인지 나열되어 있음).

  • 어떤 룩을 어디에 적용할지: 전체 릴스에 defaultLook 사용; 룩 이름을 지정하는 라인은 해당 섹션을 전환합니다.
  • 궤도와 프로필 그리드는 사용자 자신의 릴스를 사용합니다 (overlays.md: 핸들로 Apify 포스트 스크래퍼 사용, 또는 assets/reels/에 드롭한 파일 사용).
  • 프로젝트 폴더에서 반복: HF lint (0 에러), 그 다음 PY build.py --safe, 그 다음 HF snapshot --at <10-20 moments> --no-end --describe false. 연락처 시트를 읽고, 레이아웃, 가독성 및 안전 영역을 수정합니다. (HF는 자체적으로 적절한 Node를 선택하므로 nvm use가 필요 없습니다.) 이전 버전의 스킬에서 복사된 build.py는 --safe를 무시합니다: 스냅샷에서 빨간 가이드가 누락된 경우, 옛날 방식으로 프로젝트를 빌드합니다, SAFE=1 "PY" build.py (이러한 프로젝트는 Mac과 Linux에만 존재합니다).

7. 렌더 및 QA

PY build.py           # --safe 없이
HF render -o renders/<slug>-vN.mp4 --quality high      # Apple Silicon에서 25초 릴스 기준 약 1.5-2분
PY SK/scripts/check_cuts.py <project> renders/<slug>-vN.mp4 --phone

work/cut_check.jpg를 확인합니다: 모든 컷 후 프레임은 새 샷이 깨끗하게 보여야 합니다. 오디오 피크 (volumedetect, 최대 -2 ~ -5 dB 정도)와 섹션 연결부의 무음을 확인합니다.

8. 전달

휴대폰 사본 (720p)과 풀퀄리티 렌더를 보내거나 가리킵니다. 무엇이 변경되었는지와 사용자의 결정이 필요한 사항을 평이한 용어로 보고합니다. 모든 버전을 renders/에 보관합니다. 재어셈블하기 전에 assets/ + segments.json을 work/vN/에 백업합니다.

실제 피드백에서 나온 기본값 (재논의하지 마세요)

  • 룩을 만들기 위해 그레이딩과 자막을 변경하세요; 배경을 AI 생성 방으로 교체하지 마세요.
  • 필름 그레인 없음. 어두운 것은 괜찮지만, 피사체를 밝게 유지하고 피부가 빨갛게 변하지 않도록 하세요.
  • 리드인 자막은 화자 앞 중앙에 배치하는 것이 왼쪽 가장자리에 고정하는 것보다 읽기 쉽습니다.
  • 머리 뒤 단어는 시그니처 무브이지만, 읽을 수 있을 때만 사용합니다.

@tenfoldmarc 제작. 매일 AI 자동화 빌드, 실제 시스템, 이론이 아닌 실제를 위해 팔로우하세요.

관련 스킬