Communitygithub.com

몽타주 에디터

토킹헤드 영상(9:16 릴, 틱톡, 쇼츠 또는 유료 광고)을 역동적인 모션 그래픽 편집물로 만듭니다. 전체 화면의 얼굴과 스피커가 하단 카드로 축소된 패널을 번갈아 보여주며, 그 위에 브랜드의 공식 로고, 웹사이트 캡처, 채팅/전화 목업, 기능 카드, 로고 리빌 등 애니메이션 그래픽이 재생됩니다. 자막, 배경 음악, 음향 효과, 확대/축소 카메라 움직임이 포함되며, 사용자가 모든 요소를 클릭하여 댓글을 남기면 Claude가 처리하는 로컬 CapCut 스타일 편집 인터페이스(씬 목록, 라이브 프리뷰, 타임라인)를 엽니다.

몽타주 에디터란 무엇인가요?

이 스킬은 사용자가 보낸 토킹헤드 영상을 전문적인 모션 그래픽 편집물로 변환하는 AI 비디오 에디터입니다. 입력된 영상에서 Whisper로 단어 수준의 타임라인을 추출하고, 배경에서 인물을 분리(mask)하여 얼굴 위에 자막이 겹치지 않도록 합니다. 편집 과정은 크게 11단계로 나뉘며, 각 단계마다 전용 스크립트가 준비되어 있습니다. 준비 → 클라이언트 사이트 캡처 → 자막 생성 → 편집 계획 → 프로젝트 설정 → 씬 구성 → 사운드 디자인 → 앵커 설정 → 프리뷰 → 렌더링 → 에디터 실행 순서로 진행됩니다. 특히 모든 애니메이션은 Element Registry에 등록되어 사용자가 편집 인터페이스에서 선택, 이동, 숨기기, 댓글을 달 수 있습니다. 댓글이 도착하면 Claude가 `gfx.js`, `sons.json`, `carts.json` 등을 실시간으로 수정하고 빌드하여 프리뷰를 자동 갱신합니다. 이 스킬은 Claude Code, Cursor, Windsurf, Codex CLI, Cline, Aider, VSCode AI, Continue, GitHub Copilot 등 모든 파일 시스템 기반 AI 코딩 도구에서 사용할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hakunadigitalpro-png/montage-editeur/tree/HEAD

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

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

문서

모션 그래픽 편집 + 편집 인터페이스

사용자와 그들의 언어로 대화하세요. 자막은 화자의 정확한 단어로 작성하세요 (절대 의역하지 마세요).

경로: ME = 이 스킬 폴더, W = 비디오당 하나의 프로젝트 폴더. 모든 스크립트는 bash/python/node입니다. scripts/env.sh는 ffmpeg, node, python, Chrome 및 번들 엔진(engine/)을 찾습니다. 처음 사용 시: README.md → 설치 (npm install in the skill folder, pip install -r requirements.txt).

규칙 (협상 불가)

  1. 공식 로고만 사용하세요. 언급된 브랜드에 대해 다시 그린 "영감을 받은" 아이콘은 절대 사용하지 마세요. 브랜드 웹사이트에서 가져오거나(capture_site.js) 사용자에게 요청하세요.
  2. 브랜드 차터: 클라이언트의 경우, 웹사이트(captures/info.json)에서 색상, 글꼴 및 로고를 읽고 parts/top.js 상단에 팔레트를 작성하세요. 사용자 자신의 비디오의 경우, 한 번 차터를 요청하고 theme.json + top.js에 보관하세요.
  3. 웹사이트 캡처: 클라이언트 사이트의 전체 페이지(데스크톱 + 모바일)를 캡처하고 패널(스크롤하는 브라우저, 자른 공식 일러스트레이션)에 사용하세요. 쿠키 배너는 숨기고, 절대 수락하지 마세요. 로그인된 제품 화면은 접근할 수 없습니다: 그렇게 말하고 사용자가 제공하는 스크린샷을 통합하겠다고 제안하세요.
  4. 리듬: 전체 화면 ↔ 패널 (축소 IN, 확대 OUT), 강한 단어에 펀치인 (~2-3초마다 1회), 정확히 하나의 시그니처 순간 (로고/이름 리빌), 배경 음악은 음성 아래로 덕킹, 음향 효과 (모든 줌에 우슈, 팝, 클릭, 타이핑, 리빌에 임팩트), 점프 컷에 라이트 플래시.
  5. 유료 광고: 상단 14%(y < 270) 및 y ≈ 1250(릴/틱톡 UI) 아래에는 중요한 내용을 배치하지 마세요. 자막 올림(CAPDY), 패널 내부에는 자막 없음 (패널이 단어를 제목으로 표시함), 엔드 카드 = 브랜드 로고 + URL + 화자의 단어, 허위 주장이나 숫자 금지.
  6. 자막은 절대 얼굴 위에 있지 않습니다. LTR 언어 → projet.json에 "sens": "ltr" (빌드가 단어 순서를 수정함), RTL(아랍어) → "rtl". 브랜드 이름은 알약 모양으로 (fx: "pill", 색상은 projet.json → pill).
  7. 믹싱: 사용자가 에디터에서 음성/음악/효과를 설정합니다. 기본값: 음성 100%, 음악 46%, 효과 36%. 항상 -14 LUFS로 라우드니스 노멀라이즈하세요.
  8. 모든 애니메이션은 레지스트리 ELEMENT입니다 (아래 참조). 사용자가 선택, 이동, 숨기기 및 댓글을 달 수 있습니다. 레지스트리 밖의 애니메이션은 없습니다.
  9. 앵커: 모든 wS(card, word)는 애니메이션이 설명하는 단어를 가리켜야 합니다. scripts/ancres.py를 실행하고 테이블을 읽으세요. 절대 인덱스를 추측하지 마세요.

워크플로우

  1. 준비: bash $ME/scripts/preparer.sh <video> <W> <lang> "<Whisper 프롬프트: 고유 명사>" → 소스 복사, 전체 프레임 크롭, 프레임, 예상 컷, 단어 수준 타임라인. 그런 다음 배경에서 인물 분리(~1초/프레임; Whisper와 동시에 실행하지 마세요 — RAM): python $ME/engine/mask.py u2net_human_seg <W> && python $ME/engine/make_head.py <W>.
  2. 클라이언트 (있는 경우): node $ME/scripts/capture_site.js <url> <W> → captures/, assets/logo-*.png, 색상/글꼴. 캡처를 살펴보고 유용한 시각 자료를 W/assets/로 자르세요 (일러스트레이션, 스크롤러 브라우저용 긴 페이지).
  3. 자막: W/cartes.json 작성 (정확한 단어 + Whisper 타이밍; 2-5단어 카드; hot, fx) → python $ME/scripts/cartes.py <W>. 템플릿: templates/cartes.EXAMPLE.json.
  4. 편집 계획: 스크립트를 비트(훅, 문제, 제품, 증거, CTA…)로 나누고, 각각에 대해 전체 화면 또는 패널, 보여줄 구체적인 오브젝트, 하나의 시그니처 순간, 사운드를 선택하세요. W/plan-montage.md 작성 (템플릿 templates/plan.EXAMPLE.md) 후 애니메이션 전에 사용자에게 간략히 보여주세요.
  5. projet.json (템플릿 templates/projet.EXAMPLE.json): nom, titre, langue, sens, outro, vol, musique_gain, pill, coupes, cadrage (패널에 들어갈 샷 → 측정 창), cadrage_force (마스크가 배경을 잡을 경우). 그런 다음 python $ME/scripts/framing.py <W>.
  6. 씬 in W/parts/: top.js ← templates/top.EXAMPLE.js (팔레트, CUTS/SEGB, PANELS, 줌 ZP, CAPDY); primitives.js ← templates/primitives.js; gfx.js ← templates/gfx.EXAMPLE.js (SCENES_ED, 애니메이션당 하나의 EL(...), 레이어, 엔드 카드, 폰트).
  7. 사운드: W/sons.json (템플릿 templates/sons.EXAMPLE.json): musique {bpm, intro_filtree, coupure = 리빌 전 무음, accords} 및 events = [element|null, time|"fin+x", "sound[:param]", gain, [repeat, step]]. 사운드: pop, bulle, clic, shutter, succes, buzz, tick, touche, impact, tape, whoosh_in:dur, whoosh_out:dur, ding:freq:dur, shimmer:dur, riser:dur, souffle:dur. 각 사운드를 해당 요소에 연결하여 요소가 이동되거나 숨겨질 때 따라가도록 하세요.
  8. 앵커: python $ME/scripts/ancres.py <W>.
  9. 프리뷰: python $ME/scripts/build.py <W> 후 node $ME/engine/04_render_frames.js <W> preview t1 t2 … → 콘택트 시트 → 까다로운 편집자처럼 검토 (읽을 수 있는가? 얼굴이 선명한가? 광고 안전 영역?)하고 수정 후 렌더링.
  10. 렌더링: bash $ME/scripts/rendu.sh <W> (백그라운드, 3-6분) → <nom>.mp4 (+ .srt/.txt), 스템은 mixage/pistes/, 에디터 미디어. MP4의 6-8프레임, -14 LUFS, 크기를 확인하세요.
  11. 에디터: python $ME/scripts/editor_server.py <W> <port> 실행 (Claude Code 데스크톱: .claude/launch.json에 추가하고 프리뷰 도구 사용), http://localhost:<port>/editeur/를 여세요. 프리뷰, 클릭-선택 및 재생이 작동하는지 확인하세요.
  12. 댓글 감시: W/comments.json을 모니터링하고 status == "à faire"인 새 댓글당 한 줄씩 출력하세요 (references/editor.md에 명령 있음).

댓글 처리

  1. 읽기 (target = el:<id> | scene:<id> | cap:<n> | audio:<track>, t, 클릭 x,y).
  2. 상태를 "en cours"로 설정: POST /api/comments/status {"id":…,"status":"en cours"}.
  3. parts/gfx.js (또는 줌/패널의 경우 top.js, 자막의 경우 cartes.json, 사운드의 경우 sons.json)에서 요소를 변경하되, 차터와 레지스트리 내에서 유지하세요. 요청이 모호하면 최선의 옵션을 적용하고 답변에 대안을 언급하세요.
  4. python $ME/scripts/build.py <W> (+ 사운드 변경 시 sons.py) → 에디터가 스스로 프리뷰를 다시 로드합니다. 1-2 프리뷰 프레임을 확인하세요.
  5. 상태 "fait" + 짧은 reply (무엇이 변경되었는지) — 에디터에 표시됩니다. 사용자에게 "비디오 렌더링"을 클릭할 수 있음을 알리세요.
  6. 일반적인 선호사항 ("X는 절대 원하지 않음") → 이 파일의 규칙에 추가하세요.

요소 레지스트리 (에디터와의 계약)

EL(id, name, scene, layer, [x,y,w,h], ()=>[start,end], t=>{…draw…})

  • layer: 'panel' (패널 내부, 튀어나오는 헤드 뒤에 그려짐) · 'full' (전체 화면, 앞에) · 'none' (전역: 플래시, 엔드 카드).
  • 받은 t = 에디터가 이동시킨 시간 (EDITS.off); 자신의 윈도우 내에서만 그리기; EDITS.hide[id]이면 숨김.
  • 박스 [x,y,w,h]는 프리뷰에서 클릭하는 데 사용됩니다: 정확하게 유지하세요.
  • SCENES_ED = 에디터 왼쪽에 나열된 씬 (id, label, a, b, kind).
  • 줌: 각 ZP 항목은 요소 zoom<i>입니다 (에디터에서 제거 가능).

프로젝트 파일

projet.json · cartes.json → caps.json (caps.orig.json = 에디터 베이스) · sons.json · parts/{top,primitives,gfx}.js · framing.js · edits.json (에디터 설정: off, hide, caps, vol) · comments.json · captures/, assets/ · mixage/pistes/ · editeur/ · <nom>.mp4/.srt/.txt.

관련 스킬