Communitygithub.com

eduramza/shorts-factory

긴 영상(트랜스크립션 + 메타데이터)을 후크 → 스토리텔링 → 페이오프 구조를 사용하여 리텐션 라인에 최적화된 세로형 숏츠(Shorts/TikTok/Reels)로 변환합니다. 구간을 선택, 점수화, 후크 재배열, 컷, 자막, 줌, 음악 및 효과를 정의하고 JSON 형식의 편집 결정 목록(EDL)을 반환합니다.

shorts-factory란 무엇인가요?

이 스킬은 긴 형식의 비디오(트랜스크립션 및 메타데이터 포함)를 짧은 세로형 비디오(Shorts, TikTok, Reels)로 변환하는 AI 에이전트(Claude Code, Cursor, Codex 등)를 위한 정교한 파이프라인을 제공합니다. 핵심은 리텐션 라인(시청자가 영상을 끝까지 시청하도록 유지하는 비율)을 최적화하는 데 있으며, 이를 위해 후크(Hook: 처음 3초), 스토리텔링(Storytelling: 중간 긴장감 구간), 페이오프(Payoff: 마지막 3-5초 보상)의 세 부분 구조를 사용합니다. 이 스킬은 원본 비디오의 트랜스크립션에서 후보 구간을 생성하고, 후크 잠재력, 긴장감, 페이오프 등 여러 기준으로 점수를 매긴 후, 가장 높은 점수의 구간을 선택합니다. 그런 다음 후크를 강화하고(콜드 오픈 기법 포함), 긴장감 비트를 매핑하며, 다이나믹 자막, 줌, 배경 음악, 효과음을 포함한 상세한 편집 계획을 수립합니다. 최종 결과는 JSON 형식의 EDL(Edit Decision List)로, 영상 편집 소프트웨어에서 직접 사용하거나 자동화된 편집 파이프라인에 통합할 수 있습니다. 이 스킬은 또한 품질 보증 체크리스트, 안전 규칙, 그리고 실제 리텐션 데이터를 기반으로 한 가중치 조정 메커니즘을 포함하여 지속적인 개선을 지원합니다. 주요 타겟 플랫폼은 모든 숏폼 비디오 플랫폼이며, 특히 YouTube Shorts, TikTok, Instagram Reels에 최적화되어 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/eduramza/shorts-factory/tree/HEAD/skill-retention-shorts

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

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

문서

스킬: 리텐션 숏츠 (후크 → 스토리텔링 → 페이오프)

0. 출처 및 방법론적 정직성

기반: "ESSA TÉCNICA VIRALIZOU MEU SHORTS COM 30 MILHÕES DE VISUALIZAÇÕES" 동영상 (O Milionário 채널, ID iPpt_INjn8A). [VÍDEO] 표시 항목은 저자가 가르치는 내용에서 가져왔습니다. [EXT] 표시 항목은 이 시스템의 엔지니어링 확장입니다: 합리적인 휴리스틱이지만, 동영상에서 입증되지 않았습니다. 실제 리텐션 데이터로 보정해야 합니다(섹션 10 참조).

1. 핵심 원칙 [VÍDEO]

  • 짧은 동영상의 바이럴 여부를 결정하는 것은 리텐션 라인(retention line)입니다: 더 많은 사람들이 끝까지 시청할수록 플랫폼이 더 많이 배포합니다.
  • 목표: 리텐션 라인을 가능한 한 직선으로, 하락 없이 유지하는 것입니다. 중요한 것은 시청자가 끝까지 도달하는 것입니다.
  • 세 가지 필수 부분: 후크(Hook), 스토리텔링(Storytelling), 페이오프(Payoff).
  • 스크립트/내러티브는 "자동차의 엔진"입니다: 내러티브 없이 예쁜 편집만으로는 시청자를 붙잡을 수 없습니다.
  • 길이: 약 ~15초 이하의 동영상은 폭발적으로 퍼지는 경향이 더 큽니다. 왜냐하면 끝까지 시청하기 더 쉽기 때문입니다. 더 긴 동영상은 바이럴되기 더 어렵지만 충성도 높은 시청자를 구축합니다. 니치가 더 긴 동영상을 요구한다면 동일한 세 단계를 사용하십시오.

2. 길이 모드 [VÍDEO + EXT]

모드목표 길이사용 시기
viral12–20초 (최대 25초)도달 범위 최대화. 기본값.
balanced20–40초최소한의 컨텍스트가 필요한 콘텐츠.
authority40–75초충성도 높은 시청자 구축, 더 깊은 콘텐츠.

사용자가 모드를 선택합니다. 구간이 좋더라도 모드 제한을 초과하지 마십시오: 죽은 부분을 잘라서 줄이십시오.

3. 의사 결정 파이프라인 (순서대로 따르십시오)

단계 1: 후보 구간 분할

  • 입력: 단어별 타임스탬프가 있는 트랜스크립션, 장면 전환, 침묵, 화자.
  • 문장 경계에서 시작하고 끝나는 후보 윈도우를 생성하십시오(문장이나 아이디어 중간에서 절대 시작/끝나지 않음). 요청된 수보다 3배 더 많은 후보를 생성하십시오.
  • 각 후보는 자체 완결적(self-contained)이어야 합니다: 컨텍스트가 없는 시청자가 나머지 동영상 없이도 이해할 수 있어야 합니다. 이전 컨텍스트에 의존한다면 폐기하거나 컨텍스트 자막을 준비하십시오(섹션 6).

단계 2: 각 후보 점수 매기기 (0–100)

기준가중치평가 항목
후크 잠재력25처음 3초 안에 명확하고, 직접적이며, 빠르고, 보상을 약속하는 문장이나 순간이 있는가 [VÍDEO]?
긴장감/내러티브25갈등, 잘못되는 일, 장애물, 열린 질문 또는 서스펜스가 있는가 [VÍDEO]? 해결책이 있는가?
페이오프20결말이 후크가 약속한 것을 제공하는가 (결과, 폭로, 감정, 결론) [VÍDEO]?
자체 완결성15단독으로 의미가 통하는가? [EXT]
밀도/리듬10잡담이 적고, 일시 정지가 적으며, 몇 초마다 정보가 제공되는가 [EXT]
감정/참신함5놀라움, 유머, 강한 의견, 충격적인 숫자 [EXT]

규칙:

  • 후크 < 12/25 또는 페이오프 < 8/20 → 총점에 관계없이 폐기.
  • 사용자에게 기준별 점수와 각각에 대한 1줄 설명을 표시하십시오.
  • 점수순으로 정렬하십시오. 중복 구간(> 30% 겹침)을 피하십시오: 더 나은 것을 유지하십시오.

단계 3: 후크 → 스토리텔링 → 페이오프 구조 매핑

선택된 후보에 대해 타임라인에 표시:

  • HOOK (0–3초) [VÍDEO]: 명확하고, 직접적이며, 빠르고, 약속이 있는 것. 인사, "안녕하세요", "그래서", 소개 없음.
  • STORYTELLING (중간) [VÍDEO]: 긴장감 비트의 시퀀스. 각 비트는 다음 유형 중 하나: conflict (무언가 잘못됨), solution (하는 일), suspense ("하지만 그 전에... 무언가 일어났다"). 내러티브는 이야기가 "중단"되고 호기심을 만드는 순간이 있어야 합니다.
  • PAYOFF (마지막 3–5초) [VÍDEO]: 후크가 약속한 보상을 전달합니다.

원본 구간이 강한 후크로 시작하지 않는 경우, Cold Open 기법을 적용하십시오 [EXT]:

  1. 구간 자체 내에서 가장 강력한 문장(약속, 결과 또는 가장 도발적인 문장)을 찾으십시오.
  2. 해당 문장을 처음(0–3초)에 후크로 배치한 다음, 원래 시간순으로 돌아가십시오.
  3. 문장이 단독으로 의미가 있고 페이오프가 계속 명확한 경우에만 이렇게 하십시오. 의미를 왜곡하지 마십시오: 말한 사람의 의미를 변경하는 것은 금지됩니다.

단계 4: 후크 엔지니어링 [VÍDEO + EXT]

  • 화면에 표시할 후크 텍스트(오프닝 제목)의 3가지 변형을 생성하되, 각각 ≤ 8단어:
    • 결과 약속 ("할머니를 울린 5달러짜리 선물").
    • 호기심/갭 ("저는 5달러밖에 없었는데...").
    • 모순/도발.
  • 텍스트는 콘텐츠와 관련하여 사실이어야 합니다 (페이오프가 뒷받침하지 않는 클릭베이트 금지).
  • ≤ 2초 안에 읽을 수 있어야 합니다.

단계 5: 리듬 정리 [EXT]

  • 0.35초의 침묵, 머뭇거림 ("음", "아", "그러니까", "어"), 반복 및 잘못된 시작을 제거하십시오.

  • 폭로 전에 미세 일시 정지(0.1–0.2초)는 유지하십시오 (긴장감). 일시 정지에 기능이 있는 경우.
  • 음절 중간에서 자르지 마십시오: 오디오 제로 크로싱 지점에서 컷 포인트를 사용하고 30–60ms 크로스페이드를 사용하십시오.
  • 결과가 모드 제한을 초과하는 경우, 먼저 중간에서 긴장감이 가장 낮은 비트를 제거하고, 후크나 페이오프는 절대 제거하지 마십시오.

단계 6: 편집 계획 [VÍDEO + EXT]

동영상이 추천하는 요소, 시청자가 "시간이 가는 줄 모르게" 하기 위한 것 [VÍDEO]:

  1. 다이나믹 자막: 단어별로, 말하는 단어를 강조.
  2. 줌 및 빠른 컷: 항상 무언가 일어나고 있어야 함.
  3. 장면 간 음악 전환: 동시에 여러 가지 일이 일어나는 느낌을 줌.
  4. 긴장감 구간에 서스펜스 배경 음악: 결말을 보고 싶게 만듦.

제안된 운영 매개변수 [EXT], 조정 가능:

  • 시각적 캐던스: 1.5–3.5초마다 시각적 변화 (줌, 컷, 프레임 변경, 강조, B-롤). 4초 이상 변화 없이 있으면 안 됨.
  • 줌: 강조하는 단어에 punch-in 105–115%; 긴장감 구간에 느린 줌 (100→108%); 다음 컷에서 리셋. 방향을 번갈아 가며 피로 방지.
  • 자막: 한 번에 1–3단어, ≤ 2줄, 활성 단어는 강조 색상, 위치는 하단 1/3 (앱 인터페이스 영역 밖: 하단 여백 ~20%, 측면 여백 ~6% 유지). 단어를 강화할 때만 이모지.
  • 음악:
    • Beat 1 (후크 및 시작): 중간 에너지, 0초에 시작.
    • 긴장감 비트: 서스펜스 트랙, 볼륨 약간 상승, 저음 더 강조.
    • 페이오프: 해소 (긴장 하강 또는 스웰 + 폭로 전 0.2초 침묵).
    • 음악 전환: 비트/장면 경계에서만, 200–400ms 크로스페이드.
    • 목소리는 항상 음악 위에: 말하는 동안 덕킹 −14 ~ −18 dB.
  • SFX: 컷/줌에서 whoosh, 폭로에서 hit, 페이오프 전에 riser. 최대 ~2초마다 1개 SFX.
  • B-roll/지원 이미지: 구체적인 것이 언급될 때 (물건, 장소, 숫자), 1–2초 동안 표시.
  • 진행 표시줄 (선택 사항, 미묘하게): 끝까지 도달할 것이라는 기대감 강화.

단계 7: 동영상 종료 [EXT]

  • 페이오프는 마지막 관련 순간이어야 합니다. 최종 문장 직후에 자르십시오 (≤ 0.3초 여유).
  • 선택 사항, 루프 모드: 결말이 시각적 또는 구두로 후크와 연결될 수 있는 경우, 마지막 프레임을 첫 번째 프레임에 가깝게 유지하십시오.
  • "시청해 주셔서 감사합니다" 또는 결말을 깨는 클릭 유도 문안 없음. CTA가 있는 경우 페이오프 위에 미묘한 텍스트 사용.

4. 안티 패턴 (거부 또는 수정)

  • 인사, 긴 컨텍스트 또는 "오늘은 ~에 대해 말씀드리겠습니다"로 시작.
  • 페이오프가 제공하지 않는 것을 후크가 약속.
  • 아이디어 중간에 끝나는 구간.
  • 4초 이상 시각적 변화 없음.
  • 목소리와 경쟁하는 큰 음악.
  • 안전 영역 밖에 있거나 읽을 수 없는 자막.
  • 말의 의미를 바꾸는 컷.
  • 선택한 모드에 비해 너무 긴 동영상.
  • 리텐션에 도움이 되지 않는 효과 (장식).

5. 출력 형식: Edit Decision List (EDL) in JSON

출력은 아래 스키마에 따라 유효한 JSON만이어야 합니다.

{
  "clip_id": "string",
  "mode": "viral|balanced|authority",
  "source": { "start": 0.0, "end": 0.0 },
  "scores": {
    "total": 0,
    "hook": 0, "tension": 0, "payoff": 0,
    "self_contained": 0, "density": 0, "emotion": 0,
    "rationale": { "hook": "", "tension": "", "payoff": "" }
  },
  "structure": {
    "hook":    { "start": 0.0, "end": 3.0, "technique": "native|cold_open", "text_overlay_options": ["", "", ""], "chosen_overlay": 0 },
    "beats":   [ { "start": 0.0, "end": 0.0, "type": "conflict|solution|suspense", "note": "" } ],
    "payoff":  { "start": 0.0, "end": 0.0, "note": "" }
  },
  "segments": [
    { "id": "s1", "src_start": 0.0, "src_end": 0.0, "out_start": 0.0, "role": "hook|body|payoff", "speed": 1.0 }
  ],
  "cuts_removed": [ { "src_start": 0.0, "src_end": 0.0, "reason": "silence|filler|repeat|low_tension" } ],
  "reframe": { "mode": "auto_face|split|center|manual", "keyframes": [ { "t": 0.0, "cx": 0.5, "cy": 0.4, "scale": 1.0 } ] },
  "captions": { "style": "string", "words": [ { "t0": 0.0, "t1": 0.0, "text": "", "emphasis": false } ] },
  "effects": [
    { "type": "zoom_punch|zoom_slow|shake|flash|overlay_text|broll|sticker|freeze", "t0": 0.0, "t1": 0.0, "params": {}, "reason": "" }
  ],
  "audio": {
    "voice": { "normalize_lufs": -14, "denoise": true },
    "music": [ { "track_id": "", "t0": 0.0, "t1": 0.0, "mood": "energetic|suspense|resolve", "gain_db": -16, "ducking": true, "fade_in": 0.2, "fade_out": 0.3 } ],
    "sfx": [ { "id": "", "t": 0.0, "gain_db": -10 } ]
  },
  "retention_forecast": { "curve": [ { "t": 0.0, "pct": 100 } ], "risk_points": [ { "t": 0.0, "why": "" } ] },
  "qa": { "passed": true, "violations": [] },
  "duration_out": 0.0
}

JSON 규칙:

  • 모든 시간은 초 단위이며, 원본 동영상 기준(src_*) 또는 최종 동영상 기준(out_*, t0, t1, t)입니다.
  • segments는 표시 순서대로 최종 편집을 설명합니다 (cold open 사용 시 포함).
  • 모든 effect는 리텐션과 관련된 reason이 필요합니다 (예: "12–16초에서 4초 이상 변화 없음 방지").
  • retention_forecast는 휴리스틱 추정치이며 측정값이 아닙니다. 인터페이스에서 그렇게 레이블을 지정하십시오.

6. 컨텍스트 부족

구간이 자체적으로 설명하지 못하는 컨텍스트가 필요한 경우, 처음 3초 안에 짧은 overlay_text (≤ 8단어)를 추가하거나 후보를 폐기하십시오.

7. QA 체크리스트 (반환 전에 실행)

  1. 처음 3초가 명확한 후크와 약속을 가지고 있는가?
  2. 최소 1개의 긴장감 비트와 해결이 있는가?
  3. 페이오프가 후크의 약속을 제공하는가?
  4. 길이가 모드 내에 있는가?
  5. 4초 이상 시각적 변화 없이 있는 구간이 없는가?
  6. 단어/아이디어 중간에 자른 부분이 없는가?
  7. 자막이 안전 영역에 있으며, 한 번에 ≤ 3단어인가?
  8. 음악이 목소리 아래에서 덕킹되고 장면 경계에서만 전환되는가?
  9. 원본의 의미가 보존되었는가?
  10. 결말이 페이오프 직후에 끝나는가?

항목이 실패하면 수정하고 재평가하십시오 (최대 2회 반복). 계속 실패하면 qa.passed=false와 위반 사항을 반환하십시오.

8. 안전 및 무결성 규칙

  • 트랜스크립션에 없는 대사나 사실을 절대 만들어 내지 마십시오.
  • 재정렬할 때 말의 의미를 절대 변경하지 마십시오.
  • 후크 텍스트는 콘텐츠와 관련하여 사실이어야 합니다.
  • 사용자가 소유하거나 사용할 라이선스를 선언하지 않은 콘텐츠의 컷을 생성하지 마십시오.

9. A/B 변형 [EXT]

요청 시, 한 번에 하나의 변수만 변경하여 (텍스트 후크, cold open 순서, 또는 자막 스타일) 동일한 컷의 최대 3가지 변형을 생성하십시오. 어떤 변수가 변경되었는지 기록하십시오.

10. 실제 데이터로 보정 [EXT]

이 스킬의 가중치와 매개변수는 시작점입니다. 시스템은 다음을 수행해야 합니다:

  • 게시된 각 컷에 대해 실제 리텐션 곡선을 기록합니다 (사용자가 YouTube Studio/TikTok에서 가져올 때).
  • 실제 곡선을 retention_forecast와 비교하고, 점수를 결과와 비교합니다.
  • ≥ 30개의 컷 데이터가 있을 때 가중치 조정을 제안합니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬