깊이 시점 설명자(Depth POV Explainer)
약 10분 분량의 '왜 [동물]을 절대 만나고 싶지 않을까' 동영상을 제작합니다. Remotion으로 애니메이션 처리된 평면 벡터 모션 그래픽(정적 슬라이드 없음, 모든 것이 움직임), ElevenLabs Eleven v4로 내레이션, 한 문장에 하나의 시각적 아이디어. 사용자가 어떤 언어로 작성하든 항상 영어로 대화하며, 대본, 레이블 및 프롬프트도 미국 영어로 작성합니다. 모든 JSON/TXT/.env 파일은 BOM 없이 UTF-8로 작성합니다.
0단계 - D 드라이브의 작업 공간 (매번 실행, 누락된 항목 생성)
루트: D:\DepthPOV (D 드라이브가 없으면 사용자에게 다른 드라이브를 요청).
D:\DepthPOV\.env
D:\DepthPOV\studio\ Remotion 프로젝트 (npx create-video@latest studio, Blank 템플릿)
D:\DepthPOV\studio\src\lib\ 공유 시각적 라이브러리 (core.tsx, sets.tsx, art.tsx, ui.tsx)
D:\DepthPOV\tools\ voice.py stock.py stock_pick.py sfx.py
D:\DepthPOV\videos\<slug>\ facts.json script.txt script_tagged.txt beats.json timing.json stock.json packaging.md voice.mp3 out.mp4 FINAL\
D:\DepthPOV\assets\stock\ music\ sfx\ thumbnails\
D:\DepthPOV\brand\brand.json
이 스킬과 함께 번들로 제공 (작업 공간에 없을 때 복사, 로컬에 최신 복사본이 있으면 덮어쓰지 않음): scripts/*.py -> D:\DepthPOV\tools\; remotion-lib/lib/*.tsx 및 brand.ts -> studio\src\lib\; remotion-lib/stills.mjs -> studio\; remotion-lib/example-blue-whale/은 이 스킬의 작성자가 만든 완성된 참조 동영상 (13개 챕터 파일, ~66개의 지속적 장면, Main.tsx, Thumb.tsx)으로, 장면별로 복사하지 말고 참조 구현으로 읽기만 합니다. 라이브러리는 채널 이름, 강조 색상 및 캐릭터 색상을 studio\src\lib\brand.ts에서 가져오며, tools\sync_brand.py가 brand.json에서 생성합니다. 장면에 채널 이름이나 색상을 하드코딩하지 마십시오. 스튜디오를 만든 후 npx remotion add @remotion/media @remotion/google-fonts를 실행합니다. Python에는 requests가 필요합니다.
.env 파일이 없으면 빈 값으로 생성하고 중지한 후, 사용자에게 메모장에서 열어 키를 채우라고 알립니다.
ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
ELEVENLABS_MODEL_ID=eleven_v4
PIXABAY_API_KEY=
PIXABAY_API_KEY는 무료입니다. pixabay.com에 로그인하고 https://pixabay.com/api/docs/에 표시된 키를 복사합니다 (하나의 키로 동영상과 사진을 모두 다룹니다). 이전 .env 파일에 있는 추가 키는 무시합니다.
키 값을 절대 출력하지 마십시오. Node.js LTS가 설치되어 있는지 확인하고, 한 번 npx skills add remotion-dev/skills로 Remotion 에이전트 스킬을 설치한 후 Remotion 코드를 작성하기 전에 로드합니다. 사용자가 'Retention'이라고 말하면 Remotion을 의미합니다. Remotion은 개인 및 아주 작은 회사에만 무료라는 점을 한 번 언급합니다 (/remotion-license).
1단계 - 브랜드 (첫 실행 시에만, brand.json에 저장; brand.json이 있으면 건너뜀)
다음을 순서대로, 각각 하나의 메시지로, 항상 권장 사항과 함께 질문합니다.
- 채널 이름. 사용자에게 이미 이름이 있는지 물어봅니다. 없으면 3가지 스타일(미스터리 예: 'Abyss Files', 탐험가 예: 'Into The Deep', 직접적 예: 'Why You'd Never')로 8개의 이름을 제안합니다: 1-3단어, 발음하기 쉬움, 기존 대형 채널 이름 없음, 'Depth Theory' 유사어 없음, 채널이 나중에 해양을 떠나도 작동함. 각각 일치하는 @핸들을 제공합니다. 사용자에게 YouTube에서 이름 + 핸들을 검색하여 커밋하기 전에 확인하라고 알립니다 (Claude는 가용성을 확인할 수 없음). channel_name, handle, tagline을 저장합니다.
- '당신' 캐릭터, 다음 중 하나를 권장합니다.
- 스쿠버 다이버 (주황색 슈트, 빨간색 헤드램프) - 해양; Depth Theory와 가장 유사함, 가장 덜 독특함.
- 미니 잠수함 조종사 - 심해; 동영상 전체가 둥근 현창 + HUD (수심, 산소)로 프레임됨. 해양 전용 채널에 권장.
- 난파선 생존 뗏목 생존자 - 표층 해양; 탑다운 뗏목 뷰.
- 헤드램프를 착용한 탐험가 - 정글, 동굴, 강, 빙하; 어둠 속의 빛의 원. 채널이 해양을 넘어 확장되는 경우 권장.
- 레인저 / 야생생물 학자 - 육상 동물; 쌍안경 + 야장.
- 시간 여행자 - 선사시대 생물; 연도 카운터 (-66,000,000).
- 강조 색상 + 글꼴, 그리고 채널 자체의 오프너 스타일 (냉담한 오프닝 3개 샘플을 보여주고 사용자가 선택).
{channel_name, handle, tagline, character, look, signature_frame, accent {threat, safe, danger}, character_colors {suit, suit2, stripe, fins, fins_dark, lamp} (지느러미는 가시성이 높은 색상), font, opening_style}을 brand.json에 저장한 후
python D:\DepthPOV\tools\sync_brand.py를 실행하여 studio\src\lib\brand.ts를 작성하고 모든 동영상에서 재사용합니다. 번들 아트 라이브러리는 스쿠버 다이버를 그립니다. 다른 캐릭터 (잠수함 조종사, 탐험가, 레인저, 시간 여행자)의 경우 동일한 해부학 규칙을 사용하여 art.tsx에 새 구성 요소를 빌드합니다 (참조/visual-style.md). Depth Theory의 'Picture this.' 오프너, 정확한 팔레트 또는 다이버 디자인을 절대 사용하지 마십시오. 채널 이름을 다음 위치에서 사용합니다: 크로스 동영상 콜백 줄 ('오랫동안 [channel_name]을 시청하셨다면...'), CTA/엔드스크린 줄, 설명, 그리고 동영상 마지막 10초 동안의 작은 로고 버그.
2단계 - 사실 (대본 전에)
동물을 웹 검색합니다. facts.json: 25-35개 항목 {id, claim, number, unit, everyday_comparison, source_url, confidence}. 가져온 출처에 명시되지 않는 한 최상급 (가장 큰/가장 깊은/유일한/최초의) 없음. 대중적인 신화와 진실을 나열합니다.
3단계 - 대본 (고정 구조; 먼저 참조/script-patterns.md 읽기)
script-patterns.md를 사용하여 섹션 예산, 장치 및 독창성 규칙을 확인합니다: 참조에서 리듬을 배우되, 그 표현을 그대로 사용하지는 마십시오. 모든 대본은 이 동물의 사실에서 새롭게 작성됩니다. 동물이 이미 참조 (향유고래)에서 다루어졌다면, 거기에 나열된 각도를 피하십시오.
- 콜드 오픈 0:00-0:25. 첫 번째 줄은 항상 브랜드의 시그니처 오프너이며, 짧습니다 (3초 미만). 시청자가 배울 수 있도록: '다이브 로그, 항목 [n]. [수심]. 공기: [PSI].' 두 번째 줄부터는 HOOK이며, 여전히 처음 7초 이내입니다: 시청자를 지금 당장 위험에 빠뜨리세요 - 무언가가 닿고, 잡고, 빙글빙글 돌거나 빛을 막고, 상어 같은 형체, 그림자, 보이지 않는 것 - 현재 시제, 설명되지 않음, 동시에 화면에 표시됩니다 (실루엣, 촉수, 그림자, 눈). 그런 다음에야 설정 (야간 다이빙, 테더, 아래 수심), 시청자가 신뢰하는 규칙, 그리고 그것을 깨고 당신을 향해 올라오는 감각적 신호. 처음 7초를 고요한 풍경이나 물류에 낭비하지 마십시오. 중간 동영상 보상을 위해 감각적 세부 사항을 심고 나중에 오프닝 위험을 반향합니다 (실제 만남, 가까이). 인트로 없음.
- 리프레임: 사람들이 일반적으로 두려워하는 동물, 양보, 그런 다음 [동물]에 대한 세 가지 주장; '...왜 당신은 절대 만나고 싶지 않을까'로 끝맺음.
- 다섯 개의 챕터: 크기, 음식, 사냥/감각 방식, 뇌/행동, 사람을 공격한 적이 있는가. 각각은 다음 장이 열리는 질문으로 끝맺습니다. 모든 숫자는 일상적인 비교를 받습니다.
- 약 3:30경에 심어진 세부 사항의 보상.
- '당신은 실제로 무엇을 할까?': 4가지 옵션을 하나씩 차례로 무너뜨리고, 각각 건조한 농담, 평결 줄.
- 반전 1: 거의 사람을 표적으로 삼지 않음. 반전 2: 실제 위험은 반대 방향으로 감.
- 생태계 역할. 8. 종료: 새로운 의미로 규칙을 반복. 9. CTA: 다음에 다룰 생물을 묻고, brand.json의 채널 자체 표현 사용 (Depth Theory의 'I do actually read them'을 절대 복사하지 마십시오). 음성: 2인칭 (35+ 'you'), 문장 20단어 미만, 5-7개의 건조한 은유 농담, 분당 약 170단어로 1,600-1,800단어. 'let's dive in' 없음, 이모지 없음. script.txt로 저장 (태그 없음).
4단계 - 장면 및 비트 (먼저 참조/visual-style.md 읽기)
동영상은 약 60개의 지속적인 장면으로 구성되며, 문장당 하나의 카드가 아닙니다. scenes.json: {scene_id, chapter, setting (deep|mid|surface-split|paper|radar|xray|black|stock), camera (drift|push-in|follow-dive|tilt|top-down|macro), cast (illustrated subjects), beats:[...]}. 장면은 6-20초 동안 지속되며 2-6개의 문장을 다룹니다. 각 문장은 장면에 하나의 요소를 추가합니다 (주제 등장, 측정선 그리기, 카운터 실행, 레이블 나타남, 스탬프 찍기, FX 발사) - 교체하는 것이 아닙니다. Beat = {id, scene_id, text, add (what appears/changes), label (0-5 words or empty; never repeats the narration), label_pos (top|under-subject|near:), accent, fact_ids, stock_query?}. 문장 유형별 참조 도구 키트 사용: 숫자 -> 장면 내 다이어그램 (측정선, 미터, 카운터, 아이콘 배열, 그리드, 파이); 비교 -> 주제 옆에 객체 등장 (버스가 들어오고, 코끼리가 나타남); 역사 -> 종이/세피아 소품 및 표면 세트; 농담 -> 소품 또는 막대기 그림 (영수증, 양식, 화이트보드, 스탬프, UI 대화 상자); 위험 -> 빨간색 레이블 + 충격 FX; 감지 -> 레이더/X선 모드 전환. '당신' 캐릭터는 콜드 오픈, 보상, 옵션 챕터 및 종료에 나타나며, 항상 동물 옆에 아주 작게 나타납니다.
5단계 - 사실 게이트 (차단)
표: 문장 | fact_id | source | 모든 숫자 또는 최상급이 있는 문장에 대해 OK/FIX. 모든 FIX 행을 수정하고 ElevenLabs 크레딧을 사용하기 전에 사용자에게 표를 보여줍니다.
6단계 - 음성 (Eleven v4 + 오디오 태그)
- ElevenLabs Auto-tag가 하는 방식대로 v4 오디오 태그를 추가하여 script_tagged.txt를 생성합니다: [thoughtful], [curious], [uneasy], [dry], [whispers], [short pause], [long pause]. 문장 2-3개당 최대 하나의 태그; 폭로와 보상 주변에는 속삭임/일시 정지; 농담 전에는 [dry]; 통계를 담은 문장 내부에는 태그 없음. 채널당 한 번 사용자에게 태그 밀도를 승인받기 위해 10줄 샘플을 보여줍니다.
POST https://api.elevenlabs.io/v1/text-to-speech/{ELEVENLABS_VOICE_ID}/with-timestamps를 .env의 model_id (eleven_v4)로 호출합니다. 요청당 10,000자 제한: 챕터 경계에서 분할 (보통 2개 요청), 이전 텍스트/다음 텍스트를 전달하여 연속성을 유지하고 ffmpeg로 연결합니다.- with-timestamps가 v4에서 거부되면 일반 엔드포인트를 사용한 다음, ElevenLabs Forced Alignment (
POST /v1/forced-alignment)를 오디오 + script.txt (태그 제거)와 함께 사용합니다. - 단어 타이밍을 문장에 매핑 -> timing.json {beat_id, start_s, end_s, start_frame, end_frame} (30fps).
6b단계 - 음향 효과 (ElevenLabs Sound Effects, CapCut 불필요)
D:\DepthPOV\assets\sfx\에 재사용 가능한 SFX 라이브러리를 유지하며, POST https://api.elevenlabs.io/v1/sound-generation {text, duration_seconds, prompt_influence 0.6}을 동일한 ELEVENLABS_API_KEY (tools/sfx.py; 누락된 파일만 생성되므로 크레딧은 한 번만 소비)로 생성합니다. 핵심 세트: whoosh_soft, whoosh_deep, pop_soft, tick_ui, counter_roll, stamp, paper_slide, impact_heavy, splash_big, bubbles, sonar_ping, low_hum, whale_moan, heartbeat_slow, riser_tension, scan_beep, warning_beep, strike_line, gulp, boat_motor; 필요할 때 생물 특정 사운드를 추가합니다. 복사본을 -20 LUFS로 정규화하여 studio/public/sfx/에 넣습니다. 각 SFX를 해당 동작 (요소 등장, 카운터, 스탬프, 충격, 장면 변경)에 <Sfx at=... vol=...>와 함께 배치하며, 볼륨 0.3-0.6, 초당 하나 이상 배치하지 않음; 음성은 위에 유지합니다.
7단계 - 스톡 푸티지 (6-10개 클립, 각 3-6초, 감정적 피크에서; 런타임의 최대 8%)
출처, 다음 순서로 (이것들만; YouTube/TikTok 리핑, 다큐멘터리 푸티지 또는 '편집 전용'으로 표시된 것은 절대 안 됨):
- Pixabay (자동, API). 하나의 PIXABAY_API_KEY로 동영상
https://pixabay.com/api/videos/?key=...&q=...및 사진https://pixabay.com/api/?key=...&q=...에 액세스합니다. 초당 최대 100개 요청; 모든 응답을 24시간 동안 assets/stock/_cache에 캐시; 대량 다운로드 금지. 도구: tools/stock.py, tools/stock_pick.py. - NOAA (수동, 실제 종에 가장 적합). NOAA에는 스톡 비디오 API가 없습니다. Claude가 클립을 찾아 (NOAA Fisheries 종 페이지 및 비디오 갤러리, NOAA Ocean Exploration, NOAA Photo Library, Wikimedia Commons에 있는 NOAA 자체 업로드) 사용자에게 번호가 매겨진 목록을 제공합니다: 직접 페이지 링크, 클립이 보여주는 내용, 채울 슬롯, 정확한 크레딧 줄, 선택할 파일 (가장 큰 MP4, 이상적으로 1080p). 사용자는 assets/stock//noaa/에 다운로드합니다. NOAA 직원이 만든 푸티지는 일반적으로 퍼블릭 도메인이지만 각 페이지를 읽으십시오: 많은 고래 클립은 연구 허가 또는 계약자에 의해 촬영되었으며 'NOAA Fisheries, 허가 #XXXX' 또는 사진작가 이름과 같은 크레딧 줄이 필요합니다. 페이지가 재사용을 제한하면 클립을 건너뜁니다. 다운로드 후 항상 파일의 시작 슬레이트와 엔드 크레딧을 읽으십시오: NOAA Fisheries B-roll 슬레이트는 '모든 푸티지는 NOAA 제공... NOAA Fisheries에 크레딧' 및 허가 번호 (안전)를 말합니다. 교육용 영화 (예: Ocean Today)는 종종 엔드 크레딧에 프로덕션 하우스 또는 스톡 에이전시와 같은 외부 기여자를 나열하므로 해당 샷은 퍼블릭 도메인이 아니며 거부되어야 합니다. 또한 자막이나 로고가 포함된 파일도 거부합니다. 슬레이트가 대상 종을 명명한 세그먼트만 사용하고 (B-roll 패키지는 종을 혼합함), 설명에 'NOAA는 이 채널을 보증하지 않습니다'라고 말합니다. NOAA 로고를 절대 사용하지 마십시오.
- Pexels (수동 링크). API 키 발급은 마지막 확인 시 (2026년 11월) 중단되었으므로, Claude는 pexels.com/videos를 검색하고 (Chrome의 Claude 또는 웹 검색) 사용자에게 다운로드할 내용 (Full HD 1920x1080)과 함께 직접 클립 페이지 링크를 제공하여 assets/stock//pexels/에 넣습니다. 하나의 동영상에 대해 몇 개의 클립을 수동으로 다운로드하는 것은 Pexels 라이선스 (상업적 사용 허용) 하에 괜찮습니다. 대량 또는 스크립트된 스크래핑은 금지됩니다. 나중에 .env에 PEXELS_API_KEY가 나타나면 대신 API를 사용합니다 (헤더
Authorization: <key>,GET https://api.pexels.com/v1/videos/search?query=...&orientation=landscape&size=medium&per_page=.., 시간당 200개 요청). - Wikimedia Commons (수동, 가끔). 명확한 PD / CC BY / CC BY-SA 라이선스가 있는 파일만; 작성자 + 라이선스를 기록. 참조에서와 같은 위치에 클립을 배치합니다: 콜드 오픈 직후 (실제 동물 또는 다이버), '실제 세계' 주장 (브리치, 무리, 선박, 포경, 항공), 그리고 반전/생태계에서; 분산시킵니다 (연속 3개는 금지). 각 슬롯에 대해 3-5개의 동의어를 검색하고, 태그/제목에 주제가 포함된 항목만 유지한 다음 ffmpeg로 후보당 하나의 프레임을 추출하여 살펴봅니다. 잘못된 종 (혹등고래는 대왕고래가 아님) 및 주제와 무관한 샷을 거부합니다. 다른 종의 클립은 일반적인 줄 ('대왕고래')에만 사용할 수 있으며 화면 메모 '(표시: 혹등고래)'가 있어야 합니다. 클립을 더 어둡고 차갑게 그레이딩하여 팔레트와 일치시키고, 8프레임 블러 디졸브로 인/아웃합니다. 모든 출처에 대한 크레딧은 필수입니다. 각 클립은 재생 중에 왼쪽 하단에 작은 화면 크레딧을 표시합니다.
8단계 - 포장
- packaging.md를 작성합니다: video_title (YouTube에 최적화), description (작성 지침), tags (15-20), hashtags (10; #shorts 금지), end_screen (채널 구독 + 재생 목록), next_video_slug. title은 brand.json의 opening_style을 따릅니다. description은 동영상 콜드 오픈 후크로 시작하고, 사실 3개를 나열하며, '만약 이 채널을 처음 본다면... 시청해 주셔서 감사합니다.'라는 줄을 포함하고, 소스 자료에 대한 크레딧 블록 (NOAA, Pexels 등)을 포함합니다. URL을 링크로 표시하지 마십시오. 300-400자.
- D:\DepthPOV\brand\brand.json에서 채널 로고 벡터를 렌더링합니다 (채널당 한 번). 최종 동영상에 오버레이합니다.
- Thumb.tsx를 사용하여 썸네일을 렌더링합니다: 큰 동물, 작은 '당신' 캐릭터, 브랜드 강조 색상의 3-5단어 오버레이 텍스트, 링크에 놀라거나 반응하는 '당신'.
9단계 - 렌더링 (Remotion 스튜디오)
Main.tsx에서 동영상을 빌드합니다. 각 챕터는 자체 파일에 있습니다 (chapter_01.tsx). 각 파일은 import { Scene } from '../src/lib/core'를 가져와서 컴포넌트를 사용합니다. 오디오는 voice.mp3에서, SFX는 studio/public/sfx/에서 제공합니다. 렌더링: npx remotion render studio/src/Main.tsx out.mp4 (출력은 D:\DepthPOV\videos<slug>\out.mp4). 프리뷰: npx remotion studio.
- Remotion 스튜디오에서 모든 장면을 미리 봅니다. SFX가 있는 지점에서 타임라인을 스크러빙하여 음성 간격이 없는지 확인합니다. 동영상 길이가 9:30-10:30인지 확인합니다. 느린 부분을 단축할 필요가 있는지 주의하고, 필요한 경우 16-20초 이상의 장면에 대해 패닝/줌을 추가합니다. Remotion 렌더링 명령을 실행하고 완료될 때까지 기다립니다. 완료되면 출력 파일의 크기와 지속 시간을 확인합니다. 동영상이 10분 미만이면 사용자에게 알리고 확장을 제안합니다.
- 스튜디오는 포트 3000에서 열립니다. 비디오 썸네일을 생성하기 위해
npx remotion still studio/src/Thumb.tsx out.png를 실행합니다. - 'FINAL' 폴더를 만듭니다: 최종 MP4, PNG 썸네일, packaging.md, packaging.md에 지정된 1080p 또는 4K 출력. 완료되면 사용자에게 게시 준비가 되었음을 알리고 최종 세부 사항을 확인하도록 요청합니다.
- 전체 프로세스가 완료되고 동영상이 렌더링되면 작업 디렉토리를 정리하고 임시 파일을 제거하거나 보관합니다.
중요 참고 사항
- 항상 정확성보다 창의성을 우선시합니다. 가끔 세부 사항이 정확하지 않더라도 좋은 이야기를 전달하는 것이 더 중요합니다.
- 사용자가 '다시 시도'를 요청하면 항상 동의하고 프롬프트를 조정합니다.
- 사용자가 기술적인 질문을 하면 친절하고 인내심 있게 답변합니다.
- 모든 파일은 UTF-8 인코딩을 사용합니다.
- Python, Node.js, ffmpeg 및 기타 필요한 도구가 설치되어 있는지 확인합니다.
- 사용자에게 각 단계의 진행 상황을 명확하게 알립니다.
- 오류가 발생하면 명확한 오류 메시지를 제공하고 해결 방법을 제안합니다.