Communitygithub.com

engaging-monologue

16:9 비율의 '몰입형 독백' 비디오를 제작합니다. 솔로 토킹헤드 촬영본에 점프 컷과 펀치인, 초상화 형식의 PiP(Picture-in-Picture)을 적용하고, 세리프 활자체 키네틱 텍스트, 다이어그램(피라미드, 비교, 로드맵, 단계, 큰 숫자), B-롤 카드, 콜아웃 카드, 로어 서드, 칩, CTA 버튼, 녹색 엔드 카드를 종이 캔버스 위에 구성합니다. 모든 요소가 음성과 단어 단위로 동기화됩니다. YouTube 설명 영상, 솔로 코멘터리, 뉴스레터-투-비디오 및 '하나의 아이디어를 잘 전달하는' 콘텐츠에 적합합니다.

engaging-monologue란 무엇인가요?

이 스킬은 16:9 비율의 '몰입형 독백' 비디오를 제작하는 자동화 파이프라인입니다. 사용자는 단일 카메라로 촬영된 1~15분 분량의 독백 영상을 입력하면, 스킬이 점프 컷, 펀치인, PiP(Picture-in-Picture) 전환, 키네틱 타이포그래피, 다양한 다이어그램(피라미드, 비교, 로드맵, 단계별 목록, 통계), B-롤 카드, 콜아웃 카드, 로어 서드, 칩, CTA 버튼, 엔드 카드 등 모든 요소를 음성과 단어 단위로 동기화하여 자동 편집 및 렌더링합니다. Claude Code, Cursor, Codex 등의 AI 코딩 에이전트 환경에서 실행되며, 특히 FringeLines 디자인 시스템(v2.1)을 기반으로 합니다. 주요 기능은 다음과 같습니다: (1) 음성 전사 및 불필요한 발언 제거, (2) 얼굴 위치 기반 펀치인 효과, (3) 비트 시퀀스(타이틀, 이름, 오버레이, 콜아웃, 칩, 스택, 비교, 로드맵, 단계, 통계, 미디어, 엔드 카드)를 JSON으로 정의하여 자유롭게 구성, (4) 단어 단위 텍스트 애니메이션 및 다이어그램 요소 순차 등장, (5) -14 LUFS 표준 오디오 노멀라이제이션. 결과물은 1080p 30fps MP4 파일로 출력됩니다. 사용자는 beat JSON 파일을 직접 또는 Claude의 도움을 받아 작성해야 하며, 각 비트의 시간, 유형, 텍스트, 톤(색상)을 정밀하게 제어할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qdevery/fringe-lines-video/tree/main/.agents/skills/engaging-monologue

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

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

문서

몰입형 독백 (16:9)

참고: Ali Abdaal, "How I'd Create Content in 2026 (If I Had To Start Over)" (youtu.be/A8PxRHQrLJ8, 16분, 1080p). 모션 언어는 해당 비디오에서 차용했습니다. 룩은 FringeLines v2.1 키트입니다: My Drive/FringeLines Design System files/Fringe Lines Design system v2_1/ 및 토큰은 …/handoff/fringelines-tokens.css에 있습니다.

무엇이 참고 영상을 효과적으로 만드는가

비디오를 2초당 1프레임과 전환 구간의 밀집 샘플로 측정했습니다.

  • 약 55%는 일반 토킹헤드. 고정 카메라, 미디엄 샷. 점프 컷은 약 5초마다 (중앙값): 16분 동안 약 122컷. 각 컷은 와이드와 펀치인이 번갈아 나타나 컷이 의도적으로 보이게 합니다.
  • 두 가지 레이아웃, 그 이상은 없음:
    1. 전체 화면 스피커 위에 오버레이: 이름 로어 서드, 좌상단 컬러 콜아웃 카드(작은 레이블 칩 포함), 하단의 흰색 세리프 문장, 머리 근처의 작은 컬러 칩, 중앙 하단의 스폰서/CTA 버튼.
    2. 종이 캔버스. 스피커가 초상화 PiP(둥근 모서리, 흰색 테두리, 우측, 약 400×560)로 축소되고, 그래픽이 따뜻한 오프화이트 배경 위에 하나의 희미한 곡선과 함께 구성됩니다. 캔버스에는 키네틱 문장, 번호가 매겨진 로드맵 카드, 알약 다이어그램, 피라미드, 그리고 둥근 카드 안의 스크린샷 또는 B-롤(하단 캡션 포함)이 포함됩니다.
  • 자막 없음. 화면 텍스트는 선택된 것입니다. 한 번에 한 문장씩, 음성과 동시에 단어 단위로 나타납니다. 각 단어는 희미하고 흐릿하게 시작했다가 선명해집니다. 핵심 구절은 색상이 변경됩니다.
  • 다이어그램은 각 항목이 언급될 때 조각별로 구성됩니다. 알약은 약간의 오버슈트와 함께 튀어나옵니다. 피라미드 레이어는 위에서 떨어집니다.
  • 카메라는 그래픽 내부에서 움직입니다. 5-카드 로드맵은 각 챕터마다 다시 나타나며, 활성 카드로 확대되고 나머지는 흐려집니다.
  • 종료는 컷 대신 흐려집니다. 전체↔PiP 전환은 약 0.4초의 빠른 이지드 모프입니다.
  • 리듬: 10-20초마다 새로운 시각적 아이디어, 섹션당 하나의 강조 순간(흑백), 각 인물이 처음 등장할 때 로어 서드.
  • 사운드: 레이아웃 변경 시 부드러운 휘파람 소리, 항목이 안착할 때 가벼운 팝 소리, 음성 아래에 잘 묻히도록 유지합니다.

FringeLines에 매핑하는 방법 (이 기준에서 벗어나지 마세요)

참고FringeLines 버전
산호 하이라이트가 있는 따뜻한 세리프모든 디스플레이 텍스트에 Instrument Serif. 하이라이트는 기울임꼴 구절, 종이 위에서는 잉크 블루 #1A4F6B, 비디오 위에서는 흰색. 오렌지 #D4622A는 오직 하나의 중요한 숫자에만 사용 ([7 AM], 통계).
알약의 둥근 산세리프알약, 칩, 목록 항목, 스택 레이블에 Archivo 500–600
작은 대문자 레이블IBM Plex Mono 600, 대문자, +0.14em, ≥ 22 px: 눈썹, 레이블 알약, 출처, 메타
코랄/레드 그라데이션 콜아웃키트 그라데이션: 녹색 (기본값), 파란색 (두 번째 아이디어), 주황색 (경고 또는 "실수")
파스텔 로드맵 카드녹색, 파란색 및 주황색 워시, 모노 번호 배지 및 점선 주황색 커넥터
크림색 종이 + 곡선종이 #F7F7F5와 하나의 희미한 녹색 워시 곡선
드롭 섀도우없음. 평평한 표면, 2px 헤어라인 #E3E5DF, PiP의 흰색 테두리, 반경 16–18
스폰서 알약흰색 CTA 알약 (fringelines.co / 뉴스레터) 및 주황색 모노 "Link in description" 탭
채널 아웃트로녹색 엔드 카드, Clip Slides 커버: 모노 눈썹, 주황색 규칙, 하나의 기울임꼴 구절이 있는 세리프 헤드라인, Archivo 부제, ● fringelines.co

키트 규칙은 여전히 적용됩니다:

  • 화면당 하나의 아이디어;
  • 화면당 하나의 오렌지;
  • 녹색은 기본값, 파란색은 비교;
  • 모든 통계에는 source가 있어야 함;
  • 22px 미만 없음.

구성 요소

  • 템플릿: pipeline/remotion/src/Monologue.tsx, 1920×1080 / 30fps의 Monologue 컴포지션. ShortV2.tsx의 얼굴 추적을 재사용합니다.
  • 빌드: pipeline/build_monologue.py, cut 및 render의 두 단계가 있습니다.
  • 작업 폴더: work/monologue/<slug>/에는 clip.mp4, props.json, transcript.txt, beats.json 및 faces.json이 있습니다.
  • 출력: out/monologue/<slug>.mp4, -14 LUFS로 노멀라이즈됨.
  • 작업 예시: work/monologue/morning-loop-test/beats.json, 10월 30일 에피소드의 Quinn이 등장하는 62초 클립.

1. 테이크 확보

단일 카메라 16:9 녹화본, 좋은 오디오, 한 사람, 약 1-15분. inbox/monologue/<slug>/take.mp4에 넣습니다.

에피소드에서 솔로 구간을 추출하려면 카메라 트랙과 스튜디오 사운드 트랙을 머싱합니다. Descript XML에서 오프셋을 가져오려면 build_short.xml_offsets를 사용하세요. morning-loop-test가 어떻게 만들어졌는지 확인하십시오:

ffmpeg -ss <t0-videoOffset> -t <dur> -i Quinn.mp4 -ss <t0-audioOffset> -t <dur> -i studio-sound-Quinn.m4a -map 0:v -map 1:a … take.mp4

2. 컷

~/.shorts-skill/bin/python pipeline/build_monologue.py cut --slug <slug> --src inbox/monologue/<slug>/take.mp4 \
    [--range 12.0:95.5 --range 120:180] [--replace "gtm=>GTM" --replace "quick=>Quick"]

컷 단계가 수행하는 작업:

  1. Whisper로 테이크를 전사합니다 (words-src.json에 캐시).
  2. 필러, 더듬거림, 긴 멈춤을 제거합니다 (쇼츠와 동일한 플래너 사용).
  3. 각 점프 컷에서 펀치인(1.0 / 1.12, 얼굴 중심)을 번갈아 적용합니다.
  4. 컷 클록을 기준으로 word@seconds 형식의 transcript.txt를 작성합니다.

--replace는 리빌 타이밍에 사용되는 단어만 수정합니다. 자동 캡션은 생성되지 않습니다.

3. work/monologue/<slug>/beats.json 작성

transcript.txt를 읽고 비트를 계획합니다.

{"brand": "FringeLines", "beats": [
  {"type": "title",   "at": 0.2,  "end": 2.0,  "eyebrow": "FringeLines · Monologue", "text": "The *morning loop*"},
  {"type": "name",    "at": 2.1,  "end": 5.4,  "text": "Quinn", "role": "Host · Fringe Lines"},
  {"type": "chips",   "at": 3.0,  "end": 7.4,  "items": [{"text": "GTM loops", "at": 3.1}, {"text": "Coding loops", "at": 5.1, "tone": "blue"}]},
  {"type": "text",    "at": 7.6,  "end": 11.3, "eyebrow": "What's a loop?", "text": "Loop's just a *stated goal* and then it works *autonomously*"},
  {"type": "callout", "at": 11.5, "end": 16.2, "label": "The setup", "tone": "green", "text": "I use Quick Desktop with routines that execute at any time"},
  {"type": "overlay", "at": 16.4, "end": 18.3, "text": "I usually run it at [7 AM]"},
  {"type": "stack",   "at": 22.4, "end": 36.4, "title": "My core team · 4 people", "items": [{"text": "Account executive", "at": 25.6}, "…"]},
  {"type": "stat",    "at": 51.2, "end": 55.1, "kicker": "My regular account team", "value": 14, "text": "people I'm interacting with on a regular basis", "source": "Quinn's own count · Fringe Lines, Oct 30 2026"},
  {"type": "end",     "at": 58.4, "end": 61.4, "text": "Building the *morning loop*", "sub": "The full walkthrough is in this week's episode."}
]}

시간

  • 시간은 컷 클립 기준 초입니다. end(또는 hold)는 비트를 종료하며, 종료 시 0.3초에 걸쳐 흐려집니다.
  • 텍스트는 음성과 동기화되어 단어 단위로 나타납니다. text의 모든 단어는 비트 윈도우 내에서 전사본과 일치됩니다.
    • 동기화가 작동하도록 스피커의 말을 그대로 인용하세요 (가벼운 다듬기는 괜찮음).
    • 텍스트가 의역인 경우, 리빌은 균등한 간격으로 대체됩니다. "reveal": "even"으로 강제할 수 있습니다.
  • 항목 at 시간은 기본적으로 균등한 간격입니다. 각 항목이 말해지는 순간으로 설정하세요 (단어보다 약 0.1초 먼저).

마크업

  • *기울임 하이라이트*: 화면당 하나의 구절.
  • [액센트 숫자]: 주황색, 화면당 하나, 숫자만 가능.

비트 유형

스피커 전체 화면 (오버레이):

typefields사용
titletext, eyebrow?어두워진 프레임 위의 콜드 오프닝 타이틀 (처음 2-3초)
nametext, role?인물이 처음 등장할 때의 로어 서드
overlaytext하단의 흰색 세리프체로 표시되는 한 문장: 기억하고 싶은 대사
callouttext, label?, tone?, side?좌상단(또는 우측)의 컬러 카드와 모노 레이블 알약: "실수 #1", "설정", "규칙"
chipsitems[{text, at, tone?}], side?, tone?머리 옆에 나타나는 2-3개의 짧은 태그: 내면의 목소리, 이름, 옵션
ctatext, sub?하단 알약: 뉴스레터, 에피소드 또는 제안. 보통 비디오 중간에 한 번
bw(none)스피커에 대한 흑백 강조; overlay와 함께 사용
media + "full": truesrc, video?, from?PiP에 스피커가 있는 전체 화면 B-롤

종이 캔버스 (스피커가 PiP로 이동):

typefields사용
texttext, eyebrow?, align?키네틱 문장: 정의, 논제, "가장 중요한..." 대사
stackitems[{text, at, tone?}] (하단→상단), title?피라미드 또는 레이어: 기초 → 전략 → 결과, 팀 레이어
comparetitle?, left{label, items}, right{label, items}, winner?A vs B: 취미 vs 수익, 이전 vs 이후. 패자는 끝 부분에서 회색으로 변함
roadmapitems[{text}] (≤6), active?, zoom?비디오 챕터. 시작 부분에 한 번 표시한 후, 각 챕터마다 active = 챕터 인덱스 및 zoom = 확대 시점과 함께 재사용
stepsitems[{text, at}], title?헤어라인 규칙이 있는 번호 매기기 목록: 전문가, 도구, 단계
statvalue, prefix?, suffix?, decimals?, kicker?, text, source주황색으로 카운트업되는 하나의 숫자; 출처 필수
mediasrc, title?, meta?, video?, from?둥근 카드 안의 스크린샷 또는 B-롤, 캡션 포함(타이틀 + 모노 메타 라인). 파일은 작업 폴더에 위치
endtext, eyebrow?, sub?, url?, tone?녹색 엔드 카드 (2-4초)

0.7초 미만으로 떨어진 종이 비트는 PiP 레이아웃에 유지되므로 스피커가 바운스되지 않습니다.

페이싱 규칙 (참고 영상 기준)

  • 처음 5초 이내에 title과 name으로 시작합니다.
  • 종이 비트는 런타임의 35-45%를 차지합니다. 시각적 변화 없이 약 20초 이상 가지 말고, 종이에 15초 이상 머물지 마십시오.
  • 두 레이아웃을 번갈아 사용하세요. callout을 연속으로 두 번 사용하지 말고, 그 사이에 text 또는 다이어그램을 넣으십시오.
  • 비트당 하나의 아이디어. text 비트는 14단어 이하로, 콜아웃은 16단어 이하로 유지하십시오.
  • 다이어그램 항목은 단어 위에 배치되며, 절대 한 번에 모두 배치되지 않습니다. 다이어그램의 첫 번째 항목은 비트 시작 후 약 1초 이내에 배치되어야 합니다. 그렇지 않으면 비트가 더 늦게 시작됩니다.
  • 섹션:
    • 인트로 끝에 roadmap을 표시합니다.
    • 각 섹션 시작 부분에 active를 설정하여 재사용합니다.
    • 각 섹션을 주요 대사의 overlay로 닫고, 가장 큰 섹션에는 bw를 사용합니다.
  • 최대 5분당 한 번 cta, 처음 30초 이내에는 절대 사용하지 않습니다.
  • end 카드로 종료합니다. 마지막 단어 이후에도 실행될 수 있습니다.

정직성

  • 화면의 숫자는 말한 내용과 같거나, 명명된 출처 source에서 가져와야 합니다.
  • 다른 사람 콘텐츠의 스크린샷은 meta에 크레딧이 필요합니다.
  • 스피커의 발언을 조작하지 마십시오: 인용문이 아닌 overlay 또는 text 비트는 레이블로 읽혀야 하며, 발언으로 읽혀서는 안 됩니다.

4. 렌더

~/.shorts-skill/bin/python pipeline/build_monologue.py render --slug <slug> [--sfx-db -22]
  • 얼굴을 한 번 추적합니다 (faces.json; 다시 컷하면 삭제).
  • 렌더링 시간은 비디오 길이에 비례합니다. 1분 테스트는 Mac mini에서 몇 분 정도 걸렸습니다.
  • 음향 효과: 각 레이아웃 변경 시 휘파람 소리, 항목 안착 시 팝 소리, 타이틀 및 엔드 카드로의 라이저. 더 많은 에너지를 위해 --sfx-db를 -18 쪽으로 높이십시오.

5. QA (항상)

for t in 1.5 5 10 20 30 40 50 60; do ffmpeg -v error -y -ss $t -i out/monologue/<slug>.mp4 -frames:v 1 -vf scale=640:-1 /tmp/m_$t.png; done

각 사항을 확인하십시오:

  • 텍스트: PiP 아래로 텍스트가 실행되지 않음 (종이 영역은 x = 1320에서 끝남). 스택 레이블이 한 줄에 맞음.
  • 하이라이트: 잘못된 * 또는 [ 없음. 화면당 최대 하나의 주황색.
  • 얼굴 프레이밍: 얼굴이 PiP 중앙에 있고, 펀치인이 머리를 자르지 않음.
  • 리빌 타이밍: 리빌이 음성 위에 배치됨. 비트가 오랫동안 희미한 단어를 표시하면 at이 너무 이른 것입니다.
  • 라우드니스: ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:" 결과가 약 -14로 나타남.

사용자에게 보고:

  • 런타임 및 비트 목록 (시간 → 유형 → 텍스트);
  • 아직 확인이 필요한 사항: 숫자, 이름 및 스크린샷 크레딧;
  • 텍스트가 그대로 인용되지 않아 균등 리빌로 대체된 비트.

아직 구축되지 않음

  • 9:16 버전: 컴포지션은 16:9 전용입니다. 세로형의 경우 editorial-short 스킬로 쇼트를 자르십시오.
  • 자동 계획: beats.json 작성은 판단력이 필요하므로 수동으로 또는 Claude가 transcript.txt로부터 수행합니다.

Individual skills in this repo

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

관련 스킬