Podcastfy 配置指南:从 API Key 到多 TTS 引擎的完整实战手册
发布时间:2026/9/17 2:39:29 锦皓数字建站

Podcastfy 配置指南从 API Key 到多 TTS 引擎的完整实战手册【免费下载链接】podcastfyAn Open Source Python alternative to NotebookLMs podcast feature: Transforming Multimodal Content into Captivating Multilingual Audio Conversations with GenAI项目地址: https://gitcode.com/GitHub_Trending/po/podcastfyPodcastfy 是一个用 GenAI 将多模态内容网页、PDF、图片、YouTube、纯文本转化为多语言双人对话式播客的开源 Python 项目。本文以docs/source/usage/config.md的配置体系为主线系统讲解.env与config.yaml的分层配置模型、五种 TTS 引擎OpenAI / ElevenLabs / Edge / Google Gemini / Google MultiSpeaker的选择策略与 API Key 要求、Google TTS 多说话人模型的完整开通流程并结合仓库源码说明每个配置项的真实作用。读完本文你将能独立完成 Podcastfy 从零配置到多 TTS 引擎自由切换的全部实操。一、配置总览.env与config.yaml的分层设计Podcastfy 采用敏感信息与环境信息分离的双文件配置模型.env文件存放 API Key 等敏感信息由 podcastfy/utils/config.py 通过python-dotenv的find_dotenvload_dotenv自动加载加载路径是当前工作目录向上递归查找的第一个.env。config.yaml文件存放非敏感配置输出目录、TTS 设置、内容生成参数等路径解析顺序见get_config_path()先查包根目录即 podcastfy/config.yaml找不到再回退到当前工作目录。从源码看podcastfy/utils/config.pyConfig类初始化时会读取.env中的GEMINI_API_KEY、OPENAI_API_KEY、ELEVENLABS_API_KEY为实例属性用yaml.safe_load解析config.yaml通过_set_attributes()把 YAML 顶层键名转大写后setattr到实例上如content_generator变为config.CONTENT_GENERATOR若存在output_directories配置自动os.makedirs(..., exist_okTrue)创建输出目录。此外Config.configure(**kwargs)支持运行时动态覆写配置JINA_API_KEY、GEMINI_API_KEY、OPENAI_API_KEY、ELEVENLABS_API_KEY四个键可直接设置属性其余键必须已存在于 YAML 中否则抛出ValueError。1.1 创建.env文件在项目根目录创建.env写入你的 API KeyGEMINI_API_KEYyour_gemini_api_key_here ELEVENLABS_API_KEYyour_elevenlabs_api_key_here OPENAI_API_KEYyour_openai_api_key_hereAPI Key 要求GEMINI_API_KEY不使用本地 LLM即不设置is_localTrue时生成播客脚本transcript必需免费 Key 可在 Google AI Studio 获取。OPENAI_API_KEY或ELEVENLABS_API_KEY音频生成必需除非你使用 Microsoft Edge TTStts_modeledge免费且无需任何 Key。[!Note] 永远不要分享.env文件也不要将其提交到版本控制其中包含敏感信息。config.yaml不含敏感数据可以共享和纳入版本管理。1.2 验证配置是否加载成功podcastfy/utils/config.py 内置了一个main()自检入口直接运行即可打印各 Key 的装载状态python -m podcastfy.utils.config输出示例Testing Config class: GEMINI_API_KEY: Set OPENAI_API_KEY: Set ELEVENLABS_API_KEY: Not set Warning: The following configuration values are missing: - ELEVENLABS_API_KEY Please ensure these are set in your .env file. Testing get method with default value: NON_EXISTENT_KEY: Default Value二、示例配置组合按使用场景选择 LLM 与 TTS原文档给出的三档典型配置组合对应三种完全不同的成本与质量路径配置方案基础 LLMTTS 模型所需 API Key默认方案GeminiOpenAIGEMINI_API_KEY和OPENAI_API_KEY零 Key 方案本地 LLMEdge无推荐方案GeminigeminiGoogleGEMINI_API_KEY结合当前仓库实现各方案的实际含义如下默认方案LLM 走 Gemini 生成脚本音频走 OpenAI TTStts-1-hd。对应 podcastfy/config.yaml 中content_generator.llm_model: gemini-2.5-flash与 podcastfy/conversation_config.yaml 中text_to_speech.default_tts_model: openai。零 Key 方案脚本由本地 llamafile 生成见下文本地 LLM章节音频走免费 Edge TTS。从 podcastfy/tts/providers/edge.py 可以看到 EdgeTTS 完全不需要 API Key。推荐方案LLM 与音频全部走 Google 生态只需要一个GEMINI_API_KEY。注意gemini单说话人 Journey 音色虽只支持英文但成本更低geminimultien-US-Studio-MultiSpeaker支持多说话人但需要额外开通权限详见下一节。原文档对 TTS 引擎的经验总结保持原文观点在实际使用体验中ElevenLabs 与 Google TTS 模型是音频生成质量最好的两个选择其中 Google TTS 因具备多说话人能力而略胜一筹。ElevenLabs 最贵但配置简单、定制能力强音色选项丰富、支持多语言Google TTS 更便宜但仅限英文且需要额外的开通步骤。三、Google TTSgemini / geminimulti完整开通指南在 podcastfy/client.py 中tts_model参数可选值包括openai、elevenlabs、edge、gemini等从 podcastfy/tts/factory.py 与 provider 目录podcastfy/tts/providers/可确认实际支持的提供方为elevenlabs、gemini、geminimulti、openai、edge。其中gemini走 Google Cloud Text-to-Speech 的单说话人 Journey 音色geminimulti走en-US-Studio-MultiSpeaker多说话人模型。Google TTS 使用 Google Cloud API Key——可以直接复用你已有的 Gemini Key也可以新建一个。拿到 Key 之后还需要完成两个一次性步骤Step 1在 API Key 上启用 Cloud Text-to-Speech API打开 https://console.cloud.google.com/apis/dashboard选择你的项目或通过项目列表 → new project 创建新项目点击页面顶部的 ENABLE APIS AND SERVICES在搜索框中输入 text-to-speech点击 Cloud Text-to-Speech API再点击 ENABLE完成后应位于 https://console.cloud.google.com/apis/library/texttospeech.googleapis.com?project... 页面。Step 2为 API Key 授予 Text-to-Speech 权限打开 https://console.cloud.google.com/apis/credentials点击你正在用于 Gemini 的那个 Key下拉到 API Restrictions将 Cloud Text-to-Speech API 加入允许列表。这些步骤只需做一次之后便能持续使用。需要特别提醒多说话人音色MultiSpeaker存在项目级访问限制。仓库中 data/images/google-multispeaker-support.png 记录了真实用户遇到的典型报错RuntimeError: Failed to generate audio: 403 Multi-speaker voices are only available to allowed projects403多说话人音色仅对已获批准的项目开放。如果使用geminimulti时遇到该错误需要为你的 GCP 项目申请多说话人访问权限。从 podcastfy/tts/providers/geminimulti.py 可以看到validate_parameters强制要求多说话人模型必须为en-US-Studio-MultiSpeaker否则直接抛出ValueError这解释了为什么该模型必须配合专门的权限开通流程使用。四、对话配置与本地 LLM 的入口原文档在此处仅作指引本节给出两个子指南的完整要点详见对应文档全文。4.1 对话配置Conversation Configuration对话风格、角色设定、语言、创意度等对话层参数由独立的 podcastfy/conversation_config.yaml 管理由 podcastfy/utils/config_conversation.py 的ConversationConfig继承自NestedConfig负责加载支持点号嵌套取值如get(text_to_speech.default_tts_model)、get_list()逗号分隔字符串转列表、以及基于默认配置的深度合并覆写。完整自定义说明见 docs/source/usage/conversation_custom.md。4.2 本地 LLMRunning Local LLMs本地 LLM 通过 llamafile 方式运行配置上只需三步从 HuggingFace 下载 llamafile → 赋可执行权限 → 启动服务默认监听http://localhost:8080。Python API 中通过is_localTrue启用CLI 中通过--local/-l参数启用python -m podcastfy.client --url https://example.com/article1 --transcript-only --local注意事项本地模型性能、资源占用、多模态能力、稳定性、上下文窗口均与大型商用模型存在差距生产化前务必充分测试或人工校验脚本。详见 docs/source/usage/local_llm.md。五、可选项配置config.yaml的完整参数清单原文档指出config.yaml可调整输出目录、TTS 设置与内容生成选项并链接到 docs/source/usage/config_custom.md。当前仓库实际生效的配置文件为 podcastfy/config.yaml 与 podcastfy/conversation_config.yaml。以下按模块整理全部核心参数。5.1 输出目录Output Directories定义在 podcastfy/conversation_config.yaml 的text_to_speech.output_directories下由 podcastfy/text_to_speech.py 的_setup_directories()读取并自动创建transcripts: ./data/transcripts生成的脚本文件保存目录audio: ./data/audio生成的音频文件保存目录。5.2 文本转语音TTS设置各引擎的音色与模型配置均集中在text_to_speech区块其中default_tts_model决定未显式指定时的默认引擎当前为openai。下表汇总 podcastfy/conversation_config.yaml 中各引擎默认配置引擎question 音色answer 音色模型ElevenLabsChrisJessicaeleven_multilingual_v2OpenAIechoshimmertts-1-hdEdgeen-US-JennyNeuralen-US-EricNeural—免费Gemini单说话人en-US-Journey-Den-US-Journey-O—GeminiMulti多说话人RSen-US-Studio-MultiSpeaker注意docs/source/usage/config_custom.md 中 ElevenLabs 的 answer 音色写为 BrittneyHart而当前 podcastfy/conversation_config.yaml 实际为 Jessica请以仓库当前配置文件为准。通用 TTS 参数audio_format: mp3输出音频格式temp_audio_dir: data/audio/tmp/音频处理的临时目录podcastfy/text_to_speech.py 会将其解析为包内绝对路径并自动创建ending_message: See You Next Time!播客结尾追加的收尾语。TTS 引擎的底层实现差异源码视角单说话人引擎ElevenLabs / OpenAI / Edge / Geminipodcastfy/text_to_speech.py 的_generate_audio_segments()先把脚本按Person1/Person2标签拆成 QA 对逐个生成音频段再由_merge_audio_files()按问题在前、回答在后的顺序合并为完整音频多说话人引擎geminimulti不走逐段合并而是直接把两个说话人角色塞进 Google 的MultiSpeakerMarkup.Turn结构见 podcastfy/tts/providers/geminimulti.py由 Google 端完成双人对话合成最后用libmp3lame以 320k 码率导出。5.3 内容生成器Content Generator定义在 podcastfy/config.yaml 的content_generator区块控制 LLM 生成脚本的行为参数默认值说明llm_modelgemini-2.5-flash用于生成播客脚本的主 LLMmeta_llm_modelgemini-2.5-flash元任务如长文规划使用的 LLMmax_output_tokens8192LLM 单次输出的最大 token 数prompt_templatesouzatharsis/podcastfy_multimodal_cleanmarkup脚本生成的提示模板含 commit 版本号b2365f11longform_prompt_templatesouzatharsis/podcastfy_longform长文播客提示模板cleaner_prompt_templatesouzatharsis/podcastfy_longform_clean长文清洗提示模板rewriter_prompt_templatesouzatharsis/podcast_rewriter脚本改写提示模板5.4 内容提取器Content Extractor与网站提取器Website Extractorcontent_extractor.youtube_url_patterns识别 YouTube URL 的模式当前为youtube.com、youtu.bewebsite_extractor.jina_api_urlJina 内容提取 API 地址当前为https://r.jina.aiwebsite_extractor.markdown_cleaning.remove_patterns从提取的 Markdown 中剔除图片链接!\[.*?\]\(.*?\)、超链接\[([^\]])\]\([^\)]\)与裸 URLhttps?://\S|www\.\S保证喂给 LLM 的正文干净无干扰。注意podcastfy/config.yaml 中存在第二处重复的website_extractor区块含unwanted_tags、user_agent、timeout等字段属于仓库当前文件中的历史残留从结构看后定义的键会覆盖前一个同名键使用默认配置时不会产生实际影响。5.5 YouTube 转录器与日志youtube_transcriber.remove_phrases转录文本中要移除的短语当前为[music]logging.level日志级别默认INFOlogging.format日志格式串默认%(asctime)s - %(name)s - %(levelname)s - %(message)s。5.6 运行时指定 TTS 模型除了修改配置文件tts_model也可以在调用时显式传入优先级高于配置默认值Python APIpodcastfy/client.py 中tts_model未显式提供时回退到conversation_config.get(default_tts_model, openai)显式传入时直接使用且当tts_model ! edge时自动从配置取对应 API Key见 podcastfy/client.py。CLIpodcastfy/client.py 提供--tts-model/-tts参数取值openai、elevenlabs、edge、gemini。六、进一步定制如需更深度的定制对话风格、角色、语言、长文分块策略max_num_chunks/min_chunk_size等原文档推荐的两份进阶文档为docs/source/usage/conversation_custom.md对话级自定义docs/source/usage/config_custom.md配置级进阶说明含各引擎音色与通用参数的逐项释义。总结Podcastfy 的配置体系可以用一句话概括.env管密钥、config.yaml管参数、conversation_config.yaml管对话。对于大多数用户最小可用配置只需要一个GEMINI_API_KEY默认方案还需OPENAI_API_KEY追求零成本可用 Edge TTS 本地 LLM追求最佳音质体验则推荐 Google 生态按本文第三节完成 Cloud TTS API 开通后即可解锁gemini单说话人与geminimulti多说话人两种高质量音色。【免费下载链接】podcastfyAn Open Source Python alternative to NotebookLMs podcast feature: Transforming Multimodal Content into Captivating Multilingual Audio Conversations with GenAI项目地址: https://gitcode.com/GitHub_Trending/po/podcastfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。