Communitygithub.com

Conz-Wilts/ai-editor

하나의 긴 동영상이나 팟캐스트(로컬 파일 또는 YouTube 링크)를 사용자 프로필 스타일에 맞춰 잘라낸 최고의 3~5개 짧은 세로 클립으로 변환합니다.

ai-editor란 무엇인가요?

이 스킬은 하나의 긴 동영상(로컬 파일 또는 YouTube 링크)을 입력받아 사용자의 편집 스타일에 맞춘 최고의 3~5개 짧은 세로 클립을 자동으로 생성합니다. 한 번의 자막 추출(Whisper 또는 Scribe)로 전체 동영상을 분석한 후, 문장 단위로 클립 후보를 생성하고, 화자 속도, 음량, 웃음, 숫자 및 이름 언급 등 여러 요소를 코드로 평가하여 점수를 매깁니다. 사용자는 하나의 페이지에서 모든 후보 클립의 미리보기와 점수를 확인하고 선택할 수 있으며, 선택된 각 클립은 자동으로 다듬기, 컷 편집, 스타일 편집을 거쳐 완성됩니다. Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용 가능하며, '이 비디오에서 클립을 만들어 줘', '팟캐스트를 쇼츠로 만들어 줘', '최고의 클립을 찾아 줘' 같은 명령어로 작동합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Conz-Wilts/ai-editor/tree/HEAD/.claude/skills/clips

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

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

문서

Clips

경로: ${CLAUDE_SKILL_DIR}는 이 SKILL.md가 들어 있는 폴더를, ${CLAUDE_SKILL_DIR}/../..는 그 위 두 단계 위의 에디터 폴더(이 저장소의 .claude/)를 가리킵니다.

먼저 ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md를 읽으십시오: 모든 동영상이 따라야 하는 규칙(질문하기, 실제처럼 보이기, 움직임, 스토리와 프레이밍, 개인정보, 비용)입니다.

사용자에게 하는 모든 질문은 질문 상자에 넣으십시오: AskUserQuestion 도구를 호출하십시오(2~4개 옵션, 추천 옵션을 맨 앞에). 해당 도구가 없는 에이전트에서만 번호가 매겨진 질문을 텍스트로 하십시오.

하나의 긴 동영상을 입력받아 최고의 몇 개의 짧은 클립을 출력합니다. 각 클립은 사용자 스타일의 완성된 세로 편집본입니다.

clips/<이름>/
  source.mp4          긴 동영상(로컬 파일의 경우 심볼릭 링크, 원본은 절대 수정하지 않음)
  source.mp3, cover.jpg  (오디오 전용 팟캐스트인 경우) 오디오와 쇼의 아트워크
  words.raw.json      전체 동영상의 자막 한 개(절대 읽지 않음)
  candidates.json     각 후보와 그 특성(절대 읽지 않음)
  shortlist.md        서로 겹치지 않는 상위 8개 후보, 약 1,500 토큰: 유일하게 읽는 파일
  shortlist.json      페이지용으로 동일한 정보
  picks.html          사용자가 선택하는 페이지
edits/<이름>-clip<N>/ 선택된 각 클립당 하나의 편집 폴더: source.mp4, words.raw.json(재타이밍됨), clip.json

스크립트는 Mac과 Linux에서 python3, Windows에서 py로 실행합니다. PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py"; python3 "$PY" 아래 명령어는 에디터의 venv Python을 실행합니다(Windows에서는 py "$PY"). 만약 없다면 먼저 setup 스킬을 실행하십시오. K="${CLAUDE_SKILL_DIR}/scripts/clips.py", C="${CLAUDE_SKILL_DIR}/../../skills/cut/scripts", S="${CLAUDE_SKILL_DIR}/../../skills/style-edit/scripts"입니다.

0. 한 번 질문하기

먼저 프로필과 취향을 읽으십시오(python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" show, python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show). 프로필이 아직 없으면 먼저 start 스킬의 스타일 인테이크를 실행하여 클립이 사용자의 스타일로 나오게 하십시오.

그런 다음 질문 상자 호출 한 번, 추천 옵션을 먼저:

질문옵션
클립 몇 개?3 (추천) / 5 / 1
각각 길이는?20-40 초 (추천) / 40-60 초 / 60-90 초
말하는 사람은 몇 명?한 명 (추천) / 두 명 (팟캐스트 또는 인터뷰)

사용자가 이미 답변한 것은 건너뛰십시오. 이 질문은 cut 스킬의 "먼저 자를지 한 번에 할지" 질문을 대체합니다: 클립은 바로 진행되며, 사용자는 선택 항목과 스틸 시트를 승인합니다.

1. 동영상

로컬 파일 (같은 드라이브의 하드 링크, 아니면 심볼릭 링크, 마지막 수단으로만 복사):

python3 "${CLAUDE_SKILL_DIR}/../../skills/clips/scripts/clips.py" link "<절대 경로>" clips/<이름>

링크:

python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/links.py" fetch "<url>" clips/<이름> --max-height 1080

venv의 yt-dlp를 사용하며(설치 시 PATH가 아닌 venv에 설치됨), 다운로드를 1080p로 제한합니다(1080x1920 클립에 4K는 필요 없으며, 20분 분량의 4K 영상은 수 GB입니다). 파일 경로를 출력합니다: clips/<이름>/source.mp4. 종료 코드 3: 사이트에서 로그인을 요구하는 경우(YouTube의 "로봇이 아닙니다" 확인). 질문 상자에 물어본 후 --cookies-from-browser chrome(또는 사용자 브라우저) 옵션을 추가하여 다시 실행하십시오. 팟캐스트(RSS 피드 또는 Apple Podcasts 쇼 링크): route가 최신 에피소드를 ask 옵션으로 나열합니다. 질문 상자에서 하나를 고르게 한 후(최신순), fetch "<옵션 url>" clips/<옵션 이름> --direct --cover "<옵션 이미지>"를 실행하면: 오디오는 source.mp3(또는 해당 확장자)로, 쇼의 아트워크는 cover.jpg로 저장됩니다. 사용자가 재사용할 권한이 있는 동영상만 다운로드하십시오: 자신의 동영상 또는 허가를 받은 동영상만 해당합니다. 링크가 타인의 것이라면 한 번 알려주십시오.

2. 한 번 자막 추출

python3 "$PY" "$C/transcribe.py" clips/<이름>/source.mp4 clips/<이름>/words.raw.json   # fetch가 출력한 파일: 오디오의 경우 source.mp3

먼저 시간을 알려주십시오: Whisper는 노트북에서 동영상 3분당 1~4분이 소요되며(무료), Scribe는 13분 동영상에 약 20초가 소요됩니다. cut 스킬과 동일한 엔진입니다. Scribe는 웃음 및 기타 오디오 이벤트를 추가하며, 점수 산정에 사용됩니다. 모든 클립이 이 자막을 재사용하므로, 두 번 추출하지 않습니다.

3. 후보와 쇼트리스트

python3 "$K" candidates clips/<이름> --min 20 --max 40 [--speakers 2] [--style creator-teardowns/<핸들>/style.json]

사용자가 선택한 길이를 전달하십시오. --style은 프로필의 첫 번째 크리에이터입니다: 거기서 측정된 "잘 통하는" 동작이 쇼트리스트에 나열됩니다. 코드는 자막을 문장으로 분할하고, 지정된 길이 안에 들어오는 모든 연속된 문장들을 후보로 만든 후(절대 "음"으로 시작하거나 단어 중간에 끝나지 않음), 각각을 측정하고 특성별로 순위를 매겨 shortlist.md에 기록합니다.

shortlist.md만 읽으십시오. 각 항목에는 후킹 문장, 각 중간 문장의 시작 단어, 마지막 문장 및 측정된 특성이 있습니다. 각 항목을 네 가지 질문으로 평가하십시오: 후킹이 단독으로 통하는가, 낯선 사람이 따라갈 수 있는가, 결말이 있는가, 구체적인 주장, 숫자 또는 이야기가 있는가.

words.raw.json이나 candidates.json은 절대 읽지 마십시오. 쇼트리스트에서 사용자가 요청한 수의 클립을 골라내되, 가장 좋은 것부터 선택하십시오. 점수와 관계없이 다음은 제외하십시오:

  • 광고, 스폰서 세그먼트, 인트로 또는 마무리;
  • 이전 맥락에 의존하는 후킹("아까 말했듯이", "그래서", "이건");
  • 시점이 지난 주장("이걸 녹음하는 지금은 40위야")을 핵심으로 하는 클립으로, 해당 주장이 이후 변경된 경우: 라이브로 오늘 페이지를 캡처하면 모순될 수 있음.

4. 선택 페이지, 그리고 질문 상자

python3 "$K" page clips/<이름> --recommend c12,c40,c7
open clips/<이름>/picks.html    # Windows: start "" ..., Linux: xdg-open ...

한 페이지: 각 쇼트리스트 클립에 대해 360px 미리보기, 자막(후킹 부분은 굵게), 점수 분석 및 측정된 특성, 사용자가 선택한 항목이 표시됩니다. 그런 다음 질문 상자에서 (다중 선택) 질문: 사용자가 선택한 항목을 먼저 표시하고 각 항목에 시간과 후킹을 레이블로 붙이며, "페이지에서 다른 항목" 옵션도 포함합니다. 답변을 기다리십시오.

5. 각 선택된 클립

python3 "$K" trim clips/<이름> c12 c40 c7          # -> edits/<이름>-clip1, -clip2, -clip3

각 편집 폴더는 source.mp4(프레임 정확, 다음 단어를 자르지 않도록 여백 포함)와 words.raw.json(해당 클립에 맞게 재타이밍)을 받습니다. 오디오 전용 소스(source.mp3)는 영상이 없습니다: trim은 각 클립의 source.mp4를 팟캐스트 자체 커버(커버를 블러 처리하고 어둡게 하여 1080x1920을 채우고, 선명한 커버는 자막 위에 위치, 아트워크가 없으면 검은 배경) 위에 오디오를 입힌 형태로 만들며, clip.json에는 audio_only라고 표시됩니다. 커버가 있는 경우, 렌더링은 이를 움직이게 처리합니다: 커버에 느린 푸시, 바닥이 미끄러지듯 움직임, 각 문장 시작에 작은 펀치 효과. 이 경우 레이아웃을 묻지 마십시오: 오버레이, 리프레임 없음, 컷아웃 없음, 자막 켜짐(profile.py style이 자막을 켜 둠). 각 클립은 쇼의 커버 위에 오디오와 화자의 단어가 자막으로 표시된다고 한 번 알려주십시오. 클립을 실행하기 전에 모든 클립에 대해 음악을 한 번에 결정하십시오(style-edit references/plan.md "Music"; 사용자가 sound.music을 설정하지 않았다면 스타일이 결정).

모든 클립을 한 번에 (Claude Code 또는 하위 에이전트를 지원하는 모든 에이전트): 각 클립당 하나의 clip-editor 에이전트(clip-editor)를 모두 같은 메시지에 실행하여 동시에 실행되도록 하십시오. 각 에이전트에 EDIT(클립 폴더의 절대 경로), ROOT(${CLAUDE_SKILL_DIR}/../..), PY 라인, 그리고 답변(화면비, 레이아웃, 음악, 자막 엔진, 리프레임 여부(가로 소스인 경우, 플랫폼이 YouTube가 아니라면 예), 소스에 자막이 하드코딩되어 있는지 여부)을 전달하십시오. 각 에이전트는 해당 클립을 cut 및 style-edit을 통해 스틸 시트까지 진행하고 짧은 JSON(status, cut_s, verify, cut_page, sheet, error)을 반환합니다. 이 결과들을 병합하십시오. 각 클립의 자막이나 페이퍼 에디트를 열지 마십시오. 그런 다음 ready 상태인 모든 클립의 시트에 대해 stills-critic 에이전트를 다시 모두 같은 메시지에 실행하고, 실패한 부분을 수정하십시오(해당 클립에 대해 계획 및 스틸 다시 생성). failed 클립은 아래와 같이 수동으로 실행하십시오.

하나씩 (하위 에이전트 없음), 각 클립을 순서대로:

  1. 가로 동영상에서 세로로: python3 "$PY" "$K" reframe edits/<이름>-clip<N> 명령어는 샷별로 화자의 머리를 따라가는 크롭으로 9:16 비율로 자릅니다(ffmpeg로 카메라 컷을 찾음). 프로필의 플랫폼이 YouTube이거나 소스가 이미 세로인 경우 건너뛰십시오.
  2. Cut: cut 스킬의 2단계(retakes.py propose)부터 진행: 자막은 이미 있습니다. 그런 다음 해당 스킬에 따라 빌드, 렌더링, 검증 및 cut 페이지를 진행합니다. 음성 아래의 음악은 파일별로 측정됩니다: build_timeline.py는 거기서 단어 사이만 다듬습니다.
  3. Style: python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" style edits/<이름>-clip<N>, 그런 다음 style-edit 스킬의 2단계부터 진행합니다. 소스에 이미 하드코딩된 자막이 있는 경우, 해당 편집의 style.json에 "captions": {"present": false}를 설정하지 않으면 자막이 겹칩니다.

어느 쪽이든, 모든 클립의 cut-check.html을 열고 모든 스틸 시트를 함께 표시하여 한 번에 승인을 받고, 모든 클립에 대해 렌더링 질문을 한 번 하고 렌더링합니다. 승인 후, 각 클립 폴더에 대해 python3 "${CLAUDE_SKILL_DIR}/../../skills/cut/scripts/judge_cut.py" score를 실행합니다(cut references/judge.md). 하나의 리뷰 페이지에 각 클립을 탭으로 표시하여(start는 clip 1, alt는 나머지, 폴더 clips/<이름>; ${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/review.md 참조) 렌더링 결과를 전달한 후, 백그라운드에서 serve와 wait를 실행합니다.

스크립트가 중단되는 경우

메시지조치
no run of whole sentences lasts <lo>-<hi> s질문 상자에서 더 넓은 길이를 물어보고 candidates를 다시 실행
no candidate <id>shortlist.md의 id 사용
links.py fetch exit 3 (로그인 또는 "로봇이 아닙니다" 확인)--cookies-from-browser <브라우저> 옵션을 추가하여 다시 실행하기 전에 질문
cut 또는 style-edit 메시지해당 스킬의 "스크립트가 중단되는 경우" 표 참조

규칙

  1. 화면에 표시되는 모든 단어, 숫자 및 이름은 해당 클립 자체의 단어에서 가져옵니다. 동영상의 나머지 부분이나 화자가 말하지 않은 것은 사용하지 않습니다.
  2. AI 티가 나는 모양은 금지: ${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/ai-tells.md가 모든 클립에 적용됩니다.
  3. 클로즈업 팟캐스트 프레임에는 빈 공간이 없습니다: 머리 위에 카드나 로고를 배치하지 않습니다. 시각 요소는 적을수록 좋으며, 자막과 줌이 이를 대신합니다.
  4. 클립을 문장 중간에 자르지 마십시오. 요청한 길이보다 짧거나 긴 것은 끊긴 생각보다 낫습니다.

긴 동영상당 비용

13분 분량의 2인 팟캐스트와 12분 분량의 1인 토크 동영상 기준(2026-10):

  • 자막 추출: Scribe는 16-18초 소요; Whisper는 무료이며 더 느림. 긴 동영상당 한 번.
  • 후보 및 특성 추출: 코드 실행 4-6초, 비용 $0.
  • Claude가 shortlist.md(약 1,500 토큰)를 읽고, 자막(약 20,000 토큰)은 읽지 않음.
  • 선택 페이지: 8개 미리보기용 ffmpeg 30-40초, 7-9MB.
  • 각 클립은 이후 cut 한 번과 style edit 한 번의 비용이 듭니다.

자체 점검

python3 "$K" demo

파일

  • scripts/clips.py: 후보 생성, 페이지, 트림, 리프레임 및 오프라인 데모(합성 자막). Stdlib만 사용, 단 reframe은 venv를 통해 OpenCV 사용.
  • ${CLAUDE_SKILL_DIR}/../../agents/clip-editor.md: 하나의 클립을 cut 및 style-edit을 통해 스틸 시트까지 진행.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Conz-Wilts/ai-editor

Reverse-engineers a short-form creator's video format from their real numbers. Pulls a TikTok or YouTube Shorts profile (or pasted links, Instagram reels too) with view, like and save counts, transcribes the top videos word for word, measures pace, pauses and fillers, maps each video into timed beats, and writes a teardown.md someone can film from, a teardown.html page of their graphics, motion and sound, and the style.json the style-edit skill edits from (on its own it can write an edit plan as a table and .srt). Use when the user wants to analyse, break down or study a creator ("analyse @handle", "tear down @handle", "teardown of @handle", "break down this creator", "what makes this creator's videos work"), pastes TikTok, YouTube or Instagram links and asks what the pattern is, or asks to set up creator-teardown. Not for editing the user's own video like a creator (that is start), not for researching a topic, and not for cutting raw footage.

Conz-Wilts/ai-editor

Cuts raw talking-head footage into a clean jump cut. Takes one take or several joined (mp4 or mov, any aspect, 4K phone footage is fine), transcribes it word by word, removes retakes, false starts, fillers and dead pauses, and renders cut.mp4 at the source resolution plus words.json timed to the cut. The user approves the cut on a page with the whole transcript and every removed word struck through. Use when the user says "cut my video", "just cut it", "remove my mistakes", "cut out the retakes", "remove the pauses", "clean up this take", "jump cut this", "tighten this clip", or asks only for the cut of a raw take; start calls it for a full edit. Runs before style-edit. Not for a general request to edit a video or to make it look like a creator (that is start), not for adding captions, zooms or cards (style-edit), and not for analysing someone else's videos (creator-teardown).

Conz-Wilts/ai-editor

Generates new footage with Higgsfield and puts it on the edit's timeline. Prices every generation first, asks the user with the dollar amount (and, for their own footage, whether it may be uploaded to Higgsfield), then submits, waits, downloads into the edit's generated/ folder and adds the result to the timeline's Generated track. Covers motion transfer on a clip of the user's video (their moves onto a character or styled look), b-roll from a sentence (text to video), a still brought to life (image to video) and stills for cards (text to image). Use when the user says "generate b-roll", "make a shot of", "AI b-roll", "generate a clip", "use Higgsfield", "motion transfer", "put my moves on", "restyle this part with AI", or asks for footage they did not film. Not for animated diagrams or motion graphics (motion), not for real screenshots and logos (overlays, logo-pack), and not for the cut (cut).

Conz-Wilts/ai-editor

For the editor's maintainers. Turns what users corrected into lasting fixes in this repo, for every user, enforced by code and tests rather than notes. Reads the suggestions users marked "would help everyone" (~/.ai-video-editor/suggestions.jsonl), taste rules said twice (taste.py report), preview corrections (edits/*/corrections.jsonl), review-page notes (*/review.json) and open GitHub issues labelled feedback; groups repeats; for each item the maintainer accepts, writes the general rule into PRINCIPLES.md and the skill that owns it, adds or tightens the check that enforces it, adds a test that fails before and passes after, and runs the full test set. Use when the maintainer says "improve the editor", "turn feedback into fixes", "process suggestions", "what are users complaining about", "go through the feedback issues". Not for one user's own preferences (that is taste), and not for editing a video.

관련 스킬