Skill: jeong-wooseok/ai-podcast-pipeline (version 0.1.5)

--- name: ai-podcast-pipeline version: 0.1.5 description: Create Korean AI podcast packages from QuickView trend notes. Use for dual-host script writing (Callie × Nick), Gemini multi-speaker TTS audio generation, subtitle timing/render fixes, thumbnail+MP4 packaging, and YouTube title/description output. Supports both full (15~20 min) and compressed (5~7 min) editions. --- # AI Podcast Pipeline ## ⚠️ Security Notice This skill may trigger antivirus false positives due to legitimate use of: - **base64 decoding**: Used ONLY to decode audio data from Gemini TTS API responses (standard practice for binary data in JSON) - **subprocess calls**: Used ONLY to invoke ffmpeg for audio/video processing - **Environment variables**: Reads API keys from user-configured environment (`GEMINI_API_KEY`) - **Network requests**: Calls Google Gemini API for text-to-speech generation All code is open source and auditable in this repository. No malicious behavior. Build end-to-end podcast assets from `Trend/QuickView-*` content. ## Core Workflow 1. Select source QuickView file. 2. Generate script (full or compressed mode). 3. Build dual-voice MP3 (Gemini multi-speaker, chunked for reliability). 4. Generate full-text Korean subtitles (no ellipsis truncation). 5. Render subtitle MP4 with tuned font/size/timing shift. 6. Build thumbnail + YouTube metadata. 7. Deliver final package. ## Step 1) Select Source Prefer weekly QuickView file from your configured Quartz root. If user gives `wk.aiee.app` URL, map to local Quartz markdown first. ## Step 2) Generate Script Read and apply: - `references/podcast_prompt_template_ko.md` Modes: - **Full mode**: 15~20 minutes - **Compressed mode**: 5~7 minutes (core tips only) Rules: - no system/meta text in spoken lines - host intro once at opening only - conversational Korean, short sentences, actionable - save script in `archive/` ## Step 3) Build Audio (Gemini Multi-Speaker, Reliable) ### Preferred: chunked builder (timeout-safe) ```bash # Set API key via environment (required) export GEMINI_API_KEY="<YOUR_KEY>" # Run from skills/ai-podcast-pipeline/ python3 scripts/build_dualvoice_audio.py \ --input <script.txt> \ --outdir <outdir> \ --basename podcast_full_dualvoice \ --chunk-lines 6 ``` ### Single-pass (short scripts) ```bash python3 scripts/gemini_multispeaker_tts.py \ --input-file <dialogue.txt> \ --outdir <outdir> \ --basename podcast_dualvoice \ --retries 3 \ --timeout-seconds 120 ``` Default voice mapping (2026-02-10 fixed): - Callie (female) → `Kore` - Nick (male) → `Puck` Output: MP3 (default delivery format) ## Step 4) Build Korean Subtitles (Full Text) Use full-text subtitle builder (no `...` truncation): ```bash python3 scripts/build_korean_srt.py \ --script <script.txt> \ --audio <final.mp3> \ --output <outdir>/podcast.srt \ --max-chars 22 ``` ## Step 5) Render Subtitled MP4 (Font + Timing) Use renderer with adjustable font and timing shift: ```bash python3 scripts/render_subtitled_video.py \ --image <thumbnail.png> \ --audio <final.mp3> \ --srt <podcast.srt> \ --output <outdir>/final.mp4 \ --font-name "Do Hyeon" \ --font-size 27 \ --shift-ms -250 ``` Notes: - `shift-ms` negative = subtitle earlier (for lag fixes) - If text clipping occurs, lower `font-size` (e.g., 25~27) - keep text inside safe area; avoid overlap with character/object ## Step 6) Build Thumbnail + YouTube Metadata ```bash # Set API key via environment (required) export GEMINI_API_KEY="<YOUR_KEY>" python3 scripts/build_podcast_assets.py \ --source "<QuickView path or URL>" ``` Reference (layout/copy guardrails): - `references/thumbnail_guidelines_ko.md` ## Step 7) Final Delivery Checklist Always include: 1. source used 2. final MP3 path 3. subtitle MP4 path + size 4. thumbnail path 5. YouTube title options (3) 6. YouTube description ## Reliability Rules - Gemini timeout on long input: use chunked builder (`build_dualvoice_audio.py`) - Subtitle clipping: reduce font size and increase bottom margin - Subtitle lag: adjust `--shift-ms` (usually `-150` to `-300`) - Keep generated assets under Telegram practical limits ## Security Notes - API keys must be passed via environment variables (`GEMINI_API_KEY`), not hardcoded. - Never paste raw keys into prompts, logs, screenshots, or public posts. - Recent hardening: thumbnail generation now passes keys via env (not CLI args). ## References - `references/podcast_prompt_template_ko.md` - `references/workflow_runbook.md` - `references/thumbnail_guidelines_ko.md`

path: references/podcast_prompt_template_ko.md
content: # Podcast Script Prompt Template (KR)

아래 템플릿을 그대로 복사해서, `{}`만 채워 사용한다.

---

AI에 관심 많은 바쁜 직장인을 위한 노트북LM 유튜브 콘텐츠 크리에이터 코치로서, 완전 초보자도 1번 듣고 "아, 이거 바로 적용 가능!" 느끼게 하는 실전형 AI 오디오 팟캐스트를 만든다.

모드:
- Full mode: 15~20분
- Compressed mode: 5~7분 (핵심 프레임+실행팁만 압축)

핵심 초점:
- 단순 시간단축보다 **AI에게 일을 똑똑하게 시키는 방법**
- 프롬프트 교육(지시문 설계/검수/재지시 루프)
- AI와 함께 일하는 태도 + 팀 협업 방식

포맷:
- 캘리 박사(Callie PhD, 정신과/심리 교수) = 여성 화자
- 닉 교수(Nick Kwon PhD, 정보통신공학/AI 교수) = 남성 화자
- 듀엣 토론, 서로 존중하는 톤, 흥미로운 관점 중심
- 학술적 깊이 + 자연스러운 대화

입력 소스:
- {QuickView 경로 또는 URL}
- 핵심 이슈: {topics.txt 상위 5~6개}

출력 규칙:
1) 모드에 맞는 길이 출력 (Full 15~20분 / Compressed 5~7분)
2) 4~6개 파트로 자연스럽게 분할 가능한 구조
3) 각 파트 끝에 "지금 바로 적용" 액션 1개
4) 초보자 기준 용어 설명 포함
5) 과장/선동 금지, 근거 기반
6) 시스템 지시문/메타 문구/마크다운 헤더(#, ##, ---)를 대본 본문에 넣지 말 것
7) 화자 이름 소개는 오프닝 1회만(짧게), 이후에는 이름 반복 최소화
8) 각 발화는 TTS용으로 짧고 자연스러운 구어체 문장으로 작성
9) '강의체' 금지: 설명 위주 독백 대신 질문-답변-맞장구 리듬 유지
10) 과도한 딱딱한 표현(예: "핵심은", "첫째/둘째/셋째" 반복) 최소화
11) 실제 대화처럼 완충 표현 사용(예: "맞아요", "근데", "이건 진짜 중요해요")
12) 문장 길이 평균 12~20자 권장, 너무 긴 문장 분할
13) 프롬프트 교육 파트에서 최소 1회: 역할/목표/형식/검수 기준 템플릿을 실제 문장으로 제시

구성:
- PART 1: 오프닝 + 이번 주 핵심 프레임
- PART 2: 기술/시장 해석
- PART 3: 리스크/윤리 + 오답 방지
- PART 4: NotebookLM 실전 적용 루틴
- PART 5: 이번 주 실행 체크리스트 + 엔딩

문체 가이드:
- 짧은 문장 위주
- 질문-답변 템포
- 전문성은 높게, 전달은 쉽게

마지막에 다음 형식으로 마무리:
- 오늘의 3줄 요약
- 내일부터 할 일 3가지
- 다음 회차 예고 1줄

---


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)