← Back to the collection

Work With Media

Turn audio and video into text on macOS. Two complementary skills:

The skills compose: for a YouTube URL, the yt-dlp skill usually finishes the job from captions alone; when a video has no captions or the user needs high accuracy, yt-dlp downloads the audio and hands off to macwhisper-cli for transcription.

Installation

Run these in a terminal (not inside a Claude Code session):

claude plugin marketplace add jtsternberg/claude-plugins
claude plugin install work-with-media@jtsternberg

Prerequisites

macwhisper-cli skill

yt-dlp skill

brew install yt-dlp ffmpeg

Non-Homebrew install options: yt-dlp · ffmpeg.

Why MacWhisper?

MacWhisper is the speech-to-text tool I reach for on macOS. It’s positioned as a file-transcription app, but ships a first-class system-wide dictation mode and a full model catalog in the same package — for a single one-time payment, with everything running on-device.

If you don’t own MacWhisper yet: https://goodsnooze.gumroad.com/l/macwhisper. The macwhisper-cli skill wraps MacWhisper’s built-in mw CLI, so the app itself is required.

See more about MacWhisper in this video.

Note: I am not affiliated, just a fan.

Structure

plugins/work-with-media/
├── .claude-plugin/plugin.json
├── README.md
├── shared/
│   ├── output-conventions.md     ← how both skills manage /tmp files + Read-on-demand
│   └── routing.md                ← decision matrix for which skill handles which input
└── skills/
    ├── macwhisper-cli/           ← local-file transcription
    │   ├── SKILL.md
    │   └── references/
    │       └── choosing-a-model.md
    └── yt-dlp/                   ← URL text/audio extraction
        ├── SKILL.md
        └── references/
            └── setup.md

Both skills link to the files under shared/ rather than inlining the conventions, so the two skills can’t drift apart on temp-file naming, Read-on-demand defaults, or the subs-first-vs-transcription decision.

Additional Documentation