Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Media Toolkit — a Claude Code plugin

Twelve skills for getting content in, getting text out, and knowing what is left. Download YouTube videos, podcast feeds and web articles; extract audio, OCR'd text and transcripts; pull frames out of video; and drive a whole tree with one command.

The skills are model-invoked — you describe what you want, you do not address them by name. "Download this talk into ./Videos and transcribe it" reaches download-youtube-videos and then transcribe-audio on its own.

Installation

In a Claude Code session:

/plugin marketplace add marcelerz/Claude
/plugin install media-toolkit@marcelerz

The first line registers this repository as a marketplace named marcelerz; the second installs the plugin from it. From a terminal the same thing reads:

claude plugin marketplace add marcelerz/Claude
claude plugin install media-toolkit@marcelerz

Add --scope project or --scope local to install somewhere other than your user scope. To confirm it landed:

claude plugin list
claude plugin details media-toolkit    # component inventory and projected token cost

Installing the plugin does not install ffmpeg, yt-dlp, whisper or tesseract. The skills are wrappers around tools that must already be on the machine. Ask Claude to check my media tools as the first thing you do — see Requirements.

Updating

Updating takes two commands, and the order matters:

/plugin marketplace update marcelerz
/plugin update media-toolkit

The first refreshes the marketplace's cached clone of this repository. The second reinstalls the plugin from that cache. Running only the second updates nothing — and it reports success, because the cache still advertises the version you already have.

Then restart Claude Code; an update does not apply to the running session.

Terminal equivalents:

claude plugin marketplace update marcelerz
claude plugin update media-toolkit

claude plugin marketplace update with no name refreshes every marketplace you have added.

To back out:

/plugin uninstall media-toolkit
/plugin marketplace remove marcelerz

Requirements

The fastest way to find out where you stand is to ask:

check my media tools

which runs the check-media-tools skill and prints every dependency, whether it is present, which skills need it, and the exact command that installs it. It is read-only; it never installs anything unless you ask it to.

Dependency Needed by Level macOS Debian/Ubuntu
curl, python3 download-podcast, download-webpage, build-manifest required preinstalled preinstalled
yt-dlp download-youtube-videos required brew install yt-dlp pip3 install --user yt-dlp
ffmpeg (+ ffprobe) 5 skills required brew install ffmpeg apt-get install ffmpeg
whisper-cli transcribe-audio, process-videos, extract-all required brew install whisper-cpp build from source
a ggml model transcribe-audio, process-videos, extract-all required see below see below
poppler extract-text required brew install poppler apt-get install poppler-utils
tesseract extract-text, extract-video-frames required brew install tesseract apt-get install tesseract-ocr
language packs extract-text optional brew install tesseract-lang apt-get install tesseract-ocr-deu
pandoc extract-text, download-webpage required brew install pandoc apt-get install pandoc
trafilatura download-webpage optional pip3 install --user trafilatura same
defusedxml download-podcast optional pip3 install --user defusedxml same

tesseract alone is not enough. A stock install carries only eng, while extract-text defaults to eng+deu+nld+fra. The language packs come from tesseract-lang (macOS) or per-language tesseract-ocr-* packages (Debian).

The whisper model is a separate download and there is no package for it:

mkdir -p ~/models && curl -L -o ~/models/ggml-small.en.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.en.bin

Set MODELS_DIR to keep models elsewhere. Other sizes (tiny.en, medium.en, or the multilingual variants without .en) follow the same URL pattern and are selected with -m.

To see the commands for whatever your machine is missing, without running them:

plugin/skills/check-media-tools/scripts/check-media-tools.sh --install

Add --yes to actually execute them.

Skills

# Skill Does
1 download-youtube-videos Videos into a folder via yt-dlp, optionally with subtitles or a whole playlist
2 download-podcast Episodes from an RSS feed, named YYYY-MM-DD Title.mp3
3 download-webpage An article as clean text or markdown, boilerplate stripped
4 extract-audio The audio track out of video, to mp3/m4a/wav/flac/opus
5 extract-text Text from PDFs, scans, images and documents, with adaptive OCR
6 transcribe-audio Speech to .srt/.txt/.vtt with whisper.cpp
7 extract-video-frames Stills by interval, count or scene change, optionally OCR'd
8 process-videos Per video: audio, transcript, its own folder and a README
9 extract-all Walks a whole tree and routes every file to the right skill
10 summarize-transcripts A real outline and timestamped key moments from a transcript
11 build-manifest Coverage report: what is extracted, missing, or stale
12 check-media-tools Which dependencies are installed, and how to install the rest

Skills 1–3 acquire, 4–7 extract, 8–9 compose, 10–12 report and assist.

Repository layout

.claude-plugin/marketplace.json   ← the marketplace; points at ./plugin
plugin/
  .claude-plugin/plugin.json      ← the plugin manifest
  skills/<name>/
    SKILL.md                      ← frontmatter + instructions
    README.md                     ← the detail
    scripts/<name>.sh             ← the tool
tools/                            ← consistency checkers, not shipped
docs/skill-backlog.md             ← ideas not built

Everything under plugin/ ships to every user who installs this. Do not create a commands/, agents/ or hooks/ directory there — those are plugin component paths and would ship too. Repository tooling stays in tools/ at the root.

Checking the layout

python3 tools/check-all.py
claude plugin validate . --strict
claude plugin validate ./plugin/.claude-plugin/plugin.json --strict
claude plugin validate ./plugin/skills --strict

The three validate calls check manifest schemas. They are much weaker than they look — see ARCHITECTURE.md. tools/check-all.py is what actually enforces this repository's conventions.

Releasing

The version appears in both .claude-plugin/marketplace.json and plugin/.claude-plugin/plugin.json and the two must agree. Bump both, commit, then:

claude plugin tag ./plugin --dry-run
claude plugin tag ./plugin --push -m "media-toolkit %s"

claude plugin tag validates that the manifests agree before creating the media-toolkit--v<version> tag. tools/check-docs.py enforces the same rule at commit time, so a mismatch fails before it reaches a tag.

Users see a new version only after the default branch moves, so the order is: bump both manifests → commit → push → tag.

Licence

MIT — see LICENSE.

About

Claude Marketplace

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages