feat: add podcast-transcript-fetcher skill - #48
Conversation
Greptile SummaryThis PR adds a new
Confidence Score: 5/5The changes are additive and focused on a new skill entry, documentation, and a standalone CLI. No blocking correctness or security issues were identified in the reviewed changes, and the modified registry and skill files appear consistent with the described behavior.
What T-Rex did
Reviews (7): Last reviewed commit: "fix(try_tier2): save fallback audio to p..." | Re-trigger Greptile |
|
T-Rex pricing update — T-Rex was free through June 2026. Effective July 1, 2026, T-Rex adds 2 credits on top of the standard 1-credit review (3 total). T-Rex settings |
There was a problem hiding this comment.
Pull request overview
Adds a new OpenDirectory skill, podcast-transcript-fetcher, including a Python CLI plus supporting registry/docs, and registers it in the repo-wide skill registry + root README skill list.
Changes:
- Introduces
podcast-transcript-fetcherskill documentation and metadata (SKILL.md, README.md, package.json, .env.example). - Adds a transcript-fetching CLI (
scripts/get_transcript.py) and a podcast registry (scripts/podcasts.json). - Updates repo registries (
packages/cli/registry.json, rootREADME.md) to include the new skill and increment skill count.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 11 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/podcast-transcript-fetcher/SKILL.md | Skill instructions and usage docs for the new transcript fetcher. |
| skills/podcast-transcript-fetcher/scripts/podcasts.json | Podcast registry (RSS feeds + transcript source metadata). |
| skills/podcast-transcript-fetcher/scripts/get_transcript.py | Core CLI implementing RSS search/batch + Groq/local transcription + Taddy fallback. |
| skills/podcast-transcript-fetcher/references/podcasts.md | Reference documentation for source availability and access methods. |
| skills/podcast-transcript-fetcher/README.md | Skill README with install/usage/how-it-works overview. |
| skills/podcast-transcript-fetcher/package.json | Skill metadata (name/version/category/description). |
| skills/podcast-transcript-fetcher/.env.example | Example environment variables for API keys. |
| README.md | Updates global skill count and adds the new skill to the All Skills table. |
| packages/cli/registry.json | Registers the new skill in the CLI registry. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
… and search pipeline fixes
- Add ThreadPoolExecutor parallel transcription via --parallel N flag
- Add _transcribe_job() helper for independent per-episode processing
- Add _get_api_keys() to scan GROQ_API_KEY, GROQ_API_KEY_2, ... from env
- Add _pick_key() round-robin key assignment across workers
- Refactor _transcribe_groq() to accept optional api_key parameter
- Rewrite batch_transcribe() and _run_search_pipeline() with concurrent.futures
- Fix search pipeline deduplication: ep.get('url') -> ep.get('link')
- Fix search pipeline filename index collision: idx + 1 instead of len(picked)
- Fix podcast_filter resolution in search pipeline via find_podcast()
- Fix try_tier1 github_archive fallthrough (no longer early-returns None)
- Fix try_tier2 temp dir cleanup with try/finally block
- Fix find_episode() returning episodes[0] on miss -> returns None
- Update .env.example with multi-key docs (GROQ_API_KEY_2, ...)
- Add parallel transcription section to SKILL.md, README.md, podcasts.md
…sources, Tier 2 recommended - Remove broken free sources: youtubetranscript.com, Spoken.md API, YouTube transcript handler - Tier 2 (RSS+Groq Whisper) is now the recommended approach - fast, free, and reliable - Tier 1 sources are best-effort (limited to GitHub archive for Lenny's) - Tier 3 Taddy API remains as commercial/premium option - Update README, SKILL.md, and registry to reflect new tier structure
…h, batch last-N ordering, search dedup - find_podcast: use key=lambda for sort to avoid TypeError when scores are tied (Python 3 can't compare dicts as tiebreaker) - batch_transcribe: sort episodes by pub_date descending before selecting the most recent N, so order doesn't vary with RSS feed ordering - search pipeline dedup: track both GUID and link independently with separate seen sets to catch duplicates sharing the same URL
|
Addressed all 3 Greptile issues:
All verified: syntax clean, LSP clean, search/alias/lookup working correctly. |
…dir leak When download_audio() failed, the function returned None before entering the try/finally block, leaving tmp_dir on disk forever. Moved the download call inside try so finally always cleans up.
…doc references batch_transcribe: - Replace confusing indices/total-i math with enumerate(reversed(selected), start=1) per Greptile suggestion - no more off-by-one risk - Add ISO 8601 date parsing fallback in _parse_pub_date so sort works with non-RFC-2822 date formats (T-Rex tests use ISO dates) Cleanup stale references: - podcasts.json: fix description from 'podcast-transcript' to 'podcast-transcript-fetcher' - SKILL.md: remove youtubetranscript.com and Spoken.md references (sources removed) - references/podcasts.md: remove dead Spoken.md API section from Cheeky Pint
… cleanup
When no transcription backend is available (no GROQ_API_KEY and no
faster-whisper), the code printed 'Audio saved at: {tmp_path}' but
the finally block immediately deleted tmp_dir. Users could never
actually use the file. Now copies audio to output/{podcast}/audio/
before cleanup so the recovery message points to a real file.
Summary
Adds the podcast-transcript-fetcher skill to the OpenDirectory registry with Tier 2 (RSS+Groq Whisper) as the recommended approach.
What's included
Cleanup changes
Fixes included
Testing
Category
Research - helps find and retrieve podcast transcript content for analysis.