PodCastLM:把 PDF / URL 一键转成播客对话与音频

NotebookLM 风格的播客生产线:输入 PDF 或 URL,输出双人对话、摘要、节目简介与 MP3。

开源项目地址:https://github.com/ylouis83/Podcastllm


Highlights

  • 一键生成:播客脚本 + 摘要 + 节目简介,流式返回,前端实时渲染。
  • 多路 TTS:FishAudio、Azure Speech、Qwen3 TTS,主持人/嘉宾音色可切换。
  • 本地转写:内置 Whisper,本地推理;支持 Web 上传或 CLI 批量转写并导出时间戳。
  • 输入灵活:PDF 上传或用 Jina 抓取 URL。
  • 低延迟流式:对话生成、摘要、信息流均流式输出。

Architecture

  • LLM:默认 Llama 3.1 405B(Fireworks),可切换百炼/Qwen。
  • TTS:Azure OpenAI、FishAudio、Qwen3 TTS,多音色多语种。
  • 转写:本地 Whisper,WHISPER_MODEL_NAME 控制模型体量(small/base/medium/large-v3)。
  • 前端:Vite + React + Tailwind,流式渲染,Netlify 一键部署。
  • 后端:FastAPI + Uvicorn,提供生成、摘要、转写、音频任务状态查询等接口。

Run It Locally

Backend

cd backend
cp .env.example .env  # 填写密钥
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-local.txt
uvicorn main:app --reload --host 0.0.0.0 --port 8000

常用环境变量:

  • BAILIAN_API_KEY / QWEN_API_KEY:Qwen LLM & Qwen3 TTS(Fireworks 失效兜底)。
  • FIREWORKS_API_KEY(可选):启用 Llama 3.1 405B(FIREWORKS_MODEL_ID 可覆盖)。
  • SPEECH_KEY / SPEECH_REGION:Azure TTS。
  • FISHAUDIO_KEY:FishAudio TTS。
  • JINA_KEY:URL 抓取。
  • WHISPER_MODEL_NAME:Whisper 模型名,默认 small

Frontend

cd frontend
cp .env.template .env
# 推荐填写
# VITE_HOST_URL=http://localhost:8000
# VITE_BASE_URL=http://localhost:8000/api/v1/chat
pnpm install
pnpm dev --host

API Endpoints

  • POST /api/v1/chat/generate_transcript:生成播客对话(PDF/URL + 提问,流式 JSON)。
  • POST /api/v1/chat/summarize:生成摘要(流式)。
  • POST /api/v1/chat/pod_info:生成节目简介与要点。
  • POST /api/v1/chat/transcribe_audio:上传音频并用本地 Whisper 转写。
  • POST /api/v1/chat/generate_audio:根据文本生成音频,返回 task_id
  • GET /api/v1/chat/audio_status/{task_id}:查询音频合成结果。
  • GET /api/v1/chat/speekers:获取可选音色列表。

CLI Transcription

PYTHONPATH=backend WHISPER_MODEL_NAME=base python scripts/local_transcribe.py path/to/audio.m4a --output-file tmp/result.txt

Use Cases

  • 内容二次创作:长文档/报告快速转成播客,便于通勤收听。
  • 课程/会议回放:上传录音,转写并生成摘要/对话串讲。
  • 多语音色播客:主持人/嘉宾音色随时切换,快速迭代节目风格。

Roadmap

  • 增强多说话人角色配置与情绪控制。
  • 加入节目封面自动生成。
  • 提供一键部署脚本(Docker Compose)。

Links

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to Top