Community생산성 & 협업github.com

podcast-kit

하나의 에피소드 JSON 파일(쇼, 제목, 요약, 게스트, 링크, 챕터, 대본, duration_seconds)을 에피소드 게시 준비 완료 자산으로 변환합니다. `show-notes`는 노트를 마크다운 또는 일반 텍스트로 렌더링합니다. `chapters`는 챕터 목록을 검증하고(첫 번째 챕터는 0:00에서 시작, 시작 시간이 엄격히 증가, 모든 시작이 duration 내에 있어야 하며, 제목이 비어 있지 않아야 함) YouTube 설명 챕터와 Podcasting 2.0 챕터 JSON을 내보냅니다. 잘못된 챕터는 exit 1과 함께 아무것도 내보내지 않습니다. YouTube의 추가 규칙(>=3개 챕터, 각각 >=10초)은 문제가 아닌 경고입니다. `audiogram-plan`은 설명된 텍스트 신호(질문, 숫자, 감탄사, 고정 강조 구문 목록, 15~60초 길이 기준)로 대본 세그먼트를 순위 매기고 계획을 출력합니다. 오디오를 자르거나 비디오를 렌더링하지 않습니다. 에피소드 파일로부터 에피소드 마무리 작업 시 사용합니다. Exit 1은 실패가 아니라 결과 발견입니다.

podcast-kit란 무엇인가요?

podcast-kit는 포드캐스트 에피소드 게시 프로세스를 단순화하는 명령줄 도구입니다. 하나의 JSON 에피소드 파일(쇼, 제목, 요약, 게스트, 링크, 챕터, 대본, duration_seconds 포함)을 입력으로 받아 쇼 노트, YouTube 챕터, Podcasting 2.0 챕터 파일, 그리고 클립할 가치가 있는 순간의 순위 목록을 생성합니다. 순수 Python 표준 라이브러리로 작성되어 로컬에서만 실행되며, 에피소드 파일 외에는 아무것도 읽지 않습니다. 핵심 설계 원칙은 정직성입니다. 잘못된 챕터 목록은 절대 내보내지 않습니다(플레이어가 조용히 무시하므로, 잘못된 내보내기는 없는 것보다 나쁘다고 판단). 또한 오디오그램 점수는 대본 텍스트 신호(질문, 숫자, 감탄사, 고정 강조 구문)만을 기반으로 한 순위이며, 오디오나 비디오를 렌더링하지 않습니다. Claude Code, Cursor, Codex 등 모든 AI 어시스턴트에서 사용할 수 있으며, 포드캐스트 제작 파이프라인에 통합되어 챕터 유효성 검사나 클립 후보 선별 작업을 자동화할 수 있습니다. Tool 사용 시 agent는 tool의 한계를 존중해야 하며, '클립이 잘 될 것' 같은 예측을 하지 말고 텍스트 신호 기반 순위임을 명확히 전달해야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jasveerai88/podcast-kit/tree/HEAD

Installed? Explore more 생산성 & 협업 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

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

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

문서

podcast-kit — agent skill

목적

에피소드를 게시하는 것은 한 가지 사실 집합에서 여러 개의 작은 복사 작업을 수행하는 과정입니다: 노트, YouTube 챕터, Podcasting 2.0 챕터 파일, 그리고 클립할 가치가 있는 순간을 찾는 작업. 이 도구는 하나의 에피소드 JSON을 받아 모든 것을 생성하므로, 사실은 정확히 한 번만 존재합니다. 순수 Python 표준 라이브러리; 로컬 전용; 에피소드 파일만 읽습니다.

이 도구의 정직성 핵심: 챕터 목록은 유효할 때만 내보냅니다 — 플레이어는 잘못된 목록을 조용히 무시하므로, 잘못된 내보내기는 내보내지 않는 것보다 더 나쁩니다. 그리고 오디오그램 점수는 대본 텍스트만으로 계산된, 어디를 먼저 살펴볼지에 대한 순위입니다. 특정 순간이 반드시 좋은 성과를 낼 것이라는 예측이 아니며, 계획은 렌더링된 오디오그램이 아닙니다.

사용 시기 / 사용하지 말아야 할 시기

다음과 같을 때 사용하세요:

  • 에피소드가 하나의 에피소드 JSON으로 존재하거나 작성될 수 있는 경우: 마무리란 쇼 노트, YouTube 및 포드캐스트 앱용 챕터를 생성하고 무엇을 클립할지 결정하는 것을 의미합니다.
  • 파이프라인에서 챕터 통과 여부 게이트가 필요한 경우: chapters exit 0 = 목록이 유효하고 내보내기가 출력에 존재함; exit 1 = 현재 상태로 챕터를 게시하지 마십시오.
  • 편집자가 전체 녹음을 훑기 전에 들을 가치가 있는 다섯 개의 타임스탬프를 원하는 경우.

다음과 같을 때는 사용하지 마십시오:

  • 전사(transcription)가 필요한 경우 — 대본은 여기서 입력입니다. 먼저 전사 도구로 세그먼트를 생성하세요.
  • 오디오나 비디오 렌더링이 필요한 경우 — audiogram-plan은 계획(타임스탬프 + 단어 + 이유)입니다. 편집기나 렌더링 도구로 가져가세요.
  • RSS, 호스팅 또는 배치 처리가 필요한 경우 — 이 도구는 의도적으로 한 번에 하나의 에피소드 파일을 마무리합니다.

명령어

모든 명령어는 위치 인수로 에피소드 파일을 받으며 --json을 지원합니다.

# 쇼 노트 — 마크다운(기본) 또는 일반 텍스트
python3 src/podcast_kit.py show-notes EPISODE.json \
    [--format md|text]

# 챕터 검증 + 내보내기 (유효하지 않으면 exit 1 및 내보내기 없음)
python3 src/podcast_kit.py chapters EPISODE.json \
    [--format youtube|json|both]

# 클립할 가치가 있는 순간 순위 매기기 (자격 미달 시 exit 1)
python3 src/podcast_kit.py audiogram-plan EPISODE.json \
    [--top 5]

에피소드 필드: show (선택), episode (선택적 정수), title (show-notes에 필수), published (선택, 그대로 출력), duration_seconds (chapters에 필수; 초 또는 타임스탬프 문자열), summary (show-notes에 필수), guests — {"name", "role"?} 목록, links — {"label", "url"} 목록, chapters — {"start", "title"} 목록, transcript — {"start", "end", "speaker"?, "text"} 목록. 타임스탬프는 초(754), "M:SS" 또는 "H:MM:SS" 형식을 모든 곳에서 허용합니다. 파일은 매 읽기 시 검증됩니다. 구조적 문제(필드 누락, 잘못된 타임스탬프, 시작보다 먼저 끝나는 세그먼트, duration을 초과하는 세그먼트)는 문제가 되는 챕터나 세그먼트를 명시하는 exit 2 오류입니다.

챕터 검증 (정확한 규칙)

문제 (exit 1, 내보내기 없음): 첫 번째 챕터가 0에서 시작하지 않음; 시작이 이전 시작보다 엄격히 크지 않음; 시작이 duration_seconds 이상임 (duration - 1에서 시작은 유효); 제목이 비어 있음.

경고 (보고되지만 내보내기는 생성됨): 챕터가 3개 미만; 챕터 길이가 10초 미만. 둘 다 Podcasting 2.0이 아닌 YouTube의 규칙입니다 — 내보내기는 어느 쪽이든 유효하며, YouTube는 무시할 수 있습니다.

내보내기: YouTube 라인은 MM:SS 제목 (또는 에피소드가 1시간 이상이면 H:MM:SS) 형식입니다. Podcasting 2.0은 {"version": "1.2.0", "chapters": [{"startTime", "title", "endTime"}]} 형식입니다. 각 챕터의 endTime은 다음 챕터의 startTime이며, 마지막 챕터의 endTime은 duration입니다.

오디오그램 점수 (정확한 규칙)

대본 세그먼트당, 텍스트만을 기준으로:

  • 물음표: 각 +2, 최대 +4
  • 숫자 (숫자 연속, 예: 18, 1,900): 각 +2, 최대 +4
  • 느낌표: 각 +1, 최대 +2
  • 강조 구문 — 고정 목록 "the truth is", "biggest mistake", "nobody tells you", "everyone gets wrong", "never", "always", "secret", "myth" (전체 단어, 대소문자 구분 없음): 각 +3, 최대 +6
  • 세그먼트 길이 15~60초 포함: +2

최소 점수: 세그먼트는 목록에 포함되려면 총 5점이 필요합니다. 정렬: 점수 내림차순, 동점은 가장 빠른 시작 순. --top N은 목록을 제한합니다 (0 또는 음수 = 모든 자격 충족 세그먼트). 나열된 각 순간은 발견된 실제 신호와 함께 이유를 출력합니다. 이 도구에서는 이유 없는 점수가 존재하지 않습니다.

출력 JSON 스키마 (--json)

공통 필드: tool ("podcast-kit"), version, command, episode_file (파일 이름).

show-notes: title, format ("markdown" 또는 "text"), notes — 텍스트 뷰가 출력하는 것과 정확히 같은 렌더링된 노트 문자열. chapters: title, duration_seconds, valid (bool), problems (문자열 목록), warnings (문자열 목록), chapters — 각 {start_seconds, start, title, end_seconds, end, length_seconds} — youtube (내보내기 텍스트, 유효하지 않으면 null), podcasting20 (내보내기 객체, 유효하지 않으면 null). audiogram-plan: title, segments_scanned, floor (5), moments — 각 {rank, start_seconds, start, end_seconds, end, duration_seconds, speaker, text, score, reasons}. 자격을 충족하는 세그먼트가 없으면 moments는 []이고 note 필드가 최소 점수를 넘지 못했음을 설명합니다 (exit 1).

오류 발생 시, stdout은 단일 객체: {"error": "<메시지>"}이며 exit 코드는 2입니다. --json 모드에서는 argparse 사용법 오류도 포함됩니다. 일반 텍스트나 traceback이 출력되지 않습니다.

종료 코드

  • 0 — 명령어 성공; audiogram-plan의 경우 최소 하나의 세그먼트가 최소 점수를 넘음.
  • 1 — 결과 발견: chapters에서 검증 문제 발견(내보내기 생성되지 않음), 또는 audiogram-plan에서 클립할 가치가 있는 세그먼트를 찾지 못함. 어느 쪽도 충돌이 아닙니다 — 발견 결과에 따라 조치하세요.
  • 2 — 오류: 에피소드 파일이 없거나 유효한 JSON이 아님, 필수 필드 누락, 잘못된 타임스탬프, 잘못된 챕터 또는 세그먼트, 유효하지 않은 플래그. 실패한 실행의 출력 사실을 인용해서는 안 됩니다.

agent가 반드시 준수해야 할 한계 및 정직성 규칙

  • 잘못된 챕터는 아무것도 내보내지 않습니다. chapters가 exit 1로 종료될 때, JSON 출력의 chapters 배열에서 내보내기를 재구성하여 게시하지 마십시오 — 나열된 문제가 바로 플레이어가 이를 무시하는 이유입니다. 에피소드 파일을 수정하고 다시 실행하세요.
  • 경고는 문제가 아닙니다. 경고가 있는 유효한 목록은 게시될 수 있습니다. YouTube는 챕터를 표시하지 않을 수 있지만(너무 적거나 하나가 너무 짧음) 포드캐스트 앱에서는 표시될 것이라고 명확히 말하세요.
  • 점수는 예측이 아닙니다. 순간을 "텍스트 신호에 의해 1순위로 선정됨"이라고 보고하고, 절대 "최고의 순간" 또는 "좋은 성과를 낼 클립"이라고 하지 마십시오. 이 도구는 녹음을 들을 수 없습니다. 전달 방식에 따라 낮은 점수의 세그먼트가 올바른 클립이 될 수 있으며, 계획은 그렇게 말합니다.
  • audiogram-plan의 exit 1은 빈 에피소드를 의미하지 않습니다. 순위가 매겨진 신호를 가진 세그먼트가 없다는 뜻입니다. "좋은 순간이 없다"고 보고할 때는 이 도구가 텍스트만 읽는다는 조건을 반드시 함께 명시하세요.
  • 계획은 파일이 아닙니다. audiogram-plan은 타임스탬프와 텍스트를 생성합니다. 렌더링 도구가 실제로 계획에서 오디오그램을 만들기 전까지는 오디오그램이 존재한다고 사용자에게 알리지 마십시오.
  • 로컬 전용: 이 도구는 명령줄에 지정된 에피소드 파일만 읽고 아무 곳에도 데이터를 보내지 않습니다.

관련 스킬