Skip to content
Back to skills

Movement Leader Media Transcribe

ASecurity

Transcribe YouTube and podcast items from a movement leader's harvest-manifest.json — yt-dlp auto-captions for video, Whisper for podcast RSS/mp3 URLs. Writes verbatim transcripts to docs/harvest/transcripts/ and updates the manifest. Run after movement-leader-content-harvest and before movement-leader-harvest-ingest when LINK/TRANSCRIBE media needs text.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 26, 2026
content-marketingbashapi

Works with

  • cli
  • api

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 26, 2026

npx -y skills add JoshuaShepherd/my-skills --skill movement-leader-media-transcribe --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Movement Leader Media Transcribe?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Movement Leader Media Transcribe
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joshuashepherd-movement-leader-media-transcribe-my-skills/badge)](https://www.skillsdirectory.com/skills/joshuashepherd-movement-leader-media-transcribe-my-skills)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: movement-leader-media-transcribe
description: >-
  Transcribe YouTube and podcast items from a movement leader's harvest-manifest.json — yt-dlp
  auto-captions for video, Whisper for podcast RSS/mp3 URLs. Writes verbatim transcripts to
  docs/harvest/transcripts/ and updates the manifest. Run after movement-leader-content-harvest
  and before movement-leader-harvest-ingest when LINK/TRANSCRIBE media needs text.
disable-model-invocation: true
---

# Movement Leader Media Transcribe

Process **primary** video and podcast items from `harvest-manifest.json` into searchable transcript files. This skill closes the transcribe queue left by content-harvest step 07.

## Invocation

```
/movement-leader-media-transcribe {leader-slug}
/movement-leader-media-transcribe danielle-strickland --types video,podcast-host
/movement-leader-media-transcribe deb-hirsch --max 10 --dry-run
/movement-leader-media-transcribe hugh-halter --refresh
```

Run from **monorepo root** (`movement-leader-websites/`).

### CLI (preferred for batch)

```bash
pnpm harvest:transcribe -- --slug {leader-slug}
pnpm harvest:transcribe -- --slug danielle-strickland --types video,podcast-host --dry-run
pnpm harvest:transcribe -- --slug deb-hirsch --max 20 --refresh
pnpm harvest:transcribe -- --slug deb-hirsch --skip-whisper   # YouTube only
```

| Flag | Effect |
|------|--------|
| `--slug` | Required leader slug |
| `--types` | Filter: `video`, `podcast-host`, `podcast`, `audio` (comma-separated) |
| `--dry-run` | Report what would run; no files written |
| `--max N` | Limit items (cost control for Whisper) |
| `--refresh` | Re-transcribe even when a transcript file exists |
| `--skip-whisper` | YouTube yt-dlp only; skip podcast Whisper |

## Prerequisites

1. `harvest-manifest.json` exists for the tenant (`docs/movement_leader_research/content/`)
2. **YouTube:** `yt-dlp` installed (`pip install yt-dlp`)
3. **Podcast Whisper:** `OPENAI_API_KEY` in tenant `.env.local` or environment
4. **Large audio (>25MB):** `ffmpeg` recommended

## What gets transcribed

Items where `primary: true` and type is media (`video`, `podcast-host`, `podcast`, `audio`, …) and:

- `disposition` is `TRANSCRIBE`, `LINK`, or FETCH video
- No clean transcript file yet (unless `--refresh`)

**Skip:** guest-only items marked `primary: false`, articles, SKIP disposition.

## Pipeline

| Source | Method | Output |
|--------|--------|--------|
| YouTube URL | yt-dlp EN subs → VTT parse | `docs/harvest/transcripts/{id}.md` |
| Podcast mp3 in `alt_urls` | curl download → Whisper | same |
| Already pending stub | Overwrite when successful | updates `transcript_method` in front-matter |

Each file uses harvest front-matter + **verbatim** transcript body (no summarization).

## After transcribe

1. Update `harvest-manifest.json` `harvested_path` + `transcript_status`
2. Run **`movement-leader-harvest-ingest`** to push transcripts into Supabase `videos.transcript` / `podcast_episodes.transcript`

## Related skills

- **`movement-leader-content-harvest`** — discovery + manifest (upstream)
- **`movement-leader-harvest-ingest`** — manifest → Supabase (downstream)
- **`youtube-transcript`** — ad-hoc single-video extraction (not manifest-driven)

## Session report

Print: slug, items attempted, transcribed / failed / skipped, word counts, Whisper cost note if applicable.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.