Skip to main content

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 --pod to 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 --since with a one-day buffer to be safe
  • This tool only handles downloading and transcription. Downstream processing is intentionally left to the user

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pod_scribe-0.1.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pod_scribe-0.1.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

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

Hashes for pod_scribe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2e3468bc9646e1abad45b9a809a47a355e30131cbf2c03f9e4fdc38066d43144
MD5 ae9cb5de0e5b433cd2fea61453936e76
BLAKE2b-256 0e021f03000bb36962adf1c832d750c3f6fe9e78f6e91688ba5a4c211b9de83e

See more details on using hashes here.

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

Hashes for pod_scribe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 81b6f879055d446e7376255a7562d11b5a462efc658f7eab2cb4b80b2d341d65
MD5 4dbb09f0ca9d84154df6ecd4df11f15b
BLAKE2b-256 fba19646b3ec1e8266795def6410d1c43cbfec6e11bc2f68ce57fe3a22a6fd3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page