================================================================ 영어판 팟캐스트 자동 배포 시스템 기록 (as-built 증보) 작성: 2026-06-11 KST, Claude Code (Fable 5) + Codex 5.5(제목·커버) 본문서는 팟캐스트_자동배포_시스템_구축문서_20260610.txt의 증보판이다. ================================================================ 1. 개요 ---------------------------------------------------------------- 한국어판 두 쇼의 대본(tts_script.json)을 매일 영어로 번역하고, 같은 Gemini 멀티스피커 보이스(Sulafat/Achird)가 영어로 읽은 mp3를 새 피드 두 개로 내보낸다. 한국어판 시스템은 한 글자도 수정하지 않았다. 쇼 구성 (영어판, 2026-06-11 신설): - Daily AI News from Seoul https://kimkj.com/podcast/daily-ai-en/feed.xml guid_prefix: kimkj-daily-ai-en - China AI, Robotics & Semiconductor Briefing https://kimkj.com/podcast/china-ai-en/feed.xml guid_prefix: kimkj-china-ai-en 제목 결정: Codex 5.5 (gpt-5.5, reasoning xhigh). 검색 키워드 전진 배치, Seoul/China 차별화. 커버: Codex 5.5가 make_covers.py(PIL) 작성·렌더링, 3000x3000 RGB JPG q92, 원본은 ~/iCloud/ai_workspace/podcast_en_20260611/covers/. 2. 매일 자동 흐름 (KST) ---------------------------------------------------------------- 10:20/12:00 한국어판 publish_podcast.sh (기존, 불변) 11:00 publish_podcast_en.sh 1차 12:30 publish_podcast_en.sh 2차 (멱등 재시도) publish_one_en 순서 (쇼별): a. runs/날짜/script/tts_script.json 없으면 "대본 없음, 건너뜀" b. 한국어 final_audio_slide_synced.mp3 없으면 "한국어판 미완성, 건너뜀" (한국어판이 완성된 날만 영어판을 낸다) c. make_english_episode.py: claude CLI(haiku)로 번역. 실패 시 claude 재시도 → ollama gemma4:31b 폴백. 검증: 세그먼트 id 일치, 한글 잔존 0 (URL 제외). 산출: /work/YYYYMMDD/translation.json d. build_tts_en.py: 슬라이드 단위 Gemini 멀티스피커 TTS(en-US), 3회 재시도 후 후보 모델 전환(TTS_MODEL_PRIMARY/CANDIDATE 동일 기본값). 슬라이드 사이 bell.mp3 삽입, 44.1kHz 스테레오 96kbps mp3. 산출: ep/YYYYMMDD.mp3 + .json(번역 제목·설명·링크·길이) e. build_feed.py(기존 스크립트 재사용)로 feed.xml 재생성 f. rsync로 daily-ai-en, china-ai-en만 라이트세일에 동기화 3. 파일 위치 ---------------------------------------------------------------- 우분투 /home/ukimkj/podcast/ ├── publish_podcast_en.sh 영어판 게시 (cron 11:00, 12:30) ├── make_english_episode.py 번역 (claude haiku → gemma4:31b 폴백) ├── build_tts_en.py 영어 TTS + bell + mp3 + 메타 ├── publish_en.log 영어판 게시 이력 ├── daily-ai-en/ show.json, cover.jpg, feed.xml, ep/, work/ └── china-ai-en/ 동일 구조 iCloud 백업: ~/iCloud/ai_workspace/podcast_en_20260611/ (우분투 배포본 원본, 커버 원본, make_covers.py, Apple 등록 안내) 4. 설계 원칙·주의 ---------------------------------------------------------------- - GEMINI_API_KEY는 daily 파이프라인 .env에서 publish_podcast_en.sh가 실행 시점에만 추출한다. 어떤 로그에도 키를 남기지 않는다. - 영어판 show.json의 language는 "en". 진행자 표기는 "Kyungjin Kim, Lawyer and Former Member of the Korean National Assembly". - 번역 프롬프트가 이름 로마자 표기를 "Kyungjin Kim"으로 강제한다. - work/ 폴더는 피드에 노출되지 않으나 rsync로 서버에도 복제된다(무해). - 기존 금지 규칙 동일 적용: guid·피드 URL 변경 금지, feed.xml 수동 수정 금지, 라이트세일 직접 수정 금지. - 영어판 에피소드를 소급 게시하려면: publish_podcast_en.sh YYYY-MM-DD 5. 등록 상태 ---------------------------------------------------------------- - Apple: 변호사님이 podcastsconnect.apple.com에서 두 피드 등록 예정 (안내: apple_등록_안내.txt). Spotify는 선택. [2026-06-11 추가] 음성 속도: publish_podcast_en.sh가 해당 쇼 한국어 파이프라인 .env의 TTS_SPEED(현재 0.9506)를 읽어 build_tts_en.py로 넘기고, 최종 합본 mp3에 ffmpeg atempo를 한 번 적용한다. 영어판 속도만 따로 바꾸지 말고 한국어 .env 값을 고친다.