Download and transcribe podcasts locally using Whisper
Project description
pod-scribe
Download and transcribe podcast episodes locally. No cloud ASR costs — just your CPU and time.
Built for generating transcripts that can be fed into your own LLM workflows (summarization, Q&A, notes, etc).
How it works
RSS feed → download audio → local Whisper → transcript (.txt)
Transcripts are saved as plain text files, ready to paste into any LLM chat interface.
Requirements
- Python 3.11+
- faster-whisper (model downloads on first run)
- Proxy (only if required by your network)
Setup
conda create -n pod-scribe python=3.11
conda activate pod-scribe
pip install -r requirements.txt
cp config.example.yaml config.yaml
Edit config.yaml to configure RSS feeds and Whisper model settings.
Usage
Tip: use
--podto target a specific podcast by name (fuzzy match). Defaults to all feeds.
Download episodes
# Download the 3 most recent episodes (all feeds)
python run.py --download --last 3
# Download episodes since a specific date
# Tip: add a one-day buffer to account for timezone differences
python run.py --download --since 2026-03-01
# Target a specific podcast
python run.py --pod "Invest" --download --last 3
# Download a specific episode by title keyword
python run.py --pod "Invest" --download "stock"
Transcribe
# Transcribe all downloaded episodes that don't have a transcript yet
python run.py --transcribe
# Transcribe a specific episode by keyword
python run.py --transcribe "stock"
Download and transcribe together
python run.py --download --transcribe --last 3
python run.py --pod "Invest" --download --transcribe --since 2026-03-01
Whisper model sizes
| Model | Size | Speed (CPU) | Quality |
|---|---|---|---|
| small | ~500MB | ~0.6-0.8× realtime | good |
small is recommended for CPU-only environments — fast enough for most clean English audio.
Models are cached at ~/.cache/huggingface/hub/ after first download.
First run note: the model will be downloaded automatically. If you're in a restricted network region, set proxy environment variables before running. E.g,:
export https_proxy=http://127.0.0.1:7897 export http_proxy=http://127.0.0.1:7897
Configuration
rss:
feeds:
- name: "Invest Like the Best"
url: "https://feeds.megaphone.fm/CLS2859450455"
whisper:
model: small # small / medium / large-v3
language: null # null = auto-detect, or "en" / "zh"
proxy:
http: null # leave empty if not needed
https: null
output:
transcripts_dir: "./transcripts"
Suggested analysis prompt
Once you have a transcript, paste it into any LLM chat interface with a prompt. Below is the one I use now — feel free to adapt it to your own thinking style.
# ZH
- 你是一位批判性思维训练有素的分析师,擅长从对话性内容中提炼论证结构。
以下是一期播客的转录文稿。请按照以下4个步骤进行分析:
---
【第一步:论证结构梳理 + Fact Check(如适用)】
严格基于转录文本,不得添加未提及信息。
以表格呈现:
| 论点 | 支撑论据 | 论据类型 | 重要性 | 事实性核查 |
|------|--------|--------|------|------------|
| ... | ... | ... | 高/中/低 | ✅/⚠️/❌/🔍 |
要求:
- 每条尽量简洁(建议30–50字以内)
- 论据类型必须标注:(个人经验)(类比)(数据)(权威背书)(案例)
- 仅当涉及**明确可验证事实**时填写“事实性核查”:
- ✅ 可确认 / ⚠️ 存疑 / ❌ 有误 / 🔍 建议核实
- 并在单元格中简要说明依据(如:据领域共识 / 常识判断)
- 若该行无事实性内容,可留空或写“—”
---
【第二步:论证质量评估】
严格基于转录文本,不得添加文本中未提及的任何信息。
对每个论点逐一评估:
- 论据是否为直接证据,还是个人经验/类比/权威背书?
- 论证链条中是否存在跳跃或隐含假设?
- 样本是否有代表性?
---
【第三步:辩证反思】
允许调用训练知识,但须遵守以下规则:
- 反面论点须来自已知的学术争议、主流替代观点、或论证结构上的逻辑漏洞
- 必须注明来源类型,例如"据[领域]主流争议"或"从逻辑结构看"
- 不得凭空构造反例或捏造对立观点
- 推荐属于对立观点的不超过3个的高质量材料
---
【第四步:归纳总结】
在前三步的基础上,给出你对这期播客的整体判断。包含以下三点:
- 核心价值:这期播客最值得保留的洞见是什么?
- 最大局限:论证中的缺陷或盲点是什么?
- 你的建议:听完这期播客,听众最值得延伸阅读/思考的方向是什么?(不超过2个方向,须言之有据,不得泛泛而谈)
注意:
- 无论转录文本语言为何,所有输出均以中文呈现
# EN
You are an analyst highly trained in critical thinking, specializing in extracting and refining argumentative structures from conversational content.
Below is a transcript of a podcast episode. Please conduct an analysis following these 4 steps:
---
**【Step 1: Argumentative Structure Mapping + Fact Check (if applicable)】**
Strictly based on the transcript; do not add information not mentioned.
Present in a table:
| Argument | Supporting Evidence | Evidence Type | Importance | Fact Check |
| :--- | :--- | :--- | :--- | :--- |
| ... | ... | ... | High/Med/Low | ✅/⚠️/❌/🔍 |
Requirements:
- Each entry should be as concise as possible (suggested 30–50 words).
- Evidence types must be labeled: (Personal Experience), (Analogy), (Data), (Authority Endorsement), (Case Study).
- Only fill in the "Fact Check" column when **explicitly verifiable facts** are involved:
- ✅ Confirmed / ⚠️ Questionable / ❌ Erroneous / 🔍 Verification Recommended.
- Briefly state the basis in the cell (e.g., Based on field consensus / Common sense).
- If the row has no factual content, leave it blank or write "—".
---
**【Step 2: Argument Quality Assessment】**
Strictly based on the transcript; do not add any information not mentioned in the text.
Evaluate each argument individually:
- Is the evidence direct, or is it personal experience/analogy/authority endorsement?
- Are there leaps or hidden assumptions in the argumentative chain?
- Is the sample representative?
---
**【Step 3: Dialectical Reflection】**
Allowed to use trained knowledge, but must adhere to the following rules:
- Counter-arguments must come from known academic disputes, mainstream alternative views, or logical loopholes in the argumentative structure.
- Must specify the source type, e.g., "According to mainstream controversy in [Field]" or "From a logical structural perspective".
- Do not fabricate counter-examples or invent opposing views.
- Recommend no more than 3 high-quality materials belonging to opposing viewpoints.
---
**【Step 4: Summary & Conclusion】**
Based on the previous three steps, provide your overall judgment of this podcast. Include the following three points:
- Core Value: What is the most valuable insight to retain from this episode?
- Maximum Limitation: What are the flaws or blind spots in the argumentation?
- Your Suggestion: What are the most worthwhile directions for listeners to explore or reflect on after listening to this episode? (No more than 2 directions; must be evidence-based and not vague).
Note:
- Regardless of the language of the transcript, all final outputs must be presented in English.
Notes
- Transcripts and audio files are saved to
transcripts/(gitignored) - RSS publish dates may differ from podcast apps — use
--sincewith a one-day buffer to be safe - This tool only handles downloading and transcription. Downstream processing is intentionally left to the user
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pod_scribe-0.1.0.tar.gz.
File metadata
- Download URL: pod_scribe-0.1.0.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e3468bc9646e1abad45b9a809a47a355e30131cbf2c03f9e4fdc38066d43144
|
|
| MD5 |
ae9cb5de0e5b433cd2fea61453936e76
|
|
| BLAKE2b-256 |
0e021f03000bb36962adf1c832d750c3f6fe9e78f6e91688ba5a4c211b9de83e
|
File details
Details for the file pod_scribe-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pod_scribe-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81b6f879055d446e7376255a7562d11b5a462efc658f7eab2cb4b80b2d341d65
|
|
| MD5 |
4dbb09f0ca9d84154df6ecd4df11f15b
|
|
| BLAKE2b-256 |
fba19646b3ec1e8266795def6410d1c43cbfec6e11bc2f68ce57fe3a22a6fd3d
|