Communitygithub.com

TheMattBerman/숏폼-아이디어-엔진

숏폼 비디오 아이디어 발굴 및 스크립트 생성을 위한 종단 간 파이프라인입니다. 틈새 키워드나 경쟁자 핸들을 분석하여 아웃라이어 비디오를 찾아내고, 성공 요인을 해독하며, 브랜드에 적합한 아이디어로 재구성하고, 바이럴 가능성과 브랜드 적합성을 기준으로 순위를 매긴 후 최종 스크립트를 제공합니다.

숏폼-아이디어-엔진란 무엇인가요?

이 스킬은 AI 에이전트 사용자가 '어떤 짧은 비디오를 만들어야 할지' 찾을 때 유용합니다. 특히 인스타그램 릴스, 틱톡, 유튜브 쇼츠 등에서 특정 틈새 키워드나 경쟁자의 아웃라이어 비디오를 체계적으로 수집하고 분석합니다. VirLo API로 비디오를 발굴하고, ScrapeCreators로 트랜스크립트와 썸네일을 수집하며, OpenRouter Gemini로 심층 분석을 수행합니다. 최종적으로는 브랜드 프로필과 정렬된 10~15개의 독창적인 아이디어를 생성하고, 바이럴 가능성과 브랜드 적합성을 점수화하여 순위를 매긴 후, 상위 아이디어의 촬영 준비 완료 스크립트를 작성합니다. 이 파이프라인은 Claude Code, Cursor, Codex 등 터미널 기반 AI 코딩 에이전트에서 실행되며, API 키가 없어도 일부 기능이 제한적으로 동작할 수 있도록 설계되었습니다.

지원 대상✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/TheMattBerman/shortform-idea-engine/tree/HEAD/skills/shortform-idea-engine

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

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

문서

숏폼 아이디어 엔진

경쟁자의 아웃라이어 비디오를 순위가 매겨진 브랜드 적합 숏폼 아이디어와 완성된 스크립트로 변환하는 리서치-투-스크립트 파이프라인입니다.

사용 시기

사용자가 숏폼 비디오 아이디어 파이프라인을 원할 때 이 스킬을 사용하세요: 틈새에서 무엇이 성과를 내고 있는지 발견하고, 그 이유를 이해하며, 재구성된 아이디어를 생성하고, 촬영 준비가 된 스크립트를 받는 것까지 포함합니다.

다음과 같은 경우에는 사용하지 마세요:

  • 사용자가 이미 알고 있는 단일 비디오를 해독하려는 경우: video-decoder로 라우팅하세요.
  • 사용자가 이미 아이디어를 가지고 있고 스크립트 작성을 원하는 경우: script-writer로 라우팅하세요.

의존성

이것은 독립형 플러그인입니다. 모든 하위 스킬과 Gemini 도우미 스크립트를 번들로 포함합니다. 공유 스킬 환경이 필요하지 않습니다. 필수 외부 요구 사항은 세 개의 API 키입니다(다음 섹션 참조).

의존성이 스킬에서의 역할
virlo 스킬 (번들)1단계 키워드 모드: 인스타그램, 틱톡, 유튜브에서 틈새 키워드별로 아웃라이어 숏폼 비디오를 발견합니다
scrape 스킬 (번들)1단계 핸들 모드, 2단계 및 4단계 CDN URL 해결: ScrapeCreators API를 통해 최근 게시물, 트랜스크립트, 커버 프레임 및 직접 미디어 URL을 가져옵니다
video-decoder 스킬3단계 및 4단계: 각 아웃라이어를 채워진 디코드 레코드(시각적 후크, 작성된 후크, 음성 후크, 루트, VV, IT, 포맷)로 디코딩합니다
script-writer 스킬7단계: 승인된 각 아이디어당 하나의 제작 준비 완료 스크립트를 작성합니다
brand-profiler 스킬 (번들)0단계: 기존 브랜드 프로필이 없을 때 새 브랜드 프로필을 구축하며, voice_tone을 포함한 모든 스키마 필드를 수집합니다
scripts/gemini-video-analyze.js (번들)4단계 심층 패스: OpenRouter Gemini를 통해 시각적 분석(페이싱, 컷 리듬, 시각적 스타일, 유지 장치, 화면 내 텍스트 케이던스)을 실행합니다

API 키 및 점진적 성능 저하

필수 키: VIRLO_API_KEY, SCRAPECREATORS_API_KEY, OPENROUTER_API_KEY.

비용이 발생하기 전에 0단계에서 로드하세요:

source .env

성능 저하 규칙:

누락된 키영향
VIRLO_API_KEY키워드 모드가 비활성화됩니다. 핸들 모드는 여전히 작동합니다. 0단계에서 이를 명확히 보고하세요.
OPENROUTER_API_KEY4단계(심층 패스)가 완전히 건너뜁니다. 모든 디코드는 shallow로 유지됩니다. 얕은 디코드에서 파생된 아이디어는 순위표에서 "shallow-decoded"로 플래그가 지정됩니다.
SCRAPECREATORS_API_KEY엔진을 실행할 수 없습니다. ScrapeCreators는 모든 모드에서 트랜스크립트와 커버 프레임에 필요합니다. 0단계에서 중단하고 사용자에게 명확히 알리세요.

파이프라인

0단계: 인테이크

사용자에게 다음을 요청하세요:

  1. 모드: 키워드 모드(틈새 키워드로 비디오 발견) 또는 핸들 모드(특정 경쟁자 핸들 분석).
  2. 브랜드 프로필 경로: references/brand-profile-template.md를 따르는 채워진 브랜드 프로필의 경로. 없으면 번들된 brand-profiler 스킬을 연결하여 대화형으로 또는 기존 브랜드 문서에서 모든 스키마 필드(voice_tone, audience, positioning, content_pillars, anti_topics, forbidden_constructions, proof_credibility, format_preferences, on_camera_talent)를 수집하는 새 브랜드 프로필을 작성하겠다고 제안하세요.
  3. 실행 슬러그: 이 세션의 짧은 소문자 레이블(예: ai-tools-keyword 또는 techcreator-handles). 실행 폴더 이름을 지정하는 데 사용됩니다.
  4. 실행 기본 경로: 실행 폴더가 기록되어야 하는 위치. 기본 경로는 현재 작업 디렉토리를 기준으로 ./shortform-runs/이며, ./shortform-runs/YYYY-MM-DD-<slug>/를 생성합니다. 세션이 자체 연구 또는 출력 영역이 있는 구조화된 프로젝트 내에서 실행 중인 경우 사용자에게 실행을 그곳에 배치할지 물어보세요. 파일을 쓰기 전에 확인된 기본 경로를 사용자와 확인하세요.

세 API 키를 모두 확인하세요. 비용을 지출하기 전에 사용 가능한 모드를 보고하세요. 확인된 기본 경로(예: <base>/YYYY-MM-DD-<slug>/)에 실행 폴더를 만들고 00-intake.md에 모드, 쿼리 또는 핸들 목록, 사용된 브랜드 프로필 파일 이름, 실행 기본 경로, 사용 가능한 키 및 재정의를 기록하세요.

1단계: 발견

키워드 모드. virlo 스킬을 호출하여 틈새 키워드에 대한 아웃라이어 숏폼 비디오를 발견하세요. video-decoder/references/decode-framework.md에 정의된 세 가지 경쟁자 링 전반에 걸쳐 발견을 실행하세요:

  • 직접 링: 정확한 틈새 키워드 그대로.
  • 간접 링: 잠재고객 관련 키워드 구문(동일한 잠재고객, 다른 주제 각도).
  • 인접 링: 포맷 관련 키워드 구문(동일한 포맷 또는 제작 스타일, 다른 주제).

한 번에 하나의 링씩 virlo 스킬을 호출하고 해당 링의 레이블과 키워드 구문을 전달하세요. 여러 링에 대해 동시에 virlo를 호출하지 마세요. virlo 스킬은 모든 궤도 메커니즘을 소유합니다: 먼저 링 키워드를 다루는 기존 코멧이 있는지 확인하고 사용 가능한 경우 축적된 데이터를 재사용하며(무료), 일치하는 코멧이 없는 링에 대해서만 새 궤도(비용: $0.50)를 실행합니다. 오케스트레이터의 책임은 시퀀싱입니다: 링에 대해 virlo가 순위가 매겨진 아웃라이어 목록을 반환할 때까지 기다린 후 다음 링에 대해 virlo를 호출하세요.

virlo가 링에 대한 결과를 반환한 후 비디오별 아웃라이어 규모를 계산하세요. Virlo의 결과에는 크리에이터 수준의 아웃라이어 비율이 포함되지만, 오케스트레이터는 4단계와 6단계 순위 평가를 위해 비디오별 비율이 필요합니다. 링 결과에 나타나는 각 고유 크리에이터에 대해 scrape 스킬을 호출하여 해당 크리에이터의 최근 게시물(약 20개)을 관련 플랫폼에서 가져오세요. 반환된 게시물을 사용하여 해당 크리에이터의 기준 중간 조회수를 계산하세요. 그런 다음 각 비디오의 아웃라이어 비율을 video_views / creator_median_views로 계산하세요. 각 링 및 각 기준 가져오기에 대한 원시 JSON 응답을 raw/에 저장하세요.

핸들 모드. scrape 스킬을 호출하여 관련 플랫폼에서 각 핸들의 최근 게시물(약 20개)을 가져오세요. 각 핸들에 대해 반환된 게시물의 중간 조회수를 계산하세요. 해당 크리에이터의 중간값보다 2배 이상 높은 게시물만 유지하세요(아웃라이어 임계값). 원시 JSON을 raw/에 저장하세요.

핸들이 2배 임계값 이상의 게시물을 생성하지 않는 경우(낮은 분산 크리에이터), 해당 크리에이터의 단일 최고 성과 최근 게시물을 포함하세요. 00-intake.md에 핸들에 명확한 아웃라이어가 없었고 최고 게시물이 대체 항목으로 포함되었음을 기록하세요.

두 모드 모두에서 1단계 출력은 소스 URL, 플랫폼, 크리에이터 핸들 및 조회수를 포함하는 중복 제거된 아웃라이어 비디오 목록입니다.

2단계: 영수증

각 아웃라이어 비디오에 대해 scrape 스킬을 호출하여 다음을 수집하세요:

  • 트랜스크립트: 유튜브의 경우 scrape 스킬을 호출하여 비디오 URL로 트랜스크립트를 가져오세요. 틱톡과 인스타그램의 경우 1단계에서 이미 가져온 게시물 페이로드에서 트랜스크립트 텍스트를 추출하세요. 비디오에 대한 게시물 페이로드에 트랜스크립트가 포함되지 않은 경우, 비디오를 3단계로 전달하기 전에 대체 방법으로 해당 비디오 URL에 대한 scrape 스킬의 트랜스크립트 기능을 호출하세요.
  • 커버 프레임: 게시물 페이로드에서 반환된 썸네일 URL. 유튜브의 경우 커버 프레임을 https://img.youtube.com/vi/[VIDEO_ID]/hqdefault.jpg로 파생하세요.

모든 원시 응답을 소스와 타임스탬프별로 이름을 지정하여 raw/에 저장하세요(예: scrapecreators-transcript-[video_id]-[timestamp].json). 다운스트림에서 사용되는 모든 조회수 및 참여 수치는 raw/의 파일로 추적 가능해야 합니다.

3단계: 디코드

모든 아웃라이어에 대해 video-decoder 스킬을 실행하세요. 전달할 항목: 트랜스크립트 텍스트(있는 경우), 커버 프레임 URL(있는 경우), 크리에이터 핸들, 플랫폼, 아웃라이어 규모(1단계에서 계산된 비율) 및 경쟁자 링 할당(video-decoder/references/decode-framework.md의 링 정의를 사용하여 브랜드에 대한 각 비디오의 링을 분류).

video-decoder 스킬은 비디오당 하나의 채워진 디코드 레코드를 반환하며, 여기에는 시각적 후크(커버 프레임 및 화면에 보이는 텍스트에서 파생), 작성된 후크 및 음성 후크가 포함됩니다. 각 레코드를 01-decodes/[video_id].md에 기록하세요. 이 시점에서 모든 디코드의 decode_depth는 shallow입니다.

트랜스크립트 누락만으로는 비디오를 건너뛰는 이유가 아닙니다. 가장 높은 아웃라이어 비디오 중 다수는 텍스트 오버레이 또는 POV 스타일 비디오로 음성 콘텐츠가 없습니다. 비디오에 커버 프레임이나 캡션이 있는 경우 spoken_hook: n/a로 얕게 디코드하세요. 디코딩할 내용이 진정으로 없는 경우에만 비디오를 건너뛰세요: 트랜스크립트 없음, 커버 프레임 없음, 캡션 없음, 그리고 다른 의미 있는 신호도 없음(예: 검색 가능한 항목이 없는 하드 가져오기 실패). 건너뛴 비디오는 00-intake.md에 decode-failed로 기록하고 비디오 URL과 정확한 이유를 명시하세요. 나머지 비디오 처리를 계속하세요.

4단계: 심층 패스

아웃라이어 규모가 큰 순서대로 상위 5~8개의 아웃라이어를 선택하세요.

Gemini 도우미를 호출하기 전에 scrape 스킬을 사용하여 해당 비디오의 직접 CDN 미디어 URL을 확인하세요. 소셜 페이지 URL(예: TikTok 또는 Instagram 페이지 URL)은 Gemini에서 거부됩니다. 도우미에는 CDN 미디어 URL을 전달하고 절대 소셜 페이지 URL은 전달하지 마세요. 해결 방법은 플랫폼마다 다릅니다: scrape/references/reading-scrape.md의 "비디오용 직접 미디어 URL 확인"을 참조하여 플랫폼별 접근 방식을 확인하세요(TikTok은 비디오 정보 조회 필요, Instagram 미디어 URL은 이미 가져온 게시물 페이로드에 있음, YouTube 시청 URL은 직접 통과). CDN URL은 만료되므로 실행 내에서 신속하게 확인하고 사용하세요.

선택된 각 비디오에 대해 Gemini 도우미를 호출하고 stdout을 한 명령으로 직접 원시 파일로 리디렉션하세요.

도우미 경로는 이 SKILL.md를 포함하는 디렉토리(설치된 플러그인 내 shortform-idea-engine 스킬 디렉토리)의 절대 경로로 확인되어야 합니다. 런타임에 해당 디렉토리를 확인하고 그 안에 scripts/gemini-video-analyze.js의 절대 경로를 구성하세요. 출력 리디렉션은 0단계에서 확인된 실행 기본 경로 아래의 실행 폴더를 대상으로 합니다. 이 두 경로는 독립적으로 확인됩니다: 도우미는 스킬 디렉토리에서, 출력은 실행 기본 경로에서 확인됩니다.

OPENROUTER_API_KEY=<key> node <skill-dir>/scripts/gemini-video-analyze.js <cdnMediaUrl> "이 숏폼 비디오를 분석하세요: 페이싱(평균 컷 빈도, 눈에 띄게 느리거나 빠른 세그먼트), 컷 리듬(컷 패턴: 비트에 맞춘 컷, 리액션 컷, B-롤 인터컷), 시각적 스타일(색보정, 배경, 카메라 움직임, 화면 내 그래픽 밀도), 화면 내 텍스트 케이던스(음성 콘텐츠 대비 캡션이나 콜아웃이 나타나는 빈도) 및 유지 장치(비디오 중간에 사용된 특정 후크, 패턴 방해, 클리프행어 또는 루프)에 대한 설명을 반환합니다. 각 차원에 대한 구조화된 노트를 반환하세요." > <run-base>/YYYY-MM-DD-<slug>/raw/gemini-<video_id>-<timestamp>.json

여기서 <skill-dir>는 shortform-idea-engine 스킬 디렉토리(이 SKILL.md를 포함하는 디렉토리)의 절대 경로이고 <run-base>/YYYY-MM-DD-<slug>/는 0단계에서 확인된 실행 폴더입니다.

리디렉션은 원시 Gemini 응답을 실행 폴더 내 raw/gemini-<video_id>-<timestamp>.json에 저장하여 8단계 추적 가능성을 충족합니다.

이러한 각 비디오에 대해 video-decoder 스킬을 다시 실행하고 선택적 심층 분석 입력으로 Gemini 블록을 전달하세요. 다시 실행하면 decode_depth: deep 및 deep_notes가 채워진 업데이트된 디코드 레코드가 반환됩니다. 기존 01-decodes/[video_id].md를 심층 레코드로 덮어쓰세요.

OPENROUTER_API_KEY가 설정되지 않은 경우 4단계를 완전히 건너뛰세요. 모든 디코드는 shallow로 유지되며 "shallow-decoded" 플래그가 6단계에서 각 아이디어에 기록됩니다.

5단계: 아이디에이션

01-decodes/의 모든 디코드 레코드에서 모든 바이럴 벡터, 관심 주제 및 포맷을 수집하세요. 10~15개의 재구성된 아이디어를 생성하세요. 각 아이디어는 다음을 포함해야 합니다:

  • 차용한 바이럴 벡터의 이름(디코드 레코드의 축어적 레이블).
  • 차용하거나 적용한 관심 주제의 이름.
  • 사용하는 포맷의 이름.
  • 브랜드 각도: 차용된 VV, IT 및 포맷이 이 특정 브랜드에 맞게 어떻게 재구성되는지 설명합니다(브랜드 프로필의 content_pillars, audience 및 proof_credibility 필드를 사용하여 각도를 고정).
  • 각 차용된 요소에 대한 소스 계통: 요소가 추출된 디코드 레코드의 creator_handle, source_url 및 video_id. 요소가 둘 이상의 디코드 레코드에 나타나는 경우 모두 나열하세요. 이 계통은 순위 매기기와 스크립트를 통해 아이디어와 함께 이동합니다.

여기에는 링에 따른 추출 신호 가중치가 적용됩니다(video-decoder/references/decode-framework.md에서): VV는 모든 네 링에서 유효합니다. IT는 간접 경쟁자에서 가장 신호가 강합니다. 포맷은 인접 경쟁자에서 가장 신호가 강합니다. 이에 따라 재구성 가중치를 조정하지만 링만으로 아이디어를 기계적으로 제외하지 마세요.

만약 디코드 풀이 풀에 없는 VV, IT 또는 포맷 조합을 만들어내지 않고 10개의 개별 아이디어를 지원하기에 너무 작다면, 풀이 지원하는 만큼의 진정한 아이디어만 생성하세요. 02-ideas.md 상단에 부족분과 실제 개수를 기록하세요. 디코드되지 않은 추출 가능 항목을 절대 발명하지 마세요.

6단계: 순위

references/ranking-rubric.md를 사용하여 모든 아이디어를 점수화하세요:

  1. 각 아이디어를 브랜드 프로필의 anti_topics 목록과 대조 확인하세요. 일치하는 경우 즉시 실격 처리됩니다(DQ: anti-topic). 실격된 아이디어를 순위표에서 제거하세요. 각 실격된 아이디어를 02-ideas.md 하단의 순위표 아래에 명확히 표시된 "실격 (anti-topic)" 섹션에 추가하고 아이디어와 트리거된 특정 금기 주제를 나열하세요.
  2. 생존한 아이디어를 두 축에서 점수화하세요: viral_potential(다섯 가지 하위 요소의 평균: VV 강도, 아웃라이어 규모, 포맷 반복 가능성, 주제 신선도, 후크 강도) 및 brand_fit(네 가지 하위 요소의 평균: 음성 일치, 잠재고객 일치, 콘텐츠 기둥 일치, 진정성 있는 신뢰도). 두 점수 모두 1에서 10까지의 척도를 사용합니다.
  3. combined = viral_potential * (brand_fit / 10)를 계산하세요. 소수점 첫째 자리로 반올림합니다.
  4. combined을 기준으로 내림차순으로 정렬하세요. 두 아이디어가 동점일 경우 viral_potential이 더 높은 아이디어가 먼저 순위가 매겨집니다.
  5. 순위표를 02-ideas.md에 다음 열 순서로 작성하세요: # | idea | root | borrowed VV/IT/Format | source video | viral | brand fit | combined | one-line rationale. source video 셀은 아이디어가 추적되는 기본 소스 비디오를 @creator_handle / video_id로 표시합니다. 아이디어가 e

…

[요약된 콘텐츠]

관련 스킬