Features
- Podcasts (full episodes)
- Support Apple Podcasts episode URLs via iTunes Lookup + enclosure transcription (avoids slow/blocked HTML).
- Support Spotify episode URLs via the embed page (
/embed/episode/...) to avoid recaptcha; fall back to iTunes RSS when embed audio is DRM/missing. - Prefer local
whisper.cppwhen installed + model available (no API keys required for transcription). - Whisper transcription works for any media URL (audio/video containers), not just YouTube.
- Language
- Add
--language/--lang(default:auto, match source language). - Add config support via
output.language(legacylanguagestill supported).
- Add
- Progress UI
- Add two-phase progress for podcasts: media download + Whisper transcription progress.
- Show transcript phases (YouTube caption/Apify/yt-dlp), provider + model, and media size/duration.
Changes
-
Transcription
- Add lenient ffmpeg transcode fallback for local Whisper when strict decode fails (e.g. Spotify AAC).
-
Models
- Add
zai/...model alias with Z.AI base URL + chat completions by default. - Add
OPENAI_USE_CHAT_COMPLETIONS+openai.useChatCompletionsconfig toggle.
- Add
-
Metrics / output
--metrics on|detailed: finish line includes compact transcript stats (… words, …) + media duration (when available);--metrics detailed: also prints input/transcript sizes + transcript source/provider/cache; hidescalls=1.- Smarter duration formatting (
1h 13m 4s,44s) and rounded transfer rates. - Make Markdown links terminal-clickable by materializing URLs.
--metrics on|detailedrenders a single finish line with a compact transcript block (… words, …) before the model.
-
Cost
- Include OpenAI Whisper transcription estimate (duration-based) in the finish line total (
txcost=…); configurable viaopenai.whisperUsdPerMinute.
- Include OpenAI Whisper transcription estimate (duration-based) in the finish line total (
Docs
- Add
docs/language.mdand document language config + flag usage.
Tests
- Add JSON-LD graph extraction coverage.
- Extend live podcast-host coverage (Podchaser, Spreaker, Buzzsprout).
- Raise global branch coverage threshold to 75% and add regression coverage for podcast/language/progress paths.